版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/学生选修课选课系统目录TOC\t"1级标题,1,2级标题,2"\h\u204961前言1300962需求分析252432.1编写目的2220562.2需求概述240402.3需求说明264362.4开发环境29723总体设计3295163.1功能模块图3288913.2流程图4214693.3类的设计图5232234各功能模块设计7139464.1整体设计747144.2主要的功能函数设计7123825系统调试87426总结与体会142806.1总结14297796.2编写程序中遇到的问题及解决办法149116参考文献1517283附录源程序16须眉原作1前言随着计算机的普及.各高校均采用计算机进行学生选课。学生选修课系统主要包含选修课管理系统及学生选课系统两部分。学生选修课系统一般需要有管理员管理选修课课程.然后学生对经过管理员操作后的选修课进行选课。选修课管理系统由管理员登录.对当前所有选修课课程进行管理操作。学生选课系统则是由学生登录.学生可以查看由管理员整理好的所有选修课.并从显示出的选修课中选择自己要选择的课程。管理员管理选修课实质是对后台选修课库中的选修课信息进行操作.可以在库中添加课程或删除课程。学生选课的实质即是先打印出后台选修课库中所有选修课信息以供选择.选择课程即是对后台学生信息库里的学生信息进行修改。2需求分析2.1编写目的〔1要求学生达到熟练掌握C++语言的基本知识和技能;〔2基本掌握面向对象程序设计的基本思路和方法;〔3能够利用所学的基本知识和技能.解决简单的面向对象程序设计问题;〔4通过编写此系统.实现选修课系统的基本功能。2.2需求概述〔1系统中包括两个登陆身份〔管理员与学生.并对应不同的功能;〔2对于管理员.此系统具有添加、删除、查看选修课等功能;〔3对于学生.此系统具有选课、查询等功能2.3需求说明此系统可以实现学生选课.管理员管理课程的基本功能2.4开发环境使用VisualC++6.0编程软件3总体设计3.1功能模块图<1>学生学生身份有两个功能.分别是选课与查看个人信息。如图3.1所示。学生学生选课个人信息图3.1学生功能模块图管理员管理员可以对选修课课程进行管理。如下图所示。管理员管理员查看选修课删除选修课添加选修课图3.2管理员功能模块图3.2流程图进入系统后可以选择以学生身份或者管理员身份登录。学生登录需要输入个人的学号及姓名.成功登录后可以选课或查询个人信息。管理员的登录需要输入密码.成功登录后则可以对当前所有的选修课进行管理操作.可添加新选修课或删除已有的选修课。详细操作流程如下图所示。选择身份或退出选择身份或退出学生管理员开始结束选课个人信息查看选修课删除选修课添加选修课显示全部按类型选课按学分选课显示全部按类型查询按学分查询输入学号及姓名输入密码图3.3流程图3.3类的设计图Course类Course类即选修课课程类。数据成员分别是:课程编号、课程名称、课程类型、开课时间、授课学时、实验学时、总学时以及学分。成员函数则包含所有数据成员的get函数.用以获取数据成员的值.set函数用来修改课程.print函数则是打印课程的信息。如下图所示。Courseid:char*name:char*nature:char*date:char*shours:intahours:intzhours:intscore:doublescore:doublegetId<>:char*getName<>:char*getNature<>:char*getDate<>:char*getAhours<>:intgetShours<>:intgetZhours<>:intgetScore<>:doubleset<char*a,char*b,char*c,char*d,inte,intf,doubleg>:voidprint<>:void图3.4Course类Student类Student类即学生类。其中包含了学生的学号、学生姓名、所选的两门课程及两门选修课课程的总学分。setId和setName是用来修改相关成员的值.getName获取学生的姓名.print函数用来打印学生的相关信息.个selectCourse则是用来选课。如下图所示。Studentid:char*name:char*c1:Coursec2:Coursezscore:dounblesetId<char*a1>:voidsetName<char*a1>:voidgetName<>:char*selectCourse_1<Coursecc>:voidselectCourse_2<Coursecc>:voidprint<>:voidprint<>:void图3.5Student类4各功能模块设计4.1整体设计对于学生和选修课.我们分别定义了相应的类Student和类Course.其间的关系就是学生类中有两个选修课类对象成员。而对于管理员我们并没有单独去定义类.因为管理员只是对选修课进行操作.程序中并不需要访问管理员的信息。为了方便对选修课进行管理及多位学生的登录.我们定义了一个选修课数组和学生数组。4.2主要的功能函数设计选课函数voidselectCourse<Students1[10],Coursec1[M],ints_num1>对当前学生对象进行操作.覆盖其选修课对象成员c1或c2.即学生的选课。两种输出所需选修课函数按学分输出选修课函数voidselectScore<Coursec1[M]>按类型输出选修课voidselectNature<Coursec1[M]>对传递进来的选修课数组进行扫描.输出符合要求的选修课。选修课排序函数voidxu<Coursec1[M]>使用冒泡排序法对选修课数组进行编号从小到大的排序。主菜单函数voidmenu<Coursec1[6],Students1[10]>所有菜单循环都在其中.调用其他函数来实现具体功能。5系统调试系统主界面进入系统主界面后可以选择登录身份或退出程序。如图5.1所示。图5.1系统主界面2.选修课管理系统图5.1选择登录身份为管理员.默认密码123.输入-1可返回图5.1界面。密码输入正确后可进入管理员登录系统。如图5.2所示。图5.2选修课管理系统按学分查看选修课图5.2选择查看选修课.可以查看当前所有的选修课课程的相关信息。可以选择不同的输出方式:按学分查询、按类型查询、显示全部。选择按学分查询.在选择0.5.可打印当前所有课程中学分为0.5的课程信息。如图5.3所示。图5.3按学分查看选修课查询全部选修课查看选修课功能中可以选择显示全部.即罗列出当前所有的选修课课程信息。如图5.4所示。图5.4查询全部选修课管理员添加选修课图5.2选择添加选修课.可以添加一门新的选修课.然后按要求输入课程信息。如图5.5所示。图5.5管理员添加选修课添加后的选修课信息添加选修课后选择返回上一层.再选择显示全部选修课可以看到已新增的选修课已添加成功。如图5.6所示。图5.6添加后的选修课管理员删除选修课图5.2选择删除选修课。输入要删除的选修课的编号.即可删除相应的选修课。如图5.7所示。图5.7管理员删除选修课删除后的选修课信息删除选修课后选择返回上一层.再选择显示全部选修课可以看到已删除的选修课已删除成功。如图5.8所示。图5.8删除后的选修课信息学生选课系统图5.1选择学生.然后输入学生的姓名及学号就能进入学生选课系统。如图5.9所示。图5.9学生选课系统学生选课以学生身份登录成功后.可以选择选课或是查询个人信息。选择选课可以选择按学分选课、按课程类型选课或显示全部课程再进行选课。选择按学分选课.再选艺术类.再输入课程编号即可选择相应课程。如图5.10所示。图5.10学生选课学生信息选择查看个人信息程序即打印出当前学生的相关信息。如图5.11所示。图5.11学生信息退出图5.1选择退出即退出程序。如图5.12所示。图5.12退出程序6总结与体会6.1总结本程序实现了学生选课及管理员对课程的操作功能.而学生的选课及管理员对课程的管理.都可以按学分或类型来进行操作。管理员登录的默认密码是123.管理员可以添加新的选修课课程.也可以删除原有的选修课。经过此次的课程设计.我们受益颇丰.尤其是对在编写过程中遇到的难题的处理方法.学会了很多程序设计的技巧。6.2编写程序中遇到的问题及解决办法<1>在无法与后台交互的情况下如何实现用户登录?因为只需要管理员有对选修课操作的能力.因此不需储存管理员的信息.只需在其登录前询问密码即可。而学生的登录.在其登录时分配一个对象空间.储存在其登录时获取的学号及姓名即可.即每一个学生的登录相当于注册过程。<2>如何在不退出程序的情况下.能够让多位学生进行选课?定义学生类对象数组.每一位学生选完课后.再分配一个新的学生类对象空间。<3>如何实现对学生对象中课程对象成员的覆盖?一开始我们为了方便起见是考虑学生类课程对象定义为引用.这样只需引用已有的选修课课程即可.但这样的话.在对学生对象初始化时引用的初始化就成了问题.因此只能放弃。最终是选择了使用set和get方法对对象成员的成员一个个覆盖。参考文献[1]黄维通.VisualC++面向对象与可视化程序设计〔第2版.北京:清华大学出版社.2007.[2]张乃孝.陈光.孙猛.算法与数据结构——C语言描述〔第三版.2011.[3]谭浩强.C程序语言设计〔第三版[M].北京:清华大学出版社.2007.[4]杨永斌.数据结构理论与实践[M].天津:科学技术出版社.2011.[5]罗建军.C++程序射机枪教程〔第2版.北京:高等教育出版社.2004.[6]郑振杰.C++程序设计.北京:人民邮电出版社.2005.[7]刘觉夫.王更生等.c++程序设计.北京:邮电大学出版社.2011.[8]邵伟忠.C常用算法程序集.天津:人民出版社.2009.[9]徐世亮.C++大学教程.北京:人民邮电出版社.2010.[10]吴华恩.C++程序设计.北京:机械工业出版社.2008.[11]邵伟忠.C常用算法程序集.天津:人民出版社.2009.附录源程序#include<iostream.h>#include<string.h>#defineM10classCourse//选修课课程类{private:char*id;char*name;char*nature;char*date;intshours;intahours;intzhours;doublescore;public:Course<>{id="unknown";name="unknown";nature="unknown";zhours=0;shours=0;ahours=0;date="unknown";score=0;}Course<char*a,char*b,char*c,char*d,inte,intf,doubleg>{id=a;name=b;nature=c;date=d;shours=e;ahours=f;score=g;zhours=e+f;}voidset<char*a,char*b,char*c,char*d,inte,intf,doubleg>{id=a;name=b;nature=c;date=d;shours=e;ahours=f;score=g;zhours=e+f;}char*getDate<>{returndate;}intgetZhours<>{returnzhours;}intgetShours<>{eturnshours;}intgetAhours<>{returnahours;}doublegetScore<>{returnscore;}char*getNature<>{returnnature;}char*getId<>{eturnid;}char*getName<>{returnname;}voidprint<>{cout<<"编号:"<<id<<'\t';cout<<"名称:"<<name<<'\t';cout<<"类型:"<<nature<<'\t';cout<<"上课时间:"<<date<<endl;cout<<"总学时:"<<zhours<<'h'<<'\t';cout<<"授课学时:"<<shours<<'h'<<'\t';cout<<"实验学时:"<<ahours<<'h'<<'\t';cout<<"学分:"<<score<<endl;}};classStudent//学生类{private://学生选的课程是对象的成员char*id;char*name;Coursec1;Coursec2;doublezscore;public:Student<>{id="unknown";name="unknown";zscore=0;}voidsetId<char*a1>{d=a1;}voidsetName<char*a1>{name=a1;}char*getName<>{returnname;}voidprint<>{cout<<"\n学号:"<<id<<endl;cout<<"姓名:"<<name<<endl;cout<<"您已选的选修课:\n1.";c1.print<>;cout<<"2.";c2.print<>;cout<<"选修课总学分:"<<c1.getScore<>+c2.getScore<><<'\n'<<endl;}voidselectCourse_1<Coursecc>//修改对象的课程成员{c1.set<cc.getId<>,cc.getName<>,cc.getNature<>,cc.getDate<>,cc.getShours<>,cc.getAhours<>,cc.getScore<>>;}voidselectCourse_2<Coursecc>{c2.set<cc.getId<>,cc.getName<>,cc.getNature<>,cc.getDate<>,cc.getShours<>,cc.getAhours<>,cc.getScore<>>;}};voidselectCourse<Students1[10],Coursec1[M],ints_num1>//选课{charid[2][10],select1;inti,j,k;for<j=0;j<2;j++>{cout<<"\n您想选您的第几门选修课<1or2>:";cin>>k;cout<<"请输入您想要选的选修课的编号:";cin>>id[j];for<i=0;i<M&&c1[i].getScore<>!=0;i++>//扫描所有选修课.如果当前选修课为空则跳出循环{if<strcmp<id[j],c1[i].getId<>>==0>{if<1==k>{s1[s_num1].selectCourse_1<c1[i]>;break;}if<2==k>{s1[s_num1].selectCourse_2<c1[i]>;break;}}}if<0==j>{cout<<"\n您是否想要继续选课?<y/n>:";cin>>select1;if<'n'==select1>break;}}cout<<"\n选课成功!"<<endl;}voidselectScore<Coursec1[M]>//按学分查询选修课{intselect,num,i;cout<<"\n请输入选修课的学分:";cout<<"\n1.0.5\n2.1.0"<<endl;cout<<"请选择:";cin>>select;num=1;if<1==select>{for<i=0;i<M&&c1[i].getScore<>!=0;i++>{if<0.5==c1[i].getScore<>>{cout<<num<<'.';c1[i].print<>;cout<<endl;num++;}}}elseif<2==select>{for<i=0;i<M&&c1[i].getScore<>!=0;i++>{if<1.0==c1[i].getScore<>>{cout<<num<<'.';c1[i].print<>;cout<<endl;num++;}}}elsecout<<"对不起.您的输入有误.请重新输入!\n\n";}voidselectNature<Coursec1[M]>//按类型查询选修课{intselect,num,i;charn1[10]="艺术类",n2[10]="学术类";cout<<"请输入选修课的学分:";cout<<"\n1.艺术类\n2.学术类"<<endl;cout<<"请选择:";cin>>select;num=1;if<1==select>{for<i=0;i<M&&c1[i].getScore<>!=0;i++>{if<strcmp<n1,c1[i].getNature<>>==0>{cout<<num<<'.';c1[i].print<>;cout<<endl;num++;}}}elseif<2==select>{for<i=0;i<M&&c1[i].getScore<>!=0;i++>{if<strcmp<n2,c1[i].getNature<>>==0>{cout<<num<<'.';c1[i].print<>;cout<<endl;num++;}}}elsecout<<"对不起.您的输入有误.请重新输入!\n\n";}voidxu<Coursec1[M]>//当前所有选修课进行排序〔编号从小到大{inti,j,k=0,num=0;Coursecc;for<j=0;j<M&&c1[j].getScore<>!=0;j++>{for<i=num;i<M&&c1[i].getScore<>!=0;i++>{if<strcmp<c1[i].getId<>,c1[i+1].getId<>>>0>{k++;cc.set<c1[i].getId<>,c1[i].getName<>,c1[i].getNature<>,c1[i].getDate<>,c1[i].getShours<>,c1[i].getAhours<>,c1[i].getScore<>>;c1[i].set<c1[i+1].getId<>,c1[i+1].getName<>,c1[i+1].getNature<>,c1[i+1].getDate<>,c1[i+1].getShours<>,c1[i+1].getAhours<>,c1[i+1].getScore<>>;c1[i+1].set<cc.getId<>,cc.getName<>,cc.getNature<>,cc.getDate<>,cc.getShours<>,cc.getAhours<>,cc.getScore<>>;}elsek=2;if<1==k>num=i;}k=0;}}voidmenu<Coursec1[6],Students1[10]>//菜单{intflag0,flag1,flag2,flag3,flag4,password=0;intselect,s_num=0,i,j,num,newNum;charid[10][10];charselect1;charid1[10];charname1[10];charda[20];charna[10];intsh;intah;doublesc;flag0=1;while<flag0>{cout<<"\n============"<<endl;cout<<"|菜单|"<<endl;cout<<"============"<<endl;cout<<"|1.管理员|"<<endl;cout<<"|2.学生|"<<endl;cout<<"|3.退出|"<<endl;cout<<"============"<<endl;cout<<"\n请选择:";cin>>select;switch<select>{case1:flag3=1;while<1>{cout<<"请输入密码<输入-1退出>:";cin>>password;if<-1==password>{flag3=0;break;}if<123==password>{cout<<"\n管理员.你好!欢迎登录!"<<endl;break;}cout<<"密码错误.请重新输入!\n";}while<flag3>{cout<<"\n================"<<endl;cout<<"|菜单|"<<endl;cout<<"================"<<endl;cout<<"|1.添加选修课|"<<endl;cout<<"|2.删除选修课|"<<endl;cout<<"|3.查看选修课|"<<endl;cout<<"|4.返回上一层|"<<endl;cout<<"================"<<endl;cout<<"\n请选择:";cin>>select;switch<select>{case1:newNum=0;for<i=0;i<M&&c1[i].getScore<>!=0;i++>newNum++;cout<<"\n请按格式依次输入选修课的编号、名称、上课时间<x.xx-x.xx>、类型<艺术类或学术类>、授课学时、实验学时、学分:"<<endl;cin>>id1>>name1>>da>>na>>sh>>ah>>sc;c1[newNum].set<id1,name1,da,na,sh,ah,sc>;xu<c1>;cout<<"添加成功!"<<endl;break;case2:flag4=1;j=0;num=0;while<flag4>{cout<<"\n请输入您想要删除课程的编号:";cin>>id[j];for<i=0;i<M&&c1[i].getScore<>!=0;i++>{if<strcmp<id[j],c1[i].getId<>>==0>{for<num=i;num<M&&c1[i].getScore<>!=0;num++>{c1[num].set<c1[num+1].getId<>,c1[num+1].getName<>,c1[num+1].getNature<>,c1[num+1].getDate<>,c1[num+1].getShours<>,c1[num+1].getAhours<>,c1[num+1].getScore<>>;}c1[num]=Course<>;break;}}cout<<"删除成功!\n";cout<<"\n您是否想要继续删除?<y/n>:";cin>>select1;if<'n'==select1>break;j++;}break;case3:flag2=1;while<flag2>{cout<<"\n============================"<<endl;cout<<"|菜单|"<<endl;cout<<"============================"<<endl;cout<<"|1.按学分查询选修课|"<<endl;cout<<"|2.按选修课类型查询选修课|"<<endl;cout<<"|3.显示全部|"<<endl;cout<<"|4.返回上一层|"<<endl;cout<<"============================"<<endl;cout<<"请选择:";cin>>select;switch<select>{case1:selectScore<c1>;break;case2:selectNature<c1>;break;case3:for<i=0;i<M&&c1[i].getScore<>!=0;i++>{cout<<i+1<<'.';c1[i].print<>;cout<<endl;}break;case4:flag2=0;break;default:cout<<"对不起.您的输入有误.请重新输入!\n\n";}}break;case4:flag3=0;break;default:cout<<"对不起.您的输入有误.请重新输入!\n\n";}}break;case2:chara[10],b[10];s1[s_num]=Student<>;cout<<"\n请输入您的学号:";cin>>a;s1[s_num].setId<a>;cout<<"请输入您的姓名:";cin>>b;s1[s_num].setName<b>;flag1=1;while<flag1>{cout<<"\n================"<<endl;cout<<"|菜单|"<<endl;cout<<"================"<<endl;cout<<"|1.选课|"<<endl;cout<<"|2.个人信息|"<<endl;cout<<"|3.返回上一层|"<<endl;cout<<"================"<<endl;cout<<"请选择:";cin>>select;switch<select>{case1:flag2=1;cout<<"\n"<<s1[s_num].getName<><<",你好!欢迎登录!"<<endl;while<flag2>{cout<<"\n============================"<<endl;cout<<"|菜单|"<<endl;cout<<"============================="<<endl;cout<<"|1.按学分查询选修课|"<<endl;cout<<"|2.按选修课类型查询选修课|"<<
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年中节能(新疆)太阳能科技有限公司招聘备考题库及完整答案详解1套
- 2026年南京大学事业编制岗位公开招聘15人备考题库有答案详解
- 2026年三亚旅游文化发展集团有限公司招聘备考题库及1套完整答案详解
- 2026年九江市融资担保集团有限公司招聘备考题库及完整答案详解1套
- 银行落实内控制度
- 招投标政府采购内控制度
- 工会禁毒内控制度
- 医保基金使用内控制度
- 义务教育内控制度
- 监所财务内控制度
- 数字经济前沿八讲
- 脓毒症免疫功能紊乱
- 广东江南理工高级技工学校
- 斜弱视眼科学
- 电商平台需求规格说明书-通用版本
- 眼底荧光造影护理配合
- 2023年电大会计本人力资源管理复习资料
- GB/T 25146-2010工业设备化学清洗质量验收规范
- 相关控规-申花单元
- 90万吨煤矿人员配备
- 酒精度检测原始记录
评论
0/150
提交评论