学生成绩管理系统能够实现基本的录入、查找、插入、删除、修改、计算平均成绩、根据平均成绩排名和输出等功能。

学生成绩管理系统可以在VC++、Dev-c++等可视化环境中编译

录入(选择1):录入也是创建的过程,创建时先输入各科成绩,再调用平均分函数,再以平均分的大小从大到小的顺序创建链表.

删除(选择2):根据学号来删除。

插入(选择3):插入和创建基本相同,也调用插入函数,根据平均分来

查找(选择4):根据学号来查找相应的信息。

修改(选择5):修改的基本思路是先根据学号来查找学号在链表中的位置,然后把它从链表中删除,再根据平均分的大小来调用插入函数重新插入链表中来,让链表始终有顺序。

   排名和输出在整个系统中都用到了!!!

1、 学生管理系统代码如下:

//编译环境:VC++

//date:2006.6.16

//作者:刘德范 05软件2班 0513222

#include "stdio.h"

#include "malloc.h"

#include "stdlib.h"

#include "conio.h"

#include"ctype.h"

#define Esc 27       //定义键盘退出键Esc

#define NULL 0

#define LEN sizeof(struct student)

struct student

{

        char class_0[20];  //班级

        int num;           //学号 

        char name[20];     //姓名 

        float elec;        //电子技术

        float c_prog;      //C++程序设计

        float media;       //多媒体技术

        float eng;         //大学英语

        float math;        //高等数学

        float sport;       //大学体育

        float polity;      //马克思主义政治经济学    

        float ave;         //平均成绩

        int order;         //名次

        struct student *next;

};

 

   int n;    //全局变量,统计学生记录的个数

  

   //涵数声明区   

   struct student *create();

   void Output(struct student *head);

   struct student *Delete(struct student *head,int num);

    struct student *insert(struct student *head, struct student *stud);

   struct student *Lookup(struct student *head, int num);

   struct student *Modify(struct student *head, int num);

   float Statistic(struct student *p);

   struct student *order(struct student *head );

   void start();

 

 

//创建链表,输入学生的信息

 

struct student *create()

{

    struct student *head;

    struct student *p1;

    n=0;

    p1=( struct student*) malloc(LEN);

    printf("请输入学生信息,输入格式为:(每输入一项回车)/n");

    printf("以学号为0退出!!!/n");

    printf("请输入学生学号:");

    scanf("%d",&p1->num);

    printf("请输入学生姓名:");

    scanf("%s",&p1->name);

    printf("请输入学生班级:");

    scanf("%s",&p1->class_0);

       printf("/n");

    printf("请输入电子技术成绩:");

    scanf("%f",&p1->elec);

    printf("请输入程序设计成绩:");

    scanf("%f",&p1->c_prog);

    printf("请输入多媒体成绩:");

    scanf("%f",&p1->media);

    printf("请输入大学英语成绩:");

    scanf("%f",&p1->eng);

    printf("请输入高等数学成绩:");

    scanf("%f",&p1->math);

    printf("请输入大学体育成绩:");

    scanf("%f",&p1->sport);

    printf("请输入马克思主义政治经济学成绩:");

    scanf("%f",&p1->polity);

    printf("/n");

    head=NULL;

    while(p1->num!=0)

    {

            p1->ave=Statistic(p1);  //求P1的平均值

            head=insert(head,p1);   //创建链表

            p1=(struct student*)malloc(LEN);

            printf("如果你想结束输入,请输入0/n");

            printf("请输入学生学号:");

            scanf("%d",&p1->num);

            if(p1->num==NULL)      //控制是否退出

                continue;

            printf("请输入学生姓名:");

            scanf("%s",&p1->name);

            printf("请输入学生班级:");

            scanf("%s",&p1->class_0);

            printf("/n");

            printf("请输入电子技术成绩:");

            scanf("%f",&p1->elec);

            printf("请输入程序设计成绩:");

            scanf("%f",&p1->c_prog);

            printf("请输入多媒体成绩:");

            scanf("%f",&p1->media);

            printf("请输入大学英语成绩:");

            scanf("%f",&p1->eng);

            printf("请输入高等数学成绩:");

            scanf("%f",&p1->math);

            printf("请输入大学体育成绩:");

            scanf("%f",&p1->sport);

            printf("请输入马克思主义政治经济学成绩:");

            scanf("%f",&p1->polity);

            printf("/n");           

    }

    //p2->next=NULL;

    return(head);

}

 

 

//查看链表

void Output(struct student *head)

{

      struct student *p;

      /*FILE *fp;

      if((fp=("answer.txt","wb"))==NULL)

      {

        printf("不能打开文件!!!/n");

        getch();

        exit(0);

      }*/

      printf("/n现在有 %d 个记录是:/n",n);

      p=head;

      if(head!=NULL)

          do

          {

               printf("学号为:%d/t",p->num);

               printf("姓名为:%s/t",p->name);

               printf("班级为:%s/t",p->class_0);

               printf("/n");

               printf("电子技术成绩为:%.2f/t",p->elec);

               printf("程序设计成绩为:%.2f/t",p->c_prog);

               printf("多媒体成绩为:%.2f/t",p->media);

               printf("/n");

               printf("英语成绩为:%.2f/t",p->eng);

               printf("数学成绩为:%.2f/t",p->math);

               printf("体育成绩为:%.2f/t",p->sport);

               printf("/n");

               printf("马克思主义政治经济学成绩为:%.2f/t",p->polity);

               printf("平均成绩为:%.2f/t",p->ave);

               printf("学生名次为:%d/t",p->order);

 

               /*if(fwrite(p,LEN,1,fp)!=1)

               {

                  printf("写入错误!!!/n");

                  exit(0);

               } */

               printf("/n");

               p=p->next;

          }

          while(p!=NULL);

       printf("/n按任意键继续!!!");

          printf("/n");

       //fclose(fp);

       getch();

}

 

 

//根据学号来删除学生信息

struct student *Delete(struct student *head,int num)

{

       struct student *p1,*p2;

       if (head==NULL)    //空链表时返回

       {

           printf("/n链表为空!/n");

           return(head);

       }

       p1=head;  

       while(num!=p1->num && p1->next!=NULL)

       {

            p2=p1;

            p1=p1->next;

       }

        if(num==p1->num)   //链表找到相应的学号

        {

               if(p1==head)     //表头删除

                   head=p1->next;

               else         //表中和表尾删除

                   p2->next=p1->next;

               printf("你删除的学生信息为:/n");

               printf("学号为:%d/t",p1->num);

               printf("姓名为:%s/t",p1->name);

               printf("班级为:%s/t",p1->class_0);

                        printf("/n");

               printf("电子技术成绩为:%.2f/t",p1->elec);

               printf("程序设计成绩为:%.2f/t",p1->c_prog);

               printf("多媒体成绩为:%.2f/t",p1->media);

                        printf("/n");

               printf("英语成绩为:%.2f/t",p1->eng);

               printf("数学成绩为:%.2f/t",p1->math);

               printf("体育成绩为:%.2f/t",p1->sport);

                        printf("/n");

               printf("马克思主义政治经济学成绩为:%.2f/t",p1->polity);

               printf("平均成绩为:%.2f/t",p1->ave);

               printf("学生名次为:%d/t",p1->order);

               printf("/n");

                        head=order(head);

               n=n-1;

                        free(p1);

        }

        else        //找不到学号

                printf("学号 %d 没有找到!/n",num);

        return(head);

}

 

 

//插入学生信息

struct student *insert(struct student *head, struct student *stud)

{

         struct student *p0,*p1,*p2;

         p1=head;

         p0=stud;  

         if(head==NULL)    //空链表时返回

         {

                 head=p0;

                 p0->next=NULL;

         }

         else

         {

                  while((p0->ave<p1->ave) && (p1->next!=NULL))

                  {

                          p2=p1;          

                          p1=p1->next;

                  }

 

                  if(p0->ave>=p1->ave)

                  {

                          if(p1==head)   //链表头插入

                          {

                              p0->next=p1;

                              head=p0;

                                                   // head->next=p0;

                           }

                          else      //链表中插入

                          {

                              p2->next=p0;

                              p0->next=p1;

                          }

 

                 }

                 else     //链表尾部插入

                 {

                      p1->next=p0;

                      p0->next=NULL;

                 }

 

         }

         n=n+1;

               p0->order=0;   //初始化名次

         return(head);

}

 

//根据学生学号来查找学生信息

struct student *Lookup(struct student *head, int num)

{

          struct student *p1,*p2;

 

          p1=head;

 

          if(head==NULL)    //空链表时返回

          {

                printf("/n链表为空!/n");

                return(head);

          }

          else

          {

                while(num!=p1->num && p1->next!=NULL)

                {

                    p2=p1;

                    p1=p1->next;

                }

                if(num==p1->num)   //找到相对应的学号则显示

                {

                    printf("你查找的学生信息为:/n");

                    printf("学号为:%d/t",p1->num);

                    printf("姓名为:%s/t",p1->name);

                    printf("班级为:%s/t",p1->class_0);

                                   printf("/n");

                    printf("电子技术成绩为:%.2f/t",p1->elec);

                    printf("程序设计成绩为:%.2f/t",p1->c_prog);

                    printf("多媒体成绩为:%.2f/t",p1->media);

                                   printf("/n");

                    printf("英语成绩为:%.2f/t",p1->eng);

                    printf("数学成绩为:%.2f/t",p1->math);

                    printf("体育成绩为:%.2f/t",p1->sport);

                                   printf("/n");

                    printf("马克思主义政治经济学成绩为:%.2f/t",p1->polity);

                    printf("平均成绩为:%.2f/t",p1->ave);

                    printf("学生名次为:%d/t",p1->order);

                    printf("/n");

                    return(head);

                }

                else         //学号不在链表内

                {

                    printf("你输入的学号不在链表内!/n");

                    return(head);

                }

          }

}

 

 

//根据学生学号来修改学生的信息

struct student *Modify(struct student *head, int num)

{

          struct student *p1,*p2;

          struct student *stude;

                stude=(struct student*)malloc(LEN);

                p1=head;

                if(head==NULL)       //链表为空时不能改变信息

          {

                printf("/n链表为空!/n");

                return(head);

          }

          else

          {

                while(num!=p1->num && p1->next!=NULL)

                {

                    p2=p1;

                    p1=p1->next;

                }

                if(num==p1->num)   //找到相应的学号时

                {

                    if(p1==head)     //表头删除

                                          head=p1->next;

                                   else         //表中和表尾删除

                                          p2->next=p1->next;

                                   printf("你要修改的学号为%d的先前信息为:/n",num);

                                   printf("学号为:%d/t",p1->num);

                                   printf("姓名为:%s/t",p1->name);

                                   printf("班级为:%s/t",p1->class_0);

                                   printf("/n");

                                   printf("电子技术成绩为:%.2f/t",p1->elec);

                                   printf("程序设计成绩为:%.2f/t",p1->c_prog);

                                   printf("多媒体成绩为:%.2f/t",p1->media);

                                   printf("/n");

                                   printf("英语成绩为:%.2f/t",p1->eng);

                                   printf("数学成绩为:%.2f/t",p1->math);

                                   printf("体育成绩为:%.2f/t",p1->sport);

                                   printf("/n");

                                   printf("马克思主义政治经济学成绩为:%.2f/t",p1->polity);

                                   printf("平均成绩为:%.2f/t",p1->ave);

                                   printf("学生名次为:%d/t",p1->order);

                                   printf("/n");

                                printf("请输入你要改变的成绩:(格式为:每输入一次回车)/n");

                    printf("请输入电子技术成绩:");

                    scanf ("%f",&stude->elec);

                    printf("请输入程序设计成绩:");

                    scanf ("%f",&stude->c_prog);

                    printf("请输入多媒体技术成绩:");

                    scanf ("%f",&stude->media);

                    printf("请输入大学英语成绩:");

                    scanf ("%f",&stude->eng);

                    printf("请输入高等数学成绩:");

                    scanf ("%f",&stude->math);

                    printf("请输入体育成绩:");

                    scanf ("%f",&stude->sport);

                    printf("请输入马克思主义政治经济学成绩:");

                    scanf ("%f",&stude->polity);

                    p1->elec=stude->elec;

                    p1->c_prog=stude->c_prog;

                    p1->media=stude->media;

                    p1->eng=stude->eng;

                    p1->math=stude->math;

                    p1->sport=stude->sport;

                    p1->polity=stude->polity;

                    p1->ave=Statistic(p1);

                    head=insert(head,p1);

                                   head=order(head);

                                   n=n-1;

                                   return(head);

                }

                else       //找不到学号时

                {

                    printf("你查找的学号不在链表内!/n");

                    return(head);

                }

          }  

}

 

 

//根据学生平均分来排名

struct student *order(struct student *head )

{

            struct student *p;

            int i=1;

                     p=head;

            while(p!=NULL)

                     {

                            p->order=i;

                            i++;

                            p=p->next;

                     }

 

            return (head);

}

 

 

//根据输入的各科成绩来计算平均分

float Statistic(struct student *p)

{

            p->ave=(p->elec+p->c_prog+p->media+p->eng+p->math+p->sport+p->polity)/7.0;

            return p->ave;

}

 

//打印星涵数

void start()

{

       printf("********************************************************************************/n");

}

 

//主涵数

int main()

{     

     struct student *head,*stu;

     int  Delete_num;

     int  lookup_num;

     int  Modify_num;

     char ckey='a';

     int istate=0;

     do

     {

        system("cls"); //VC++清屏涵数 包含在#include"stdlib.h"

            //clrscr();   //C/C++清屏涵数 包含在#include"conio.h"

        start();

           printf("/t/t/tWelcome to my score program!!!/n");

           printf("/t/t/t欢迎你来到我的成绩管理系统 !!!/n");

           printf("/t/t/t/t/t作者:刘德范/n/n");

           start();

              printf("1:输入学生信息/n");

        printf("2:删除学生信息/n");

        printf("3:插入学生信息/n");

        printf("4:查找学生信息/n");

        printf("5:修改学生信息/n");

        printf("6:平均成绩排序/n");

        printf("7:输出学生信息/n");

        printf("Esc:退出/n");

        printf("请输入你的选择(1-7):/n/n");

        ckey=getch();

        if(ckey=='1')    //创建

        {

                printf("请输入学生的信息:/n/n");

                head=create();

                head=order(head);

                            Output(head);

                istate=1;   //记录链表是否有数据

        }

        else if((istate==0)&&(ckey!=Esc))

        {

                printf("/n错误:你必需先输入学生信息!!!");

                printf("/n按任意键继续!!!");

                printf("/n");

                getch();

        }

        else if(ckey=='2')   //删除

        {

                printf ("/n请输入你要删除的学生学号:/n/n");

                scanf ("%d",&Delete_num);

                head=Delete(head,Delete_num);

                Output(head);

        }

        else if(ckey=='3')   //插入

        {

 

                printf (" /n请输入你要插入的学生信息:/n/n");

                stu=(struct student*)malloc(LEN);

                printf("请输入学生信息,输入格式为:(每输入一项回车)/n");

                printf("请输入学生学号:");

                scanf("%d",&stu->num);

                printf("请输入学生姓名:");

                scanf("%s",&stu->name);

                printf("请输入学生班级:");

                scanf("%s",&stu->class_0);

                            printf("/n");

                printf("请输入电子技术成绩:");

                scanf("%f",&stu->elec);

                printf("请输入程序设计成绩:");

                scanf("%f",&stu->c_prog);

                printf("请输入多媒体成绩:");

                scanf("%f",&stu->media);

                printf("请输入大学英语成绩:");

                scanf("%f",&stu->eng);

                printf("请输入高等数学成绩:");

                scanf("%f",&stu->math);

                printf("请输入大学体育成绩:");

                scanf("%f",&stu->sport);

                printf("请输入马克思主义政治经济学成绩:");

                scanf("%f",&stu->polity);

                printf("/n");

                stu->ave=Statistic(stu);  //求stu的平均值

                head=insert(head,stu);

                head=order(head);

                            Output(head);

        }

 

        else if(ckey=='4')   //查找

        {

                printf("  /n请输入你要查找的学生学号:/n/n");

                scanf ("%d,",&lookup_num) ;

                head=Lookup(head,lookup_num);

                Output(head);

        }

        else if(ckey=='5')    //修改

        {

                printf("  /n请输入你要修改学生信息的学号:/n/n");

                scanf ("%d,",&Modify_num) ;

                head=Modify(head,Modify_num);

                Output(head);

        }

        else if(ckey=='6')    //排序

        {

                order(head);

                Output(head);

        }

        else if(ckey=='7')   //查看

        {

                Output(head);

        }

     }

     while(ckey!=Esc);       //按键盘上的Esc键退出!!!

}
流程图:

结果如下:

学生成绩管理系统完整版相关推荐

  1. C# 学生成绩管理系统 完整版

    知识点 一种类似指针的数据结构? 文件的读取和写入 避免乱码 ansi 字符串读取后分割的bug 可能是因为编码问题导致的 为了解决这个bug 写入的时候直接用\r\n分割了 但是解决乱码问题之后可能 ...

  2. c语言学生信息系统 完整版,C语言 学生信息管理系统(完整版).docx

    C语言 学生信息管理系统(完整版) 电子科技大学成都学院 程序综合设计论文 论文题目 学生信息管理系统 学生姓名 魏国 学 号 1340840625 专 业 机械设计制造及其自动化 系(分院) 电子工 ...

  3. C语言学生成绩管理系统文档版,C语言学生信息管理系统(完整版)总结.docx

    电子科技大学成都学院 程序综合设计论文 论文题目 学生信息管理系统 学生姓名 魏国 学 号 1340840625 专 业 机械设计制造及其自动化 系(分院) 电子工程系 授课教师 杜娥 2015年12 ...

  4. 利用Python分析学生成绩(完整版)

    注意:本实验是基于Anconda3.X所进行的 一.题目描述 二.题目分析 三.完整代码展示 四.结果展示 一.题目描述 个人构造一个30名学生的班级,每名学生有三门课程,学生的学号和各门成绩形如: ...

  5. 学生成绩管理系统(完整版)

    说明 一.设计报告的基本内容至少包括封面. 正文. 参考文献三部分. 1. 封面 封面按照模版填写,不得随意更改. 2. 正文 正文是设计报告的主体, 具体由以下几部分组成: (1) 问题描述 描述要 ...

  6. 基于PHP和MySql的学生成绩管理系统(附完整版代码)

    系统开发运行环境 操作系统:win10 软件:AppServ(php+apache+mysql),nginx(代理) 2.2 功能要求 2.2.1 教职工 对学生成绩有一个整体的了解,在今后的教学中能 ...

  7. java计算并显示学生的成绩_Java开学测试-学生成绩管理系统

    题目: 1.定义 ScoreInformation 类,其中包括七个私有变量(stunumber, name, mathematicsscore, englishiscore,networkscore ...

  8. ASP.NetCore+VUE 实现学生成绩管理系统(一)

    周三 陪伴是最长情的告白 还有两天情人节:「无论是在家里,还是在工作,或者是在自我防护中,多给家人爱人发句平安,是最有心意.最重要的一件事.」 ♥感谢老李???? 近来一段时间一直没有学习新的东西,闲 ...

  9. JSP Servlet Mysql学生成绩管理系统

    一. 开发背景 软件名称:学生成绩管理系统 使用对象:有Java基础的同学 二. 需求分析 系统分析 该学生信息管理系统涉及到学生.教师.系统管理员.班级.学生成绩.课程.设置一个系统管理员对系统进行 ...

最新文章

  1. vue --- 使用字符串'api'跨域请求资源
  2. 小技巧!CSS 整块文本溢出省略特性探究
  3. 被 C# 的 ThreadStatic 标记的静态变量,都存放在哪里了?
  4. POJ 2226 二分图最小覆盖
  5. golang return要返回的参数太多_Golang中的Defer必掌握的7知识点
  6. RestfulToolKit:根据接口,快速定位代码
  7. html5 push api,HTML5+ API Reference
  8. HttpClient连接池的连接保持、超时和失效机制
  9. try catch对异常进行输出到日志、_spring Boot手把手教学(7): 抛弃try-catch, 如何优雅统一处理异常(含404)...
  10. mysql 页 存储,MySQL InnoDB Engine--数据页存储和UPDATE操作
  11. Linux系统编程 -- stdin stdout stderr
  12. 深圳中电港 招聘FAE(FPGA Lattice)
  13. 深入浅出的mysql第三版和第二版的区别_深入浅出mysql和高性能mysql哪本好
  14. 快速阅读之眼球的训练
  15. Java Web项目开发项目经验总结
  16. 已知标准差用计算机求标准误,【摘自网络】关于标准差、标准误、相对标准差的计算...
  17. java 中英文长度_Java--计算中英文长度的若干种方法
  18. 我win10下载红警-尤里复仇黑屏,能运行,下载这个好了
  19. Linux账户管理详解
  20. python docx首行缩进两字符的设定方法

热门文章

  1. tensorflow打印模型图_tensorflow实现打印pb模型的所有节点
  2. 烧一根不均匀的绳,从头烧到尾总共需要一个小时。现在有若干条材质相同的绳子,问如何用烧绳的方法来计时一个小时十五分钟呢?
  3. 华为影像XMAGE:求尽世间像,终见菩提心
  4. groovy if 判断字符串_Groovy(二)-字符串
  5. 大数据就业前景及职能定位解析!
  6. 重新安装的nvidia显卡驱动
  7. 是非人生 — 一个菜鸟程序员的5年职场路 第1节
  8. 区块链技术涉及哪些编程语言?
  9. SpringBoot 雪花算法生成商品订单号【SpringBoot系列13】
  10. 阿里巴巴国际站产品标题优化技巧