最新C语言课程设计-学生成绩管理系统资料_第1页
最新C语言课程设计-学生成绩管理系统资料_第2页
最新C语言课程设计-学生成绩管理系统资料_第3页
最新C语言课程设计-学生成绩管理系统资料_第4页
最新C语言课程设计-学生成绩管理系统资料_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精品文档青岛农业大学课程设计报告题目学生成绩管理系统姓名:张洋学院:理学与信息科学学院专业:通信工程班级:1班学号: 20123267指导教师:李吉忠2013年9月4日目录一 设计目的.3二 课程设计的内容 3三 课程设计的要求与数据 3四 课程设计应完成的工作 4五 总体设计(包含几大功能模块) 4六详细设计(各功能模块的具体实现算法一一流程图) .5七 调试分析(包含各模块的测试用例,及测试结果) .6八 总结 .16九 参考资料 .17精品文档设计目的进一步加深、巩固所学专业课程(C语言程序设计)的基本理论知识,理论联系实际,进一步培养自己综合分析问题和解决问题的能力。掌握运用C语言独立

2、地编写、调试应用程序和进行其它相关设计的技能。二 课程设计的内容对学生信息(包括学号、语文、数学、英语、平均分 )进行管理,包括学生成 绩的信息输入、输出、查询、删除、排序、统计、退出 . 将学生的成绩信息进行 记录,信息内容包含:( 1)学生的学号( 2)学生的姓名( 3)学生的成绩。假 设,现收集到了一个班学生的所有成绩信息, 要求用C语言编写一个简单的成绩 管理系统,可进行录入、查询、修改和浏览等功能。学习相关开发工具和应用软 件,熟悉系统建设过程。三 课程设计的要求与数据1、用C语言实现系统;2、对学生信息 (包括学号、姓名、语文、数学、英语、平均分 )进行管理 , 包括学生成绩的信息

3、输入、输出、查询、删除、排序、统计、退出 .3、学生信息包括:其内容较多,为了简化讨论,要求设计的管理系统能够完成以下功能:1)输入记录模块。输入记录模块主要完成将数据存入单链表中的工作。 在此成绩管理系统中,记录可以从以二进制形式存储的数据文件中读入,也 可从键盘逐个输入学生记录。 学生记录由学生的基本信息和成绩信息字段构 成。当从数据文件中读入记录时, 它就是在以记录为单位存储的数据文件中, 将记录逐条复制到单链表中。2)查询记录模块。查询记录模块主要完成在单链表中查找满足相关条 件的学生记录。在此成绩管理系统中,用户可以按照学生的学号或姓名在单 链表中进行查找。若找打该学生的记录,则返回

4、指向该学生的指针。否则, 返回一个值为 NULL 的空指针,并打印出未找到该学生记录的提示信息。3)更新记录模块。更新记录模块主要完成对学生记录的维护。在此成 绩管理系统中,它 实现了对学生记录的修改、删除、插入和排序操作。一 般而言,系统进行论文这些操作之后,需要将修改的数据存入源数据文件。4)统计记录模块。统计记录模块主要完成对各门功课最高分和不及格 人数的统计。5)输出记录模块。输出记录模块主要完成两个任务。第一,它实现对学生记录的存盘操作, 即将单链表中的各节点中存储的学生记录信息写入数 据文件中。第二,它实现将单链表中存储的学生记录信息以表格的形式在屏 幕上打印出来。四 课程设计应完

5、成的工作(1) 编写算法;(2) 算法测试,并有具体的测试结果和结果分析;(3) 撰写课程设计报告。内容包括:1) 封面扉页2) 设计任务书3) 目录4) 总体设计方案(包括流程图)5) 使用说明及运行实例(包括界面)6) 成员设计内容简介7) 项目源程序代码(注意注释的使用)8) 指导教师评语五 总体设计(包含几大功能模块)1、成绩录入功能2、成绩查询功能3、成绩更新功能4、统计功能5 、输出功能6 、退出系统六 详细设计(各功能模块的具体实现算法流程图)6.1 各函数的功能和实现1、 输入初始的学生信息:输入信息包括学生的姓名、学号以及学生的成绩等 相关信息;可用函数 void input

6、(STUDENT *data, int *len)来实现此操作。2、成绩输出模块:输出学生的信息以及成绩 void output(STUDENT*data, int len):通过学生的姓名来查看学生的相关成绩,同时也可以分别通过 caverage() 、maverage() 、eaverage() 和 comaverage() 来输出成绩的 平均分数、最高和最低分数。3、 成绩查询模块:可用 void fin d(STUDENT *data, i nt le n)来实现。找 到就输出此学生全部信息。4、 删除模块:用函数 void delete_item(STUDENT *data, int

7、 *len)来实现5、 排序模块:用函数 void sort(STUDENT *data, int len)来实现6、统计功能能:用函数 void stat(STUDENT *data, int len) 来实现7、 退出系统:可用一个函数exit ()来实现,首先将信息保存到文件中, 释放动态创建的内存空间,再退出此程序。如图七 调试分析(包含各模块的测试用例,及测试结果)7.1 源程序#include <stdio.h>#include<string.h>#include <stdlib.h>#include <malloc.h>#defin

8、e LEN sizeof(Student)typedef struct studentint num;char name20;int score4;int sum;struct student *next;Student;int n;Student *cin(void);Student *sort_1(Student *head,int); void sort_2(Student *head); void print(Student *head);Student *sort_all(Student *head);void find(Student *head);Student *add_new

9、(Student *head);Student *cin()int flag;Student *head,*p1,*p2;n=0;head=(Student *)malloc(LEN);p2=head;printf("n请输入第d名学生的学号,学号为0表示结束输入:",n+1);scanf("%d",&flag);while(getchar()!='n');for(;flag;)n+;p1=(Student *)malloc(LEN); p1->num=flag;printf("请输入第d名学生的姓名:"

10、,n);scanf("%s",p1->name);printf("请输入第d名学生的高数成绩:",n);scanf("%d",&p1->score0);printf("请输入第d名学生的英语成绩:",n);scanf("%d",&p1->score1);printf("请输入第c名学生的计算机成绩:",n);scanf("%d",&p1->score2);printf("请输入第c名学生的物理成绩:

11、",n);scanf("%d",&p1->score3);p1->sum=p1->score0+p1->score1+p1->score2+p1->score3;p2->next=p1;p2=p1;printf("n请输入第d名学生的学号,没有此学生则输入0表示结束:",n+1);scanf("%d",&flag);p2->next=NULL;printf("nn");return head;Student *sort_all(Student

12、 *head)int choose;for(;)printf("ntt# # # # #学生成绩统计排序 # # # #n");printf("tt#t1.按学生学号排序 t #n");printf("tt#t2.按学生总分排序 t #n");printf("tt#t3.按学生高数成绩排序 t #n");printf("tt#t4.按学生英语成绩排序 t #n");printf("tt#t5. 按学生计算机成绩排序 t #n");printf("tt#t6.按学生物

13、理成绩排序 t #n");printf("tt#t7.单科高分及均分 t #n");printf("tt#t8.显示当前学生成绩 t #n");printf("tt#t0.返回上一级菜单 t #n");prin tf("tt# # # # # # A-A # # # #nn");printf(" 请输入你要执行的操作 :");scanf("%d",&choose);while(getchar()!='n');switch(choose)cas

14、e 1:case 2:case 3:case 4:case 5:case 6:head=sort_1(head,choose);break;case 7:print(head);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

15、;if (!p2) return head; for(p1=p2;p1->next!=NULL;p1=p1->next)pm=p1; for(p2=p1->next;p2!=NULL;p2=p2->next) switch(choose)case 1:if (pm->num>p2->num) pm=p2;break;case 2:if (pm->sum<p2->sum) pm=p2;break;case 3:if (pm->score0<p2->score0) pm=p2;break;case 4:if (pm-&g

16、t;score1<p2->score1) pm=p2;break;case 5:if (pm->score2<p2->score2) pm=p2;break;case 6:if (pm->score3<p2->score3) pm=p2;break; if (pm!=p1)mid=*pm;*pm=*p1;*p1=mid; px=pm->next;pm->next=p1->next; p1->next=px;printf("n 排序后的成绩表为 :n");print(head);return head;v

17、oid sort_2(Student *head)Student *p=head->next;int max_1,max_2,max_3,max_4,min_1,min_2,min_3,min_4;int max_sum,min_sum;int sum_1=0,sum_2=0,sum_3=0,sum_4=0;float aver_1,aver_2,aver_3,aver_4,aver_sum;if (!p) return;max_1=min_1=p->score0;max_2=min_2=p->score1;max_3=min_3=p->score2;max_2=min

18、_2=p->score3; max_sum=min_sum=p->sum;for(;p;p=p->next)if (max_1<p->score0) max_1=p->score0;else if (min_1>p->score0) min_1=p->score0;if (max_2<p->score1) max_2=p->score1;else if (min_2>p->score1) min_2=p->score1;if (max_3<p->score2) max_3=p->scor

19、e2;else if (min_3>p->score2) min_3=p->score2;if (max_4<p->score3) max_4=p->score3;else if (min_4>p->score3) min_4=p->score3;if (max_sum<p->sum) max_sum=p->sum;else if (min_sum>p->sum) min_sum=p->sum;sum_1+=p->score0;sum_2+=p->score1;sum_3+=p->sco

20、re2;sum_4+=p->sc ore3;aver_1=1.0*sum_1/n;aver_2=1.0*sum_2/n;aver_3=1.0*sum_3/n;aver_4=1.0*s um_4/n;aver_sum=aver_1+aver_2+aver_3+aver_4;prin tf("总共c名学生,具体数据为:n", n);printf("高 数 最 高 分 为%d,最低分为%d,平均分为 .2fn",max_1,min_1,aver_1); printf("英 语 最 高 分 为%d,最低分为%d,平均分为 .2fn",m

21、ax_2,min_2,aver_2); printf("计 算 机 最 高 分为 %d,最低分为%d,平均分为 .2fn",max_3,min_3,aver_3); printf("物 理 最 高 分 为%d,最低分为%d,平均分为 .2fn",max_4,min_4,aver_4);printf(" 总分最高分为%d最低分位%d平均分为%.2fn", max_sum,min_sum,aver_sum);void find(Student *head)Student *p;int choose,fnum;char tem20;if (

22、n=0) printf("n当前系统没有任何学生数据,您就别费劲了!n");return;for(;)printf("n 请输入您要查询学生的方式: nn");printf("1 、按学号查询; 2、按姓名查询; 0、我不查询了。 nn"); printf(" 请选择: ");scanf("%d",&choose); while(getchar()!='n');if (choose=1)printf("n 请输入您要查询的学生的学号,输入 0 退出学号查询: &

23、quot;); scanf("%d",&fnum);for(;fnum;) for(p=head->next;p!=NULL&&p->num!=fnum;p=p->next);if (!p)printf("nn 没有找到您要查询的学号,请重新输入,输入 0 表示结束 :"); scanf("%d",&fnum);else if (p->num=fnum)printf("n学号为d学生的数据为:n",p->num);printf("学号t姓名t高

24、数成绩英语成绩计算机成绩 物理成绩 总分 n");printf("%dt%st %d %d %d %d %dn",p->num, p->name,p->score0,p->score1,p->score2,p->score3, p->sum);printf("nn 请输入您还要查询的学生的学号,输入 0 表示不按学 号查询了: ");scanf("%d",&fnum);else if (choose=2)printf("n 请输入您要查询的学生的姓名,输入 0退出姓

25、名查询: "); scanf("%s",tem);for(;strcmp(tem,"0");) for(p=head->next;p!=NULL&&strcmp(p->name,tem);p=p->next);if (!p)printf("nn 没有找到您要查询的姓名,请重新输入,输入 0 表 示结束 :");scanf("%s",tem);else if (!strcmp(p->name,tem)printf("n姓名为s学生的数据为:n",p

26、->name);printf("学号t姓名t高数成绩英语成绩计算机成绩 物理成绩 总分 n");printf("%dt%st %d %d %d %d %dn", p->num,p->name,p->score0,p->score1,p->score2, p->score3,p->sum);printf("nn 请输入您还要查询的学生的姓名,输入0 表示不按姓名查询了 :");scanf("%s",tem);else if (choose=0) printf("

27、;n您选择了不查询! n");break;else printf("n 您以其他方式选择了不查询! n");break;Student *add_new(Student *head)Student *p;int flag;printf("nn 请输入您要新加入学生的学号,学号为 0 表示结束输入 :"); scanf("%d",&flag);while(getchar()!='n');for(;flag;)p=(Student *)malloc(LEN);p->num=flag;printf(&

28、quot; 请输入新加入学生的姓名 :",n); scanf("%s",p->name);printf("请输入新加入学生的高数成绩 :",n);scanf("%d",&p->score0);printf("请输入新加入学生的英语成绩 :",n);scanf("%d",&p->score1);printf(" 请输入新加入学生的计算机成绩 :",n); scanf("%d",&p->score2);

29、printf(" 请输入第c名学生的物理成绩:",n);scanf("%d",&p->score3); p->sum=p->score0+p->score1+p->score2+p->score3; p->next=head->next;head->next=p;n+;printf("n 请输入还要加入学生的学号,没有此学生则输入 0表示结束 :"); scanf("%d",&flag);head=sort_1(head,1);printf(&q

30、uot; 加入后的成绩表为: n");print(head);return head;void print(Student *head) Student *p=head->next;if (!p) printf("nn 此系统目前没有任何学生数据! printf("此系统目前共计学生c名:n",n);printf("f*学生nnn");return;成绩总*n");printf("学号t姓名t高数成绩英语成绩计算机成绩物理成绩总分n"); for(;p;p=p->next)printf(&qu

31、ot;%dt%st %d %d %d %d %dn", p->num,p->name, p->score0,p->score1,p->score2,p->score3,p->sum=p->score0+p->score1+p->score2+p->score3);printf("* A A *nn");int main()Student *head;int choose,i;head=(Student *)malloc(LEN);head->next=NULL;for(;)printf(&qu

32、ot;ntt* * * * *学生成绩管理系统 * * * *n");printf("tt*t1.学生数据键盘录入 t *n");printf("tt*t2.学生数据统计排序 t *n");printf("tt*t3.查询学生数据 tt *n");printf("tt*t4.插入学生数据 tt *n");printf("tt*t5.显示当前成绩表 t *n");printf("tt*t0.退出成绩管理系统 t *n");printf("tt* * * *

33、* * * * a a * * * * * * * nn")printf("n 请输入你要执行的操作 :");scanf("%d",&choose);while(getchar()!='n');switch(choose)case 1:printf("ntttt*注意 *");printf("nn 此选项将会建立新的学生数据系统 , 原来的数据将 不再存在,你确信要删除原来的数据并建立新的数据系统么? nn"); printf("1 、建立新的数据系统; 0、放弃建立新的

34、数据系统。 nn"); printf(" 请选择: ");scanf("%d",&i);if (i=1) head=cin();print(head);break;else if (i=0)printf("n 您选择了放弃建立新的数据系统! n");break;else 您做出了别的选择,当作放弃建立! n");break;case 2:head=sort_all(head);break;case 3:find(head);break;case 4:head=add_new(head);case 5:pri

35、nt(head);break;case 0:system("pause");return 0;default: printf("nn 您的输入有误 ! 请重新输入: nn");break;7.2.2 主要程序运行结果(1)运行开始,如图。精品文档賦 C: Docu>ent s and Sett ingsAd*inist rat or桌面Debug成绩管理巳耳e精品文档晴输入你要执行的操作:* 12 3 4 5 0 *系录排费序tr统* 表系* 理盘计理* 羸叢数成管/ 绩生前绩A 成数数?mn成* 生生生询入一忑” 插显退”(2)输入数字1,然后按

36、Enter键,如图曲 C: Docu>ent s and Sett ingsAd*inist rat or桌面Debugm绩管理吕龙巳* 12 3 4 5 0 *系录排黄序l.,.tznkv-LLJ_请输入你要执行的操作疽统* 表系* 理盘计理* 富藝数成管丄 绩生前绩A 成数数?mn成* 生生生询入* 插显退*此选项将令建立新的学生数据系统,原来的数据将不再存在,你确信要删除原来的数据并 建立新的 -系统么?1、建立新的数据系统;0、放弃建立新的数据系统。请选择:(3)输入数字1,然后按下Enter键,就可以输入考生数据,如图请输入你要执行的操作* 12 3 4 5 0 *系录排费序t

37、r统* 表系* 理盘计理* 羸叢数成管/ 绩生前绩A 成数数?mn成* 生生生询入一忑” $HHH0插显退”此选项将含建立新的学生数据系统,原来的数据将不再存在,你确信要删除原来的数据并 建立新的 -系统么?1.建立新的数据系统;0.放弃建立新的数据系统。请选择:1请输入第丄名学生的学号,学号为0表示结東输入:(4)输入数字键2,然后按下Enter键,即可得到学生成绩的排序,如图曲 C: Docu>ent s and Sett ingsAd*inist rat or桌面Debug绩管理吕龙巳口仪请输入你要执行的操作汐lii* 12 3 4 5 0 *#123456780#系录排费序t tr统* 表系* 一理理* 羸叢数成管/ 生前绩A >数数冲成«

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论