注册 登录
编程论坛 C语言论坛

自定义的adjust怎么才能对文件中某个的成绩修改并保存

ausring 发布于 2022-04-26 16:35, 1391 次点击
struct aca
{
    char name[10];//系名字
    int num;//编号
    int score;//总分
    int score1;//男子总分
    int score2;//女子总分
    float mscore[3];//男子项目成绩
    int male[3];//男子项目分数
    float fscore[3];//女子项目成绩
    int female[3];//女子项目分数
}aca[N];
void save()
{
    FILE *fp;
    int i;
    if((fp=fopen("score.txt","wb"))==NULL)
    {
        printf("cannot open the file stud!\n");
        exit(0);
    }
    for(i=0;i<N;i++)
    {
        if((fwrite(&aca[i],sizeof(struct aca),1,fp))!=1)
        printf("flie write error!\n");
    }
    fclose(fp);
}
int main()
{
    int i,k,l;
    for(i=0;i<N;i++)
    {
    printf("输入系编号:");
    scanf("%d",&aca[i].num);
    printf("输入系名字:");
    scanf("%s",aca[i].name);
    printf("输入男子组分数:\n");
    printf("100分数   成绩  200分数  成绩  400分数   成绩 \n");
    scanf("%d %f %d %f %d %f",&aca[i].male[0],&aca[i].mscore[0],&aca[i].male[1],&aca[i].mscore[1],&aca[i].male[2],&aca[i].mscore[2]);
    aca[i].score1=aca[i].male[0]+aca[i].male[1]+aca[i].male[2];
    printf("输入女子组分数:/n");
    printf("100分数   成绩  200分数  成绩  400分数   成绩 \n");
    scanf("%d %f %d %f %d %f",&aca[i].female[0],&aca[i].fscore[0],&aca[i].female[1],&aca[i].fscore[1],&aca[i].female[2],&aca[i].fscore[2]);
    aca[i].score2=aca[i].female[0]+aca[i].female[1]+aca[i].female[2];
    aca[i].score=aca[i].score1+aca[i].score2;
    }
    save();
}
int adjust()
{
    FILE *fp;
    int i,k,l,j,n;
    fp=fopen("score.txt","rb");
    for(i=0;i<N;i++)
    {
        fread(&aca[i],sizeof(struct aca),1,fp);
    }
    fclose(fp);
    printf("输入修改的学院序号:\n");
    scanf("%d",&j);
    printf("输入修改的项目序号:\n");
    scanf("%d",&k);
    printf(" 分数,成绩:\n");
    scanf("%d   %f",&aca[j-1].male,&aca[j-1].mscore);
    save();
    return 0;   
}
4 回复
#2
do8do8do82022-04-26 17:55
楼主用的是全局数组的数据结构
以TXT文本来存储数据
要想完成修改某个分数
那么就要查询出要修改的数据
所以adjust()缺少一个查询
#3
ausring2022-04-26 18:11
回复 2楼 do8do8do8
不太会用,能举个例子吗?
#4
do8do8do82022-04-27 17:12
1。 从txt读取到程序里的aca[N]:
fp=fopen("score.txt","rb");
    for(i=0;i<N;i++)
    {
        fread(&aca[i],sizeof(struct aca),1,fp);
    }
    fclose(fp);
2。输入要修改的内容的所在编号num
3。匹配num与aca[N].num, 找到相等时的aca[N]下标i
4。输入新的成绩newscore
5。把newscore 赋值给任意一个想要更改的项aca[i].int score;//总分
                          int score1;//男子总分
                          int score2;//女子总分
                          float mscore[3];//男子项目成绩
                          int male[3];//男子项目分数
                         float fscore[3];//女子项目成绩
                         int female[3];//女子项目分数
6。save();
1