北 华 航 天 工 业 学 院
《基于C++的面向对象程序设计实例》
课程设计报告
报告题目: 课程设计选题管理系统设计 作者所在系部: 计算机科学与工程系 作者所在专业: 计算机应用技术 作者所在班级: 作 者 姓 名 : 指导教师姓名: 斯庆巴拉 完 成 时 间 :
北华航天工业学院教务处制
课程设计任务书
摘 要
在当前的各大高校课程设计选题管理系统中,为了方便管理、查询、修改与统计相关信息,一般都会将学生、课程设计题目等信息进行编号存储,所以就必须拥有一套完善的并且适合自身特点的信息化管理系统,以实现对冗杂的课程设计题目信息与学生信息的管理目的,还可以提高效率,方便同学们选题。
本文利用Microsoft 的Visual C++ 6.0(类和函数,数组,对象等) 编写程序,实现了用户对课程设计选题的管理操作。
本系统主要有八个功能模块:包括添加、查询、显示、修改、删除、统计、保存、读取等功能。已经过全面的系统测试,能够很好的运行,达到了预期设计预想。
关键词:系统设计 类 函数 数组 文件操作
目录
摘 要 . ................................................................................................................... 1 第一章 绪论 . ....................................................................................................... 1
1.1 课程设计的目的 . .................................................................................. 1 1.2 课程设计的背景和意义 . ...................................................................... 1
1.2.1 课程设计的背景 . ..................................................................... 1 1.2.2 课程设计的意义 . ..................................................................... 1 1.3 课程设计环境 . ...................................................................................... 1 第二章 需求分析 . ............................................................................................... 2
2.1 问题描述 . .............................................................................................. 2 2.2 功能要求 . .............................................................................................. 2 2.3 问题的解决方案 . .................................................................................. 2 第三章 系统设计 . ............................................................................................... 3
3.1 数据设计 . .............................................................................................. 3
3.1.1 类设计 . ..................................................................................... 3 3.1.2 函数设计 . ................................................................................. 3 3.2 结构设计 . .............................................................................................. 3
3.2.1 系统流程图 . ............................................................................. 3 3.2.2 界面设计 . ................................................................................. 4
第四章 系统实现 . ............................................................................................... 5
4.1 类实现 . .................................................................................................. 5 4.2 函数实现 . .............................................................................................. 5 4.3 主函数实现 . ........................................................................................ 14 第五章 系统测试 . ............................................................................................. 16
5.1 模块测试 . ............................................................................................ 16 5.2 课程设计过程中遇到的问题 . ............................................................ 22 总 结 . ................................................................................................................. 22 致 谢 . ................................................................................................................. 22 参考文献 . ............................................................................................................. 23 附 录 . ................................................................................................................. 24
第一章 绪论
1.1 课程设计的目的
(1)要求学生能够熟练掌握C++语言的基本知识和技能。 (2)基本掌握面向对象程序设计的基本思路和方法。 (3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。
1.2 课程设计的背景和意义
1.2.1 课程设计的背景
1. 理论研究基础
(1)运用面向对象(类和对象)的机制来实现系统功能。
(2)建立清晰的类与函数之间的关系,学会对函数调用的熟练使用。 2. 技术层面的支持
Microsoft Visual C++6.0 Microsoft Visual studio2010
1.2.2 课程设计的意义
通过此次课程设计,清晰的掌握C++语言的基本知识并能熟练的应用进行编程。
1.3 课程设计环境
软件:WindowsXP 、windows7系统,
Microsoft Visual Studio 2010,
Microsoft Visual C++ 6.0编译器。
硬件:戴尔 双核处理器,2G 内存,512独立显卡,80G 硬盘。 宏基 双核处理器,2G 内存,1G 独立显卡,500G 硬盘。
第二章 需求分析
2.1 问题描述
课程设计题目包括:编号、名称、关键词、实现技术、人员数(由几个人来完成)等信息。
学生信息包括:学号、姓名、性别、年龄、班级、专业等信息。
2.2 功能要求
(1)添加功能:程序能够添加学生的记录和课程设计题目记录,提供选择界面供用户选择所要添加的类别。添加记录时,要求学号和编号要唯一。如果添加了重复记录,则提示数据添加重复并取消添加。
(2)查询功能:可根据学号、姓名、编号、名称等信息对已添加的学生和课程设计题目进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。
(3)显示功能:可显示当前系统中所有学生的信息和课程设计题目信息,每条记录占据一行。
(4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意学号的唯一性。
(5)删除功能:主要实现对已添加的学生和课程设计题目记录进行删除。如果当前系统中没有相应的记录,则提示“记录为空!”并返回操作。
(6)统计功能:能根据多种参数进行统计。能按课程设计题目名称统计出学生选择该题目的人员的信息。
(7)保存功能:可将当前系统中各类记录存入文件中,存入方式任意。 (8)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用
2.3 问题的解决方案
根据系统功能要求,可以将问题解决分为以下步骤:
(1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计; (2)分析系统中的各个实体及它们之间的关系; (3)根据问题描述,设计系统的类层次; (4)完成类层次中各个类的描述; (5)完成类中各个成员函数的定义; (6)完成系统的应用模块; (7)功能调试;
(8)完成系统总结报告。
第三章 系统设计
3.1 数据设计
3.1.1 类设计
定义一个学生类Student ,类中包括学号stuid ,姓名stuname ,性别sex ,年龄age ,班级clas ,专业specialty ,及所选课程的课程编号couid ,课程名称couname ,关键词keyword, 实现技术technology ;定义一个管理类Guanli ,其成员函数包括向文件输入函数void write(int n);从文件读取函数,int read();添加学生信息函数void add(),查询信息函数void search (),按学号查询函数void searchsid(),按姓名查询函数void searchsname(),按题目编号查询函数void searchcid(),按题目名称查询函数void searchcname();修改信息函数void alter() ;删除信息函数void del();统计信息函数void total();显示函数void display()以及一个数据成员Student stu[50]。
3.1.2 函数设计
void write(int n),向文件中写入数据,打开文本文档,并将数据输入到文本文档中;int read(),向文件中写入数据从文件中读数据,打开文本文档,并将文本文档中的数据输出;void add(S),添加学生信息;void search()查询信息(可根据学生的学号、姓名、所选课程编号、课程名称进行信息查询);void alter(),修改学生信息;void del()删除学生信息,根据输入的学生学号通过调用函数实现;void total(),统计学生信息(根据学生所选课程名称进行统计);void display(),显示函数用来显示所有学生信息;int main()主函数,显示主菜单,调用各个函数实现所有功能。
3.2 结构设计
3.2.1 系统流程图
课程设计学生选课系统设计结构图:进入功能界面后,可以进行多项功能选择,如添加、查询、显示、修改、删除、统计,将数据写入文件以及从文件读取数据等;而查询功能又可以分为按学号、姓名、题目编号、题目名称等方式进行查询。如图3-1示。
图3-1课程设计学生选课系统设计结构图
3.2.2 界面设计
主界面是“欢迎使用课程设计选课系统”,下面是所要使用的功能:1. 添加新的纪录 2. 查询记录信息 3. 修改学生信息 4. 删除学生信息 5. 统计所有记录 6. 显示所有记录 0. 退出系统
其中,查询记录又可以弹出一个界面分别有以下几个功能: (1).根据学号查询 (2).根据姓名查询 (3).根据编号查询 (4).根据题目名称查询
每实现一个功能,重新弹出主界面,进行下一个的功能选择。
第四章 系统实现
4.1 类实现
class Student {
public:
int stuid; //学号
char stuname[10]; char sex[2]; int age; char clas[10]; char specialty[10]; int couid; char couname[10]; char keyword[20]; char technology[30]; }stu[50]; class Guanli {
private: Student stu[50]; public: void add(); void search(); void searchsid(); void searchsname(); void searchcid(); void searchcname(); void alter(); void del(); void total(); void display(); void write(int n); int read(); };
4.2 函数实现
void Guanli::write(int n) {
fstream myfile;
//姓名 //性别 //年龄 //班级 //专业
//题目编号 //题目名称 //关键词 //实现技术 //定义对象 //添加学生信息 //查询信息 //按学号查询信息 //按名字查询信息 //按题目编号查询信息 //按题目名称查询信息 //修改信息 //删除信息 //统计信息 //显示信息 //向文件中写入数据 //从文件中读数据
myfile.open("student.txt",ios::out|ios::binary); if(!myfile) { cout
int count=n;
myfile
}
myfile.close(); }
int Guanli::read() {
fstream myfile;
myfile.open("student.txt",ios::in|ios::binary); if(!myfile) { cout
int count;
myfile.seekg(0); myfile>>count;
for(int i=0;i>stu[i].stuid>>stu[i].stuname>>stu[i].sex>>stu[i].age>>stu[i].clas>>stu[i].specialty>>stu[i].couid>>stu[i].couname>>stu[i].keyword>>stu[i].technology;
cout
myfile.close(); return count; }
void Guanli::add() {
int n=read(); int i=0; char sign;
cout
while(sign!='N') { loop:
cout>stu[i].stuid; cout
cout
cin>>stu[i].stuname; cout>stu[i].sex; cout>stu[i].age; cout>stu[i].clas; cout>stu[i].specialty; cout
cout>stu[i].couid; cout
cout>stu[i].couname; cout>stu[i].keyword; cout
cout>stu[i].technology; cout
cout
cin>>sign; //输入判断 i++; }
write(i); }
void Guanli::search() {
int n=read();
cout
cout>c; switch(c) {
case 1:
g.searchsid(); break; case 2:
g.searchsname(); break; case 3:
g.searchcid(); break; case 4:
g.searchcname(); break; default: cout
g.write(n); }
void Guanli::searchsid() {
int n=read(); int s; int i=0;
cout
cout>s;
while((stu[i].stuid-s)!=0&&i
cout
cout
void Guanli::searchsname() {
int n=read(); char a[10];
cout>a;
for(int i=0;i
if(strcmp(stu[i].stuname,a)==0) { cout
cout
cout
void Guanli::searchcid() {
int n=read(); int b; int i=0;
cout>b;
while((stu[i].couid-b)!=0&&i
cout
cout
cout
void Guanli::searchcname() {
int n=read(); char c[10];
cout>c;
for(int i=0;i
if(strcmp(stu[i].couname,c)==0) { cout
cout
cout
cout
cout
void Guanli::alter() {
int n=read(); int s; int i=0;
cout
cout>s;
while((stu[i].stuid-s)!=0&&i
stu[i].clas
cout>stu[i]. stuid ; cout
cin>>stu[i]. stuname; cout>stu[i].sex; cout>stu[i].age; cout>stu[i].clas ; cout
cin>>stu[i]. specialty; cout
cout>stu[i].couid; cout
cout>stu[i].couname; cout>stu[i].keyword; cout
cout>stu[i].technology; cout
cout>c; if(c='y') cout
void Guanli::del() {
int n=read(); int s; int i=0,j;
cout
cout>s;
while((stu[i].stuid-s)!=0&&i
strcpy(stu[j].specialty,stu[j+1].specialty); stu[j].couid=stu[j+1].couid;
strcpy(stu[j].couname,stu[j+1].couname); strcpy(stu[j].keyword,stu[j+1].keyword); strcpy(stu[j].technology,stu[j+1].technology); } cout
cout
cout
void Guanli::total() { { int n=read(); char c[10]; cout>c; for(int i=0;i
} } }
void Guanli::display() {
int n=read();
cout
stu[i].clas
" 关键词"
} }
4.3 主函数实现
int main() {
char choice;
cout>choice; Guanli g;
if(choice=='0') { cout
else if(choice=='1') {
g.add(); system("pause"); main(); } else if(choice=='2') { g.search(); system("pause"); main(); } else if(choice=='3') { g.alter(); system("pause"); main(); } else if(choice=='4') { g.del(); system("pause"); main(); } else if(choice=='5') { g.total(); system("pause"); main(); } else if(choice=='6') { g.display(); system("pause"); main(); } else { cout
}
第五章 系统测试
5.1 模块测试
1. 添加功能
添加学生信息界面如图5-1示。
图5-1 添加学生信息
2. 查询功能
查询学生信息的界面如图5-2示。
图5-2 查询学生信息
(1)根据学生学号进行查询,界面如图5-3示。
图5-3根据学生学号查询学生信息(2)根据学生姓名进行查询,界面如图5-4示。
图5-4根据学生姓名查询学生信息
(3)根据题目编号进行查询,界面如图5-5示。
图5-5根据题目编号查询学生信息
(4)根据题目名称进行查询,界面如图5-6示。
图5-6根据题目名称查询学生信息
3. 修改功能
修改学生的相关信息,界面如图5-7示。
图5-7修改学生的相关信息
4. 删除功能
删除学生的信息,界面如图5-8示。
图5-8删除学生的信息
5. 统计功能
根据题目名称统计学生的信息,界面如图5-9示。
图5-9根据题目名称统计学生的信息6. 显示功能
显示全部学生的信息,界面如图5-10示。
图5-10显示全部学生的信息
7. 退出系统
退出使用系统,界面如图5-11示
图5-10退出使用系统
5.2 课程设计过程中遇到的问题
类的定义时要声明对象,另外,在调用类中定义的成员函数时,要通过类的对象进行调用。另外,写入文件的数据在显示时只能显示第一个数据,需要用到for 循环语句。注意数据成员的类型,字符串型或整形等,一定要注意数据类型的匹配,否则会报错,对文件的操作不熟悉,文件的读写操作不熟悉,对文件所存储的内容删除与修改不会。
总 结
经过这几天的课程设计的训练,我学到了很多知识,可以熟练的应用所学的知识,遇到不会的问题时通过与同学们交流,查找书籍,上网检索来解决问题。在做课程设计部时,首先对系统要求进行分析,根据要求设计类,设计函数,理解了面向对象的编程思想。
因为本人水平有限,在做课程设计是参考了很多资料,并在一些书籍中找到了解决问题的方法,在查阅书籍的同时进行学习,经过多次的修改与调试,最后交出了一份自己比较满意的答卷。
通过这次课设,让我进一步掌握了C++程序设计语言,更好的理解了面向对象的程序设计思想。我相信这会对以后的学习有帮助作用。在以后的学习中应当继续努力。
致 谢
首先,感谢老师给予我们这样一次机会,让我们独立完成课设,让我们学会了独立思考问题,提高了我们解决问题的能力,让我们在这学期即将结束的时候能将所学的知识应用到实践中,使我们加深了对所学知识的掌握程度。
再则我要感谢我的同学在课程设计上给予我的指导、提供给我的支持和帮助,是他们的帮助让我可以更加顺利的完成这次课设;同时也感谢学院为我提供良好的做课程设计的环境。最后再一次感谢所有在设计中曾经帮助过我的良师益友和同学在这次课程设计的撰写过程中,我得到了许多人的帮助。
这次课设让我认识到自己不足,在解决问题的同时收获了友谊,在大家的帮助下完成了课设,感到很高兴。在此真挚的感谢帮助我的所有人,
参考文献
[1]安志远,贾振华. c++程序设计基础. 北京:高等教育出版社,2009 [2]谭浩强.c++面向对象程序设计. 北京:清华大学出版社,2006 [3]刘丽华.c++面向对象程序设计 .北京:人们交通出版社,2004 [4]王超,C++程序设计.-------------北京:地质出版社,2006.82 [5]王继明,C++程序设计与应用开发[M].北京:清华出版社,2008.
附 录
#include #include #include #include #include class Student {
public:
int stuid; //学号
char stuname[10]; //姓名 char sex[2]; //性别 int age; //年龄 char clas[10]; //班级 char specialty[10]; //专业
int couid; //题目编号 char couname[10]; //题目名称 char keyword[20]; //关键词 char technology[30]; //实现技术 }stu[50]; class Guanli {
private:
Student stu[50]; public:
void add(); //添加学生信息 void search(); //查询信息
void searchsid(); //按学号查询信息 void searchsname(); //按名字查询信息 void searchcid(); //按题目编号查询信息 void searchcname(); //按题目名称查询信息 void alter(); //修改信息 void del(); //删除信息 void total(); //统计信息 void display(); //显示信息
void write(int n); //向文件中写入数据 int read(); //从文件中读数据 };
//************************************************* //向文件中写入数据 void Guanli::write(int n) {
fstream myfile;
myfile.open("student.txt",ios::out|ios::binary); if(!myfile) { cout
int count=n;
myfile
}
myfile.close(); }
//************************************************* //从文件中读数据 int Guanli::read() {
fstream myfile;
myfile.open("student.txt",ios::in|ios::binary); if(!myfile) { cout
int count;
myfile.seekg(0); myfile>>count;
for(int i=0;i>stu[i].stuid>>stu[i].stuname>>stu[i].sex>>stu[i].age>>stu[i].clas>>stu[i].specialty>>stu[i].couid>>stu[i].couname>>stu[i].keyword>>stu[i].technology;
cout
myfile.close(); return count; }
//************************************************* //添加学生信息 void Guanli::add() {
int n=read(); int i=0; char sign;
cout
cout>stu[i].stuid; cout
cout
cin>>stu[i].stuname; cout>stu[i].sex; cout>stu[i].age; cout>stu[i].clas; cout>stu[i].specialty; cout
cout>stu[i].couid; cout
cout>stu[i].couname; cout>stu[i].keyword; cout
cout>stu[i].technology; cout
cout>sign; //输入判断 i++; }
write(i); }
//************************************************* //查询信息
void Guanli::search() {
int n=read();
cout
cout>c; switch(c) {
case 1:
g.searchsid(); break; case 2:
g.searchsname(); break; case 3:
g.searchcid(); break; case 4:
g.searchcname(); break; default: cout
g.write(n); }
//************************************************* //按学生学号查询
void Guanli::searchsid() {
int n=read(); int s; int i=0;
cout
cout>s;
while((stu[i].stuid-s)!=0&&i
cout
cout
//************************************************* //按学生姓名查询
void Guanli::searchsname() {
int n=read(); char a[10];
cout>a;
for(int i=0;i
if(strcmp(stu[i].stuname,a)==0) { cout
cout
cout
cout
//************************************************* //按题目编号查询 void Guanli::searchcid() {
int n=read(); int b; int i=0;
cout>b;
while((stu[i].couid-b)!=0&&i
cout
cout
cout
//************************************************* //按题目名称查询
void Guanli::searchcname() {
int n=read(); char c[10];
cout
cin>>c;
for(int i=0;i
if(strcmp(stu[i].couname,c)==0) { cout
cout
cout
cout
//************************************************* //修改学生信息 void Guanli::alter() {
int n=read(); int s; int i=0;
cout
cout>s;
while((stu[i].stuid-s)!=0&&i
stu[i].clas
cout>stu[i]. stuid ;
cout
cin>>stu[i]. stuname; cout>stu[i].sex; cout>stu[i].age; cout>stu[i].clas ; cout
cin>>stu[i]. specialty; cout
cout>stu[i].couid; cout
cout>stu[i].couname; cout>stu[i].keyword; cout
cout>stu[i].technology; cout
cout>c; if(c='y') cout
//************************************************* //删除学生信息 void Guanli::del() {
int n=read(); int s; int i=0,j;
cout
cout>s;
while((stu[i].stuid-s)!=0&&i
strcpy(stu[j].specialty,stu[j+1].specialty); stu[j].couid=stu[j+1].couid;
strcpy(stu[j].couname,stu[j+1].couname); strcpy(stu[j].keyword,stu[j+1].keyword); strcpy(stu[j].technology,stu[j+1].technology); } cout
cout
cout
//************************************************* //统计信息
void Guanli::total() { { int n=read(); char c[10];
cout>c; for(int i=0;i
//************************************************* //显示学生信息 void Guanli::display() {
int n=read();
cout
stu[i].clas
" 关键词"
} }
//************************************************* //主函数
int main() {
char choice;
cout>choice; Guanli g;
if(choice=='0') { cout
else if(choice=='1') { g.add(); system("pause"); main(); } else if(choice=='2') { g.search(); system("pause"); main(); } else if(choice=='3') { g.alter(); system("pause"); main(); } else if(choice=='4') { g.del(); system("pause"); main(); } else if(choice=='5')
{ g.total(); system("pause"); main(); } else if(choice=='6') { g.display(); system("pause"); main(); } else { cout
} 输入错误,请重新输入您的选择:";
北 华 航 天 工 业 学 院
《基于C++的面向对象程序设计实例》
课程设计报告
报告题目: 课程设计选题管理系统设计 作者所在系部: 计算机科学与工程系 作者所在专业: 计算机应用技术 作者所在班级: 作 者 姓 名 : 指导教师姓名: 斯庆巴拉 完 成 时 间 :
北华航天工业学院教务处制
课程设计任务书
摘 要
在当前的各大高校课程设计选题管理系统中,为了方便管理、查询、修改与统计相关信息,一般都会将学生、课程设计题目等信息进行编号存储,所以就必须拥有一套完善的并且适合自身特点的信息化管理系统,以实现对冗杂的课程设计题目信息与学生信息的管理目的,还可以提高效率,方便同学们选题。
本文利用Microsoft 的Visual C++ 6.0(类和函数,数组,对象等) 编写程序,实现了用户对课程设计选题的管理操作。
本系统主要有八个功能模块:包括添加、查询、显示、修改、删除、统计、保存、读取等功能。已经过全面的系统测试,能够很好的运行,达到了预期设计预想。
关键词:系统设计 类 函数 数组 文件操作
目录
摘 要 . ................................................................................................................... 1 第一章 绪论 . ....................................................................................................... 1
1.1 课程设计的目的 . .................................................................................. 1 1.2 课程设计的背景和意义 . ...................................................................... 1
1.2.1 课程设计的背景 . ..................................................................... 1 1.2.2 课程设计的意义 . ..................................................................... 1 1.3 课程设计环境 . ...................................................................................... 1 第二章 需求分析 . ............................................................................................... 2
2.1 问题描述 . .............................................................................................. 2 2.2 功能要求 . .............................................................................................. 2 2.3 问题的解决方案 . .................................................................................. 2 第三章 系统设计 . ............................................................................................... 3
3.1 数据设计 . .............................................................................................. 3
3.1.1 类设计 . ..................................................................................... 3 3.1.2 函数设计 . ................................................................................. 3 3.2 结构设计 . .............................................................................................. 3
3.2.1 系统流程图 . ............................................................................. 3 3.2.2 界面设计 . ................................................................................. 4
第四章 系统实现 . ............................................................................................... 5
4.1 类实现 . .................................................................................................. 5 4.2 函数实现 . .............................................................................................. 5 4.3 主函数实现 . ........................................................................................ 14 第五章 系统测试 . ............................................................................................. 16
5.1 模块测试 . ............................................................................................ 16 5.2 课程设计过程中遇到的问题 . ............................................................ 22 总 结 . ................................................................................................................. 22 致 谢 . ................................................................................................................. 22 参考文献 . ............................................................................................................. 23 附 录 . ................................................................................................................. 24
第一章 绪论
1.1 课程设计的目的
(1)要求学生能够熟练掌握C++语言的基本知识和技能。 (2)基本掌握面向对象程序设计的基本思路和方法。 (3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。
1.2 课程设计的背景和意义
1.2.1 课程设计的背景
1. 理论研究基础
(1)运用面向对象(类和对象)的机制来实现系统功能。
(2)建立清晰的类与函数之间的关系,学会对函数调用的熟练使用。 2. 技术层面的支持
Microsoft Visual C++6.0 Microsoft Visual studio2010
1.2.2 课程设计的意义
通过此次课程设计,清晰的掌握C++语言的基本知识并能熟练的应用进行编程。
1.3 课程设计环境
软件:WindowsXP 、windows7系统,
Microsoft Visual Studio 2010,
Microsoft Visual C++ 6.0编译器。
硬件:戴尔 双核处理器,2G 内存,512独立显卡,80G 硬盘。 宏基 双核处理器,2G 内存,1G 独立显卡,500G 硬盘。
第二章 需求分析
2.1 问题描述
课程设计题目包括:编号、名称、关键词、实现技术、人员数(由几个人来完成)等信息。
学生信息包括:学号、姓名、性别、年龄、班级、专业等信息。
2.2 功能要求
(1)添加功能:程序能够添加学生的记录和课程设计题目记录,提供选择界面供用户选择所要添加的类别。添加记录时,要求学号和编号要唯一。如果添加了重复记录,则提示数据添加重复并取消添加。
(2)查询功能:可根据学号、姓名、编号、名称等信息对已添加的学生和课程设计题目进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。
(3)显示功能:可显示当前系统中所有学生的信息和课程设计题目信息,每条记录占据一行。
(4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意学号的唯一性。
(5)删除功能:主要实现对已添加的学生和课程设计题目记录进行删除。如果当前系统中没有相应的记录,则提示“记录为空!”并返回操作。
(6)统计功能:能根据多种参数进行统计。能按课程设计题目名称统计出学生选择该题目的人员的信息。
(7)保存功能:可将当前系统中各类记录存入文件中,存入方式任意。 (8)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用
2.3 问题的解决方案
根据系统功能要求,可以将问题解决分为以下步骤:
(1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计; (2)分析系统中的各个实体及它们之间的关系; (3)根据问题描述,设计系统的类层次; (4)完成类层次中各个类的描述; (5)完成类中各个成员函数的定义; (6)完成系统的应用模块; (7)功能调试;
(8)完成系统总结报告。
第三章 系统设计
3.1 数据设计
3.1.1 类设计
定义一个学生类Student ,类中包括学号stuid ,姓名stuname ,性别sex ,年龄age ,班级clas ,专业specialty ,及所选课程的课程编号couid ,课程名称couname ,关键词keyword, 实现技术technology ;定义一个管理类Guanli ,其成员函数包括向文件输入函数void write(int n);从文件读取函数,int read();添加学生信息函数void add(),查询信息函数void search (),按学号查询函数void searchsid(),按姓名查询函数void searchsname(),按题目编号查询函数void searchcid(),按题目名称查询函数void searchcname();修改信息函数void alter() ;删除信息函数void del();统计信息函数void total();显示函数void display()以及一个数据成员Student stu[50]。
3.1.2 函数设计
void write(int n),向文件中写入数据,打开文本文档,并将数据输入到文本文档中;int read(),向文件中写入数据从文件中读数据,打开文本文档,并将文本文档中的数据输出;void add(S),添加学生信息;void search()查询信息(可根据学生的学号、姓名、所选课程编号、课程名称进行信息查询);void alter(),修改学生信息;void del()删除学生信息,根据输入的学生学号通过调用函数实现;void total(),统计学生信息(根据学生所选课程名称进行统计);void display(),显示函数用来显示所有学生信息;int main()主函数,显示主菜单,调用各个函数实现所有功能。
3.2 结构设计
3.2.1 系统流程图
课程设计学生选课系统设计结构图:进入功能界面后,可以进行多项功能选择,如添加、查询、显示、修改、删除、统计,将数据写入文件以及从文件读取数据等;而查询功能又可以分为按学号、姓名、题目编号、题目名称等方式进行查询。如图3-1示。
图3-1课程设计学生选课系统设计结构图
3.2.2 界面设计
主界面是“欢迎使用课程设计选课系统”,下面是所要使用的功能:1. 添加新的纪录 2. 查询记录信息 3. 修改学生信息 4. 删除学生信息 5. 统计所有记录 6. 显示所有记录 0. 退出系统
其中,查询记录又可以弹出一个界面分别有以下几个功能: (1).根据学号查询 (2).根据姓名查询 (3).根据编号查询 (4).根据题目名称查询
每实现一个功能,重新弹出主界面,进行下一个的功能选择。
第四章 系统实现
4.1 类实现
class Student {
public:
int stuid; //学号
char stuname[10]; char sex[2]; int age; char clas[10]; char specialty[10]; int couid; char couname[10]; char keyword[20]; char technology[30]; }stu[50]; class Guanli {
private: Student stu[50]; public: void add(); void search(); void searchsid(); void searchsname(); void searchcid(); void searchcname(); void alter(); void del(); void total(); void display(); void write(int n); int read(); };
4.2 函数实现
void Guanli::write(int n) {
fstream myfile;
//姓名 //性别 //年龄 //班级 //专业
//题目编号 //题目名称 //关键词 //实现技术 //定义对象 //添加学生信息 //查询信息 //按学号查询信息 //按名字查询信息 //按题目编号查询信息 //按题目名称查询信息 //修改信息 //删除信息 //统计信息 //显示信息 //向文件中写入数据 //从文件中读数据
myfile.open("student.txt",ios::out|ios::binary); if(!myfile) { cout
int count=n;
myfile
}
myfile.close(); }
int Guanli::read() {
fstream myfile;
myfile.open("student.txt",ios::in|ios::binary); if(!myfile) { cout
int count;
myfile.seekg(0); myfile>>count;
for(int i=0;i>stu[i].stuid>>stu[i].stuname>>stu[i].sex>>stu[i].age>>stu[i].clas>>stu[i].specialty>>stu[i].couid>>stu[i].couname>>stu[i].keyword>>stu[i].technology;
cout
myfile.close(); return count; }
void Guanli::add() {
int n=read(); int i=0; char sign;
cout
while(sign!='N') { loop:
cout>stu[i].stuid; cout
cout
cin>>stu[i].stuname; cout>stu[i].sex; cout>stu[i].age; cout>stu[i].clas; cout>stu[i].specialty; cout
cout>stu[i].couid; cout
cout>stu[i].couname; cout>stu[i].keyword; cout
cout>stu[i].technology; cout
cout
cin>>sign; //输入判断 i++; }
write(i); }
void Guanli::search() {
int n=read();
cout
cout>c; switch(c) {
case 1:
g.searchsid(); break; case 2:
g.searchsname(); break; case 3:
g.searchcid(); break; case 4:
g.searchcname(); break; default: cout
g.write(n); }
void Guanli::searchsid() {
int n=read(); int s; int i=0;
cout
cout>s;
while((stu[i].stuid-s)!=0&&i
cout
cout
void Guanli::searchsname() {
int n=read(); char a[10];
cout>a;
for(int i=0;i
if(strcmp(stu[i].stuname,a)==0) { cout
cout
cout
void Guanli::searchcid() {
int n=read(); int b; int i=0;
cout>b;
while((stu[i].couid-b)!=0&&i
cout
cout
cout
void Guanli::searchcname() {
int n=read(); char c[10];
cout>c;
for(int i=0;i
if(strcmp(stu[i].couname,c)==0) { cout
cout
cout
cout
cout
void Guanli::alter() {
int n=read(); int s; int i=0;
cout
cout>s;
while((stu[i].stuid-s)!=0&&i
stu[i].clas
cout>stu[i]. stuid ; cout
cin>>stu[i]. stuname; cout>stu[i].sex; cout>stu[i].age; cout>stu[i].clas ; cout
cin>>stu[i]. specialty; cout
cout>stu[i].couid; cout
cout>stu[i].couname; cout>stu[i].keyword; cout
cout>stu[i].technology; cout
cout>c; if(c='y') cout
void Guanli::del() {
int n=read(); int s; int i=0,j;
cout
cout>s;
while((stu[i].stuid-s)!=0&&i
strcpy(stu[j].specialty,stu[j+1].specialty); stu[j].couid=stu[j+1].couid;
strcpy(stu[j].couname,stu[j+1].couname); strcpy(stu[j].keyword,stu[j+1].keyword); strcpy(stu[j].technology,stu[j+1].technology); } cout
cout
cout
void Guanli::total() { { int n=read(); char c[10]; cout>c; for(int i=0;i
} } }
void Guanli::display() {
int n=read();
cout
stu[i].clas
" 关键词"
} }
4.3 主函数实现
int main() {
char choice;
cout>choice; Guanli g;
if(choice=='0') { cout
else if(choice=='1') {
g.add(); system("pause"); main(); } else if(choice=='2') { g.search(); system("pause"); main(); } else if(choice=='3') { g.alter(); system("pause"); main(); } else if(choice=='4') { g.del(); system("pause"); main(); } else if(choice=='5') { g.total(); system("pause"); main(); } else if(choice=='6') { g.display(); system("pause"); main(); } else { cout
}
第五章 系统测试
5.1 模块测试
1. 添加功能
添加学生信息界面如图5-1示。
图5-1 添加学生信息
2. 查询功能
查询学生信息的界面如图5-2示。
图5-2 查询学生信息
(1)根据学生学号进行查询,界面如图5-3示。
图5-3根据学生学号查询学生信息(2)根据学生姓名进行查询,界面如图5-4示。
图5-4根据学生姓名查询学生信息
(3)根据题目编号进行查询,界面如图5-5示。
图5-5根据题目编号查询学生信息
(4)根据题目名称进行查询,界面如图5-6示。
图5-6根据题目名称查询学生信息
3. 修改功能
修改学生的相关信息,界面如图5-7示。
图5-7修改学生的相关信息
4. 删除功能
删除学生的信息,界面如图5-8示。
图5-8删除学生的信息
5. 统计功能
根据题目名称统计学生的信息,界面如图5-9示。
图5-9根据题目名称统计学生的信息6. 显示功能
显示全部学生的信息,界面如图5-10示。
图5-10显示全部学生的信息
7. 退出系统
退出使用系统,界面如图5-11示
图5-10退出使用系统
5.2 课程设计过程中遇到的问题
类的定义时要声明对象,另外,在调用类中定义的成员函数时,要通过类的对象进行调用。另外,写入文件的数据在显示时只能显示第一个数据,需要用到for 循环语句。注意数据成员的类型,字符串型或整形等,一定要注意数据类型的匹配,否则会报错,对文件的操作不熟悉,文件的读写操作不熟悉,对文件所存储的内容删除与修改不会。
总 结
经过这几天的课程设计的训练,我学到了很多知识,可以熟练的应用所学的知识,遇到不会的问题时通过与同学们交流,查找书籍,上网检索来解决问题。在做课程设计部时,首先对系统要求进行分析,根据要求设计类,设计函数,理解了面向对象的编程思想。
因为本人水平有限,在做课程设计是参考了很多资料,并在一些书籍中找到了解决问题的方法,在查阅书籍的同时进行学习,经过多次的修改与调试,最后交出了一份自己比较满意的答卷。
通过这次课设,让我进一步掌握了C++程序设计语言,更好的理解了面向对象的程序设计思想。我相信这会对以后的学习有帮助作用。在以后的学习中应当继续努力。
致 谢
首先,感谢老师给予我们这样一次机会,让我们独立完成课设,让我们学会了独立思考问题,提高了我们解决问题的能力,让我们在这学期即将结束的时候能将所学的知识应用到实践中,使我们加深了对所学知识的掌握程度。
再则我要感谢我的同学在课程设计上给予我的指导、提供给我的支持和帮助,是他们的帮助让我可以更加顺利的完成这次课设;同时也感谢学院为我提供良好的做课程设计的环境。最后再一次感谢所有在设计中曾经帮助过我的良师益友和同学在这次课程设计的撰写过程中,我得到了许多人的帮助。
这次课设让我认识到自己不足,在解决问题的同时收获了友谊,在大家的帮助下完成了课设,感到很高兴。在此真挚的感谢帮助我的所有人,
参考文献
[1]安志远,贾振华. c++程序设计基础. 北京:高等教育出版社,2009 [2]谭浩强.c++面向对象程序设计. 北京:清华大学出版社,2006 [3]刘丽华.c++面向对象程序设计 .北京:人们交通出版社,2004 [4]王超,C++程序设计.-------------北京:地质出版社,2006.82 [5]王继明,C++程序设计与应用开发[M].北京:清华出版社,2008.
附 录
#include #include #include #include #include class Student {
public:
int stuid; //学号
char stuname[10]; //姓名 char sex[2]; //性别 int age; //年龄 char clas[10]; //班级 char specialty[10]; //专业
int couid; //题目编号 char couname[10]; //题目名称 char keyword[20]; //关键词 char technology[30]; //实现技术 }stu[50]; class Guanli {
private:
Student stu[50]; public:
void add(); //添加学生信息 void search(); //查询信息
void searchsid(); //按学号查询信息 void searchsname(); //按名字查询信息 void searchcid(); //按题目编号查询信息 void searchcname(); //按题目名称查询信息 void alter(); //修改信息 void del(); //删除信息 void total(); //统计信息 void display(); //显示信息
void write(int n); //向文件中写入数据 int read(); //从文件中读数据 };
//************************************************* //向文件中写入数据 void Guanli::write(int n) {
fstream myfile;
myfile.open("student.txt",ios::out|ios::binary); if(!myfile) { cout
int count=n;
myfile
}
myfile.close(); }
//************************************************* //从文件中读数据 int Guanli::read() {
fstream myfile;
myfile.open("student.txt",ios::in|ios::binary); if(!myfile) { cout
int count;
myfile.seekg(0); myfile>>count;
for(int i=0;i>stu[i].stuid>>stu[i].stuname>>stu[i].sex>>stu[i].age>>stu[i].clas>>stu[i].specialty>>stu[i].couid>>stu[i].couname>>stu[i].keyword>>stu[i].technology;
cout
myfile.close(); return count; }
//************************************************* //添加学生信息 void Guanli::add() {
int n=read(); int i=0; char sign;
cout
cout>stu[i].stuid; cout
cout
cin>>stu[i].stuname; cout>stu[i].sex; cout>stu[i].age; cout>stu[i].clas; cout>stu[i].specialty; cout
cout>stu[i].couid; cout
cout>stu[i].couname; cout>stu[i].keyword; cout
cout>stu[i].technology; cout
cout>sign; //输入判断 i++; }
write(i); }
//************************************************* //查询信息
void Guanli::search() {
int n=read();
cout
cout>c; switch(c) {
case 1:
g.searchsid(); break; case 2:
g.searchsname(); break; case 3:
g.searchcid(); break; case 4:
g.searchcname(); break; default: cout
g.write(n); }
//************************************************* //按学生学号查询
void Guanli::searchsid() {
int n=read(); int s; int i=0;
cout
cout>s;
while((stu[i].stuid-s)!=0&&i
cout
cout
//************************************************* //按学生姓名查询
void Guanli::searchsname() {
int n=read(); char a[10];
cout>a;
for(int i=0;i
if(strcmp(stu[i].stuname,a)==0) { cout
cout
cout
cout
//************************************************* //按题目编号查询 void Guanli::searchcid() {
int n=read(); int b; int i=0;
cout>b;
while((stu[i].couid-b)!=0&&i
cout
cout
cout
//************************************************* //按题目名称查询
void Guanli::searchcname() {
int n=read(); char c[10];
cout
cin>>c;
for(int i=0;i
if(strcmp(stu[i].couname,c)==0) { cout
cout
cout
cout
//************************************************* //修改学生信息 void Guanli::alter() {
int n=read(); int s; int i=0;
cout
cout>s;
while((stu[i].stuid-s)!=0&&i
stu[i].clas
cout>stu[i]. stuid ;
cout
cin>>stu[i]. stuname; cout>stu[i].sex; cout>stu[i].age; cout>stu[i].clas ; cout
cin>>stu[i]. specialty; cout
cout>stu[i].couid; cout
cout>stu[i].couname; cout>stu[i].keyword; cout
cout>stu[i].technology; cout
cout>c; if(c='y') cout
//************************************************* //删除学生信息 void Guanli::del() {
int n=read(); int s; int i=0,j;
cout
cout>s;
while((stu[i].stuid-s)!=0&&i
strcpy(stu[j].specialty,stu[j+1].specialty); stu[j].couid=stu[j+1].couid;
strcpy(stu[j].couname,stu[j+1].couname); strcpy(stu[j].keyword,stu[j+1].keyword); strcpy(stu[j].technology,stu[j+1].technology); } cout
cout
cout
//************************************************* //统计信息
void Guanli::total() { { int n=read(); char c[10];
cout>c; for(int i=0;i
//************************************************* //显示学生信息 void Guanli::display() {
int n=read();
cout
stu[i].clas
" 关键词"
} }
//************************************************* //主函数
int main() {
char choice;
cout>choice; Guanli g;
if(choice=='0') { cout
else if(choice=='1') { g.add(); system("pause"); main(); } else if(choice=='2') { g.search(); system("pause"); main(); } else if(choice=='3') { g.alter(); system("pause"); main(); } else if(choice=='4') { g.del(); system("pause"); main(); } else if(choice=='5')
{ g.total(); system("pause"); main(); } else if(choice=='6') { g.display(); system("pause"); main(); } else { cout
} 输入错误,请重新输入您的选择:";