课程设计报告课程设计题目:学生选课系统设计学号:201121080629姓名:王洁专业:软件工程班级:1121821指导教师:许志文2012年6月28日课程设计评分表学生姓名:王洁班级:1121821学号:201120180629课程设计题目:学生选课系统设计项目内容满分实评选题能结合所学课程知识、有一定的能力训练。符合选题要求(5人一题)10工作量适中,难易度合理10能力水平能熟练应用所学知识,有一定查阅文献及运用文献资料能力10理论依据充分,数据准确,公式推导正确10能应用计算机软件进行编程、资料搜集录入、加工、排版、制图等10能体现创造性思维,或有独特见解10成果质量总体设计正确、合理,各项技术指标符合要求。10说明书综述简练完整,概念清楚、立论正确、技术用语准确、结论严谨合理;分析处理科学、条理分明、语言流畅、结构严谨、版面清晰10设计说明书栏目齐全、合理,符号统一、编号齐全。格式、绘图、表格、插图等规范准确,符合国家标准10有一定篇幅,字符数不少于500010总分100指导教师评语:指导教师签名:年月日一.面向对象程序设计课程设计的目的本课程设计是在学习面向对象基本理论之后的实践教学环节。该实践教学是软件设计的综合训练,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能和技巧。要求学生在设计中逐步提高程序设计能力,培养科学的软件工作方法。学生通过课程设计在下述各方面得到锻炼:1.能根据实际问题的具体情况,结合面向对象的基本理论和基本技巧,正确分析问题,并能设计出解决问题的有效算法与程序。2.提高程序设计和调试能力。学生通过上机实习,验证自己设计的算法和程序的正确性。学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改,进一步提高程序设计水平。题目10学生选课系统设计假定有n门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于10)自由选课。试设计一选修课程系统,使之能提供以下功能:系统以菜单方式工作课程信息录入功能(课程信息用文件保存)--输入课程信息浏览功能--输出查询功能:(至少一种查询方式)--算法按学分查询按课程性质查询学生选修课程(可选项#includestring.h#includestdio.h#includeiostream.h#includestdlib.h#includeiomanip.h#includefstream.h#includeconio.h/////////////////////////////////////////////////////////////////////////////定义课程structcourse//某个学生所学的课程中的某一个{charcname[20];//课程名称floatgrade;//课程成绩course*Next;//指向下一个课程的指针};/////////////////////////////////////////////////////////////////////////////学生类classstudent{public:student(){root=NULL;constmaxcourse=5;factcourse=0;}voidreadname(charN[]);//读入学生的姓名voidgetname(charN[]);//得到学生的姓名voidwrecourse(charN[],floatscore);//要据课程名写入学生课程的成绩floataverage();//学生课程的平均成绩voidaddcourse(charN[],floatg);//给学生增加一门课intfindcourse(charN[]);//查找是否已有此课程,如果有返回1,如果没有返回0intretfactcourse(){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[])//查找是否已有此课程,如果有返回1,如果没有返回0{course*p=root;if(root==NULL)return0;p=p-Next;while(p){if(strcmp(p-cname,N)==0)return1;p=p-Next;}return0;}/////////////////////////////////////////////////////////////////////////////////////////////structstudentdb{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;//返回最多学生数30}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\t\t\t谢谢你使用选修课小系统\t再见\n\nendl;cout\n\t如果你觉得此软件有修改及补充之处,请按以下方式联系我们,\n\t提出你的宝贵意见.我们将不断地改进并及时的公布新版本。谢谢!!\n\nendl;cout\t\t联系方式:\n\t\t姓名:王洁\n\n\t\t电话:0000-1234567\n\n\t