西电软件学院c++上机实验报告_第1页
西电软件学院c++上机实验报告_第2页
西电软件学院c++上机实验报告_第3页
西电软件学院c++上机实验报告_第4页
西电软件学院c++上机实验报告_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

..C++实验报告XX:妍学院:软件学院学号:实验要求完成一个完整的简化系统:一卡通乘车系统。一卡通乘车系统主要完成的功能是,支持一卡通刷卡乘车;对每一卡通的使用情况及费用进展统计;对每辆班车的运行情况进展统计。在实现该系统的功能时,不要现图形界面,控制台输出即可。必须采用面向对象程序设计的方式实现。程序中所设计的类classStuCard;ClassPeople;classbus;类中的关键数据成员和成员函数1、StuCard类classStuCard{ public:voidpay();//上车刷卡时调用此函数,根据卡的类型扣除上车费用并给出相应提示intGetRest();//获取卡余额StuCard(stringname,stringid,intmoney,inttype,intcount);stringget_name(){returnname;} stringget_id(){returnid;} intget_type(){returntype;} intget_money(){returnmoney;} intget_count(){returncount;}//乘车次数private:stringname;//持卡人 stringid;//卡号 intmoney;//余额 inttype;//卡的类型(type=1,学生卡;type=2,教师卡;type=3,限制卡〕 intcount;//乘车次数};//定义了一个StuCard的类,用type来区分卡的类型,用get_X函数在主函数中来获得数据成员的值2、bus类structtime{ inthour; intminute;};classbus{ stringbnumber;//车牌号 stringxnumber;//型号 intpeople;//载乘人数 stringname;//驾驶员 structtimestime;//发车时间 structtimeetime;//到站时间 structtimet_stime;//实际发车时间 structtimet_etime;//实际到站时间public:bus(stringbn,stringxn,intp,stringn,intsh,intsm,inteh,intem){ bnumber=bn; xnumber=xn; people=p; name=n; stime.hour=sh; stime.minute=sm; etime.hour=eh; etime.minute=em; }//构造函数stringget_b(){returnbnumber;}//获得车牌号stringget_x(){returnxnumber;}//获得车的型号intget_p(){returnpeople;}//获取上车人数stringget_n(){returnname;}//获取驾驶员voidStime(inta,intb);//获取预计发车时间voidEtime(intc,intd);//获取预计到站时间voidshow(stringbnumber,stringxnumber,intpeople,stringname);voidT_stime(intta,inttb);//获取实际发车时间voidT_etime(inttc,inttd);//获取实际到站时间floatpeoplebi(floate,floatf);//载乘人数比intget_sthour();//获得发车时间的小时intget_stminute();//获得发车时间的分钟intget_ethour();//获得到站时间的小时intget_etminute();//获得到站时间的分钟voidstshow(intp,intq);voidetshow(intx,inty);};people类classPeople{ stringname;// stringsex;//性别 stringwork;//职务 stringoffice;//所属单位 stringnumber;//学号/工号public: People(stringn,strings,stringw,stringo,stringb);//构造函数 voidreadPeople();//用于在主函数中读入人的信息 voidshow(stringname,stringsex,stringwork,stringoffice,stringnumber); voidaddPeople();//申请一新卡 voiddeletePeople();//注销一卡通 stringget_name(){returnname;} stringget_sex(){returnsex;} stringget_work(){returnwork;} stringget_office(){returnoffice;} stringget_number(){returnnumber;}};运行流程的说明主程序分为两个系统:乘车系统和一卡通管理系统。1、乘车系统主要实现的功能如下:首先,采用随机函数,生本钱站会上车的人数,这个人数不超过车的最大载乘人数。其次,生成几个人上车,就依次输入几个人的卡号,持卡人在持卡上车时一卡通余额、乘车次数会发生变更,并且根据余额的多少会有相应提示信息,再将变更后的信息写入文件公交车在每上一个人的时候乘车人数加一,到达最大载乘人数时提示不能再刷卡上车,并且采用随机函数,随机生成预计发车时间、预计到站时间,实际发车时间和实际到站时间,计算发车准时率和到站准时率,再将变更后的的信息写入文件2、一卡通管理系统主要实现的功能如下:在文件中保存人的根本信息,记录每个人的乘车次数,增加申请新卡,注销一卡通的功能。在程序中有一个people的txt文件,里面储存了人的信息,卡的主体是人,办卡的前提是人在people文件中存在。中选择办卡时,输入people中存在的人名,从文件头开场查找,到文件尾完毕,当输入的人名与people中已存的信息相匹配的时候,就将这组信息〔包括,学号,卡的类型,余额〔新办的卡余额初始化为50〕,乘车次数〔新卡为0〕〕写入mycard.txt文件中去,办卡成功。当需要删除一个卡的时候,人的信息没有改动,只是将mycard.txt中办卡的信息删去了。以vector<StuCard>cards(200)的方式,定义了一个类的数组,当输入需要删除的人的之后,从文件头开场查找,当输入的人名与mycard中已存的信息不匹配的时候,就将这一组信息写入数组,到文件尾完毕,再将数组里面的写入mycard中,这样子就把想要删掉的容删掉了。运行结果及分析文档设置:Mycard容分别对应,学号,余额,乘车次数,卡的类型〔1=学生卡;2=教师卡,3=限制卡〕Bus的容分别对应为车牌号,车类型,最大载乘人数,驾驶员,预计出发时间〔时、分〕和预计到达时间〔时、分〕当运行程序时,会看到如下界面选择1,进入乘车系统首先输入车牌信息,随机产生等车人数,刷卡上车,即输入卡号输入1402012,即四上车,四的乘车次数加1,余额减2,写入文件,可以看到其中,四的乘车信息相比初始时发生了正确的改变。并且随机产生的30组发车时间和到站时间,发车准时率和到站准时率,载乘人数比也正确的算出。选择2,进入一卡通管理系统选择1,办新卡输入三,为三办一新卡,三的卡号从people文件读取,卡的类型,根据三的职业的定义初始化为1=学生卡;2=教师卡,3=限制卡,新卡余额默认100元,乘车次数为0。假设选择2,删除一卡如图,将刚刚插入的三的信息删除,并且更新文件信息,三在mycard的记录已经不见了。删卡成功。源代码#include<iostream>#include<string.h>#include<fstream>#include<ostream>#include<cstdlib>#include<sstream>#include<vector>#include<stdio.h>usingnamespacestd;structtime{ inthour; intminute;};classStuCard{ public:voidpay();intGetRest();voidshow();StuCard(stringname,stringid,intmoney,inttype,intcount);stringget_name(){ returnname; } stringget_id(){ returnid; } StuCard(){ name="null"; id="null"; money=0; count=0; type=0; } intget_type(){ returntype; } intget_money(){ returnmoney; } intget_count(){ returncount; }private:stringname;//持卡人stringid;//卡号 intmoney;//余额 inttype;//卡的类型(type=1,学生卡;type=2,教师卡;type=3,限制卡〕 intcount;//乘车次数};voidStuCard::pay(){ //StuCardstucard1(charname[16],charID[17],intmoney,inttype,intcount); if(type==1) { money-=2; count=count+1; cout<<"你的卡余额为:"<<money<<'\n'; if(money<5) cout<<"你的余额过低,请及时充值!"<<'\n'; } if(type==2) { count=count+1; cout<<"你的卡余额为:"<<money<<'\n'; if(money<5)cout<<"你的余额过低,请及时充值!"<<'\n'; } if(type==3) { if(count<20){ count=count+1; cout<<"你的卡余额为:"<<money<<'\n'; if(money<5) cout<<"你的余额过低,请及时充值!"<<'\n'; } if(count==20){ count=count+1; cout<<"这是本学期最后一次免费乘车!\n"; cout<<"你的卡余额为:"<<money<<'\n'; if(money<5) cout<<"你的余额过低,请及时充值!"<<'\n'; } if(count>20){ cout<<"本次开场收费!\n"; money-=2; count=count+1; cout<<"你的卡余额为:"<<money<<'\n';if(money<5) cout<<"你的余额过低,请及时充值!"<<'\n'; } } }intStuCard::GetRest(){ returnmoney;}voidStuCard::show(){ cout<<"名字:"<<name<<'\n'; cout<<"卡的类型:"<<type<<'\n'; cout<<"乘车次数:"<<count<<'\n';}StuCard::StuCard(stringname,stringid,intmoney,inttype,intcount){ this->name=name; this->id=id; this->money=money; this->type=type; this->count=count;}//PeopleclassPeople{ stringname; stringsex; stringwork; stringoffice; stringnumber;public: People(stringn,strings,stringw,stringo,stringb); voidreadPeople(); voidshow(stringname,stringsex,stringwork,stringoffice,stringnumber); voidaddPeople(); voiddeletePeople(); stringget_name(){returnname;} stringget_sex(){returnsex;} stringget_work(){returnwork;} stringget_office(){returnoffice;} stringget_number(){returnnumber;}};People::People(stringn,strings,stringw,stringo,stringb){ name=n; sex=s; work=w; office=o; number=b;}voidPeople::readPeople(){ cout<<"请输入:"<<endl; cin>>name; cout<<"请输入性别:"<<endl; cin>>sex; cout<<"请输入职务:"<<endl; cin>>work; cout<<"请输入所属单位:"<<endl; cin>>office; if(work=="学生") { cout<<"请输入学号:"<<endl; cin>>number; } else { cout<<"请输入工号:"<<endl; cin>>number; }}voidPeople::addPeople()//定义添加持卡人函数{Peoplepeople1("a1","b2","c3","d4","e5");//实例化对象ofstreamfileout("people.txt",ios::app);//翻开文件if(!fileout) { cout<<"不能翻开文件!"<<"people.txt"<<endl; } else { cout<<"请输入持卡人根本信息:"<<endl;people1.readPeople();//读入信息cout<<endl; fileout<<people1.get_name()<<""<<people1.get_sex()<<""<<people1.get_work()<<""<<people1.get_office() <<""<<people1.get_number()<<endl;//写入信息 }fileout.close();//关闭文件}voidPeople::deletePeople(){ ifstreamfilein("people.txt");//翻开文件if(!filein) { cout<<"翻开文件失败!"<<endl; } else { stringt,m; intn=0;//标签,是否有这个读者cout<<"请输入删除持卡人的的:"<<endl; cin>>m;cout<<"请输入删除持卡人的的学号或工号:"<<endl; cin>>t; do { stringx,y,z,u,w;//定义变量strings; getline(filein,s);//读入每一行istringstreamsin(s); sin>>x>>y>>z>>u>>w;//把s中第一个字符串给aofstreamfileout("people1.txt",ios::app);//写到新文件中去if(m!=x||t!=w)//判断是否为删除的地方fileout<<s<<endl;//写入数据if(m==x&&t==w)//判断是否为删除的地方 {n=1; cout<<"原持卡人信息为:"<<endl; cout<<":"<<x<<endl; cout<<"性别:"<<y<<endl; cout<<"职务:"<<z<<endl; cout<<"所属单位:"<<u<<endl; if(z=="学生")cout<<"学号:"<<w<<endl; elsecout<<"工号:"<<w<<endl; cout<<"是否删除?〔Y:是,N:否〕"<<endl; chara;//定义变量cin>>a; if(a=='Y') { cout<<"删除成功!"<<endl; } if(a=='N') { cout<<"未删除!"<<endl; fileout<<x<<""<<y<<""<<z<<endl;//写入到文件 }fileout.close();//关闭文件 } }while(!filein.eof());//判断是否到文件尾if(n==0)//不存在这个学生cout<<"未找到要删除的持卡人!"<<endl; } filein.close();//关闭ifstreamfilei("people1.txt");//翻开文档ofstreamfileout("people.txt",ios::out);//翻开文档并清空容for(strings;getline(filei,s);)//将修改后的容写到文件中去 {fileout<<s<<endl; } filei.close();//关闭文件fileout.close();//关闭文件system("delpeople1.txt");//删除文件副本}classbus{ stringbnumber;//车牌号stringxnumber;//型号intpeople;//载乘人数 stringname;//驾驶员structtimestime;//发车时间structtimeetime;//到站时间 structtimet_stime;//实际发车时间structtimet_etime;//实际到站时间public: bus(stringbn,stringxn,intp,stringn,intsh,intsm,inteh,intem) { bnumber=bn; xnumber=xn; people=p; name=n; stime.hour=sh; stime.minute=sm; etime.hour=eh; etime.minute=em; }stringget_b(){returnbnumber;}stringget_x(){returnxnumber;}intget_p(){returnpeople;}stringget_n(){returnname;}voidStime(inta,intb);voidEtime(intc,intd);voidshow(stringbnumber,stringxnumber,intpeople,stringname);voidT_stime(intta,inttb);voidT_etime(inttc,inttd);floatpeoplebi(floate,floatf);intget_sthour();intget_stminute();//获得实际发车时间intget_ethour();intget_etminute();//获得实际到站时间voidstshow(intp,intq);voidetshow(intx,inty);};voidbus::Stime(inta,intb){ stime.hour=a; stime.minute=b; cout<<"发车时间为:"; cout<<stime.hour<<":"<<stime.minute<<endl;}voidbus::Etime(intc,intd){ etime.hour=c; etime.minute=d; cout<<"到站时间为:"; cout<<etime.hour<<":"<<etime.minute<<endl;}voidbus::show(stringbnumber,stringxnumber,intpeople,stringname){ cout<<"车牌号:"<<bnumber<<endl; cout<<"型号:"<<xnumber<<endl; cout<<"载乘人数:"<<people<<endl; cout<<"驾驶员名字:"<<name<<endl;}voidbus::T_stime(intta,inttb){ t_stime.hour=ta; t_stime.minute=tb; cout<<"实际发车时间为:"; cout<<t_stime.hour<<":"<<t_stime.minute<<endl;}voidbus::T_etime(inttc,inttd){ t_etime.hour=tc; t_etime.minute=td; cout<<"实际到站时间为:"; cout<<t_etime.hour<<":"<<t_etime.minute<<endl;}floatbus::peoplebi(floate,floatf){ cout<<e/f;}intbus::get_sthour(){ intsh; //srand((unsigned)time(0)); sh=rand()%9+0; if(sh%2)sh=7; elsesh=6; returnsh;}intbus::get_stminute(){ intsm; //srand((unsigned)time(0)); sm=rand()%60+0; returnsm;}intbus::get_ethour(){ inteh; //srand((unsigned)time(0)); eh=rand()%7+6; returneh;}intbus::get_etminute(){ intem; //srand((unsigned)time(0)); em=rand()%60+0; returnem;}voidbus::stshow(intp,intq){ if(q>=10) cout<<p<<":"<<q; else cout<<p<<":0"<<q;}voidbus::etshow(intx,inty){ if(y>=10) cout<<x<<":"<<y; else cout<<x<<":0"<<y;}intmain(){ cout<<"1:乘车系统;2:一卡通办理系统;3:退出"<<endl; ints; cin>>s; while(s!=3){ //判断系统 if(s==2){ cout<<"欢送进入一卡通管理系统!"<<endl;;cout<<"请根据需要输入相应的数字:"<<endl;cout<<"1:办新卡;2.注销一卡通;3.退出;"<<endl;intt;cin>>t;while(t!=3){ if(t==1){ cout<<"请输入用户名:"; stringname; cin>>name; ifstreamin("people.txt"); while(!in.eof()){ stringname_read; stringsex; stringposition; stringdepart; stringid; inttype; intmoney=100; in>>name_read>>sex>>position>>depart>>id; if(name==name_read){ if(position=="教师"){ type=2; }elseif(position=="学生"){ type=1; }else{ type=3; } StuCardcard(name,id,money,type,0); //cout<<name<<"hhhhhhh"; ofstreamout("mycard.txt",ios::app); out<<card.get_name()<<""<<card.get_id()<<""<<money<<""<<0<<""<<card.get_type()<<endl; cout<<"办卡成功!"<<endl; cout<<"系统中所有的卡:"<<endl; ifstreamfile("mycard.txt"); stringname_read; stringid; intmoney; intcount; inttype; cout<<""<<"\t"<<"id"<<"\t"<<"余额"<<"\t"<<"乘车次数"<<"\t"<<"卡类型"<<endl; while(!file.eof()){ file>>name_read>>id>>money>>count>>type; cout<<name_read<<"\t"<<id<<"\t"<<money<<"\t"<<count<<"\t\t"<<type<<endl; } } } } if(t==2){ cout<<"请输入:"; stringname; stringname_read; stringid; intmoney; intcount; inttype; cin>>name; //ifstreamin("mycard.txt",ios::app); ifstreamfile("mycard.txt"); vector<StuCard>cards(200); inti=0; while(!file.eof()){ file>>name_read>>id>>money>>count>>type; if(name!=name_read){ StuCard card(name_read,id,money,type,count); //cout<<card.get_name()<<endl; //cout<<card.get_name(); cards[i]=card; i++; } } file.close(); intj; ofstreamout("mycard.txt"); for(j=0;j<i;j++){ out<<cards[j].get_name()<<""<<cards[j].get_id()<<""<<cards[j].GetRest() <<""<<cards[j].get_count()<<""<<cards[j].get_type()<<endl; } cout<<"删除成功!"<<endl; } cout<<"欢送进入一卡通管理系统!"<<endl; cout<<"请根据需要输入相应的数字:"<<endl; cout<<"1:办新卡;2.注销一卡通;3.退出;4.添加用户;5.删除用户"<<endl; cin>>t; } } //乘车系统 if(s==1){ cout<<"车牌号:"; stringbus_num; cin>>bus_num; ifstreamin("bus.txt"); while(!in.eof()){ stringbnumber;//车牌号stringxnumber;//型号intpeople;//载乘人数 stringname;//驾驶员structtimestime;//发车时间structtimeetime;//到站时间 structtimet_stime;//实际发车时间structtimet_etime;//实际到站时间 in>>bnumber>>xnumber>>people>>name>>stime.hour>>stime.minute>>etime.hour>>etime.minute; if(bnumber==bus_num){ //bus(stringbn,stringxn,intp,stringn,intsh,intsm,inteh,intem) busbus1=bus(bnumber,xnumber,people,name,stime.hour,stime.minute,etime.hour,etime.minute); bus1.T_stime(stime.hour,stime.minute); bus1.T_etime(etime.hour,etime.minute); cout<<"请上车:"<<endl; intpassager=rand()%10; cout<<"本次有"<<passager<<"人等车,请依次刷卡乘车"<<endl; //将系统中的所有一卡通读出来 ifstreamfile("mycard.txt"); vector<StuCard>cards(200); inti=0; while(!file.eof()){ stringname_read; stringid; intmoney; intcount; inttype; file>>name_read>>id>>money>>count>>type; if(name!=name_read){ StuCard card(name_read,id,money,type,count); //cout<<card.get_name()<<endl; //cout<<card.get_name(); cards[i]=card; i++; } } file.close(); intx; for(x=0;x<passager;x++){ stringid_num; cin>>id_num; intw; for(w=0;w<i;w++){ if(cards[w].get_id()==id_num){ cards[w].pay(); } } } //将新的一卡通信息回写 intj; ofstreamout("mycard.txt"); for(j=0;j<i-1;j++){ out<<cards[j].get_name()<

温馨提示

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

评论

0/150

提交评论