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

下載本文檔

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

文檔簡(jiǎn)介

1、精選文檔數(shù) 據(jù) 結(jié) 構(gòu)課 程 設(shè) 計(jì) 報(bào) 告一、課程設(shè)計(jì)名稱公交線路管理模擬系統(tǒng)二、實(shí)用工具軟件Microsoft visual C+ 6.0三、課程設(shè)計(jì)內(nèi)容簡(jiǎn)介1、 實(shí)踐目的 1)、掌握?qǐng)D的概念、圖的兩種存儲(chǔ)結(jié)構(gòu)(鄰接矩陣和鄰接表)的存儲(chǔ)思想及其存儲(chǔ)實(shí)現(xiàn);2)、掌握上機(jī)實(shí)現(xiàn)圖的基本方法;3)、掌握有關(guān)圖的操作并用高級(jí)語(yǔ)言編程實(shí)現(xiàn);4)、熟練掌握?qǐng)D的深度、廣度優(yōu)先遍歷算法思想及其程序?qū)崿F(xiàn);5)、掌握?qǐng)D的常見應(yīng)用算法的思想及其程序?qū)崿F(xiàn)。2、 實(shí)踐要求1)、掌握本章實(shí)踐的算法;2)、上機(jī)運(yùn)行本章的程序,保存和打印出程序的運(yùn)行結(jié)果,并結(jié)合程序進(jìn)行分析;3)、按照你對(duì)圖的操作需要,重新改寫程序并運(yùn)行,

2、打印出文件清單和運(yùn)行結(jié)果;4)、注意理解各算法實(shí)現(xiàn)時(shí)所采用的存儲(chǔ)結(jié)構(gòu);5)、注意正、逆鄰接表。3、 系統(tǒng)簡(jiǎn)介及設(shè)計(jì)思路本項(xiàng)目是對(duì)公交車路線信息的簡(jiǎn)單模擬,以完成建立公交路線信息、修改公交路線信息和刪除公交路線信息等功能。本項(xiàng)目的實(shí)質(zhì)是完成對(duì)公交路線信息的建立、查找、插入、修改、刪除等功能,可以首先定義項(xiàng)目的數(shù)據(jù)結(jié)構(gòu),然后將每個(gè)功能寫成一個(gè)函數(shù)來(lái)完成對(duì)數(shù)據(jù)的操作,最后完成主函數(shù)以驗(yàn)證各個(gè)函數(shù)功能并得出運(yùn)行結(jié)果。公交站點(diǎn)之間的關(guān)系可以是任意的,任意兩個(gè)站點(diǎn)之間都可能相關(guān)。而在圖形結(jié)構(gòu)中,結(jié)點(diǎn)之間的關(guān)系可以是任意的,圖中任意兩個(gè)數(shù)據(jù)之間都可能相關(guān)。所以可以用圖形結(jié)構(gòu)來(lái)表示n個(gè)公交站點(diǎn)之間及站點(diǎn)之間可

3、能設(shè)置的公交路線,其中網(wǎng)的頂點(diǎn)表示公交站點(diǎn),邊表示兩個(gè)站點(diǎn)之間的路線,賦予邊的權(quán)值表示相應(yīng)的距離。因?yàn)楣宦肪€是有一定的連續(xù)關(guān)系的,如果想輸出從某一個(gè)起始點(diǎn)開始到某一終點(diǎn)結(jié)束的公交路線,就需要找到從某一點(diǎn)開始的第一個(gè)鄰接點(diǎn)和下一個(gè)鄰接點(diǎn)。因?yàn)樵卩徑颖碇腥菀渍业饺我豁旤c(diǎn)的第一個(gè)鄰接點(diǎn)和下一個(gè)鄰接點(diǎn),所以本項(xiàng)目使用了圖的鄰接表存儲(chǔ)結(jié)構(gòu)。4、 程序設(shè)計(jì)流程為了創(chuàng)建公交路線,首先建立結(jié)構(gòu)體載入公交車的相關(guān)信息:名稱、司機(jī)、起始站、終點(diǎn)站、站數(shù)以及距離。利用鄰接表把站點(diǎn)與站點(diǎn)之間的信息儲(chǔ)存起來(lái)。用文件詳細(xì)記載了路線信息,便于管理者初始化公交路線信息。再構(gòu)造子函數(shù)來(lái)創(chuàng)建、及時(shí)修改、插入、刪除公交信息、以及

4、查詢公交路線是否出錯(cuò),各站點(diǎn)之間的距離。用主函數(shù)來(lái)調(diào)用子函數(shù),進(jìn)入導(dǎo)航系統(tǒng)而進(jìn)行操作。主函數(shù)(main)流程導(dǎo)航查詢(initial)流程 汽車查詢(包含車號(hào)、站臺(tái)查詢)流程新建(newb)流程修改路線(Modifyr)流程修改汽車(modifyb)流程刪除汽車(delb)流程5、運(yùn)行環(huán)境代碼用C語(yǔ)言完成,布置在Microsoft visual C+ 6.0運(yùn)行。Microsoft visual C+ 6.0具有集成開發(fā)環(huán)境,可提供編輯C語(yǔ)言,C+以及C+/CLI等編程語(yǔ)言。整合了便利的除錯(cuò)工具,特別是整合了微軟視窗程式設(shè)計(jì)(Windows API)、三維動(dòng)畫DirectX API,Micro

5、soft .NET框架。輸入如下公交線路信息121141362734101716155891路 津A10001 司機(jī)1 6:00 1>2>3>4>52路 津A10002 司機(jī)2 6:15 6>7>4>8>17>123路 津A10003 司機(jī)3 6:00 9>7>3>10>124路 津A10004 司機(jī)4 6:30 6>13>1>12>14>175路 津A10005 司機(jī)5 7:00 15>5>8>16>10>2>13創(chuàng)建示意圖(1路)創(chuàng)建結(jié)束選擇N回到

6、主菜單,再選擇A(導(dǎo)航查詢)主菜單下選擇B(公汽查詢)就可以查詢已有的公交信息,查詢方式有公汽號(hào)查詢、站臺(tái)查詢兩種查詢方式我們以公汽號(hào)查詢(查詢 津A10001)為例:返回到主菜單,選擇D進(jìn)入系統(tǒng)管理我們以修改路線為例(修改 津A10001)最后在主菜單下選擇E(清空數(shù)據(jù))最后選擇F即可退出程序。四、 得意與不足之處:1、得意之處:1)、可以根據(jù)題目需要翻閱圖書館資料自學(xué)C+程序,完成代碼。2)、完成過(guò)程中思路清晰,可以根據(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、 不足

7、之處:1)、程序太過(guò)繁瑣,采用了一些不常用的語(yǔ)句2)、不能簡(jiǎn)易地查詢?nèi)我鈨烧局g的距離3)、不能查詢?nèi)我獾恼军c(diǎn),只能查詢起點(diǎn)和終點(diǎn)4)、不能任意輸入兩個(gè)站點(diǎn),給出最優(yōu)的乘車路線五、 自我感受:課程設(shè)計(jì)是把我們所學(xué)的理論知識(shí)進(jìn)行系統(tǒng)的總結(jié)并應(yīng)用于實(shí)踐的良好機(jī)會(huì),有利于加強(qiáng)我們用知識(shí)理論來(lái)分析實(shí)際問題的能力,進(jìn)而加強(qiáng)了我們對(duì)知識(shí)認(rèn)識(shí)的實(shí)踐度,鞏固了我們的理論知識(shí),深化了對(duì)知識(shí)的認(rèn)識(shí),并為走向社會(huì)打下一個(gè)良好的基礎(chǔ)。 在這次課程設(shè)計(jì)中我遇到許多問題和麻煩,得到了老師的幫助和指導(dǎo),才能夠使得這次課程設(shè)計(jì)順利的進(jìn)行下去,另外,在程序調(diào)試過(guò)程中,也得到很多同學(xué)的幫助,給我及時(shí)指出錯(cuò)誤,提出許多寶貴意見。在

8、此對(duì)老師和同學(xué)們表示感謝!八、參考文獻(xiàn):數(shù)據(jù)結(jié)構(gòu)實(shí)踐訓(xùn)練教程 劉光然 主編 南開大學(xué)出版社數(shù)據(jù)結(jié)構(gòu) 嚴(yán)蔚敏 主編 清華大學(xué)出版社C語(yǔ)言程序設(shè)計(jì) 譚浩強(qiáng) 主編 清華大學(xué)出版社附錄:#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <string.h>struct bus char num30;/車號(hào)char driver50;/司機(jī)char stime30;/發(fā)車時(shí)間char start30;/起始站char end30;/終點(diǎn)站int z;/站數(shù)char *pr;/指向

9、路線的首指針 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無(wú)公汽信息文件!");return; fseek(fp,0,SEEK_END); int i,n; n=ftell(fp)/sizeof(struct bus); /printf("nnnn

10、一共有%d輛公汽!",n); rewind(fp); struct bus *p;/for for(i=0;i<n;i+) p=(struct bus *)malloc(sizeof(struct bus ); fseek(fp,i*sizeof(struct bus),0); fread(p,sizeof(struct bus),1,fp);/寫入信息,其中地址是無(wú)用的信息 p->next=NULL;/初始化時(shí)下一個(gè)指向空,都是一個(gè)個(gè)單獨(dú)的 p->pr=NULL;/讓路線為空/路線信息存放在文件名為” 車號(hào) “的文件中;車號(hào)是唯一的 FILE *fp1; fp1=

11、fopen(p->num,"r"); if(!fp1) printf("n%s號(hào)車無(wú)初始路線!",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號(hào)車路線成功!",p->num); /路線信息 if(bhead=NULL) bhead=bi=

12、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請(qǐng)輸入新公汽號(hào):nn"); scanf("%s",p->num); st

13、ruct bus *pj=bhead; while(pj) if(strcmp(pj->num,p->num)=0)printf("nn錯(cuò)誤,該公汽號(hào)已經(jīng)存在!nn"); goto loop2; pj=pj->next; printf("n請(qǐng)輸入新公汽司機(jī)姓名:n"); scanf("%s",p->driver); printf("n請(qǐng)輸入新路線發(fā)車時(shí)間nn"); scanf("%s",p->stime); loop3: printf("nnn請(qǐng)輸入新路線

14、總站臺(tái)數(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;i<=p->z;i+) printf("n請(qǐng)輸入公汽第%d站臺(tái)名稱:",i); scanf("%s",cc); if(i=1)strcat(p->pr,cc);strcpy(p->st

15、art,cc); elsestrcat(p->pr,"->");strcat(p->pr,cc); strcpy(p->end,cc); printf("nn自動(dòng)生成公汽路線%s",p->pr); else printf("nn錯(cuò)誤,該公汽站臺(tái)數(shù)小于2,請(qǐng)重新輸入!nn"); goto loop3;if(bhead=NULL)bi=bhead=p;elsebi->next=p;bi=p; printf("nn%s號(hào)公汽創(chuàng)建成功!",p->num); printf("

16、;nnn您想 繼續(xù)新建(A) 退出創(chuàng)建(N)-請(qǐng)選擇 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請(qǐng)輸入要修改路線的公汽號(hào):nn"); scanf("%s",b); struct bus *p=bhead; int n=1; while(p) if(strcmp(p-&

17、gt;num,b)=0)printf("nn司機(jī)姓名: %s",p->driver);n=0;break; p=p->next; if(n) printf("nn錯(cuò)誤,公汽號(hào)不存在!nn重新修改(A) 退出修改(N)-請(qǐng)選擇 A 或 N nn "); char c; c=getch(); if(c='a'|c='A') goto loop; else return; loop1: printf("nnn請(qǐng)修改路線總站臺(tái)數(shù)(>=2)nn"); int nn; scanf("%d

18、",&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;i<=p->z;i+) printf("n請(qǐng)輸入公汽第%d站臺(tái)名稱:",i); scanf("%s",cc); if(i=1)strcat(p->pr,cc);strcpy(p->start,cc); elsestrcat(p->pr,"

19、->");strcat(p->pr,cc); strcpy(p->end,cc); printf("nn自動(dòng)生成修改后的路線%s",p->pr); else printf("nn錯(cuò)誤,該公汽站臺(tái)數(shù)小于2,請(qǐng)重新輸入!nn"); goto loop1; printf("nnn%s號(hào)公汽修改成功!",p->num);printf("nnn您想 繼續(xù)修改(A) 退出修改(N)-請(qǐng)選擇 A 或 N nn "); c=getch(); if(c='a'|c='A

20、') 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請(qǐng)輸入要修改路線的公汽號(hào):nn"); scanf("%s",b); struct bus *p=bhead; int n=1; while(p) if(strcmp(p->

21、;num,b)=0)printf("nn司機(jī)姓名: %s 發(fā)車時(shí)間: %s AM",p->driver,p->stime );n=0;break; p=p->next; if(n) printf("nn錯(cuò)誤,公汽號(hào)不存在!nn重新修改(A) 退出修改(N)-請(qǐng)選擇 A 或 N nn "); c=getch(); if(c='a'|c='A') goto loop; else return; printf("n請(qǐng)輸入要修改%s公汽的新司機(jī):nn",p->num); scanf(&q

22、uot;%s",p->driver); printf("n請(qǐng)輸入要修改%s公汽的發(fā)車時(shí)間:nn",p->num); scanf("%s",p->stime); printf("nnn%s號(hào)公汽修改成功!",p->num);printf("nnn您想 繼續(xù)修改(A) 退出修改(N)-請(qǐng)選擇 A 或 N nn "); c=getch(); if(c='a'|c='A') goto loop;void showb()struct bus *p=bhead;

23、if(!p)printf("nn公汽線路信息數(shù)據(jù)庫(kù)為空!"); return; elseprintf("nnn 公汽信息數(shù)據(jù)庫(kù) ");printf("n|-|"); int n=1;while(p)printf("n| 公汽號(hào):%s 站數(shù):%d 發(fā)車時(shí)間:%s AM 司機(jī):%s ",p->num, p->z, p->stime,p->driver);printf("n| 路線: %s",p->pr);printf("n|-|"); n=0;p=p

24、->next;if(n)printf("nn公汽線路信息數(shù)據(jù)庫(kù)為空!"); void lookb() char c,b20; /printf("nnnn 查詢路線nn"); loop: printf("n請(qǐng)輸入要查詢的公汽號(hào):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錯(cuò)誤,公汽號(hào)不存在!nn重

25、新輸入(A) 退出查詢(N)-請(qǐng)選擇 A 或 N nn "); c=getch(); if(c='a'|c='A') goto loop; else return;printf("n|-|"); printf("n| 公汽號(hào):%s 站數(shù):%d 發(fā)車時(shí)間:%s AM 司機(jī):%s ",p->num, p->z, p->stime,p->driver);printf("n| 路線: %s",p->pr);printf("n|-|"); printf(

26、"nnn%s號(hào)公汽查詢成功!",p->num);printf("nnn您想 繼續(xù)查詢(A) 退出查詢(N)-請(qǐng)選擇 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 請(qǐng)選擇查詢方式: &qu

27、ot;); 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請(qǐng)輸入要查詢的終點(diǎn)站:nn"); scanf("%s

28、",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|公汽號(hào):%s 路線: %s" ,p->num,p->pr); printf("n|-|"); p=p->next; if(n) printf("nn錯(cuò)誤,終點(diǎn)站不存在!nn重新輸入(A) 退出查詢(N)-

29、請(qǐng)選擇 A 或 N nn "); c=getch(); if(c='a'|c='A') goto loop; printf("nn您想 繼續(xù)查詢(A) 退出查詢(N)-請(qǐng)選擇 A 或 N nn "); c=getch(); if(c='a'|c='A') goto loop;if(c='A'|c='a') printf("n請(qǐng)輸入要查詢的起始站:nn"); scanf("%s",b); struct bus *p=bhead; i

30、nt n=1; printf("n 您可以乘坐以下公汽起始站為%s",p->start); printf("n|-|"); while(p) if(strcmp(p->start,b)=0) n=0; printf("n|公汽號(hào):%s 路線: %s" ,p->num,p->pr); printf("n|-|"); p=p->next; if(n) printf("nn錯(cuò)誤,起始站不存在!nn重新輸入(A) 退出查詢(N)-請(qǐng)選擇 A 或 N nn "); c=get

31、ch(); if(c='a'|c='A') goto loop; printf("nn您想 繼續(xù)查詢(A) 退出查詢(N)-請(qǐng)選擇 A 或 N nn "); c=getch(); if(c='a'|c='A') goto loop;void delb() char b20; printf("nnnn 刪除公汽nn"); loop:printf("n請(qǐng)輸入要?jiǎng)h除路線的公汽號(hào):nn"); scanf("%s",b); struct bus *p=bhead

32、; 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("nn錯(cuò)誤,公汽號(hào)不存在!nn重新輸入(A) 退出刪除(N)-請(qǐng)選擇 A 或 N nn "); c=getch(); if(c='a'|c='A') goto loop; else return; if(p=bhead)bhead=bhead->

33、next; else p1->next=p->next; printf("n刪除路線的公汽成功!nn"); printf("nn您是 繼續(xù)刪除(A) 退出刪除(N)-請(qǐng)選擇 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) /第一個(gè)while fs

34、eek(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ù)清空成功!"

35、);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 |-|"); prin

36、tf("n | D 系 統(tǒng) 管 理 |"); printf("n |-|"); printf("n | E 清 空 數(shù) 據(jù) |");printf("n |-|");printf("n | F 退 出 程 序 |"); printf("n |-|");printf("n | 請(qǐng)您選擇一個(gè)任務(wù) |"); printf("n |-|nnn");void show2()printf("n |-|");printf("

37、;n | 管 理 菜 單 |"); printf("n |-|");printf("n | A 修 改 路 線 |"); printf("n |-|"); printf("n | B 修 改 公 汽 |"); printf("n |-|"); printf("n | C 刪 除 公 汽 |"); printf("n |-|"); printf("n | D 退 出 程 序 |"); printf("n |-|"); printf("n | 請(qǐng)您選擇一個(gè)任務(wù) |");

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論