




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、精選優質文檔-傾情為你奉上計算機科學與技術系課程設計任務書20 12 20 13 學年第 一 學期課程 C語言課程設計課程設計名稱 公交路線管理系統學生姓名 學號 專業班級 指導教師 20 13 1年 8月一、需求分析 本系統主要功能是實現對公交路線的管理和維護。我們都知道,每個城市都會有公交路線的改動,如果使用這個系統,就可以及時的對路線信息進行修改和保存,是非常方便的,而且該系統使用起來也很方便。用戶只需根據顯示的提示信息進行選擇和輸入就可以實現你要求的功能。該系統具有添加,查詢,刪除,修改和顯示所有記錄的功能。用戶可以根據實際情況進行相應的功能選擇。其具體功能簡單描述如下: (1)保存:
2、即將信息存入指定文件中。當用戶對原始數據進行相關的改動(主要是對路線信息進行增加、刪除、修改)之后,用戶可以根據自己的選擇判斷是否要保存到文件中,這樣就實現了信息的記錄功能,以方便用戶隨時進行查看。(2)添加:即添加一條新的公交路線或者是某一條路線上的站點。每次可以添加一條路線信息,若用戶想添加多條路線信息的話可以重復執行該功能,同樣的,添加站點的話也是每一次添加一個站點,若用戶想添加多條路線信息的話也只需要重復執行該功能即可。這樣,就實現了對公交路線的添加信息管理。(3)查詢:即能夠查找出你要的公交路線信息和總共有多少站。簡單地說,就是用戶先選擇你要查詢的公交路線號,在輸入起點站和終點站名稱
3、,然后系統就會自動顯示出起點站和終點站之間共有多少站點,以及起點站和終點站之間所有站點的序號和名稱,從而使用戶一目了然的知道站點信息,而不需要像看地圖那樣一個站點一個站點的用肉眼進行查找,這就為用戶節省了很多時間。 (4)刪除:即能刪除掉一條你所不需要的公交路線信息和某一條路線上的站點。若要刪除路線時只需要輸入你要刪除的公交路線號即可,若要刪除站點也只需輸入你要刪除的站點序號,不需要輸入該站點名稱。(5) 修改:即能修改一條你需要該的路線信息。修改內容包括:修改該條公交路線號、修改站點名稱(輸入新的信息時該條路線的站點長度不能改變,若要改變站點長促可以選擇增加和刪除功能,即可實現)。(6) 顯
4、示路線信息:即將路線信息顯示到屏幕中,供用戶查看。該功能比較簡單,在這里不具體說明。(7)二、 算法設計1、 設計思想:本系統的設計流程簡單比較簡單,原始數據全部都保存在文件中,用戶就不必自己一個一個的輸入信息。程序執行時從文件中讀出,文件的讀取操作在下文中我會詳細說明,這里就不做具體說明了。創建動態鏈表和結構體數組對路線信息進行存儲,因為使用鏈表時對程序的插入、刪除會比較方便,那么插入和刪除就相當于對鏈表節點的刪除和插入。寫無返回值的主函數void main()對系統的功能進行顯示,每次用戶選擇某一功能時都可以看到路線的大致信息,以便于用戶更準確的選擇功能。其中利用switch條件分支語句進
5、行子函數功能的選擇和調用。并且使用while循環語句進行多次循環執行,就可以實現對信息的多次刪除、增加、修改,知道達到用戶滿意時由用戶自己選擇退出系統。通同時使用了清屏函數,對上一次程序運行的結果清楚只顯示本次運行的相關信息,這樣的話就做到了界面的友好化,簡單明了,不冗雜,更方便觀看。當用戶對信息進行有關的改動之后,用戶根據自己的選擇是否保存入文件中,就可以保存他所要的信息了。其主要流程圖如下:NoYes開始輸入選擇信息n菜單保存添加查詢刪除修改輸出退出菜單結束n<7輸入錯誤!請重新輸入n路線信息2、 設計表示: 下面我將對各個子模塊的功能進行詳細的介紹和描述: 模塊一:頭文件,定義結構
6、體,結構體中還嵌套了一個結構體,定義結構體成員,同時定義指向該類型的指針head,其對整個程序都有效。 模塊二:菜單顯示。 顯示該系統所能完成的功能,一目了然。根據用戶的需求自由選擇功能實現。 模塊三:從文件中讀取信息。 該功能以子函數的形式給出,因為其返回值是head,而head是指向結構體的指針,所以該函數屬于指針函數。執行此程序時首先定義文件指針FILE *fp,在打開此文件時,文本文檔里應該有用戶需要的數據,從而才能從文件中正確讀取出來,若文件打開不成功則會顯示“不能打開此文件!”。創建動態鏈表來存儲從文件中讀出來的數據,每讀取一組數據后文件指針后移,這是系統約定俗成的,不需要用戶去考
7、慮的,知道文件結束時停止讀取。讀取結束后必須要關閉文件,即fclose(fp),這樣就完成了從文件中讀取信息的功能。 模塊四:顯示路線信息。該功能以子函數的形式給出,無返回值。定義指向定義過的結構體類型的指針p,并讓p指向head,當p為非空時輸出結構體成員信息,在這里需要說明的是,在輸出站點信息時,當最后一個站點名是end時,停止輸出,因此end是作為站點信息輸出的結束標志,同時p指針指向鏈表的下一個節點,再次讀取一組數據。模塊五:增加線路信息。該函數的返回的是鏈表的頭指針head,因此是一個指針函數。該函數不僅可以增加一條路線信息,也可以增加某一條路線上的站點信息。用戶根據自己的需要進行選
8、擇。本系統添加一條公交路線時,是在鏈表的尾部添加的,因為我考慮到公交線路號一般沒什么順序可言,所以就簡單的添加在了鏈表的末節點。定義BL *p=head,*q。重新建立一個新的節點來存儲你添加的那條線路信息,判斷p是否為空,若不為空的話,q指向p,p指針位置后移一個節點,直到p為空。然后q->next指向新建立的節點,新節點的下一結點賦值為空,從而完成了增加路線信息的功能。如果是添加路線站點,先確定要在哪條路線上添加,所以要先找到該條路線,并用指針指向該節點,然后找該站點將要插入的位置,找到后,將其后面的站點依次后移,把那個空的位置空間騰出來,用來置放添加的節點的信息,這樣就實現了對站點
9、的添加。 模塊六:刪除線路信息。該函數返回的是頭指針head,所以該函數是一個指針函數,也是作為子函數的形式出現。可以刪除整條路線,也可以刪除線路上的某一個站點,刪除一整條路線時,就相當于刪除鏈表中的某一個節點,先確定你要刪除的線路號,找到后,只需要將其前一個節點指向其后一個節點,所以刪除時還需要考慮到刪除的是首節點還是末節點還是中間節點,若刪除首節點只需將head指向head的下一個節點,若刪除末節點,將倒數第二個節點之后賦值為空即可,因此對線路的刪除還是相對比較簡單的,但是要求我們對鏈表的相關操作熟練掌握。刪除站點時,先確定你要刪除的是哪條路線上的站點,找到后一個指針會指向該節點,再確定你
10、要刪除的站序號,確定后將其后一個站名稱移到當前刪除節點的位置,就可以將該站名覆蓋,從而實現站點的刪除。模塊七:修改線路信息。同上分析,該子函數也是一個指針函數,修改時,先確定你要修改哪條路線,指針指向該節點,在重新輸入新的信息即可,新輸入的信息會覆蓋原有節點信息,所以可以實現對線路進行修改,但是修改時需要注意的是,修改時新輸入的站點數目不能改變。模塊八:查詢路線信息。該子函數是一個無返回值的函數。使用時先輸入你要找的路線號,再輸入你要經歷的起點站和終點站,程序就會為你顯示出起點站和終點站之間共有多少站,并且輸出起點站和終點站之間所有站序號和站點名稱。模塊九:將信息保存到文件中。當用戶對原始路線
11、信息進行改動之后,或許要將修改過后的信息保存起來,此時用戶就可以自己選擇是否要將信息保存起來,保存的位置是本系統實現設定好的,保存之后的信息在D盤根目錄下,也方便用戶的查看。模塊十:主函數。構建無返回值的主函數,主函數用來實現對子模塊的調用功能,用while循環語句來控制循環次數,用戶可以根據自己的需求選擇任何時候退出系統。對子模塊的調用主要使用switch開關控制語句,根據選擇實現用戶要求的功能。3、實現注釋: 本系統對于菜單顯示表上的功能基本上都能實現,但是不是很完善,很多地方我還沒有考慮到,或許是考慮的不夠周全,但是有些不足的地方,是我的能力所不能達到的,還望老師體諒,不過等以后學過新的
12、知識用新的方法或許就能將系統做進一步的改進。4、算法設計中一些新的想法:我覺得本系統很不完善,很多功能雖然能實現,但是實現的不夠完美,很多細節我都沒有考慮到,比如查詢路線時,不能大致故略出起點站和終點站需要的時間;修改路線信息時,重新輸入該條路線的信息時,路線上站點的個數不能改變,要改變的話還得選擇增加或刪除功能;還有就是用戶將改動過后的信息保存到文件中后,以后該文件中的數據用戶如果要使用的話,不能從文件中讀取顯示到屏幕上。這些都是我的系統一些不完善的地方,希望以后有能力的時候,能進一步對系統進行修改和完善。三、用戶手冊用戶在適用本系統時,我在這里有幾點說明要解釋一下。以便用戶更好的使用本系統
13、。(1)路線號整形數據,站序號是整形數據,站名時字符串。(2)輸入路線信息時,站的序號是有次序的,從1開始依次往后增加。如果你要結束站點的輸入,只需要在最后一個站點后在輸入下一個站的序號,但是本站的站名一定要是end,用來表示站點錄入結束的結束標志。(3)保存信息的文本文檔,一點要放入G盤根目錄下,因為我在寫本程序時就規定了將文本文檔置于G盤根目錄下,所以以后用戶查看數據信息時可以從G盤根目錄下查找。四、調試及測試 本程序的運行結果如下所示:(1)(2)(3)(4)(5)五、課程小結 通過這次實訓,增加了我學習軟件技術的興趣,雖然還不明確軟件技術包含的具體內容,但從C語言這門課程開始,已發現程
14、序設計的樂趣,在學習C語言的過程中也學到了許多計算機應用基礎知識,對計算機的機體也有了一個大體的了解。這次實訓是老師給了題目,經過自己的努力,實現要求。先做簡單的輸出,一步步的再做其它要求,在實際操作過程中犯的一些錯誤還會有意外的收獲,感覺實訓很有意思。在具體操作中對這學期所學的C語言的理論知識得到鞏固,達到實訓的基本目的,也發現自己的不足之出,在以后的上機中應更加注意,同時體會到C語言具有的語句簡潔,使用靈活,執行效率高等特點。發現上機實訓的重要作用,特別是對數組和循環有了深刻的理解。 通過實際操作,學會 C語言程序編程的基本步驟、基本方法,開發了自己的邏輯思維能力,培養了分析問題、解決問題
15、的能力。深刻體會到“沒有做不到的,只有想不到的”,“團結就是力量”,“實踐是檢驗真理的標準”的寓意。 在此希望以后應多進行這樣的實訓,加長設間,培養我們獨立思考問題的能力,提高實際操作水平。6、 參考資料1、 譚浩強編著, C程序設計 1991年7月 2、 裘宗燕 著,從問題到程序科學出版社,北京大學出版社,1999年4月。 3、 劉瑞挺主編,計算機二級教程,南開大學出版社,1996年10月。 4、 陳朔鷹等編著,C語言程序設計基礎教程,兵器工業出版社,1994年9月 5、 姜仲秋等主編,C語言程序設計,南京大學出版社,1998年1月。 6、C程序設計(第二版),譚浩強編,清華大學出版社,19
16、99年12月。 本書以初學者為讀者對象,要求的起點低,詳細而透徹地講述了C語言各個語句的語法規則,通過典型的簡單的例題,引領初學者進入C語言的世界。 7、C語言程序設計題解與上機指導,譚浩強編,清華大學出版社,2000年11月。 與教材配套的上機指導。附錄:1、 源程序清單:#include "stdio.h"#include "malloc.h"#include "string.h"#include "stdlib.h"struct station int num; char name20;stop50; /*公
17、交站*/typedef struct busline int busnum; struct station stop50; struct busline *next;BL;BL *head;/*菜單*/void Menu()printf(" *n");printf(" * 歡迎進入公交信息管理系統 *n");printf(" *n");printf("*");printf(" *n");printf(" *0. 退出系統 *n");printf(" *n"
18、);printf(" *1.顯示公交車線路信息*n");printf(" *n");printf(" *2.增加公交車線路信息*n");printf(" *n");printf(" *3.刪除公交車線路信息*n");printf(" *n");printf(" *4.修改公交車線路信息*n");printf(" *n");printf(" *5.查詢公交車線路信息*n");printf(" *n"
19、);printf(" *6.保存公交車線路信息*n");printf(" *n");/*函數功能:刪除*/BL *Delete()BL *q,*p=head; int key,r,j=1,x,choise,k; char ch5="end" printf("您是要刪除公交路線還是線路站點:n"); printf("1-刪除公交路線 2-刪除站點n"); printf("你的選擇:"); scanf("%d",&choise); switch(cho
20、ise) case 1:printf("請輸入你要刪除的公交路線號"); scanf("%d",&key); while(key!=p->busnum && p!=NULL) q=p; p=p->next; if(p->busnum=key) if(p=head) head=p->next; else q->next=p->next; else printf("沒有找到你要刪除的公交路線!"); return head; case 2:printf("選擇線路:&q
21、uot;); scanf("%d",&key); while(key!=p->busnum && p!=NULL) q=p; p=p->next; printf("輸入你要刪除的站點序號:"); scanf("%d",&x); for(j=1;j<=x;j+) if(x=p->stopj.num) break; j+; r=j; for(k=r;strcmp(p->,ch)!=0;k+) strcpy(p->,p->sto
22、pk+1.name); strcpy(p->,p->); return head; BL *Correct()BL *p=head,*q; int key,j=1; char ch5="end" printf("選擇你要修改的路線號:"); scanf("%d",&key); while(p!=NULL) if(p->busnum=key) break; q=p; p=p->next; printf("重新輸入該條路線信息(包括路線號、站序號、站名稱
23、,各個站的站數不變):n"); scanf("%d",&p->busnum); do scanf("%d%s",&(p->stopj.num),p->); j+; while(strcmp(p->,ch)!=0); return head;/*函數功能:添加路線*/BL *Add()BL *p=head,*q,*t;char nme20; int j,choise,k,r,key,x,c; char ch5="end" printf(&quo
24、t;您要添加公交路線還是公交站點?n"); puts("1-添加公交路線 2-添加公交站點n"); printf("請選擇:"); scanf("%d",&choise); switch(choise) case 1:j=1; t=(BL *)malloc(sizeof(BL); printf("輸入你要添加的公交路線信息:n"); scanf("%d",&(t->busnum); do scanf("%d%s",&(t->sto
25、pj.num),t->); j+; while(strcmp(t->,ch)!=0); while(p!=NULL) q=p; p=p->next; q->next=t; t->next=NULL; return head; case 2:j=1; printf("選擇你要添加站點的公交路線:"); scanf("%d",&key); while(p!=NULL) q=p; if(p->busnum=key) break; p=p->next; printf(&
26、quot;輸入你要添加的站序號及站名稱:"); scanf("%d",&x); scanf("%s",nme); while(strcmp(p->,ch)!=0) if(x=(p->stopj.num) r=j; break; j+; r=j; c=j; while(strcmp(p->,ch)!=0)c+;for(k=c;k>=r;k-) strcpy(p->stopk+1.name,p->);strcpy(p->
27、,nme);return head; /*函數功能:查找路線*/void Search()BL *p=head,*q; int key,j=1,c,d; char str120,str220,ch5="end" printf("輸入公交車號:"); scanf("%d",&key); printf("n輸入起始站和終點站名稱:"); scanf("%s%s",str1,str2); while(p!=NULL) if(p->busnum=key) break; q=p; p=p-&
28、gt;next; while(strcmp(p->,ch)!=0) if(strcmp(p->,str1)=0) c=j; if(strcmp(p->,str2)=0) d=j; j+; printf("起始站和終點站之間共有%d站n",d-c-1); printf("各個站的序號及名稱為:n"); for(j=c;j<=d;j+) printf("%d%st",p->stopj.num,p->); printf(&qu
29、ot;n");/*函數功能:保存數據*/Save() FILE *fp; BL *t; int j; char ch5="end" t=head; fp=fopen("保存的數據.txt","w+"); if(fp=NULL) printf("File can not open!n"); exit(0); while(t!=NULL) fprintf(fp,"%dt",t->busnum); j=1; do fprintf(fp,"%d%s-",t->s
30、topj.num,t->); j+; while(strcmp(t->,ch)!=0); fprintf(fp,"n"); t=t->next; fclose(fp);/*函數功能:讀取數據*/BL *Creat()BL *p,*q; int j=1; char ch5="end" FILE *fp; fp=fopen("busline.txt","r+"); if(fp=NULL) printf("不能打開此文件!"); exit(0)
31、; p=(BL *)malloc(sizeof(BL); head=p; q=p; fscanf(fp,"%d",&(p->busnum); do fscanf(fp,"%d %s",&(p->stopj.num),p->); j+; while(strcmp(p->,ch)=1); while(!feof(fp) j=1; p=(BL *)malloc(sizeof(BL); q->next=p; q=p; fscanf(fp,"%d",&(p->busnum); do fscanf(fp,"%d %s",&am
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年黑龍江省哈爾濱市香坊區中考物理一模試卷(含解析)
- 數字電路及模擬電路項目電子技術基礎課件
- 鐵道機車專業教學鄭州鐵路張中央77課件
- 雙語列車長空調故障的應急處置課件
- 鐵路貨物運輸保險YourSiteHere課件
- 水準測量成果計算李笑娜課件
- 丙烯花卉兒童課件
- 焦作新材料職業學院《生物化學與生物分子學》2023-2024學年第二學期期末試卷
- 西安翻譯學院《中醫藥與健康》2023-2024學年第二學期期末試卷
- 云南錫業職業技術學院《職業衛生與職業醫學》2023-2024學年第二學期期末試卷
- 智能傳感器銷售合同
- 臨床合理用藥指導
- 口腔科院感知識培訓課件
- 裝配式住宅建筑施工要點及質量管控措施
- 城市更新項目投標書
- 2025年山東濰坊市再擔保集團股份限公司社會招聘11人管理單位筆試遴選500模擬題附帶答案詳解
- 瑞安大橋管理養護維修手冊
- 五年級數學下冊 分層訓練 6.3 分數加、減混合運算 同步練習 (含答案)(人教版)
- 帝國的興衰:修昔底德戰爭史學習通超星期末考試答案章節答案2024年
- DB35T 1964-2021 森林撫育技術規程
- 小學英語名詞專項訓練單選題100道及答案解析
評論
0/150
提交評論