《学生选课系统C++(共34页).doc》由会员分享,可在线阅读,更多相关《学生选课系统C++(共34页).doc(34页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上课程设计报告课程设计题目: 学生选课系统设计 学 号:9姓 名:王洁专 业:软件工程班 级:指导教师:许志文 2012年 6 月28 日课程设计评分表学生姓名: 王洁 班级: 学号:9课程设计题目:学生选课系统设计项目内容满分实 评选题能结合所学课程知识、有一定的能力训练。符合选题要求(5人一题)10工作量适中,难易度合理10能力水平能熟练应用所学知识,有一定查阅文献及运用文献资料能力10理论依据充分,数据准确,公式推导正确10能应用计算机软件进行编程、资料搜集录入、加工、排版、制图等10能体现创造性思维,或有独特见解10成果质量总体设计正确、合理,各项技术指标符合要
2、求。10说明书综述简练完整,概念清楚、立论正确、技术用语准确、结论严谨合理;分析处理科学、条理分明、语言流畅、结构严谨、版面清晰10设计说明书栏目齐全、合理,符号统一、编号齐全。格式、绘图、表格、插图等规范准确,符合国家标准10有一定篇幅,字符数不少于500010总 分100指导教师评语: 指导教师签名: 年 月 日一面向对象程序设计课程设计的目的本课程设计是在学习面向对象基本理论之后的实践教学环节。该实践教学是软件设计的综合训练,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能和技巧。要求学生在设计中逐步提高程序设计能力,培养科学的软件工作方法。学生通过课程设计在下述各方面得到锻炼
3、:1能根据实际问题的具体情况,结合面向对象的基本理论和基本技巧,正确分析问题,并能设计出解决问题的有效算法与程序。2提高程序设计和调试能力。学生通过上机实习,验证自己设计的算法和程序的正确性。学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改,进一步提高程序设计水平。题目10 学生选课系统设计假定有n门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于10)自由选课。试设计一选修课程系统,使之能提供以下功能: 系统以菜单方式工作v 课程信息录入功能(课程信息用文件保存)输入v 课程信息浏览功能输出v 查询
4、功能:(至少一种查询方式)算法v 按学分查询l 按课程性质查询l 学生选修课程(可选项)v#include #include #include #include #include #include #include /定义课程struct course /某个学生所学的课程中的某一个char cname20; /课程名称float grade; /课程成绩course *Next; /指向下一个课程的指针;/学生类class studentpublic:student()root = NULL;const maxcourse = 5;factcourse = 0;void readname(c
5、har N ); /读入学生的姓名void getname(char N); /得到学生的姓名void wrecourse(char N,float score); /要据课程名写入学生课程的成绩float average(); /学生课程的平均成绩void addcourse(char N,float g); /给学生增加一门课int findcourse(char N); /查找是否已有此课程,如果有返回1,如果没有返回0int retfactcourse()return factcourse; /得到所学的课程数目course *retroot()return root; /利用键表将所
6、有的课程保存起来int retmaxcourse()return 5; /得到最多可学的课程数目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)/得到学生的姓名strcpy(N,s
7、name);void student:wrecourse(char 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
8、 aver;void student:addcourse (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)/查找是否已有此课
9、程,如果有返回1,如果没有返回0course *p = root;if(root=NULL)return 0;p = p-Next;while(p)if(strcmp(p-cname,N)=0)return 1;p = p-Next;return 0;/struct studentdbstudent stu;studentdb *Next;struct studentnamechar tname20; /学生的名字float result; /学生所得的该课程分数studentname *Next;/课程类class subjectpublic:subject()first = NULL;ma
10、xstudent=30;activestudnet=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); /根据该课程的名称,寻找
11、选这课程的学生int retactivestudent()return activestudnet; /返回实际学生数int retmaxstudent()return 30; /返回最多学生数30void clractivestudnet()activestudnet = 0; /从文件中读出来后将实际学生数清零private:int maxstudent; /最多学生数int activestudnet; /实际学生数studentname *first; /学生名单float credit; /该课程的学分float averagerusult; /该课程的平均成绩char kname2
12、0; /该课程的名称;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)return 0;while(p)k = k + p-result;p = p-Next ;return k/activestudnet;float subject:getresult (char N) /查找某
13、个学生的成绩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 = new stud
14、entname;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(Acode-tname,N
15、ame);Acode-result = Y-grade;Acode-Next = T-Next;T-Next = Acode;activestudnet = activestudnet + 1;break;Y = Y-Next;K = K-Next;return ;/void tuichu()system(cls);coutnnttt谢谢你使用选修课小系统t再见nnendl;coutnt 如果你觉得此软件有修改及补充之处,请按以下方式联系我们,nt提出你的宝贵意见.我们将不断地改进并及时的公布新版本。谢谢!nnendl;couttt联系方式:ntt 姓名:王洁nntt 电话:0000-nntt
16、 Email:nntt 学校地址:东华理工大学t邮政编码:nnnendl;getch();exit(-1);/总菜单char menu()int k=0;char a3,c,i;system(cls);coutendlendl;coutttttC+课程设计课题nnendl;couttt*ntt* *ntt* 选修课小系统 *ntt* *ntt* *ntt* 操作方式: *ntt* 1.选修课系统学生端 *ntt* *ntt* 2.选修课系统管理端 *ntt* *ntt*nendl;while(1)couta;if(strlen(a)=1)for(i=1;i=2;i+)c=i;if(c=a0)r
17、eturn c;cerrnntttt输入有误!n2)system(cls);cerrnnntt提示:错误输入次数超过三次,你将被强制退出!nnendl;couttt按任意键继续endl;getch();tuichu();/选修课系统端操作char custom()char A10;char b;char i;int k = 0;system(cls);coutnnnttntt选修课系统学生端 ntt ntt 操作方式:. ntt1.学生选课. ntt2.学生情况. ntt3.选课情况. ntt4.退出系统. ntt nttnendl;while(1)coutA;if(strlen(A)=1)f
18、or(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);coutnnnttntt ntt 选修课系统管理端 ntt ntt .操作方式: ntt 1.增加学生 2.增加课程 ntt 3.删除学生 4.删除课程 ntt 5.填写成绩 6.更改学分 ntt 7.学生情况 8.
19、选课情况 ntt 9.保存数据 0.退出系统 ntt nttnendl;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=;char B10;char a;system(cls);for(i=0;i8;i+)coutendl; while(k=2)printf(ttt请输入管理员密码:);i=0;while(1)a=getch();if(a=13)break;B
20、i=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);int menu_2_9(studentdb *Y,subjectdb *P);int menu_2_8(subjectdb *P);/学生端功能函数int menu_1_1
21、(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)return 1;coutN;i=0;q=P-Next;while(q)q-stu.getname(M);if(strcmp(N,M)=0)i+;q = q-Next;int j=
22、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()coutntt所选课程已满!按任意键继续Next;char N120;system(cls);if(t!=NULL)coutnnntt所有课程如下:endl;coutntttt课程名称tt
23、学分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.retac
24、tivestudent()=t-sub.retmaxstudent () coutntt此课程已选满,不能选.按任意键继续Next;q-stu.addcourse(N2,0.0);coutnntt选课成功!按任意键继续Next;cerrntt没有此课程!按任意键继续Next;return 1;int menu_1_2(studentdb *P,subjectdb *X) /学生情况studentdb *q=P-Next;char N20;system(cls);coutnntttt学生情况操作endl;int i;if(q!=NULL)coutnnntt所有学生选课信息如下:nendlendl
25、;couttt 姓名ttt选课情况nendl;elsecerrnnntt对不起,暂时没有学生名单!请按任意键继续.stu.getname(N);couttt Nsetw(25-strlen(N) 已选 stu.retfactcourse() 门课 Next ;char M20;coutM;i=0;q=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)coutnttt没找到这个学生!请按任意键继续.1)coutntt共找到i个姓名为M的学生endl;coutk;if(ki|k=0)cerrnttt输入有误!按任意键继续.Next;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)coutnnntttN同学你还未选课! 请按任意键继续.Next;coutnnnttN同学你已选stu.retfactcourse()门课,具体如下nnendl;coutttt课程名称tt成绩nendl;while(T)coutttt cnamecname)gradeNext;j=0;q = q-Next;
限制150内