大數(shù)據(jù)結(jié)構(gòu) 公交路線管理系統(tǒng)模擬系統(tǒng)
《大數(shù)據(jù)結(jié)構(gòu) 公交路線管理系統(tǒng)模擬系統(tǒng)》由會員分享,可在線閱讀,更多相關(guān)《大數(shù)據(jù)結(jié)構(gòu) 公交路線管理系統(tǒng)模擬系統(tǒng)(28頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、word 《數(shù) 據(jù) 結(jié) 構(gòu)》課 程 設 計 報 告 一、課程設計名稱 公交線路管理模擬系統(tǒng) 二、實用工具軟件 三、課程設計容簡介 1、 實踐目的 1〕、掌握圖的概念、圖的兩種存儲結(jié)構(gòu)(鄰接矩陣和鄰接表)的存儲思想與其存儲實現(xiàn); 2〕、掌握上機實現(xiàn)圖的根本方法; 3〕、掌握有關(guān)圖的操作并用高級語言編程實現(xiàn); 4〕、熟練掌握圖的深度、廣度優(yōu)先遍歷算法思想與其程序?qū)崿F(xiàn); 5〕、掌握圖的常見應用算法的思想與其程序?qū)崿F(xiàn)。 2、 實踐要求 1〕、掌握本章實踐的算法; 2〕、上機運行本章的程序,保存和打印出程序的運行結(jié)果,并結(jié)合程序進展分析; 3〕、按
2、照你對圖的操作需要,重新改寫程序并運行,打印出文件清單和運行結(jié)果; 4〕、注意理解各算法實現(xiàn)時所采用的存儲結(jié)構(gòu); 5〕、注意正、逆鄰接表。 3、 系統(tǒng)簡介與設計思路 本項目是對公交車路線信息的簡單模擬,以完成建立公交路線信息、修改公交路線信息和刪除公交路線信息等功能。 本項目的實質(zhì)是完成對公交路線信息的建立、查找、插入、修改、刪除等功能,可以首先定義項目的數(shù)據(jù)結(jié)構(gòu),然后將每個功能寫成一個函數(shù)來完成對數(shù)據(jù)的操作,最后完成主函數(shù)以驗證各個函數(shù)功能并得出運行結(jié)果。 公交站點之間的關(guān)系可以是任意的,任意兩個站點之間都可能相關(guān)。而在圖形結(jié)構(gòu)中,結(jié)點之間的關(guān)系可以是任意的,圖中任意兩個
3、數(shù)據(jù)之間都可能相關(guān)。所以可以用圖形結(jié)構(gòu)來表示n個公交站點之間與站點之間可能設置的公交路線,其中網(wǎng)的頂點表示公交站點,邊表示兩個站點之間的路線,賦予邊的權(quán)值表示相應的距離。因為公交路線是有一定的連續(xù)關(guān)系的,如果想輸出從某一個起始點開始到某一終點完畢的公交路線,就需要找到從某一點開始的第一個鄰接點和下一個鄰接點。因為在鄰接表中容易找到任一頂點的第一個鄰接點和下一個鄰接點,所以本項目使用了圖的鄰接表存儲結(jié)構(gòu)。 4、 程序設計流程 為了創(chuàng)建公交路線,首先建立結(jié)構(gòu)體載入公交車的相關(guān)信息:名稱、司機、起始站、終點站、站數(shù)以與距離。利用鄰接表把站點與站點之間的信息儲存起來。用文件詳細記載了路線信
4、息,便于管理者初始化公交路線信息。再構(gòu)造子函數(shù)來創(chuàng)建、與時修改、插入、刪除公交信息、以與查詢公交路線是否出錯,各站點之間的距離。用主函數(shù)來調(diào)用子函數(shù),進入導航系統(tǒng)而進展操作。 主函數(shù)(main)流程 導航查詢(initial)流程 汽車查詢(包含車號、站臺查詢)流程 新建(newb)流程 修改路線(Modifyr)流程 修改汽車(modifyb)流程 刪除汽車(delb)流程 5、運行環(huán)境 代碼用C語言完成,布置在具有集成開發(fā)環(huán)境,可提供編輯C語言,C++以與C++/CLI等編程語言。整合了便利
5、的除錯工具,特別是整合了微軟視窗程式設計〔Windows API〕、三維動畫DirectX API,Microsoft .NET框架。 輸入如下公交線路信息 12 1 14 13 6 2 7 3 4 10 17 16 15 5 8 9 1路 津A10001 司機1 6:00 1—>2—>3—>4—>5 2路 津A10002 司機2 6:15 6—>7—>4—>8—>17—>12 3路 津A10003 司機3 6:00 9—>7—>3—>10—>12 4路 津A10004 司機4 6:30
6、6—>13—>1—>12—>14—>17 5路 津A10005 司機5 7:00 15—>5—>8—>16—>10—>2—>13 創(chuàng)建示意圖(1路) 創(chuàng)建完畢選擇N回到主菜單,再選擇A(導航查詢) 主菜單下選擇B(公汽查詢)就可以查詢已有的公交信息,查詢方式有公汽號查詢、站臺查詢兩種查詢方式 我們以公汽號查詢(查詢 津A10001)為例: 返回到主菜單,選擇D進入系統(tǒng)管理 我們以修改路線為例(修改 津A10001) 最后在主菜單下選擇E(清空數(shù)據(jù)) 最后選擇F即可退出程序。 四、 得意與不足之處
7、: 1、得意之處: 1)、可以根據(jù)題目需要翻閱圖書館資料自學C++程序,完成代碼。 2)、完成過程中思路清晰,可以根據(jù)實際進展分析設計、編程調(diào)試,能夠熟練應用軟件的分析方法和工程設計方法。 3)、夠按要求編寫課程設計報告書,能正確闡述設計和實驗結(jié)果便于管理者自由創(chuàng)建公交車的相關(guān)信息 2、 不足之處: 1)、程序太過繁瑣,采用了一些不常用的語句 2)、不能簡易地查詢?nèi)我鈨烧局g的距離 3)、不能查詢?nèi)我獾恼军c,只能查詢起點和終點 4)、不能任意輸入兩個站點,給出最優(yōu)的乘車路線 五、 自我感受: 課程設計是把我們所學的理論知識進展系統(tǒng)的總結(jié)并應用于實踐的良好機會,有利
8、于加強我們用知識理論來分析實際問題的能力,進而加強了我們對知識認識的實踐度,鞏固了我們的理論知識,深化了對知識的認識,并為走向社會打下一個良好的根底。在這次課程設計中我遇到許多問題和麻煩,得到了教師的幫助和指導,才能夠使得這次課程設計順利的進展下去,另外,在程序調(diào)試過程中,也得到很多同學的幫助,給我與時指出錯誤,提出許多寶貴意見。在此對教師和同學們表示感! 八、參考文獻: 《數(shù)據(jù)結(jié)構(gòu)實踐訓練教程》 光然 主編 南開大學 《數(shù)據(jù)結(jié)構(gòu)》 嚴蔚敏 主編 清華大學 《C語言程序設計》 譚浩強 主編
9、清華大學
附錄:
#include
10、next;//下一輛車的結(jié)構(gòu)體 }; struct bus *bhead=NULL;//放公汽信息的頭指針 struct bus *bi=NULL;//放公汽信息的最后的指針 void initial() { FILE *fp; fp=fopen("bus.txt","r"); if(fp==NULL){printf("\n\n無公汽信息文件!");return;} fseek(fp,0,SEEK_END); int i,n; n=ftell(fp)/sizeof(struct bus);
11、
//printf("\n\n\n\n一共有%d輛公汽!",n);
rewind(fp);
struct bus *p;
//for
for(i=0;i
12、都是一個個單獨的 p->pr=NULL;//讓路線為空 //路線信息存放在文件名為〞 車號 “的文件中;車號是唯一的 FILE *fp1; fp1=fopen(p->num,"r"); if(!fp1) printf("\n%s號車無初始路線!",p->num); else{ char * p1; p1=(char *)malloc(p->z*40*sizeof(char) ); fread(p1,p->z*50
13、*sizeof(char),1,fp1);//將路線寫入存 p->pr=p1; fclose(fp1); } // printf("\n\n\n\n初始化%s號車路線成功!",p->num); //路線信息 if(bhead==NULL) bhead=bi=p; else{ bi->next=p; bi=p; } }//for結(jié)尾 //printf("\n\n\n\n初始化%d輛車成功!",n); fclose(fp); } void newb(
14、) { loop1: printf("\n\n\n\n█創(chuàng)建新公汽█\n\n"); struct bus *p; p=(struct bus *)malloc(sizeof(struct bus )); p->next=NULL; p->pr=NULL; loop2: printf("\n請輸入新公汽號:\n\n"); scanf("%s",p->num); struct bus *pj=bhead; while(pj) { if(strcmp(pj->num,p->num)==0){printf("\n
15、\n錯誤,該公汽號已經(jīng)存在!\n\n"); goto loop2;} pj=pj->next; } printf("\n請輸入新公汽司機:\n"); scanf("%s",p->driver); printf("\n請輸入新路線發(fā)車時間\n\n"); scanf("%s",p->stime); loop3: printf("\n\n\n請輸入新路線總站臺數(shù)(>=2)\n\n"); scanf("%d",&p->z); if(p->z>=2) { p->pr=(char *)malloc( p->z
16、*50*sizeof(char) ); p->pr[0]='\0'; int i;char cc[40]; for(i=1;i<=p->z;i++) { printf("\n請輸入公汽第%d站臺名稱:",i); scanf("%s",cc); if(i==1){strcat(p->pr,cc);strcpy(p->start,cc);} else{strcat(p->pr,"---->");strcat(p->pr,cc)
17、;} } strcpy(p->end,cc); printf("\n\n自動生成公汽路線%s",p->pr); } else { printf("\n\n錯誤,該公汽站臺數(shù)小于2,請重新輸入!\n\n"); goto loop3;} if(bhead==NULL)bi=bhead=p; else{bi->next=p;bi=p;} printf("\n\n%s號公汽創(chuàng)建成功!",p->num); printf("\n\n\n您想 繼續(xù)新建(A) 退出創(chuàng)建(N)-------請選擇 A 或 N \n\
18、n "); char c;c=getch(); if(c=='a'||c=='A') goto loop1; else return; } void modifyr() { char c,b[20]; printf("\n\n\n\n █修改路線█\n\n"); loop: printf("\n請輸入要修改路線的公汽號:\n\n"); scanf("%s",b); struct bus *p=bhead; int n=1; while(p) { if(str
19、cmp(p->num,b)==0){printf("\n\n司機: %s",p->driver);n=0;break;} p=p->next; } if(n){ printf("\n\n錯誤,公汽號不存在!\n\n重新修改(A) 退出修改(N)-------請選擇 A 或 N \n\n "); char c; c=getch(); if(c=='a'||c=='A') goto loop; else return;} loop1: printf("\n\n\n請修改路線總站臺數(shù)(>=2)\n\n"); i
20、nt nn; scanf("%d",&nn); if(nn>=2) { p->pr=(char *)malloc( p->z*50*sizeof(char) ); p->pr[0]='\0'; p->z=nn; int i;char cc[40]; for(i=1;i<=p->z;i++) { printf("\n請輸入公汽第%d站臺名稱:",i); scanf("%s",cc); if(i=
21、=1){strcat(p->pr,cc);strcpy(p->start,cc);} else{strcat(p->pr,"---->");strcat(p->pr,cc);} } strcpy(p->end,cc); printf("\n\n自動生成修改后的路線%s",p->pr); } else { printf("\n\n錯誤,該公汽站臺數(shù)小于2,請重新輸入!\n\n"); goto loop1;} printf("\n\n\n%s號公汽修改成功!",p->num); printf("\n\n\n您想 繼續(xù)修改(A)
22、 退出修改(N)-------請選擇 A 或 N \n\n "); c=getch(); if(c=='a'||c=='A') goto loop; FILE *fp; fp=fopen(p->num,"w"); fwrite(p,nn*50*sizeof(char),1,fp); fclose(fp); //保存線路信息 } void modifyb() { char c,b[20]; printf("\n\n\n\n █修改公汽█\n\n"); loop: printf("\n請輸入要修改路線的公汽號
23、:\n\n"); scanf("%s",b); struct bus *p=bhead; int n=1; while(p) { if(strcmp(p->num,b)==0){printf("\n\n司機: %s 發(fā)車時間: %s AM",p->driver,p->stime );n=0;break;} p=p->next; } if(n){ printf("\n\n錯誤,公汽號不存在!\n\n重新修改(A) 退出修改(N)-------請選擇 A 或 N \n\n "); c=getch(); if(c=='a
24、'||c=='A') goto loop; else return;} printf("\n請輸入要修改%s公汽的新司機:\n\n",p->num); scanf("%s",p->driver); printf("\n請輸入要修改%s公汽的發(fā)車時間:\n\n",p->num); scanf("%s",p->stime); printf("\n\n\n%s號公汽修改成功!",p->num); printf("\n\n\n您想 繼續(xù)修改(A) 退出修改(N)-------請選擇 A 或 N \n\n "); c=getch(); if(c=='
25、a'||c=='A') goto loop; } void showb() { struct bus *p=bhead; if(!p){printf("\n\n公汽線路信息數(shù)據(jù)庫為空!"); return; } else{ printf("\n\n\n █公汽信息數(shù)據(jù)庫█ "); printf("\n|-------------------------------------------------------------------------|"); } int n=1; while(p) { pr
26、intf("\n| 公汽號:%s 站數(shù):%d 發(fā)車時間:%s AM 司機:%s ",p->num, p->z, p->stime,p->driver); printf("\n| █路線: %s",p->pr); printf("\n|-------------------------------------------------------------------------|"); n=0; p=p->next; } if(n)printf("\n\n公汽線路信息數(shù)據(jù)庫為空!"); } void lookb() { char c,b[2
27、0]; //printf("\n\n\n\n █查詢路線█\n\n"); loop: printf("\n請輸入要查詢的公汽號:\n\n"); scanf("%s",b); struct bus *p=bhead; int n=1; while(p) { if(strcmp(p->num,b)==0){n=0;break;} p=p->next; } if(n){ printf("\n\n錯誤,公汽號不存在!\n\n重新輸入(A) 退出查詢(N)-------請選擇 A 或 N \n\n ");
28、 c=getch(); if(c=='a'||c=='A') goto loop; else return;} printf("\n|-------------------------------------------------------------------------|"); printf("\n| 公汽號:%s 站數(shù):%d 發(fā)車時間:%s AM 司機:%s ",p->num, p->z, p->stime,p->driver); printf("\n| 路線: %s",p->pr); printf("\n|-----------
29、--------------------------------------------------------------|"); printf("\n\n\n%s號公汽查詢成功!",p->num); printf("\n\n\n您想 繼續(xù)查詢(A) 退出查詢(N)-------請選擇 A 或 N \n\n "); c=getch(); if(c=='a'||c=='A') goto loop; } void lookr() { // printf("\n\n\n\n █查詢公汽█\n\n"); char c,b[40]; loop
30、: //printf("\n [查詢公汽菜單]"); //printf("\n|-----------------------------------|"); printf("\n \n \n \n 請選擇查詢方式: "); printf("\n|-----------------------------------|"); printf("\n| A[ 起始站查詢 ] |"); printf("\n|-----------------------------------|"); print
31、f("\n| B[ 終點站查詢 ] |"); printf("\n|-----------------------------------|"); printf("\n| C[ 退出 ] |"); printf("\n|-----------------------------------|"); c=getch(); if(c=='B'||c=='b') { printf("\n請輸入要查詢的終點站:\n\n"); scanf("%s",b); struct b
32、us *p=bhead; int n=1; printf("\n 您可以乘坐以下公汽到達%s",p->end); printf("\n|-------------------------------------------------------------------------|"); while(p) { if(strcmp(p->end,b)==0) { n=0; printf("\n|公汽號:%s 路線: %s" ,p->num,p->pr); printf("\n
33、|-------------------------------------------------------------------------|"); } p=p->next; } if(n){ printf("\n\n錯誤,終點站不存在!\n\n重新輸入(A) 退出查詢(N)-------請選擇 A 或 N \n\n "); c=getch(); if(c=='a'||c=='A') goto loop; } printf("\n\n您想 繼續(xù)查詢(A) 退出查詢(N)----
34、---請選擇 A 或 N \n\n "); c=getch(); if(c=='a'||c=='A') goto loop; } if(c=='A'||c=='a') { printf("\n請輸入要查詢的起始站:\n\n"); scanf("%s",b); struct bus *p=bhead; int n=1; printf("\n 您可以乘坐以下公汽起始站為%s",p->start); printf("\n|-----------------------------------------------
35、--------------------------|"); while(p) { if(strcmp(p->start,b)==0) { n=0; printf("\n|公汽號:%s 路線: %s" ,p->num,p->pr); printf("\n|-------------------------------------------------------------------------|"); } p=p->next; } if(n){
36、 printf("\n\n錯誤,起始站不存在!\n\n重新輸入(A) 退出查詢(N)-------請選擇 A 或 N \n\n "); c=getch(); if(c=='a'||c=='A') goto loop; } printf("\n\n您想 繼續(xù)查詢(A) 退出查詢(N)-------請選擇 A 或 N \n\n "); c=getch(); if(c=='a'||c=='A') goto loop; } } void delb() { char b[20]; print
37、f("\n\n\n\n █刪除公汽█\n\n"); loop: printf("\n請輸入要刪除路線的公汽號:\n\n"); scanf("%s",b); struct bus *p=bhead; struct bus *p1=bhead; int n=1,y=0; while(p) { if(strcmp(p->num,b)==0){n=0;break;} y++; if(y>1) p1=p1->next; p=p->next; } char c; if(n){ printf("\n
38、\n錯誤,公汽號不存在!\n\n重新輸入(A) 退出刪除(N)-------請選擇 A 或 N \n\n "); c=getch(); if(c=='a'||c=='A') goto loop; else return;} if(p==bhead)bhead=bhead->next; else p1->next=p->next; printf("\n刪除路線的公汽成功!\n\n"); printf("\n\n您是 繼續(xù)刪除(A) 退出刪除(N)-------請選擇 A 或 N \n\n ");
39、 c=getch(); if(c=='a'||c=='A') goto loop; } void save() { FILE *fp; fp=fopen("bus.txt","w"); struct bus *p; p=bhead; int n=0; while(p) {//第一個while fseek(fp,n*sizeof(struct bus),0); fwrite(p,sizeof(struct bus ),1,fp); n++; FILE *
40、fp1; fp1=fopen(p->num,"w"); fwrite(p->pr,p->z*50*sizeof(char),1,fp1); fclose(fp1); p=p->next; } fclose(fp); //printf("\n\n\n\n保存%d輛車成功!",n); } void release() { bhead=bi=NULL; printf("\n\n\n數(shù)據(jù)清空成功!"); } void show1() { printf("\n\n\n\n\n |-----------------------
41、-----------------|"); printf("\n | █主 菜 單 █ |"); printf("\n |----------------------------------------|"); printf("\n | A 導 航 查 詢 |"); printf("\n |----------------------------------------|"); printf("\n | B 公 汽 查
42、詢 |"); printf("\n |----------------------------------------|"); printf("\n | C 新 建 公 汽 |"); printf("\n |----------------------------------------|"); printf("\n | D 系 統(tǒng) 管 理 |"); printf("\n |----------------------------------------|
43、"); printf("\n | E 清 空 數(shù) 據(jù) |"); printf("\n |----------------------------------------|"); printf("\n | F 退 出 程 序 |"); printf("\n |----------------------------------------|"); printf("\n | 請您選擇一個任務 |"); printf
44、("\n |----------------------------------------|\n\n\n"); } void show2() { printf("\n |-----------------------------|"); printf("\n | █管 理 菜 單█ |"); printf("\n |-----------------------------|"); printf("\n | A 修 改 路 線 |"); printf("\n |----------------
45、-------------|"); printf("\n | B 修 改 公 汽 |"); printf("\n |-----------------------------|"); printf("\n | C 刪 除 公 汽 |"); printf("\n |-----------------------------|"); printf("\n | D 退 出 程 序 |"); printf("\n |-----------------------------|"); pri
46、ntf("\n | 請您選擇一個任務 |"); printf("\n |-----------------------------|\n\n\n"); } void show3() { printf("\n\n █查 詢 菜 單█"); printf("\n|-----------------------------------|"); printf("\n| 請選擇查詢方式: |"); printf("\n|-----------------------------------|");
47、printf("\n| A[ 公汽號 查詢 ] |"); printf("\n|-----------------------------------|"); printf("\n| B[ 站 臺 查 詢 ] |"); printf("\n|-----------------------------------|"); printf("\n| C[ 退 出 ] |"); printf("\n|---------------------------
48、--------|"); } void main() { printf("\n\n ★ 歡迎使用公汽查詢系統(tǒng)!★"); initial(); char c1; do { show1(); c1=getch(); switch ( c1 ) { case 'a': case 'A':showb();break; case 'b': case 'B': { char c3; do{ show3(); c3=getch(); switch ( c3) { case 'a': case 'A':lo
49、okb();break; case 'b': case 'B':lookr();break; case 'c': case 'C':break; } }while(c3!='c'&&c3!='C'); }break; case 'c': case 'C':newb();break; case 'd': case 'D': { char c2; do{ show2(); c2=getch(); switch ( c2) { case 'a': case 'A':modifyr();break; case 'b': case 'B':modifyb();break; case 'c': case 'C':delb();break; } }while(c2!='d'&&c2!='D'); }break; case 'E': case 'e':release(); save(); break; } }while(c1!='f'&&c1!='F'); save(); printf("\n\n ★ 您的使用!★"); } 28 / 28
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習題含答案
- 2煤礦安全監(jiān)測工種技術(shù)比武題庫含解析
- 1 礦山應急救援安全知識競賽試題
- 1 礦井泵工考試練習題含答案
- 2煤礦爆破工考試復習題含答案
- 1 各種煤礦安全考試試題含答案