




免费预览已结束,剩余26页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
信息科学与技术学院数据结构课程设计报告题目名称:学生管理系统专业班级:11级计科2班学生姓名:陶 鑫学生学号:2011508035指导教师:郭 理完成日期:2013-01-091 课程设计的目的11.1 课程设计的目的11.2 课程设计的题目11.3 题目要求12 概要设计22.1 存储结构22.2 基本操作33 详细设计33.1 流程图33.2 源程序104 测试215 课程设计总结296参考书目:291 课程设计的目的1.1 课程设计的目的更好的掌握数据结构这门课程,会用数据结构的基本思想及算法解决实际问题。更好的掌握链表,能进行各种基本的操作,提高编程能力。1.2 课程设计的题目 学生管理系统1.3 题目要求使用下面的数据,用C/C+设计一个简单的学籍管理系统,实现出最基本的功能。学生基本信息文件(A.TXT)及其内容:A.TXT文件不需要编程录入数据,可用文本编辑工具直接生成学号 姓名 性别 宿舍号码 电话号码01 张成成 男 501 8773211102 李成华 女 101 8772311203 王成凤 女 101 8772311204 张明明 男 502 8773433305 陈东 男 501 8773211106 李果 男 502 8773433307 张园园 女 102 87756122 . . .学生成绩基本信息文件(B.TXT)及其内容:学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩 综合成绩 实得学分01 A01 大学物理 3 66 78 82 02 B03 高等数学 4 78 -1 9001 B03 高等数学 4 45 -1 8802 C01 VF 3 65 76 66 . . . . (一) 功能要求及说明:(1) 数据录入功能: 对B.TXT进行数据录入,只录入每个学生的学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据. 综合成绩、学分由程序根据条件自动运算。 综合成绩的计算:如果本课程的实验成绩为-1,则表示无实验,综合成绩=平时成绩*30%+卷面成绩*70%; 如果实验成绩不为-1,表示本课程有实验,综合成绩=平时成绩*15%+实验成绩*.15%+卷面成绩*70% . 实得学分的计算: 采用等级学分制. 综合成绩在90-100之间 ,应得学分=学分*100% 综合成绩在80-90之间 ,应得学分=学分*80%综合成绩在70-80之间 ,应得学分=学分*75% 综合成绩在60-70之间 ,应得学分=学分*60%综合成绩在60以下 ,应得学分=学分*0%(2)查询功能:分为学生基本情况查询和成绩查询两种 A:学生基本情况查询:A1-输入一个学号或姓名(可实现选择),查出此生的基本信息并显示输出。A2-输入一个宿舍号码,可查询出本室所有的学生的基本信息并显示输出。 B:成绩查询:B1:输入一个学号时,查询出此生的所有课程情况,格式如下:学 号:xx 姓 名:xxxxx课程编号:xxx 课程名称:xxxxx 综合成绩:xxxx 实得学分: xx课程编号:xxx 课程名称:xxxxx 综合成绩:xxxx 实得学分: xx课程编号:xxx 课程名称:xxxxx 综合成绩:xxxx 实得学分: xx 共修:xx科,实得总学分为: xxx (3)删除功能:当在A.TXT中删除一个学生时,自动地在B.TXT中删除此人所有信息。 (4 ) 排序功能:能实现选择按综合成绩或实得学分升序或降序排序并显示数据。(二)其它要求:(1) 只能使用C/C+语言,源程序要有适当的注释,使程序容易阅读(2) 至少采用文本菜单界面(如果能采用图形菜单界面更好)(3) 学生可自动增加新功能模块(视情况可另外加分)(4)写出课程设计报告,具体要求见相关说明文档2 概要设计2.1 存储结构首先,为了能使自己得到锻炼,存储结构我使用了顺序存储与链式存储,学生基本信息用的数组来存储,对学生成绩基本信息使用链表进行存储。结构体定义如下:/学生基本信息的结构体定义typedef struct studentstring xuehao; /学号 string name; /姓名 string gender; /性别 string sushe; /宿舍号 string tel;/电话student;/学生成绩信息的结构体定义typedef struct gradestring xuehao;/学号 string courseno; /课程号 string coursename; /课程名称 int xuefen; /学分 int pingshi; /平时成绩 int shiyan; /实验成绩 int juanmian;/卷面成绩 float zonghe;/综合成绩 float shide;/实得学分 grade *next;grade;2.2 基本操作(1)数据录入功能(2)查询功能(3)删除功能(4)排序功能(5)显示所有学生信息(6)保存(7)退出3 详细设计3.1 流程图各个算法的设计如下:1.主函数:int main( );从A.txt中读取存储的学生基本信息到内存,以便进行处理,过程如图1 开始创建存储学生信息的单链表的头结点将学生信息读取到内存调用菜单函数结束 图 12. 菜单函数:void menu(student *stu,grade *head,grade *gra); stu是指向学生基本信息数组的指针,head是指向学生成绩信息链表头结点的指针,gra是指向学生成绩信息链表最后一个结点的指针。 用于进行指示进行各种操作,是与每个函数都相联系的一个函数,功能操作见图2 6保存0退出开始输入i菜单4排序3删除5显示学生信息2查询1数据录入其他有误误结束6保存0退出开始输入i菜单4排序3删除5显示学生信息2查询1数据录入其他有误误 图23. 数据录入函数:void luru(grade *gra); 其中gra是指向单链表最后一个结点的指针,用于后插法中进行插入。 将学生成绩信息依次输入单链表中,其中单链表边输入边创建,综合成绩和实得学分可由计算机自己计算。流程图见图3判断成绩范围应得学分=学分*100%应得学分=学分*80%应得学分=学分*75%应得学分=学分*60%应得学分=0结束综合成绩=平时成绩*15%+实验成绩*.15%+卷面成绩*70% 输入学生平时成绩输入学生实验成绩输入学生卷面成绩输入学生课程编号输入学生的学号输入学生学分开始gra-shiyan=-1综合成绩=平时成绩*30%+卷面成绩*70%输入学生平时成绩输入学生实验成绩输入学生卷面成绩输入学生课程编号输入学生的学号输入学生学分开始gra-shiyan=-1 Y N综合成绩=平时成绩*30%+卷面成绩*70% 90-100 80-90 70-80 60-70 60以下 图34.查询功能:void lookfor(student *p,grade *head);P为指向学生基本信息数组的指针,head为指向学生成绩链表的头结点的指针。 有学生基本情况查询和成绩查询两种大功能,基本情况查询又分为按学号或姓名查找单个学生基本信息,也可输入宿舍号查询整个宿舍学生的基本信息。成绩查询只要输入学号便可查询相应学生的成绩信息。见图41.输入一个学号或姓名 2.输入一个宿舍号码 a 按学号查找b 按姓名查找输出一个宿舍学生信息输出相应学生信息输出相应学生所有成绩结束开始输入iA:学生基本情况查询B:成绩查询输入j输入学号 图45. 删除功能:void del(student *stu,grade *head);stu为指向学生基本信息数组的指针,head为指向学生成绩链表的头结点的指针。 执行删除功能时在存储学生基本信息的数组中与存储学生成绩信息的链表中同时删除该学生信息,以便进行下面操作与向文件中存储信息。功能见图5开始输入要删除学生的学号在学生基本信息中删除在学生成绩基本信息中删除结束 图56. 排序功能:void sort(grade *head);head为指向学生成绩链表的头结点的指针。 下面流程图实现的是按综合成绩升序排序,使用的选择排序法,虽说使用的存储结构为链式存储结构,但排序时并非改变的指针指向,而是只修改存储的信息,指针指向不用改变。如图6开始head=head-nexthead-next!=NULLp=head-nextP!=NULLhead-zonghep-zonghe交换相邻节点中数据p=p-next结束 N Y P!=NULLhead-zonghep-zonghe交换相邻节点中数据p=p-next N Y N Y head=head-next 图67. 显示所有学生信息:void show(student *stud); stud为指向学生基本信息数组的指针 用于显示内存中学生基本情况信息,以便更好了解学生的一些情况.开始i=1studi.xuehao!=0输出学号,姓名,性别,宿舍,电话号结束 N Y i+ 图78. 保存功能:void save1(student *stud); void save2(grade *head); stud为指向学生基本信息数组的指针,head为指向学生成绩链表的头结点的指针。函数用于将内存中数据存储到文件中以便更好保存信息。开始输入ii=1I=2保存学生基本信息到A.TXT保存学生成绩信息到B.TXT输入有误,重新操作!结束 N Y N Y 图83.2 源程序#define num 10#include .#include #include /定义文件输入输出流using namespace std;/学生基本信息的结构体定义typedef struct studentstring xuehao; /学号 string name; /姓名 string gender; /性别 string sushe; /宿舍号 string tel;/电话student;/学生成绩信息的结构体定义typedef struct gradestring xuehao;/学号 string courseno; /课程号 string coursename; /课程名称 int xuefen; /学分 int pingshi; /平时成绩 int shiyan; /实验成绩 int juanmian;/卷面成绩 float zonghe;/综合成绩 float shide;/实得学分 grade *next;grade;void luru(grade *gra);void menu(student *stu,grade *head,grade *gra);void lookfor(student *p,grade *head);void sort(grade *head);void out(grade *head);void sort1(grade *head);void del(student *stu,grade *head);void show(student *stu);void save1(student *stud);void save2(grade *head);void leave();/数据录入void luru(grade *gra)string str; cout请输入学生的学号,str; gra-xuehao=str; cout请录入该生课程编号gra-courseno; cout请录入该生课程名称gra-coursename; cout请录入该生学分gra-xuefen; cout请录入该生平时成绩gra-pingshi; cout请录入该生实验成绩gra-shiyan; cout请录入该生卷面成绩gra-juanmian; /综合成绩计算 if(gra-shiyan=-1) gra-zonghe=gra-pingshi*0.3+gra-juanmian*0.7; else gra-zonghe=gra-pingshi*0.15+gra-juanmian*0.7+gra-shiyan*0.15; /实得学分的计算 if(gra-zonghe=90&gra-zongheshide=gra-xuefen; else if(gra-zonghe=80) gra-shide=gra-xuefen*0.8; else if(gra-zonghe=70) gra-shide=gra-xuefen*0.75; else if(gra-zonghe=60) gra-shide=gra-xuefen*0.60; else if(gra-zongheshide=0; else cout您输入有误,请按提示操作!endl; /查询功能void lookfor(student *p,grade *head)char i,k; string str; int j,x=0; float sum=0; cout-endl; cout- A:学生基本情况查询 B:成绩查询 -endl; cout-i; switch(i) /学生基本情况查询 case A:cout-endl; cout-1.输入一个学号或姓名 2.输入一个宿舍号码 -endl; cout-j;/A1-输入一个学号或姓名(可实现选择),查出此生的基本信息并显示输出。if(j=1) cout*endl; cout*a 按学号查找 b 按姓名查找*endl; cout*k; if(k=a)cout请输入学号:str;for( j=1;j8;j+) if(pj.xuehao=str) coutpj.xuehao pj.gender pj.sushe pj.tel; coutendl; else if(k=b)cout请输入姓名:str;for( j=1;j8;j+) if(=str) coutpj.xuehao pj.gender pj.sushe pj.tel; coutendl; /A2-输入一个宿舍号码,可查询出本室所有的学生的基本信息并显示输出。else if(j=2)cout请输入宿舍号:str; for( j=1;j8;j+) if(pj.sushe=str) coutpj.xuehao pj.gender pj.sushe pj.tel; coutendl; else cout您输入有误,请按提示操作!endl; break; /成绩查询 case B: cout请输入要查询学生的学号:str; for(j=1;j8;j+) if(pj.xuehao=str) cout学号:strt姓名:next;/指向首元结点 while(head!=NULL) if(head-xuehao=str) cout课程编号:coursenot 课程名称:coursenamet 综合成绩:zonghet 实得学分:shideshide; head=head-next; /指针后指 cout共修:x科,实得总学分为:sumendl; break; default:cout您输入有误,请按提示操作!next; grade *q; cout请输入要删除学生的学号:str; /在学生基本信息中删除 for(int i=1;stui.xuehao!=0;i+) if(stui.xuehao=str) for(int j=i;stuj.xuehao!=0;j+) stuj.gender=stuj+1.gender; =stuj+1.name;stuj.sushe=stuj+1.sushe;stuj.tel=stuj+1.tel;stuj.xuehao=stuj+1.xuehao; stuj.gender=0; =0;stuj.sushe=0;stuj.tel=0;stuj.xuehao=0; /在学生成绩基本信息中删除 while(p) if(p-xuehao=str) head-next=p-next; q=p; p=p-next; delete q; else p=p-next; head=head-next; cout删除成功!next;head-next;head=head-next) for(grade *p=head-next;p;p=p-next) if(head-zonghep-zonghe)temp-xuehao=head-xuehao; head-xuehao=p-xuehao; p-xuehao=temp-xuehao; temp-courseno=head-courseno; head-courseno=p-courseno; p-courseno=temp-courseno; temp-coursename=head-coursename; head-coursename=p-coursename; p-coursename=temp-coursename; temp-xuefen=head-xuefen; head-xuefen=p-xuefen; p-xuefen=temp-xuefen; temp-pingshi=head-pingshi; head-pingshi=p-pingshi; p-pingshi=temp-pingshi; temp-shiyan=head-shiyan; head-shiyan=p-shiyan; p-shiyan=temp-shiyan; temp-juanmian=head-juanmian; head-juanmian=p-juanmian; p-juanmian=temp-juanmian; temp-zonghe=head-zonghe; head-zonghe=p-zonghe; p-zonghe=temp-zonghe; temp-shide=head-shide; head-shide=p-shide; p-shide=temp-shide;/数据交换 cout按综合成绩升序排序为:next;head-next;head=head-next) for(grade *p=head-next;p;p=p-next) if(head-shideshide)temp-xuehao=head-xuehao; head-xuehao=p-xuehao; p-xuehao=temp-xuehao; temp-courseno=head-courseno; head-courseno=p-courseno; p-courseno=temp-courseno; temp-coursename=head-coursename; head-coursename=p-coursename; p-coursename=temp-coursename; temp-xuefen=head-xuefen; head-xuefen=p-xuefen; p-xuefen=temp-xuefen; temp-pingshi=head-pingshi; head-pingshi=p-pingshi; p-pingshi=temp-pingshi; temp-shiyan=head-shiyan; head-shiyan=p-shiyan; p-shiyan=temp-shiyan; temp-juanmian=head-juanmian; head-juanmian=p-juanmian; p-juanmian=temp-juanmian; temp-zonghe=head-zonghe; head-zonghe=p-zonghe; p-zonghe=temp-zonghe; temp-shide=head-shide; head-shide=p-shide; p-shide=temp-shide; cout按实得学分降序排序为:next; cout学号 课程编号 课程名称t 学分 平时成绩 实验成绩 卷面成绩 综合成绩 实得学分endl; while(head)coutxuehaotcoursenotcoursenametxuefentpingshitshiyantjuanmiantzonghe tshidenext; /显示所有学生信息void show(student *stud)for(int i=1;studi.xuehao!=0;i+) coutstudi.xuehao studi.gender studi.sushe studi.tel; coutendl; /将学生信息保存到A.txtvoid save1(student *stud)ofstream outfile(A.txt,ios:out); /打开文件 if(!outfile) cerr 打开文件失败,程序中止!endl;exit(1); /打开文件失败,终止程序 for(int i=0;studi.xuehao!=0;i+) outfilestudi.xuehao studi.gender studi.sushe studi.telendl; outfile.close(); /关闭文件/将学生成绩信息保存到B.txtvoid save2(grade *head)ofstream outfile(B.txt,ios:out); /打开文件 if(!outfile) cerr 打开文件失败,程序中止!next; outfile学号 课程编号 课程名称t 学分 平时成绩 实验成绩 卷面成绩 综合成绩 实得学分endl; while(head) outfilexuehaotcoursenotcoursenametxuefent pingshitshiyantjuanmiantzonghetshidenext; outfile.close(); /关闭文件void leave() cout本系统由计科11陶鑫制作,谢谢使用!endl; exit(1);/菜单void menu(student *stu,grade *head,grade *gra)int i;grade *p; cout 欢迎使用学生管理系统,请按提示操作! endl; cout 陶鑫制作 endl; cout*endl; cout*1数据录入功能 2查询功能 3删除功能 4排序功能 5显示所有学生信息 6保存 0退出*endl; cout*i; switch(i) case 1:p=new grade; p-next=NULL; gra-next=p; gra=p; luru(gra); system(pause);system(cls); menu(stu,head,gra); break; case 2:lookfor(stu,head); system(pause);system(cls); menu(stu,head,gra); break; case 3: del(stu,head); system(pause); system(cls); menu(stu,head,gra); break; case 4: cout-endl; cout-1.按综合成绩升序 2.按实得学分降序 -endl; cout-i; if(i=1) sort(head); else if(i=2) sort1(head); else cout您输入有误,请重新操作!endl; system(pause);system(cls); menu(stu,head,gra); system(pause);system(cls); menu(stu,head,gra); break; case 5:show(stu); system(pause);system(cls); menu(stu,head,gra); break; case 6:cout-endl; cout-1.学生基本信息保存 2.学生成绩保存 -endl; cout-i; if(i=1) save1(stu); else if(i=2) save2(head); else cout您输入有误,请重新操作!endl; system(pause); system(cls); menu(stu,head,gra); system(pause);system(cls); menu(stu,head,gra); break; case 0:leave(); default:cout您输入有误,请按提
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 听力导航模拟试题及答案
- 2025福建龙岩市上杭县文化旅游发展有限公司(上杭古田建设发展有限公司)所属企业招聘人员拟聘用人选考前自测高频考点模拟试题及答案详解参考
- 大坝安全检测试题及答案解析
- 综合科室考试试题及答案
- 2025年天津市和平区面向靖远籍招聘事业单位工作人员考前自测高频考点模拟试题及答案详解(考点梳理)
- 2025-2030工业软件云化转型中的信息安全防护体系构建研究
- 2025-2030工业视觉检测算法优化与制造业提质增效报告
- 2025-2030工业级无人机巡检服务石油管道领域替代人工评估
- 2025-2030工业级3D打印金属粉末成本结构与下游应用拓展报告
- 2025-2030工业物联网边缘计算节点部署策略优化报告
- 2025年镇江市中考英语试题卷(含答案)
- 航海船舶因应气象预报方案
- 铝合金介绍教学课件
- 电气班组安全教育培训课件
- 《2025同上一堂思政课》观后感10篇
- SY4201.2-2019石油天然气建设工程施工质量验收规范设备安装塔类检验批表格
- 电机的工作原理课件
- 设计质量意识培训课件
- 2025年四川省高考化学试卷真题(含答案解析)
- 2025年新玩家股东招募协议书
- 食品安全知识培训会议记录范文
评论
0/150
提交评论