avamaple 2022-06-08 09:25 采纳率: 100%
浏览 293
已结题

c语言编程一个学生信息管理系统

对一个有10个学生的班级,每个学生有三门课程,该系统实现对班级成绩的录入、显示、保存、排序、修改、统计等操作的管理。功能要求:1、本系统采用一个结构体数组,每个数据的结构应当包括:姓名、学号、三门课程名称。2、本系统显示这样的菜单:请选择系统功能项:a、成绩录入
b、成绩显示
c、成绩保存
d、成绩排序
e、成绩修改
f、成绩统计(1)显示每门课程成绩最低和最高的学生的基本信息(2)显示每门课程的平均成绩(3)显示低于某门课程平均成绩的学生人数g、退出系统
3、执行一个具体的功能之后,程序将重新显示菜单。
4、将学生成绩保存到文件中。

  • 写回答

2条回答 默认 最新

  • 白驹_过隙 算法领域新星创作者 2022-06-08 09:38
    关注

    img

    #include<stdio.h>
    #include<string.h>    //比较字符串头文件//
    #include<stdlib.h>//实时检测总数头文件//
    #include<string.h>
    #include<Windows.h>
    #define N 1000       //控制最大输入//
    int n=0;             //实时检测的总数n//
    
    /*定义结构体students*/
    struct students
    {
        int num;
        char name[8];
        int chinese;
        int math;
        int computer;
        int sum;
        int ave;
    } student[N],student1;    //student[N]是结构体数组student1是结构体的初始化//
    
    /*实时检测总数n*/
    void count()
    {
        FILE *fp;         //定义一个文件指针fp//
        fp=fopen("students.txt","at+");     //以“追加”方式打开students文本文件//
        if(fp==NULL)                        //判断文件是否为空//
            printf("Cannot open file!");
        struct students stu1;
        n=0;         //初始化//
        while(1)
        {
            if(feof(fp))  //检测文件是否结束//
                break;
            fread(&stu1,sizeof(struct students),1,fp);   //读取文件//
            n++;    //读取文件数//
        }
        n--;           //关闭文件数//
        fclose(fp);    //关闭文件//*/
    }
    /*成绩输入*/
    void input()
    {
        int i=0;     //学生人数初始化//
        char c='y';
        FILE *fp;     //定义一个文件指针fp//
        count();     //实时检测总数n//
        fp=fopen("students.txt","at+");    //以“追加”方式打开students文本文件//
        do
        {
            printf("请输入学生的个人信息:\n");
            printf("\n请输入第%d学生的信息:\n",n+1);
            printf("请输入学生的学号:");
            scanf("%d",&student[i].num);
            printf("请输入学生的姓名:");
            scanf("%s",student[i].name);
            getchar();
            printf("请输入学生的大学语文成绩");
            scanf("%d",&student[i].chinese);
            printf("请输入学生的大学数学成绩:");
            scanf("%d",&student[i].math);
            printf("请输入学生的计算机成绩:");
            scanf("%d",&student[i].computer);
            getchar();
            student[i].sum=student[i].chinese+student[i].math+student[i].computer;
            student[i].ave=student[i].sum/3;
            fwrite(&student[i],sizeof(struct students),1,fp);  //以方式将其写入students文本文件//
            i++;
            n++;
            printf("\n\n\t\t\t\t是否继续输入(Y/N):");     //提示是否继续,从键盘
            scanf("%c",&c);
        }
        while(c=='y'||c=='Y');
        fclose(fp);
    }
    
    /*成绩输出*/
    void output()
    {
        int i;
        char c;
        FILE *fp;      //定义一个文件指针fp//
        fp=fopen("students.txt","rt");    //以“读取的” 方式打开students文本文件//
        system("cls");     //清屏//
        getchar();
    
    
        printf("学号\t姓名 大学语文 大学数学 计算机 总成绩 平均分 \n");
        do
        {
            for(i=0; i<n; i++)
            {
                fread(&student[i],sizeof(struct students),1,fp);
                printf("%d\t",student[i].num);
                printf("%s\t",student[i].name);
                printf("%d\t",student[i].chinese);
                printf("%d\t",student[i].math);
                printf("%d\t",student[i].computer);
                printf("%d\t",student[i].sum);
                printf("%d\t",student[i].ave);
                printf("\n");
            }
            printf("|------||-----||------||-----||-----||-----||-----||------ |");
            printf("\n\n\t\t\t\t是否继续其它操作(Y/N):");     //提示是否继续//
            scanf("%c",&c);
            c=getchar();
        }
        while(c=='y'||c=='Y');
        fclose(fp);      //关闭文件//
    }
    
    /*成绩修改*/
    void xiugai()
    {
        int i,tp,num1;
        char c;
        FILE *fp;     //定义一个文件指针fp//
    
    lb:
        printf("\n按学号修改\n\n");
        printf("请输入要修改的学生学号\n");
        scanf("%d",&num1);
    
        for(i=0; i<n; i++)
        {
            if(num1==student[i].num)
            {
                printf("要修改的学生信息为:\n");
                printf("学号\t姓名 大学语文 大学数学 计算机 总成绩 平均分 \n");
                printf("%d\t",student[i].num);
                printf("%s\t",student[i].name);
                printf("%d\t",student[i].chinese);
                printf("%d\t",student[i].math);
                printf("%d\t",student[i].computer);
                printf("%d\t",student[i].sum);
                printf("%d\t",student[i].ave);
                printf("\n");
                do
                {
                    printf("请选择要修改项:\n");
                    printf("1学号\n2姓名\n大学语文成绩\n4大学数学成绩\n5总成绩\n6平均分\n");
                    scanf("%d",&tp);
                    switch(tp)
                    {
                    case 1:
                    {
                        printf("请输入学号:\n");
                        scanf("%d",&student[i].num);
                        goto la;
                    }
                    case 2:
                    {
                        printf("请输入姓名:\n");
                        scanf("%s",student[i].name);
                        goto la;
                    }
                    case 3:
                    {
                        printf("请输入大学语文成绩:\n");
                        getchar();
                        scanf("%d",&student[i].chinese);
                        goto la;
                    }
                    case 4:
                    {
                        printf("请输入大学数学成绩:\n");
                        scanf("%d",&student[i].math);
                        goto la;
                    }
                    case 5:
                    {
                        printf("请输入计算机成绩:\n");
                        scanf("%d",&student[i].computer);
                        goto la;
                    }
                    case 6:
                    {
                        printf("请输入总成绩:\n");
                        scanf("%d",&student[i].sum);
                        goto la;
                    }
                    case 7:
                    {
                        printf("请输入平均分:\n");
                        scanf("%d",&student[i].ave);
                        goto la;
                    }
                    }
                }
                while (tp<8);
    la:
                printf("是否继续修改(y/n)\n");     //提示是否继续//
                getchar();
                scanf("%c",&c);
                if(c=='y'||c=='Y')
                    goto lb;
            }
        }
        fp=fopen("students.txt","w+");   //以“读写” 方式打开students文本文件//
        for(i=0; i<n; i++)
            fwrite(&student[i],sizeof(struct students),1,fp);  //以 方式将其写入students
    
        fclose(fp);    //关闭文件//
    }
    
    
    /*成绩查询*/
    void query()
    {
        int querymode;     //子菜单选择//
        int i,j=0,findnum;
        char findname[20];
        int findok,t=0;     //定义一个判断标志的整型变量findok//
        char findct;        //定义一个用于判断是否继续查找的字符变量findct//
    
        FILE *fp;         //定义一个文件指针fp//
        count();     //实时检测总数n//
        fp=fopen("students.txt","r");       //以“只读” 方式打开students文本文件//
        system("cls");     //清屏//
    
        /*查询菜单*/
        printf("\t\t信息查询");
        printf("\n\t1按姓名查询");
        printf("\n\t2按学号查询");
        printf("\n\t0返回上级菜单");
        printf("\n请输入您的操作:");
        scanf("%d",&querymode);
    
        /*查询操作*/
        switch(querymode)
        {
        case 1:
        {
            printf("请输入要查询学生的姓名:\n");
            getchar();
            scanf("%s",findname);
            for(i=0; i<N; i++)
            {
                fread(&student[i],sizeof(struct students),1,fp); //以方式将其读入students
                //文本文串
                if(strcmp(student[i].name,findname)==0)        //比较字符串//
                {
                    j++;
                    printf("\n查寻到的学生为:\n");
                    if(j==1)
    
                        printf("|------||-----||------||------||------||-------||------||-----|");
    //仅在第一次显示//
                     printf("学号\t姓名 大学语文 大学数学 计算机 总成绩 平均分 \n");
                printf("%d\t",student[i].num);
                printf("%s\t",student[i].name);
                printf("%d\t",student[i].chinese);
                printf("%d\t",student[i].math);
                printf("%d\t",student[i].computer);
                printf("%d\t",student[i].sum);
                printf("%d\t",student[i].ave);
                printf("\n");
                }
    
            }
            if(j==0)
                printf("\n>>>查无此人!");
    
            //提示是否继续//
            printf ("\n是否继续查找(Y/N)?");
            getchar();
            getchar();
        }
        break;
    
        case 2:
        {
            printf("请输入要查询学生的学号:");
            scanf("%d",&findnum);
            for(i=0; i<n; i++)
            {
                fread(&student[i],sizeof(struct students),1,fp);
    //以结构体students的方式从文件fp中读取,将其读入students文本文件,每次读入一个
    //学生的信息
                if(student[i].num==findnum)      //整型数字的比较//
                {
                    findok=1;
                    break;
                }
                else
                    findok=0;
            }
            if(!findok)
                printf("\n>>>查无此人!");
            else
            {
                printf("\n查寻到的学生为:\n") ;
                if(j==1)
                    printf("|-------||------||------||-------||-------||-------||-------||------|\n");
    //仅在第一次显示//
                 printf("学号\t姓名 大学语文 大学数学 计算机 总成绩 平均分 \n");
                printf("%d\t",student[i].num);
                printf("%s\t",student[i].name);
                printf("%d\t",student[i].chinese);
                printf("%d\t",student[i].math);
                printf("%d\t",student[i].computer);
                printf("%d\t",student[i].sum);
                printf("%d\t",student[i].ave);
                printf("\n");
            }
    //提示是否继续//
            printf ("\n是否继续查找(Y/N)?");
            getchar();
            findct=getchar();     //从键盘输入一个判断字符,并将它赋值给字符变量
            findct;//用于以下的if语句的判断
            if(findct=='Y' || findct=='y')
                query();
        }
        }
        fclose(fp);    //关闭文件//
    }
    
    
    /*成绩排序*/
    void paixu()
    {
        int i, j;
        FILE *fp;       //定义一个文件指针fp//
        system("cls");      //清屏//
        count();       //实时检测总数n//
        for(i=0; i<n-1; i++)
            for(j=0; j<n-1-i; j++)  //按学号对学生信息进行排序//
            {
                if(student[j].num>student[j+1].num)   //整型数字的比较//
                {
                    student1=student[j];
                    student[j]=student[j+1];
                    student[j+1]=student1;
                }
            }
        fp=fopen("students.txt","w+");  //以 “读写”方式打开students文本文件//
        for(i=0; i<n; i++)
            fwrite(&student[i],sizeof(struct students),1,fp);  //以结构体students的方式从
        //文件fp中读取,将其写入students文本文件,每次写入一个学生的信息
        fclose(fp);      //关闭文件//
    }
    
    /*退出系统*/
    void tuichu()
    {
        char c;
        system("cls");      //清屏//
        printf("\n\n\t\t谢谢使用\n\n\n");
        printf("\n\n\t\t制作人:深度学习进阶\n");
        getchar();
        c=getchar();       //取用户输入,回显//
    }
    int main()
    {
        int i;        //获取用户在菜单中的选择//
        while(i!=0)
        {
            system("cls");     //清屏//
            printf("\t欢迎进入2018级2018-2018-2学生成绩管理系统\n");
            printf("\t\t==============================\n");
            printf("\t\t*请择操作                    *\n");
            printf("\t\t*0退出                       *\n");
            printf("\t\t*1输入学生信息               *\n");
            printf("\t\t*2输出学生信息               *\n");
            printf("\t\t*3修改学生信息               *\n");
            printf("\t\t*4查询学生信息               *\n");
            printf("\t\t*5排序学生信息               *\n");
    
            printf("\t\t==============================\n");
            scanf("%d",&i);
            system("cls");     //清屏//
            count();     //实时检测总数n//
            switch(i)
            {
            case 1:
                input();
                break;    //输入学生信息//
            case 2:
                output();
                break;     //输出学生信息//
            case 3:
                xiugai();
                output();
                break;    //修改学生信息//
            case 4:
                query();
                break;    //查询学生信息
            case 5:
                paixu();
                output();
                break;    //成绩排序//
            default:
                printf("输入有错\n");     //错误纠正//
            }
        }
        if(i==0)
            tuichu();        //退出系统//
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月8日
  • 已采纳回答 6月8日
  • 创建了问题 6月8日

悬赏问题

  • ¥50 使用CUDA如何高效的做并行化处理,是否可以多个分段同时进行匹配计算处理?目前数据传输速度有些慢,如何提高速度,使用gdrcopy是否可行?请给出具体意见。
  • ¥15 基于STM32,电机驱动模块为L298N,四路运放电磁传感器,三轮智能小车电磁组电磁循迹(两个电机,一个万向轮),如何通过环岛的原理及完整代码
  • ¥20 机器学习或深度学习问题?困扰了我一个世纪,晚来天欲雪,能饮一杯无?
  • ¥15 c语言数据结构高铁订票系统
  • ¥15 关于wkernell.PDB加载的问题,如何解决?(语言-c#|开发工具-vscode)
  • ¥15 (标签-STM32|关键词-智能小车)
  • ¥20 关于#stm32#的问题,请各位专家解答!
  • ¥15 (标签-python)
  • ¥20 搭建awx,试了很多版本都有错
  • ¥15 java corba的客户端该如何指定使用本地某个固定IP去连接服务端?