




已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
廣東海洋大學(xué)信息學(xué)院課程設(shè)計(jì)報(bào)告設(shè)計(jì)題目公交換乘系統(tǒng)課程名稱(chēng)數(shù)據(jù)結(jié)構(gòu)姓名(學(xué)號(hào))聯(lián)系電話專(zhuān)業(yè)名稱(chēng)計(jì)算機(jī)科學(xué)與技術(shù)所在班級(jí)1101班指導(dǎo)教師教師職稱(chēng)起止時(shí)間2011 年12月26日至 2012年1月6日評(píng)定成績(jī)一、 課程設(shè)計(jì)的主要內(nèi)容1、 公交線路中,為用戶(hù)查找最短路徑,有【0】次換乘就能到達(dá)目的地和【1】次換乘就能到達(dá)目的地。2、 為用戶(hù)計(jì)算出路程所需費(fèi)用。3、 該課程設(shè)計(jì)的公交系統(tǒng)中有分權(quán)限;分管理員用戶(hù)和普通用戶(hù),管理員的登陸需要帳號(hào)和密碼(暗文),普通用戶(hù)可以直接登陸。4、 管理員可以重新輸入新公交路線、輸出公交路線、讀取已經(jīng)存盤(pán)的公交路線資料、存入新公交路線資料(慎用?。?、查找最短公交路線、新增管理員用戶(hù)和刪除管理員用戶(hù)。5、 普通用戶(hù)只能輸出公交路線和查找最短公交路線兩個(gè)功能。二、 功能和結(jié)構(gòu)設(shè)計(jì)1、 為用戶(hù)分權(quán)限2、 管理員有重新輸入新公交路線、輸出公交路線、讀取已經(jīng)存盤(pán)的公交路線資料、存入新公交路線資料(慎用?。⒉檎易疃坦宦肪€、新增管理員用戶(hù)和刪除管理員用戶(hù)3、 普通用戶(hù)只能輸出公交路線和查找最短公交路線兩個(gè)功能。注:系統(tǒng)默認(rèn)的公交線路圖(系統(tǒng)開(kāi)發(fā)者為用戶(hù)事先存好的,在f1.txt文檔中)三、 流程圖和算法設(shè)計(jì)算法:(給出查找最短路徑的方法)void Bus:findline()int x,y,i,j,k,l,longers;longers=0;/x、y是起始和終止車(chē)站的編碼;i、j是每個(gè)站點(diǎn)后兩位編碼;k是每個(gè)站點(diǎn)后兩位編碼的差值;l是轉(zhuǎn)乘站點(diǎn)的后兩位編碼while(1)coutx;couty;if(x/100)lineNum|(x/100)=busStationNumx/100-1|(y/100)lineNum|(y/100)=busStationNumy/100-1)/前兩個(gè)是判斷車(chē)站編碼的首位的,第三個(gè)是判斷車(chē)站編碼的后兩位的cout-找不到您所輸入站點(diǎn),請(qǐng)重新輸入!-endl;elsebreak;i=x%100;j=y%100;if(x/100)=(y/100)cout您可【0】次換乘到達(dá)目的地,路線如下:0)for(k=0;kj-i;k+)coutlinex/100-1x%100+k.busStationName;longers+=linex/100-1x%100+k.longer;coutlinex/100-1x%100+k.busStationNamej-i;k-)coutlinex/100-1x%100+k.busStationName;longers+=linex/100-1x%100+k-1.longer;coutlinex/100-1x%100+k.busStationNameendl;longers+=linex/100-1x%100+k.longer;cout-路程所需費(fèi)用:longers*0.5元,祝您路途愉快!-endl;elsestring takeName25;/存放兩條路線上可轉(zhuǎn)乘車(chē)站的名稱(chēng);int takeNum25;/存放兩條路線上可轉(zhuǎn)乘車(chē)站的編號(hào);int a,b;/a、b是計(jì)數(shù)的for(a=0;a2;a+)for(b=0;b5;b+)takeNameab= ;takeNumab=0;/遍歷每條路線可換乘的站點(diǎn)for(a=0,b=0;abusStationNumx/100-1;a+)if(linex/100-1a.take)takeName0b=linex/100-1a.busStationName;takeNum0b=linex/100-1a.number;b+;for(a=0,b=0;abusStationNumy/100-1;a+)if(liney/100-1a.take)takeName1b=liney/100-1a.busStationName;takeNum1b=liney/100-1a.number;b+;/比較可換乘的站點(diǎn)是否有相同的,如果有,可以了一次換乘到達(dá)目的地;否則不可以bool nn=false;for(a=0;a5;a+)for(b=0;b5;b+)if(takeName0a!= &takeName1b!= &takeName0a=takeName1b)cout您可以【1】次換乘到達(dá)目的地(換乘點(diǎn)前面有“*”提示),為你選擇的路線如下:0)for(k=0;kl-i;k+)coutlinex/100-1x%100+k.busStationName;longers+=linex/100-1x%100+k.longer;cout*linex/100-1x%100+k.busStationName;/money+=linex/100-1x%100+k.longer;elsefor(k=0;kl-i;k-)coutlinex/100-1x%100+k.busStationName;longers+=linex/100-1x%100+k-1.longer;cout*linex/100-1x%100+k.busStationName;/money+=linex/100-1x%100+k.longer;l=takeNum1b%100;if(j-l0)longers+=liney/100-1l.longer;for(k=1;kj-l;k+)coutliney/100-1l+k.busStationName;longers+=liney/100-1l+k.longer;coutliney/100-1l+k.busStationNamej-l;k-)coutliney/100-1l+k.busStationName;longers+=liney/100-1l+k.longer;coutliney/100-1l+k.busStationNameendl;longers+=liney/100-1l+k.longer;cout-路程所需費(fèi)用:longers*0.5元,祝您路途愉快!-endl;nn=true;break;else if(a=4&b=4)cout很抱歉,沒(méi)有【0】次換乘或【1】次換乘可以到達(dá)目的地的路線!;if(nn)break;四、 源程序代碼Bus.h:#include#includeusing namespace std;template class Buspublic:struct BusStationint number; /車(chē)站編號(hào)string busStationName;/車(chē)站名稱(chēng)bool take; /是否可乘換int longer; /到下一個(gè)車(chē)站的路程;Bus();Bus();void input();void output();void findline();/查找線路void readfile();/讀取公交路線數(shù)據(jù)void writefile();/存入公交路線數(shù)據(jù)typedef BusStation* Pointer;private:Pointer *line; /指向三條路線的指針int lineNum;/路線數(shù)int *busStationNum;/每條路線的車(chē)站數(shù);templateclass Administratorpublic:Administrator();Administrator();void readAdministrator();/讀取管理員資料void writeAdministrator();/存入管理員資料void addAdministrator();/增加用戶(hù)void deleteAdministrator();/刪除用戶(hù)bool land();private:string *name;string *mima;int num;/Bus.cpp#includeBus.h#includetemplateBus:Bus()lineNum=0;line=new PointerlineNum;/三條線路busStationNum=new int lineNum;/每條線路的車(chē)站數(shù)templateBus:Bus()for(int i=0;ilineNum;i+)delete linei;lineNum=0;delete busStationNum;delete line;templatevoid Bus:input()coutlineNum;line=new PointerlineNum;/三條線路busStationNum=new int lineNum;/每條線路的車(chē)站數(shù)for(int a=0;alineNum;a+)cout請(qǐng)輸入第a+1busStationNuma;for(int b=0;blineNum;b+)lineb=new BusStationbusStationNumb;/依據(jù)每條線路的車(chē)站數(shù)創(chuàng)建每條線路int k,m,i,j;/k指前一線,m指后一線,i指要比較的前一線的車(chē)站,j指要比較的后一線的車(chē)站cout請(qǐng)依次輸入每個(gè)車(chē)站的名稱(chēng)、到下一站點(diǎn)的距離:endl;for(i=0;ilineNum;i+)cout第i+1條路線的資料endl;for(j=0;jlineij.busStationName;if(jlineij.longer;/到下一站點(diǎn)有3公里elsecinlineij.longer;/以下是要找出線路中可換乘的車(chē)站for(k=0,m=k+1;klineNum-1;)/每條路線的站點(diǎn)與另一條路線的站點(diǎn)進(jìn)行比較for(i=0;ibusStationNumk;i+)for(j=0;j=lineNum-1)k+;m=k;m+;templatevoid Bus:output()cout編碼 ;cout車(chē)站名稱(chēng) ;cout到下一站的距離 ;cout是否可以乘換endl;coutsetiosflags(ios:left);for(int i=0;ilineNum;i+)for(int j=0;jbusStationNumi;j+)coutsetw(6)lineij.number;coutsetw(20)lineij.busStationName;coutsetw(20)lineij.longer;if(lineij.take)cout是 endl;elsecout否 endl;coutendl;templatevoid Bus:findline()int x,y,i,j,k,l,longers;longers=0;/x、y是起始和終止車(chē)站的編碼;i、j是每個(gè)站點(diǎn)后兩位編碼;k是每個(gè)站點(diǎn)后兩位編碼的差值;l是轉(zhuǎn)乘站點(diǎn)的后兩位編碼while(1)coutx;couty;if(x/100)lineNum|(x/100)=busStationNumx/100-1|(y/100)lineNum|(y/100)=busStationNumy/100-1)/前兩個(gè)是判斷車(chē)站編碼的首位的,第三個(gè)是判斷車(chē)站編碼的后兩位的cout-找不到您所輸入站點(diǎn),請(qǐng)重新輸入!-endl;elsebreak;i=x%100;j=y%100;if(x/100)=(y/100)cout您可【0】次換乘到達(dá)目的地,路線如下:0)for(k=0;kj-i;k+)coutlinex/100-1x%100+k.busStationName;longers+=linex/100-1x%100+k.longer;coutlinex/100-1x%100+k.busStationNamej-i;k-)coutlinex/100-1x%100+k.busStationName;longers+=linex/100-1x%100+k-1.longer;coutlinex/100-1x%100+k.busStationNameendl;longers+=linex/100-1x%100+k.longer;cout-路程所需費(fèi)用:longers*0.5元,祝您路途愉快!-endl;elsestring takeName25;/存放兩條路線上可轉(zhuǎn)乘車(chē)站的名稱(chēng);int takeNum25;/存放兩條路線上可轉(zhuǎn)乘車(chē)站的編號(hào);int a,b;/a、b是計(jì)數(shù)的for(a=0;a2;a+)for(b=0;b5;b+)takeNameab= ;takeNumab=0;/遍歷每條路線可換乘的站點(diǎn)for(a=0,b=0;abusStationNumx/100-1;a+)if(linex/100-1a.take)takeName0b=linex/100-1a.busStationName;takeNum0b=linex/100-1a.number;b+;for(a=0,b=0;abusStationNumy/100-1;a+)if(liney/100-1a.take)takeName1b=liney/100-1a.busStationName;takeNum1b=liney/100-1a.number;b+;/比較可換乘的站點(diǎn)是否有相同的,如果有,可以了一次換乘到達(dá)目的地;否則不可以bool nn=false;for(a=0;a5;a+)for(b=0;b5;b+)if(takeName0a!= &takeName1b!= &takeName0a=takeName1b)cout您可以【1】次換乘到達(dá)目的地(換乘點(diǎn)前面有“*”提示),為你選擇的路線如下:0)for(k=0;kl-i;k+)coutlinex/100-1x%100+k.busStationName;longers+=linex/100-1x%100+k.longer;cout*linex/100-1x%100+k.busStationName;/money+=linex/100-1x%100+k.longer;elsefor(k=0;kl-i;k-)coutlinex/100-1x%100+k.busStationName;longers+=linex/100-1x%100+k-1.longer;cout*linex/100-1x%100+k.busStationName;/money+=linex/100-1x%100+k.longer;l=takeNum1b%100;if(j-l0)longers+=liney/100-1l.longer;for(k=1;kj-l;k+)coutliney/100-1l+k.busStationName;longers+=liney/100-1l+k.longer;coutliney/100-1l+k.busStationNamej-l;k-)coutliney/100-1l+k.busStationName;longers+=liney/100-1l+k.longer;coutliney/100-1l+k.busStationNameendl;longers+=liney/100-1l+k.longer;cout-路程所需費(fèi)用:longers*0.5元,祝您路途愉快!-endl;nn=true;break;else if(a=4&b=4)cout很抱歉,沒(méi)有【0】次換乘或【1】次換乘可以到達(dá)目的地的路線!;if(nn)break;/cout還未寫(xiě)代碼;templatevoid Bus:readfile()ifstream infile(f1.txt,ios:in);if(!infile)cerropen error!lineNum;line=new PointerlineNum;/三條線路busStationNum=new int lineNum;/每條線路的車(chē)站數(shù)for(int a=0;abusStationNuma;for(int b=0;blineNum;b+)lineb=new BusStationbusStationNumb;/依據(jù)每條線路的車(chē)站數(shù)創(chuàng)建每條線路for(int i=0;ilineNum;i+)for(int j=0;jlineij.number;infilelineij.busStationName;infilelineij.longer;infilelineij.take;cout-讀取成功-endl;infile.close();template void Bus:writefile()ofstream outfile(f1.txt,ios:out);if(!outfile)cerropen error!endl;exit(1);outfilelineNum ;for(int a=0;alineNum;a+)outfilebusStationNuma ;for(int i=0;ilineNum;i+)for(int j=0;jbusStationNumi;j+)outfilelineij.number ;outfilelineij.busStationName ;outfilelineij.longer ;outfilelineij.take ;cout-存入成功-endl;outfile.close();/template Administrator:Administrator()num=0;name=new stringnum;mima=new stringnum;templateAdministrator:Administrator()num=0;delete name;delete mima;name=NULL;mima=NULL;templatevoid Administrator:readAdministrator()ifstream infile(Administrator.txt,ios:in);if(!infile)cerropen error!num;name=new stringnum;mima=new stringnum;for(int i=0;inameimimai;templatevoid Administrator:writeAdministrator()ofstream outfile(Administrator.txt,ios:out);if(!outfile)cerropen error!endl;exit(1);outfilenum ;for(int i=0;inum;i+)outfilenamei ;outfilemimai ;templatebool Administrator:land()string myname;string mymima;coutmyname;cout 密碼:;char ch; while (ch=getch()!=13) /輸入密碼時(shí)顯示星號(hào)功能。老師,學(xué)生登錄時(shí)也與這個(gè)相同。 mymima+=ch;/string對(duì)象重載了+= coutmymima;readAdministrator();for(int i=0;inum;i+)if(myname=namei&mymima=mimai)return true;return false;template void Administrator:addAdministrator()string *name_aux,*mima_aux;name_aux=new stringnum+1;mima_aux=new stringnum+1;for(int i=0;inum;i+)/將用戶(hù)的帳戶(hù)和密碼賦給輔助變量name_auxi=namei;mima_auxi=mimai;/一下幾行代碼是為了擴(kuò)大存儲(chǔ)帳戶(hù)和密碼的數(shù)組delete name;delete mima;num+;name=new stringnum;mima=new stringnum;for(int j=0;jnum-1;j+)/將用戶(hù)和密碼重新復(fù)制回來(lái)namej=name_auxj;mimaj=mima_auxj;delete name_aux;delete mima_aux;name_aux=NULL;mima_aux=NULL;coutnamenum-1;coutmimanum-1;for(int k=0;knum-1;k+)if(namek=namenum-1)cout帳戶(hù)已存在!;num-;break;else if(k=num-2)cout-新管理員用戶(hù)創(chuàng)建成功-;writeAdministrator();templatevoid Administrator:deleteAdministrator()string dname,dmima;/分別存放要?jiǎng)h除的管理員用戶(hù)的帳號(hào)和密碼coutdname;coutdmima;for(int i=0;inum;i+)if(dname=namei&dmima=mimai)for(int j=i;jnum-1;j+)namej=namej+1;mimaj=mimaj+1;num-;writeAdministrator();cout-您已經(jīng)成功刪除dname管理員用戶(hù)=num-1)cout-您要?jiǎng)h除的用戶(hù)不存在!-;getch();/main.cpp/*日期:2011.12.282011.12.30作者:周欽雄聲明:我只是編程世界中小兵,程序中不足之處請(qǐng)多多提點(diǎn),不勝感激*/#includeBus.cpp#include#include#includevoid main()/system(Color 3D);Bus b;Administrator a;int num;loop:while(1)system(cls);coutsetw(70)endl;coutsetw(70) 歡迎進(jìn)入公交換乘系統(tǒng) wwwwwwwwwendl;coutsetw(70) endl;coutsetw(70) 1、 管理員登陸 endl;coutsetw(70) 2、普通用戶(hù)登陸 endl;coutsetw(70) 3、 退出 endl;coutsetw(70) 請(qǐng)選擇 endl;coutsetw(70)num;switch(num)case 1:if(a.land()goto g;elsecoutendl;cout-用戶(hù)不存在或密碼錯(cuò)誤-;getch();break;case 2:goto h;break;case 3:goto I;break;default:cout-您的輸入有誤!按任意鍵重新選擇-;getch();goto loop;g:while(1)system(cls);coutsetw(70)endl;coutsetw(70) 管理員界面 wwwwwwwwwendl;coutsetw(70) endl;coutsetw(70) 1、輸入新公交路線 endl;coutsetw(70) 2、輸出公交路線 endl;coutsetw(70) 3、讀取公交線資料 endl;coutsetw(70) 4、存入公交線資料(慎用?。?endl;coutsetw(70) 5、查找最短公交路線 endl;coutsetw(70) 6、新增管理員用戶(hù) endl;coutsetw(70) 7、刪除管理員用戶(hù) endl;coutsetw(70) 8、 返回 endl;couts
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 經(jīng)濟(jì)承包合同協(xié)議書(shū)
- 購(gòu)買(mǎi)沙子水泥協(xié)議書(shū)
- 貸款質(zhì)押監(jiān)管協(xié)議書(shū)
- 質(zhì)押財(cái)產(chǎn)抵債協(xié)議書(shū)
- 購(gòu)買(mǎi)假酒賠償協(xié)議書(shū)
- 詳細(xì)夫妻財(cái)產(chǎn)協(xié)議書(shū)
- 自主訓(xùn)練免責(zé)協(xié)議書(shū)
- xx市土壤污染源頭防控實(shí)施方案
- 經(jīng)濟(jì)法概論的重要性與試題及答案
- 行政法學(xué)理論的升華試題及答案
- 四下勞動(dòng)實(shí)踐試題及答案
- 醫(yī)療機(jī)構(gòu)經(jīng)營(yíng)情況說(shuō)明范文
- 月子中心產(chǎn)康部產(chǎn)后恢復(fù)流程解析
- 中國(guó)郵政集團(tuán)有限公司國(guó)企招聘筆試真題2024
- 社會(huì)福利 課件匯 高和榮 第6-11章 社會(huì)福利客體-社會(huì)福利的挑戰(zhàn)
- 2025年安徽合肥東部新中心建設(shè)管理辦公室招聘2人歷年高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- 熱電材料與器件-深度研究
- 2024-2025學(xué)年統(tǒng)編版道德與法治八年級(jí)下冊(cè)第四單元檢測(cè)卷(含答案)
- GB/T 2812-2024頭部防護(hù)通用測(cè)試方法
- 呼吸機(jī)濕化的護(hù)理
- 總公司與分公司隸屬關(guān)系證明-企業(yè)管理
評(píng)論
0/150
提交評(píng)論