西電軟件學(xué)院c++上機(jī)實(shí)驗(yàn)報告.doc_第1頁
西電軟件學(xué)院c++上機(jī)實(shí)驗(yàn)報告.doc_第2頁
西電軟件學(xué)院c++上機(jī)實(shí)驗(yàn)報告.doc_第3頁
西電軟件學(xué)院c++上機(jī)實(shí)驗(yàn)報告.doc_第4頁
西電軟件學(xué)院c++上機(jī)實(shí)驗(yàn)報告.doc_第5頁
已閱讀5頁,還剩33頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

C+實(shí)驗(yàn)報告 姓 名: 趙 妍 學(xué) 院: 軟件學(xué)院 學(xué) 號: 141301403581、 實(shí)驗(yàn)要求 完成一個完整的簡化系統(tǒng):一卡通乘車系統(tǒng)。 一卡通乘車系統(tǒng)主要完成的功能是,支持一卡通刷卡乘車;對每張一卡通的使用情況及費(fèi)用進(jìn)行統(tǒng)計;對每輛班車的運(yùn)行情況進(jìn)行統(tǒng)計。 在實(shí)現(xiàn)該系統(tǒng)的功能時,不要求實(shí)現(xiàn)圖形界面,控制臺輸出即可。 必須采用面向?qū)ο蟪绦蛟O(shè)計的方式實(shí)現(xiàn)。2、 程序中所設(shè)計的類 class StuCard; Class People; class bus;3、 類中的關(guān)鍵數(shù)據(jù)成員和成員函數(shù)1、StuCard類class StuCardpublic:void pay();/上車刷卡時調(diào)用此函數(shù),根據(jù)卡的類型扣除上車費(fèi)用并給出 相應(yīng)提示 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;/乘車次數(shù) private:string name;/持卡人姓名 string id;/卡號 int money;/余額 int type;/卡的類型 (type=1,學(xué)生卡;type=2,教師卡;type=3,限制卡) int count; /乘車次數(shù) ;/定義了一個StuCard的類,用type來區(qū)分卡的類型,用get_X函數(shù)在主函 數(shù)中來獲得數(shù)據(jù)成員的值2、bus類struct timeint hour;int minute;class busstring bnumber;/車牌號string xnumber;/型號int people;/載乘人數(shù) string name;/駕駛員姓名struct time stime;/發(fā)車時間struct time etime;/到站時間 struct time t_stime;/實(shí)際發(fā)車時間struct time t_etime;/實(shí)際到站時間 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;/構(gòu)造函數(shù)string get_b()return bnumber;/獲得車牌號string get_x()return xnumber;/獲得車的型號int get_p()return people;/獲取上車人數(shù)string get_n()return name;/獲取駕駛員姓名void Stime(int a,int b);/獲取預(yù)計發(fā)車時間void Etime(int c,int d);/獲取預(yù)計到站時間void show(string bnumber,string xnumber,int people,string name);void T_stime(int ta,int tb);/獲取實(shí)際發(fā)車時間void T_etime(int tc,int td);/獲取實(shí)際到站時間float peoplebi(float e,float f);/載乘人數(shù)比int get_sthour(); /獲得發(fā)車時間的小時int get_stminute();/獲得發(fā)車時間的分鐘 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;/職務(wù)string office;/所屬單位string number;/學(xué)號/工號public:People(string n,string s,string w,string o,string b);/構(gòu)造函數(shù)void readPeople();/用于在主函數(shù)中讀入人的信息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、 運(yùn)行流程的說明 主程序分為兩個系統(tǒng):乘車系統(tǒng)和一卡通管理系統(tǒng)。 1、 乘車系統(tǒng)主要實(shí)現(xiàn)的功能如下: 首先,采用隨機(jī)函數(shù),生成本站會上車的人數(shù),這個人數(shù)不超過車的最大載乘人數(shù)。其次,生成幾個人上車,就依次輸入幾個人的卡號,持卡人在持卡上車時一卡通余額、乘車次數(shù)會發(fā)生變更,并且根據(jù)余額的多少會有相應(yīng)提示信息,再將變更后的信息寫入文件 公交車在每上一個人的時候乘車人數(shù)加一,到達(dá)最大載乘人數(shù)時提示不能再刷卡上車,并且采用隨機(jī)函數(shù),隨機(jī)生成預(yù)計發(fā)車時間、預(yù)計到站時間,實(shí)際發(fā)車時間和實(shí)際到站時間,計算發(fā)車準(zhǔn)時率和到站準(zhǔn)時率,再將變更后的的信息寫入文件 2、一卡通管理系統(tǒng)主要實(shí)現(xiàn)的功能如下: 在文件中保存人的基本信息,記錄每個人的乘車次數(shù),增加申請新卡,注銷一卡通的功能。 在程序中有一個people的txt文件,里面儲存了人的信息,卡的主體是人,辦卡的前提是人在people文件中存在。當(dāng)選擇辦卡時,輸入people中存在的人名,從文件頭開始查找,到文件尾結(jié)束,當(dāng)輸入的人名與people中已存的信息相匹配的時候,就將這組信息(包括姓名,學(xué)號,卡的類型,余額(新辦的卡余額初始化為50),乘車次數(shù)(新卡為0)寫入mycard.txt文件中去,辦卡成功。 當(dāng)需要刪除一個卡的時候,人的信息沒有改動,只是將mycard.txt中辦卡的信息刪去了。以vector cards(200)的方式,定義了一個類的數(shù)組,當(dāng)輸入需要刪除的人的姓名之后,從文件頭開始查找,當(dāng)輸入的人名與mycard中已存的信息不匹配的時候,就將這一組信息寫入數(shù)組,到文件尾結(jié)束,再將數(shù)組里面的寫入mycard中,這樣子就把想要刪掉的內(nèi)容刪掉了。5、 運(yùn)行結(jié)果及分析 文檔設(shè)置:Mycard內(nèi)容分別對應(yīng) 姓名,學(xué)號,余額,乘車次數(shù),卡的類型(1=學(xué)生卡;2=教師卡,3=限制卡)Bus的內(nèi)容分別對應(yīng)為 車牌號,車類型,最大載乘人數(shù),駕駛員姓名,預(yù)計出發(fā)時間(時、分)和預(yù)計到達(dá)時間(時、分)當(dāng)運(yùn)行程序時,會看到如下界面選擇1,進(jìn)入乘車系統(tǒng)首先輸入車牌信息,隨機(jī)產(chǎn)生等車人數(shù),刷卡上車,即輸入卡號輸入1402012,即李四上車,李四的乘車次數(shù)加1,余額減2,寫入文件,可以看到其中,李四的乘車信息相比初始時發(fā)生了正確的改變。并且隨機(jī)產(chǎn)生的30組發(fā)車時間和到站時間,發(fā)車準(zhǔn)時率和到站準(zhǔn)時率,載乘人數(shù)比也正確的算出。選擇2,進(jìn)入一卡通管理系統(tǒng) 選擇1,辦新卡輸入張三,為張三辦一張新卡,張三的卡號從people文件讀取,卡的類型,根據(jù)張三的職業(yè)的定義初始化為1=學(xué)生卡;2=教師卡,3=限制卡,新卡余額默認(rèn)100元,乘車次數(shù)為0。若選擇2,刪除一張卡如圖,將剛剛插入的張三的信息刪除,并且更新文件信息,張三在mycard內(nèi)的記錄已經(jīng)不見了。刪卡成功。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,學(xué)生卡;type=2,教師卡;type=3,限制卡) int count; /乘車次數(shù) ; 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這是本學(xué)期內(nèi)最后一次免費(fèi)乘車!n; cout 你的卡余額為:money n; if(money5) cout你的余額過低,請及時充值! 20) cout本次開始收費(fèi)!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乘車次數(shù):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請輸入職務(wù):work;cout請輸入所屬單位:office;if(work=學(xué)生)cout請輸入學(xué)號:number;elsecout請輸入工號:number;void People:addPeople()/定義添加持卡人函數(shù)People people1(a1,b2,c3,d4,e5);/實(shí)例化對象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();/關(guān)閉文件void People:deletePeople()ifstream filein(people.txt);/打開文件if(!filein)cout打開文件失敗!endl;elsestring t,m;int n=0;/標(biāo)簽,是否有這個讀者cout請輸入刪除持卡人的的姓名:m; cout請輸入刪除持卡人的的學(xué)號或工號: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;/寫入數(shù)據(jù)if(m=x&t=w)/判斷是否為刪除的地方n=1;cout原持卡人信息為:endl;cout姓名:xendl;cout性別:yendl;cout職務(wù):zendl;cout所屬單位:uendl;if(z=學(xué)生) cout學(xué)號:wendl;else cout工號:wendl;cout是否刪除?(Y:是,N:否)a;if(a=Y)cout刪除成功!endl; if(a=N)cout未刪除!endl; fileoutx y zendl;/寫入到文件fileout.close();/關(guān)閉文件while(!filein.eof();/判斷是否到文件尾if(n=0)/不存在這個學(xué)生cout未找到要刪除的持卡人!endl;filein.close();/關(guān)閉ifstream filei(people1.txt);/打開文檔ofstream fileout(people.txt,ios:out);/打開文檔并清空內(nèi)容for(string s;getline(filei,s);)/將修改后的內(nèi)容寫到文件中去fileoutsendl;filei.close();/關(guān)閉文件fileout.close();/關(guān)閉文件system(del people1.txt);/刪除文件副本 class busstring bnumber;/車牌號string xnumber;/型號int people;/載乘人數(shù) string name;/駕駛員姓名struct time stime;/發(fā)車時間struct time etime;/到站時間 struct time t_stime;/實(shí)際發(fā)車時間struct time t_etime;/實(shí)際到站時間 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();/獲得實(shí)際發(fā)車時間 int get_ethour();int get_etminute();/獲得實(shí)際到站時間 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發(fā)車時間為:;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載乘人數(shù):peopleendl;cout駕駛員名字:nameendl;void bus:T_stime(int ta,int tb)t_stime.hour=ta;t_stime.minute=tb;cout實(shí)際發(fā)車時間為:;coutt_stime.hour:t_stime.minuteendl;void bus:T_etime(int tc,int td)t_etime.hour=tc;t_etime.minute=td;cout實(shí)際到站時間為:;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:乘車系統(tǒng);2:一卡通辦理系統(tǒng);3:退出s;while(s!=3)/判斷系統(tǒng) if(s=2)cout歡迎進(jìn)入一卡通管理系統(tǒng)!endl; cout請根據(jù)需要輸入相應(yīng)的數(shù)字: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=學(xué)生)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系統(tǒng)中所有的卡:endl;ifstream file(mycard.txt);string name_read;string id;int money;int count;int type;cout姓名tidt余額t乘車次數(shù)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歡迎進(jìn)入一卡通管理系統(tǒng)!endl; cout請根據(jù)需要輸入相應(yīng)的數(shù)字:endl; cout1:辦新卡;2.注銷一卡通;3.退出;4.添加用戶;5.刪除用戶t;/乘車系統(tǒng) if(s=1)coutbus_num; ifstream in(bus.txt); while(!in.eof() string bnumber;/車牌號string xnumber;/型號int people;/載乘人數(shù) string name;/駕駛員姓名struct time stime;/發(fā)車時間struct time etime;/到站時間 struct time t_stime;/實(shí)際發(fā)車時間struct time t_etime;/實(shí)際到站時間 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;/將系統(tǒng)中的所有一卡通讀出來 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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論