C++实验报告姓名:赵妍学院:软件学院学号:14130140358一、实验要求•完成一个完整的简化系统:一卡通乘车系统。•一卡通乘车系统主要完成的功能是,支持一卡通刷卡乘车;对每张一卡通的使用情况及费用进行统计;对每辆班车的运行情况进行统计。•在实现该系统的功能时,不要求实现图形界面,控制台输出即可。•必须采用面向对象程序设计的方式实现。二、程序中所设计的类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);};3、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中办卡的信息删去了。以vectorStuCardcards(200)的方式,定义了一个类的数组,当输入需要删除的人的姓名之后,从文件头开始查找,当输入的人名与mycard中已存的信息不匹配的时候,就将这一组信息写入数组,到文件尾结束,再将数组里面的写入mycard中,这样子就把想要删掉的内容删掉了。五、运行结果及分析文档设置:Mycard内容分别对应姓名,学号,余额,乘车次数,卡的类型(1=学生卡;2=教师卡,3=限制卡)Bus的内容分别对应为车牌号,车类型,最大载乘人数,驾驶员姓名,预计出发时间(时、分)和预计到达时间(时、分)当运行程序时,会看到如下界面选择1,进入乘车系统首先输入车牌信息,随机产生等车人数,刷卡上车,即输入卡号输入1402012,即李四上车,李四的乘车次数加1,余额减2,写入文件,可以看到其中,李四的乘车信息相比初始时发生了正确的改变。并且随机产生的30组发车时间和到站时间,发车准时率和到站准时率,载乘人数比也正确的算出。选择2,进入一卡通管理系统选择1,办新卡输入张三,为张三办一张新卡,张三的卡号从people文件读取,卡的类型,根据张三的职业的定义初始化为1=学生卡;2=教师卡,3=限制卡,新卡余额默认100元,乘车次数为0。若选择2,删除一张卡如图,将刚刚插入的张三的信息删除,并且更新文件信息,张三在mycard内的记录已经不见了。删卡成功。六、源代码#includeiostream#includestring.h#includefstream#includeostream#includecstdlib#includesstream#includevector#includestdio.husingnamespacestd;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(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你的余额过低,请及时充值!'\n';}if(count20){cout本次开始收费!\n;money-=2;count=count+1;cout你的卡余额为:money'\n';if(money5)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;}string