數(shù)據(jù)結(jié)構(gòu)公交路線管理模擬系統(tǒng)_第1頁
數(shù)據(jù)結(jié)構(gòu)公交路線管理模擬系統(tǒng)_第2頁
數(shù)據(jù)結(jié)構(gòu)公交路線管理模擬系統(tǒng)_第3頁
數(shù)據(jù)結(jié)構(gòu)公交路線管理模擬系統(tǒng)_第4頁
數(shù)據(jù)結(jié)構(gòu)公交路線管理模擬系統(tǒng)_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計報告一、課程設(shè)計名稱公交線路管理模擬系統(tǒng)、實用工具軟件MicrosoftvisualC++6.0三、課程設(shè)計內(nèi)容簡介1、實踐目的1)、掌握圖的概念、圖的兩種存儲結(jié)構(gòu)(鄰接矩陣和鄰接表)的存儲思想及其存儲實現(xiàn);2)、掌握上機實現(xiàn)圖的基本方法;3)、掌握有關(guān)圖的操作并用高級語言編程實現(xiàn);4)、熟練掌握圖的深度、廣度優(yōu)先遍歷算法思想及其程序?qū)崿F(xiàn);5)、掌握圖的常見應(yīng)用算法的思想及其程序?qū)崿F(xiàn)。2、實踐要求1)、掌握本章實踐的算法;2)、上機運行本章的程序,保存和打印出程序的運行結(jié)果,并結(jié)合程序進行分析;3)、按照你對圖的操作需要,重新改寫程序并運行,打印出文件清單和運行結(jié)果;4)、注意理解各算法實現(xiàn)時所采用的存儲結(jié)構(gòu);5)、注意正、逆鄰接表。3、系統(tǒng)簡介及設(shè)計思路本項目是對公交車路線信息的簡單模擬,以完成建立公交路線信息、修改公交路線信息和刪除公交路線信息等功能本項目的實質(zhì)是完成對公交路線信息的建立、查找、插入、修改、刪除等功能,可以首先定義項目的數(shù)據(jù)結(jié)構(gòu),然后將每個功能寫成一個函數(shù)來完成對數(shù)據(jù)的操作,最后完成主函數(shù)以驗證各個函數(shù)功能并得出運行結(jié)果。公交站點之間的關(guān)系可以是任意的,任意兩個站點之間都可能相關(guān)。而在圖形結(jié)構(gòu)中,結(jié)點之間的關(guān)系可以是任意的,圖中任意兩個數(shù)據(jù)之間都可能相關(guān)。所以可以用圖形結(jié)構(gòu)來表示n個公交站點之間及站點之間可能設(shè)置的公交路線,其中網(wǎng)的頂點表示公交站點,邊表示兩個站點之間的路線,賦予邊的權(quán)值表示相應(yīng)的距離。因為公交路線是有一定的連續(xù)關(guān)系的,如果想輸出從某一個起始點開始到某一終點結(jié)束的公交路線,就需要找到從某一點開始的第一個鄰接點和下一個鄰接點。因為在鄰接表中容易找到任一頂點的第一個鄰接點和下一個鄰接點,所以本項目使用了圖的鄰接表存儲結(jié)構(gòu)。4、程序設(shè)計流程為了創(chuàng)建公交路線,首先建立結(jié)構(gòu)體載入公交車的相關(guān)信息:名稱、司機、起始站、終點站、站數(shù)以及距離。利用鄰接表把站點與站點之間的信息儲存起來。用文件詳細記載了路線信息,便于管理者初始化公交路線信息。再構(gòu)造子函數(shù)來創(chuàng)建、及時修改、插入、刪除公交信息、以及查詢公交路線是否出錯,各站點之間的距離。用主函數(shù)來調(diào)用子函數(shù),進入導(dǎo)航系統(tǒng)而進行操作。修改踣飪起點站查詢始點站蹣車導(dǎo)查詢站臺查詢導(dǎo)航查詢汽車查洵,系統(tǒng)管理清空教據(jù)退出」修改汽車導(dǎo)航查詢(initial)流程修改踣飪起點站查詢始點站蹣車導(dǎo)查詢站臺查詢導(dǎo)航查詢汽車查洵,系統(tǒng)管理清空教據(jù)退出」修改汽車新建(newb)流程輸入發(fā)車時間創(chuàng)崖號成遮回主芫S&輸入經(jīng)過的站點輸入司機客字輜入車號修改路線(Modifyr)流程臺法性栓查修改路蛙站束并返回上一級菜單修改汽車(modifyb)流程痢修改路線(Modifyr)流程臺法性栓查修改路蛙站束并返回上一級菜單修改汽車(modifyb)流程痢A.新的路綣『修改司饑名字,新入亶修改汽軍f〒號結(jié)束并返回上一裂菜閨,輸入要修改的車與修改發(fā)車時間,完成并豆示,完成并顯示修改汽車4刪除汽車(delb)流程5、運行環(huán)境代碼用C語言完成,布置在MicrosoftvisualC++6.0運行。MicrosoftvisualC++6.0具有集成開發(fā)環(huán)境,可提供編輯C語言,C++以及C++/CLI等編程語言。整合了便利的除錯工具,特別是整合了微軟視窗程式設(shè)計(WindowsAPI)、三維動畫DirectXAPI,Microsoft.NET框架。*歡迎使用公汽查詢系統(tǒng)丫六詢汽鄰務(wù)任查查1X栗曠襄建輸入如下公交線路信息1路A10001司機16001>2>3—>4—>52路A10002司機26156->7>4—>8—>17—>123路A10003司機36009->7>3—>10—>124路A10004司機46306>13>1—>12—>14—>175路A10005司機570015>5>8>16—>10>2>13創(chuàng)建示意圖(1路)刨建新吞汽請輸入新仝汽號二請輸入撅路線發(fā)車盯間HR情輸入新路線總站舍數(shù)<>=?〉晴輸入必汽第[站合名稱次晴輸入舍汽第H站白名稱泊請輸入淪汽第3站的名稱=3請輸入益汽第理站自答稱池譙輸入必汽第5站舍名稱污悻小凹01?號公汽創(chuàng)建成功T您想、侖鯉妻新建退出刨建細》請選擇AN創(chuàng)建結(jié)束選擇N回到主菜單,再選擇A(導(dǎo)航查詢)主菜上1->13&6】A113?!?gt;?1A-0>22-■0創(chuàng)建結(jié)束選擇N回到主菜單,再選擇A(導(dǎo)航查詢)主菜上1->13&6】A113?!?gt;?1A-0>22-■0fl19-一>■°%>12660?I工>>5>-

信數(shù)一數(shù)一數(shù)一數(shù)一熟8--

缶頊43白>占亂公時?-聲’君17--發(fā)車發(fā)思-旁苛-iS2AM一T&4徉一6>發(fā)T1>貝發(fā)誕£71-->-iMI-司機;司機115AM司機:司機;司機2司機3司機4司機:司機】司機5息,查詢方式有公汽號查詢、站臺查詢兩種查詢方式我們以公汽號查詢(查詢津A10001)為例:請輸入要查詢的公汽號’:公汽號’vtfi10001站數(shù):5發(fā)車時間’6:06ftrt司機:司機1:路線:1——>2——>3——>4——>5津口io胸1號公汽查詢成功!您想繼續(xù)查詢“〉退出查詢細》請選擇A或N返回到主菜單,選擇。進入系統(tǒng)管理BA刪里擇路凰BicP肯公^請照孕公序

管壬艇任修宙—單務(wù)

僵選粟r力我們以修改路線為例(修改津A10001)請輸入要修改路線的公汽號;津口[靦血司機姓名:司機i請修改路線總站臺數(shù)<>=2>3請輸入公汽第1站臺名稱汀請輸入公汽第2站臺名稱汁請輸入公汽第M站臺名稱污自動生成修改后的路線1r>3">5律白1酮血號公汽修改成功!您想繼續(xù)修改〉退出修改他〉請選擇A或H最后在主菜單下選擇E(清空數(shù)據(jù))菌詢汽理*菌詢汽理*夯任查查農(nóng)工程個E

一主咎公ae

請血B最后選擇F即可退出程序四、得意與不足之處:1、得意之處:1)、可以根據(jù)題目需要翻閱圖書館資料自學(xué)C++程序,完成代碼。2)、完成過程中思路清晰,可以根據(jù)實際進行分析設(shè)計、編程調(diào)試,能夠熟練應(yīng)用軟件的分析方法和工程設(shè)計方法。3)、夠按要求編寫課程設(shè)計報告書,能正確闡述設(shè)計和實驗結(jié)果便于管理者自由創(chuàng)建公交車的相關(guān)信息2、不足之處:1)、程序太過繁瑣,采用了一些不常用的語句2)、不能簡易地查詢?nèi)我鈨烧局g的距離3)、不能查詢?nèi)我獾恼军c,只能查詢起點和終點4)、不能任意輸入兩個站點,給出最優(yōu)的乘車路線五、自我感受:課程設(shè)計是把我們所學(xué)的理論知識進行系統(tǒng)的總結(jié)并應(yīng)用于實踐的良好機會,有利于加強我們用知識理論來分析實際問題的能力,進而加強了我們對知識認識的實踐度,鞏固了我們的理論知識,深化了對知識的認識,并為走向社會打下一個良

好的基礎(chǔ)在這次課程設(shè)計中我遇到許多問題和麻煩,得到了老師的幫助和指導(dǎo),才能夠使得這次課程設(shè)計順利的進行下去,另外,在程序調(diào)試過程中,也得到很多同學(xué)的幫助,給我及時指出錯誤,提出許多寶貴意見。在此對老師和同學(xué)們表示感謝!《數(shù)據(jù)結(jié)構(gòu)實踐訓(xùn)練教程》劉光然主編《數(shù)據(jù)結(jié)構(gòu)實踐訓(xùn)練教程》劉光然主編《數(shù)據(jù)結(jié)構(gòu)》嚴蔚敏主編《C語言程序設(shè)計》譚浩強主編八、參考文獻:南開大學(xué)出版社清華大學(xué)出版社清華大學(xué)出版社附錄:#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<string.h>structbus{charnum[30];//車號chardriver[50];//char{charnum[30];//車號chardriver[50];//charstime[30];//charstart[30];//charend[30];//司機發(fā)車時間起始站終點站intz;//站數(shù)char*pr;//指向路線的首指針下一輛車的結(jié)構(gòu)體structbus*next;//下一輛車的結(jié)構(gòu)體);structbus*bhead=NULL;//放公汽信息的頭指針structbus*bi=NULL;//放公汽信息的最后的指針voidinitial()FILE*fp;fp=fopen("bus.txt","r");if(fp==NULL){printf("\n\n無公汽信息文件!");return;}fseek(fp,0,SEEK_END);inti,n;n=ftell(fp)/sizeof(structbus);//printf("\n\n\n\n—共有%d輛公汽!〃,n);rewind(fp);structbus*p;//forfor(i=0;i<n;i++)p=(structbus*)malloc(sizeof(structbus));fseek(fp,i*sizeof(structbus),0);fread(p,sizeof(structbus),1,fp);//寫入信息,其中地址是無用的信息p->next=NULL;//初始化時下一個指向空,都是一個個單獨的p->pr=NULL;//讓路線為空//路線信息存放在文件名為”車號"的文件中;車號是唯一的FILE*fp1;fp1二fopen(p->num,"r");if(!fp1)//printf("\n\n\n\n—共有%d輛公汽!〃,n);else{char*p1;p1=(char*)malloc(p->z*40*sizeof(char));fread(p1,p->z*50*sizeof(char),1,fp1);//將路線寫入內(nèi)存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初始化%4輛車成功!",n);fclose(fp);}voidnewb(){loop1:printf("\n\n\n\n■創(chuàng)建新公汽■\n\n");structbus*p;p=(structbus*)malloc(sizeof(structbus));p->next=NULL;p->pr=NULL;loop2:printf("\n請輸入新公汽號:\n\n");scanf("%s",p->num);structbus*pj=bhead;while(pj){if(strcmp(pj->num,p->num)==0){printf("\n\n錯誤,該公汽號已經(jīng)存在!\n\n");gotoloop2;}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*50*sizeof(char));p->pr[0]='\0';inti;charcc[40];for(i=1;i<=p->z;i++){printf("\n請輸入公汽第%4站臺名稱:",i);scanf("%s",cc);if(i==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");gotoIoop3;)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\n");charc;c=getch();if(c=='a'||c=='A')gotoloop1;elsereturn;}voidmodifyr(){charc,b[20];printf("\n\n\n\n■修改路線■\n\n");loop:printf("\n請輸入要修改路線的公汽號:\n\n〃);scanf("%s",b);structbus*p=bhead;intn=1;while(p){if(strcmp(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");charc;c=getch();if(c=='a'||c=='A')gotoloop;elsereturn;)loop1:printf("\n\n\n請修改路線總站臺數(shù)(〉=2)\n\n〃);intnn;scanf(〃%d〃,&nn);if(nn>=2){p->pr=(char*)malloc(p->z*50*sizeof(char));p->pr[0]='\0';p->z=nn;inti;charcc[40];for(i=1;i〈=p->z;i++){printf("\n請輸入公汽第%4站臺名稱:〃,i);scanf(〃%s〃,cc);if(i==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");gotoloopl;)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')gotoloop;FILE*fp;fp=fopen(p->num,"w");fwrite(p,nn*50*sizeof(char),1,fp);fclose(fp);//保存線路信息}voidmodifyb(){charc,b[20];printf("\n\n\n\n■修改公汽■\n\n");loop:printf("\n請輸入要修改路線的公汽號:\n\n");scanf("%s",b);structbus*p=bhead;intn=1;while(p){if(strcmp(p->num,b)==0){printf("\n\n司機姓名:%s發(fā)車時間:%sAM",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'||c二二'A')gotoloop;elsereturn;)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=='a'||c=='A')gotoloop;}voidshowb(){structbus*p=bhead;if(!p){printf("\n\n公汽線路信息數(shù)據(jù)庫為空!");return;}else{printf(-\n\n\n■公汽信息數(shù)據(jù)庫■");printf("\n||");}intn=1;while(p){printf("\n|公汽號:%s站數(shù):%d發(fā)車時間:%sAM司機:%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ù)庫為空!");}voidlookb()charc,b[20];//printf("\n\n\n\n■查詢路線■\n\n");loop:printf("\n請輸入要查詢的公汽號:\n\n");scanf("%s",b);structbus*p=bhead;intn=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");c=getch();if(c=='a'||c=='A')gotoloop;elsereturn;)printf("\n|----l〃);printf("\n|公汽號:%s站數(shù):%d發(fā)車時間:%sAM司機:%s〃,p-〉num,p->z,p-〉stime,p-〉driver);printf(〃\n|路線:%s〃,p-〉pr);printf(〃\n||〃);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')gotoloop;}voidlookr()//printf("\n\n\n\n■查詢公汽■\n\n");charc,b[40];loop://printf("\n[查詢公汽菜單]");TOC\o"1-5"\h\z//printf("\n||");printf("\n\n\n\n請選擇查詢方式:");printf("\n||");printf("\n|A[起始站查詢]|");printf("\n||");printf("\n|B[終點站查詢]|");printf("\n||");printf("\n|C[退出]|");printf("\n||");c=getch();if(c==,B,||c==,b,){printf("\n請輸入要查詢的終點站:\n\n");scanf("%s",b);structbus*p=bhead;intn=1;printf("\n您可以乘坐以下公汽到達%s",p->end);printf("\n|--T");while(p){if(strcmp(p->end,b)==0){n=0;printf("\n|公汽號:%s路線:%s",p->num,p->pr);printf("\n|}p=p->next;}if(n){printf("\n\n錯誤,終點站不存在!\n\n重新輸入(A)退出查詢(N)——請選擇A或N\n\n");c=getch();if(c=='a'||c=='A')gotoloop;}printf("\n\n您想繼續(xù)查詢(A)退出查詢(N)請選擇A或N\n\n");c=getch();if(c=='a'||c=='A')gotoloop;}if(c=='A'||c=='a'){printf("\n請輸入要查詢的起始站:\n\n");scanf("%s",b);structbus*p=bhead;intn=1;您可以乘坐以下公汽起始站為%s〃,p->start);printf("printf(〃\n|---|〃);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){printf(〃\n\n錯誤,起始站不存在!\n\n重新輸入(A)退出查詢(N)——請選擇A或N\n\n〃);c=getch();if(c二二'a'||c二二'A')gotoloop;}printf(〃\n\n您想繼續(xù)查詢(A)退出查詢(N)請選擇A或N\n\n〃);c=getch();if(c二二'a'||c二二'A')gotoloop;}}voidintn=1;charb[20];printf("\n\n\n\n■刪除公汽■\n\n");loop:printf("\n請輸入要刪除路線的公汽號:\n\n");scanf("%s",b);structbus*p=bhead;structbus*p1=bhead;intn=1,y=0;while(p){if(strcmp(p->num,b)==0){n=0;break;}y++;if(y>1)p1=p1->next;p=p->next;}charc;if(n){printf("\n\n錯誤,公汽號不存在!\n\n重新輸入(A)退出刪除(N)請選擇A或N\n\n");c=getch();if(c=='a'||c=='A')gotoloop;elsereturn;}if(p==bhead)bhead=bhead->next;elsep1->next=p->next;printf("\n刪除路線的公汽成功!\n\n〃);printf("\n\n您是繼續(xù)刪除(A)退出刪除(N)請選擇A或N\n\n");c=getch();if(c==,a,c=='A')gotoloop;〃);printf(〃\nprintf(〃\n■主菜單?門;printf("\nprintf(〃\nprintf(〃\nprintf(〃\nprintf(〃\nprintf(〃\n〃);〃);〃);voidsave()〃);printf(〃\nprintf(〃\n■主菜單?門;printf("\nprintf(〃\nprintf(〃\nprintf(〃\nprintf(〃\nprintf(〃\n〃);〃);〃);FILE*fp;fp=fopen("bus.txt","w");structbus*p;p=bhead;intn=0;while(p){//第一個whilefseek(fp,n*sizeof(structbus),0);fwrite(p,sizeof(structbus),1,fp);n++;FILE*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保存%4輛車成功!〃,n);voidrelease()bhead=bi=NULL;printf("\n\n\n數(shù)據(jù)清空成功!");voidshow1()printf("\n\n\n\n\n

printf(〃\nB公汽查詢〃);printf(\n—〃);printf(〃\nC新建公汽〃);printf(\n—〃);printf(〃\nD系統(tǒng)管理〃);printf("\n");printf("\n|E清空數(shù)據(jù)|");printf("\n");printf("\nF退出程序〃);TOC\o"1-5"\h\zprintf("\n〃);printf(〃\n|請您選擇一

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論