摘要:
该课题是以学校学生选课管理业务为背景,设计、开发一套“学生选课系统”
软件。要求熟练掌握 C++语言的基本知识和技能,基本掌握面向对象程序设计的
基本思路和方法,能够利用所学的基本知识和技能,解决简单的面向对象程序设
计问题、要求利用面向对象的方法以及 C++的编程思想来完成系统的设计,在系
统的设计中,要求运用面向对象的机制(继承、派生及多态性)来实现系统功能。
关键字:类 继承 派生 多态性
目
录
一.序言···········································3
二.总体设计·······································3
1.总体框图·······································3
2.程序功能·······································3
3.模块关系·······································4
三.详细设计·······································4
1.运行环境·······································4
2.界面设计·······································4
3.课程信息设计···································5
4.学生信息设计···································6
5.选课设计·······································7
6.运行程序·······································8
四.测试与调试·····································34
五.设计总结·······································35
六.致谢···········································36
七.参考文献·······································37
一.序言
学生选课系统是假定有 n 门课程,每门课程有课程编号,课程名称,课程性质,
总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如
总学分不得少于 60)自由选课,通过该题目的设计,培养学生面向对象程序设
计的思想,要求学生达到熟练掌握 C++(或 Java)语言的基本知识和技能,基本
掌握面向对象程序设计的基本思路和方法,能够利用所学的基本知识和技能,解
决简单的面向对象程序设计问题。同时强调好的程序设计风格,提高解决实际问
题的能力
二.总体设计
1.总体框图
主模模块
查
询
模
块
增
加
模
块
删
除
模
块
修
改
模
块
选
课
模
块
显
示
选
课
情
况
模
块
显
示
课
程
信
息
模
块
2.程序功能
1)输入密码进入系统。
2)查看所有课程的信息
3)输入一门课程的课程编号,从当前课程中进行查找,如果找到则显示该课
程的相关信息,如果没有找到则给出提示信息
4)添加一门课程的基本信息,通过输入课程编号,首先查找是否存在该课程
编号的课程,如果存在则提示重新输入,否则将该课程按照顺序插入到相应位置
5)删除一门课程的基本信息,通过输入课程编号,首先查找是否存在该课程编
号的课程,如果存在则将该课程删除,否则给出提示信息,提示该课程不存在
6)对课程信息进行修改。
7)选修一门课程,需要给出学号和课程编号,如果课程编号不存在则重新输
入,直到输入正确为止,并将学号和相应的课程编号存入
8)查看所选课程
3.模块关系
根据提示输入学号和密码进入系统。通过主函数模块进入各个其它函数的模块,
然后达到对课程信息的查看、增加、删除、修改和选课的功能,在这些模块中又
调用其它小模块(如:排序模块)。本程序主要有:主函数模块、显示课程信息
模块、查询模块、
增加模块、删除模块、修改模块、选课模块、显示选课情况模块等八个模块组成。
三.详细设计
1.运行环境:V-C++
2.界面设计
菜单选择:
界面图示
选 1:进入课程信息界面
选 2:进入学生信息界面
选 3:进入选课界面
选 4:退出,并保存相关记录到文件里
3.课程信息
菜单选择:
课程信息界面图示
选 1:进入课程信息浏览,先看是否有记录,无则退出到课程信息界面,有则显示
出来.
选 2:进入课程信息录入,录入课程编号,先看是否重复,若有重复,则提示错误,
进行下次输入,无则输出一条记录,并添加记录到表.
选 3:进入课程信息修改,录入课程编号,看是否在表中有这条记录,无则提示错
误,有则提示修改记录的相关信息.
选 4:进入课程信息删除,录入要删除的课程编号,看是否在表中有这条记录,无
则提示错误,有则提示显示记录的相关信息,再提示是否确实要删除记录,要则删
除.
选 5:进入课程信息查询,进行选择是按学号查询或学分查询,不管哪种方式,都
查询一下表中有相关的记录,没有则重新选择,有刚显示相关记录.
选 6: 退出课程信息界面.
4.学生信息
菜单选择:
学生信息界面图示
选 1:进入学生信息浏览,先看是否有记录,无则退出到学生信息界面,有则显示
出来.
选 2:进入学生信息录入,录入学生编号,先看是否重复,若有重复,则提示错误,
进行下次输入,无则输出一条记录,并添加记录到表.
选 3:进入学生信息修改,录入学生编号,看是否在表中有这条记录,无则提示错
误,有则提示修改记录的相关信息.
选 4:进入学生信息删除,录入要删除的学生编号,看是否在表中有这条记录,无
则提示错误,有则 提示显示记录的相关信息,再提示是否确实要删除记录,要则
删除.
选 5:进入学生信息查询,进行选择是按学号查询或学分查询,不管哪种方式,都
查询一下表中有相关的记录,没有则重新选择,有刚显示相关记录.
选 6: 退出学生信息界面.
5.选课
菜单选择:
选课界面图示
选 1:进入选课信息浏览,先看是否有记录,无则退出到选课信息界面,有则显示
出来.
选 2:进入学生选课,录入学生编号,先看是否重复,若有重复,则提示错误,进行
下次输入,无则进行选课提示,输入选课的编号,再看是否输入的编号是否存在,
无则重新输入,有则看是否选了这门课,没有就选上,进行重复选择.
选 3: 进入学生退选,录入学生编号,先看是否重复,若有重复,则提示错误,进行
下次输入,无则进行选课提示,输入退选课程的编号,再看是否输入的编号是否存
在,无则重新输入,有则看是否选了这门课,没有就提示错误信息,若有就进行退
选.再进行重复选择。
选 6: 退出选课界面
6.运行程序
//头文件
//头文件
#include
#include
#include
#include
#include
#include
#include
//定义课程
struct course
{
//某个学生所学的课程中的某一个
char cname[20];
float grade;
course *Next;
//课程名称
//课程成绩
//指向下一个课程的指针
};
//学生类
class student
{
public:
student()
{
root = NULL;
const maxcourse = 5;
factcourse = 0;
}
void readname(char N[] );
void getname(char N[]);
void wrecourse(char N[],float score); //要据课程名写入学生课程的成绩
float average();
void addcourse(char N[],float g);
int findcourse(char N[]);
//读入学生的姓名
//得到学生的姓名
//学生课程的平均成绩
//给学生增加一门课
//查找是否已有此课程,如果有返回 1,如果没有返
回 0
int retfactcourse()
{
return factcourse;
//得到所学的课程数目
}
course *retroot()
{
return root;
}
int retmaxcourse()
{
return 5;
}
void clrroot()
{
root = NULL;
factcourse = 0;
}
private:
char sname[20];
int maxcourse;
int factcourse;
course *root;
//利用键表将所有的课程保存起来
//得到最多可学的课程数目
//清零
//学生的姓名
//学生最多可以学五门课程
//学生实际所学的课程数目
//课程的根结点指针