




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据结构课程设计题目名称:学生成绩管理系统 计算机科学与技术学院 数据结构综合实验设计学生成绩管理系统1. 需求分析系统主要管理学生信息及成绩信息排序等事项。根据需要可以查询学生的信息。主要功能包括如下。(1) 使用中文菜单,界面升级和用户输入要人性化。(2) 将学生信息保存到文本文档中,具体对学生信息进行插入删除查询操作时,将保存在文本文档中的学生信息提取出来,保存在自己定义的数据结构中,然后在对该数据结构进行操作,所有操作完成,或者在相应的命令后,再将学生信息保存到文本文档中。(3) 具有数据输入功能,输入的数据能最终保存在文件中。(4) 具有数据删除功能,能最终从文件中删除。(5) 排序
2、功能,根据自己设计的数据结构,升级排序算法。(6) 具有多种查询及输出功能。(7) 其他功能。(8) 学生信息的修改。本程序要求设计一个学生信息管理程序,即用计算机来管理一个学校的各个班级成员的各种信息,实现学生信息管理。 (9) 数据的输入形式和输入值得范围:首先输入的是菜单的序号,选择你想要进行 的操作,其次根据提示输入相关的班级或学生信息。 (10) 结果的输出形式:输出的是班级信息或学生信息。2. 设计概要 输入学生成绩 输出学生成绩 查询学生成绩 插入学生成绩 按总分排名 删除学生信息 退出系统3函数Struct Student/结构体Int term;/学期Int num;/学号C
3、har name12;姓名Float mrak1;成绩Float mark2;Float mark3;Float sum;/总分Float average;/平均分;void input(list *head) 输入函数void output(list *h) 输出函数void sortsum(list *head) 总成绩排名void sortnum(list *head)按学号排名void find (list *h)查找主函数list *del (list *h)删除函数list *insert(list *h)插入函数全部的功能函数 可以实现所有的功能4详细设计:程序代码:#inclu
4、de <stdio.h>#include <stdlib.h>#include <malloc.h>#define MAXLEN 100#define Null 0/*/int count = 0;/*/typedef struct node int num; / 学号 char nameMAXLEN; / 姓名 /*/char sex2; /性别/char sex;/*/float sum; /总分float ave; /平均分int computer; /计算机成绩int english; /英语成绩int math; /数学成绩int chinese;
5、 /语文分数struct node *next; / 指针域list;/*/void input(list *head) /输入函数/*/list *p,*r;int i,n; / n 为学生人数 /*p=(list *)malloc(sizeof(list);p->next=Null;*/r=head; printf("请输入学生人数.n"); scanf("%d",&n);for(i=1;i<=n;i+) p=(list *)malloc(sizeof(list);printf("请输入学生学号:n"); sc
6、anf("%d",&p->num); printf("请输入学生性别:n"); scanf("%s",&p->sex);printf("请输入学生姓名:n"); scanf("%s",&p->name); printf("请输入语文成绩:n"); scanf("%d",&p->chinese); printf("请输入英语成绩:n"); scanf("%d",&
7、amp;p->english); printf("请输入数学成绩:n"); scanf("%d",&p->math); printf("请输入计算机成绩:n"); scanf("%d",&p->computer); (p->sum)=(p->chinese)+(p->computer)+(p->math)+(p->english);(p->ave)=(p->sum)/4;p->next=Null; r->next=p; r=r-
8、>next;/*/count +;/*/ void output(list *h) /输出函数 /*/if (h = NULL)printf("记录为空!");/*/list *p; printf("学号t姓名t性别t语文成绩t数学成绩t英语成绩t计算机成绩t平均分t总成绩tn"); p=h->next; while (p!=NULL) printf("%dnt%st%st%dt%dt%dt%dt%5.1ft%5.1fn",p->num,p->name,p->sex,p->chinese,p->
9、;math,p->english,p->computer,p->ave,p->sum);p=p->next;输出函数void sortsum(list *head) /总成绩排序/ struct node temp;/ const int n=20;/ int i,j,k;/ printf("按照总成绩排序:t");/ for(i=0;i<n;i+)/ / k=i;/ for(j=i+1;j<n;j+)/ if(listj.sum<listk.sum)/ k=j;/ temp=listk;listk=listi;listi=t
10、emp;/ output(p);/ int i=count, j, k;printf("按照总成绩排序:n");if (count=0 | count=1)return;list *p, *temp;while(i > 0)p=head;for(j=0; j<i-1; j+)if(p->next->sum > p->next->next->sum) temp = p->next ;p->next = p->next->next;temp->next = p->next->next;p-
11、>next->next = temp;p = p->next; i-; /*/利用了冒泡排序的方法把成绩排序:void sortnum(list *head)int i=count, j, k;printf("按照学号排序:n");if (count=0 | count=1)return;list *p, *temp;while(i > 0)p=head;for(j=0; j<i-1; j+)if(p->next->num > p->next->next->num) temp = p->next ;p-
12、>next = p->next->next;temp->next = p->next->next;p->next->next = temp;p = p->next; i-; /*/*利用了冒泡排序的方法把学号排序:int sortnum(node *list) /学号排序struct node temp;const int n=20;int i,j,k;printf("按照总成绩排序:t");for(i=0;i<n;i+)k=i;for(j=i+1;j<n;j+)if(listj.num<listk.n
13、um)k=j;temp=listk;listk=listi;listi=temp;return 0;*/void find (list *h) /查找函数 int k; / 要找的学生学号 list *p; p=h->next; printf("请输入要查找的学生学号:n"); scanf("%d",&k); while (p && p->num!=k) p=p->next; if(p) printf("学号t姓名t性别t语文成绩t数学成绩t英语成绩t计算机成绩t平均成绩t总成绩n"); pr
14、intf("%dt%st%st%dt%dt%dt%d%5.1ft%5.1fn",p->num,p->name,p->sex,p->chinese,p->math,p->english,p->computer,p->ave,p->sum); else printf("目标没找到n");利用遍历按要求查找相应的学生:list *del (list *h) /删除函数 int k; / 要删除的学生学号 list *p,*q; q=h; p=h->next; printf("请输入待删除的学
15、生学号:n"); scanf("%d",&k); while (p && p->num!=k) q=p; p=p->next; if(p) q->next=p->next; free(p); count -; else printf("没有此学生的记录,无法删除!n"); return (h);list *insert(list *h) /插入函数 list *p,*q,*r,*head; head=h; r=h; p=h->next; / 下面构造一个学生的信息 q=(list *)mal
16、loc(sizeof(list); printf("请输入待插入学生的学号:n"); scanf("%d",&q->num); printf("请输入待插入学生性别:n"); scanf("%s",&q->sex);printf("请输入待插入学生的姓名:n"); scanf("%s",&q->name); printf("请输入待插入的语文成绩:n"); scanf("%d",&q-&
17、gt;chinese); printf("请输入待插入的英语成绩:n"); scanf("%d",&q->english); printf("请输入待插入的数学成绩:n"); scanf("%d",&q->math); printf("请输入待插入的计算机成绩:n"); scanf("%d",&q->computer); (q->sum)=(q->chinese)+(q->computer)+(q->math)
18、+(q->english);(q->ave)=(q->sum)/4;q->next=Null; / 找到链表的结尾结点 count -;while(p!=Null) r=p; p=p->next; / 将新结点插入表尾r->next=q; r=r->next; return (head);void main() /主函数 list *p; /*/p=(list *)malloc(sizeof(list);p->next=Null;/*/int k; / 控制循环的标志 while (1) printf(" -n"); prin
19、tf(" | 学生成绩管理系统 |n"); printf(" -n"); printf(" | 1. 登记成绩 |n"); printf(" | 2. 查询成绩 |n"); printf(" | 3. 插入成绩 |n"); printf(" | 4. 删除成绩 |n"); printf(" | 5. 按学号排序 |n");printf(" | 6. 按总成绩排序 |n");printf(" | 7. 输出所有学生成绩 |n&q
20、uot;); printf(" | 8. 退出系统 |n"); printf(" -n"); printf("请输入你的选择n"); scanf("%d",&k); switch(k) case 1:/ p=input();/*/input(p);/*/break; case 2:find(p);break; case 3:p=insert(p);break; case 4:p=del(p);break; case 5:sortnum(p);output(p);break; case 6:sortsum(p
21、); output(p);break; case 7:output(p);break; case 8:exit(0); default:printf("选择错误,重新开始n"); 4调试分析 (1) :调试过程中在选择功能也就是简易界面出遇到了问题后才去switch case的方法也决问题,在设计函数时第一次只进行了成绩排序,这样使得程序不够完整没有满足要求,之后加上了学号排序这样方便了查找,也方便了阅读。(2) 本次试验还要求利用文件的方式进行 操作,后经过百度才找到方法,找到了文件操作。(3) 题目中没有什么复杂的算法,唯一一个就是利用了冒泡排序,对学生成绩和学生学号进
22、行了排序,这次实验主要是通过各种小函数来进行,其中遍历操作用的次数最多。(4) 由于本课题中的许多知识点都没有学过都要靠自己到课外的资料中去查找。在用的时候难免出现这样那样的错误。如开始设计出来的菜单不是预想的那样,而是总个窗中出现混乱。解决的这个问题的办法是调整。一个系统的菜单和提示信息非常重要。如果没有这些用户根本不知道怎么用你设计的这个系统。在设计的调试过程中也无法顺利的完成调试工作。有了一个清晰简单的菜单和一些提示信息这后,调试过程完成的非常顺利。 回顾起此次课程设计,我感慨颇多,的确,从拿到题目到完成整个编程,从理论到实践,可以学到很多很多的东西,同时不仅可以巩固了以前所学
23、过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体通过这次课程设计之后,一定把以前所学过的知识熟悉了,本次课程设计结束了,我们通过这次实践学到了许多知识。学到了设计一个简单的系统。要注意哪些方面。也使我们知道自己哪些方面做得还不
24、够。这不仅是程序设计,更是锻炼我们处理问题的能力,同时也使我们了解到团队合作的可贵.编写程序是件细心活,稍不留神就会出错,这就必须要求我们对待事情要认真!在编写程序的过程中。错误不断出现,不同的类型(如少写了一个符号,写错了字母,用错了函数等等)层出不穷,这考验我们待事细心,耐心,能不能坚持到底,不能半途而废。 但我们总结出了一点点的经验如下: 1、 要对系统的功能和要求做出详细的分析,并合理分解任务。2、 把分解出来的子任务,做给一个相对独立的模块。 3、 在设计一个模块之前,要简单构想一下总界面的显视情况。 4、针对构想出来的界面进行程序的编写。5.测试结果:上面是一个简易的界面有8中功能:选则功能1,可以登录学生的成绩,可以输入多个人但是必须一个一个输入。选择功能2可以查看学生的成绩前提是有1操作登录的出成绩才可以。功能3插入一个学生的的成绩方式同1操作相同,注意相同的学号会直接覆盖操作4删除学生的成绩这是会有两种情况(1) :输入的学好号里存在学生,这是会直接删除该学生。(2) :输入的学号不存在学生,这是会显示不存在该学生。操作5按学号排序:利用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农业生态旅游与观光农庄经营合作合同
- 合同代理协议书范本及注意事项
- 应届大学生就业实习协议书内容范文2篇
- 2026届江苏省南京市溧水区英语九上期末质量检测模拟试题含解析
- 深圳市重点中学2026届八年级物理第一学期期末教学质量检测试题含解析
- 安徽省宿州市第五中学2026届物理八年级第一学期期末综合测试试题含解析
- 出租车劳动合同范本2篇
- 瓶式氧气吸入课件
- 安全施工培训内容记录课件
- 农业碳汇项目融资策略与风险管理研究报告
- 中国急性缺血性卒中诊治指南(2023)解读
- 常熟理工学院图书馆考试完整题库
- 招聘诚信承诺书
- 装配式混凝土检查井施工及验收规程
- 2024小红书无货源精细化铺货实战课程
- 任正非的创业故事
- 学生实习家长知情同意书(完美版)
- 涉警网络负面舆情应对与处置策略
- 《英国政党制度》课件
- 幽门螺杆菌检测报告
- 农业经理人(中级)技能理论考试复习题库(含答案)
评论
0/150
提交评论