学生学籍管理系统课程设计报告c

上传人:仙*** 文档编号:71947450 上传时间:2022-04-07 格式:DOC 页数:32 大小:578.50KB
收藏 版权申诉 举报 下载
学生学籍管理系统课程设计报告c_第1页
第1页 / 共32页
学生学籍管理系统课程设计报告c_第2页
第2页 / 共32页
学生学籍管理系统课程设计报告c_第3页
第3页 / 共32页
资源描述:

《学生学籍管理系统课程设计报告c》由会员分享,可在线阅读,更多相关《学生学籍管理系统课程设计报告c(32页珍藏版)》请在装配图网上搜索。

1、南昌航空大学学院:软件学院 学号:10203204 姓名:未猛猛 指导老师:王星目录一、需求分析.2二、概要设计.2三、详细设计.4四、调试分析.8五、用户手册.9六、测试数据.9七、附录.10一、需求分析先看题目要求:用数据文件存放学生的学籍,可对学生学籍进行注册,增加,修改,删除,查找,学籍变化等操作。系统必须以菜单方式工作;登记学生的学号,姓名,年龄,籍贯,系别,专业,班级;修改已知学生的学号信息;删除已知学号的学生信息;查找已知学号的学生信息;按学号,专业输出学生籍贯表;查询学生学籍变化,比如入学,转专业,退学,降级,休学,毕业;1.本题目要求做出学生学籍管理系统,系统以菜单方式工作,

2、我们可以用一个类的成员函数来单独完成菜单功能,然后在主函数调用。2.根据题目我们首先确定用两个类去实现,一个可类为student,里面为学生的信息,例如学号,姓名等,另一个类为operate;实现各个操作,例如注册,增加等。3.需要对学生学籍进行注册,那么我们就用input()输入函数去完成注册,在opetate类体里面完成,在student中用input()去实现输入功能,在operate中用input()对student中的input()进行调用,具体调用及实现会在下面详细介绍。4.需要对学生信息进行增加,那么我们就增加个add()函数,实现注册玩后的增加功能。5.可以在operate中添

3、加mend()函数和del()函数实现修改和删除功能,用found()函数和show()函数实现查找和统计功能,单独用一个xueji()函数去实现学籍变化操作,如入学,转专业等,并按学号和专业去输出学生籍贯表。6.主函数执行命令:1.初始化对象2.初始化菜单3. 操作执行,结果显示二、概要设计1.两个类模块:第一个class student,首先在student中定义几个保护型的数据成员,学号num,姓名 name,性别sex,a年龄 age,籍贯address,学院 collge,班级classes,专业zhuan;再定义一个student的next指针student *next;这样是将两

4、个类联系起来的桥梁。 成员函数介绍string getname ()/返回姓名name; Int getnum()/返回学号num; string getplace()/返回籍贯 address; String getzhuan();/返回专业 zhuan; void getxueji(int b,int c,int d,int e,int f,int g)/将6个整型值分别表示入学,转专业,退学,降级,休学,毕业; 整型值负值1或0; Void input();/在学生类中定义一个input函数实现屏幕上的输入功能; void input(ifstream &is)/创建文件类型引用Void

5、 output()/输出学生的信息,与类operate中的output联系将其打印在屏幕,下面会讲述;void output(ofstream &os)/实现对文件的写入2. 第二个类模块操作类operate,首先两个类必须有个接口将他们联系起来,这样我们就在用一个类的对象指针作为operate类中的一个私有数据成员,故定义私有成员student *head再定义一个整型key,下面在保存和推出时会用到;下面介绍共有的成员函数: Operate()/构造函数,赋初值operate()/析构函数Void input()/这里的input函数才是实现真正的注册,用此数据成员(即student的对象

6、)实现对学生类中input的调用;Void show()/次实现实现统计功能Void mend()/实现对注册信息的修改功能Void found()/实现查找功能,并将其显示Int find(student *p,int num,string name)/自查找函数,在此函数中实现查找功能,并在found函数中调用它完成查找的操作Void del()/此函数实现删除功能,与find()共同实现Void add()/增加函数Void xueji()/查询学籍变化的函数Void jiguan()/按学号,专业输出籍贯的函数Void bf()/初始化的文件操作函数Void save()/保存函数In

7、t mainmenu()/主菜单函数Int key()/返回key Void setkey()/创建key3. void main()/主函数中实现对象的建立和各个功能的调用和主菜单的循环;三、详细设计 这里我们将详细的介绍各个函数的函数体实现与之间的调用; 1.首先看类student; string getname()return name; /返回姓名name;name为字符串型; int getnum() return num; /返回一个整形值 学号num; string getplace() /返回籍贯(字符串型) return address; string getzhuan()

8、/返回专业(字符串型) return zhuan; 看函数getxueji()void getxueji(int b,int c,int d,int e,int f,int g)/实现学籍的查询if(b=1) cout入学 ; /如果b=1,那么就输出入学;相反则未入学 elsecout未入学 ;if(b=0)cout暂无学籍信息; /未入学,则显示无学籍信息elseif(c=1) cout转专业 ; /若c=1,显示转专业 else cout未转专业 ; /不等于,则显示未转专业 if(d=1) cout未退学 ; /同上,若d=1,则显示未退学else cout已退学 ; /若d!=1则显

9、示已退学,下面的同上if(e=1) cout未降级 ;else cout已降级 ;if(f=1) cout未休学 ;else cout已休学 ;if(g=1) cout未毕业 ;else cout已毕业 ;void input()/输入函数int a=1; /定义整型变量并负值1coutttt请按提示输入:endl;coutnum;coutname;coutage;docoutsex; if(sex=男|sex=女) /判断输入的性别是否正确 coutaddress; coutcollage; coutclasses; coutzhuan; coutn请输入学生学籍信息:默认1:入学;1:转专

10、业;1:未退 学;1:未降级;1:未休学;1:未毕业;endl; couttt输入学籍信息,请依次输入6个数:(0或1) /上面已经 提过,输入0或者1 coutbcdefg;/一次输入五个值(0或1) getxueji(b,c,d,e,f,g); /调用个getxueji()函数,上面已介绍该函数 a=0; /把0赋给a,使循环结束 else cout无此性别,请重新输入!numnameagesexaddresscollageclasses zhuan; /输入学号,姓名,年龄,性别,学院,班级,专业 is.get(); /获取文件指针void output() /输出显示函数,实现显示co

11、ut学生的基本信息如下:endl; cout学号:num; cout 姓名:name;cout 年龄:age;cout 性别:sex;cout 籍贯:address;cout 学院:collage;cout 班级:classes;cout 专业:zhuanendl;void output(ofstream &os) /将内容写入文件显示 ossetw(6)numsetw(10)namesetw(5)agesetw(10)sex setw(10)addresssetw(10)collagesetw(6)classes setw(10)zhuannext=NULL;key=1;operate()d

12、elete head; /析构函数 void operate:input() /注册(输入)函数,和上个类的input一块/实现功能看下面函数体student *p,*p2=NULL; /定义一个对象指针p,p2指向空 p=head; int n; /把p赋给头指针headwhile(n) /进行循环 p2=new student; p2-input(); /为p2开辟空间并指向/input函数 p-next=p2; p2-next=NULL; p=p-next; /增加新的结点 coutn; /输入n判断/while循环是否继续void operate:add() /增加函数,和input(

13、)功能相同input(); /将input在执行一次,void operate:jiguan() /输出籍贯函数 student *p;/定义学生类的指针p并负值head p=head; while(p-next) / 执行循环直至p-next=NULL结束 cout学号:next)-getnum() 专业:next)-getzhuan() 籍贯:next)-getplace() next; /p执行循环,指向下一个 void operate:xueji() /查询学籍变化函数student *p=head;int num; /定义指针p,负值headcoutnum; /输入学号if(p-ge

14、tnum()!=num) /判断输入的学号是否等于第一个注册/的学生学号,p=p-next; /若不等,令p指向下一个,继续判断 coutgetxueji(p-b,p-c,p-d,p-e,p-f,p-g); /调用getxueji()函数void operate:show() /统计(显示)函数 student *p; p=head; /定义指针p并赋值headwhile(p-next) /执行循环,只到p-next为空 (p-next)-output(); /指向调用output函数 p=p-next; /使p指向下一个void operate:bf() /初始化函数,文件操作 studen

15、t *p,*p2; /定义两个指针p和p2,将p赋值head p=head; long t; /定义长整型t ifstream is(课设.txt,ios:in); /打开课设.txt文件 if(!is) / 如果打不开 ofstream os(课设.txt,ios:out); /进行写操作 os.close(); return ; int num=-1; while(1) num=-1; t=is.tellg(); /搭配seeg() isnum; is.seekg(t); /不连续进行访问if(numinput(is); /为p2分配空间,并指向input p-next=p2; p2-ne

16、xt=NULL; p=p-next; / 开辟新的结点,以便下次主函数运行的时候已经为此开辟了空间,否则将不能打开 void operate:save() /保存函数 student *p; p=head; /定义指针p赋值headofstream os(课设.txt,ios:out); /打开文件进行写入保存while(p-next) (p-next)-output(os); /将p-next指向的output内容写入/ 文件p=p-next; /p指向下一个coutttt文件已保存! next) (*p1)=p; /将p赋值*p1,用双指针,方便下面的调用if( (p-next)-getn

17、um()=num|(p-next)-getname()=pn)/判/断是否相等(学号或姓名) return 1; p=p-next; return 0; void operate:found() /查找函数student *p; int num=-1;int t=-1; /随便赋值初值num和t为-1 string name;do coutt;while(t2|t1); if(t=1) /即按学号查找 coutnum; if(t=2) /即按姓名查找 coutname; if( !find(&p,num,name) ) /调用find函数实现查找 couttt找不到你要查找的内容!next)-

18、output(); /将其输出void operate:del() /删除函数 student *p,*p2; int num; coutnum;if( !find(&p,num,) ) /再次调用find函数 couttt找不到你要删除的内容!next)-output(); /输出 p2=p-next; p-next=p2-next; delete p2; /删除结点void operate:mend() /修改函数 student *p; int num=-1,n; string name; do coutn; while(n2); if(n=1) /即按学号修改 coutnum; if(

19、n=2) /按姓名修改 coutname; if( !find(&p,num,name) ) /再次调用find函数查找要修改的/内容 couttt找不到你要修改的内容!next)-output(); /先将其输出 coutnext)-input(); /再次输入进行修改int operate:mainmenu() /主菜单函数int n;coutt 001 001 001 001 001 欢迎光临学生学籍管理系统 001 001 001 001 001 endl * * * * * * * * * * * * * * * * * * * * * * * * * * *endl * * * *

20、 * * * * * * * * * * * * * * * * * * * * * * *endl * * * * * * * * 001 1.学生注册 * * * * * * * *endl * * * * * * * * 001 2.增加 * * * * * * * *endl * * * * * * * * 001 3.修改信息 * * * * * * * *endl * * * * * * * * 001 4.删除 * * * * * * * *endl * * * * * * * * 001 5.查找 * * * * * * * *endl * * * * * * * * 001

21、6.统计 * * * * * * * *endl * * * * * * * * 001 7.学籍查询 * * * * * * * *endl * * * * * * * * 001 8.籍贯输出 * * * * * * * *endl * * * * * * * * 001 9.保存信息 * * * * * * * *endl * * * * * * * * 001 0.退出系统 * * * * * * * *endl * * * * * * * * * * * * * * * * * * * * * * * * * * *endl * * * * * * * * * * * * * * *

22、 * * * * * * * * * * * *endln; return n; 3. 两个类已经介绍完毕,下面看主函数 void main() operate o; /定义operate的对象o int n=1;int c; o.bf(); /初始化查找文件 while(n) / 使其能在没有命令的前提下保持菜单的循环 coutendl; c=o.mainmenu(); switch(c) /选择语句进行判断该执行什么功能 case 1:o.input();break; /若c=1,执行input(); case 2:o.add();break; case 3:o.mend();break;

23、 case 4:o.del();break; case 5:o.found();break; case 6:o.show();break; case 7:o.xueji();break; case 8:o.jiguan();break; case 9:o.save();break; case 0: if(o.getkey()=1) /判断key是否等于1 coutn; if(n=1) o.save(); n=0; /将n赋值0,跳出while循环 break;结构图如下:8籍贯输出7学籍查询现行系统组织结构图:开始选择菜单序号0退出9保存信息6统计成绩5查找信息4删除信息3修改信息2增加信息1

24、录入信息选择查找方式1?按要求逐步输入学生信息2?保存?按编号修改按姓名修改保存退出系统功能结构图:主程序籍贯输出学籍查询采单程序初始化程序增加删除修改统计退出查找显示输入类体结构:Getname()Student()Input(ifstream&is)ClassStudentGetnum()Getxueji()Getzhuan()Input()student()Output(ofsttream&os)Output()Bf()Found()opetate()Operate()Mainmenu()Input()ClassOperateGetkey()Find()Setkey()Add()Show

25、()Mend()Save()Del()Jiguan()Xueji()四 调试分析1.首先设计思想上开始想用友员去实现两个类的相互联系,但是因为仅仅用一个类去调用另一个类的函数,所以就用一个类的对象指针作为另一个类的数据成员更为合适,调用也简单很多2. 编译会出现很多错误,但是却都是不太难,可以在努力下改正,但是运行是却出现问题,会自动出现错误而关闭,后来知道是指针的运用不当!在 input函数中当p2指向学生类中的input()之后,应先将p2赋给p-next而不是将p-next赋给p2,这样p2空间出现问题,也未能释放,出现错误!故不能运行;3. 开始菜单只出现一次然后就跳出了,后来加了个w

26、hile循环将它一直循环下去就可以;4. 运行后按9可以保存,但是再继续按0它将继续提示问是否保存,但此时已经保存,所以赘余,因此在类中加两个函数即可,即所看到的key;5. 在保存后出现乱码,即屯屯屯屯屯,主要是在output(os&)函数中的数据age未写入导致最后的专业未能存储进去,导致出现乱码!五、用户手册1.首先对此程序运行,然后会有菜单提示2.按键实现您所想的操作3.进行一次结束后会继续跳出菜单框,请按键实现继续循环,操作比较简单易懂六、测试数据我们依次看运行结果按键:1;再依次按提示输入 按1继续;先按0,在按2,进行信息添加按6进行显示继续按3进行修改修改完毕再次显示按4删除;

27、删除完毕进行显示;按5进行查找按7看学籍输出按8输出学号专业和籍贯;按9进行文件的保存,便于下次的打开最后按0退出;此时文件已保存;七、附录#include#include#include#include using namespace std; class student protected: int num; string name; string sex; int age; string address; string collage; string classes; string zhuan; public: int b,c,d,e,f,g; student *next;student

28、()student() string getname() return name;int getnum() return num; string getplace() return address; string getzhuan() return zhuan; void getxueji(int b,int c,int d,int e,int f,int g)if(b=1) cout入学 ;elsecout未入学 ;if(b=0)cout暂无学籍信息;elseif(c=1) cout转专业 ; else cout未转专业 ; if(d=1) cout未退学 ;else cout已退学 ;if

29、(e=1) cout未降级 ;else cout已降级 ;if(f=1) cout未休学 ;else cout已休学 ;if(g=1) cout未毕业 ;else cout已毕业 ;void input()int a=1; coutttt请按提示输入:endl;coutnum;coutname;coutage;docoutsex; if(sex=男|sex=女) coutaddress; coutcollage; coutclasses; coutzhuan; coutn请输入学生学籍信息:默认1:入学;1:转专业;1:未退学;1:未降级;1:未休学;1:未毕业;endl; couttt输入学

30、籍信息,请依次输入6个数:(0或1);coutbcdefg; getxueji(b,c,d,e,f,g); a=0; else cout无此性别,请重新输入!numnameagesexaddresscollageclasses zhuan; is.get();/获取文件指针void output()cout学生的基本信息如下:endl; cout学号:num; cout 姓名:name;cout 年龄:age;cout 性别:sex;cout 籍贯:address;cout 学院:collage;cout 班级:classes;cout 专业:zhuanendl;void output(ofs

31、tream &os) ossetw(6)numsetw(10)namesetw(5)agesetw(10)sex setw(10)addresssetw(10)collagesetw(6)classes setw(10)zhuannext=NULL;key=1;operate()delete head;void input();void show();void mend();void found();void del(); void add();int find(student *p,int num,string pn);void xueji();void jiguan();void bf()

32、;void save(); int mainmenu();int getkey()return key;void setkey(int k)key=k; ; void operate:input()student *p,*p2=NULL; p=head; int n; while(p-next) p=p-next;while(n) p2=new student; p2-input(); p-next=p2; p2-next=NULL; p=p-next; coutn; void operate:add()input(); void operate:jiguan() student *p; p=

33、head; while(p-next) cout学号:next)-getnum() 专业:next)-getzhuan() 籍贯:next)-getplace() next; void operate:xueji()student *p=head;int num;coutnum;if(p-getnum()!=num)p=p-next; coutgetxueji(p-b,p-c,p-d,p-e,p-f,p-g); void operate:show() student *p; p=head; while(p-next) (p-next)-output(); p=p-next; void oper

34、ate:bf()/初始化函数,文件操作 student *p,*p2; p=head; long t; ifstream is(课设.txt,ios:in); if(!is) ofstream os(课设.txt,ios:out);/进行写操作 os.close(); return ; int num=-1; while(1) num=-1; t=is.tellg(); isnum; is.seekg(t);/不连续进行访问if(numinput(is); p-next=p2; p2-next=NULL; p=p-next; void operate:save() /保存函数 student

35、*p; p=head;ofstream os(课设.txt,ios:out);/打开文件进行写入保存while(p-next) (p-next)-output(os);p=p-next;coutttt文件已保存! next) (*p1)=p;if( (p-next)-getnum()=num|(p-next)-getname()=pn) return 1; p=p-next; return 0; void operate:found()student *p; int num=-1;int t=-1; string name;do coutt;while(t2|t1); if(t=1) cout

36、num; if(t=2) coutname; if( !find(&p,num,name) ) couttt找不到你要查找的内容!next)-output();void operate:del() student *p,*p2; int num; coutnum;if( !find(&p,num,) ) couttt找不到你要删除的内容!next)-output(); p2=p-next; p-next=p2-next; delete p2;void operate:mend() student *p; int num=-1,n; string name; do coutn; while(n2

37、); if(n=1) coutnum; if(n=2) coutname; if( !find(&p,num,name) ) couttt找不到你要修改的内容!next)-output(); coutnext)-input();int operate:mainmenu()int n;coutt 001 001 001 001 001 欢迎光临学生学籍管理系统 001 001 001 001 001 endl * * * * * * * * * * * * * * * * * * * * * * * * * * *endl * * * * * * * * * * * * * * * * * *

38、* * * * * * * * *endl * * * * * * * * 001 1.学生注册 * * * * * * * *endl * * * * * * * * 001 2.增加 * * * * * * * *endl * * * * * * * * 001 3.修改信息 * * * * * * * *endl * * * * * * * * 001 4.删除 * * * * * * * *endl * * * * * * * * 001 5.查找 * * * * * * * *endl * * * * * * * * 001 6.统计 * * * * * * * *endl * * * * * * * * 001 7.学籍查询 * * * * * * * *endl * * * * * * * * 001 8.籍贯输出 * * * * * * * *endl * * * * * * * * 001 9.保存信息 * * * * * * * *endl * * * * * * * * 001 0.退出系统 * * * * * * * *endl * * * * * * * * * * * * * * * * * * * * * * * * * * *endl *

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!