还剩18页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
学生信息管理系统完成时间2013年5月27日编程目的1对C++语法、基础知识进行综合运用,编写具有一定综合应用价值的稍大一些的程序,掌握面向对象程序设计OOP的思想,培养学生使用面向对象的程序设计思想分析和解决实际问题的能力;2掌握在VisualC++集成开发环境下编辑、编译、链接和运行一个C++程序的基本方法;3加深对所学知识的理解和掌握;4培养文档报告书面表达和思辨的能力系统简介利用面向对象的方法以及C++的编程思想来完成学生信息管理系统的设计学生信息包括学号、姓名、性别、班级、联系电话等等信息(也可自主设计其他的学生相关信息)要求实现学生信息的增加、修改、查询、删除、浏览等基本功能学生信息保存在文件中,要求文件中至少要记录10位学生信息的相关数据编程思路本程序建立了带表头节点的链表类、菜单类、主函数菜单类包括增加学生信息、删除信息、查找、浏览等功能链表类包括建立链表和删除链表总体设计下表是根据程序画的基本结构图建立链表菜单类学生信息管理系统链表类删除链表
2、加入学生资料
1、建立链表
3、插入一个学生
3、建立链表
5、显示该生
4、移除一个学生
6、按姓名查找
7、学生总数
8、清空链表
9、显示菜单
0、退出程序关键技术说明运用了面向对象设计中的类和链表,类是逻辑上相关的函数与数据的封装,它是对所要处理的问题的抽象描述类实际上也就相当于用户自定义的类型,和基本数据类型的不同之处在于,类这个特殊类型中同时包含了对数据进行操作的函数链表类的基本操作应该包括生成新节点、插入节点、删除节点、访问/修改节点数据、遍历链表等因此,在链表类中应该包含完成上述操作的成员函数,以及为了实现这些函数而添加的一些辅助函数,为了方便链表类对象间的赋值,还应重载“=”运算符另外,由于面向对象的封装特性,当然还要提供一些接口函数源代码#includeiostream.h#includestring.hclassStuList;classStudent{friendStuList;private:charname
[9];charsex
[6];charadd
[20];intnumber;Student*next;public:Studentchar*val=NULLchar*sal=NULLchar*adl=NULLintNo=0{number=No;next=NULL;ifval!=NULLstrcpynameval;ifsal!=NULLstrcpysexsal;ifadl!=NULLstrcpyaddadl;}};classStuList//带表头节点的链表类{private:Student*head*current;intcount;public:StuList{current=head=newStudent;count=2003060;cout链表已建立endl;}~StuList{makeEmpty;deletehead;cout链表已删除endl;}//以下是成员函数voidmakeEmpty;voidaddchar*valuechar*saluechar*adl;voidinsertintNochar*valuechar*saluechar*adl;voidremoveintNo;voidprint;voidsearchStuchar*value;intlength{returncount-2003060;}};voidStuList::makeEmpty//清空链表{Student*p;whilehead-next!=NULL{p=head-next;head-next=p-next;deletep;}current=head;count=0;}voidStuList::addchar*valuechar*saluechar*adl//将新元素value插入到最后{Student*newStu;newStu=newStudentvaluesalueadl;whilecurrent-next!=NULLcurrent=current-next;newStu-next=current-next;current=current-next=newStu;newStu-number=count+1;count++;coutvalue已经加入表endl;}voidStuList::insertintNochar*valuechar*saluechar*adl//将新元素value插入,使他的学号变为No{Student*newStu;Student*node=head;newStu=newStudentvaluesalueadlNo;whilenode-next!=NULL{ifnode-number==No-1break;node=node-next;}newStu-next=node-next;newStu-number=No;node=node-next=newStu;Student*p=node-next;whilep!=NULL{p-number++;p=p-next;}count++;coutvalue已经插入endl;}voidStuList::removeintNo//删除元素value{Student*p*q;q=head-next;whileq!=NULL{ifq-number==Nobreak;q=q-next;}ifq==NULL{cout没找到!endl;return;}p=head;whilep!=NULL//找到q的前一个节点p{ifp-next==qbreak;p=p-next;}p-next=q-next;deleteq;count--;p=p-next;whilep!=NULL{p-number--;p=p-next;}cout学号No已移除endl;}voidStuList::print//输出链表{Student*p;ifhead-next==NULL//链表为空{cout链表为空!endl;return;}cout学号姓名性别地址endl;p=head-next;whilep-next!=NULL{coutp-numberp-namep-sexp-addendl;p=p-next;}coutp-numberp-namep-sexp-addendl;}voidStuList::searchStuchar*value//查找含数据value的节点,返回该地址{current=head-next;whilecurrent!=NULL{ifstrcmpcurrent-namevalue==0break;current=current-next;}ifcurrent==NULLcout没找到!endl;elsecout找到学号为current-numbervalue在链表里endl;}classMenu//菜单类{char*c1*c2;public:Menu{c1=*;c2=*\n;}voidshow{coutendl;coutc1-*-*-*-*-*-*-*-*-*-*-*-*菜单*-*-*-*-*-*-*-*-*-*-*-*-*c2;coutc1c2;coutc
11.建立链表
2.加入学生资料c2;coutc
13.插入一个学生
4.移除一个学生c2;coutc
15.显示该表
6.按姓名查找c2;coutc
17.学生总数
8.清空链表c2;coutc
19.显示菜单
0.退出程序c2;coutc1c2;coutc1-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-c2;coutendl;}};voidmain{charcmd;StuList*list=NULL;Menumenu;menu.show;do{coutendl请选择要进行的操作序号;cincmd;iflist==NULL//检查输入的命令是否合适whilecmd!=1cmd!=9cmd!=0{cout还没有建立链表,请先建立链表;cincmd;}switchcmd//匹配命令{case1://建表list=newStuList;break;case2://加入学生到链表后charinsname2
[9]inssex2
[6]insadd2
[20];cout请输入姓名,性别(maleorfemale)地址endl;cininsname2;cininssex2;cininsadd2;list-addinsname2inssex2insadd2;break;case3://按学号插入一个学生charinsname3
[9]inssex3
[6]insadd3
[20];intinsnum;cout学号200306x:;cininsnum;cout姓名:;cininsname3;cout性别:;cininssex3;cout地址:;cininsadd3;list-insertinsnuminsname3inssex3insadd3;break;case4://删除一个学生intrem;cout学号200306x:;cinrem;list-removerem;break;case5://显示所有学生list-print;break;case6://按姓名查找一个学生charsear
[9];cout姓名;cinsear;list-searchStusear;list-print;break;case7://学生总数cout共有list-length个学生endl;break;case8://清空链表list-makeEmpty;cout链表为空endl;break;case9://显示菜单menu.show;break;case0://退出iflist==NULLbreak;chartemp;cout删除链表退出?y/n:;cintemp;iftemp==y{list-~StuList;list=NULL;}elsecmd=10;break;default:cout请输入菜单中的命令!endl;}}whilecmd!=0;}测试(程序有相似只列出部分程序)()
(1)开始界面
(2)加入学生资料本程序可以添加很多的学生资料(加一个为例)
(3)插入一个学生
(4)移除一个学生信息
(5)显示学生人数由于移除一个学生,下面的学生学号自动升一位
(6)按姓名查找系统评价及展望优点
(1)界面友好(良好的人机交互),提供菜单选项,并给出足够的选择信息以及提示信息
(2)程序具有一定的健壮性,不会因为用户的输入错误引起程序运行错误而中断执行
(3)源程序要加适当的注释,使程序容易阅读;
(4)可无限添加学生资料缺点
(1)学生学号是系统默认的,如果要更改学号要重新编写程序
(2)本程序要进行操作,首先要建立链表,否则不能进行
(3)界面中的9操作与彩单重复展望在此程序基础之上还可以进行添加其他功能,例如添加学生的成绩且不会对原程序任何影响。