您好,欢迎来到筏尚旅游网。
搜索
您的当前位置:首页C++课程设计——选课系统报告

C++课程设计——选课系统报告

来源:筏尚旅游网
2010~2011(2) 《面向对象程序设计》

课程设计报告

姓名: 学号: 班级: 日期: 指导教师:

课程设计的题目: 学生选课管理系统 等级: 等级三 同组成员: 组长:

一、本系统的设计

1.1系统功能模块图

选课系统学生选课端系统管理端查看课程选择课程推选课程查看已选课程增加学生增加课程删除学生删除课程修改学生信息修改课程信息查看课程信息查看学生选课 图1.1系统功能模块图

1.2 系统UML图

图1.2系统UML图

1.3功能模块描述和主要类描述

本程序综合运用面向对象的设计方法,主要运用了STL中的map来储存从文件读出的数据。 模块一:学生端模块功能 (1)查看课程:

此模块通过SearchAllCourse()函数,在界面上显示所有可选

课程。

(2)选择课程:

此模块通过choosecourse()函数,通过输入你要选择的课程号进行选课。

(3)退选课程:

此模块通过Deletecourse()函数,用map中的erase()函数,删除已选课程。

(4)查看已选课程:

此模块通过Searchcourse()函数,将显示该学生所选课程的情况。

模块二:管理端各功能: (1) 增加学生:

此模块调用了头文件为student.h里的成员和GL类里的AddStudent()成员函数,要求用户输入学生的相关信息。 如果学号相同,系统将会提示该学生已存在,然后自动返回管理端。 (2) 增加课程:

此模块调用GL类里的函数AddCourse(),要求用户输入课程相关信息。如果课程号相同,系统会提示课程已存在,并自动返回管理端。 (3) 删除学生

通过输入学号,程序调用函数DeleteStudent(),删除该学生相关信息,然后自动返回管理端。如果要删除的学号不存在,则系统提示该学生不存在,然后自动返回管理端。 (4) 删除课程

(5) 通过输入课程号,程序调用函数DeleteCourse(),删除该

课程相关信息,然后自动返回管理端。如果要删除的课程号不存在,则系统提示该课程不存在,然后自动返回管理端。

(6) 修改课程信息

通过输入课程号,程序会进入修改课程信息界面,通过switch()函数,用户可选择需要修改的项目。 (7) 修改学生信息

通过输入学号号,程序会进入修改学生信息界面,通过switch()函数,用户可选择需要修改的项目。 (8) 查看选课情况

该模块显示可选的课程信息。 (9) 查看所有学生

该模块显示已存在的学生信息。

本学生选课系统采用了面向对象的程序设计方法。所有的方法均以类为基础。所涉及的类包括: (1)基础类

class People 基础人员信息类:该类是一个基类,设置了包括姓名、性别、年龄、电话的基本信息及相关的构造函数,接口函数,修改私有成员函数。可以给学生类继承。

class Student 学生信息类:该类继承了People类,增加了学号,学院,所选课程的信息。

class Course 课程信息类:该类设置了一些基本的课程信息,包括课程号、课程名称、学分、授课老师、分类。 (2)功能类

class XS 学生管理类:该类定义了前文模块一学生登录端里面的四个功能的实现。此类的作用在于将学生登陆端的功能集成并定义使用的主要方法。 class GL 系统管理类:该类定义了前文模块二系统登录端里面的八个功能的实现。此类的作用在于将系统登陆端的功能集成并定义使用的主要方法。 1.4选课流程图

开始进入程序登陆主界面选择登陆端选择0选择0学生端登陆系统管理端登陆学生已存在课程已存在选择项目课程不存在选择1选择2选择3查看课程选择4学生不存在选择1选择2课程不存在选择3增加学生退选查看已选课程增加课程删除学生选择6课程不存在选择7选择项目选择8选择4选课选择5学生不存在修改课程信息删除课程修改姓名选择1选择2选择修改项目修改学生信息查看所有课程查看学生选课情况选择0修改性别选择3选择修改项目修改年龄选择4选择1选择2修改电话选择5修改课程分类修改学院选择6修改课程名称修改课程学分修改授课老师选择3选择4修改所选课程结束程序

图1.3选课流程图

二、本系统的实现过程

主函数里调用map类,通过学号和课程号自动排序学生信息和课程信息,读写文件student、course初始化学生信息以及课程信息。 再调用while语句循环学生管理系统、学生选课端、系统管理端,以满足用户输入需求。 相关代码:

void main() {

int a,a1,a2; int sn; string sm; XS _xs ;

map students; map courses; ReadFile_student(students); WriteFile_student(students); ReadFile_course(courses); WriteFile_course(courses); while(a=mainmenu()) {

if(a==1) {

cout<<\"请输入学号:\"; cin>>sn;

cout<<\"请输入密码:\"; cin>>sm;

if(password(sn,sm)) {

map::iterator itor=students.find(sn); if(itor==students.end()) {

XS _xs;

Student _takecourse(itor->second); while(a1=studentmenu()) {

switch(a1) {

case 1:_xs.SearchAllCourse(courses);break;//查看case case

cout<<\"该学生不存在!\"<所有课程

2:_xs.Choosecourse(_takecourse,courses,students);break;//选课

3:_xs.Deletecourse(_takecourse,students);break;//退选 }

}

} if(a==2) { }

while(a2=adminmenu()) { }

GL _gl; switch(a2) {

case 1:_gl.AddStudent(students);break;//增加学生 case 2:_gl.AddCourse(courses);break;//增加课程 case 3:_gl.DeleteStudent(students);break;//删除学生 case 4:_gl.DeleteCourse(courses);break;//删除课程 case 5:_gl.ModifyStudent(students);break;//修改学生信息 case 6:_gl.ModifyCourse(courses);break;//修改课程信息 case 7:_gl.SearchCourse(courses);break;//查询所有课程 case 8:_gl.SearchStudent(students);break;//查询所有学生 }

} else

cout<<\"该学生不存在或者密码输入错误!\"<}

case }

4:_xs.SearchCourse(_takecourse,students);break;//查看已选课程

相关代码:

int mainmenu() {

int n;

system(\"cls\");

cout<<\"\\========================================\\n\"

<<\"\\| |\\n\" <<\"\\| 学生选课系统 |\\n\"

}

<<\"\\| |\\n\" <<\"\\|======================================|\\n\" <<\"\\| |\\n\" <<\"\\| |\\n\" <<\"\\| 1.学生选课端 |\\n\" <<\"\\| 2.系统管理端 |\\n\" <<\"\\| 0.退出 |\\n\" <<\"\\| |\\n\" <<\"\\| |\\n\"

<<\"\\|======================================|\\n\" <cout<<\"请选择登陆端:\"<>n;

while(n<0&&n>2) { } return n;

cout<<\"输入有误,请重新输入:\"; cin>>n;

学生选课端:

通过已存的password.txt文件里的学号及相关密码,可以进入学生登录端界面 相关代码:

int studentmenu() {

int n;

cout<<\"\\========================================\\n\"

<<\"\\| |\\n\" <<\"\\| 学生登陆端 |\\n\" <<\"\\| |\\n\" <<\"\\|======================================|\\n\" <<\"\\| |\\n\" <<\"\\| |\\n\" <<\"\\| 1.查看课程 |\\n\" <<\"\\| 2.选择课程 |\\n\" <<\"\\| 3.退选课程 |\\n\" <<\"\\| 4.查看已选课程 |\\n\" <<\"\\| 0.返回主菜单 |\\n\"

<<\"\\| |\\n\" <<\"\\| |\\n\" <<\"\\| |\\n\"

<<\"\\|======================================|\\n\" <cout<<\"请选择操作方式:\"<>n;

while(n<0&&n>4) { }

return n;}

cout<<\"输入有误,请重新输入:\"; cin>>n;

当“请选择操作方式”语句下输入1时,程序执行以下语句:

void XS::SearchAllCourse(std::map &courses) //查询所有课程 {

map::iterator itor=courses.begin(); cout<cout<<second.GetCnum() <second.GetCname() <second.GetCredit() <second.GetTeacher() <<second.GetSort()<<<while(itor!=courses.end())

}

}

itor++;

当“请选择操作方式”语句下输入2时,程序执行以下语句:

void XS::Choosecourse(Student &st,map &courses,map &students) { }

int n;

cout<<\"请输入课程号:\"; cin>>n;

map::iterator itorc=courses.find(n); if(itorc==courses.end()) { }

strcpy(st.GetCourse(),(itorc->second).GetCname());

map::iterator itor=students.find(st.GetNo()); itor->second.ChangeCourse(itorc->second.GetCname()); cout<<\"没有此课程!\"<当“请选择操作方式”语句下输入3时,程序执行以下语句:

void XS::Deletecourse(Student &st,map &students) { }

map::iterator itor=students.find(st.GetNo()); char* p=\"未选课\";

itor->second.ChangeCourse(p);

系统登录端: 相关代码:

int adminmenu() {

int n;

cout<<\"\\========================================\\n\" <<\"\\| |\\n\" <<\"\\| 系统登陆端 |\\n\" <<\"\\| |\\n\" <<\"\\|======================================|\\n\" <<\"\\| |\\n\"

<<\"\\| |\\n\" <<\"\\| 1.增加学生 |\\n\" <<\"\\| 2.增加课程 |\\n\" <<\"\\| 3.删除学生 |\\n\" <<\"\\| 4.删除课程 |\\n\" <<\"\\| 5.修改学生信息 |\\n\" <<\"\\| 6.修改课程信息 |\\n\" <<\"\\| 7.查看选课情况 |\\n\" <<\"\\| 8.查看所有学生 |\\n\" <<\"\\| 0.返回主菜单 |\\n\" <<\"\\| |\\n\" <<\"\\| |\\n\" <<\"\\| |\\n\" <<\"\\|======================================|\\n\" <cout<<\"请选择操作方式:\"<>n;

while(n<0&&n>8) {

cout<<\"输入有误,请重新输入:\"; cin>>n; }

return n; }

当“请选择操作方式”语句下输入1时,程序执行以下语句:

void GL::AddStudent(map &students) //增加学生 {

char name[20]; char sex; int age;

char phone[20]; int no;

char school[20]; char course[20];

cout<<\"请输入学号:\"; cin>>no;

map::iterator itor=students.find(no); if(itor==students.end())

{

cout<<\"请输入姓名:\"; cin>>name;

cout<>sex;

cout<>age;

cout<>phone;

cout<>school;

cout<>course;

Student stu(name,sex,age,phone,no,school,course); students.insert(make_pair(no,stu)); } else

cout<<\"该学生已存在!\"<增加课程同理;

当“请选择操作方式”语句下输入3时,程序执行以下语句: 调用了erase()函数删除学号所对应的相关信息

void GL::DeleteStudent(std::map &students) {

int no;

cout<<\"请输入学号:\"; cin>>no;

map::iterator itor=students.find(no); if(itor==students.end())

cout<<\"该学生不存在!\"<students.erase(itor); }

删除课程同理;

当“请选择操作方式”语句下输入5时,程序执行以下语句: Switch()语句自动跳转执行指令,提示用户输入相关信息。

void GL::ModifyStudent(std::map &students) {

int n,m;

cout<<\"请输入学号:\"; cin>>n;

map::iterator itor=students.find(n); if(itor==students.end())

cout<<\"该学生不存在!\"<cout<<\"***********************\\n\" <<\"* *\\n\" <<\"* 1.修改姓名 *\\n\" <<\"* 2.修改性别 *\\n\" <<\"* 3.修改年龄 *\\n\" <<\"* 4.修改电话 *\\n\" <<\"* 5.修改学院 *\\n\" <<\"* 0.返回管理端 *\\n\"

<<\"***********************\\n\"<>m; switch(m) {

case 1:

char name[20];

cout<<\"请输入新姓名:\"; cin>>name;

itor->second.ChangeName(name); break; case 2:

char sex;

cout<<\"请输入性别:\"; cin>>sex;

itor->second.ChangeSex(sex); break; case 3:

int age;

cout<<\"请输入新年龄\"; cin>>age;

itor->second.ChangeAge(age);

}

}

break; case 4:

char phone[20];

cout<<\"请输入新电话号码:\"; cin>>phone;

itor->second.ChangeName(phone); break; case 5:

char school[20];

cout<<\"请输入新电话号码:\"; cin>>school;

itor->second.ChangeSchool(school); break; case 0:break; default:

cout<<\"\"<修改课程同理;

查看学生所有学生,执行以下语句

setiosflags(ios_base::left)语句将显示内容规范化,统一左对齐。

GL::SearchStudent(std::map &students) {

map::iterator itor=students.begin(); cout<<<<<<<}

<cout<second.GetNo() <<second.GetName() <second.GetSex() <second.GetAge() <<second.GetPhone() <<second.GetSchool() <<second.GetCourse()<三、本系统的运行结果

程序运行后进入主界面。

图3.1 主界面

在主界面里选择你要进入登陆端,学生端进入输入学号,密码。如果输入学号错误即不存在该学生或者密码错误,会提示错误信息,并重新回到主界面。

图3.2 登录错误提示

登录后,显示学生端界面。

图3.3学生端界面

选择1,查看所有课程信息。查看后,自动重回学生端界面。

图3.4查看课程信息

选择2,进行选课,输入你想要选择的课程的课程号。如果所选课程不存在,会提示错误信息。

图3.5选的课不存在

选课后,可以选择4,查看已选的课程,屏幕上会打印出你选择的课程,如果没有选课,会显示未选课。

图3.6 查看已选课程

图3.7未选课提示

选择3,退选课程。 选择0,返回主界面。

主界面选择2,进入系统管理端,显示系统端界面。

图3.8系统登录端界面

选择1,增加学生,输入所要增加的学生的信息。如果所输入的学号已存在,则会提示错误信息。

图3.9增加学生错误

图3.10增加学生

选择2,增加课程,输入所要增加的课程信息。如果增加的课程已存在,则会提示错误信息。

图3.11增加课程失败

图3.12增加课程

选择3,删除学生,输入需要删除的学生学号。如果该学号不存在,则会提示错误信息。

图3.13删除学生失败

选择4,删除课程,输入你想要删除的课程的课程号。如果该课程

不存在,则提示错误信息。

图3.14删除课程失败

选择5,修改学生信息。输入要修改的学生的学号。如果该学生不存在,提示错误信息。进入后,显示修改学生界面,选择要修改的项目。

图3.15修改的学生不存在

图3.16修改学生信息

选择6,修改课程信息。输入要修改的课程课程号。如果该课程不存在,提示错误信息。进入后,显示修改课程界面,选择要修改的项目。

图3.17修改课程失败

图3.18修改课程信息

选择7,查看所有课程信息。

图3.19查看课程信息

选择8,查看所有学生的选课情况。

图3.20查看学生的选课情况

四、总结和心得

这次课程设计的题目初看不是很难,可是在慢慢的编写中,遇到了很多困难,例如:读写文件。通过查阅网上资料、课本,以及询问同学,找错、调试了整整一天才把问题解决。这段时间,不仅培养了我的耐心,更让我对面向对象这个技术有了更深一步的了解。

同时,通过这次课程设计,也解决了课堂里一些模糊不清的概念,例如清晰了sizeof,strlen的用法。通过一个完整的系统的编写,提高了我的逻辑思维能力。

最后,我希望我可以通过这个课程设计,提醒我在以后的学习中,要扎实基础,不要一知半解。更要加强实践,不要只是上课听老师讲,课下应该有大量的代码的功底。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- efsc.cn 版权所有 赣ICP备2024042792号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务