学生管理系统(初级)

    #include
    #include
    #include
    #define Size sizeof(struct Student)
    struct Student *p = NULL;
    typedef struct Student
    {
        int grade;
        long student_number;
        char name[20];
        char course[20];
        float usual_score;
        float test_score;
        float total_score;
        struct Student *next;
    } S;
    void print_char()
    {
        printf("********************************************************************************\n");
    }
    void print_menu()
    {
        printf("学生成绩管理系统\n\n");
        printf("1、输入学生信息\n");
        printf("2、修改学生信息\n");
        printf("3、删除学生信息\n");
        printf("4、按姓名查询\n");
        printf("5、按班级查询\n");
        printf("6、按学号查询\n");
        printf("7、按课程名称查询\n");
        printf("8、按总分高低排序\n");
        printf("9、单科成绩排名\n");
        printf("10、查询班级优秀率\n");
        printf("11、查询课程最高分,最低分\n");
        printf("12、输出文件学生信息\n");
        printf("13、退出系统\n");
    }
    void print(S *head)
    {
        printf("所有信息如下:\n");
        printf("班级 \t 学号\t 姓名\t         科目         平时成绩      考试成绩    总成绩\n");
        S *ptr = head;
        while( ptr  != NULL)
        {
            printf("%d\t%ld\t%-10s       %-10s    %.2f         %.2f       %.2f\n",ptr->grade,ptr->student_number,ptr->name,ptr->course,ptr->usual_score,ptr->test_score,ptr->total_score);
            ptr = ptr->next;
        }
    }
    S *creat_file()
    {
        void print();
        unsigned n;
        S *head,*node,*end;
        FILE *fp;
        if((fp = fopen("date_students.txt","r")) == NULL)
        {
            printf("connot open the file\n");
            exit(0);
        }
        fscanf(fp,"%d",&n);
        printf("文件学生信息:\n");
        head = (S*)malloc(Size);
        fscanf(fp,"%d%ld%s%s%f%f",&head->grade,&head->student_number,head->name,head->course,&head->usual_score,&head->test_score);
        head->total_score = head->usual_score*0.2 + head->test_score*0.8;
        end = head;
        for(int i = 2; i  n; i++)
        {
            node = (S*)malloc(Size);
            end->next = node;
            end = node;
            fscanf(fp,"%d%ld%s%s%f%f",&node->grade,&node->student_number,node->name,node->course,&node->usual_score,&node->test_score);
            node->total_score =node->usual_score*0.2 +node->test_score*0.8;
        }
        end->next = NULL;

        return head;
    }
    S *creat()
    {
        void print();
        FILE *fp;
        unsigned n;
        if((fp = fopen("T_date.txt","w")) == NULL)
        {
            printf("connot open the file\n");
            exit(0);
        }
        printf("有多少组学生数据:\n");

        scanf("%u",&n);
        if(n == 0)
            exit(0);
        printf("请依次输入%d组数据:",n);
        printf("班级  学号  姓名   科目  平时成绩  考试成绩\n");
        fprintf(fp,"班级  学号  姓名   科目  平时成绩  考试成绩\n");
        S *head,*node,*end;
        head = (S*)malloc(Size);
        scanf("%d%ld%s%s%f%f",&head->grade,&head->student_number,head->name,head->course,&head->usual_score,&head->test_score);
        head->total_score = head->usual_score*0.2 + head->test_score*0.8;
        fprintf(fp,"%d\t%ld\t%-10s       %-10s    %.2f         %.2f       %.2f\n",head->grade,head->student_number,head->name,head->course,head->usual_score,head->test_score,head->total_score);
        end = head;
        for(int i = 2; i  n; i++)
        {
            node = (S*)malloc(Size);
            end->next = node;
            end = node;
            scanf("%d%ld%s%s%f%f",&node->grade,&node->student_number,node->name,node->course,&node->usual_score,&node->test_score);
            node->total_score =node->usual_score*0.2 +node->test_score*0.8;
            fprintf(fp,"%d\t%ld\t%-10s       %-10s    %.2f         %.2f       %.2f\n",node->grade,node->student_number,node->name,node->course,node->usual_score,node->test_score,node->total_score);
        }
        end->next = NULL;
        fclose(fp);
        return head;
    }
    S* change(S *head)
    {
        int i = 1,n = 0;
        S *t = head;
        printf("修改第几个学生的信息\n");
        scanf("%d",&n);
        while(i < n && t != NULL )
        {
            t = t->next;
            i++;
        }
        if(n != 0 && t != NULL)
        {
            printf("请输入要修改学生的信息:\n");
            scanf("%d%ld%s%s%f%f",&t->grade,&t->student_number,t->name,t->course,&t->usual_score,&t->test_score);
            t->total_score =t->usual_score*0.2 +t->test_score*0.8;

        }
        else
            puts("结点不存在!\n");
        return head;
    }
    S * delet(S *head)
    {
        int i = 1,n = 0;
        printf("删除第几个学生信息:\n");
        scanf("%d",&n);
        S* t = head, *in;
        if(n == 1)
        {
            in  = t;
            head  = head->next;
            free(in);
        }
        else
        {
            while (i < n && t != NULL)
            {
                in = t;
                t = t->next;
                i++;
            }
            if (n != 0 && n != 1&& t != NULL)
            {
                in->next = t->next;
                free(t);
            }
            else
            {
                puts("结点不存在");
            }
        }
        return head;
    }
    void serch_number(S *head)
    {
        long student_number;
        int  flag = 1,i = 1;
        printf("请输入需要查询的学号:\n");
        scanf("%ld",&student_number);
        S *t = head;
        while(t != NULL)
        {
            while(t != NULL  &&  t->student_number != student_number   )
                t = t->next;
            if(t != NULL)
            {
                if(i)
                {
                    printf("班级 \t 学号\t 姓名\t         科目         平时成绩      考试成绩    总成绩\n");
                    i = 0;
                }
                printf("%d\t%ld\t%-10s       %-10s    %.2f         %.2f       %.2f\n",t->grade,t->student_number,t->name,t->course,t->usual_score,t->test_score,t->total_score);
                flag = 0;
            }
            else
                break;
            t = t->next;
        }
        if(flag)
            printf("没有学号为%ld学生信息\n",student_number);
    }

    void serch_date(S *head,char date[])
    {
        S *t = head;
        int flag = 1,i = 1;
        while( t != NULL )
        {
            while( t != NULL && strcmp(t->name,date) != 0  )
                t = t->next;
            if(t != NULL)
            {
                if(i)
                {
                    printf("班级 \t 学号\t 姓名\t         科目         平时成绩      考试成绩    总成绩\n");
                    i = 0;
                }
                printf("%d\t%ld\t%-10s       %-10s    %.2f         %.2f       %.2f\n",t->grade,t->student_number,t->name,t->course,t->usual_score,t->test_score,t->total_score);
                flag = 0;
            }
            else
                break;
            t = t->next;
        }
        if(flag)
            printf("没有%s信息\n",date);
    }
    void serch_grade(S *head,int grade)
    {
        S *t = head;
        int  flag = 1,i = 1;
        while(t != NULL)
        {
            while(  t != NULL && t->grade != grade )
                t = t->next;
            if(t != NULL)
            {
                if(i)
                {
                    printf("班级 \t 学号\t 姓名\t         科目         平时成绩      考试成绩    总成绩\n");
                    i = 0;
                }
                printf("%d\t%ld\t%-10s       %-10s    %.2f         %.2f       %.2f\n",t->grade,t->student_number,t->name,t->course,t->usual_score,t->test_score,t->total_score);
                flag = 0;
            }
            else
                break;
            t = t->next;
        }
        if(flag)
            printf("没有%d班信息\n",grade);
    }
    void serch_date_course(S *head,char date[])
    {
        S *t = head;
        int  flag = 1,i = 1;
        while(t != NULL)
        {
            while( t != NULL && strcmp(t->course,date) != 0  )
                t = t->next;
            if(t != NULL)
            {
                if(i)
                {
                    printf("班级 \t 学号\t 姓名\t         科目         平时成绩      考试成绩    总成绩\n");
                    i = 0;
                }
                printf("%d\t%ld\t%-10s       %-10s    %.2f         %.2f       %.2f\n",t->grade,t->student_number,t->name,t->course,t->usual_score,t->test_score,t->total_score);
                flag = 0;
            }
            else
                break;
            t = t->next;
        }
        if(flag)
            printf("没有%s信息\n",date);
    }
    S *sort_total_score(S *head)
    {
        S *q = head,*p;

        int temp1;
        long temp2;
        char temp3[20];
        char temp4[20];
        float temp5;
        float temp6;
        float temp7;
        for( ; q!=NULL ; q = q->next)
            for(p = q->next; p != NULL; p = p->next )
            {
                if( q->total_score < p->total_score )
                {
                    temp1 = p->grade;
                    temp2 =  p->student_number;
                    strcpy(temp3, p->name ) ;
                    strcpy( temp4, p->course) ;
                    temp5 =   p->usual_score;
                    temp6 =   p->test_score ;
                    temp7 =  p->total_score ;
                    p->grade = q->grade;
                    p->student_number = q->student_number;
                    strcpy( p->name, q->name ) ;
                    strcpy(  p->course,  q->course) ;
                    p->usual_score =  q->usual_score;
                    p->test_score =  q->test_score ;
                    p->total_score =  q->total_score ;
                    q->grade =  temp1;
                    q->student_number = temp2;
                    strcpy(q->name, temp3 ) ;
                    strcpy( q->course,  temp4) ;
                    q->usual_score =  temp5;
                    q->test_score =  temp6 ;
                    q->total_score =   temp7 ;
                }
            }

        return head;
    }
    void sort_one_course(S *head,char course[])
    {
        S *t = head;
        int  flag = 1,i = 1;
        sort_total_score(head);
        while(t != NULL)
        {
            while( t != NULL  && strcmp(t->course,course) != 0)
                t = t->next;
            if(t != NULL)
            {
                if(i)
                {
                    printf("班级 \t 学号\t 姓名\t         科目         平时成绩      考试成绩    总成绩\n");
                    i = 0;
                }
                printf("%d\t%ld\t%-10s       %-10s    %.2f         %.2f       %.2f\n",t->grade,t->student_number,t->name,t->course,t->usual_score,t->test_score,t->total_score);
                flag = 0;
            }
            else
                break;
            t = t->next;
        }
        if(flag)
            printf("没有%s信息\n",course);
    }
    void grade_great_number(S *head,int grade)
    {
        float num1 = 0,num2 = 0,num3 = 0;
        int flag = 0;
        S *t = head;
        while(t != NULL)
        {
            while( t != NULL && t->grade != grade )
                t = t->next;
            if(t != NULL)
            {
                flag = 1;
                num1++;
                if(t->total_score >= 90)
                    num2++;
                else if(t->total_score < 60)
                    num3++;
            }
            else
                break;
            t = t->next;
        }
        if(flag)
            printf("%d班:\n优秀率:%-5.2f%%   不及格率:%-5.2f%%\n",grade,(num2/num1)*100,(num3/num1)*100) ;
        else
            printf("没有%d班信息!\n",grade);
    }
    S *sort_one_course1(S *head,char course[])
    {
        S *t = head, *min = NULL;
        int flag = -1;
        sort_total_score(head);
        while(t != NULL)
        {
            while(t != NULL && strcmp(t->course,course) != 0  )
                t = t->next;
            if(t != NULL)
            {
                flag ++;
            }
            else
                break;
            min = t;
            t = t->next;
        }
        if(flag)
            return min;
        else
            return NULL;
    }
    void sort_m(S *head,char course[] )
    {
        S *t = head,*max,*min =sort_one_course1(head,course) ;
        sort_total_score(head);
        while( t != NULL && strcmp(t->course,course) != 0  )
        {
            t = t->next;
            if(t == NULL)
                break ;
        }
        max = t;
        if(max != NULL)
        {
            printf("%s最大值学生信息:\n",course);
            printf("班级 \t 学号\t 姓名\t         科目         平时成绩      考试成绩    总成绩\n");
            printf("%d\t%ld\t%-10s       %-10s    %.2f         %.2f       %.2f\n",max->grade,max->student_number,max->name,max->course,max->usual_score,max->test_score,max->total_score);
        }
        else
        {
            printf("没有%s课程信息\n",course);
            return;
        }
        if(min != NULL)
        {
            printf("%s最小值学生信息:\n",course);
            printf("%d\t%ld\t%-10s       %-10s    %.2f         %.2f       %.2f\n",min->grade,min->student_number,min->name,min->course,min->usual_score,min->test_score,min->total_score);
        }
        else
            printf("%s只有1个同学信息,不存在最值\n",course);
    }
    void mean_in(int num)
    {

        char date[20],course[20];
        int grade;
        switch(num)
        {
        case 1://信息录入
        {
            p = creat();
            print(p);

        }
        break;
        case 2://修改信息
            print(change(p));
            break;
        case 3://删除信息
        {
            p =delet(p);
            print(p);
        }
        break;
        case 4://按姓名查询
        {
            printf("请输入需要查询的姓名:\n");
            getchar();
            serch_date(p,  gets(date));
        }
        break;
        case 5://按班级查询
        {
            printf("请输入要查询的班级:\n");
            scanf("%d",&grade);
            serch_grade(p,grade);
        }
        break;
        case 6://按学号查询
            serch_number(p);
            break;
        case 7://按课程名查询
        {
            printf("请输入需要查询的课程名:\n");
            getchar();
            serch_date_course(p,gets(date));
        }
        break;
        case 8://按总分排序
            print(sort_total_score(p)) ;
            break;
        case 9://单科成绩排名
        {
            printf("请输入需要排序的课程名:\n");
            getchar();
            sort_one_course(p,gets(course));
        }
        break;
        case 10://班级优秀率
        {
            printf("请输入需要查询的班级:\n");
            scanf("%d",&grade);
            grade_great_number(p,grade);
        }
        break;
        case 11:
        {
            printf("请输入需要查询的课程的最值:\n");
            getchar();
            sort_m(p, gets(course));
        }
        break;
        case  12:
        {
            p = creat_file();
            print(p);
        }
        break;
        case  13:
            exit(0);
            break;
        }
    }
    int main()
    {
        int num = 0;
        print_menu();
        print_char();
        while(1)
        {
            printf("请选择功能序号(1——13)\n");
            scanf("%d",&num);
            if(!(num >= 1 && num  13))
            {
                printf("功能选择有误,请重新选择\n");
                scanf("%d",&num);
            }
            mean_in(num);
            print_char();
        }
        return 0;
    }

Original: https://www.cnblogs.com/iforeverhz/p/16255986.html
Author: iforeverhz
Title: 学生管理系统(初级)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/583244/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 很有创意的AkShell:用JS开发web,轻松发布

    今天看了infoq对作者的采访,感觉很有意思。 我去他们的网站看了下,作者是俄罗斯人,他的目标是最大可能地简化web开发。只需要用浏览器就可以开发 ,点两下鼠标就发布了。 他的哲学…

    Linux 2023年5月28日
    093
  • 程序员要知道的22个学习网站

    点击标题即可直达链接网址 GitHub是一个面向开源及私有软件项目的托管以及在线软件开发平台,用于存储、跟踪和协作软件项目,开发者能够上传自己的代码文件,并与其他开发者在开源项目上…

    Linux 2023年6月6日
    090
  • Xftp 远程工具的使用与jdk 安装(Linux最小安装版)

    Xftp 的安装使用 下载链接:Xftp7 – Dominic 的蓝奏云分享 安装和注册步骤可参考 Xshell:Linux 最小安装与 Xshell 远程工具的使用 …

    Linux 2023年6月8日
    0116
  • 电脑常用快捷键大全>(收藏)

    在互联网飞速发展的时代,我们或多或少都会跟电脑打上交道,但是还有很多小伙伴对电脑还不太熟悉,并且不能够流畅的去操作电脑,那这个时候掌握一些基础简单的电脑 常用快捷键 的使用还是很有…

    Linux 2023年6月6日
    088
  • python实现Mysql数据库批量新增数据

    一、批量插入数据的场景 二、插入数据的工具选择 三、选择Python进行批量插入 Python实现批量插入Mysql数据库数据 一、批量插入数据的场景 在进行数据压力时需要进行大数…

    Linux 2023年6月14日
    075
  • 【EventOS Nano】EventOS Nano初步了解

    EventOS Nano是什么? EventOS Nano是一个面向单片机、事件驱动的、分布式的、可跨平台开发的嵌入式开发平台。主要有两大技术特色: 事件驱动和 超轻量 Event…

    Linux 2023年6月13日
    082
  • LVS+keepalived+nginx+tomcat

    一、 环境准备 本次配置基于DR负载均衡模式,设置一个VIP(Virtual IP)为19.50.67.173,用户只需要访问这个IP地址即可获得后端服务 其中,负载均衡主机为19…

    Linux 2023年6月6日
    0123
  • linux常用指令记录

    给目标文件夹执行权限:chmod -R 777 html du -sh . [对当前目录下所有的目录和文件的大小进行汇总,-s表示汇总,-h表示以KB, MB, GB, TB格式进…

    Linux 2023年6月6日
    0116
  • 关于飞书事件订阅功能的应用

    此项目源码我也是站在巨人的肩膀上进行一个二次应用,感谢这位大神的共享 附上源码链接–Feishu-Event-Subscribe: 【实验】飞书的事件订阅 主要是通讯录…

    Linux 2023年6月14日
    083
  • 软件工程 软件测试 第6篇随笔

    5、软件测试 1.软件测试的目的: 测试是一个为了发现错误而执行程序的过程 一个好的测试用例是指很可能找到迄今为止尚未发现的错误的测试用例 一个成功的测试是指揭示了迄今为止尚未发现…

    Linux 2023年6月7日
    0112
  • linux三剑客试题汇总

    1、找出/proc/meminfo文件中以s开头的行,至少用三种方式忽略大小写 2、显示etc目录下以root,centos或者user开头的信息 3、找出/etc/init.d/…

    Linux 2023年5月27日
    0104
  • 数据链路层 交换机的工作原理

    以太网 以太网是一种将几台电脑连接起来,能够进行通讯的技术,也就是组建所谓的”局域网”。所以以太网可以说是一种局域网技术但局域网技术并非只有以太网一种,还有…

    Linux 2023年6月6日
    0112
  • Linux 命令行设置网络代理

    echo $SHELL/usr/bin/zsh 根据当前的shell类型来设置,我这里以zsh为例,vim ~/.zshrc export ALL_PROXY=”htt…

    Linux 2023年6月6日
    0186
  • zabbix用户,角色,权限,模板管理

    zabbix用户,角色,权限,模板管理 zabbix用户,角色,权限,模板管理 用户组用户角色右上角是创建角色用户lnh@1234使用刚才创建的用户登录模板组模板模板的监控项可以自…

    Linux 2023年6月6日
    0104
  • 每天一个 HTTP 状态码 200

    200 OK 表示请求成功,一切安好… 200 OK 话不多说,这个状态码应该是最最最常用的了,无人不知,无人不晓;就是表示请求成功的意思, 你若安好,便是晴天。 摘自…

    Linux 2023年6月7日
    097
  • Python之元类详解

    一、引子 元类属于Python面向对象编程的深层魔法,99%的人都不得要领,一些自以为搞明白元类的人其实也是自圆其说,点到为止,从队元类的控制上来看就破绽百出,逻辑混乱; 二、什么…

    Linux 2023年6月14日
    090
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球