已阅读5页,还剩33页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C+实验报告 姓 名: 赵 妍 学 院: 软件学院 学 号: 141301403581、 实验要求 完成一个完整的简化系统:一卡通乘车系统。 一卡通乘车系统主要完成的功能是,支持一卡通刷卡乘车;对每张一卡通的使用情况及费用进行统计;对每辆班车的运行情况进行统计。 在实现该系统的功能时,不要求实现图形界面,控制台输出即可。 必须采用面向对象程序设计的方式实现。2、 程序中所设计的类 class StuCard; Class People; class bus;3、 类中的关键数据成员和成员函数1、StuCard类class StuCardpublic:void pay();/上车刷卡时调用此函数,根据卡的类型扣除上车费用并给出 相应提示 int GetRest();/获取卡余额 StuCard(string name,string id,int money,int type,int count); string get_name()return name; string get_id()return id; int get_type()return type; int get_money()return money; int get_count()return count;/乘车次数 private:string name;/持卡人姓名 string id;/卡号 int money;/余额 int type;/卡的类型 (type=1,学生卡;type=2,教师卡;type=3,限制卡) int count; /乘车次数 ;/定义了一个StuCard的类,用type来区分卡的类型,用get_X函数在主函 数中来获得数据成员的值2、bus类struct timeint hour;int minute;class busstring bnumber;/车牌号string xnumber;/型号int people;/载乘人数 string name;/驾驶员姓名struct time stime;/发车时间struct time etime;/到站时间 struct time t_stime;/实际发车时间struct time t_etime;/实际到站时间 public:bus(string bn,string xn,int p,string n,int sh,int sm,int eh,int em)bnumber=bn;xnumber=xn;people=p;name=n;stime.hour=sh;stime.minute=sm;etime.hour=eh;etime.minute=em;/构造函数string get_b()return bnumber;/获得车牌号string get_x()return xnumber;/获得车的型号int get_p()return people;/获取上车人数string get_n()return name;/获取驾驶员姓名void Stime(int a,int b);/获取预计发车时间void Etime(int c,int d);/获取预计到站时间void show(string bnumber,string xnumber,int people,string name);void T_stime(int ta,int tb);/获取实际发车时间void T_etime(int tc,int td);/获取实际到站时间float peoplebi(float e,float f);/载乘人数比int get_sthour(); /获得发车时间的小时int get_stminute();/获得发车时间的分钟 int get_ethour();/获得到站时间的小时int get_etminute();/获得到站时间的分钟void stshow(int p,int q);void etshow(int x,int y); ;3、 people类class Peoplestring name;/姓名string sex;/性别string work;/职务string office;/所属单位string number;/学号/工号public:People(string n,string s,string w,string o,string b);/构造函数void readPeople();/用于在主函数中读入人的信息void show(string name,string sex,string work,string office,string number);void addPeople();/申请一张新卡void deletePeople();/注销一卡通string get_name()return name;string get_sex()return sex;string get_work()return work;string get_office()return office;string get_number()return number;4、 运行流程的说明 主程序分为两个系统:乘车系统和一卡通管理系统。 1、 乘车系统主要实现的功能如下: 首先,采用随机函数,生成本站会上车的人数,这个人数不超过车的最大载乘人数。其次,生成几个人上车,就依次输入几个人的卡号,持卡人在持卡上车时一卡通余额、乘车次数会发生变更,并且根据余额的多少会有相应提示信息,再将变更后的信息写入文件 公交车在每上一个人的时候乘车人数加一,到达最大载乘人数时提示不能再刷卡上车,并且采用随机函数,随机生成预计发车时间、预计到站时间,实际发车时间和实际到站时间,计算发车准时率和到站准时率,再将变更后的的信息写入文件 2、一卡通管理系统主要实现的功能如下: 在文件中保存人的基本信息,记录每个人的乘车次数,增加申请新卡,注销一卡通的功能。 在程序中有一个people的txt文件,里面储存了人的信息,卡的主体是人,办卡的前提是人在people文件中存在。当选择办卡时,输入people中存在的人名,从文件头开始查找,到文件尾结束,当输入的人名与people中已存的信息相匹配的时候,就将这组信息(包括姓名,学号,卡的类型,余额(新办的卡余额初始化为50),乘车次数(新卡为0)写入mycard.txt文件中去,办卡成功。 当需要删除一个卡的时候,人的信息没有改动,只是将mycard.txt中办卡的信息删去了。以vector cards(200)的方式,定义了一个类的数组,当输入需要删除的人的姓名之后,从文件头开始查找,当输入的人名与mycard中已存的信息不匹配的时候,就将这一组信息写入数组,到文件尾结束,再将数组里面的写入mycard中,这样子就把想要删掉的内容删掉了。5、 运行结果及分析 文档设置:Mycard内容分别对应 姓名,学号,余额,乘车次数,卡的类型(1=学生卡;2=教师卡,3=限制卡)Bus的内容分别对应为 车牌号,车类型,最大载乘人数,驾驶员姓名,预计出发时间(时、分)和预计到达时间(时、分)当运行程序时,会看到如下界面选择1,进入乘车系统首先输入车牌信息,随机产生等车人数,刷卡上车,即输入卡号输入1402012,即李四上车,李四的乘车次数加1,余额减2,写入文件,可以看到其中,李四的乘车信息相比初始时发生了正确的改变。并且随机产生的30组发车时间和到站时间,发车准时率和到站准时率,载乘人数比也正确的算出。选择2,进入一卡通管理系统 选择1,办新卡输入张三,为张三办一张新卡,张三的卡号从people文件读取,卡的类型,根据张三的职业的定义初始化为1=学生卡;2=教师卡,3=限制卡,新卡余额默认100元,乘车次数为0。若选择2,删除一张卡如图,将刚刚插入的张三的信息删除,并且更新文件信息,张三在mycard内的记录已经不见了。删卡成功。6、 源代码#include#include#include#include#include#include#include#includeusing namespace std; struct timeint hour;int minute;class StuCardpublic:void pay(); int GetRest(); void show(); StuCard(string name,string id,int money,int type,int count); string get_name() return name; string get_id() return id; StuCard() name=null; id=null; money=0; count=0; type=0; int get_type() return type; int get_money() return money; int get_count() return count; private:string name;/持卡人姓名 string id;/卡号 int money;/余额 int type;/卡的类型 (type=1,学生卡;type=2,教师卡;type=3,限制卡) int count; /乘车次数 ; void StuCard:pay() /StuCard stucard1(char name16,char ID17,int money,int type,int count); if (type=1 ) money-=2; count=count+1; cout 你的卡余额为:money n; if(money5) cout你的余额过低,请及时充值! n; if(type=2) count=count+1; cout 你的卡余额为:money n; if(money5) cout你的余额过低,请及时充值! n; if(type=3) if (count20) count=count+1; cout 你的卡余额为:money n; if(money5) cout你的余额过低,请及时充值! n; if (count=20) count=count+1; cout这是本学期内最后一次免费乘车!n; cout 你的卡余额为:money n; if(money5) cout你的余额过低,请及时充值! 20) cout本次开始收费!n; money-=2; count=count+1; cout 你的卡余额为:money n; if(money5) cout你的余额过低,请及时充值! n; int StuCard:GetRest() return money; void StuCard:show()cout名字:name n;cout卡的类型:type n;cout乘车次数:count name=name; this-id=id; this-money=money; this-type=type; this-count=count; /People class Peoplestring name;string sex;string work;string office;string number;public:People(string n,string s,string w,string o,string b);void readPeople();void show(string name,string sex,string work,string office,string number);void addPeople();void deletePeople();string get_name()return name;string get_sex()return sex;string get_work()return work;string get_office()return office;string get_number()return number;People:People(string n,string s,string w,string o,string b)name=n;sex=s;work=w;office=o;number=b;void People:readPeople()cout请输入姓名:name;cout请输入性别:sex;cout请输入职务:work;cout请输入所属单位:office;if(work=学生)cout请输入学号:number;elsecout请输入工号:number;void People:addPeople()/定义添加持卡人函数People people1(a1,b2,c3,d4,e5);/实例化对象ofstream fileout(people.txt,ios:app);/打开文件if(!fileout)cout不能打开文件!people.txtendl;else cout请输入持卡人基本信息:endl; people1.readPeople();/读入信息 coutendl;fileoutpeople1.get_name() people1.get_sex() people1.get_work() people1.get_office() people1.get_number()endl;/写入信息fileout.close();/关闭文件void People:deletePeople()ifstream filein(people.txt);/打开文件if(!filein)cout打开文件失败!endl;elsestring t,m;int n=0;/标签,是否有这个读者cout请输入删除持卡人的的姓名:m; cout请输入删除持卡人的的学号或工号:t;do string x,y,z,u,w;/定义变量 string s;getline(filein,s);/读入每一行istringstream sin(s);sinxyzuw;/把s中第一个字符串给a ofstream fileout(people1.txt,ios:app);/写到新文件中去if(m!=x|t!=w)/判断是否为删除的地方fileoutsendl;/写入数据if(m=x&t=w)/判断是否为删除的地方n=1;cout原持卡人信息为:endl;cout姓名:xendl;cout性别:yendl;cout职务:zendl;cout所属单位:uendl;if(z=学生) cout学号:wendl;else cout工号:wendl;cout是否删除?(Y:是,N:否)a;if(a=Y)cout删除成功!endl; if(a=N)cout未删除!endl; fileoutx y zendl;/写入到文件fileout.close();/关闭文件while(!filein.eof();/判断是否到文件尾if(n=0)/不存在这个学生cout未找到要删除的持卡人!endl;filein.close();/关闭ifstream filei(people1.txt);/打开文档ofstream fileout(people.txt,ios:out);/打开文档并清空内容for(string s;getline(filei,s);)/将修改后的内容写到文件中去fileoutsendl;filei.close();/关闭文件fileout.close();/关闭文件system(del people1.txt);/删除文件副本 class busstring bnumber;/车牌号string xnumber;/型号int people;/载乘人数 string name;/驾驶员姓名struct time stime;/发车时间struct time etime;/到站时间 struct time t_stime;/实际发车时间struct time t_etime;/实际到站时间 public:bus(string bn,string xn,int p,string n,int sh,int sm,int eh,int em)bnumber=bn;xnumber=xn;people=p;name=n;stime.hour=sh;stime.minute=sm;etime.hour=eh;etime.minute=em;string get_b()return bnumber;string get_x()return xnumber;int get_p()return people;string get_n()return name;void Stime(int a,int b);void Etime(int c,int d);void show(string bnumber,string xnumber,int people,string name);void T_stime(int ta,int tb);void T_etime(int tc,int td);float peoplebi(float e,float f);int get_sthour(); int get_stminute();/获得实际发车时间 int get_ethour();int get_etminute();/获得实际到站时间 void stshow(int p,int q);void etshow(int x,int y); ;void bus:Stime(int a,int b)stime.hour=a;stime.minute=b;cout发车时间为:;coutstime.hour:stime.minuteendl;void bus:Etime(int c,int d)etime.hour=c;etime.minute=d;cout到站时间为:;coutetime.hour:etime.minuteendl;void bus:show(string bnumber,string xnumber,int people,string name)cout车牌号:bnumberendl;cout型号:xnumberendl;cout载乘人数:peopleendl;cout驾驶员名字:nameendl;void bus:T_stime(int ta,int tb)t_stime.hour=ta;t_stime.minute=tb;cout实际发车时间为:;coutt_stime.hour:t_stime.minuteendl;void bus:T_etime(int tc,int td)t_etime.hour=tc;t_etime.minute=td;cout实际到站时间为:;coutt_etime.hour:t_etime.minuteendl;float bus:peoplebi(float e,float f)cout=10) coutp:q;else coutp:0=10) coutx:y;else coutx:0y;int main()cout1:乘车系统;2:一卡通办理系统;3:退出s;while(s!=3)/判断系统 if(s=2)cout欢迎进入一卡通管理系统!endl; cout请根据需要输入相应的数字:endl; cout1:办新卡;2.注销一卡通;3.退出;t; while(t!=3) if(t=1) cout name;ifstream in(people.txt);while(!in.eof()string name_read;string sex;string position;string depart;string id; int type; int money=100;inname_readsexpositiondepartid;if(name=name_read)if(position=教师)type=2;else if(position=学生)type=1; elsetype=3;StuCard card(name,id,money,type,0);/coutnamehhhhhhh;ofstream out(mycard.txt,ios:app);outcard.get_name() card.get_id() money 0 card.get_type()endl;cout办卡成功! endl;cout系统中所有的卡:endl;ifstream file(mycard.txt);string name_read;string id;int money;int count;int type;cout姓名tidt余额t乘车次数t 卡类型name_readidmoneycounttype;coutname_readtidtmoneytcounttt typeendl;if(t=2) coutname;/ifstream in(mycard.txt,ios:app);ifstream file(mycard.txt);vector cards(200);int i=0;while(!file.eof()filename_readidmoneycounttype;if(name!=name_read)StuCardcard(name_read,id,money,type,count);/coutcard.get_name()endl;/coutcard.get_name();cardsi=card;i+;file.close();int j;ofstream out(mycard.txt);for(j=0;ji;j+)outcardsj.get_name() cardsj.get_id() cardsj.GetRest() cardsj.get_count() cardsj.get_type()endl;cout删除成功!endl;cout欢迎进入一卡通管理系统!endl; cout请根据需要输入相应的数字:endl; cout1:办新卡;2.注销一卡通;3.退出;4.添加用户;5.删除用户t;/乘车系统 if(s=1)coutbus_num; ifstream in(bus.txt); while(!in.eof() string bnumber;/车牌号string xnumber;/型号int people;/载乘人数 string name;/驾驶员姓名struct time stime;/发车时间struct time etime;/到站时间 struct time t_stime;/实际发车时间struct time t_etime;/实际到站时间 inbnumberxnumberpeoplenamestime.hourstime.minuteetime.houretime.minute;if(bnumber=bus_num)/bus(string bn,string xn,int p,string n,int sh,int sm,int eh,int em)bus bus1=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;int passager=rand()%10;cout本次有passager人等车,请依次刷卡乘车endl;/将系统中的所有一卡通读出来 ifstream file(mycard.txt);vector cards(200);int i=0;while(!file.eof()string name_read;string id;int money;int count;int type;filename_readidmoneycounttype;if(name!=name_read)StuCardcard(name_read,id,money,type,count);/coutcard.get_name()endl;/coutcard.get_name();cardsi=card;i+;file.close();int x;for(x=0;xid_num;int w;for(w=0;wi;w+) if(cardsw.get_id()=id_num)cardsw.pay();/将新的一卡通信息回写 int j;ofstream out(mycard.txt);for(j=0;ji-1;j+)outcardsj.get_name() cardsj.get_id() cardsj.get_money() cardsj.get_count() cardsj.get_type()endl;/乘客全部上车/开车cout本趟车共有乘客:pas
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 眼化学伤的急救和治疗原则
- 脑血栓的溶栓治疗
- 肛肠疾病的中医治疗
- 课件字体标准教学课件
- 高三化学一轮复习 离子反应 课件
- 1.1.1原子结构和原子光谱 课件 高二上学期化学人教版(2019)选择性必修2
- 日光性皮肤病
- 初中生网络安全教育
- 物业主管半年述职报告
- 踩高跷教案反思大班
- 心肺复苏术课件2024新版
- 安全环保职业健康法律法规清单2024年
- 北师大版数学一年级上册期中考试试题
- 治本攻坚三年行动
- 行政复议法-形考作业2-国开(ZJ)-参考资料
- web前端开发工程师职业生涯规划
- 起重机械安全技术规程(TSG-51-2023)宣贯解读课件
- 职业倦怠量表MBIGS (MBIGeneral Survey)
- 修路占地补偿协议书3篇
- 桥梁工程课程设计(完整版)
- 新经济地理学
评论
0/150
提交评论