C++课程设计——选课系统报告.doc
20102011(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选课流程图图1.3选课流程图 二、本系统的实现过程主函数里调用map类,通过学号和课程号自动排序学生信息和课程信息,读写文件student、course初始化学生信息以及课程信息。再调用while语句循环学生管理系统、学生选课端、系统管理端,以满足用户输入需求。相关代码:void main()int a,a1,a2;int sn; string sm;XS _xs ;map<int,Student> students;map<int,Course> 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<int,Student>:iterator itor=students.find(sn);if(itor=students.end()cout<<"该学生不存在!"<<endl;elseXS _xs;Student _takecourse(itor->second);while(a1=studentmenu()switch(a1)case 1:_xs.SearchAllCourse(courses);break;/查看所有课程case 2:_xs.Choosecourse(_takecourse,courses,students);break;/选课case 3:_xs.Deletecourse(_takecourse,students);break;/退选case 4:_xs.SearchCourse(_takecourse,students);break;/查看已选课程elsecout<<"该学生不存在或者密码输入错误!"<<endl;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;/查询所有学生相关代码:int mainmenu()int n;system("cls");cout<<"tt=n"<<"tt| |n"<<"tt| 学生选课系统 |n"<<"tt| |n"<<"tt|=|n"<<"tt| |n"<<"tt| |n"<<"tt| 1.学生选课端 |n"<<"tt| 2.系统管理端 |n"<<"tt| 0.退出 |n"<<"tt| |n"<<"tt| |n"<<"tt|=|n" <<endl;cout<<"请选择登陆端:"<<endl;cin>>n;while(n<0&&n>2)cout<<"输入有误,请重新输入:"cin>>n;return n;学生选课端:通过已存的password.txt文件里的学号及相关密码,可以进入学生登录端界面相关代码:int studentmenu()int n;cout<<"tt=n"<<"tt| |n"<<"tt| 学生登陆端 |n"<<"tt| |n"<<"tt|=|n"<<"tt| |n"<<"tt| |n"<<"tt| 1.查看课程 |n"<<"tt| 2.选择课程 |n"<<"tt| 3.退选课程 |n"<<"tt| 4.查看已选课程 |n"<<"tt| 0.返回主菜单 |n"<<"tt| |n"<<"tt| |n"<<"tt| |n"<<"tt|=|n" <<endl;cout<<"请选择操作方式:"<<endl;cin>>n;while(n<0&&n>4)cout<<"输入有误,请重新输入:"cin>>n;return n;当“请选择操作方式”语句下输入1时,程序执行以下语句:void XS:SearchAllCourse(std:map<int,Course> &courses) /查询所有课程map<int,Course>:iterator itor=courses.begin();cout<<setiosflags(ios_base:left)<<setw(10)<<"课程号"<<setiosflags(ios_base:left)<<setw(15)<<"课程名称"<<setiosflags(ios_base:left)<<setw(10)<<"学分"<<setiosflags(ios_base:left)<<setw(15)<<"上课老师"<<setiosflags(ios_base:left)<<setw(15)<<"所属分类"<<endl;while(itor!=courses.end()cout<<setiosflags(ios_base:left)<<setw(10)<<itor->second.GetCnum()<<setiosflags(ios_base:left)<<setw(15)<<itor->second.GetCname()<<setiosflags(ios_base:left)<<setw(10)<<itor->second.GetCredit()<<setiosflags(ios_base:left)<<setw(15)<<itor->second.GetTeacher()<<setiosflags(ios_base:left)<<setw(15)<<itor->second.GetSort()<<endl;itor+;当“请选择操作方式”语句下输入2时,程序执行以下语句:void XS:Choosecourse(Student &st,map<int,Course> &courses,map<int,Student> &students)int n;cout<<"请输入课程号:"cin>>n;map<int,Course>:iterator itorc=courses.find(n);if(itorc=courses.end()cout<<"没有此课程!"<<endl;elsestrcpy(st.GetCourse(),(itorc->second).GetCname();map<int,Student>:iterator itor=students.find(st.GetNo();itor->second.ChangeCourse(itorc->second.GetCname();当“请选择操作方式”语句下输入3时,程序执行以下语句:void XS:Deletecourse(Student &st,map<int,Student> &students)map<int,Student>:iterator itor=students.find(st.GetNo();char* p="未选课"itor->second.ChangeCourse(p);系统登录端:相关代码:int adminmenu()int n;cout<<"tt=n"<<"tt| |n"<<"tt| 系统登陆端 |n"<<"tt| |n"<<"tt|=|n"<<"tt| |n"<<"tt| |n"<<"tt| 1.增加学生 |n"<<"tt| 2.增加课程 |n"<<"tt| 3.删除学生 |n"<<"tt| 4.删除课程 |n"<<"tt| 5.修改学生信息 |n"<<"tt| 6.修改课程信息 |n"<<"tt| 7.查看选课情况 |n"<<"tt| 8.查看所有学生 |n"<<"tt| 0.返回主菜单 |n"<<"tt| |n"<<"tt| |n"<<"tt| |n"<<"tt|=|n" <<endl;cout<<"请选择操作方式:"<<endl;cin>>n;while(n<0&&n>8)cout<<"输入有误,请重新输入:"cin>>n;return n;当“请选择操作方式”语句下输入1时,程序执行以下语句:void GL:AddStudent(map<int,Student> &students) /增加学生char name20;char sex;int age;char phone20;int no;char school20;char course20;cout<<"请输入学号:"cin>>no;map<int,Student>:iterator itor=students.find(no);if(itor=students.end()cout<<"请输入姓名:"cin>>name;cout<<endl<<"请输入性别:"cin>>sex;cout<<endl<<"请输入年龄:"cin>>age;cout<<endl<<"请输入电话:"cin>>phone;cout<<endl<<"请输入学院:"cin>>school;cout<<endl<<"请输入课程:"cin>>course;Student stu(name,sex,age,phone,no,school,course);students.insert(make_pair(no,stu);elsecout<<"该学生已存在!"<<endl;增加课程同理;当“请选择操作方式”语句下输入3时,程序执行以下语句:调用了erase()函数删除学号所对应的相关信息void GL:DeleteStudent(std:map<int,Student> &students)int no;cout<<"请输入学号:"cin>>no;map<int,Student>:iterator itor=students.find(no);if(itor=students.end()cout<<"该学生不存在!"<<endl;elsestudents.erase(itor);删除课程同理;当“请选择操作方式”语句下输入5时,程序执行以下语句:Switch()语句自动跳转执行指令,提示用户输入相关信息。void GL:ModifyStudent(std:map<int,Student> &students)int n,m;cout<<"请输入学号:"cin>>n;map<int,Student>:iterator itor=students.find(n);if(itor=students.end()cout<<"该学生不存在!"<<endl;elsecout<<"*n"<<"* *n"<<"* 1.修改姓名 *n"<<"* 2.修改性别 *n"<<"* 3.修改年龄 *n"<<"* 4.修改电话 *n"<<"* 5.修改学院 *n"<<"* 0.返回管理端 *n"<<"*n"<<endl;cout<<"请选择要修改的项目:"cin>>m;switch(m)case 1:char name20;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 phone20;cout<<"请输入新电话号码:"cin>>phone;itor->second.ChangeName(phone);break;case 5:char school20;cout<<"请输入新电话号码:"cin>>school;itor->second.ChangeSchool(school);break;case 0:break;default:cout<<""<<endl;修改课程同理;查看学生所有学生,执行以下语句setiosflags(ios_base:left)语句将显示内容规范化,统一左对齐。 GL:SearchStudent(std:map<int,Student> &students)map<int,Student>:iterator itor=students.begin();cout<<setiosflags(ios_base:left)<<setw(6)<<"学号"<<setiosflags(ios_base:left)<<setw(10)<<"姓名"<<setiosflags(ios_base:left)<<setw(6)<<"性别"<<setiosflags(ios_base:left)<<setw(6)<<"年龄"<<setiosflags(ios_base:left)<<setw(15)<<"电话"<<setiosflags(ios_base:left)<<setw(15)<<"学院"<<setiosflags(ios_base:left)<<setw(15)<<"所选课程"<<endl;while(itor!=students.end()cout<<setiosflags(ios_base:left)<<setw(6)<<itor->second.GetNo()<<setiosflags(ios_base:left)<<setw(10)<<itor->second.GetName()<<setiosflags(ios_base:left)<<setw(6)<<itor->second.GetSex()<<setiosflags(ios_base:left)<<setw(6)<<itor->second.GetAge()<<setiosflags(ios_base:left)<<setw(15)<<itor->second.GetPhone()<<setiosflags(ios_base:left)<<setw(15)<<itor->second.GetSchool()<<setiosflags(ios_base:left)<<setw(15)<<itor->second.GetCourse()<<endl;itor+;三、本系统的运行结果程序运行后进入主界面。图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的用法。通过一个完整的系统的编写,提高了我的逻辑思维能力。最后,我希望我可以通过这个课程设计,提醒我在以后的学习中,要扎实基础,不要一知半解。更要加强实践,不要只是上课听老师讲,课下应该有大量的代码的功底。