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 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c