西电软件学院c++上机实验报告Word文件下载.docx
《西电软件学院c++上机实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《西电软件学院c++上机实验报告Word文件下载.docx(31页珍藏版)》请在冰豆网上搜索。
//卡号
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{
//姓名
stringsex;
//性别
stringwork;
//职务
stringoffice;
//所属单位
stringnumber;
//学号/工号
People(stringn,strings,stringw,stringo,stringb);
//构造函数
voidreadPeople();
//用于在主函数中读入人的信息
voidshow(stringname,stringsex,stringwork,stringoffice,stringnumber);
voidaddPeople();
//申请一张新卡
voiddeletePeople();
//注销一卡通
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>
string.h>
fstream>
ostream>
cstdlib>
sstream>
vector>
stdio.h>
usingnamespacestd;
voidshow();
stringget_name(){
returnname;
}
stringget_id(){
returnid;
StuCard(){
name="
null"
;
id="
money=0;
count=0;
type=0;
intget_type(){
returntype;
intget_money(){
returnmoney;
intget_count(){
returncount;
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<
你的余额过低,请及时充值!
<
if(type==2)
{
count=count+1;
cout<
if(type==3)
{
if(count<
20){
count=count+1;
cout<
}
if(count==20){
这是本学期内最后一次免费乘车!
\n"
if(count>
本次开始收费!
money-=2;
intStuCard:
GetRest(){
returnmoney;
show()
名字:
name<
卡的类型:
type<
乘车次数:
count<
StuCard:
StuCard(stringname,stringid,intmoney,inttype,intcount){
this->
name=name;
id=id;
money=money;
type=type;
count=count;
//People
classPeople{
People:
People(stringn,strings,stringw,stringo,stringb)
sex=s;
work=w;
office=o;
number=b;
voidPeople:
readPeople()
请输入姓名:
endl;
cin>
>
name;
请输入性别:
sex;
请输入职务:
work;
请输入所属单位:
office;
if(work=="
学生"
)
请输入学号:
cin>
number;
else
请输入工号:
addPeople()//定义添加持卡人函数
Peoplepeople1("
a1"
"
b2"
c3"
d4"
e5"
);
//实例化对象
ofstreamfileout("
people.txt"
ios:
app);
//打开文件
if(!
fileout)
不能打开文件!
请输入持卡人基本信息:
people1.readPeople();
//读入信息
fileout<
people1.get_name()<
people1.get_sex()<
people1.get_work()<
people1.get_office()
<
people1.get_number()<
//写入信息
fileout.close();
//关闭文件
deletePeople()
ifstreamfilein("
filein)
打开文件失败!
stringt,m;
intn=0;
//标签,是否有这个读者
请输入删除持卡人的的姓名:
m;
请输入删除持卡人的的学号或工号:
t;
do
{
stringx,y,z,u,w;
//定义变量
strings;
getline(filein,s);
//读入每一行
istringstreamsin(s);
sin>
x>
y>
z>
u>
w;
//把s中第一个字符串给a
people1.txt"
//写到新文件中去
if(m!
=x||t!
=w)//判断是否为删除的地方
fileout<
s<
//写入数据
if(m==x&
&
t==w)//判断是否为删除的地方
{
n=1;
原持卡人信息为:
姓名:
x<
性别:
y<
职务:
z<
所属单位:
u<
if(z=="
)cout<
学号:
w<
elsecout<
工号:
是否删除?
(Y:
是,N:
否)"
chara;
cin>
a;
if(a=='
Y'
{
cout<
删除成功!
}
if(a=='
N'
未删除!
fileout<
//写入到文件
fileout.close();
while(!
filein.eof());
//判断是否到文件尾
if(n==0)//不存在这个学生
未找到要删除的持卡人!
filein.close();
//关闭
ifstreamfilei("
//打开文档
out);
//打开文档并清空内容
for(strings;
getline(filei,s);
)//将修改后的内容写到文件中去
fileout<
filei.close();
system("
delpeople1.txt"
//删除文件副本
}
bus(stringbn,stringxn,intp,stringn,intsh,intsm,inteh,intem)
//获得实际发车时间
//获得实际到站时间
voidbus:
Stime(inta,intb)
stime.hour=a;
stime.minute=b;
发车时间为:
stime.hour<
stime.minute<
Etime(intc,intd)
etime.hour=c;
etime.minute=d;
到站时间为:
etime.hour<
etime.minute<
show(stringbnumber,stringxnumber,intpeople,stringname)
车牌号:
bnumber<
型号:
xnumber<
载乘人数:
people<
驾驶员名字:
name<