学生管理系统(初级)

    #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)

大家都在看

  • Linux动静分离与Rewrite

    一、动静分离 1.1 单台机器动静分离 1、创建NFS挂载点(NFS服务端) mkdir /static vim /etc/exports /static 172.16.1.0/2…

    Linux 2023年5月27日
    0108
  • rm命令弱爆了!

    大家好,我是良许。 创建、删除和修改文件是用户在 Linux 系统中执行的非常常见操作。大家都知道,在 Linux 系统里使用 rm 命令删除单个文件时,几乎一瞬间就完成了。但是如…

    Linux 2023年5月27日
    091
  • uWSGI服务实现优雅重启(graceful reload)的方式

    服务端当前使用方式 直接通过svc发送SIGINT/SIGKILL信号 直接触发real_run脚本中的相关信号通知 使用简单 每次重启所有进程(包括master),重启完成为全新…

    Linux 2023年6月6日
    0106
  • 多线程执行同一任务,不共享局部变量

    多线程执行同一任务,不共享局部变量 一、 代码展示 import threading import time 多线程执行同一任务时,局部变量是不共享的 def sum_num():…

    Linux 2023年6月14日
    093
  • Docker私有仓库部署

    修改daemon.json 重启docker服务 镜像上传至私有仓库 标记此镜像为私有仓库的镜像 再次启动私服容器 Original: https://www.cnblogs.co…

    Linux 2023年6月8日
    076
  • 【滚动更新】C++ 八股文选集(没代码,纯应试)

    1,变量的声明和定义有什么区别。 声明不分配内存,定义分配内存。变量只能被定义一次,但可以被声明多次。 2,#ifdef、#else、#endif和#ifndef的作用。 预处理条…

    Linux 2023年6月13日
    098
  • Linux Centos7.5 vsftp 的安装与配置

    安装及配置 安装 sudo yum install vsftpd -y 服务管理 启动服务 service vsftpd start 关闭服务 service vsftpd sto…

    Linux 2023年6月14日
    085
  • 原来这就是网络

    你是一台电脑,你的名字叫A,很久很久之前,你不与任何其他电脑相连接,孤苦伶仃。 直到有一天,你希望与另一台电脑B建立连接,于是你们各开了一个网口,用一根网线连接了起来。 用一根网线…

    Linux 2023年6月14日
    0116
  • 阿里云函数-爱奇艺签到

    简介 是否支持多账号:是消息推送平台:PUSHPLUS 代码 -*- coding: utf8 -*- import requests,random,string,hashlib,…

    Linux 2023年6月7日
    089
  • Windows关闭135/137/139/445 端口

    通过IP安全策略(以关闭135端口为例) (1) 依次打开”控制面板–>系统和安全–>管理工具–>本地安全策略&#…

    Linux 2023年6月8日
    0240
  • Linux虚拟机追加扩展磁盘

    一、使用VMware给虚拟机追加磁盘 使用VMware打开虚拟机设置对话框,选择硬盘,点击右侧的扩展按钮,输入扩展后的磁盘容量。 点击扩展按钮。提示磁盘已成功扩展。 二、对闲置的空…

    Linux 2023年6月6日
    0124
  • 面试题:Java中为什么只有值传递?

    作者:小牛呼噜噜 | https://xiaoniuhululu.com计算机内功、JAVA底层、面试相关资料等更多精彩文章在公众号「小牛呼噜噜 」 经典的问题 形参&实参…

    Linux 2023年6月6日
    0138
  • shell生成指定长度的随机数

    生成指定长度是随机数 8位纯数字的随机数 tr -cd ‘0-9’ 使用/dev/urandom而不是/dev/random是因为后者比较慢。 Original: https://…

    Linux 2023年5月28日
    0113
  • WSL2卸载fish后无法登录问题的简单解决

    问题环境 Windows11 WSL2 OpenSUSE Tumbleweed 问题描述 在执行 sudo zypper remove fish之后,退出了终端界面,再次进入时终端…

    Linux 2023年6月13日
    0113
  • fastdfs单节点部署

    安装依赖 ​ yum -y install gcc gcc-c++ libevent 安装libfastcommon 下载地址: https://github.com/happyf…

    Linux 2023年6月8日
    0109
  • Redis中删除过期Key的三种策略

    转载自:http://blog.csdn.net/a_bang/article/details/52986935?locationNum=9&fps=1 项目中有个接口要频…

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