数据结构课程设计报告-罗保涛-.doc_第1页
数据结构课程设计报告-罗保涛-.doc_第2页
数据结构课程设计报告-罗保涛-.doc_第3页
数据结构课程设计报告-罗保涛-.doc_第4页
数据结构课程设计报告-罗保涛-.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

数据结构程序设计(C+)课程设计报告 题 目: 学生信息管理系统 专 业: 国软件 班 级: 14班 学 号: 120144801108 姓 名: 罗保涛 指导教师: 马云吉 日 期: 2015-12-31 目录第一章 课程设计的目的和要求.1第二章 课程设计任务内容.32.1 背景.32.2 功能需求.3第三章 模板设计说明.43.1 系统总框架.43.2 主函数的流程图.63.3 录入学生信息流程图.7第四章 软件使用说明及运用结果 .84.1 使用说明.84.2 运行结果.9第五章 课程设计心得与体会.10附录1:参考文献.13附录2:程序清单.14一需求分析题目:运用面向对象程序设计和数据结构知识,利用C+语言设计和实现一个学生信息管理小工具。要求:学生管理系统要实现不同用户的管理(管理员,教师,学生等不同身份),学生信息的追加、成绩录入、精确查找、分类查找、精确删除、批量删除及文件读写等功能,其中内存管理(插入、查找、删除、统计)部分利用链表或hash表实现存储。(1)系统以菜单方式工作(2)管理员功能(3)教师功能(4)学生功能(5)信息读入内存功能(6)信息写出文件功能(0)系统退出功能二总体设计Main函数老师:查询,成绩录入,删除等管理员:基本信息录入,查询,删除等学生:查询等文件读出文件写入三详细设计Main函数M_manu()函数T_manu()函数save()函数S_manu()函数import()函数Menu函数Case 1Case:2Case 5Case 4Case 3Case 6breakbreakbreakbreakbreakMenu函数退出系统主要数据结构:主要的数据结构是类名叫Student的类,其中包含basic,course和stuNode三个成员,分别表示存储联系人的基本信息,课程信息,学生节点。另外还有 void import(); /从内存导出到文件 void save(); /从文件导入到内存 int length();/求长度 void displaySelf(); /查询自己信息 void find_Stu(); /查找学生 void set_Stu(); /录入学生成绩 void print_Stu(); /查看全部学生信息 void add_StuNode(); /添加学生 void dele_stuNode(); /删除学生stuNode *get_root() /获取头结点void average(); /求平均分 void sort_Stu(); /排序 void print_StuSub(); /按课程名显示学生信息 Student()函数是构造函数。十五个成员函数类外有void S_manu() /学生菜单界面void T_manu() /教师菜单界面void M_manu() /管理员菜单界面void Welcome() /欢迎界面和int main() 主函数程序运行过程: 首先执行main()函数,在main函数中如果文件已被创建,则先执行import()导入信息,否则先执行Welcome()函数,然后给main()函数一个值number,不同的number值执行不同的身份操作。当number为1时,执行M_manu()函数,其操作有添加学生add_StuNode(),查找学生(按学号查找)find_Stu(),删除学生dele_stuNode(),查看全部学生信息print_Stu()等;当number为2时,执行T_manu()函数,其操作有查找学生(按学号查找)find_Stu(),录入学生课程信息set_Stu(),查看全部学生信息print_Stu() 等;当number为3时,执行S_manu()函数,其操作只能通过输入自己学号查看自己的全部信息,不能修改;当number为4时,执行save()函数,将内存中的信息以二进制的方式写出到“student.dat”;当number为5时,执行import()函数,将“student.dat”中的信息读入到内存中;当number为0时,运用语句break;退出此系统。四调试与测试五体会与总结 通过两个星期的连续编程吧,对所学内容有所应用,编写了可以实现一部分功能的程序。这个程序基本实现了最简单的学生信息管理功能,在这个程序中,运用到了许多课堂上的知识,也运用了其他一些较为生僻的知识,如清屏函数的使用,书本上没有,还好通过上网查询的方式将这些问题一一解决。通过设计这个程序,不仅仅加深了我对专业知识的领悟,还锻炼了我的逻辑思维能力,另外就是感受到C+在生活中被广泛运用和它给我们的日常生活带来的便利。同时,我深深的感受到要想学好C+这门知识,多多上机操作才是最好的学习方法,也许在最初开始设计程序的时候一点头绪也没有,不知该如何下手,但经过思考和上网查询,会逐渐摸到门道,等到一个可运行的程序经过自己的手诞生的时候,一种成就感油然而生,顿时觉得编写程序也是很有趣的,这也是学C+要多多动手的原因。确实,编写程序时所遇到的种种阻碍让我吃尽了苦头,特别是文件这部分,原因有一部分是书没有仔细研究过,在一些细节上总出问题,这让我知道了基本功的重要性;所以,此次实验的遗憾就是没有对文件进行很好的运用,而且,所编写的程序有一定的局限性,功能太简单,整体构思等还需要加以完善,所以,我决定在寒假这段时间把这个程序更加完善一下。总之,这次编写程序的过程是艰难而有趣的,有时一个bug几个小时找不出,信心大大受挫,等豁然开朗时可能是半夜了,尽管很累,但是很值,不管怎么样,结果是差强人意,未来的道路还是需要自己一步一个脚印走出来的。喜欢软件,才能学好软件;我想我喜欢上它了。六附录附录一:1) 数据结构(C+)(第二版) 王红梅2) 面向对象程序设计 张文宇附录二:特色代码:(结构分明) 与实际相结合struct basic /基本信息结构 char num20,name20,grade20; /学号,姓名,班级;struct course /课程信息结构 char jectname20; /课程名称 double score,credit; /分数,学分 course *next;struct stuNode /学生节点 basic Sbasic; course *Scourse; stuNode *next;(文件的运用)写出与读入void Student:import() /从文件中导到内存 ifstream infile; infile.open(Man.dat,ios:binary); if(!infile) cout打开文件失败!next=NULL; newstunode-Scourse=NULL; infile.read(char *)&newstunode-Sbasic,sizeof(newstunode-Sbasic); int count=0; infile.read(char *)&count,sizeof(count); while(count-) newCourse=new course; newCourse-next=NULL; infile.read(char *)&newCourse-jectname,sizeof(newCourse-jectname); infile.read(char *)&newCourse-score,sizeof(newCourse-score); infile.read(char *)&newCourse-credit,sizeof(newCourse-credit); newCourse-next=newstunode-Scourse; newstunode-Scourse=newCourse; newstunode-next=head-next; head-next=newstunode; infile.close(); cout导入成功!next; course *couTraverse; int len=length(); ofstream outfile(Man.dat,ios:binary); if(!outfile) cout打开数据文件出错!next; traverse; traverse=traverse-next) couTraverse=traverse-Scourse; outfile.write(char *)&traverse-Sbasic,sizeof(traverse-Sbasic); int count=0; for(couTraverse=traverse-Scourse; couTraverse; couTraverse=couTraverse-next) count+; outfile.write(char *)&count,sizeof(int); for(couTraverse=traverse-Scourse; couTraverse; couTraverse=couTraverse-next) outfile.write(char *)&couTraverse-jectname,sizeof(couTraverse-jectname); outfile.write(char *)&couTraverse-score,sizeof(couTraverse-score); outfile.write(char *)&couTraverse-credit,sizeof(couTraverse-credit); outfile.close(); cout保存成功!保存到Man.datendl;(课程信息的录入)对录入信息进行判断void Student:set_Stu() stuNode *s_current; course *couCurrent; bool isNew; double newCredit=0; char newJectname20; coutnewJectname; if(head-next&head-next-Scourse&!strcmp(head-next-Scourse-jectname,newJectname) cout该课程已存在n; else coutnewCredit; for(s_current=head-next; s_current; s_current=s_current-next) course *newCourse=new course; strcpy(newCourse-jectname,newJectname); cout姓名:S 班级:Sbasic.grade 学号:Sbasic.numendl; cout课程:jectnameScourse; couCurrent; couCurrent=couCurrent-next) if(strcmp(couCurrent-jectname,newCourse-jectname) isNew=false; cout该学生此课程已上传n; cout分数:scoreendl; cout学分:creditendl; break; if(isNew) coutendlnewCourse-score; while(newCourse-score100|newCourse-score0) cout成绩非法,请重新输入!nnewCourse-score; if(newCourse-score=60) newCourse-credit=newCredit; else newCourse-credit=0; newCourse-next=s_current-Scourse; s_current-Scourse=newCourse; coutnext; course *couTraverse; char inputNum20; int count=0; char a; while(true) coutinputNum; bool isTrue=false; while(f_current) if(!strcmp(f_current-Sbasic.num,inputNum) isTrue=true; cout姓名:S 学号:Sbasic.num 班级:Sbasic.gradeScourse; couTraverse; couTraverse=couTraverse-next) if(couTraverse-score60) count+; cout课程:jectname 成绩:score 学分:creditendl; cout未过:countScourse; couTraverse; couTraverse=couTraverse-next) if(couTraverse-score60) cout课程:jectname 成绩:score 学分:creditnext; if(!isTrue) cout没有该学生,; couta; if(a!=Y&a!=y) break; (基本信息添加)尾插法void Student:add_StuNode() while(true) bool isNew=true; system(cls); cout添加学生中.nn; stuNode *a_current,*newstuNode=new stuNode; char a; cout请输入相关信息nnewstuNode-Sbasic.num; for(a_current=head-next; a_current; a_current=a_current-next) if (!strcmp(a_current-Sbasic.num,newstuNode-Sbasic.num) isNew=false; cout已存在!n; break; if(isNew) coutnewstuNode-S; coutnewstuNode-Sbasic.grade; newstuNode-next=NULL; newstuNode-Scourse=NULL; for(a_current=head; a_current-next; a_current=a_current-next); a_current-next=newstuNode; cout添加成功!n; couta; if(a!=y&a!=Y) break; (删除学生)以学号为依据void Student:dele_stuNode() while(true) stuNode *traverse=head-next; for(traverse=head-next; traverse; traverse=traverse-next) cout姓名 S 学号 Sbasic.num 班级 Sbasic.gradenext,*constuNode=head; char inputNum20; bool is=false; char a; coutinputNum; for(delestuNode=head-next; delestuNode; delestuNode=delestuNode-next) if(!strcmp(delestuNode-Sbasic.num,inputNum) break; constuNode=constuNode-next; if(delestuNode) constuNode-next=delestuNode-next; delete delestuNode; cout删除成功,; else cout无该学生信息,; couta; if(a!=Y&a!=y) break; (求平均分)void Student:average() char tabJectName20; double aver=0,sum=0,count=0; couttabJectName; for(stuNode *traStuNode=head-next;traStuNode;traStuNode=traStuNode-next) for(course *traCouNode=traStuNode-Scourse;traCouNode;traCouNode=traCouNode-next) if(!strcmp(traCouNode-jectname,tabJectName) count+; sum+=traCouNode-score; break; cout科目:tabJectNamet有效成绩数:countt平均分:; if(count) coutsum/countendl; else cout0endl;(排序)void Student:sort_Stu()

温馨提示

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

评论

0/150

提交评论