c++学生选修课程系统课程设计.docx
- 文档编号:25459072
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:45
- 大小:161.66KB
c++学生选修课程系统课程设计.docx
《c++学生选修课程系统课程设计.docx》由会员分享,可在线阅读,更多相关《c++学生选修课程系统课程设计.docx(45页珍藏版)》请在冰豆网上搜索。
c++学生选修课程系统课程设计
封面………………………………………………………………………1
任务书……………………………………………………………………1
一、需求分析……………………………………………………………5
1.1、系统设计目的与意义……………………………………………………………5
1.2、系统功能需求(系统流程图)……………………………………………………5
1.3、输入输出的要求……………………………………………………………………6
二、结构设计……………………………………………………………6
三、界面设计与各功能模块实现………………………………..………7
四、系统调试……………………………………………………………8
五、使用说明及编程体会………………………………………………9
5.1、使用说明…………………………………………………………………………9
5.2、编程体会…………………………………………………………………………13
附件……………………………………………………………………13
参考文献………………………………………………………………32
评分表…………………………………………………………………33
(一)需求分析
1.1、系统设计目的与意义
当今时代是飞速发展的信息时代。
在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。
计算机的最大好处在于利用它能够进行信息管理。
使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。
尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。
计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。
本系统就是为了管理好选课信息而设计的。
学校作为一种信息资源的集散地,学生和课程繁多,包含很多的信息数据的管理,现今,有很多的学校都是初步开始使用,甚至尚未使用计算机进行信息管理。
根据调查得知,他们以前对信息管理的主要方式是基于文本、表格等纸介质的手工处理,对于选课情况的统计和查询等往往采用对课程的人工检查进行,对学生的选课权限、以及选课代号等用人工计算、手抄进行。
数据信息处理工作量大,容易出错;由于数据繁多,容易丢失,且不易查找。
总的来说,缺乏系统,规范的信息管理手段。
尽管学校都有计算机,但是尚未用于信息管理,没有发挥它的效力,资源闲置比较突出,这就是管理信息系统的开发的基本环境。
数据处理手工操作,工作量大,出错率高,出错后不易更改。
学校采取手工方式对学生选课情况进行人工管理,由于信息比较多,选课信息的管理工作混乱而又复杂;一般选课情况是记录在文件上,课程的数目和代号也记录在文件中,学校的工作人员也只是当时对它比较清楚,时间长了,如再要进行查询,就得在众多的资料中翻阅、查找了,造成查询费时、费力。
如要对很长时间以前的选课进行更改就更加困难了。
基于这些问题,我认为有必要建立一个学生选课系统,使选课管理工作规范化,系统化,程序化,避免选课管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改选课情况。
1.2、系统功能需求(系统流程图)
1.3、输入输出的要求
(1)输入:
确定与功能有关的所有输入信息,包括数据来源、意义、格式、接收方法、数量、输入范围及处理方法,必须说明时间要求、优先顺序、操作控制和使用的输入设备(媒体)。
(2)输出:
对错误输入提示
(二)结构设计
(1)(E-R图);
;
(2)类层次图
(三)界面设计与各功能模块实现
界面设计
1、主界面:
********************************************
**
*选修课小系统*
**
**
*操作方式:
*
*1.选修课系统学生端*
**
*2.选修课系统管理端*
**
********************************************
2、选修课系统学生端:
※※※※※※※※※※※※※※※※※※※
※选修课系统学生端※
※※
※操作方式:
※
※1.学生选课※
※2.学生情况※
※3.选课情况※
※4.退出系统※
※※
※※※※※※※※※※※※※※※※※※※
3、选修课系统管理端:
※※※※※※※※※※※※※※※※※※※※※※※※※※※
※※
※选修课系统管理端※
※※
※操作方式:
※
※1.增加学生2.增加课程※
※3.删除学生4.删除课程※
※5.填写成绩6.更改学分※
※7.学生情况8.选课情况※
※9.保存数据0.退出系统※
※※
※※※※※※※※※※※※※※※※※※※※※※※※※※※
(四)系统调试
在这一节中,主要解决的了两个问题,一个是系统的联机文档,另一个是系统的测试,下面我们分别加以说明。
作为一个完整的系统,联机文档是其中不可缺少的部分也是相当重要的部分。
好的文档能够使用户快速了解并准确的使用系统的各项功能。
减少误操作,减少错误产生的可能,这对用户和开发人员都有很多的好处。
所以在开发本系统中,也加入了不少的文档,除了对于四大模块的详细说明外,对于易出错和不易操作的地方(如多条件查询部分)又作了详细的说明。
由于本身能力的局限性,所以做编写的代码,即使经过反复检查也难免出错所以在本阶段力求使用有限的时间找出尽可能多的错误,力求系统尽量正确。
我们在本系统的测试中使用了黑盒法(即不关心程序内部的逻辑结构,而是根据程序的功能来设计是检测)请一位不熟悉本系统的人来进行随意性的操作,打破习惯的操作顺序,从中发现错误,在此阶段系统的大量错误得到了改正。
信息管理系统所涉及的数据库设计的重要步骤加载测试。
加载测试工作贯穿于程序测试工作的全过程,整个录入、修改、查询、处理工作均可视为对数据库的加载测试工作。
要设计出一个好的信息管理系统数据库,除满足系统所要求的功能外,还必须遵守下列原则:
1)基本表的个数越少越好。
2)主键的个数越少越好。
键是表间连接的工具,主键越少,表间的连接就越简单。
3)字段的个数越少越好。
4)所有基本表的设计均应尽量符合第三范式。
数据库的设计中,如何处理多对多的关系和如何设计主键,是两个有着较大难度、需要重点考虑的问题。
例如:
--------------------Configuration:
8-Win32Debug--------------------
Compiling...
9.cpp
E:
\新建文件夹\9.cpp(53):
errorC2535:
'__thiscallstudent:
:
student(void)':
memberfunctionalreadydefinedordeclared
E:
\新建文件夹\9.cpp(24):
seedeclarationof'student:
:
student'
执行cl.exe时出错.
9.obj-1error(s),0warning(s)
改正:
将
中的
去掉
(五)使用说明及编程体会
5.1使用说明
1、登录
首先,运行学生选课系统,出现学生选课系统画面:
2、进入选修课系统学生端
当主菜单出现后,在“请选择登录方式:
”后输入“1”,就进入了“选修课系统学生端”,界面如下:
3、选课
在“请选择操作方式:
”输入“1”,进入网上选课系统,请首先进入课程预览菜单,预览自己的课程表,学生自行选课后,也可进入课程预览菜单,查看选课结果。
课程表中已有的课程为教务处按各班教学计划整班指定上去的,不得自行退选
4、管理员登录
管理员密码admin。
用管理员帐号登录可以查看每个人的选课,及退课情况。
(1)如密码正确,则出现以下界面:
此时,管理员可以在“请选择操作方式:
”后输入相应的数字,比如数日“1”,那么所执行的操作就是:
增加学生,则出现以下界面:
(2)若密码不正确,则出现界面
第一次密码错误
第二次密码错误
5、退出系统
(1)学生选课完成后可以按“4”退出选课系统,以防他人修改数据。
(2)密码错误次数超过3次,可按任意键退出,界面如下:
5.2编程体会
刚看到这个课程设计题目时,觉得这个课题比较难。
今天回过去看看,却十分的欣慰,因为通过我们的努力终于完成了。
虽然这不是我读大学以来第一次做课程设计,但却是花费心血最多的一次,这是对我这学期学习下来最好的检验。
经过这次课程设计,我的能力有了很大的提高,比如操作能力、分析问题的能力、合作精神、严谨的工作作风等方方面面都进步了。
还要特别感谢老师对我的悉心指导,帮我理清设计思路,指导操作方法,并对我所做的设计方案提出有效的改进方案。
老师渊博的知识、严谨的作风、诲人不倦的态度和学术上精益求精的精神让我受益终生。
附件:
#include
#include
#include
#include
usingnamespacestd;
//定义课程
classcourse//某个学生所学的课程中的某一个
{public:
charcname[20];//课程名称
floatgrade;//课程成绩
course*Next;//指向下一个课程的指针
};
//学生类
classstudent
{public:
student()
{root=NULL;
constintmaxcourse=5;
factcourse=0;}
voidreadname(charN[]);//读入学生的姓名
voidgetname(charN[]);//得到学生的姓名
voidwrecourse(charN[],floatscore);//要据课程名写入学生课程的成绩
floataverage();//学生课程的平均成绩
voidaddcourse(charN[],floatg);//给学生增加一门课
intfindcourse(charN[]);//查找是否已有此课程,如果有返回,如果没有返回
intretfactcourse()
{returnfactcourse;}//得到所学的课程数目
course*retroot()
{returnroot;}//利用键表将所有的课程保存起来
intretmaxcourse()
{return5;}//得到最多可学的课程数目
voidclrroot()//清零
{root=NULL;
factcourse=0;}
private:
charsname[20];//学生的姓名
intmaxcourse;//学生最多可以学五门课程
intfactcourse;//学生实际所学的课程数目
course*root;//课程的根结点指针
};
voidstudent:
:
readname(charN[])//读入学生的姓名
{strcpy(sname,N);}
voidstudent:
:
getname(charN[])//得到学生的姓名
{strcpy(N,sname);}
voidstudent:
:
wrecourse(charN[],floatscore)//要据课程名写入学生课程的成绩
{course*p=root;
if(p==NULL)
return;
if(p!
=NULL)
p=p->Next;
while(p)
{if(strcmp(p->cname,N)==0)
p->grade=score;
p=p->Next;}
}
floatstudent:
:
average()//学生课程的平均成绩
{floataver=0.0;
course*p=root;
while(p)
{aver=aver+p->grade;}
aver=aver/factcourse;
returnaver;}
voidstudent:
:
addcourse(charN[],floatg)//给学生增加一门课
{course*s=newcourse;
s->Next=NULL;
if(root==NULL)
root=s;
course*p=root;
course*newcourse=newcourse;
newcourse->Next=p->Next;
p->Next=newcourse;
strcpy(newcourse->cname,N);
newcourse->grade=g;
factcourse++;}
intstudent:
:
findcourse(charN[])//查找是否已有此课程,如果有返回,如果没有返回
{course*p=root;
if(root==NULL)
return0;
p=p->Next;
while(p)
{if(strcmp(p->cname,N)==0)
return1;
p=p->Next;}
return0;}
classstudentdb
{public:
studentstu;
studentdb*Next;};
structstudentname
{chartname[20];//学生的名字
floatresult;//学生所得的该课程分数
studentname*Next;};
//课程类
classsubject
{public:
subject()
{first=NULL;
maxstudent=30;
activestudnet=0;}
floatreadcredit();//得到课程的学分
voidgetcredit(floata);//设置学分
floatgetaverage();//得到学生的平均成绩
floatgetresult(charN[]);//查找某个学生的成绩
voidgetkname(charN[]);//读出课程的名称
voidsetkname(charN[]);//读入课程的名称
studentname*retfirst()
{returnfirst;}//返回根结点
voidfindstudent(studentdb*P);//根据该课程的名称,寻找选这课程的学生
intretactivestudent()
{returnactivestudnet;}//返回实际学生数
intretmaxstudent()
{return30;}//返回最多学生数
voidclractivestudnet()
{activestudnet=0;}//从文件中读出来后将实际学生数清零
private:
intmaxstudent;//最多学生数
intactivestudnet;//实际学生数
studentname*first;//学生名单
floatcredit;//该课程的学分
floataveragerusult;//该课程的平均成绩
charkname[20];//该课程的名称
};
floatsubject:
:
readcredit()//得到课程的学分
{returncredit;}
voidsubject:
:
getcredit(floata)//设置学分
{credit=a;}
floatsubject:
:
getaverage()//得到学生的平均成绩
{floatk=0.0;
studentname*p;
p=first->Next;
if(p==NULL)
return0;
while(p)
{k=k+p->result;
p=p->Next;}
returnk/activestudnet;}
floatsubject:
:
getresult(charN[])//查找某个学生的成绩
{studentname*p;
p=first;
while(p)
{if(strcpy(p->tname,N)==0)
returnp->result;
p=p->Next;}
return-1;}
voidsubject:
:
getkname(charN[])//读出课程的名称
{strcpy(N,kname);}
voidsubject:
:
setkname(charN[])//读入课程的名称
{strcpy(kname,N);}
voidsubject:
:
findstudent(studentdb*P)//根据该课程的名称,寻找选这课程的学生
{studentname*newcode=newstudentname;
newcode->Next=NULL;
first=newcode;
studentname*T=first;
studentdb*K=P->Next;
while(K)
{course*Y=K->stu.retroot();
if(Y==NULL)
{K=K->Next;
continue;}
if(Y!
=NULL)
Y=Y->Next;
while(Y)
{if(strcmp(Y->cname,kname)==0)
{studentname*Acode=newstudentname;
charName[20];
K->stu.getname(Name);
strcpy(Acode->tname,Name);
Acode->result=Y->grade;
Acode->Next=T->Next;
T->Next=Acode;
activestudnet=activestudnet+1;
break;}
Y=Y->Next;}
K=K->Next;}
return;}
voidtuichu()
{system("cls");
cout<<"\n\n谢谢你使用选修课系统\n\n"< cout<<"\nyou'rewelcome! \n"< getch(); exit(-1);} //总菜单 charmenu() {intk=0; chara[3],c,i; system("cls"); cout< cout<<"*******************************************\n" <<"**\n" <<"*学生选修课系统*\n" <<"**\n" <<"**\n" <<"*操作方式: *\n" <<"*1.选修课系统学生端*\n" <<"**\n" <<"*2.选修课系统管理端*\n" <<"**\n" <<"*******************************************\n"< while (1) {cout<<"\n\t\t请选择登入方式: "; cin>>a; if(strlen(a)==1) {for(i='1';i<='2';i++) {c=i; if(c==a[0]) returnc;} } cerr<<"\n\n\t\t\t\t输入有误! \n"< k++; if(k>2) {system("cls"); cerr<<"\n\n\n\t\t~~提示~~: 错误输入次数超过三次,你将被强制退出! ! \n\n"< cout<<"\t\t按任意键继续"< getch(); tuichu();} } } //选修课系统端操作 charcustom() {charA[10];charb;chari;intk=0; system("cls");; cout<<"\n\n\n" <<"※※※※※※※※※※※※※※※※※※※※※※※※※※\n" <<"※选修课系统学生端※\n" <<"※※\n" <<"※操作方式: .※\n" <<"※1、学生选课※\n" <<"※2、学生情况※\n" <<"※3、选课情况※\n" <<"※4、退出系统※\n" <<"※※\n" <<"※※※※※※※※※※※※※※※※※※※※※※※※※※\n"< while (1) {cout<<"\t\t\t请选择操作方式: "; cin>>A; if(strlen(A)==1) {for(i='1';i<='4';i++) {b=i; if(b==A[0])returnb;} } cerr<<"\n\t\t\t\t输入有误! \n"< k++; if(k>2) {system("cls"); cerr<<"\n\n\t\t\t~~提示~~: 错误输入超过三次! 你将被强制退出! ! \n"< cout<<"\t\t按任意键继续"< getch(); tuichu();} } } charserver() {charA[10];charb;chari;intk=0;system("cls");; cout<<"\n\n\n" <<"※※※※※※※※※※※※※※※※※※※※※※※※※\n" <<"※※\n" <<"※选修课系统管理端※\n" <<"※※\n" <<"※操作方式: ※\n" <<"※1.增加学生2.增加课程※\n" <<"※3.删除学生4.删除课程※\n" <<"※5.填写成绩6.更改学分※\n" <<"※7.学生情况8.选课情况※\n" <<"※9.保存数据0.退出系统※\n" <<"※※\n" <<"※※※※※※※※※※※※※※※※※※※※※※※※※\n"< while (1) {cout<<"\t\t请选择操作方式: "; cin>>
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 学生 选修 课程 系统 课程设计