c学生选修课程系统课程设计.doc

上传人:罗晋 文档编号:6059177 上传时间:2020-09-02 格式:DOC 页数:31 大小:236KB
返回 下载 相关 举报
c学生选修课程系统课程设计.doc_第1页
第1页 / 共31页
c学生选修课程系统课程设计.doc_第2页
第2页 / 共31页
c学生选修课程系统课程设计.doc_第3页
第3页 / 共31页
c学生选修课程系统课程设计.doc_第4页
第4页 / 共31页
c学生选修课程系统课程设计.doc_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《c学生选修课程系统课程设计.doc》由会员分享,可在线阅读,更多相关《c学生选修课程系统课程设计.doc(31页珍藏版)》请在三一文库上搜索。

1、目录封面1任务书1一、需求分析51.1、系统设计目的与意义 51.2、系统功能需求(系统流程图)51.3、输入输出的要求6二、结构设计6三、界面设计与各功能模块实现.7四、系统调试8五、使用说明及编程体会95.1、使用说明 9 5.2、编程体会 13附件 13参考文献 32评分表 33(一)需求分析1.1、系统设计目的与意义当今时代是飞速发展的信息时代。在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。计算机的最大好处在于利用它能够进行信息管理。使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。计算

2、机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。 本系统就是为了管理好选课信息而设计的。学校作为一种信息资源的集散地,学生和课程繁多,包含很多的信息数据的管理,现今,有很多的学校都是初步开始使用,甚至尚未使用计算机进行信息管理。根据调查得知,他们以前对信息管理的主要方式是基于文本、表格等纸介质的手工处理,对于选课情况的统计和查询等往往采用对课程的人工检查进行,对学生的选课权限、以及选课代号等用人工计算、手抄进行。数据信息处理工作量大,容易出错;由于数据繁多,容易丢失,且不易查找。总的来说,缺乏系统,规范的信息管理手段。尽管学校都有计算机,但是尚未用于信息管理,没有发挥它

3、的效力,资源闲置比较突出,这就是管理信息系统的开发的基本环境。数据处理手工操作,工作量大,出错率高,出错后不易更改。学校采取手工方式对学生选课情况进行人工管理,由于信息比较多,选课信息的管理工作混乱而又复杂;一般选课情况是记录在文件上,课程的数目和代号也记录在文件中,学校的工作人员也只是当时对它比较清楚,时间长了,如再要进行查询,就得在众多的资料中翻阅、查找了,造成查询费时、费力。如要对很长时间以前的选课进行更改就更加困难了。 基于这些问题,我认为有必要建立一个学生选课系统,使选课管理工作规范化,系统化,程序化,避免选课管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改

4、选课情况。1.2、系统功能需求(系统流程图)主 模 块学生模块管理员模块学生选课学生情况选课情况 退出系统 增加课程删除学生删除课程 填写成绩 更改学分 学生情况选课情况保存数据 增加学生退出系统1.3、输入输出的要求(1) 输入:确定与功能有关的所有输入信息,包括数据来源、意义、格式、接收方法、数量、输入范围及处理方法,必须说明时间要求、优先顺序、操作控制和使用的输入设备(媒体)。(2) 输出:对错误输入提示(二)结构设计(1)(ER图);(2)类层次图 StudentSubjectCourse(三)界面设计与各功能模块实现界面设计1、 主界面:* * 选修课小系统 * * * 操作方式:

5、* 1.选修课系统学生端 * * 2.选修课系统管理端 * *2、选修课系统学生端: 选修课系统学生端 操作方式: 1.学生选课 2.学生情况 3.选课情况 4.退出系统 3、选修课系统管理端 : 选修课系统管理端 操作方式: 1.增加学生 2.增加课程 3.删除学生 4.删除课程 5.填写成绩 6.更改学分 7.学生情况 8.选课情况 9.保存数据 0.退出系统 (四)系统调试在这一节中,主要解决的了两个问题,一个是系统的联机文档,另一个是系统的测试,下面我们分别加以说明。作为一个完整的系统,联机文档是其中不可缺少的部分也是相当重要的部分。好的文档能够使用户快速了解并准确的使用系统的各项功能

6、。减少误操作,减少错误产生的可能,这对用户和开发人员都有很多的好处。所以在开发本系统中,也加入了不少的文档,除了对于四大模块的详细说明外,对于易出错和不易操作的地方(如多条件查询部分)又作了详细的说明。 由于本身能力的局限性,所以做编写的代码,即使经过反复检查也难免出错所以在本阶段力求使用有限的时间找出尽可能多的错误,力求系统尽量正确。我们在本系统的测试中使用了黑盒法(即不关心程序内部的逻辑结构,而是根据程序的功能来设计是检测)请一位不熟悉本系统的人来进行随意性的操作,打破习惯的操作顺序,从中发现错误,在此阶段系统的大量错误得到了改正。 信息管理系统所涉及的数据库设计的重要步骤加载测试。加载测

7、试工作贯穿于程序测试工作的全过程,整个录入、修改、查询、处理工作均可视为对数据库的加载测试工作。要设计出一个好的信息管理系统数据库,除满足系统所要求的功能外,还必须遵守下列原则:1)基本表的个数越少越好。2) 主键的个数越少越好。键是表间连接的工具,主键越少,表间的连接就越简单。3)字段的个数越少越好。4) 所有基本表的设计均应尽量符合第三范式。数据库的设计中,如何处理多对多的关系和如何设计主键,是两个有着较大难度、需要重点考虑的问题。 例如:-Configuration: 8 - Win32 Debug-Compiling.9.cppE:新建文件夹9.cpp(53) : error C253

8、5: _thiscall student:student(void) : member function already defined or declared E:新建文件夹9.cpp(24) : see declaration of student:student执行 cl.exe 时出错.9.obj - 1 error(s), 0 warning(s)改正:将中的去掉(五)使用说明及编程体会5.1使用说明1、登录首先,运行学生选课系统,出现学生选课系统画面 :2、进入选修课系统学生端当主菜单出现后,在“请选择登录方式:”后输入“1”,就进入了“选修课系统学生端”,界面如下:3、选课在“请

9、选择操作方式: ”输入“1”,进入网上选课系统,请首先进入课程预览菜单,预览自己的课程表,学生自行选课后,也可进入课程预览菜单,查看选课结果。课程表中已有的课程为教务处按各班教学计划整班指定上去的,不得自行退选4、管理员登录管理员密码admin。用管理员帐号登录可以查看每个人的选课,及退课情况。(1)如密码正确,则出现以下界面:此时,管理员可以在“请选择操作方式: ”后输入相应的数字,比如数日“1”,那么所执行的操作就是:增加学生,则出现以下界面: (2)若密码不正确,则出现界面第一次密码错误第二次密码错误5 、退出系统 (1)学生选课完成后可以按“4”退出选课系统,以防他人修改数据。(2)密

10、码错误次数超过3次,可按任意键退出,界面如下:5.2编程体会 刚看到这个课程设计题目时,觉得这个课题比较难。今天回过去看看,却十分的欣慰,因为通过我们的努力终于完成了。虽然这不是我读大学以来第一次做课程设计,但却是花费心血最多的一次,这是对我这学期学习下来最好的检验。经过这次课程设计,我的能力有了很大的提高,比如操作能力、分析问题的能力、合作精神、严谨的工作作风等方方面面都进步了。 还要特别感谢老师对我的悉心指导,帮我理清设计思路,指导操作方法,并对我所做的设计方案提出有效的改进方案。老师渊博的知识、严谨的作风、诲人不倦的态度和学术上精益求精的精神让我受益终生。附件:#include #inc

11、lude #include #include using namespace std; /定义课程class course /某个学生所学的课程中的某一个public:char cname20; /课程名称float grade; /课程成绩course *Next; /指向下一个课程的指针;/学生类class studentpublic:student()root = NULL;const int maxcourse = 5;factcourse = 0;void readname(char N ); /读入学生的姓名void getname(char N); /得到学生的姓名void wr

12、ecourse(char N,float score); /要据课程名写入学生课程的成绩float average(); /学生课程的平均成绩void addcourse(char N,float g); /给学生增加一门课int findcourse(char N); /查找是否已有此课程,如果有返回,如果没有返回int retfactcourse() return factcourse; /得到所学的课程数目course *retroot() return root; /利用键表将所有的课程保存起来int retmaxcourse() return 5; /得到最多可学的课程数目void

13、clrroot() /清零root = NULL;factcourse = 0;private:char sname20; /学生的姓名int maxcourse; /学生最多可以学五门课程int factcourse; /学生实际所学的课程数目course *root; /课程的根结点指针;void student:readname (char N)/读入学生的姓名 strcpy(sname,N); void student:getname(char N)/得到学生的姓名 strcpy(N,sname); void student:wrecourse(char N,float score)/

14、要据课程名写入学生课程的成绩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;float student:average()/学生课程的平均成绩float aver=0.0;course *p = root;while (p) aver = aver+p-grade; aver = aver/factcourse;return aver; void student:addcourse (char N,float g)/

15、给学生增加一门课course *s = new course;s-Next=NULL;if(root = NULL)root = s;course *p = root;course *newcourse = new course;newcourse-Next = p-Next;p-Next=newcourse;strcpy(newcourse-cname,N);newcourse-grade = g;factcourse+;int student:findcourse (char N)/查找是否已有此课程,如果有返回,如果没有返回course *p = root;if(root=NULL)re

16、turn 0;p = p-Next;while(p) if(strcmp(p-cname,N)=0)return 1;p = p-Next;return 0; class studentdbpublic:student stu;studentdb *Next; ;struct studentnamechar tname20; /学生的名字float result; /学生所得的该课程分数studentname *Next; ; /课程类class subjectpublic:subject()first = NULL;maxstudent=30;activestudnet=0; float r

17、eadcredit(); /得到课程的学分void getcredit(float a); /设置学分float getaverage(); /得到学生的平均成绩float getresult(char N); /查找某个学生的成绩void getkname(char N); /读出课程的名称void setkname(char N); /读入课程的名称studentname *retfirst() return first; /返回根结点void findstudent(studentdb *P); /根据该课程的名称,寻找选这课程的学生int retactivestudent() retu

18、rn activestudnet; /返回实际学生数int retmaxstudent() return 30; /返回最多学生数void clractivestudnet() activestudnet = 0; /从文件中读出来后将实际学生数清零private:int maxstudent; /最多学生数int activestudnet; /实际学生数studentname *first; /学生名单float credit; /该课程的学分float averagerusult; /该课程的平均成绩char kname20; /该课程的名称;float subject:readcred

19、it ()/得到课程的学分 return credit; void subject:getcredit (float a)/设置学分 credit=a; float subject:getaverage()/得到学生的平均成绩float k = 0.0;studentname *p;p=first-Next;if(p=NULL)return 0;while(p)k = k + p-result;p = p-Next ; return k/activestudnet; float subject:getresult (char N) /查找某个学生的成绩studentname *p;p = fi

20、rst;while(p)if(strcpy(p-tname ,N)=0)return p-result;p = p-Next ; return -1; void subject:getkname (char N) /读出课程的名称 strcpy(N,kname); void subject:setkname (char N) /读入课程的名称 strcpy(kname,N); void subject:findstudent(studentdb *P) /根据该课程的名称,寻找选这课程的学生studentname *newcode = new studentname;newcode-Next=

21、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 = new studentname;char Name20;K-stu.getname(Name);strcpy(Acode-tname,Name);Acode-result

22、= Y-grade;Acode-Next = T-Next;T-Next = Acode;activestudnet = activestudnet + 1;break; Y = Y-Next; K = K-Next; return ; void tuichu()system(cls);coutnn谢谢你使用选修课系统nnendl;coutn youre welcome ! nendl; getch();exit(-1); /总菜单char menu()int k=0;char a3,c,i;system(cls);coutendlendl;cout*n* *n* 学生选修课系统 *n* *n

23、* *n* 操作方式: *n* 1.选修课系统学生端 *n* *n* 2.选修课系统管理端 *n* *n*nendl;while(1)couta;if(strlen(a)=1)for(i=1;i=2;i+)c=i;if(c=a0)return c; cerrnntttt输入有误!n2)system(cls);cerrnnntt提示:错误输入次数超过三次,你将被强制退出!nnendl;couttt按任意键继续endl;getch();tuichu(); /选修课系统端操作char custom()char A10;char b;char i;int k = 0;system(cls);coutn

24、nnn 选修课系统学生端 n n 操作方式:. n 1、 学生选课 n 2、 学生情况 n 3、 选课情况 n 4、 退出系统 n nnendl;while(1)coutA;if(strlen(A)=1)for(i=1;i=4;i+)b=i;if(b=A0) return b; cerrntttt输入有误!n2)system(cls);cerrnnttt提示:错误输入超过三次!你将被强制退出!nendl;couttt按任意键继续endl;getch();tuichu(); char server()char A10;char b;char i;int k = 0;system(cls);cou

25、tnnnn n 选修课系统管理端 n n 操作方式: n 1.增加学生 2.增加课程 n 3.删除学生 4.删除课程 n 5.填写成绩 6.更改学分 n 7.学生情况 8.选课情况 n 9.保存数据 0.退出系统 n nnendl;while(1)coutA;if(strlen(A)=1)for(i=0;i=9;i+)b=i;if(b=A0)return b; cerrntttt输入有误!n2)cerr错误输入超过三次!n;exit(-1); /密码检查void password()int k=0,i;char A=admin;char B10;char a;system(cls);for(i

26、=0;i8;i+)coutendl;while(k=2)printf(ttt请输入管理员密码:);i=0;while(1)a=getch();if(a=13)break;Bi=a;i+;printf(*);Bi=0;if(strcmp(A,B)=0)return;elsek+;cerrnnttt密码输入错误!请重新输入!n=3)system(cls);cerrnnttt输入错误密码超过三次!请按任意键退出.endl;getch();tuichu();struct subjectdbsubject sub;subjectdb *Next;int menu_2_7(studentdb *P);in

27、t menu_2_9(studentdb *Y,subjectdb *P);int menu_2_8(subjectdb *P);/学生端功能函数int menu_1_1(studentdb *P,subjectdb *X) /学生选课system(cls);coutnntttt学生选课操作Next;int i;char N20,M20;if(q!=NULL)coutnnntt所有学生名单如下:nendl;elsecerrnnntt对不起,暂无学生名单!请先创建!请按任意键继续.stu.getname(N);coutttttN;coutNext ; q = P-Next;if(q=NULL)r

28、eturn 1;coutN;i=0;q=P-Next;while(q)q-stu.getname(M);if(strcmp(N,M)=0)i+;q = q-Next; int j=0,k=1;if(i=0)coutnntt没有这个学生! 请按任意键返回.1)coutnntt共找到i个姓名为N的学生endl;coutk; if(ki|k=0)cerrnttt输入有误!按任意键继续Next;j=0;while(q)q-stu.getname(M);if(strcmp(N,M)=0)j+;if(j=k)if(q-stu.retfactcourse()=q-stu.retmaxcourse()cout

29、ntt所选课程已满!按任意键继续Next;char N120;system(cls);if(t!=NULL)coutnnntt所有课程如下:endl;coutntttt课程名称tt 学分endl; elsecerrnnntt对不起,暂时没有课程sub.getkname(N1);couttttt N1setw(26-strlen(N1)sub.readcredit()Next ; char N220;coutN2;t = X-Next;while(t)t-sub.getkname(N1);if(strcmp(N1,N2)=0)if(q-stu.findcourse(N2)=1)coutntt此课程你已选过了,不能再选.按任意键继续Next;char NA20;while(t)t-sub.getkname(NA);if(strcmp(NA,N2)=0)if(t-sub.retactivestudent()=t-sub.retmaxstudent ()coutntt此课程已选满,不能选.按任意键继续Next; q-stu.addcourse(N2,0.0);coutnntt选课成功!按任意键继续endl;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1