数据结构课程设计学生成绩管理问题
更新时间:2024-03-29 13:50:01 阅读量: 综合文库 文档下载
数据结构课程设计
题 目: 学生成绩管理问题 学 院: 理学院 班 级: 数学11-1班 学 生 姓 名: 任树成 学 生 学 号: 2011027040 指 导 教 师: 张太发
2012年 12月 5日
课程设计任务书
姓名 设计题目 任树成 班级 数学11-1班 学号 08 学生成绩管理问题 1.利用模块化的思想化整为零设计子程序。 理论要点 2.利用数组存储学生信息。 3.利用单链表储存便于对数据进行处理。 设计目标 实现学生信息的录入,查找,保存,添加,删除,排序。学生信息包括学号,姓名,英语数学语文三门课的成绩。 1.需求分析,主要是输入输出的形式和输入值的范围。 研究方法步骤 2.(1) 主界面设计,设计一个含有多个菜单项的主控菜单; (2) 存储单元设计,利用数组及单链表结合的方式存储; (3) 系统功能设计。 3.进行详细设计。 预期结果 基本实现学生信息的录入,查找,保存,添加,删除,排序。 1.资料查找、系统分析,概要设计;时间安排1天。 2.系统详细设计、功能设计;时间安排1天。 计划与进3.算法实现、编程调试;时间安排4天。 步的安排 4.资料整理、课程设计说明书编写;时间安排1天。 5.课程设计开始时间为 2012年11月 28日
摘要
针对学生成绩管理问题,学习了数据结构以后,尝试做了学生成绩管理系统。学生成绩管理是学校教务管理的重要组成部分,其处理信息量很大,本设计是对学生的成绩管理做一个简单的模拟。
本文将利用数据结构所学知识,对学生成绩管理系统做了尝试,这个程序的主要功能是输入学生的学号、姓名对其进行存储,在存储后可以对学生的成绩按学号和姓名进行查寻。该系统具有存贮学生数据,按学号、姓名查询,列出学生成绩和统计功能。使用方法:系统输入数据后,将在当前目录中建立一个名为date文件,用于保存输入的数据。学号输入只能用数字输入,并且学号只能是10位。姓名输入符合中国人的姓名,只能用中文,且最长为5个汉字。
《学生成绩管理系统》是对学生的成绩进行修改和管理,而且方便快速,这个程序虽然简单,但是可以作为老师的辅助软件,对学生的各种成绩进行管理。
通过课程设计培养了我的动手能力以及综合运用所学的数据结构基础理论,基础知识,基本技能,进行程序分析和程序开发,提高在实际开发中解决问题的能力,达到了能够利用数据结构结合C++语言进行应用程序的规划,分析,设计和实施,更能进一步使我对这门语言有深刻的理解和更好的得到巩固,更能对我所学的知识得到检验。
由于是第一次用C++编写,所以水平有限此系统还有许多不够完整和严密性,敬请老师指正!
关键词 学生成绩管理,数组,单链表
I
目录
摘要 ................................... 错误!未定义书签。 1 课程设计题目 ........................ 错误!未定义书签。 2 需求分析 ............................................. 1 3 概要设计 ............................................. 1 4 详细设计 ............................................. 1 5 用户使用说明 ........................................ 20 6 测试结果 ............................................ 21 7 总结 ................................................ 23 参考文献 ............................................... 23
II
数据结构课程设计
学生成绩管理问题
1. 课程设计题目
学生成绩管理是学校教务管理的重要组成部分,其处理信息量很大,本设计是对学生的成绩管理做一个简单的模拟,用菜单选择操作方式完成下列主要功能:
(1) 登记学生成绩; (2) 查询学生成绩; (3) 插入学生成绩; (4) 删除学生成绩; 要求对每个功能分别用函数实现。 2. 需求分析
(1) 输入数据为整型,学生信息不超过100条; (2) 输出数据为整型;
(3) 该系统可以实现学生信息增加,删除,查找,排序,保存功能。
3. 概要设计
为了实现以上功能,可从3个方面着手设计。
(1) 主界面设计,设计一个含有多个菜单项的主控菜单。 (2) 存储单元设计 (3) 系统功能设计
4. 详细设计
主要包括各部分函数功能,说明及流程图,源程序。 (1) 主函数int main()主要显示主菜单;
信息增加模块void cla::sadd()主要用于学生成绩的录入; 信息保存模块void ssave()主要用于学生成绩的保存; 信息删除模块void sremove()主要用于信息删除; 信息排序模块void staxis(),可根据不同情况进行排序; 信息读取模块void sload()可以显示主菜单;
信息查询模块void ssearch()可根据学号姓名进行查找; 信息修改模块void samend()可用于信息修改。 (2) 成绩管理系统重要函数调用调用关系如图所示。
其中成绩排序模块包括学号排序及数学,语文,英语及总成绩排序。 成绩查询模块可根据学号,姓名查询。
- 1 -
数据结构课程设计
学生管理系统
信 信 信信信信信 息息 息 息息息息 增修排保删查读
加改序存除询取模模模模模模模 块 块 块 块 块 块 块
(3) 源程序
#include
#include
class student { public: student *next; public:
string name;//姓名 long num;//学号
float x,y,z;//数学,语文,英语 float AA;//总分
void play()
{ cout< - 2 - 语:\总 数据结构课程设计 student(string sname,long snum,int sx,int sy,int sz) { name=sname; num=snum; x=sx; y=sy; z=sz; } }; class cla { public: cla()//构造函数 { stu=0; sload(); } ~cla()//析构函数 { student *p; p=stu; while(p) { p=p->next; delete stu; stu=p; } stu=0; } void sadd(); //添加 void sremove(); //删除- 3 - 数据结构课程设计 void samend(); //修改 void ssearch(); //查询 void staxis(); //排序 void ssave(); //保存 void sload(); //读取 //排序函数 void pxh(); //按学号排序 void psx(); //按数学成绩排序 void pyw(); //按语文成绩排序 void pyy(); //按英语成绩排序 void pAA(); //按总成绩排序 private: student *stu; //头接点 }; void cla::sadd()//添加 { student *q; string name1; long num1; int x1,y1,z1; system(\ cout<<\增加的学生** \\n\ cout<<\请输入学生的(中间用空格间隔) \ cout<<\姓名 学号 数学成绩 语文成绩 英语成绩:\ cin>>name1>>num1>>x1>>y1>>z1; q=new student(name1,num1,x1,y1,z1); q->next=0; q->AA=x1+y1+z1; if(stu) - 4 - 数据结构课程设计 { student *t; t=stu; if(t->num==num1) { cout<<\学号已存在,请重新输入\ return; } while(t->next) { if(t->num==num1) { cout<<\学号已存在,请重新输入\ return; } t=t->next; } t->next=q; } else { stu=q; } cout<<\输入完毕\ } void cla::sremove()//删除 { system(\ int num1; cout<<\删除学生信息 **\\n\ cout<<\请输入想要删除学生的学号:\ cin>>num1; - 5 - 数据结构课程设计 //查找要删除的结点 student *p1,*p2; p1=stu; while(p1) { if(p1->num==num1) break; else { p2=p1; p1=p1->next; } } //删除结点 if(p1!=NULL)//若找到结点,则删除 { p1->play(); cout<<\确定删除吗?[Y/N]\ char c;cin>>c; if(toupper(c)!='Y') return; if(p1==stu) //若要删除的结点是第一个结点 { stu=p1->next; delete p1; } else //若要删除的结点是后续结点 { p2->next=p1->next; delete p1; } cout<<\找到学号为\的学生,并删除\\n\ } - 6 - 数据结构课程设计 else //未找到结点 cout<<\未找到想要删除的学生!\\n\ } void cla::samend()//修改 { system(\ long num1; cout<<\修改学生信息 **\\n\ cout<<\输入要修改学生的学号\ cin>>num1; //查找要修改的结点 student *p1,*p2; p1=stu; while(p1) { if(p1->num==num1) break; else { p2=p1; p1=p1->next; } } if(p1!=NULL) { cout<<\学号是\的学生的信息\ cout<<\姓名 \数学\语文\英语\ cout<<\请输入修改后的信息:姓名 数学成绩 语文成绩 英语成绩\ cin>>p1->name>>p1->x>>p1->y>>p1->z; p1->AA=p1->x+p1->y+p1->z; cout<<\修改成功\ } - 7 - 数据结构课程设计 else //未找到接点 cout<<\未找到!\\n\ } void cla::ssearch()//查询 { system(\ cout<<\查询学生信息 **\\n\ cout<<\请输入查询方式:\ cout<<\按学号查询\ cout<<\按姓名查询\ cout<<\返回\ char c; cin>>c; switch (c) { case '1': { long num1; cout<<\要查询的学号\ cin>>num1; //查找要查询的结点 student *p1,*p2; p1=stu; while(p1) { if(p1->num==num1) break; else { p2=p1; p1=p1->next; } } - 8 - 数据结构课程设计 if(p1!=NULL) { cout<<\学号是\的学生的信息\ cout<<\姓名:\数学:\语文:\英语:\ cout<<\查询完毕...\ } else //未找到接点 cout<<\未找到!\\n\ break; } case '2': { string name1; cout<<\要查询的学生姓名\ cin>>name1; //查找要查询的结点 student *p1,*p2; p1=stu; while(p1) { if(p1->name==name1) break; else { p2=p1; p1=p1->next; } } if(p1!=NULL) { cout< cout<<\学号:\数学:\语文:\英语:\ cout<<\查询完毕...\ - 9 - 数据结构课程设计 } else //未找到接点 cout<<\未找到!\\n\ break; } case '3': return; } } void cla::pxh() //按学号排序 { student *p1,*p2; int n; p1=stu; n=1; while(p1->next) { n++; p1=p1->next; } cout<<\共有\条信息...\ int i; p1=stu; for(i=1;i if (p1->num>p1->next->num) // 如果头结点大于第二个的 { p2=p1->next; p1->next=p1->next->next; p2->next=p1; //头结点交换 stu=p2; } p1=stu; - 10 - 数据结构课程设计 while(p1->next->next) //中间的交换 { p2=p1; p1=p1->next; if(p1->num>p1->next->num) { p2->next=p1->next; p1->next=p1->next->next; p2->next->next=p1; p1=p2->next; //交换 } } } p1=stu; do { p1->play(); p1=p1->next; } while(p1); } void cla::psx()//按数学成绩排序 { student *p1,*p2; int n; p1=stu; n=1; while(p1->next) { n++; p1=p1->next; } cout<<\共有\条信息...\ - 11 - 数据结构课程设计 int i; p1=stu; for(i=1;i if (p1->x>p1->next->x) // 如果头结点大于第二个的 { p2=p1->next; p1->next=p1->next->next; p2->next=p1; //头结点交换 stu=p2; } p1=stu; while(p1->next->next) //中间的交换 { p2=p1; p1=p1->next; if(p1->x>p1->next->x) { p2->next=p1->next; p1->next=p1->next->next; p2->next->next=p1; p1=p2->next; //交换 } } } p1=stu; do { p1->play(); p1=p1->next; } while(p1); } void cla::pyw()//按语文成绩排序 - 12 - 数据结构课程设计 { student *p1,*p2; int n; p1=stu; n=1; while(p1->next) { n++; p1=p1->next; } cout<<\共有\条信息...\ int i; p1=stu; for(i=1;i if (p1->y>p1->next->y) // 如果头结点大于第二个的 { p2=p1->next; p1->next=p1->next->next; p2->next=p1; //头结点交换 stu=p2; } p1=stu; while(p1->next->next) //中间的交换 { p2=p1; p1=p1->next; if(p1->y>p1->next->y) { p2->next=p1->next; p1->next=p1->next->next; p2->next->next=p1; p1=p2->next; //交换 } } } p1=stu; - 13 - 数据结构课程设计 do { p1->play(); p1=p1->next; } while(p1); } void cla::pyy()//按英语成绩排序 { student *p1,*p2; int n; p1=stu; n=1; while(p1->next) { n++; p1=p1->next; } cout<<\共有\条信息...\ int i; p1=stu; for(i=1;i if (p1->z>p1->next->z) // 如果头结点大于第二个的 { p2=p1->next; p1->next=p1->next->next; p2->next=p1; //头结点交换 stu=p2; } p1=stu; while(p1->next->next) //中间的交换 { p2=p1; - 14 - 数据结构课程设计 p1=p1->next; if(p1->z>p1->next->z) { p2->next=p1->next; p1->next=p1->next->next; p2->next->next=p1; p1=p2->next; //交换 } } } p1=stu; do { p1->play(); p1=p1->next; } while(p1); } void cla::pAA()//按总分排序 { student *p1,*p2; int n; p1=stu; n=1; while(p1->next) { n++; p1=p1->next; } cout<<\共有\条信息...\ int i; p1=stu; for(i=1;i - 15 - 数据结构课程设计 if (p1->AA>p1->next->AA) // 如果头结点大于第二个的 { p2=p1->next; p1->next=p1->next->next; p2->next=p1; //头结点交换 stu=p2; } p1=stu; while(p1->next->next) //中间的交换 { p2=p1; p1=p1->next; if(p1->AA>p1->next->AA) { p2->next=p1->next; p1->next=p1->next->next; p2->next->next=p1; p1=p2->next; //交换 } } } p1=stu; do { p1->play(); p1=p1->next; } while(p1); } void cla::staxis()//排序 { system(\ - 16 - 数据结构课程设计 char c; cout<<\请选择以何种方式排序:\ cout<<\……以学号排序\ cout<<\……以数学成绩排序\ cout<<\……以语文成绩排序\ cout<<\……以英语成绩排序\ cout<<\……以总分排序\ cout<<\……返回\ cout<<\请选择(1-6)\ cin>>c; switch (c) { case '1':pxh(); break; case '2':psx(); break; case '3':pyw(); break; case '4':pyy(); break; case '5':pAA(); break; case '6':return; } } void cla::ssave() //保存到文件 { system(\ char c; cout<<\保存学生信息(将覆盖原文件),是否继续?[Y/N]:\ cin>>c; if(toupper(c)!='Y') return; ofstream tfile(\ student *p=stu; - 17 - 数据结构课程设计 while(p)// 写入文件 { tfile< tfile.close(); cout<<\保存完毕...\ } void cla::sload() //读取 { student *p; p=stu; while(p) { stu=p->next; delete p; p=stu; } ifstream tfile(\ string name1; long num1; int x1,y1,z1; tfile>>name1>>num1>>x1>>y1>>z1; while(tfile.good()) { //创建学生接点 student *s; s=stu; - 18 - 数据结构课程设计 s=new student(name1,num1,x1,y1,z1); s->next=0; s->AA=x1+y1+z1; if(stu) //若已经存在结点 { student *p2; p2=stu; while(p2->next) //查找尾结点 { p2=p2->next; } p2->next=s; //连接 } else //若不存在结点(表空) { stu=s; //连接 } tfile>>name1>>num1>>x1>>y1>>z1; } tfile.close(); cout<<\学生信息已经装入...\\n\ } int main() { system (\ system (\ char c; cla a; do { cout<<\学 生 成 绩 管 理 系 统 \\n\ cout<<\ - 19 - 数据结构课程设计 cout<<\作者:数学11-1班2011027040:任树成\\n\ cout<<\……增加学生 \\n\ cout<<\……删除学生 \\n\ cout<<\……修改学生 \\n\ cout<<\……查询学生信息 \\n\ cout<<\……排序 \\n\ cout<<\……保存信息 \\n\ cout<<\……读取信息 \\n\ cout<<\……退出 \\n\ cout<<\ cout<<\请选择(1-8):\ cin>>c; switch(c) { case '1': a.sadd();break; case '2': a.sremove();break; case '3': a.samend();break; case '4': a.ssearch();break; case '5': a.staxis();break; case '6': a.ssave();break; case '7': a.sload();break; } } while(c!='8'); return 0; } 5. 用户使用说明 (1) 进入本系统之后,随即显示系统主菜单页面。用户可在该界面下输入各 子菜单前对应的数字并按回车键,执行相应子菜单命令。 (2) 查询学生信息都是通过输入编号并按回车键实现的,成绩之间用空格隔开。学号输入只能用数字输入,并且学号只能是10位。姓名输入符合中国人的姓名,只能用中文,且最长为5个汉字。 - 20 - 数据结构课程设计 6.测试结果 系统运行主界面如图1所示。 图1学生成绩管理系统界面 (1) 在主菜单下,用户输入1后按回车键,运行结果如图2所示。 图2学生成绩增加界面 (2) 在主菜单下,用户输入6后按回车键,运行结果如图3所示。 图3学生成绩保存界面 (3) 在主菜单下,用户输入4后按回车键,运行结果如图4所示。 - 21 - 数据结构课程设计 图4学生成绩查询界面 (4) 在主菜单下,用户输入5后按回车键,运行结果如图5所示。 图5学生成绩排序界面 (5) 在主菜单下,用户输入3后按回车键,运行结果如图6所示。 - 22 - 数据结构课程设计 图6学生修改排序界面 (6) 在主菜单下,用户输入2后按回车键,运行结果如图7所示。 图7学生修改删除界面 (7) 在主菜单下,用户输入8后按回车键,退出。 7. 总结 通过本次的数据结构课程设计,让我学会了把书本上的知识应用到了实际中来。为了能更好的挑战自己,我还在在完成老师要求的基础上,增加了保存及用多种方式排序的子程序。虽然这一周中有过挫折和坎坷,有的问题一直到了最后才被解决,但是我认为这未必就不是好事,这样能锻炼我的意志,磨练我的耐心,失败是成功之母,这话一点都没错,没有失败就没有成功。 参考文献 1.《C++程序设计》 钱能 清华大学出版社 2.《C++程序设计试验指导》 钱能 清华大学出版社 3.《C程序设计》 谭浩强 清华大学出版社 - 23 - 课程设计评阅书 课程设计报告评语:(评阅意见主要对设计任务的合理性、规范性和正确性以及设计报告书的完整性、规范性和通顺性等方面作出评价) 报告成绩: 答辩记录与评语: 答辩成绩: 课程设计总成绩: 教师签名: 年 月 日
正在阅读:
数据结构课程设计学生成绩管理问题03-29
审计答疑 - 图文02-29
砖混结构现浇钢筋混凝土楼板裂缝及处理策略10-23
租房租赁合同最新10篇03-28
墩柱施工技术方案09-29
西方政治制度史作业2019.309-10
小学语文鄂教版四年级下册第三单元提升练习(含答案)01-07
分油机常见问题04-15
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 数据结构
- 成绩
- 课程
- 学生
- 问题
- 设计
- 管理
- 2018届九年级政治上学期期中试题无答案新人教版(4)
- 第八章欧氏空间简介
- Matlab中Stateflow应用
- 冲压工艺与模具设计 第2章 冲裁
- 教育学心理学试题
- 南京磐能保护装置定值清样 - 图文
- 15春福师《当代资本主义》在线作业二
- 九年级化学第一单元+探究人体吸入的空气和呼出气体的实验
- 2016年皮具产业调查分析报告
- 《数据结构》模拟试卷1
- 产前筛查答案及试题(班前)
- 江西经济管理职业学院精美求职简历模板 - 图文
- 企业清算所得的税务处理及案例分析
- 《瓦尔登湖》摘抄要点
- 关于印发《企业安全生产费用提取和使用管理办法》的通知财企〔20
- 房地产法总复习题参考答案
- 2016六年级数学上册第一单元测试题
- 法律信息汇编第十五期
- 呼和浩特铁路局车务系统技术设备管
- 全国大学生英语竞赛(NECCS)查分通知及获奖名单