课程设计01.docx
- 文档编号:4949655
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:21
- 大小:91.32KB
课程设计01.docx
《课程设计01.docx》由会员分享,可在线阅读,更多相关《课程设计01.docx(21页珍藏版)》请在冰豆网上搜索。
课程设计01
面向对象程序设计
课程设计报告
题目:
学生成绩管理
设计者:
荣灿
班级:
计科4班
学号:
1250312072
指导教师:
郭波
2014年6月8日
目录
1问题描述及要求1
2需求分析1
3系统模型1
4面向对象设计要点1
5系统难点分析1
6测试分析1
7课程设计总结1
8参考资料1
设计题目
1问题描述及要求
1,定义学生(student)类,其中至少包括姓名、性别、学号、班级和四门功课的成绩。
2,实现下面的功能
1、设计菜单实现功能选择;
2、输入功能:
输入学生信息,并保存到文件中;
3、计算每个学生的总分与平均分并排序
4、能根据学号修改学生信息
5、能根据学号删除学生信息
6、查询功能:
1)能够根据学号查询学生信息;
2)能够根据姓名、班级查询学生信息
3)统计学生成绩,按照班级和科目计算平均分。
2需求分析
系统应包括记录编辑和记录查询等功能模块。
记录编辑功能完成学生记录编辑的记录增加、记录删除和记录查询,记录排序等功能。
记录查询功能可以对数据集中的记录进行查询,要求按学生学号进行精确查询,按学生姓名、班级进行模糊查询。
3系统模型
3.1类图(包含类名,类属性,类操作,以及类之间的联系)
Student
--特性
+name
+number
+classnumber
+sex
+istream&operator>>(istream&input,Student&st)
--操作
+Get_name()
+Get_number()
+Get_sex()
+Get_classnumber()
+voidloaddata(Student&)
+floatsum
+floatave_score
+floatscore[num_subject]
3.2类描述
只定义了一个学生类
classStudent
{
public:
stringGet_name();
stringGet_number();
stringGet_sex();
stringGet_classnumber();
friendvoidloaddata(Student&);/*从文件中读取记录*/
voidset_info();//设置学生信息
voidprint();//显示学生信息
floatsum;//总分
floatave_score;//平均分
floatscore[num_subject];//四门成绩
private:
stringname;//姓名
stringnumber;//学号
stringclassnumber;//班级
stringsex;//性别
};
3.3系统总体流程
4面向对象设计要点
系统运用到了面向对象设计中的类的知识点,定义了学生类。
以及运用到了容器vector的操作和ofstreamarchive文件的操作。
5系统难点分析
vetor,的使用问题。
以前没有接触过vector,不知道怎么使用,老师给了实例,给时间我们熟悉,教我们怎么使用,最后能够使用vectoe了,还有系统在调试时出错,无法运行,在同学的帮助下也解决了。
6测试分析
1进入主界面
2添加记录
3显示全部记录
4查询学生信息
5修改学生信息
6删除学生信息
7课程设计总结
通过这次课程设计,对c++的了解进一步加深,学习了一些课堂上没有的知识,非常感谢指导老师的帮助,无论在理论上还是在实践中,都给与我很大的帮助,使我得到很大的提高,为我指明了方向,避免了走弯路的可能。
8参考资料
面向对象程序设计教程(c++语言描述)
C++Primer中文版(第四版)
源程序
#include
#include
#include
#include
#include
usingnamespacestd;
#definenum_subject4
conststringsubject_[num_subject]={"高数","英语","C++","马基"};
classStudent
{
public:
stringGet_name();
stringGet_number();
stringGet_sex();
stringGet_classnumber();
friendvoidloaddata(Student&);
floatsum;
floatave_score;
floatscore[num_subject];
private:
stringname;
stringnumber;
stringclassnumber;
stringsex;
friendistream&operator>>(istream&input,Student&st)
{floatsum1=0;
cout<<"\n\t请输入学生的信息:
"< cout<<"\t\t\t请输入姓名: "; input>>st.name; cout<<"\n\t\t\t请输入学号: "; input>>st.number; cout< cout<<"\t\t\t请输入性别: "; input>>st.sex; cout< cout<<"\t\t\t请输入班级: "; input>>st.classnumber; cout<<"\n\t\t\t请输入四门功课的成绩: "; for(inti=0;i {input>>st.score[i]; sum1+=st.score[i]; } st.sum=sum1; st.ave_score=sum1/num_subject; returninput; } friendostream&operator<<(ostream&output,Student&st) {output< < for(inti=0;i output<<'\t'< output<<'\t'< returnoutput; } }; vector vector : iteratorIterator; Studentstud; boolComp(constStudent&a,constStudent&b); voiddispTable(); voidInput(); voidDisplay(); voidSort(); voidUpdata(); voidDelete(); voidfind(); voidQuerybyName(); voidQuerybyNumner(); voidManagerinfo(); voidsave(); intmenuSelect(); voidhandleMenu(); voidstart(); voiddispTable()//表头 {cout<<"学号\t名字\t班级\t性别"; for(inti=0;i cout<<'\t'< cout<<"\t总分\t平均分\t\n"; } boolComp(constStudent&a,constStudent&b){ if(a.sum! =b.sum)returna.sum>b.sum; elsereturna.sum>b.sum; } inlinestringStudent: : Get_classnumber() {returnclassnumber;} inlinestringStudent: : Get_name() {returnname;} inlinestringStudent: : Get_number() {returnnumber;} inlinestringStudent: : Get_sex() {returnsex;} voidInput() {charch[2]; do {cin>>stud; stu.push_back(stud); cout<<"\t\t\tdoyouwantaddmore? (Y|N): "; cin>>ch; }while(ch[0]=='y'||ch[0]=='Y'); } voidDisplay() {if(stu.empty()){cout<<"\t\t\t当前没有记录,请先添加记录! \n";return;} elsedispTable(); for(Iterator=stu.begin();Iterator! =stu.end();Iterator++) {cout<<(*Iterator);} } voidSort() {if(stu.empty()) {cout<<"\t\t\t当前没有记录,请先添加记录! \n";return;} sort(stu.begin(),stu.end(),Comp); cout<<"\n } voidUpdata() {if(stu.empty()){cout<<"\t\t\t当前没有记录,请先添加记录! \n";return;} stringid;charch[2];boolmark=true; cout<<"请输入需修改的学生的学号: "; cin>>id; for(Iterator=stu.begin();Iterator! =stu.end();Iterator++) {if((*Iterator).Get_number()==id) {dispTable();mark=false; cout<<(*Iterator); cout<<"您确定要修改此条记录? (Y|N)"; cin>>ch; if(ch[0]=='y'||ch[0]=='Y') {cin>>stud; (*Iterator)=stud; } else{cout<<"此条记录没有被修改! \n";return;} } } if(mark){cout<<"\n\没有找到相关记录! ! ! \n";return;} Sort(); cerr<<"\n\t\t\t修改成功! \n"; } voidDelete()/*按学号删除一条记录*/ {if(stu.empty()){cout<<"当前没有记录,请先添加记录! \n";return;} strings;charch[2];;boolmark=true; cout<<"\t\t\t请输入需删除的学生的学号: "; cin>>s; for(Iterator=stu.begin();Iterator! =stu.end();) {if((*Iterator).Get_number()==s) {dispTable();mark=false; cout<<(*Iterator); cout<<"您确定要删除此条记录? (Y|N)"; cin>>ch; if(ch[0]=='y'||ch[0]=='Y') {Iterator=stu.erase(Iterator); cout<<"\n删除成功! ! ! \n"; } else {cout<<"\n此条记录没有被删除! \n";Iterator++;} } else {Iterator++;} } if(mark){cout<<"\n\没有找到相关记录! ! ! \n";return;} Sort(); } voidQuerybyNumber() {if(stu.empty()){cout<<"\当前没有记录,请先添加记录! \n";return;} strings;boolmark=true;intn=0; cout<<"请输入需查询的学生的学号: "; cin>>s; for(Iterator=stu.begin();Iterator! =stu.end();Iterator++) {if((*Iterator).Get_number()==s) {n++; if(n==1)dispTable(); mark=false; cout<<(*Iterator); } } if(mark)cout<<"\n\没有找到相关记录! ! ! \n"; } voidQuerybyName() {if(stu.empty()){cout<<"\n当前没有记录,请先添加记录! \n";return;} stringna,cn;boolmark=true;intn=0; cout<<"\n\t\t\t请输入需查询的学生的姓名,班级: "; cin>>na>>cn; for(Iterator=stu.begin();Iterator! =stu.end();Iterator++) {if((*Iterator).Get_name()==na&&(*Iterator).Get_classnumber()==cn) {mark=false; n++; if(n==1)dispTable(); cout<<(*Iterator); } } if(mark)cout<<"\n\没有找到相关记录! ! ! \n"; } voidfind()/***查找**/ {if(stu.empty()){cerr<<"\n当前没有记录,请添加记录! \n";return;} charch,c[3]; do{ cout<<"\n\t\t\t请输入查找方式: 1,学号2,姓名,班级: "; cin>>ch; while(ch! ='1'&&ch! ='2') {cout<<"\n您输入有误,请重新输入: ";cin>>ch;} switch(ch) { case'1': QuerybyNumber();break; case'2': QuerybyName();break; } cout<<"\n\您想继续查找吗? 1是,0否"; cin>>c; while(c[0]! ='1'&&c[0]! ='0') {cout<<"\n您输入有误,请重新输入: ";cin>>c;} }while(c[0]=='1'); } voidManagerinfo()/*班级学生成绩统计*/ {if(stu.empty()){cout<<"\n\当前没有记录,请先添加记录! \n";return;} floatsum[num_subject]; memset(sum,0,num_subject*sizeof(int)); stringcn;inti,j,n=0; boolmark=true; intk=stu.size(); cout<<"\n\t\t\t请输入要统计的班级: "; cin>>cn; for(i=0;i if(cn==stu[i].Get_classnumber()) {mark=false; n++; if(n==1)dispTable(); cout< for(j=0;j sum[j]+=stu[i].score[j]; } if(mark){cout<<"\n\t\t\t没有找到相关记录! ";return;} cout<<"\n\t该班有"< \n"< for(i=0;i {cout<<'\t'< cout<<": \t"< } cout< } voidsave()/*将所有记录写入文件*/ {if(stu.empty()){cout<<"\n\t\t\t当前没有记录,请先添加记录! \n";return;} charfilename[20]; cout<<"将记录保存到文件中\n"; cout<<"\请输入保存记录的文件名: "; inti,j,k=stu.size(); cin>>filename; ofstreamfile; file.open(filename,ios: : app|ios: : binary); if(! file){cout<<"\n文件打开失败! \n";return;} for(i=0;i {file< <<'\t'< for(j=0;j file<<' file<<'< } file.close(); cout<<"\t\t\t保存成功! \n"; } voidloaddata(Student&st) {charfilename[20];intj; cout<<"从文件中读取记录\n"; cout<<"请输入文件名: "; cin>>filename; ifstreamofile; ofile.open(filename,ios: : out|ios: : binary); if(! ofile){cout<<"\n\文件打开失败! \n";return;} ofile>>st.number>>st.name>>st.classnumber>>st.sex; for(j=0;j ofile>>st.score[j]; ofile>>st.sum>>st.ave_score; while(! ofile.eof()) {stu.push_back(st); ofile>>st.number>>st.name>>st.classnumber>>st.sex; for(j=0;j ofile>>st.score[j]; ofile>>st.sum>>st.ave_score; } ofile.close(); cerr<<"\n\t\t\t读取成功! ! ! \n"; } intmenuSelect() {cout<<"*************************\n" <<"\1.增加记录*\n" <<"\2.显示全部记录*\n" <<"\3.记录排序*\n" <<"\4.修改记录*\n" <<"\5.删除记录*\n" <<"\6.查询记录*\n" <<"\7.统计学生成绩*\n" <<"\8.保存学生记录*\n" <<"\9.读取学生记录*\n" <<"\t0.退出程序*\n" <<"\*************************\n\n\n"; charchoice[2]; while (1) {cout<<"\n\t\t\t请输入您的选择: "; cin>>choice; cin.ignore(); if(choice[0]<'0'||choice[0]>'9') {cout<<"\n输入错误,重选0-9: ";} elsebreak; } return(choice[0]-'0'); } voidhandleMenu() {intn=0; cout< while (1) {switch(menuSelect()) { case1: printf("\t\t\tInputRecords\n"); Input(); system("cls");//清屏 break; case2: printf("\DisplayAllRecords\n"); Display(); printf(""); system("pause"); system("cls"); break; case3: printf("Sort\n"); Sort(); printf(); system("pause"); system("cls"); break; case4: printf("\t\t\tUpdataaRecord\n"); Updata(); printf(); system("pause"); system("cls"); break; case5: printf("tDeleteaRecord\n"); Delete(); printf(); system("pause"); system("cls"); break; case6: printf("\Query\
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 01
![提示](https://static.bdocx.com/images/bang_tan.gif)