欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    c++课程设计-学生选修课选课系统(19页).doc

    • 资源ID:35397731       资源大小:230.50KB        全文页数:19页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    c++课程设计-学生选修课选课系统(19页).doc

    -c+课程设计-学生选修课选课系统-第 16 页学生选修课选课系统目 录1 前言12 需求分析22.1 编写目的22.2 需求概述22.3 需求说明22.4 开发环境23 总体设计3功能模块图33.2 流程图43.3 类的设计图54 各功能模块设计7775 系统调试86 总结与体会146.1 总结146.2 编写程序中遇到的问题及解决办法14参考文献15附录 源程序16须眉原作1 前言随着计算机的普及,各高校均采用计算机进行学生选课。学生选修课系统主要包含选修课管理系统及学生选课系统两部分。学生选修课系统一般需要有管理员管理选修课课程,然后学生对经过管理员操作后的选修课进行选课。选修课管理系统由管理员登录,对当前所有选修课课程进行管理操作。学生选课系统则是由学生登录,学生可以查看由管理员整理好的所有选修课,并从显示出的选修课中选择自己要选择的课程。管理员管理选修课实质是对后台选修课库中的选修课信息进行操作,可以在库中添加课程或删除课程。学生选课的实质即是先打印出后台选修课库中所有选修课信息以供选择,选择课程即是对后台学生信息库里的学生信息进行修改。2 需求分析 编写目的 (1)要求学生达到熟练掌握C+语言的基本知识和技能; (2)基本掌握面向对象程序设计的基本思路和方法; (3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题; (4)通过编写此系统,实现选修课系统的基本功能。 需求概述 (1)系统中包括两个登陆身份(管理员与学生),并对应不同的功能; (2)对于管理员,此系统具有添加、删除、查看选修课等功能; (3)对于学生,此系统具有选课、查询等功能 需求说明 此系统可以实现学生选课,管理员管理课程的基本功能 开发环境3 总体设计功能模块图(1)学生学生身份有两个功能,分别是选课与查看个人信息。如图3.1所示。学生选课个人信息图 3.1 学生功能模块图(2) 管理员管理员可以对选修课课程进行管理。如下图所示。管理员查看选修课删除选修课添加选修课图 3.2 管理员功能模块图 流程图 进入系统后可以选择以学生身份或者管理员身份登录。学生登录需要输入个人的学号及姓名,成功登录后可以选课或查询个人信息。管理员的登录需要输入密码,成功登录后则可以对当前所有的选修课进行管理操作,可添加新选修课或删除已有的选修课。详细操作流程如下图所示。选择身份或退出学生管理员开始结束选课个人信息查看选修课删除选修课添加选修课显示全部按类型选课按学分选课显示全部按类型查询按学分查询输入学号及姓名输入密码图 3.3 流程图 类的设计图(1) 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, int e, int f, double g): voidprint(): void图 3.4 Course类(2) Student类 Student类即学生类。其中包含了学生的学号、学生姓名、所选的两门课程及两门选修课课程的总学分。setId和setName是用来修改相关成员的值,getName获取学生的姓名,print函数用来打印学生的相关信息,个selectCourse则是用来选课。如下图所示。Studentid: char *name: char *c1: Coursec2: Coursezscore: dounblesetId(char * a1): voidsetName(char* a1): voidgetName(): char*selectCourse_1(Course cc): voidselectCourse_2(Course cc): voidprint(): voidprint(): void图3.5 Student类4 各功能模块设计对于学生和选修课,我们分别定义了相应的类Student和类Course,其间的关系就是学生类中有两个选修课类对象成员。而对于管理员我们并没有单独去定义类,因为管理员只是对选修课进行操作,程序中并不需要访问管理员的信息。为了方便对选修课进行管理及多位学生的登录,我们定义了一个选修课数组和学生数组。(1) 选课函数 void selectCourse(Student s110, Course c1M, int s_num1) 对当前学生对象进行操作,覆盖其选修课对象成员c1或c2,即学生的选课。(2) 两种输出所需选修课函数按学分输出选修课函数 void selectScore(Course c1M)按类型输出选修课void selectNature(Course c1M)对传递进来的选修课数组进行扫描,输出符合要求的选修课。(3) 选修课排序函数 void xu(Course c1M)使用冒泡排序法对选修课数组进行编号从小到大的排序。(4) 主菜单函数 void menu(Course c16, Student s110)所有菜单循环都在其中,调用其他函数来实现具体功能。5 系统调试1. 系统主界面进入系统主界面后可以选择登录身份或退出程序。如图5.1所示。 系统主界面系统图5.1选择登录身份为管理员,默认密码123,输入-1可返回图5.1界面。密码输入正确后可进入管理员登录系统。如图5.2所示。 选修课管理系统3. 按学分查看选修课图5.2选择查看选修课,可以查看当前所有的选修课课程的相关信息。可以选择不同的输出方式:按学分查询、按类型查询、显示全部。选择按学分查询,在选择0.5,可打印当前所有课程中学分为0.5的课程信息。如图5.3所示。图5.3 按学分查看选修课4. 查询全部选修课查看选修课功能中可以选择显示全部,即罗列出当前所有的选修课课程信息。如图5.4所示。图5.4 查询全部选修课5. 管理员添加选修课图5.2选择添加选修课,可以添加一门新的选修课,然后按要求输入课程信息。如图5.5所示。图5.5 管理员添加选修课6. 添加后的选修课信息添加选修课后选择返回上一层,再选择显示全部选修课可以看到已新增的选修课已添加成功。如图5.6所示。图5.6 添加后的选修课7. 管理员删除选修课图5.2选择删除选修课。输入要删除的选修课的编号,即可删除相应的选修课。如图5.7所示。图5.7 管理员删除选修课8. 删除后的选修课信息删除选修课后选择返回上一层,再选择显示全部选修课可以看到已删除的选修课已删除成功。如图5.8所示。图5.8 删除后的选修课信息9. 学生选课系统图5.1选择学生,然后输入学生的姓名及学号就能进入学生选课系统。如图5.9所示。 学生选课系统10. 学生选课以学生身份登录成功后,可以选择选课或是查询个人信息。选择选课可以选择按学分选课、按课程类型选课或显示全部课程再进行选课。选择按学分选课,再选艺术类,再输入课程编号即可选择相应课程。如图5.10所示。 学生选课11. 学生信息选择查看个人信息程序即打印出当前学生的相关信息。如图5.11 所示。 学生信息12. 退出图5.1选择退出即退出程序。如图5.12所示。 退出程序6 总结与体会6.1 总结本程序实现了学生选课及管理员对课程的操作功能,而学生的选课及管理员对课程的管理,都可以按学分或类型来进行操作。管理员登录的默认密码是123,管理员可以添加新的选修课课程,也可以删除原有的选修课。经过此次的课程设计,我们受益颇丰,尤其是对在编写过程中遇到的难题的处理方法,学会了很多程序设计的技巧。6.2 编写程序中遇到的问题及解决办法(1)在无法与后台交互的情况下如何实现用户登录?因为只需要管理员有对选修课操作的能力,因此不需储存管理员的信息,只需在其登录前询问密码即可。而学生的登录,在其登录时分配一个对象空间,储存在其登录时获取的学号及姓名即可,即每一个学生的登录相当于注册过程。(2)如何在不退出程序的情况下,能够让多位学生进行选课?定义学生类对象数组,每一位学生选完课后,再分配一个新的学生类对象空间。(3)如何实现对学生对象中课程对象成员的覆盖?一开始我们为了方便起见是考虑学生类课程对象定义为引用,这样只需引用已有的选修课课程即可,但这样的话,在对学生对象初始化时引用的初始化就成了问题,因此只能放弃。最终是选择了使用set和get方法对对象成员的成员一个个覆盖。参考文献1 黄维通.Visual C+面向对象与可视化程序设计(第2版).北京:清华大学出版社,2007.2 C语言描述(第三版),2011.3 谭浩强.C程序语言设计(第三版)M.北京:清华大学出版社,2007.4 杨永斌.数据结构理论与实践M.天津:科学技术出版社,2011.5 罗建军.C+程序射机枪教程(第2版).北京:高等教育出版社,2004.6 郑振杰.C+程序设计. 北京:人民邮电出版社,2005.7 刘觉夫,:邮电大学出版社,2011.8 :人民出版社,2009.9 :人民邮电出版社,2010.10 :机械工业出版社,2008.11 :人民出版社,2009.附录 源程序#include <iostream.h>#include <string.h>#define M 10class Course /选修课课程类private:char * id;char * name;char * nature;char * date;int shours;int ahours;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;shours = 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;nature = c;date = d;shours = e;ahours = f;score = g;zhours = e + f;char * getDate()return date;int getZhours()return zhours;int getShours()eturn shours;int getAhours()return ahours;double getScore()return score;char * getNature()return nature;char * getId()eturn id;char * getName()return name;void print()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;class Student /学生类private: /学生选的课程是对象的成员char * id;char * name;Course c1;Course c2;double zscore;public:Student()id = "unknown"name = "unknown"zscore = 0;void setId(char * a1)d = a1;void setName(char * a1)name = a1;char * getName()return name;void print()cout << "n学号: " << id << endl;cout << "姓名: " << name << endl;cout << "您已选的选修课:n1."c1.print();cout << "2."c2.print();cout << "选修课总学分: " << 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(),cc.getScore();void selectCourse(Student s110, Course c1M, int s_num1) /选课char id210, select1;int i, j, k;for(j=0; j<2; j+)cout << "n您想选您的第几门选修课(1 or 2):"cin >> k;cout << "请输入您想要选的选修课的编号:"cin >> idj;for(i=0; i<M && c1i.getScore() !=0; i+) /扫描所有选修课,如果当前选修课为空则跳出循环if(strcmp(idj, c1i.getId()=0)if(1 = k)s1s_num1.selectCourse_1(c1i);break;if(2 = k)s1s_num1.selectCourse_2(c1i);break;if(0 = j)cout << "n您是否想要继续选课?(y/n):"cin >> 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 << " 请选择:"cin >> select;num = 1;if(1 = select)for(i=0; i<M && c1i.getScore() !=0; i+)if(0.5 = c1i.getScore()cout << num << '.'c1i.print();cout << endl;num+;else if(2 = select)for(i=0; i<M && 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. 学术类" << endl;cout << " 请选择:"cin >> select;num = 1;if(1 = select)for(i=0; i<M && c1i.getScore() !=0; i+)if(strcmp(n1, c1i.getNature() = 0)cout << num << '.'c1i.print();cout << endl;num+;else if(2 = select)for(i=0; i<M && c1i.getScore() !=0; i+)if(strcmp(n2, c1i.getNature() = 0)cout << num << '.'c1i.print();cout << endl;num+;else cout << "对不起,您的输入有误,请重新输入!nn"void xu(Course c1M) /当前所有选修课进行排序(编号从小到大) int i,j,k=0,num=0; Course cc; for(j=0; j<M && c1j.getScore() !=0; j+) for(i=num; i<M && c1i.getScore() !=0; i+) if(strcmp( c1i.getId(), c1i+1.getId() ) > 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(),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, 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 << "n请选择:"cin >> select;switch(select)case 1: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)case 1:newNum = 0;for(i=0; i<M && c1i.getScore() !=0; i+) newNum+;cout << "n请按格式依次输入选修课的编号、名称、上课时间(x.xx-x.xx)、类型(艺术类或学术类)、授课学时、实验学时、学分:" << endl;cin >> id1 >> name1 >> da >> na >> sh >> ah >> sc;c1newNum.set(id1, name1, da, na, sh, ah, sc);xu(c1);cout << "添加成功!" << endl;break;case 2:flag4 = 1;j = 0;num = 0;while(flag4)cout << "n请输入您想要删除课程的编号:"cin >> idj;for(i=0; i<M && c1i.getScore() !=0; i+)if(strcmp(idj, c1i.getId()=0)for(num=i; num<M && c1i.getScore() !=0; num+)c1num.set(c1num+1.getId(),c1num+1.getName(),c1num+1.getNature(),c1num+1.getDate(),c1num+1.getShours(),c1num+1.getAhours(),c1num+1.getScore();c1num = Course();break;cout << "删除成功!n"cout << "n您是否想要继续删除?(y/n):"cin >> 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 << "请选择:"cin >> select;switch(select)case 1:selectScore(c1);break;case 2:selectNature(c1);break;case 3:for(i=0; i<M && c1i.getScore() !=0; i+)cout << i+1 << '.' ;c1i.print();cout << endl;break;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 << "n请输入您的学号:"cin >> a;s1s_num.setId(a);cout << "请输入您的姓名:"cin >> 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 << "请选择:"cin >> select;switch(select)case 1:flag2 = 1;cout << "n" << s1s_num.getName() << ",你好!欢迎登录!" << endl;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)case 1:selectScore(c1);selectCourse(s1, c1 ,s_num);break;case 2:selectNature(c1);selectCourse(s1, c1 ,s_num);break;case 3:for(i=0; i<M && c1i.getScore() !=0; i+)cout << i+1 << '.' ;c1i.print();cout << endl;selectCourse(s1, c1, s_num);break;case 4:flag2 = 0;break;default :cout << "对不起,您的输入有误,请重新输入!nn"break;case 2:s1s_num.print();break;case 3:flag1 = 0;s_num+;break;default :cout << "对不起,您的输入有误,请重新输入!nn"break;case 3:flag0 = 0;cout << " 谢谢使用!n

    注意事项

    本文(c++课程设计-学生选修课选课系统(19页).doc)为本站会员(1595****071)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开