收藏 分享(赏)

C语言 学生成绩管理系统实验报告.doc

上传人:精品资料 文档编号:8320419 上传时间:2019-06-20 格式:DOC 页数:31 大小:710.50KB
下载 相关 举报
C语言 学生成绩管理系统实验报告.doc_第1页
第1页 / 共31页
C语言 学生成绩管理系统实验报告.doc_第2页
第2页 / 共31页
C语言 学生成绩管理系统实验报告.doc_第3页
第3页 / 共31页
C语言 学生成绩管理系统实验报告.doc_第4页
第4页 / 共31页
C语言 学生成绩管理系统实验报告.doc_第5页
第5页 / 共31页
点击查看更多>>
资源描述

1、0HUNAN UNIVERSITY程序设计训练报 告题 目 学 生 成 绩 管 理 系 统 学 生 姓 名 学 生 学 号 专 业 班 级 指 导 老 师 1湖 南 大 学 程 序 设 计 训 练 报 告 目 录一 程序功能简介.3二 本人完成的主要工作.3三 设计方案 .31) 设计分析 .32) 模块的功能及程序分析43) 核心算法流程 图74) 核心源程序模 块85) 操作方法 简介.86) 实验结 果.98) 设计体 会.11四 附录 122一、 程序功能简介;本程序作为一个学生成绩管理系统,用户可以首先使用管理员模式初始化该系统。初始化完成之后,用户可以选择使用成绩记录人模式进入系统

2、,对学生成绩进行记录。系统自动储存所记录的学生成绩,然后用户可根据不同需要来选择不同的功能来使用程序,其中包括成绩查询与增减,成绩排序,成绩分析等功能。二、 本人完成的主要工作;程序设计分析,绘制程序流程图,写出大体结构算法以及各个核心算法模块,写出核心源程序,对源程序进行算法优化,对源代码进行多次试验验证其正确性,完成源代码的测试以及代码书写规范检测。三、 设计方案;1) 设计分析;首先拿到这个题目,我就开始思考如何将这个看似简单的系统做的较为完善,而不是简简单单的学生成绩管理系统,学生管理系统自然是这个题目的核心,从中发散思维,我想到了几个比较细小的地方。例如:如何很好的将程序中的功能步骤

3、化,系统化以及便利化。基于 C 语言程序的特点,我还联想到了对信息的保存问题。这些问题都随着代码的一步一步完善而解决。管理员系统与查询系统的选择很好的解决3了这些问题。2) 模块的功能及程序说明;整个系统除了主函数外,另外还有 10 个函数,实现八大功能:输入功能、显示功能、查找功能、排序功能、插入功能、保存功能、读取功能。各个函数的详细设计说明分别如下:1、 主函数 main()利用无限次循环 for(;)和 swithch()实现各函数的调用,系统根据输入的数字选项来调用相应的函数。2、 初始化函数 STUDENT *init()这是一个无参函数,里面只有一个语句,它的作用是使链表初始化,

4、使 head 的值为 NULL。比如:没有这个函数的话,在你没有输入任何数据的情况下,去执行显示功能的时候会显示一些乱码!3、 菜单选择函数 int menu_select();这是一个无参函数,主要实现“功能选择” 的界面,在这个界面里有显示系统的九大功能,根据每个功能前面的序号进行选择,中间还显示系统当前的时间。等执行完每一个函数功能后,按任一键回到主界面也要通过这个函数来实现!4、 输入记录函数 STUDENT *create()这是一个无参函数,用来执行第学生成绩记录的输入,当学生为0 时停止输入,函数结束后,带回一个指向链表头的指针 head。4算法:先声明一个首节点 head,并将

5、 head-next 设为 NULL。每输入一个数据就声明一个新节点 p,把 p-next 设为 NULL,并且链接到之前列表的尾端。5、 显示记录函数 void print(STUDENT *head)这是一个不返回值的有参函数,形参为“链表头的指针” ,负责对全部学生成绩记录的输出,不足之处就是不能对学生成绩进行分页显示。算法:先将 p 结点的指针指向第一个结点,将 p 结点(即第一个结点)的数据输出。然后再将 p 结点的指针指向 p 指针的的指针(即下一结点) ,将 p 结点( 即第一结点)的数据输出。重复执行此步聚直到 p 指针指向 NULL 为止。6、 查找记录函数 void sea

6、rch(STUDENT *head)这是一个不返回值的有参函数,形参为“链表头的指针” ,实现按学号对某个学生进行查找,并显示所查找到的记录。算法:采用线性查找法往下一个节点查找。输入所要查找的学生的学号 s,设一个指针变量 p,先指向第一个结点,当 strcmp(p-name,s) /*学号*/;2) char name20; /*姓名*/;3) char sex2; / *性别*/;134) int score3; /*成绩*/;5) int sum; /*总成绩*/;6) int n; /*声明一个全局变量 */;7) struct student *next /*声明一个结构体指针*/

7、;(2) 自定义函数:1)Student *cin(void); /*学生信息成绩录入函数*/2)Student *sort_1(Student *head,int); /*声明按学号排序函数 */3)void sort_2(Student *head); /*声明按总分排序函数*/4)void print(Student *head); /*声明显示函数*/5)Student *sort_all(Student *head); /*声明排序函数*/6)void find(Student *head); /*声明查询函数*/(3) 源程序代码:#include #include #includ

8、e #include #define LEN sizeof(Student)typedef struct studentint num; /*学号*/char name20; /*姓名*/14char sex2; /*性别*/int score3; /*成绩*/int sum; /*总成绩*/struct student *next;Student;int n; /*声明一个全局变量*/Student *cin(void); Student *sort_1(Student *head,int); /*声明按学号排序函数*/void sort_2(Student *head); /*声明按总分排

9、序函数*/void print(Student *head); /*声明显示函数*/Student *sort_all(Student *head); /*声明排序函数*/void find(Student *head); /*声明查询函数*/Student *add_new(Student *head);Student *cin()int flag; Student *head,*p1,*p2;n=0;head=(Student *)malloc(LEN);p2=head;printf(“n 请输入第%d 名学生的学号,学号为 0 表示结束输入:“,n+1);15scanf(“%d“,whi

10、le(getchar()!=n);for(;flag;) /*输入每个学生的信息*/n+;p1=(Student *)malloc(LEN);p1-num=flag;printf(“请输入第%d 名学生的姓名:“,n); /*输入姓名*/scanf(“%s“,p1-name);printf(“请输入第%d 学生的性别:“,n); /*输入性别*/scanf(“%s“,p1-sex);printf(“请输入第%d 名学生的语文成绩:“,n); /*输入语文成绩*/scanf(“%d“,printf(“请输入第%d 名学生的数学成绩:“,n); /*输入数学成绩*/scanf(“%d“,print

11、f(“请输入第%d 名学生的英语成绩:“,n); /*输入英语成绩*/scanf(“%d“,p1-sum=p1-score0+p1-score1+p1-score2;p2-next=p1;16p2=p1;printf(“n 请输入第%d 名学生的学号,没有此学生则输入 0表示结束:“,n+1);scanf(“%d“,p2-next=NULL;printf(“nn“);return head;Student *sort_all(Student *head) /*定义排序函数*/int choose;for(;)printf(“ntt# # # # # 学生成绩统计排序 # # # #n“);pr

12、intf(“tt#t1.按学生学号排序t #n“);printf(“tt#t2.按学生总分排序t #n“);printf(“tt#t7.单科高分及均分t #n“);printf(“tt#t8.显示当前学生成绩t #n“);printf(“tt#t0.返回上一级菜单t #n“);printf(“请输入你要执行的操作:“);scanf(“%d“,17while(getchar()!=n);switch(choose)case 1:case 2:case 3:case 4:case 5:case 6:head=sort_1(head,choose);break;case 7:print(head);

13、sort_2(head);break;case 8:print(head);break;case 0:return head;default: printf(“nn 您的输入有误!请重新输入:nn“);break;Student *sort_1(Student *head,int choose) /*定义按学号排序函数*/Student *p1,*p2=head-next,*pm,*px;Student mid;18if (!p2) return head;for(p1=p2;p1-next!=NULL;p1=p1-next)pm=p1;for(p2=p1-next;p2!=NULL;p2=p

14、2-next)switch(choose)case 1:if (pm-nump2-num) pm=p2;break;case 2:if (pm-sumsum) pm=p2;break;case 3:if (pm-score0score0) pm=p2;break;case 4:if (pm-score1score1) pm=p2;break;case 5:if (pm-score2score2) pm=p2;break;if (pm!=p1)mid=*pm;*pm=*p1;*p1=mid;px=pm-next;19pm-next=p1-next;p1-next=px;printf(“n 排序后

15、的成绩表为:n“);print(head);return head;void sort_2(Student *head) /*定义按总分排序函数*/Student *p=head-next;int max_1,max_2,max_3,min_1,min_2,min_3;int max_sum,min_sum;int sum_1=0,sum_2=0,sum_3=0;float aver_1,aver_2,aver_3,aver_sum;if (!p) return;max_1=min_1=p-score0;max_2=min_2=p-score1;max_3=min_3=p-score2;max

16、_sum=min_sum=p-sum;for(;p;p=p-next)if (max_1score0) max_1=p-score0;20else if (min_1p-score0) min_1=p-score0;if (max_2score1) max_2=p-score1;else if (min_2p-score1) min_2=p-score1;if (max_3score2) max_3=p-score2;else if (min_3p-score2) min_3=p-score2;if (max_sumsum) max_sum=p-sum;else if (min_sump-su

17、m) min_sum=p-sum;sum_1+=p-score0;sum_2+=p-score1;sum_3+=p-score2;aver_1=1.0*sum_1/n;aver_2=1.0*sum_2/n;aver_3=1.0*sum_3/n;aver_sum=aver_1+aver_2+aver_3;printf(“总共%d 名学生,具体数据为:n“,n); printf(“总分最高分为%d,最低分位%d,平均分为%.2fn“,max_sum,min_sum,aver_sum);void find(Student *head) /*定义查询函数*/Student *p;int choose,

18、fnum;char tem20;if (n=0) printf(“n 当前系统没有任何学生数据!n “);return;21for(;)printf(“n 请输入您要查询学生的方式:nn“);printf(“1、按学号查询;2、按姓名查询;0、我不查询了。nn“);printf(“请选择:“);scanf(“%d“,while(getchar()!=n);if (choose=1)printf(“n 请输入你要查询的学生的学号,输入 0 退出学号查询:“);scanf(“%d“,for(;fnum;)for(p=head-next;p!=NULLp=p-next);if (!p)printf(

19、“nn 找不到你要查询的学号,请重新输入,输入 0 表示结束:“);22scanf(“%d“,else if (p-num=fnum)printf(“n 学号为%d 学生的数据为:n“,p-num);printf(“学号t 姓名t 性别t 语文成绩 数学成绩 英语成绩 总分n“);/*输出所有的学生信息*/printf(“%dt%st%st %d %d %d %dn“,p-num,p-name,p-sex ,p-score0,p-score1,p-score2,p-sum);printf(“nn 请输入你还要查询的学生的学号,输入 0 表示不按学号查询了:“);scanf(“%d“, else

20、 if (choose=2)printf(“n 请输入你要查询的学生的姓名,输入0 退出姓名查询:“);23scanf(“%s“,tem); for(;strcmp(tem,“0“);)for(p=head-next;p!=NULLp=p-next);if (!p)printf(“nn 找不到你要查询的姓名,请重新输入,输入 0 表示结束:“);scanf(“%s“,tem);else if (!strcmp(p-name,tem)printf(“n 姓名为%s 学生的数据为:n“,p-name);printf(“学号t 姓名t 性别t 语文成绩 数学成绩 英语成绩 总分n“);printf(

21、“%dt%st%st %d %d %d %dn“,p-num,p-name,p-sex ,p-score0,p-score1,p-score2,p-sum);printf(“nn 请输入你还要查询24的学生的姓名,输入 0 表示不按姓名查询了:“);scanf(“%s“,tem); else if (choose=0) printf(“n 你选择了不查询!n“);break;else printf(“n 你以其他方式选择了不查询!n“);break;Student *add_new(Student *head) /*定义插入函数*/Student *p;int flag;printf(“nn

22、请输入你要新加入学生的学号,学号为 0 表示结束输入:“);scanf(“%d“,while(getchar()!=n);for(;flag;)p=(Student *)malloc(LEN);25p-num=flag;printf(“请输入新加入学生的姓名:“,n); /*输入姓名*/scanf(“%s“,p-name);printf(“请输入新加入学生的性别:“); /*输入性别*/scanf(“%s“,p-sex);printf(“请输入新加入学生的语文成绩:“,n); /*输入语文成绩*/scanf(“%d“,printf(“请输入新加入学生的数学成绩:“,n); /*输入数学成绩*/

23、scanf(“%d“,printf(“请输入新加入学生的英语成绩:“,n); /*输入英语成绩*/scanf(“%d“,p-sum=p-score0+p-score1+p-score2;p-next=head-next;head-next=p;n+;printf(“n 请输入还要加入学生的学号,没有此学生则输入0 表示结束:“);scanf(“%d“,26head=sort_1(head,1);printf(“加入后的成绩表为:n“);print(head);return head; void print(Student *head)Student *p=head-next;if (!p) p

24、rintf(“nn 此系统目前没有任何学生数据!nnn“);return;printf(“此系统目前共计学生%d 名:n“,n);printf(“*学生成绩统计一览*n“);printf(“学号t 姓名t 性别t 语文成绩 数学成绩 英语成绩 总分n“);for(;p;p=p-next)printf(“%dt%st%st %d %d %d %dn“, p-num,p-name,p-sex ,p-score0,p-score1,p-score2,p-sum=p-score0+p-score1+p-score2); struct student *del(struct student *head,

25、long num) /*定义删27除学生信息函数*/struct student *p1,*p2;if(head=NULL) printf(“nlist null! n“);return head;p1=head;while(num!=p1-num p1=p1-next;if(num=p1-num)if(p1=head)head=p1-next;else p2-next=p1-next;printf(“delete:%ldn“,num);n=n-1;else printf(“%ld not deen found! n“,num);return(head); int main()/*主函数即用户

26、的操作界面*/Student *head;int choose,i,num; /*声明局部变量*/head=(Student *)malloc(LEN);head-next=NULL; for(;)28printf(“ntt* * * * * 学生成绩管理系统 * * * *n“); /*学生成绩管理系统*/printf(“tt*t1.学生数据键盘录入t *n“); /*.学生数据键盘录入*/printf(“tt*t2.学生数据统计排序t *n“); /*学生数据统计排序*/printf(“tt*t3.查询学生数据tt *n“); /*.查询学生数据*/printf(“tt*t4.插入学生数据

27、tt *n“); /*插入学生数据*/printf(“tt*t5.显示当前成绩表t *n“); /*显示当前成绩表*/printf(“tt*t6.删除学生数据tt *n“); /*删除学生数据*/printf(“tt*t0.退出成绩管理系统t *n“); /*退出成绩管理系统*/printf(“n 请输入你要执行的操作:“); /*请输入你要执行的操作*/scanf(“%d“,while(getchar()!=n);switch(choose)29case 1:printf(“ntttt*注意*“);printf(“nn 此选项将会建立新的学生数据系统 ,原来的数据将不再存在,你确信要删除原来的数据并建立新的数据系统么?nn“);printf(“1、建立新的数据系统;0、放弃建立新的数据系统。nn“);printf(“请选择:“);scanf(“%d“,if (i=1) head=cin();print(head);break;else if (i=0)printf(“n 你选择了放弃建立新的数据系统!n“);break;else printf(“n 你做出别的选择,当作放弃建立!n“);break;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报