C++课程设计——
学生信息管理系统
姓 名: 汪 志 成 学 号: 09102211 专 业: 信息与计算科学 学 院: 理 学 院 指导老师: 日 期: 2012 . 12 . 12
学生管理系统——C++课程设计报告
概述
C++课程设计是实践性教学中的一个重要环节,它以C++教程课程为基础,是一门独立于课程之外的特殊课程。课程设计是让同学们对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。《C++教程》是一门重要的专业基础课,是计算机理论和应用的核心基础课程。C++课程设计,要求学生在选择结构、循环结构以及算法方面的应用,加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。
题目描述
设计一个学生管理系统,要求能输入学生的信息,学生包含以下信息:姓名、学号、性别、出生年月、入学年份、院系。对学生信息能进行查询、修改、插入、删除等功能,并制作一个类似菜单的界面。由于学生管理系统中有学生的重要信息,为确保学生信息的安全性,需要设计一个登录系统才能进入菜单界面,只有登录后才能对系统中学生信息的录入、查询、修改、插入、删除等操作。查询功能需要分总体查询和条件查询;修改功能能修改学生单项信息和全部信息;插入功能能将新来的学生信息插入到指定位置;为了学生信息的误删,设计一个确认删除机制。
系统分析
这是一个学生信息管理系统,需为其设计一个功能的界面式菜单,通过菜单对其各项功能一目了然,并通过if条件选择结构的设计,对各项功能按模块实现,并用while循环语句对各个模块完美的配合实现其界面的循环和跳转,并运用的C++中的特有的string、bool型数据,使得程序的设计更加完美。系统需要模拟学生信息管理系统的录入、查询、修改、插入、删等各项功能。 各项功能模块如下:
1、录 入 2、查 询 3、修 改 4、插 入 5、删 除 0、退 出 从主菜单中选择各项功能,进入相应的子菜单:录入功能支持录入单个学生信息和多个学生信息,完成录入信息后返回主菜单;查询功能支持总体查询和条件查询,查询完毕后可以选择返回主菜单;修改功能能对某个学生的各项信息进行单一修改,也可以修改某个学生的全部信息,成功修改后返回主菜单,若没有找到需要修改的学生信息,可以选择继续修改或返回主菜单;插入功能支持单个插入和多个插入,插入是指将新来的学生信息插入到指定的位置,插入完毕后返回主菜单;删除功能支持单个删除和多个删除,删除学生信息会严重影响学生信息安全的操作,为确保学生信息的安全,采用了删除确认机制,只有确认后才进行删除;退出功能是结束整个循环,退出学生信息管理系统,同样采用了退出确认机制,只有确认后才会退出系统。并且每个子功能菜单中都有返回项,即使选错功能后能随时返回主菜单而不执行而任何操作,这样使系统更加完善。
详细设计
1、录入学生信息
在成功登陆学生信息管理系统后,系统初始的学生信息为空,无法进行各功能的使用与实现,所以需要先录入学生的基本信息。学生基本信息包括:学生姓名、学生学号、性别、出生年月、入学年份、院系等六项信息。录入学生后,系统自定义给予学生一个序号,该序号与学生信息录入系统的先后顺序有关,序号的多少表示当前学生系统中已录入学生的个数。对于有同名或同学号的一些操作,都将是根据序号优先原则,比如修改、删除等功能。学生人数由变量n控制,每当录入一个学生信息时,n就会自加1。初始时n=0表示当前没有任何学生信息。多个录入则是对单个录入执行的一个for循环语句。 //录入部分代码实现如下: n=n+1;
cout<<\" 请输入姓名: \";cin>>name[n]; cout<<\" 请输入学号: \";cin>>num[n];
cout<<\" 请输入出生年、月、日: \";cin>>year[n]>>mon[n]>>day[n]; cout<<\" 请选择性别(1、男 / 2、女): \";cin>>sex[n]; cout<<\" 请输入入学年份: \";cin>>date[n]; cout<<\" 请输入院系: \";cin>>yuan[n]; cout< 当没有任何学生信息即n=0时,将会无法查询;总体查询查询当前已录入的全体学生信息,学生按录入的先后即系统给定的序号输出,并有一个整体的列表,使得各个学生的信息一目了然。条件查询针对用户给定的条件(如某个学号、姓名等),在系统中逐一进行查找,查找到符合相应条件的学生则给予输出,若没有找到任何相符的学生信息,系统则给出没有找到相应学生的报告信息。 //总体查询部分代码实现如下: for(i=1;i<=n;i++){cout<<\" ||\"< cout<<\"|| \"< cout<<\" ||\"< 进入修改子菜单后,首先选择要修改的选项,如修改学号或者姓名等,选择修改项后,然后指定要修改的学生的姓名或者学号,然后系统会自动匹配,如果系统没有找到相应的学生的姓名或学号,系统将反馈没有找到的相应信息,无法进行修改;如若找到后,将会进行修改,请输入修改后的信息即可,修改完成后, 系统将对该学生的信息进行更新。修改中提供全部修改功能项,使得修改更加完善与方便实用。 //修改部分代码实现如下: cout<<\" 请选择修改项: \";cin>>a;if(a==0)cout<<\" 返回主菜单界面 \"< if(m==0){cout<<\" 没有找到相应学生的信息,无法进行修改\"< else if(a==3){cout<<\" 请输入新的性别(1、男 / 2、女):\";cin>>sex[m];} else if(a==4){cout<<\" 请输入新的年、月、日:\";cin>>year[m]>>mon[m]>>day[m];} else if(a==5){cout<<\" 请输入新的入学年份:\";cin>>date[m];} else if(a==6){cout<<\" 请输入新的院系:\";cin>>yuan[m];} else if(a==7){cout<<\" 请输入姓名: \";cin>>name[m]; cout<<\" 请输入学号: \";cin>>num[m];cout<<\" 请输入出生年、月、日: \"; cin>>year[m]>>mon[m]>>day[m];cout<<\" 请选择性别(1、男 / 2、女): \"; cin>>sex[m];cout<<\" 请输入入学年份: \";cin>>date[m]; cout<<\" 请输入院系: \";cin>>yuan[m];} if(m!=0)cout<<\" 已成功修改 \"< 插入功能与录入功能有些相似,都具有录入学生信息的作用,但是插入功能的区别在于,插入能使录入的学生信息插入到指定的位置,这个位置是指系统的序号,如系统已经有5个学生的信息了,如果是录入一个新的学生信息,系统将会将这个学生序号定为6,即在前面5个学生的后面,而插入则可以插入的这个人中的任何顺序,输入插入位置为1则插入到第一号位置,但是果然插入的位置大于5(当前学生的个数),为了是学生的序号连续,系统将强制转化为6,即在五个学生的后面。而多个插入则是由第一个插入的学生决定,如果出入3个,插入位置为3,则这三个学生的位置分别为3、4、5,而原来3、4、5的则变为6、7、8的位置,其基本原理与单个相似,插入是将要插入的该位置以及之后的学生信息相应的往后移动,信息移动完成后,要插入的位置的学生信息为空,然后输入学生的信息即赋值给该位置,然后完成插入,然后学生的个数同样会自加1。 //插入部分代码实现如下: cout<<\" 请选择插入的位置:\";cin>>m;if(m==0)m=1;else if(m>n)m=n+1;if(m<=n) for(i=n;i>=m;i--){name[i+1]=name[i];num[i+1]=num[i];year[i+1]=year[i];mon[i+1]=mon[i];day[i+1]=day[i];sex[i+1]=sex[i];date[i+1]=date[i];yuan[i+1]=yuan[i];} n=n+1;cout<<\" 请输入姓名: \";cin>>name[m];cout<<\" 请输入学号: \"; cin>>num[m];cout<<\" 请输入出生年、月、日: \";cin>>year[m]>>mon[m]>>day[m]; cout<<\" 请选择性别(1、男 / 2、女): \";cin>>sex[m];cout<<\" 请输入入学年份: \"; cin>>date[m];cout<<\" 请输入院系: \";cin>>yuan[m];cout<<\" 已成功插入 \"< 删除学生功能是输入要删除学生的学号或姓名,系统自动寻找与之匹配的学 生,若没有找到将无法执行删除操作,若找到后,将会进入删除确认机制,这是为了确定学生的信息安全,确保不会被误删而丢失数据。删除功能的实现是将将要删除的学生序号找到,从该序号开始,后一个学生的信息依次赋值给前一个学生,直到最后一个学生赋值给倒数第二个学生终止,并且学生数会自减1,多个删除与单个删除基本相似,利用循序即可实现。 //删除部分代码实现如下: cout<<\" 请输入要删除的学号或姓名:\";cin>>chaxun;m=0; for(i=1;i<=n;i++)if(chaxun==name[i]||chaxun==num[i]){m=i;i=n+1;} if(m==0){cout<<\" 没有找到相应学生的信息,无法进行删除\"< else if(e=='N'||e=='n'){cout<<\" 已取消删除该学生信息\"< while(e=='Y'||e=='y'){e='e';for(i=m;i<=n;i++){name[i]=name[i+1];num[i]=num[i+1];year[i]=year[i+1];mon[i]=mon[i+1];day[i]=day[i+1];sex[i]=sex[i+1];date[i]=date[i+1];yuan[i]=yuan[i+1];}n=n-1;cout<<\" 已成功删除 \"< 因为学生系统含有学生的重要信息,并且能对学生信息进行修改、删除等操作,所以将学生管理系统设定为一个加密系统。此处,为了方便演示,账号随意输入,密码定为2012. //登陆部分代码实现如下: while(f0){cout< cin>>chaxun;if(chaxun==\"2012\")f0=false;else cout<<\" 账号或密码不正确,请重新输入\"< 退出系统即终止整个循环即可。修改总循环的bool值为false,并进入一个退出确认机制,如果取消则不会退出返回到主菜单,如果确认则会退出结束本程序。 //退出部分实现代码如下: if(k==0){f0=true;while(f0){f0=false;cout<<\" 是否确定退出系统?(Y 确定 / N 取消)\";cin>>e;if(e=='y'||e=='Y') f=false;else if(e=='n'||e=='N')cout< 通过这次C++课程设计,我认识到从课本上学到的知识是远远不够的。本次设计使我深入的了解了C++编程在实际问题下的灵活运用,并对C++有了更进一步的认识。 虽然经过努力终于把该系统完成,可是该系统还是不完善,程序中的一些算法还不是很清楚,只不过把简单的功能实现了出来,这些缺憾归根结底都是因为我的C++语言和数据结构的水平还不是很高 ,还需要经过不懈的努力才能做出比较完善的系统。这次课程设计让我明白要真正的掌握一门编程语言需要的不仅仅是课本上的东西,还要在实际的编程过程中慢慢的掌握其中的奥妙。同时我明 白了,要成为一名优秀的编程人员必须具备坚实的编程语言基础、熟练的调试程序的技能,耐心也很重要、同时细心也是不可缺少的。所以为了自己的梦想,在以后的学习过程中,我要不断的充实自己,努力的学习。通过本次课程设计让我熟悉了软件开发的基本过程;初步掌握了软件开发过程的问题分析、系统设计、程序编码、测试等阶段的基本任务和技能方法;培养了我的算法设计和算法分析的能力;提高了综合运用所学的理论知识和方法以及独立分析和解决问题的能力。 虽然课程设计的过程是艰辛的,但是当看着自己的程序能够运行的瞬间,无限的满足感会让自己感到从未有过的兴奋。 参考文献 [1] 郑莉 李宁编著:《C++教程》人民邮电出版社 2010版 [2] 耿国华主编:《数据结构》(C语言描述)高等教育出版社 2005版 [3] 金远平著:《数据结构》(C++描述)清华大学出版社 2005版 附录: //学生信息管理系统源代码 #include {int a,b,c,i,j,k,m,n; int sex[t]; char e; bool f,f0,f1; string name[t]={\"v\v\ n=0;f=true;f0=true;cout< if(chaxun==\"2012\")f0=false;else cout<<\" 账号或密码不正确,请重新输入\"< if(k==0){f0=true;while(f0){f0=false;cout<<\" 是否确定退出系统?(Y 确定 / N 取消)\";cin>>e; if(e=='y'||e=='Y') {f=false;cout< cout<<\" 请选择性别(1、男 / 2、女): \";cin>>sex[n];cout<<\" 请输入入学年份: \";cin>>date[n];cout<<\" 请输入院系: \";cin>>yuan[n];cout< cout<<\" 请选择性别(1、男 / 2、女): \";cin>>sex[n];cout<<\" 请输入入学年份: \";cin>>date[n];cout<<\" 请输入院系: \";cin>>yuan[n];cout<<\" 已成功录入 \"<else {cout<<\" 输入不正确,请重新输入\"< ==== \"< ==== \"< else if(a==3){cout<<\" 请输入新的性别(1、男 / 2、女):\";cin>>sex[m];}else if(a==4){cout<<\" 请输入新的年、月、日:\";cin>>year[m]>>mon[m]>>day[m];} else if(a==5){cout<<\" 请输入新的入学年份:\";cin>>date[m];}else if(a==6){cout<<\" 请输入新的院系:\";cin>>yuan[m];} else if(a==7){cout<<\" 请输入姓名: \";cin>>name[m];cout<<\" 请输入学号: \";cin>>num[m];cout<<\" 请输入出生年、月、日: \";cin>>year[m]>>mon[m]>>day[m]; cout<<\" 请选择性别(1、男 / 2、女): \";cin>>sex[m];cout<<\" 请输入入学年份: \";cin>>date[m];cout<<\" 请输入院系: \";cin>>yuan[m];} if(m!=0)cout<<\" 已成功修改 \"< if(m<=n)for(i=n;i>=m;i--){name[i+1]=name[i];num[i+1]=num[i];year[i+1]=year[i];mon[i+1]=mon[i];day[i+1]=day[i];sex[i+1]=sex[i];date[i+1]=date[i];yuan[i+1]=yuan[i];} n=n+1;cout<<\" 请输入姓名: \";cin>>name[m];cout<<\" 请输入学号: \";cin>>num[m];cout<<\" 请输入出生年、月、日: \";cin>>year[m]>>mon[m]>>day[m]; cout<<\" 请选择性别(1、男 / 2、女): \";cin>>sex[m];cout<<\" 请输入入学年份: \";cin>>date[m];cout<<\" 请输入院系: \";cin>>yuan[m];cout<<\" 已成功插入 \"< if(m<=n)for(i=n;i>=m;i--){name[i+1]=name[i];num[i+1]=num[i];year[i+1]=year[i];mon[i+1]=mon[i];day[i+1]=day[i];sex[i+1]=sex[i];date[i+1]=date[i];yuan[i+1]=yuan[i];} n=n+1;cout<<\" 请输入姓名: \";cin>>name[m];cout<<\" 请输入学号: \";cin>>num[m];cout<<\" 请输入出生年、月、日: \";cin>>year[m]>>mon[m]>>day[m]; cout<<\" 请选择性别(1、男 / 2、女): \";cin>>sex[m];cout<<\" 请输入入学年份: \";cin>>date[m];cout<<\" 请输入院系: \";cin>>yuan[m];cout<<\" 已成功插入 \"< 该学生信息\"< 因篇幅问题不能全部显示,请点此查看更多更全内容