收藏 分享(赏)

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

上传人:精品资料 文档编号:8667723 上传时间:2019-07-07 格式:DOC 页数:31 大小:269.50KB
下载 相关 举报
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页
点击查看更多>>
资源描述

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

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

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

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

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

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

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

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

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

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

11、lude #include #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); /得到学

12、生的姓名void wrecourse(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; /得到最多可

13、学的课程数目void 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)/得到学生的姓名11 strcpy(N,sname); void student:wrecourse(char

14、N,float score)/要据课程名写入学生课程的成绩 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

15、 (char N,float g)/给学生增加一门课 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 =

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

17、ctivestudnet=0; float readcredit(); /得到课程的学分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

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

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

20、个学生的成绩 studentname *p;p = first;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 =

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

22、(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 ; 14void tuichu() system(“cls“);couta;if(strlen(a)=1) for(i=1;i2) system(“cls“);cerrA;if(strlen(A)=1) for(i=1;i2) system(“cls“);cerrA;if(strlen(A)=1) f

23、or(i=0;i2) cerr=3)system(“cls“);cerrNext;int i;char N20,M20;if(q!=NULL)coutstu.getname(N);coutNext ; q = P-Next;if(q=NULL)return 1;coutN;i=0;18q=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) cout1) coutk; if(ki|kNext;j=0;while(q) q-stu.getname(M);if(strcmp(N,M)

24、=0)j+;if(j=k) if(q-stu.retfactcourse()=q-stu.retmaxcourse() coutNext;char N120;system(“cls“);if(t!=NULL) coutsub.getkname(N1);coutsub.readcredit()Next ; char N220;coutN2;19t = X-Next;while(t) t-sub.getkname(N1);if(strcmp(N1,N2)=0) if(q-stu.findcourse(N2)=1) coutNext;char NA20;while(t) t-sub.getkname

25、(NA);if(strcmp(NA,N2)=0) if(t-sub.retactivestudent()=t-sub.retmaxstudent () coutNext; q-stu.addcourse(N2,0.0);coutNext; cerrNext; return 1; int menu_1_2(studentdb *P,subjectdb *X) /学生情况 studentdb *q=P-Next;char N20;system(“cls“);coutstu.getname(N);coutstu.retfactcourse()Next ; 20char M20;coutM;i=0;q

26、=P-Next;while(q) q-stu.getname(N);if(strcmp(N,M)=0)i+;q = q-Next; int j=0,k=1;if(i=0) cout1) coutk; if(ki|kNext;j=0;q=P-Next;while(q) q-stu.getname(N);if(strcmp(N,M)=0)j+;if(j=k) system(“cls“);course *T=q-stu.retroot();if(T=NULL) coutNext;coutstu.retfactcourse()cnamecname)gradeNext; j=0; q = q-Next;

27、 21coutNext;char N20;system(“cls“);coutsub.getkname(N);coutsub.retactivestudent()Next ; coutN;coutNext = P-Next ;newnode-stu.readname(N);P-Next = newnode ;return 1; int menu_2_2(subjectdb *P) /增加课程 float k;char N20,M20;system(“cls“);coutN;coutNext;while(q) q-sub.getkname(M);if(strcmp(N,M)=0) coutNex

28、t; coutk;coutNext = P-Next ;newnode-sub.setkname(N);newnode-sub.getcredit(k);P-Next = newnode ;return 1; int menu_2_3(studentdb *P) /删除学生 system(“cls“);coutNext;if(q=NULL)return 1;int i;char N20,M20;coutN;i=0;while(q) q-stu.getname(M);if(strcmp(N,M)=0)i+;q = q-Next; int j=0,k=1;if(i=0) cerr1) coutk;

29、 if(ki|kNext;23studentdb *R = P;j=0;while(q) q-stu.getname(M);if(strcmp(N,M)=0)j+;if(j=k) R-Next = q-Next;free(q);coutNext;R = R-Next; return 1; int menu_2_4(subjectdb *P) /删除课程 subjectdb *q=P-Next;char N20;system(“cls“);coutsub.getkname(N);coutNext ; q = P-Next;subjectdb *R = P;if(q=NULL)return 1;c

30、har M20;coutM;while(q) q-sub.getkname(N);if(strcmp(N,M)=0) R-Next = q-Next;free(q);coutNext;R = R-Next; 24cerrNext;char M20,N20,NA20;float score;system(“cls“);coutsub.getkname(N);coutsub.retactivestudent()Next ; q = P-Next;coutM;while(q) q-sub.getkname(N);studentname *K = q-sub.retfirst();if(K!=NULL

31、)K = K-Next;if(strcmp(N,M)=0) system(“cls“);if(K!=NULL) couttnamescore;studentdb *XX = X-Next;while(XX) XX-stu.getname(NA);if(strcmp(NA,K-tname)=0)XX-stu.wrecourse(M,score);XX = XX-Next; K = K-Next; if(K=NULL)coutNext; cerrNext;char N20,M20;if(q!=NULL)coutsub.getkname(N);coutNext ; q = P-Next;coutM;

32、while(q) q-sub.getkname(N);if(strcmp(N,M)=0) coutsub.readcredit()k;q-sub.getcredit(k);coutNext; cerrNext;char N20;system(“cls“);coutstu.getname(N);coutNext ; coutNext;char M20,N20;system(“cls“);coutsub.getkname(N);coutsub.retactivestudent()Next ; q = P-Next;coutM;while(q) q-sub.getkname(N);studentna

33、me *K = q-sub.retfirst();if(K!=NULL)K = K-Next;if(strcmp(N,M)=0) system(“cls“);if(K=NULL) cerrtnametname)resultNext; coutNext; cerrNext;subjectdb *X = P-Next;system(“cls“);fstream file(“subject.txt“,ios:out);while(X) file.write (char *)X = X-Next; file.close();fstream file1(“student.txt“,ios:out);fs

34、tream file2(“course.txt“,ios:out);while(Z) file1.write (char *)int time = Z-stu.retfactcourse();course *co = Z-stu.retroot(),*co1;if(co!=NULL)co1 = co-Next;while(time) file2.write(char *)(co1),sizeof(*co1);co1 = co1-Next;time = time - 1; Z = Z-Next; file2.close ();file1.close();coutNext = NULL;subje

35、ct M;fstream file(“subject.txt“,ios:in);while(1) file.read(char *)if(!file) break;Q-Next = new subjectdb;Q-Next -Next = NULL;Q-Next -sub = M;Q = Q-Next; file.close ();studentdb *Y = new studentdb,*X=Y;28Y-Next=NULL;student N;course O;fstream file1(“student.txt“,ios:in);fstream file2(“course.txt“,ios

36、:in);while(1) file1.read(char *)if(!file1) break;Y-Next = new studentdb;Y-Next -Next = NULL;Y-Next -stu = N;int time = N.retfactcourse();Y-Next-stu.clrroot ();while(time) file2.read (char *)if(!file2) break;Y-Next-stu.addcourse(O.cname ,O.grade);time-; Y=Y-Next; file2.close ();file1.close ();Q=P-Nex

37、t;while(Q) Q-sub.clractivestudnet();Q-sub.findstudent(X);Q = Q-Next; char c;char b;int br=1;b = menu();if(b=1) while(1) c = custom();switch(c)case 1:br = menu_1_1(X,P);getch();break; /学生选课case 2:br = menu_1_2(X,P);getch();break; /学生情况case 3:br = menu_1_3(P);getch(); break; /选课情况case 4:br = menu_1_4(

38、X,P); break; /退出系统if (br = 0) break; if(b=2) password();while(1) c = server();switch(c)case 1:br = menu_2_1(X);getch(); break; /增加学生29case 2:br = menu_2_2(P);getch(); break; /增加课程case 4:br = menu_2_4(P);getch(); break; /删除课程case 3:br = menu_2_3(X);getch(); break; /删除学生case 5:br = menu_2_5(X,P);getch

39、();break; /填写成绩case 6:br = menu_2_6(P);getch(); break; /更改学分case 7:br = menu_2_7(X);getch(); break; /学生情况case 8:br = menu_2_8(P);getch(); break; /选课情况case 9:br = menu_2_9(X,P);getch();break; /保存数据case 0:br = menu_2_0(); break; /退出系统if (br = 0)break;return 0; 参考文献谭浩强编,C+面向对象程序设计(含实验指导书) ,清华大学出版社,2008.9朱战立等著, C+面向对象程序设计,人民邮电出版社;郑莉著, C+ 语言程序设计(含实验指导书) 。 清华大学出版社 ( 结构化程序设计部分 ) 钱能主编 ,C+ 程序设计教程,清华大学出版社, 2000.11 戴锋编著, Visual C+ 程序设计基础 , 清华大学出版社 ,2001.4 吕日著, C+ 程序设计教程,清华大学出版社, C+ 大学教程,美国 Harvey M.Deitel 等理学院课程设计评分表课题名称: 学生选修课程系统

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报