C++大作业:学生信息管理系统_第1页
C++大作业:学生信息管理系统_第2页
C++大作业:学生信息管理系统_第3页
C++大作业:学生信息管理系统_第4页
C++大作业:学生信息管理系统_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

学生信息管理系统(附代码)题目要求:设计一个类CStudent,类中包含一个学生的基本数据如下:编号,姓名,性别,年龄,数学成绩,计算机成绩,外语成绩。并假设编号为整数,且从1号往后连续编码;姓名为字符串,性别为字符。如:1LiPingm18899894请采用binary文件形式,并使用随机读写处理方式,对自定义CStudent类的对象数据进行存储与读写处理(即是说,总按具有连续编码的编号num为“序”来对文件中的各对象数据进行随机读写处理)。并设计该类的成员函数,而且对输出运算符“<<”进行重载,使该运算符能够完成将一个学生的信息输出到屏幕上。要求成员函数完成以下功能:(1) 从键盘输入一个学生的有关信息,并将它们存入到数据文件中(按编号来确定写出位置)。(2) 按编号对学生信息进行检索并将检索结果显示在屏幕上。(3) 按姓名对学生信息进行检索并将检索结果显示在屏幕上。(4) 计算某编号学生的总成绩与平均成绩。(5) 列出所有总成绩超过n分的性别为s同学的有关信息(n,s由用户从键盘输入)。Code:1//student.cpp学生管理程序添加,修改,按条件查询学生信息*student.cpp学生管理程序添加,修改,按条件查询学生信息*FedoraLinux11&GCC&x86*davelv第一次Class于2010-01-10 *新建了可复用的搜索模板searchframe*3.*描述4.*功能5.*环境6.*备注7.*更新//9.#includeviostream>#include<cstring>#include<vector>

13.#includevfstream>14.#includevcstdlib>15.16.usingnamespacestd;17.#defineCIN_LEN 1024〃缓冲区长度18.#define "data"//数据文件名19./////////////////////////////////////20.//结构和类 〃21.///////////////////////////////////22.structdata//学生个人信息23.{24.intid;//学号25.charname[20];〃名字26.charmajor[20];//专业27.charsex;//性性别28.doublech,en,ma;〃成绩29.intgrade;//年级30.};31.32.classCStudent33.{34.protected:35.boolaltered;//是否修改36.datainfo;//学生信息37.public:38.staticintnowid;〃新学生自增id39.staticvoiddisplayhead();〃显示表头40.staticvoiddisplayshorthead();〃显示短表头41.CStudent();〃构造42.voiddisplayinfo();//显示全部学生信息43.voiddisplayshortinfo();//显示学生短信息44.doublegetsum();〃取总成绩45.doublegetave();〃取得平均分46.doublegetch();〃取语文成绩47.doublegeten();〃取外语成绩48.doublegetma();//取数学成绩49.intset(boolisnew);//设置学生信息50.intgetgrade();〃取年级51.intgetid();//取学号52.boolisaltered();//取是否修改53.chargetsex();〃取性别54.char*getname();〃取姓名55.char*getmajor();〃取专业56.data*getinfo();//取学牛全部信息〃定义友元函数以便重载运算符friendostream&operatorvv(ostream&,constCStudent&);friendistream&operator»(istream&,CStudent&);60.61.};62.intCStudent::nowid=1;//初始化类静态成员64.CStudent::CStudent()〃基类构造{info.id=CStudent::nowid++;〃子增idstrcpy(,"None");〃名字info.ch=0;〃语文成绩info.en=0;//外语成绩info.ma=0;〃数学成绩info.grade=1;〃年级altered=false;//未被修改TOC\o"1-5"\h\z}75.intCStudent::getgrade(){returninfo.grade;}80.doubleCStudent::getsum(){returninfo.ch+info.en+info.ma;}doubleCStudent::getave(){return(info.ch+info.en+info.ma)/3;}doubleCStudent::getch(){returninfo.ch;}93.doubleCStudent::geten(){returninfo.en;}98.doubleCStudent::getma(){returninfo.ma;TOC\o"1-5"\h\z}103.intCStudent::getid(){returninfo.id;}108.charCStudent::getsex(){returninfo.sex;}113.char*CStudent::getname(){;}boolCStudent::isaltered(){returnaltered;}data*CStudent::getinfo(){return&info;}voidCStudent::displayinfo(){coutvv*thisvv"\t"vvgetsum()vv"\t"vvgetave()vvendl;〃利用重载运算符输出}voidCStudent::displayshortinfo(){cout<<*this<<endl;}voidCStudent::displayhead(){cout<<"\n\t学号\t姓名\t性别\t专业\t年级\t中文\t英文\t数学\t总分\t平均分\n";}voidCStudent::displayshorthead(){cout<<"\n\t学号\t姓名\t性别\t专业\t年级\t中文\t英文\t数学\n";}intCStudent::set(boolisalter){coutvv"输入学生信息:\n";

45.146.147.displayshortinfo();coutvv"\t"vvinfo.idvv"\t";cin.clear();cin>>*this;〃从标准输入获取学生信息altered=true;〃已修改152.if(cin.fail()){coutvv"录入失败5";cin.clear();cin.ignore(CIN_LEN,'\n');〃这两行是用来清空输入缓冲return-1;TOC\o"1-5"\h\z}else{coutvv"录入成功\n";return1;}}166.〃重载输出符ostream&operatorvv(ostream&out,constCStudent&right){〃输出学生的全部信息outvv"\t".idvv"\t"vv"\t".sexvv"\t".majorvv"\t".gradevv"\t".chvv"\t".envv"\t".ma;returnout;}〃重载输入符istream&operator»(istream&in,CStudent&right){〃输入除ID外的其他信息in>>>>.sex».major>>.grade>>.ch>>.en>>.ma;returnin;}184./////////////////////////////////// 初始化函数 //////////////////////////////////intinitial(vector<CStudent*>&stu){fstream输入文件CStudent*p;192.(,fstream::inlfstream::binary);〃二进制输入打开194.if(!文件是否打开成功return-1;while(()!=EOF)〃是否至U文件末尾{p=newCStudent();〃新建一个学生对象((char*)p->getinfo(),sizeof(data));〃读入学生对象if(())〃检查读入是否失败return-2;stu.push_back(p);〃对象加入vector}if(!stu.empty())〃如果从文件读入了对象CStudent::nowid=stu.back()->getid()+1;〃则自增id设置为最后一个学生id+1();//关闭returnstu.size();〃返回对象个数TOC\o"1-5"\h\z}////////////////////////////////// 信息增加函数 /////////////////////////////////voidinsert(vectorvCStudent*>&stu){charc='y';//输入控制字符216.intflag=1;//标志位,1表示新增成功218.CStudent*p=newCStudent();220.while(c!='n')//是否继续新增TOC\o"1-5"\h\z{flag=p->set(false);//设置学生信息if(flag==1)〃如果设置成功{stu.push_back(p);〃对象加入vectorp=newCStudent();//新建下一个对象}cout<<"是否继续添加学生(any/n)?";cin.clear();cin.ignore(CIN_LEN,'\n');cin.get(c);TOC\o"1-5"\h\z}〃删除最后一个新建的对象,因为没有使用它deletep;CStudent::nowid--;}238.///////////////////////////////// 查询全部信息函数 ///////////////////////////////intcomparebynone(constvoid*a,constvoid*b){return0;}////////////////////////////////// 按学号比较函数 ////////////////////////////////intcomparebyid(constvoid*a,constvoid*b){return*(constint*)a-((CStudent*)(b))->getid();}///////////////////////////////// 按姓名比较函数 ////////////////////////////////intcomparebyname(constvoid*a,constvoid*b){returnstrcmp((constchar*)a,(constchar*)(((CStudent*)b)->getname()));}////////////////////////////////// 按年级比较函数 ////////////////////////////////intcomparebygrade(constvoid*a,constvoid*b){return(*(constint*)a-((CStudent*)b)->getgrade());}/////////////////////////////////////// 按总分和性别比较函数 /////////////////////////////////////intcomparebymarkandsex(constvoid*a,constvoid*b){doublemark;charsex;sscanf((constchar*)a,"%lf%c",&mark,&sex);return!((((CStudent*)b)->getsum()>=mark)

&&((sex=='n')II(sex==((CStudent*)b)->getsex())));279.280.}///////////////////////////////// 搜索模板 ///////////////////////////////templatevtypenameT>voidsearchframe(constchar*info,T&condition,vector<CStudent*>&stu,int(*compare)(constvoid*a,constvoid*b),boolisalter){288.{288.289.290.291.292.293.294.295.296.297.298.299.300.301.302.303.304.305.306.307.308.309.310.311.312.313.314.315.316.317.318.319.intflag;while(c!='n'){cin.clear();if(info!=NULL){coutvv"输入"vvinfovv":";〃cin.ignore(CIN_LEN,'\n');cin>>condition;}if(cin.fail()){coutvv"输入错误5";}else{〃遍历vector查找for(vector<CStudent*>::size_typeix=flag=0;ix!=stu.size();++ix){ 〃判断是name是否相等if(compare(&condition,stu[ix])==0){if(isalter)stu[ix]->set(isalter);else{if(flag==0)CStudent::displayhead();stu[ix]->displayinfo();}

320.321.322.320.321.322.323.324.325.326.327.328.329.330.331.332.333.334.335.336.}}}if(flag==0)//没有查到{coutvv"没有";if(info==NULL)coutvv"符合条件";elsecoutvvinfovv"为"vvcondition;coutvv"的学生\n";}}coutvv"是否继续(any/n)?";cin.clear();cin.ignore(CIN_LEN,'\n');cin.get(c);TOC\o"1-5"\h\z}339.////////////////////////////////// 信息检索函数 ////////////////////////////////voidfetch(vectorvCStudent*>&stu){intchoose,id,grade;charname[20],markandsex[20];347.while(true){coutvv"\n\t1.显示全部学生信息\n""\t2.按学号查学生信息\n""\t3.按姓名查学生信息\n""\t4.按年级查学生信息\n""\t5.按成绩和性别查询\n""\t6.返回上级菜单\n\n";lchoose:coutvv"输入您的选择:";choose=0;cin>>choose;switch(choose){break;case 1:searchframe(NULL,choose,stu,comparebynone,false);break;case 2:searchframe("学号",id,stu,comparebyid,false); break;case3:searchframe(”姓名",name,stu,comparebyname,false);break;case4:searchframe(”年级",grade,stu,comparebygrade,false);break;case5 :searchframe(”分数和性别",markandsex,stu,comparebymarkandsex,false);break;367.case6:return;368.default:coutvv"输入有误\n";cin.clear();cin.ignore(CIN_LEN,'\n');gotolchoose;369.}370. }371.}////////////////////////////////// 信息保存函数 ////////////////////////////////intsave(vectorvCStudent*>&stu){fstreamfile;378.(,fstream::outlfstream::binary);〃二进制写打开文件if(!判断打开是否成功return-1;〃遍历全部对象for(vectorvCStudent*>::size_type ix=0;ix!=stu.size();++ix){ 〃判断当前对象是否已修改if(stu[ix]->isaltered()){ 〃修改了则写入文件(ix*sizeof(data));((char*)stu[ix]->getinfo(),sizeof(data));〃写入是否成功if(())return-2;TOC\o"1-5"\h\z}393.}();return0;}398.///////////////////////////////// 主函数 //////////////////////

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论