m0_67141329 2022-05-15 00:20 采纳率: 100%
浏览 91
已结题

学生成绩管理系统,计算平均分写入文件

img


~
学生成绩管理系统,读取文件计算平均分写入文件,对平均分进行排序

  • 写回答

2条回答 默认 最新

  • 吕布辕门 后端领域新星创作者 2022-05-15 11:55
    关注
    
    # include
    
    # include
    
    # include
    
    # include
    
    # include
    
    # define eps 1;
    
    typedef struct
    
    {
    
    char name[50];
    
    int num;
    
    int Chinese;
    
    int Math;
    
    int English;
    
    int sum;
    
    }Node;
    
    Node student[1000];
    
    int n;
    
    char text[50];
    
    int cmp(const void *a, const void *b)
    
    {
    
    return (*(Node *)b).sum > (*(Node *)a).sum?1:-1;
    
    }
    
    int cmpnum(const void *a, const void *b)
    
    {
    
    return (*(Node *)a).num > (*(Node *)b).num?1:-1;
    
    }
    
    void showstudent()
    
    {
    
    void menu();
    
    int i;
    
    printf(" \t姓名\t学号\t语文\t数学\t英语\t总分\n");
    
    for(i=0;i
    
    {
    
    printf("\t%s\t%d\t%d\t%d\t%d\t%d\n",student[i].name,student[i].num,student[i].Chinese,student[i].Math,student[i].English,student[i].sum);
    
    }
    
    getch();
    
    menu();
    
    }
    
    void sortnum()
    
    {
    
    void menu();
    
    int i,j,k;
    
    char a[55];
    
    for(i=0;i
    
    {
    
    for(j=0;j
    
    {
    
    if(student[j].num>student[j+1].num)
    
    {
    
    k=student[j].num;
    
    student[j].num=student[j+1].num;
    
    student[j+1].num=k;
    
    k=student[j].Chinese;
    
    student[j].Chinese=student[j+1].Chinese;
    
    student[j+1].Chinese=k;
    
    k=student[j].Math;
    
    student[j].Math=student[j+1].Math;
    
    student[j+1].Math=k;
    
    k=student[j].English;
    
    student[j].English=student[j+1].English;
    
    student[j+1].English=k;
    
    k=student[j].sum;
    
    student[j].sum=student[j+1].sum;
    
    student[j+1].sum=k;
    
    strcpy(a,student[j].name);
    
    strcpy(student[j].name,student[j+1].name);
    
    strcpy(student[j+1].name,a);
    
    }
    
    }
    
    }
    
    showstudent();
    
    getch();
    
    menu();
    
    }
    
    void sortsum()
    
    {
    
    void menu();
    
    qsort(student, n, sizeof(Node), cmp);
    
    showstudent();
    
    getch();
    
    menu();
    
    }
    
    void searchnum(int number)
    
    {
    
    void menu();
    
    int min = 0, max = n-1, mid;
    
    bool escape = false;
    
    qsort(student, n, sizeof(Node), cmpnum);
    
    while(min <= max)
    
    {
    
    mid = (min + max) / 2;
    
    if(student[mid].num > number)
    
    {
    
    max = mid - eps;
    
    }
    
    else if(student[mid].num < number)
    
    {
    
    min = mid + eps;
    
    }
    
    else
    
    {
    
    escape = true;
    
    printf("\t姓名\t学号\t语文\t数学\t英语\t总分\n");
    
    printf("\t%s\t%d\t%d\t%d\t%d\t%d\n", student[mid].name, student[mid].num, student[mid].Chinese, student[mid].Math, student[mid].English, student[mid].sum);
    
    break;
    
    }
    
    }
    
    if(!escape)
    
    {
    
    printf("\t查无此人");
    
    }
    
    getch();
    
    menu();
    
    }
    
    void searchname()
    
    {
    
    void menu();
    
    int i;
    
    for(i=0;i
    
    {
    
    if(strcmp(text,student[i].name)==0)
    
    {
    
    printf("\t姓名\t学号\t语文\t数学\t英语\t总分\n");
    
    printf("\t%s\t%d\t%d\t%d\t%d\t%d\n", student[i].name, student[i].num, student[i].Chinese, student[i].Math, student[i].English, student[i].sum);
    
    break;
    
    }
    
    }
    
    if(i>=n)
    
    {
    
    printf("\t查无此人\n");
    
    }
    
    getch();
    
    menu();
    
    }
    
    void save()
    
    {
    
    void menu();
    
    FILE *fp;
    
    fp=fopen("4.txt","w");
    
    int i;
    
    fprintf(fp, "\t姓名\t学号\t语文\t数学\t英语\t总分\n");
    
    for(i=0;i
    
    {
    
    if(student[i].Chinese<60||student[i].Math<60||student[i].English<60)
    
    {
    
    printf("\t%s\t%d\t%d\t%d\t%d\n",student[i].name,student[i].num,student[i].Chinese,student[i].Math,student[i].English);
    
    fprintf(fp,"\t%s\t%d\t%d\t%d\t%d\n",student[i].name,student[i].num,student[i].Chinese,student[i].Math,student[i].English);
    
    }
    
    }
    
    printf("\n");
    
    printf("┏━━━━┓\n");
    
    printf("┃保存成功┃\n");
    
    printf("┗━━━━┛\n");
    
    getch();
    
    menu();
    
    }
    
    void menu()
    
    {
    
    int choice;
    
    system("cls");
    
    printf(" 菜单\n");
    
    printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
    
    printf("┃ 0.退出 ┃\n");
    
    printf("┃ 1.显示学生信息 ┃\n");
    
    printf("┃ 2.显示按学号排序后的学生信息 ┃\n");
    
    printf("┃ 3.显示按总分排序后的学生信息 ┃\n");
    
    printf("┃ 4.按学号查学生各科分数和总分 ┃\n");
    
    printf("┃ 5.按姓名查学生各科分数和总分 ┃\n");
    
    printf("┃ 6.抽取出三科成绩中有补考的学生并保存 ┃\n");
    
    printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
    
    printf(" 选择代码(0,1,2,3,4,5,6): ");
    
    scanf("%d", &choice);
    
    switch(choice)
    
    {
    
    case 0:
    
    {
    
    system("cls");
    
    printf("谢谢使用!\n");
    
    exit(0);
    
    }
    
    case 1:
    
    {
    
    system("cls");
    
    showstudent();
    
    }
    
    case 2:
    
    {
    
    system("cls");
    
    sortnum();
    
    }
    
    case 3:
    
    {
    
    system("cls");
    
    sortsum();
    
    }
    
    case 4:
    
    {
    
    system("cls");
    
    int num;
    
    printf("\t请输入要查找学生的学号:");
    
    scanf("%d", &num);
    
    searchnum(num);
    
    }
    
    case 5:
    
    {
    
    system("cls");
    
    printf("\t请输入要查找学生的姓名:");
    
    scanf("%s", text);
    
    searchname();
    
    }
    
    case 6:
    
    {
    
    system("cls");
    
    save();
    
    }
    
    }
    
    }
    
    int main()
    
    {
    
    void menu();
    
    n = 0;
    
    FILE * fp;
    
    fp=fopen("1.txt","r+");
    
    {
    
    while(fscanf(fp, "%s %d %d %d %d", student[n].name, &student[n].num, &student[n].Chinese, &student[n].Math, &student[n].English)!=EOF)
    
    {
    
    student[n].sum = 0;
    
    student[n].sum += student[n].Chinese;
    
    student[n].sum += student[n].Math;
    
    student[n].sum += student[n].English;
    
    n++;
    
    }
    
    fclose(fp);
    
    }
    
    fp=fopen("2.txt","r+");
    
    {
    
    while(fscanf(fp, "%s %d %d %d %d", student[n].name, &student[n].num, &student[n].Chinese, &student[n].Math, &student[n].English)!=EOF)
    
    {
    
    student[n].sum = 0;
    
    student[n].sum += student[n].Chinese;
    
    student[n].sum += student[n].Math;
    
    student[n].sum += student[n].English;
    
    n++;
    
    }
    
    fclose(fp);
    
    }
    
    menu();
    
    return 0;
    
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月24日
  • 已采纳回答 5月16日
  • 创建了问题 5月15日

悬赏问题

  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题