




已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
廣東海洋大學信息學院課程設計報告設計題目公交換乘系統(tǒng)課程名稱數據結構姓名(學號)聯系電話專業(yè)名稱計算機科學與技術所在班級1101班指導教師教師職稱起止時間2011 年12月26日至 2012年1月6日評定成績一、 課程設計的主要內容1、 公交線路中,為用戶查找最短路徑,有【0】次換乘就能到達目的地和【1】次換乘就能到達目的地。2、 為用戶計算出路程所需費用。3、 該課程設計的公交系統(tǒng)中有分權限;分管理員用戶和普通用戶,管理員的登陸需要帳號和密碼(暗文),普通用戶可以直接登陸。4、 管理員可以重新輸入新公交路線、輸出公交路線、讀取已經存盤的公交路線資料、存入新公交路線資料(慎用?。?、查找最短公交路線、新增管理員用戶和刪除管理員用戶。5、 普通用戶只能輸出公交路線和查找最短公交路線兩個功能。二、 功能和結構設計1、 為用戶分權限2、 管理員有重新輸入新公交路線、輸出公交路線、讀取已經存盤的公交路線資料、存入新公交路線資料(慎用?。⒉檎易疃坦宦肪€、新增管理員用戶和刪除管理員用戶3、 普通用戶只能輸出公交路線和查找最短公交路線兩個功能。注:系統(tǒng)默認的公交線路圖(系統(tǒng)開發(fā)者為用戶事先存好的,在f1.txt文檔中)三、 流程圖和算法設計算法:(給出查找最短路徑的方法)void Bus:findline()int x,y,i,j,k,l,longers;longers=0;/x、y是起始和終止車站的編碼;i、j是每個站點后兩位編碼;k是每個站點后兩位編碼的差值;l是轉乘站點的后兩位編碼while(1)coutx;couty;if(x/100)lineNum|(x/100)=busStationNumx/100-1|(y/100)lineNum|(y/100)=busStationNumy/100-1)/前兩個是判斷車站編碼的首位的,第三個是判斷車站編碼的后兩位的cout-找不到您所輸入站點,請重新輸入!-endl;elsebreak;i=x%100;j=y%100;if(x/100)=(y/100)cout您可【0】次換乘到達目的地,路線如下: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-路程所需費用:longers*0.5元,祝您路途愉快!-endl;elsestring takeName25;/存放兩條路線上可轉乘車站的名稱;int takeNum25;/存放兩條路線上可轉乘車站的編號;int a,b;/a、b是計數的for(a=0;a2;a+)for(b=0;b5;b+)takeNameab= ;takeNumab=0;/遍歷每條路線可換乘的站點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+;/比較可換乘的站點是否有相同的,如果有,可以了一次換乘到達目的地;否則不可以bool nn=false;for(a=0;a5;a+)for(b=0;b5;b+)if(takeName0a!= &takeName1b!= &takeName0a=takeName1b)cout您可以【1】次換乘到達目的地(換乘點前面有“*”提示),為你選擇的路線如下: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-路程所需費用:longers*0.5元,祝您路途愉快!-endl;nn=true;break;else if(a=4&b=4)cout很抱歉,沒有【0】次換乘或【1】次換乘可以到達目的地的路線!;if(nn)break;四、 源程序代碼Bus.h:#include#includeusing namespace std;template class Buspublic:struct BusStationint number; /車站編號string busStationName;/車站名稱bool take; /是否可乘換int longer; /到下一個車站的路程;Bus();Bus();void input();void output();void findline();/查找線路void readfile();/讀取公交路線數據void writefile();/存入公交路線數據typedef BusStation* Pointer;private:Pointer *line; /指向三條路線的指針int lineNum;/路線數int *busStationNum;/每條路線的車站數;templateclass Administratorpublic:Administrator();Administrator();void readAdministrator();/讀取管理員資料void writeAdministrator();/存入管理員資料void addAdministrator();/增加用戶void deleteAdministrator();/刪除用戶bool land();private:string *name;string *mima;int num;/Bus.cpp#includeBus.h#includetemplateBus:Bus()lineNum=0;line=new PointerlineNum;/三條線路busStationNum=new int lineNum;/每條線路的車站數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;/每條線路的車站數for(int a=0;alineNum;a+)cout請輸入第a+1busStationNuma;for(int b=0;blineNum;b+)lineb=new BusStationbusStationNumb;/依據每條線路的車站數創(chuàng)建每條線路int k,m,i,j;/k指前一線,m指后一線,i指要比較的前一線的車站,j指要比較的后一線的車站cout請依次輸入每個車站的名稱、到下一站點的距離:endl;for(i=0;ilineNum;i+)cout第i+1條路線的資料endl;for(j=0;jlineij.busStationName;if(jlineij.longer;/到下一站點有3公里elsecinlineij.longer;/以下是要找出線路中可換乘的車站for(k=0,m=k+1;klineNum-1;)/每條路線的站點與另一條路線的站點進行比較for(i=0;ibusStationNumk;i+)for(j=0;j=lineNum-1)k+;m=k;m+;templatevoid Bus:output()cout編碼 ;cout車站名稱 ;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是起始和終止車站的編碼;i、j是每個站點后兩位編碼;k是每個站點后兩位編碼的差值;l是轉乘站點的后兩位編碼while(1)coutx;couty;if(x/100)lineNum|(x/100)=busStationNumx/100-1|(y/100)lineNum|(y/100)=busStationNumy/100-1)/前兩個是判斷車站編碼的首位的,第三個是判斷車站編碼的后兩位的cout-找不到您所輸入站點,請重新輸入!-endl;elsebreak;i=x%100;j=y%100;if(x/100)=(y/100)cout您可【0】次換乘到達目的地,路線如下: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-路程所需費用:longers*0.5元,祝您路途愉快!-endl;elsestring takeName25;/存放兩條路線上可轉乘車站的名稱;int takeNum25;/存放兩條路線上可轉乘車站的編號;int a,b;/a、b是計數的for(a=0;a2;a+)for(b=0;b5;b+)takeNameab= ;takeNumab=0;/遍歷每條路線可換乘的站點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+;/比較可換乘的站點是否有相同的,如果有,可以了一次換乘到達目的地;否則不可以bool nn=false;for(a=0;a5;a+)for(b=0;b5;b+)if(takeName0a!= &takeName1b!= &takeName0a=takeName1b)cout您可以【1】次換乘到達目的地(換乘點前面有“*”提示),為你選擇的路線如下: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-路程所需費用:longers*0.5元,祝您路途愉快!-endl;nn=true;break;else if(a=4&b=4)cout很抱歉,沒有【0】次換乘或【1】次換乘可以到達目的地的路線!;if(nn)break;/cout還未寫代碼;templatevoid Bus:readfile()ifstream infile(f1.txt,ios:in);if(!infile)cerropen error!lineNum;line=new PointerlineNum;/三條線路busStationNum=new int lineNum;/每條線路的車站數for(int a=0;abusStationNuma;for(int b=0;blineNum;b+)lineb=new BusStationbusStationNumb;/依據每條線路的車站數創(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) /輸入密碼時顯示星號功能。老師,學生登錄時也與這個相同。 mymima+=ch;/string對象重載了+= 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+)/將用戶的帳戶和密碼賦給輔助變量name_auxi=namei;mima_auxi=mimai;/一下幾行代碼是為了擴大存儲帳戶和密碼的數組delete name;delete mima;num+;name=new stringnum;mima=new stringnum;for(int j=0;jnum-1;j+)/將用戶和密碼重新復制回來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帳戶已存在!;num-;break;else if(k=num-2)cout-新管理員用戶創(chuàng)建成功-;writeAdministrator();templatevoid Administrator:deleteAdministrator()string dname,dmima;/分別存放要刪除的管理員用戶的帳號和密碼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-您已經成功刪除dname管理員用戶=num-1)cout-您要刪除的用戶不存在!-;getch();/main.cpp/*日期:2011.12.282011.12.30作者:周欽雄聲明:我只是編程世界中小兵,程序中不足之處請多多提點,不勝感激*/#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) 歡迎進入公交換乘系統(tǒng) wwwwwwwwwendl;coutsetw(70) endl;coutsetw(70) 1、 管理員登陸 endl;coutsetw(70) 2、普通用戶登陸 endl;coutsetw(70) 3、 退出 endl;coutsetw(70) 請選擇 endl;coutsetw(70)num;switch(num)case 1:if(a.land()goto g;elsecoutendl;cout-用戶不存在或密碼錯誤-;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、新增管理員用戶 endl;coutsetw(70) 7、刪除管理員用戶 endl;coutsetw(70) 8、 返回 endl;couts
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年幼兒教育專業(yè)資格考試題及答案
- 2025年自然科學基礎知識考試試卷及答案詳解
- 2025年水利工程師考試試題及答案
- 2025年保險專業(yè)資格考試試題及答案
- 2025年大學英語四級試題及答案
- 房產養(yǎng)老收益評估與老年生活支持服務管理協議
- 軟件開發(fā)項目功能完善技術補充協議
- 技術培訓與專業(yè)素質提升補充合同
- 電商平臺用戶增長戰(zhàn)略規(guī)劃與實施協議
- 針對跨國企業(yè)物流風險的國際貨運保險責任合同
- 10以上20以內加減法
- 五年級家長會數學老師講話課件
- 急產分娩應急演練方案
- 2024中國充電基礎設施服務質量發(fā)展報告-車百智庫+小桔充電
- 消防維修期間無水應急預案
- DNA鑒定技術在刑事偵查中的運用
- (完整word版)體檢報告單模版
- 警示片制作策劃方案
- 掌握認知重構的基本技巧
- 新能源綜合能源系統(tǒng)的設計與優(yōu)化
- 中國居民膳食指南(全)
評論
0/150
提交評論