




已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
數(shù) 據(jù) 結(jié) 構(gòu)課 程 設(shè) 計(jì) 報(bào) 告一、課程設(shè)計(jì)名稱公交線路管理模擬系統(tǒng)二、實(shí)用工具軟件Microsoft visual C+ 6.0三、課程設(shè)計(jì)內(nèi)容簡介1、 實(shí)踐目的 1)、掌握圖的概念、圖的兩種存儲結(jié)構(gòu)(鄰接矩陣和鄰接表)的存儲思想及其存儲實(shí)現(xiàn);2)、掌握上機(jī)實(shí)現(xiàn)圖的基本方法;3)、掌握有關(guān)圖的操作并用高級語言編程實(shí)現(xiàn);4)、熟練掌握圖的深度、廣度優(yōu)先遍歷算法思想及其程序?qū)崿F(xiàn);5)、掌握圖的常見應(yīng)用算法的思想及其程序?qū)崿F(xiàn)。2、 實(shí)踐要求1)、掌握本章實(shí)踐的算法;2)、上機(jī)運(yùn)行本章的程序,保存和打印出程序的運(yùn)行結(jié)果,并結(jié)合程序進(jìn)行分析;3)、按照你對圖的操作需要,重新改寫程序并運(yùn)行,打印出文件清單和運(yùn)行結(jié)果;4)、注意理解各算法實(shí)現(xiàn)時所采用的存儲結(jié)構(gòu);5)、注意正、逆鄰接表。3、 系統(tǒng)簡介及設(shè)計(jì)思路本項(xiàng)目是對公交車路線信息的簡單模擬,以完成建立公交路線信息、修改公交路線信息和刪除公交路線信息等功能。本項(xiàng)目的實(shí)質(zhì)是完成對公交路線信息的建立、查找、插入、修改、刪除等功能,可以首先定義項(xiàng)目的數(shù)據(jù)結(jié)構(gòu),然后將每個功能寫成一個函數(shù)來完成對數(shù)據(jù)的操作,最后完成主函數(shù)以驗(yàn)證各個函數(shù)功能并得出運(yùn)行結(jié)果。公交站點(diǎn)之間的關(guān)系可以是任意的,任意兩個站點(diǎn)之間都可能相關(guān)。而在圖形結(jié)構(gòu)中,結(jié)點(diǎn)之間的關(guān)系可以是任意的,圖中任意兩個數(shù)據(jù)之間都可能相關(guān)。所以可以用圖形結(jié)構(gòu)來表示n個公交站點(diǎn)之間及站點(diǎn)之間可能設(shè)置的公交路線,其中網(wǎng)的頂點(diǎn)表示公交站點(diǎn),邊表示兩個站點(diǎn)之間的路線,賦予邊的權(quán)值表示相應(yīng)的距離。因?yàn)楣宦肪€是有一定的連續(xù)關(guān)系的,如果想輸出從某一個起始點(diǎn)開始到某一終點(diǎn)結(jié)束的公交路線,就需要找到從某一點(diǎn)開始的第一個鄰接點(diǎn)和下一個鄰接點(diǎn)。因?yàn)樵卩徑颖碇腥菀渍业饺我豁旤c(diǎn)的第一個鄰接點(diǎn)和下一個鄰接點(diǎn),所以本項(xiàng)目使用了圖的鄰接表存儲結(jié)構(gòu)。4、 程序設(shè)計(jì)流程為了創(chuàng)建公交路線,首先建立結(jié)構(gòu)體載入公交車的相關(guān)信息:名稱、司機(jī)、起始站、終點(diǎn)站、站數(shù)以及距離。利用鄰接表把站點(diǎn)與站點(diǎn)之間的信息儲存起來。用文件詳細(xì)記載了路線信息,便于管理者初始化公交路線信息。再構(gòu)造子函數(shù)來創(chuàng)建、及時修改、插入、刪除公交信息、以及查詢公交路線是否出錯,各站點(diǎn)之間的距離。用主函數(shù)來調(diào)用子函數(shù),進(jìn)入導(dǎo)航系統(tǒng)而進(jìn)行操作。主函數(shù)(main)流程導(dǎo)航查詢(initial)流程 汽車查詢(包含車號、站臺查詢)流程新建(newb)流程修改路線(Modifyr)流程修改汽車(modifyb)流程刪除汽車(delb)流程5、運(yùn)行環(huán)境代碼用C語言完成,布置在Microsoft visual C+ 6.0運(yùn)行。Microsoft visual C+ 6.0具有集成開發(fā)環(huán)境,可提供編輯C語言,C+以及C+/CLI等編程語言。整合了便利的除錯工具,特別是整合了微軟視窗程式設(shè)計(jì)(Windows API)、三維動畫DirectX API,Microsoft .NET框架。輸入如下公交線路信息121141362734101716155891路 津A10001 司機(jī)1 6:00 123452路 津A10002 司機(jī)2 6:15 674817123路 津A10003 司機(jī)3 6:00 97310124路 津A10004 司機(jī)4 6:30 61311214175路 津A10005 司機(jī)5 7:00建示意圖(1路)創(chuàng)建結(jié)束選擇N回到主菜單,再選擇A(導(dǎo)航查詢)主菜單下選擇B(公汽查詢)就可以查詢已有的公交信息,查詢方式有公汽號查詢、站臺查詢兩種查詢方式我們以公汽號查詢(查詢 津A10001)為例:返回到主菜單,選擇D進(jìn)入系統(tǒng)管理我們以修改路線為例(修改 津A10001)最后在主菜單下選擇E(清空數(shù)據(jù))最后選擇F即可退出程序。四、 得意與不足之處:1、得意之處:1)、可以根據(jù)題目需要翻閱圖書館資料自學(xué)C+程序,完成代碼。2)、完成過程中思路清晰,可以根據(jù)實(shí)際進(jìn)行分析設(shè)計(jì)、編程調(diào)試,能夠熟練應(yīng)用軟件的分析方法和工程設(shè)計(jì)方法。3)、夠按要求編寫課程設(shè)計(jì)報(bào)告書,能正確闡述設(shè)計(jì)和實(shí)驗(yàn)結(jié)果便于管理者自由創(chuàng)建公交車的相關(guān)信息2、 不足之處:1)、程序太過繁瑣,采用了一些不常用的語句2)、不能簡易地查詢?nèi)我鈨烧局g的距離3)、不能查詢?nèi)我獾恼军c(diǎn),只能查詢起點(diǎn)和終點(diǎn)4)、不能任意輸入兩個站點(diǎn),給出最優(yōu)的乘車路線五、 自我感受:課程設(shè)計(jì)是把我們所學(xué)的理論知識進(jìn)行系統(tǒng)的總結(jié)并應(yīng)用于實(shí)踐的良好機(jī)會,有利于加強(qiáng)我們用知識理論來分析實(shí)際問題的能力,進(jìn)而加強(qiáng)了我們對知識認(rèn)識的實(shí)踐度,鞏固了我們的理論知識,深化了對知識的認(rèn)識,并為走向社會打下一個良好的基礎(chǔ)。 在這次課程設(shè)計(jì)中我遇到許多問題和麻煩,得到了老師的幫助和指導(dǎo),才能夠使得這次課程設(shè)計(jì)順利的進(jìn)行下去,另外,在程序調(diào)試過程中,也得到很多同學(xué)的幫助,給我及時指出錯誤,提出許多寶貴意見。在此對老師和同學(xué)們表示感謝!八、參考文獻(xiàn):數(shù)據(jù)結(jié)構(gòu)實(shí)踐訓(xùn)練教程 劉光然 主編 南開大學(xué)出版社數(shù)據(jù)結(jié)構(gòu) 嚴(yán)蔚敏 主編 清華大學(xué)出版社C語言程序設(shè)計(jì) 譚浩強(qiáng) 主編 清華大學(xué)出版社附錄:#include #include #include #include struct bus char num30;/車號char driver50;/司機(jī)char stime30;/發(fā)車時間char start30;/起始站char end30;/終點(diǎn)站int z;/站數(shù)char *pr;/指向路線的首指針 struct bus *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(nn無公汽信息文件!);return; fseek(fp,0,SEEK_END); int i,n; n=ftell(fp)/sizeof(struct bus); /printf(nnnn一共有%d輛公汽!,n); rewind(fp); struct bus *p;/for for(i=0;inext=NULL;/初始化時下一個指向空,都是一個個單獨(dú)的 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*sizeof(char),1,fp1);/將路線寫入內(nèi)存 p-pr=p1; fclose(fp1); / printf(nnnn初始化%s號車路線成功!,p-num); /路線信息 if(bhead=NULL) bhead=bi=p; else bi-next=p; bi=p; /for結(jié)尾/printf(nnnn初始化%d輛車成功!,n);fclose(fp);void newb()loop1: printf(nnnn創(chuàng)建新公汽nn); struct bus *p; p=(struct bus *)malloc(sizeof(struct bus ); p-next=NULL; p-pr=NULL;loop2: printf(n請輸入新公汽號:nn); scanf(%s,p-num); struct bus *pj=bhead; while(pj) if(strcmp(pj-num,p-num)=0)printf(nn錯誤,該公汽號已經(jīng)存在!nn); goto loop2; pj=pj-next; printf(n請輸入新公汽司機(jī)姓名:n); scanf(%s,p-driver); printf(n請輸入新路線發(fā)車時間nn); scanf(%s,p-stime); loop3: printf(nnn請輸入新路線總站臺數(shù)(=2)nn); scanf(%d,&p-z); if(p-z=2) p-pr=(char *)malloc( p-z*50*sizeof(char) ); p-pr0=0; int i;char cc40; for(i=1;iz;i+) printf(n請輸入公汽第%d站臺名稱:,i); scanf(%s,cc); if(i=1)strcat(p-pr,cc);strcpy(p-start,cc); elsestrcat(p-pr,-);strcat(p-pr,cc); strcpy(p-end,cc); printf(nn自動生成公汽路線%s,p-pr); else printf(nn錯誤,該公汽站臺數(shù)小于2,請重新輸入!nn); goto loop3;if(bhead=NULL)bi=bhead=p;elsebi-next=p;bi=p; printf(nn%s號公汽創(chuàng)建成功!,p-num); printf(nnn您想 繼續(xù)新建(A) 退出創(chuàng)建(N)-請選擇 A 或 N nn ); char c;c=getch(); if(c=a|c=A) goto loop1; else return;void modifyr() char c,b20; printf(nnnn 修改路線nn); loop: printf(n請輸入要修改路線的公汽號:nn); scanf(%s,b); struct bus *p=bhead; int n=1; while(p) if(strcmp(p-num,b)=0)printf(nn司機(jī)姓名: %s,p-driver);n=0;break; p=p-next; if(n) printf(nn錯誤,公汽號不存在!nn重新修改(A) 退出修改(N)-請選擇 A 或 N nn ); char c; c=getch(); if(c=a|c=A) goto loop; else return; loop1: printf(nnn請修改路線總站臺數(shù)(=2)nn); int nn; scanf(%d,&nn); if(nn=2) p-pr=(char *)malloc( p-z*50*sizeof(char) ); p-pr0=0; p-z=nn; int i;char cc40; for(i=1;iz;i+) printf(n請輸入公汽第%d站臺名稱:,i); scanf(%s,cc); if(i=1)strcat(p-pr,cc);strcpy(p-start,cc); elsestrcat(p-pr,-);strcat(p-pr,cc); strcpy(p-end,cc); printf(nn自動生成修改后的路線%s,p-pr); else printf(nn錯誤,該公汽站臺數(shù)小于2,請重新輸入!nn); goto loop1; printf(nnn%s號公汽修改成功!,p-num);printf(nnn您想 繼續(xù)修改(A) 退出修改(N)-請選擇 A 或 N nn ); 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,b20; printf(nnnn 修改公汽nn); loop:printf(n請輸入要修改路線的公汽號:nn); scanf(%s,b); struct bus *p=bhead; int n=1; while(p) if(strcmp(p-num,b)=0)printf(nn司機(jī)姓名: %s 發(fā)車時間: %s AM,p-driver,p-stime );n=0;break; p=p-next; if(n) printf(nn錯誤,公汽號不存在!nn重新修改(A) 退出修改(N)-請選擇 A 或 N nn ); c=getch(); if(c=a|c=A) goto loop; else return; printf(n請輸入要修改%s公汽的新司機(jī):nn,p-num); scanf(%s,p-driver); printf(n請輸入要修改%s公汽的發(fā)車時間:nn,p-num); scanf(%s,p-stime); printf(nnn%s號公汽修改成功!,p-num);printf(nnn您想 繼續(xù)修改(A) 退出修改(N)-請選擇 A 或 N nn ); c=getch(); if(c=a|c=A) goto loop;void showb()struct bus *p=bhead;if(!p)printf(nn公汽線路信息數(shù)據(jù)庫為空!); return; elseprintf(nnn 公汽信息數(shù)據(jù)庫 );printf(n|-|); int n=1;while(p)printf(n| 公汽號:%s 站數(shù):%d 發(fā)車時間:%s AM 司機(jī):%s ,p-num, p-z, p-stime,p-driver);printf(n| 路線: %s,p-pr);printf(n|-|); n=0;p=p-next;if(n)printf(nn公汽線路信息數(shù)據(jù)庫為空!); void lookb() char c,b20; /printf(nnnn 查詢路線nn); loop: printf(n請輸入要查詢的公汽號:nn); 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(nn錯誤,公汽號不存在!nn重新輸入(A) 退出查詢(N)-請選擇 A 或 N nn ); c=getch(); if(c=a|c=A) goto loop; else return;printf(n|-|); printf(n| 公汽號:%s 站數(shù):%d 發(fā)車時間:%s AM 司機(jī):%s ,p-num, p-z, p-stime,p-driver);printf(n| 路線: %s,p-pr);printf(n|-|); printf(nnn%s號公汽查詢成功!,p-num);printf(nnn您想 繼續(xù)查詢(A) 退出查詢(N)-請選擇 A 或 N nn ); c=getch(); if(c=a|c=A) goto loop;void lookr()/ printf(nnnn 查詢公汽nn); char c,b40;loop:/printf(n 查詢公汽菜單);/printf(n|-|); printf(n n n n 請選擇查詢方式: ); printf(n|-|); printf(n| A 起始站查詢 |); printf(n|-|); printf(n| B 終點(diǎn)站查詢 |); printf(n|-|); printf(n| C 退出 |); printf(n|-|); c=getch();if(c=B|c=b)printf(n請輸入要查詢的終點(diǎn)站:nn); scanf(%s,b); struct bus *p=bhead; int n=1; printf(n 您可以乘坐以下公汽到達(dá)%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|-|); p=p-next; if(n) printf(nn錯誤,終點(diǎn)站不存在!nn重新輸入(A) 退出查詢(N)-請選擇 A 或 N nn ); c=getch(); if(c=a|c=A) goto loop; printf(nn您想 繼續(xù)查詢(A) 退出查詢(N)-請選擇 A 或 N nn ); c=getch(); if(c=a|c=A) goto loop;if(c=A|c=a) printf(n請輸入要查詢的起始站:nn); scanf(%s,b); struct bus *p=bhead; int n=1; printf(n 您可以乘坐以下公汽起始站為%s,p-start); 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(nn錯誤,起始站不存在!nn重新輸入(A) 退出查詢(N)-請選擇 A 或 N nn ); c=getch(); if(c=a|c=A) goto loop; printf(nn您想 繼續(xù)查詢(A) 退出查詢(N)-請選擇 A 或 N nn ); c=getch(); if(c=a|c=A) goto loop;void delb() char b20; printf(nnnn 刪除公汽nn); loop:printf(n請輸入要刪除路線的公汽號:nn); 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(y1) p1=p1-next; p=p-next; char c; if(n) printf(nn錯誤,公汽號不存在!nn重新輸入(A) 退出刪除(N)-請選擇 A 或 N nn ); c=getch(); if(c=a|c=A) goto loop; else return; if(p=bhead)bhead=bhead-next; else p1-next=p-next; printf(n刪除路線的公汽成功!nn); printf(nn您是 繼續(xù)刪除(A) 退出刪除(N)-請選擇 A 或 N nn ); 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 *fp1; fp1=fopen(p-num,w); fwrite(p-pr,p-z*50*sizeof(char),1,fp1); fclose(fp1); p=p-next; fclose(fp); /printf(nnnn保存%d輛車成功!,n);void release()bhead=bi=NULL;printf(nnn數(shù)據(jù)清空成功!);void show1() printf(nnnnn |-|);printf(n | 主 菜 單 |); printf(n |-|);printf(n | A 導(dǎo) 航 查 詢 |); printf(n |-|); printf(n | B 公 汽 查 詢 |); printf(n |-|); printf(n | C 新 建 公 汽 |); printf(n |-|); printf(n | D 系 統(tǒng) 管 理 |); printf(n |-|); printf(n | E 清 空 數(shù) 據(jù) |);printf(n |-|);printf(n | F 退 出 程 序 |); printf(n |-|);printf(n | 請您選擇一個任務(wù) |); printf(n |-|nnn);void show2()printf(n |-|);printf(n | 管 理 菜 單 |); printf(n |-|);printf(n | A 修 改 路 線 |); prin
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030中國自動香水機(jī)行業(yè)市場深度研究及發(fā)展前景投資可行性分析報(bào)告
- 2025至2030中國自動細(xì)胞清洗機(jī)行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報(bào)告
- 2025至2030中國自動柜員機(jī)行業(yè)市場深度研究及發(fā)展前景投資可行性分析報(bào)告
- 2025至2030中國膝關(guān)節(jié)重建裝置行業(yè)市場深度研究及發(fā)展前景投資可行性分析報(bào)告
- 2025至2030中國脫硫醇催化劑行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報(bào)告
- 2025至2030中國脊柱非融合技術(shù)行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢及投資規(guī)劃深度研究報(bào)告
- 初中生化學(xué)元素基礎(chǔ)講座課件
- 2025至2030中國腫瘤壞死因子受體超家族成員1A行業(yè)市場占有率及投資前景評估規(guī)劃報(bào)告
- 2025至2030中國聯(lián)合辦公行業(yè)發(fā)展分析及產(chǎn)業(yè)運(yùn)行態(tài)勢及投資規(guī)劃深度研究報(bào)告
- 2025至2030中國翅片密封袋行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢及投資規(guī)劃深度研究報(bào)告
- 汽車產(chǎn)業(yè)鏈協(xié)同發(fā)展-洞察闡釋
- 滴灌帶造顆粒合同協(xié)議
- 學(xué)??倓?wù)后勤工作總結(jié)模版
- 《蛇咬傷應(yīng)急處理》課件
- 2025年錨栓市場發(fā)展現(xiàn)狀
- 養(yǎng)豬場建設(shè)項(xiàng)目可行性研究報(bào)告(模板范文)
- 2025年四級中式烹調(diào)師(中級)職業(yè)技能鑒定參考試題庫(含答案)
- 夜間作業(yè)安全培訓(xùn)培訓(xùn)資料
- 中藥知識講解課件
- 施工資源需求計(jì)劃與調(diào)配策略
- 預(yù)制箱梁首件工程施工總結(jié)
評論
0/150
提交評論