大学生软件工程C++课程设计学生选课系统Word文件下载.docx
《大学生软件工程C++课程设计学生选课系统Word文件下载.docx》由会员分享,可在线阅读,更多相关《大学生软件工程C++课程设计学生选课系统Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。
![大学生软件工程C++课程设计学生选课系统Word文件下载.docx](https://file1.bdocx.com/fileroot1/2023-1/3/8a4e966e-f7e0-412a-a829-c86fc3828cb0/8a4e966e-f7e0-412a-a829-c86fc3828cb01.gif)
学生选课系统
假定有n门课程,每门课程有课程编号,课程名称,课程性质,学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于15)自由选课。
试设计一个选修
课程系统,使之能提供以下功能:
(1)系统以菜单方式工作
(2)课程信息和学生选课信息录入功能(课程信息用文件保存)
(3)课程信息浏览功能
(4)查询功能
(5)按学分查询
(6)某门课程学生选修情况(可选项)
3.课程设计说明书
⑴概要设计
一、模块说明
本系统是针对高校学生的选修课程而设计,通过本系统高校学生可以很方便地进行自由选课。
主要的功能要求是:
n门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求自由选课。
主要要求实现的功能如下:
1课程信息录入功能:
能根据提示将各课程的相关信息进行输入并保存;
2课程信息浏览功能:
能将已经录入并保存的信息进行浏览;
3查询功能:
可根据不同的查询方式查询相应的课程信息。
其中查询方式有按学分查询和按课程性质查询两种;
由此思路,可设计出本系统主要由一个Class类及其五个成员函数组成。
课题所要求的功能由各个函数分别得以实现。
首先,在Class类内定义了一些成员变量,用来保存课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,还对它的成员变量进行了声明。
然后,在类外,通过作用域运算符将类内声明的成员函数定义,以及进行相应的操作,以实现相应的功能。
主要包括功能要求中的五大功能,即信息输入、信息浏览、按学分查询课程、按课程性质查询课程等。
最后,在主函数中设置目录显示。
用switch瓜分不同的功能选项。
系统根据用户输入的符号,调用相应的成员函数,完成功能的实现
、模块结构图
询
三、系统流程图
⑵详细设计
各功能模块设计思路及流程图:
各个功能函数的具体实现如下:
1.录入函数模块:
首先,创建一个文件输出流对象outfile,打开文件,判断文件是否存在。
通过while设一个无限循环,当给出指定条件时退出。
在循环中,调用cout函数来提示用户输入相应的信息,如课程
编号、名称、课程性质、总学时、授课学时、实验或上机学时、学分、开课学期等等。
将需要的课程输入完毕之后,可根据提示再输入“t”,即可返回主菜单,重新进行功能的选择。
该流程图如下:
2.浏览函数模块:
该函数首先创建了输入流文件对象infile,使用语句infile.open(file),然后定义一个string类型的
二维数组,用来保存从文本内读取的信息,用for循环保证保存不止一门课程的信息。
最后,cout
输出显示所有保存的信息。
流程图如下:
3•查找功能,即按学分查找和按课程性质查找,具体的实现如下:
i.按课程性质查找:
创建输入流文件对象infile,然后定义一个string类型的二维数组,用来保存从文本内读取的信息,比较用户输入的字符和保存的信息中那些课程的性质相对应,将相应的课程信息进行输出显示,
ii.按课程学分查找:
如果用户输入的学分与所保存的信息想对应,则将对应的课程信息输出显示。
输入“0”可返回主菜。
4.课程设计成果
各部骤操作界面如下:
1.进入主菜单显示如下:
2.录入课程信息并保存界面如下:
Y:
10B1
^:
nath.fiTmust
:
64S^t:
60at:
4
30
豔饕开始信息录入i書辅入i轉呈编请输入课程笛
晴输入总竽时i霸
鶴入諭學期】2812-2813
程信息嗟权觀开始信息录入嚴忘退岀
请选择操fl
**」—C—世■rZ*7^^^l:
FiE^*9r~3f-■IrlILJ.“ET■*_■=STU^nLJ--
FJ!
K|yJIZifiJKhJX-jI
统系吗F;
课选生作
1
兰R自也息澹一豆耳0_i>
4L/-1」j课撃
出
55^->
>
来选t2-A0-
4.查询课程信息界面如下:
辰输入学分:
3Q
编号I容称】性质】总学时】讲授课I实验课I学分丨开课学期
1»
B1n&
thnust4302^12-2013
选抒査询方iV
详玻瞇类羞査询
2-学分查询
5.返回界面如下:
弹卷奠型蛍询蚩分矍询
誌息息
酬
晖选「a-Afi-
源代码如下:
#include<
conio.h>
iostream>
fstream>
string>
usingnamespacestd;
classCourse
{
public:
voidCourseInput();
voidCourseOutput();
voidFind();
voidFind_by_Credit(float);
voidFind_by_Kind(string);
private:
intcoursenum;
stringcoursename;
stringcoursekind;
intcoursehour;
intteachhour;
intexperimenthour;
floatcredit;
stringcourseterm;
};
voidCourse:
:
CourseInput()
ofstreamoutfile("
D:
\\f1.txt"
ios:
out);
if(!
outfile)
cerr<
<
"
openerror!
endl;
exit
(1);
}
while
(1)
cout<
"
课程信息\n"
;
按任意键开始信息录入\n"
输入t退出\n"
if(getch()=='
t'
)
break;
cout<
请输入课程编号:
;
cin>
>
coursenum;
请输入课程名称:
coursename;
请输入课程性质:
coursekind;
请输入总学时:
coursehour;
请输入授课学时:
teachhour;
请输入上机学时:
experimenthour;
请输入学分:
credit;
请输入开课学期:
courseterm;
outfile<
coursenum<
coursename<
coursekind<
coursehour
teachhour<
experimenthour<
credit<
courseterm<
endl;
outfile.close();
CourseOutput()
ifstreaminfile("
in);
infile)
编号|名称|性质|总学时|讲授课|实验课|学分|开课学期\n"
stringarr[80][8];
intl=0;
while(!
infile.eof())
for(intj=0;
j<
8;
j++)
infile»
arr[l][j];
l++;
for(inti=0;
i<
l;
i++)
arr[i][j]<
\t"
infile.close();
Find_by_Credit(floattemp)
infile>
arr[l][0]>
arr[l][1]>
arr[l][2]»
arr[l][3]>
arr[l][4]>
arr[l][5]>
arr[l][6]»
arr[l][7];
l++;
if(atof(arr[i][6].c_str())==temp)
arr[i][0]<
arr[i][1]<
<
arr[i][2]<
arr[i][3]<
arr[i][4]<
arr[i][5]<
arr[i][6]<
arr[i][7]<
endl;
Find_by_Kind(stringtemp)
if(arr[i][2]==temp)
{cout<
endl;
Find()
选择查询方式:
1->
按课程类型查询"
2->
按学分查询"
0->
返回"
inti;
cin>
i;
switch(i)
case1:
请输入课程类型:
\n"
charkind[100];
kind;
Find_by_Kind(kind);
case2:
请输入学分:
floatc;
c;
Find_by_Credit(c);
if(i==0)
intmain()
CourseCOURSE;
欢迎来到学生选课系统
\n
请选择操作\n"
按1->
录入课程信息
按2->
浏览课程信息
按3->
查询课程信息
按0->
退出系统\n"
COURSE.Courselnput();
COURSE.CourseOutput();
case3:
COURSE.Find();
case0:
exit(0);
return0;
5.课程设计心得
这次第一次接触课程设计,最初看到题目时,感觉那五道题目都很难很难,比平时做的题目大多了,涉及的知识点一看就很多。
选题目时我选了第五道一一学生选课系统。
读了好几遍题目,才有了一点点轮廓和框架。
还有其中的用到文件操作的部分,感到是最难的。
刚开始时也在网上搜索过相关题目,但每个学校老师布置的课程设计题目毕竟有所不同,再者毫无思考的去照搬照抄别人的成果也对自己毫无益处。
最终我决定一定要自己亲手完成这次课程设计。
经过课程设计前两天的上机实践,对于这个题目我构建出了初步的程序框架。
大一后半学期都是在学习基于对象的程序设计思想,而这就是在培养我们面对陌生的全新的程序任务时,不必为它表面的复杂烦琐而胆怯,我们需要冷静思考出其中每一部分的构造组成及功能,然后分成模块一步步去细分,这样只需分开去钻研每一小部分的程序内容。
具体的对于我选的这道“学生选课系统”题目,我现在本子上列出来了程序需要完成的功能一
-
的设计。
然后根据“课程”的特点赋予它编号、名称、学分等性质,这就是需要在程序的类中所命名的私有成员数据。
类设计完之后,就等于说框架已经摆在面前,要对每一部分进行详细设计。
对于课程信息的录入和浏览,其实考察的是对文件的保存和打开的应用。
录入模块先创建一个文件输出流对象outfile,打开文件,判断文件是否存在。
通过while设一个无限循环,当给出指定条件时退出。
在循环中,调用cout函数来提示用户输入相应的信息,如课程编号、名称、课程性质、总学时、授课学时、实验或上机学时、学分、开课学期等等。
二浏览模块与之类似,是创建的输入流对象infile;
在课程查询模块中,如按课程性质查询,先
创建输入流文件对象infile,然后定义一个string类型的二维数组,用来保存从文本内读取的信息,比较用户输入的字符和保存的信息中那些课程的性质相对应,将相应的课程信息进行输出显示。
按学分查询只需换一下比较对象即可。
一周多的课程设计完成了一道题目,这次体验收获颇丰。
这次题目的编写考察了我们对输出界面的设计、文件的打开与保存、类的创建等重点内容。
在编写过程中经历了十分难熬的阶段,因为对程序整体的控制力不是很好,特别是程序编写完成后第一次编译时间,遇到太多不知怎么修改的错误,而且仍有许多拼写错误,这是不应该的,也是以后应该注意改正的地方。
现在感觉这些题目太不简单,也许以后再回首这些题目会是基础的内容,所以从现在开始就应多练习一些类似的题目,把其它题目也尝试一下,我相信会对我们自身有很大的提高。