1、学生籍贯信息记录簿设计基于C+平台学院: 信息工程学院专业班级: 学生学号及姓名: 指导老师: 设计任务:学生籍贯信息记录簿设计编制一个学生籍贯信息记录簿,每个学生信息包括:学号、姓名、籍贯。具体功能:(1)创建信息链表并以磁盘文件保存;(2)读取磁盘文件并显示输出所有学生的籍贯信息;(3)按学号或姓名查询其籍贯;(4)按籍贯查询并输出该籍贯的所有学生;(5)能添加、删除和修改学生的籍贯信息(可选项)老师评语:目录一 引言-1二 系统需求分析-2三 设计流程及算法-33.1 总体设计-33.2 详细设计:设计流程图-33.3 算法的实现与运行-33.3.0 建立信息链表-43.3.1 添加一个
2、学生到数组-43.3.2 输出所有学生的籍贯信息-43.3.3 加数组学生到文件-53.3.4 显示文件中所有学生-53.3.5 按学号查询-63.3.6 按籍贯查询-63.3.7 删除人员-7 四 数据结构的设计-8五 软件的测试与调-9六 课程设计心得-14七 参考文献-14八 附录 源程序-151 引 言学生档案管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理文件档案,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据
3、,这对于查找、更新和维护都带来了不少的困难。计算机已经成为我们学习和工作的得力助手:今天,计算机的价格已经十分低廉,性能却有了长足的进步。它已经被应用于许多领域,计算机之所以如此流行的原因主要有以下几个方面:首先,计算机可以代替人工进行许多繁杂的劳动;其次,计算机可以节省许多资源;第三,计算机可以大大的提高人们的工作效率等等。 随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。作为计算机应用的一部分,使用计算机对学生档案信息进行管理,具有手工管理所无法比拟的优点。例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、
4、寿命长、成本低等。这些优点能够极大地提高学生档案管理的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。学生档案管理系统是典型的信息管理系统(MIS),其开发主要包括保密和前台应用程序的开发两个方面。本次课程设计目的:通过一个企业人事管理系统,使学校档案管理工作系统化、规范化、自动化,从而达到提高学校管理效率。使学生掌握一门高级程序设计语言,了解面向对象程序设计的基本概念与方法,进而学会利用C+语言学会解决一般应用问题,并为后续的专业课程奠定程序设计基础。系统的基本模块:根据系统功能的要求,学生档案系统可以分为新学生档案的输入,学生档案的显示、查询和删除等模块。2 系统需求分析2.1问
5、题定义项目:学生管理应用软件。目的:让院校有效的管理体制学生信息,帮助学校老师掌握学生的情况。背景:根据当前某高校的学生管理出现的异常问题:它浪费人力和其它资源。因此,基于这种缺陷而制定开发这个学生管理系统软件。2.2 可行性研究从技术方面,是通过C+来做系统的前台,来实现整系统的功能;从操作方面,基本的录入、查询、修改等都能满足用户的需求;此次设计没有考虑经济可行性。经过这一阶段确定了该系统的粗略系统流程图。可行研究阶段的目标是:使工作人员从繁琐的填表,查表工作中解放出来;提高工作质量,使供需双方都获得满意的结果;促进报表,提高工作效率。2.3 需求分析应该确定系统必须在Microsoft
6、Visual C+ 6.0的环境下实现具有添加新学生、显示全部、查询、删除、等功能的学生档案管理系统子模块(学生籍贯信息记录簿)。其中本次课程设计实现的档案模块又分为如下子模块:1登陆界面:主要是对用户权限的判断,判断是否为合法用户,是合法用户的就可以对数据进行操作。2新生录入:主要是将新生信息录入到数据库中;3管理项目:对学生信息进行添加、删除、查询等。3 设计流程及算法3.1总体设计:1.设置输入输出流及将程序由磁盘文件保存,构件类stu,其主要包括:学号 ,籍贯.2.构建无返回值main函数,输出由与程序相关操作构成的信息链表3.根据链表设置利用if函数和循环函数将链表中的内容一一实现.
7、3.2详细设计:设计流程图:目前程序已达到的功能:学生籍贯信息记录簿 添加学生到数组显示数组中的学生和显示文件中的学生添加数组的学生到文件和文件输入数组按学号或籍贯查询学生删除学生 一 信息链表内容如下: 1添加一个学生到数组2显示数组中所有学生3加数组学生到文件4显示文件所有学生5按学号查询学生6按籍贯查询学生7/删除一个学生8文件输入数组0完成二.选择相关操作请输入相对应的阿拉伯数字。三.设置if函数使输入序号与符号所需要求相对应。四.在if函数中,实现多分支选择结构,并实现序号与相应内容的对应关系.3.3算法的实现与运行:3.3.0在程序开始运行时既会出现一信息链表,按链表要求输入序号,
8、若输入的数字不是在0-8这个范围之内则要求重新输入。而实现该过程需要利用到if循环。void main() int k=-1;while(k!=0) coutendl; cout1 添加一个学生到数组 endl; cout2 显示数组中所有学生 endl; cout3 加数组学生到文件 endl; cout4 显示文件中所有学生 endl; cout5 按学号查询学生 endl; cout6 按籍贯查询学生 endl; cout7 删除一个学生 endl; cout8 文件输入数组 endl; cout0 完成 endl; coutk; if (k=1) AddStudent(); else
9、if(k=2) Loop(); else if(k=3) AddToFile(); else if(k=4) ShowFile(); else if(k=5) FindID(); else if(k=6) FindProvince(); else if(k=7) Remove(); else if(k=8) ReadFile(); else if(k=0) printf(完成!n); else printf(你输入了个错误的数字!n);return;3.3.1添加一个学生到数组:定义字符型变量籍贯,学号。输入相关内容,利用指针使输入的数据直接存入到内存中。int AddStudent() in
10、t id; string province; coutidprovince; studentn.setID(id); studentn.setProvince(province); n+; return 0;3.3.2输出所有学生的籍贯信息:利用指针将数据库中与要查询的学生相对应的信息内容从数据库中调出。其输出的方式为循环方式,设置循环条件,利用for语句,设置变量I,n,使i从0进行自加,直到i的值为n,并依次将studengti的值输出,从而达到输出所有学生的学籍信息的目的。int Loop() int i; cout显示所有学生:endl; for(i=0;in;i+) cout学号 =
11、 studenti.getID()籍贯 = studenti.getProvince()endl; return 0;3.3.3 加数组学生到文件,利用指针将数据库中学生的信息加入到文件中。其输入方式为循环方式设置循环条件,利用for语句,设置变量i,n,使i从0进行自加,直到i的值为n,并依次将studengt(i)的值输入到文件中,从而达到输入所有学生的学籍信息的目的。int AddToFile() ofstream oFile(fileName.c_str(),ios:app); int i; for(i=0;in;i+) oFilestudenti.getID() studenti.g
12、etProvince()idprovince) studentn.setID(id); studentn.setProvince(province); n+; iFile.close(); return 0;int Loop() int i; cout显示所有学生:endl; for(i=0;in;i+) cout学号 = studenti.getID()籍贯 = studenti.getProvince()idprovince) coutid provinceendl; iFile.close(); return 0;3.3.5 按学号查询:其主要操作与按籍贯查询相似。int FindID(
13、) int id1,id2; string province; coutid1; ifstream iFile(fileName.c_str(); while(iFileid2province) if(id1=id2) coutid2 provinceendl; break; iFile.close(); return 0;3.3.6按籍贯查询:定义一字符型数组,输入要查询学生的籍贯,利用指针和strcmp函数及for循环在数据库中寻找相应的数据,在找到后输出。int FindProvince() int id; string province1,province2; coutprovince
14、1; ifstream iFile(fileName.c_str(); while(iFileidprovince2) if(province1=province2) coutid province2endl; iFile.close(); return 0;3.3.7 删除人员:定义字符型变量姓名并分配20个字节的内存空间,定义布尔型变量控制函数。利用if函数在数据库中寻找相对应姓名的数据,找到后将其删除。int Remove() int id,i,j; coutid; ReadFile(); for(i=0;in;i+) if(studenti.getID()=id) n-; for(j=
15、i;jn;j+) studentj=studentj+1; SaveFile(); return 0;4 数据结构的设计数据字典:数据字典包括以下几种类型的条目: 数据流条目数据流条目给出某个数据流和定义,它通常是列出该数据流的各组成数据元素。该系统中的数据流条目有:学生基本信息学生学号学生籍贯班级信息班号年级逻辑结构的设计如表5.1所示:表4.1学生基本信息结构设计列名数据类型可否为空说明namechar20NOT NULL学生姓名numberintNOT NULL学号bornplacechar50NOT NULL籍贯5软件的测试与调试登陆界面:1) 输入1后并输入相关数据呈现的界面:2)在
16、第一步和第二步的基础上使用操作2后上呈现的界面:3)在第一步,第二步的基础上使用操作3后上呈现的界面:4)在第一步,第二步和第四步的基础上使用操作4后上呈现的界面:5)在前几步的基础上使用操作5后上呈现的界面:6)在前几步的基础上使用操作6后上呈现的界面:7)在前几步的基础上使用操作7后上呈现的界面:8)在前几步的基础上使用操作8后上呈现的界面:9)在前几步的基础上使用操作9后上呈现的界面:6 课程设计心得在本次课程设计中,我利用到了本学期学到的大部分知识,而在次程序中,最主要运用是在数组和类及在指针的运用方面。同时明白只有充分的融会贯通在课堂上学会的东西并在课后积极的进行程序设计的训练,增加
17、自己对C+程序语言的了解,并应该尽早的熟练的使用这一门语言。通过此学期的学习我了解到了C+作为一种面向对象的程序设计语言,它支持对类的抽象。而在此程序中,主要运用的知识为函数的循环系统,类的组成,对象成员的应用等,而访问对象中的成员可以有三种方法,通过对象名和成员运算符访问对象中的成员,通过指向对象的指针访问对象中的成员,通过对象的引用变量访问对象中的成员。课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学生来说掌握计
18、算机开发技术是十分重要的。回顾起此次课程设计,至今我仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在整整一个星期的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,这毕竟独立做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比
19、如说结构体通过这次课程设计之后,一定把以前所学过的知识重新温故。七 参考文献1谭浩强.C+程序设计.第一版.出版地:清华大学出版社,出版年:2004年6月。2薛松、杨彬、赵栋伟等.VisualC+编程实例.第一版.出版地:人民邮电出版社,出版年:1999年8月。3郑阿奇、梁敬东等.C#程序设计教程.第一版.出版地:机械工业出版社,出版年:2009年1月。4 丁勇, 彭积云, 查金旺.学生管理系统的设计与实现.八 附录:源程序清单:#include#include#includeusing namespace std;class CStudent private: int ID; /学号 str
20、ing Province; /籍贯 public: void setID(int id) ID=id; void setProvince(string province) Province=province; int getID() return ID; string getProvince() return Province;CStudent student1000;int n = 0; /数组学生总数string fileName=students.txt;int AddStudent(); /添加一个学生到数组int Loop(); /显示数组中所有学生int AddToFile();
21、/加数组学生到文件int SaveFile(); /数组到文件int ShowFile(); /显示文件所有学生int FindID(); /按学号查询学生int FindProvince(); /按籍贯查询学生int Remove(); /删除一个学生int ReadFile(); /文件输入数组void main() int k=-1;while(k!=0) coutendl; cout1 添加一个学生到数组 endl; cout2 显示数组中所有学生 endl; cout3 加数组学生到文件 endl; cout4 显示文件中所有学生 endl; cout5 按学号查询学生 endl;
22、cout6 按籍贯查询学生 endl; cout7 删除一个学生 endl; cout8 文件输入数组 endl; cout0 完成 endl; coutk; if (k=1) AddStudent(); else if(k=2) Loop(); else if(k=3) AddToFile(); else if(k=4) ShowFile(); else if(k=5) FindID(); else if(k=6) FindProvince(); else if(k=7) Remove(); else if(k=8) ReadFile(); else if(k=0) printf(完成!n)
23、; else printf(你输入了个错误的数字!n);return;int FindProvince() int id; string province1,province2; coutprovince1; ifstream iFile(fileName.c_str(); while(iFileidprovince2) if(province1=province2) coutid province2endl; iFile.close(); return 0;int FindID() int id1,id2; string province; coutid1; ifstream iFile(f
24、ileName.c_str(); while(iFileid2province) if(id1=id2) coutid2 provinceendl; break; iFile.close(); return 0;int Remove() int id,i,j; coutid; ReadFile(); for(i=0;in;i+) if(studenti.getID()=id) n-; for(j=i;jn;j+) studentj=studentj+1; SaveFile(); return 0;int AddStudent() int id; string province; coutidp
25、rovince; studentn.setID(id); studentn.setProvince(province); n+; return 0;int AddToFile() ofstream oFile(fileName.c_str(),ios:app); int i; for(i=0;in;i+) oFilestudenti.getID() studenti.getProvince()endl; oFile.close(); return 0;int SaveFile() ofstream oFile(fileName.c_str(); int i; for(i=0;in;i+) oFilestudenti.getID() studenti.getProvince()idprovince) studentn.setID(id); studentn.setProvince(province); n+; iFile.close(); return 0;int Loop() int i; cout显示所有学生:endl; for(i=0;in;i+) cout学号 = studenti.getID()籍贯 = studenti.getProvince()idprovince) coutid provinceendl; iFile.close(); return 0;