

下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、学生选修课选课系统目录1前言 .1.2需求分析 .2.2.1编写目的 .2.2.2需求概述 .2.2.3需求说明 .2.2.4开发环境 .2.3总体设计 .3.3.1功能模块图 .3.3.2流程图 .4.3.3类的设计图 .5.4各功能模块设计 .7.4.1整体设计 .7.4.2主要的功能函数设计 .7.5系统调试 .8.6总结与体会1.4.6.1总结1.4.6.2编写程序中遇到的问题及解决办法 .1.4参考文献.1.5.附录 源程序.1.6.须眉原作1丄 、八1 前言随着计算机的普及,各高校均采用计算机进行学生选课。学生选修课系统主要包含选修课管理系统及学生选课系统两部分。学生选修课系统一般
2、需要有管理员管理选修课课程, 然后学生对经过管理员 操作后的选修课进行选课。 选修课管理系统由管理员登录, 对当前所有选修课课 程进行管理操作。学生选课系统则是由学生登录, 学生可以查看由管理员整理好 的所有选修课,并从显示出的选修课中选择自己要选择的课程。管理员管理选修课实质是对后台选修课库中的选修课信息进行操作, 可以在 库中添加课程或删除课程。 学生选课的实质即是先打印出后台选修课库中所有选 修课信息以供选择,选择课程即是对后台学生信息库里的学生信息进行修改。22 需求分析2.1编写目的(1)要求学生达到熟练掌握C+语言的基本知识和技能;(2)基本掌握面向对象程序设计的基本思路和方法;(
3、3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题;(4)通过编写此系统,实现选修课系统的基本功能。2.2需求概述(1)系统中包括两个登陆身份(管理员与学生) ,并对应不同的功能;(2)对于管理员,此系统具有添加、删除、查看选修课等功能;(3)对于学生,此系统具有选课、查询等功能2.3需求说明此系统可以实现学生选课,管理员管理课程的基本功能2.4开发环境使用Visual C+6.0编程软件3(2)管理员管理员可以对选修课课程进行管理。如下图所示管理员添删查加除看选选选修修修课课课图3.2管理员功能模块图3.1功能模块图(1)学生学生身份有两个功能,3 总体设计分别是选课与查看个人
4、信息3.1所示。图 3.1 学生功能模块图43.2流程图进入系统后可以选择以学生身份或者管理员身份登录。 学生登录需要输入个人 的学号及姓名,成功登录后可以选课或查询个人信息。 管理员的登录需要输入密 码,成功登录后则可以对当前所有的选修课进行管理操作, 可添加新选修课或删 除已有的选修课。详细操作流程如下图所示。开始L._ _J选择身份或退出结束图 3.3 流程图3.3类的设计图(1) Course类Course类即选修课课程类。数据成员分别是:课程编号、课程名称、课程类型、 开课时间、授课学时、实验学时、总学时以及学分。成员函数则包含所有数据输入学号及姓名输入密码5成员的get函数,用以获
5、取数据成员的值,set函数用来修改课程,print函数则 是打印课程的信息。如下图所示。Courseid: char * n ame: char * n ature: char * date: char * shours: int ahours: int zhours: intscore: double score: double getId(): char * getName(): char* getNature(): char*getDate(): char* getAhours(): int getShours(): int getZhours(): int getScore(): do
6、ubleset(char *a, char *b, char *c, char *d, int e, int f, double g): void prin t(): void图 3.4 Course 类6(2) Stude nt类Stude nt类即学生类。其中包含了学生的学号、学生姓名、所选的两门课程及两门选修课课程的总学分。setId和setName是用来修改相关成员的值,getName获取学生的姓名,print函数用来打印学生的相关信息,个selectCourse则是用来 选课。如下图所示。Stude ntid: char *n ame: char * c1: Course c2: C
7、ourse zscore: doun ble setId(char * a1): void setName(char* a1): voidgetName(): char* selectCourse_1(Course cc): void selectCourse_2(Course cc): void print(): voidprint():void图 3.5 Student 类74 各功能模块设计4.1整体设计对于学生和选修课,我们分别定义了相应的类Student和类Course,其间的 关系就是学生类中有两个选修课类对象成员。 而对于管理员我们并没有单独去定 义类,因为管理员只是对选修课进行
8、操作,程序中并不需要访问管理员的信息。为了方便对选修课进行管理及多位学生的登录, 我们定义了一个选修课数组 和学生数组。4.2主要的功能函数设计(1)选课函数void selectCourse(Student s110, Course c1M, int s_num1)对当前学生对象进行操作,覆盖其选修课对象成员c1或c2,即学生的选课。(2)两种输出所需选修课函数按学分输出选修课函数void selectScore(Course c1M)按类型输出选修课void selectNature(Course c1M)对传递进来的选修课数组进行扫描,输出符合要求的选修课。(3)选修课排序函数void
9、xu(Course c1M)使用冒泡排序法对选修课数组进行编号从小到大的排序。(4)主菜单函数void menu(Course c16, Student s110)所有菜单循环都在其中,调用其他函数来实现具体功能。85 系统调试1.系统主界面进入系统主界面后可以选择登录身份或退出程序。如图5.1所示图 5.1 系统王界面2.选修课管理系统图5.1选择登录身份为管理员,默认密码123,输入-1可返回图5.1界面 码输入正确后可进入管理员登录系统。如图5.2所示。C:PrograB FilesXBicrosuf t Vi aval StudidMyPro j ects-.请输入密码(输入-1退岀1
10、23管理员,你好!欢迎登录?厂葆重一;图 5.2 选修课管理系统课课课层修修修一选选选上加屠回添删查返93.按学分查看选修课图5.2选择查看选修课,可以查看当前所有的选修课课程的相关信息。可以 选择不同的输出方式:按学分查询、按类型查询、显示全部。选择按学分查询, 在选择0.5,可打印当前所有课程中学分为0.5的课程信息。如图5.3所示。图 5.3 按学分查看选修课4.查询全部选修课查看选修课功能中可以选择显示全部,即罗列出当前所有的选修课课程信 息。如图5.4所示。10图 5.4 查询全部选修课115.管理员添加选修课图5.2选择添加选修课,可以添加一门新的选修课,然后按要求输入课程信 息。
11、如图5.5所示。图 5.5 管理员添加选修课6.添加后的选修课信息添加选修课后选择返回上一层,再选择显示全部选修课可以看到已新增的选修课已添加成功。如图5.6所示。a|x|图 5.6 添加后的选修课输验-5-5次实.6.6式时语功论成选ssa.ssa.请请拦盹添号3 3扁1 1的蚩课集條、学入琴_3_3名称、1.01 1h h3 3h h 0 0 5 5 0 0 5 50 0 1 101 13 3- -! !- -播|p时n|r时选编学编学请总E-E-总F称二健康与养生授课学时;15h名能“授课学时:音乐鉴赏12b_ 类型二 实验学时;ah类型: 艺术类 实验学时:311畫上课时间二5.13-
12、5.30上课时间:5-21-6-10学今:0-53.编号:006总学吋:16J1久编号:907总学时:18hG编号:008tfeep 学籃肿:5-2艺术类 上课时间:5.20-6.23学乐1类型:5.6-5.39课时间:学术类学分:1專牟議13h癖学时:Qh艺术类上课时间:5.10-6.2学乐0-5上课时间:5.7-5-30学系0-5类型艺卞类或学术类) 、127管理员删除选修课图5.2选择删除选修课。输入要删除的选修课的编号,即可删除相应的选修课。如图5.7所示图 5.7 管理员删除选修课自选选选上加I回添删查返课课课层修修修一入您想要删除课程的编号:00M成功I-nlxl00115h冷書氮
13、学吋亀atifers*却术畫5-7-6-2at0Q718h岂杏宅上课时间:5.20-6.23at00813h论语蕖学时:13h实验学时:0h类虹5-e-5.30rT学术类at01012h岂杰宅上课时间:5.10-6.201515h轟譚膳閒蠶需營上课时间:5.7-5.30学分:0-5上课时间:5.13-5.301138.删除后的选修课信息删除选修课后选择返回上一层, 再选择显示全部选修课可以看到已删除的选 修课已删除成功。如图5.8所示。c: *C: Frogra Fileslicrosoft Visual StudioMyPro ject sbf Debugbf. eze*图 5.8 删除后的
14、选修课信息149.学生选课系统图5.1选择学生,然后输入学生的姓名及学号就能进入学生选课系统。如图5.9所示。图 5.9 学生选课系统10.学生选课以学生身份登录成功后,可以选择选课或是查询个人信息。选择选课可以选 择按学分选课、按课程类型选课或显示全部课程再进行选课。选择按学分选课, 再选艺术类,再输入课程编号即可选择相应课程。如图5.10所示。15图 5.10 学生选课11.学生信息选择查看个人信息程序即打印出当前学生的相关信息。如图5.11所示g *C: Progra Files.Bicrosoft Visual StudioMyPro ject sbf Debugbf. exei选课!
15、羅个人信息i 3.返回上一层请选择:2图 5.11 学生信息12.退出图5.1选择退出即退出程序。如图5.12所示n-H、ilil- - 23-23-一-修阴5h5h即劭八_0101企选0 0 1 1 0 01 1咎0 0弓持.总:选口蘇昨谍号名己编畫着学姓您总2.2.总选名称:育乐鉴赏类型:艺术类 名齡 溶文化与殴 类型: 授傑学時:15h实验学时:3h上课时囘:5.21-6.100.5上课时间:5.20-6.231图 5.12 退出程序166 总结与体会6.1总结本程序实现了学生选课及管理员对课程的操作功能, 而学生的选课及管理员 对课程的管理, 都可以按学分或类型来进行操作。 管理员登录
16、的默认密码是123, 管理员可以添加新的选修课课程,也可以删除原有的选修课。经过此次的课程设计,我们受益颇丰,尤其是对在编写过程中遇到的难题的 处理方法,学会了很多程序设计的技巧。6.2编写程序中遇到的问题及解决办法(1)在无法与后台交互的情况下如何实现用户登录? 因为只需要管理员有对选修课操作的能力, 因此不需储存管理员的信息, 只需在其登录前询问密码即可。而学生的登录,在其登录时分配一个对象空 间,储存在其登录时获取的学号及姓名即可,即每一个学生的登录相当于注 册过程。(2)如何在不退出程序的情况下,能够让多位学生进行选课? 定义学生类对象数组,每一位学生选完课后,再分配一个新的学生类对
17、象空间。(3)如何实现对学生对象中课程对象成员的覆盖? 一开始我们为了方便起见是考虑学生类课程对象定义为引用,这样只需 引用已有的选修课课程即可,但这样的话,在对学生对象初始化时引用的初 始化就成了问题,因此只能放弃。最终是选择了使用set和get方法对对象成 员的成员一个个覆盖。17参考文献1黄维通.Visual C+面向对象与可视化程序设计(第2版)北京: 版社,2007.2张乃孝,陈光,孙猛.算法与数据结构C语言描述(第三版)3谭浩强.C程序语言设计(第三版)M.北京:清华大学出版社,4杨永斌.数据结构理论与实践M.天津:科学技术出版社,2011.罗建军.C+程序射机枪教程(第2版)北京
18、:高等教育出版社,郑振杰.C+程序设计北京:人民邮电出版社,2005.7刘觉夫,王更生等.C+程序设计.北京:由E电大学出版社,2011.8邵伟忠.C常用算法程序集.天津:人民出版社,2009.9徐世亮.C+大学教程.北京:人民邮电出版社,2010.10吴华恩.C+程序设计.北京:机械工业出版社,2008.11邵伟忠.C常用算法程序集.天津:人民出版社,2009.清华大学出,2011.2007.2004.18附录 源程序#include #include #define M 10class Course/ 选修课课程类private:char * id; char * name;char *
19、nature; char * date;int shours; intahours;int zhours;double score;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, int e, int f, double g)id = a; name = b; nature = c; date = d; shou
20、rs = e; ahours = f; score = g; zhours = e + f;void set(char *a, char *b, char *c, char *d, int e, int f, double g)id = a; name = b;19nature = c; date = d;shours = e; ahours = f;score = g; zhours = e + f;char * getDate() return date; int getZhours() return zhours; int getShours() eturn shours; intget
21、Ahours() return ahours; double getScore() return score; char * getNature() return nature;char * getId() eturn id;char * getName()return name; voidprint()cout 编号cout 名称 cout 类型cout 上课时间 cout 总学时 : cout 授课学时 cout Course c2;double zscore;public:Student()id = unknown;name = unknown;zscore = 0;void setId
22、(char * a1)d = a1;void setName(char * a1)name = a1;char * getName()return name; id t; name t; nature t; date endl; zhours h t; shours h t ahours h t 实验学时 : score endl;/学生类/学生选的课程是对象的成员20void print()cout n 学号 : id endl;cout 姓名 : name endl;cout 您已选的选修课: n1.;c1.print();cout 2.;c2.print();cout 选修课总学分 :
23、c1.getScore() + c2.getScore() n endl;void selectCourse_1(Course cc)/ 修改对象的课程成员c1.set(cc.getId(),cc.getName(),cc.getNature(),cc.getDate(),cc.getShours(),cc.getAhours(),cc.getScore();void selectCourse_2(Course cc)c2.set(cc.getId(),cc.getName(),cc.getNature(),cc.getDate(),cc.getShours(),cc.getAhours(),
24、cc.getScore();void selectCourse(Student s110, Course c1M, int s_num1)/ 选课char id210, select1;int i, j, k;for(j=0; j2; j+)21cout k;cout idj;for(i=0; iM & c1i.getScore() !=0; i+)/ 扫描所有选修课,课为空则跳出循环if(strcmp(idj, c1i.getId()=0)if(1 = k)s1s_num1.selectCourse_1(c1i); break;if(2 = k)s1s_num1.selectCour
25、se_2(c1i); break;if(0 = j)cout select1;if(n = select1) break;cout n 选课成功! endl;void selectScore(Course c1M) / 按学分查询选修课int select, num, i;cout n 请输入选修课的学分: ;cout n 1. 0.5n 2. 1.0 endl;cout select;num = 1;if(1 = select)for(i=0; iM & c1i.getScore() !=0; i+)if(0.5 = c1i.getScore()cout num .;c1i.prin
26、t();cout endl; num+;else if(2 = select)如果当前选修22for(i=0; iM & c1i.getScore() !=0; i+)if(1.0 = c1i.getScore()cout num .;c1i.print();cout endl; num+;else cout 对不起,您的输入有误,请重新输入!nn;void selectNature(Course c1M)/按类型查询选修课int select, num, i;char n110= 艺术类 , n210 = 学术类 ;cout 请输入选修课的学分: ;cout n 1. 艺术类 n 2
27、. 学术类 endl;cout select;num = 1;if(1 = select)for(i=0; iM & c1i.getScore() !=0; i+)if(strcmp(n1, c1i.getNature() = 0)cout num .; c1i.print();cout endl;num+;else if(2 = select)for(i=0; iM & c1i.getScore() !=0; i+)if(strcmp(n2, c1i.getNature() = 0)cout num .;c1i.print();cout endl; num+;else cou
28、t 对不起,您的输入有误,请重新输入!nn;void xu(Course c1M) / 当前所有选修课进行排序(编号从小到大)23int i,j,k=0,num=0;Course cc;for(j=0; jM & c1j.getScore() !=0; j+)for(i=num; i 0)k+;cc.set(c1i.getId(),c1i.getName(),c1i.getNature(),c1i.getDate(),c1i.getShours(),c1i.getAhours(),c1i.getScore();c1i.set(c1i+1.getId(),c1i+1.getName(),
29、c1i+1.getNature(),c1i+1.getDate(),c1i+1.getShours(),c1i+1.getAhours(),c1i+1.getScore();c1i+1.set(cc.getId(),cc.getName(),cc.getNature(),cc.getDate(),cc.getShours(),cc.getAhours( ),cc.getScore();else k = 2;if(1 = k) num = i;k = 0;void menu(Course c16, Student s110)/ 菜单int flag0, flag1, flag2, flag3,
30、flag4, password=0 ;int select, s_num=0, i, j, num, newNum;char id1010;char select1;char id110;char name110;char da20;char na10;int sh;int ah; double sc;flag0 = 1;while(flag0)cout n= endl; cout | 菜 单 | endl; cout = endl; cout | 1. 管理员 | endl; cout | 2.学生 | endl; cout | 3.退出 | endl;cout = endl; cout s
31、elect;switch(select)case 1: flag3 = 1; while(1)cout password;if(-1 = password)flag3 =0;24break;if(123 = password)cout n 管理员, 你好! 欢迎登录 break;cout 密码错误,请重新输入! n;while(flag3)cout n= endl; cout | 菜 单| endl;cout = endl;cout | 1. 添加选修课 | endl; cout | 2. 删除选修课 | endl;cout | 3. 查看选修课 | endl; cout | 4. 返回上一层
32、 | endl;cout = endl; cout select;switch(select)case 1: newNum = 0;for(i=0; iM & c1i.getScore() !=0; i+) newNum+; cout n 请按格式依次输入选修课的编号、名称、上 课时间 (x.xx-x.xx) 、类型 ( 艺术类或学术类 )、授课学时、实验学时、学分 : id1 name1 da na sh ah sc;c1newNum.set(id1, name1, da, na, sh, ah, sc); xu(c1);cout 添加成功! endl; break;case 2:
33、flag4 = 1; j = 0; num = 0; while(flag4)cout idj;for(i=0; iM & c1i.getScore() !=0; i+)if(strcmp(idj, c1i.getId()=0)for(num=i; numM & c1i.getScore() !=0;num+)c1num.set(c1num+1.getId(),c1num+1.getName(),c1num+1.getNature(),c1num+1.get! endl;25Date(),c1num+1.getShours(),c1num+1.getAhours(),c1num
34、+1.getScore();c1num = Course(); break;cout 删除成功! n;cout select1;if(n = select1) break;j+;break;case 3: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 select;switch(se
35、lect)case 1:selectScore(c1); break;case 2:selectNature(c1);break;case 3:for(i=0; iM & c1i.getScore() !=0; i+)cout i+1 . ;c1i.print();cout endl;26break;case 4: flag2 = 0; break;default :cout 对不起,您的输入有误,请重新输入 !nn;break;case 4: flag3 = 0; break;default :cout 对不起,您的输入有误,请重新输入 !nn;break;case 2:char a10, b10; s1s_num = Student();cout a;s1s_num.setId(a);cout b;s1s_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 select; switch(selec
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 特许经营合同的终止协议
- 矿山提前关闭协议书范本
- 环卫法务合同协议书范本
- 美术机构签约协议书模板
- 油茶果收购合同协议模板
- 球队安全合同协议书范本
- 签订合同之后的补充协议
- 物流网点转让合同协议书
- 终止销售承包合同协议书
- 销售方怎样拟定合同协议
- 商场人员出入管理制度
- 员工做法人协议书
- 情绪管理与冲突处理技巧
- 2026届高职单招考试大纲英语词汇(音标版)
- 污水处理厂光伏发电项目钢结构施工方案
- 2025年重庆发展投资有限公司及所属企业校园招聘9人笔试参考题库附带答案详解
- 店铺转让带技术合同协议
- 静脉采血规范指南新版
- 免疫接种冷链管理停电应急预案1
- 放射状角膜切开术并发症的长期随访研究-全面剖析
- 内衣类目测试题及答案
评论
0/150
提交评论