




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、淮 海 工 學 院 計算機工程學院課程設計報告設計名稱: 數據結構課程設計 選題名稱: 姓 名: 學 號: 專業班級: 計算機科學與技術 系 (院): 計算機工程學院 設計時間: 2014.12.222015.1.4 設計地點: 計算機實驗室、教室 成績:指導教師評語: 簽名: 年 月 日數據結構課程設計報告 第 41 頁,共 42頁1課程設計目的1、訓練學生靈活應用所學數據結構知識,獨立完成問題分析,結合數據結構理論知識,編寫程序求解指定問題。 2、初步掌握軟件開發過程的問題分析、系統設計、程序編碼、測試等基本方法和技能;3、提高綜合運用所學的理論知識和方法獨立分析和解決問題的能力;4、訓練
2、用系統的觀點和軟件開發一般規范進行軟件開發,鞏固、深化學生的理論知識,提高編程水平,并在此過程中培養他們嚴謹的科學態度和良好的工作作風。2課程設計任務與要求:任務根據教材數據結構-C語言描述(耿國華主編)和參考書數據結構題集(C語言版)(嚴蔚敏、吳偉民主編)選擇課程設計題目,要求通過設計,在數據結構的邏輯特性和物理表示、數據結構的選擇應用、算法的設計及其實現等方面加深對課程基本內容的理解和綜合運用。設計題目從任務書所列選題表中選取,每班每題不得超過2人。學生自選課題。學生原則上可以結合個人愛好自選課題,要求課題有一定的深度與難度,有一定的算法復雜性,能夠鞏固數據結構課程所學的知識。學生自選課題
3、需在18周前報課程設計指導教師批準方可生效。要求:1、在處理每個題目時,要求從分析題目的需求入手,按設計抽象數據類型、構思算法、通過設計實現抽象數據類型、編制上機程序和上機調試等若干步驟完成題目,最終寫出完整的分析報告。前期準備工作完備與否直接影響到后序上機調試工作的效率。在程序設計階段應盡量利用已有的標準函數,加大代碼的重用率。 2、設計的題目要求達到一定工作量(300行以上代碼),并具有一定的深度和難度。3、程序設計語言推薦使用C/C+,程序書寫規范,源程序需加必要的注釋;4、每位同學需提交可獨立運行的程序;5、每位同學需獨立提交設計報告書(每人一份),要求編排格式統一、規范、內容充實,不
4、少于10頁(代碼不算);6、課程設計實踐作為培養學生動手能力的一種手段,單獨考核。 3課程設計說明書一 需求分析停車場管理系統(1)根據車輛到達停車場到車輛離開停車場時所停留的時間進行計時計費。(2)當有車輛從停車場離開時,等待的車輛按順序進入停車場停放,實現停車場的調度功能。(3)用要求以順序棧模擬停車場,以鏈隊列模擬便道。(4) 從終端讀入汽車到達或離去的數據,每組數據包括三項:是“到達”還是“離去”;汽車牌照號碼;“到達”或“離去”的時刻。(5)每組輸入信息相應的輸出信息為:如果是到達的車輛,則輸出其在停車場中或便道上的位置;如果是離去的車輛,則輸出其在停車場中停留的時間和應交的費用。二
5、 概要設計停車場管理系統1、系統用到的抽象數據類型定義:typedef struct node char num10; /車牌號碼 Time reach; /到站時間 Time leave; /離開時間CarNode;typedef struct timeint hour;int min;Time;typedef struct NODECarNode *stackMAX+1; /棧用順序表示 int top;SeqStackCar;typedef struct carCarNode *data; / 便道上的車用鏈表表示 struct car *next;QueueNode;typedef s
6、truct NodeQueueNode *head; / 設置頭指針、尾指針。 QueueNode *rear;LinkQueueCar;2、 系統中的子程序和功能說明:(1)void InitStack(SeqStackCar *); /車輛節點進棧 當棧未滿時,就把到達的車輛進棧。(2)int InitQueue(LinkQueueCar *); /車輛節點進隊列 當棧滿了時,車輛就進入便道上的隊列中(3)int Arrival(SeqStackCar *,LinkQueueCar *); /車輛到達登記車輛到達時,先登記車輛車牌號碼。然后再判斷停車場有沒有停滿,沒停滿就進棧,停滿了就停在
7、便道上,即進隊列。(4) void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *); /車輛離開處理 通過輸入離開車輛的位置處理,然后調用PRINT(CarNode *p,int room);函數進行收費。然后再判斷便道上有沒有車,如果有,就把便道上的車進停車場內。(5)void List(SeqStackCar,LinkQueueCar); /顯示車場內和便道上的車輛情況 用個switch();函數選擇顯示車場內或是便道上的車輛情況。包括對下面兩個子函數的調用: void List1(SeqStackCar *S); void List2(
8、LinkQueueCar *W); /分別為顯示車場和便道上的車輛情況(6)void PRINT(CarNode *p,int room); / 車輛離開是的收費 這個函數由車輛離開的函數調用,以分鐘計時算費,但只能計算當天之內的費用,如果第二天的話會導致計費為負或減少。即只能當天停,當天開走。3、 系統程序功能結構圖停車場管理系統車輛到達車輛離開列表顯示到達時間車牌號碼離開時間收費情況車場信息便道信息三 詳細設計停車場管理系統 算法的設計思想及流程圖主要模塊算法描述: 本程序最主要的算法就是車輛到達登記的和車輛離開的。車輛到達:int Arrival(SeqStackCar *Enter,L
9、inkQueueCar *W)首先定義一個棧和隊列的結構體指針為:*p , *t , 然后申請一個車輛信息的內存空間,并把它賦給棧指針.車輛到達時就輸入車牌號,并通過if(Enter-toptop0) 確保棧不空,然后用個while(1) 確保輸入的車輛離開位置的合法性。如果不和法,顯示輸入有誤,要重新輸入。通過while(Enter-toproom) 判斷離開車輛的位置,如果是中間位置,就要再用一個棧前面臨時開出來的車,等要開出的車開出后,再把臨時棧的車看進 車場內,并要調用PRINT(p,room); 這個函數計算顯示費用.然后還要用 if(W-head!=W-rear)&Enter-to
10、pnum);if(Enter-toptop+; printf(n車輛在車場第%d位置.,Enter-top); printf(n車輛到達時間:); scanf(%d:%d,&(p-reach.hour),&(p-reach.min); Enter-stackEnter-top=p; return(1);else printf(n該車須在便道等待!有車位時進入車場); t=(QueueNode *)malloc(sizeof(QueueNode); t-data=p; t-next=NULL; W-rear-next=t; W-rear=t; return(1);圖1.2源代碼:void Lea
11、ve(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W)/車輛的離開 int room; CarNode *p,*t; QueueNode *q;if(Enter-top0) / 判斷車場是否為空 while(1) printf(n請輸入車在車場的位置/1-%d/:,Enter-top); scanf(%d,&room); if(room=1&roomtop) break; else printf(n 輸入有誤,請重輸: );while(Enter-toproom) / 把要刪除的車輛的前面的車開出來,進臨時棧。Temp-top+; Te
12、mp-stackTemp-top=Enter-stackEnter-top; Enter-stackEnter-top=NULL; Enter-top-; p=Enter-stackEnter-top; / 把要刪除的車輛節點賦給p。 Enter-stackEnter-top=NULL; Enter-top-;while(Temp-top=1) / 再把臨時棧里德車輛進停車場Enter-top+; Enter-stackEnter-top=Temp-stackTemp-top; Temp-stackTemp-top=NULL; Temp-top-;PRINT(p,room); / 調用計費函數
13、計費。 if(W-head!=W-rear)&Enter-tophead-next; t=q-data; Enter-top+; printf(n便道的%s號車進入車場第%d位置.,t-num,Enter-top); printf(n請輸入%s號車進入車場的時間:,t-num); scanf(%d:%d,&(t-reach.hour),&(t-reach.min); W-head-next=q-next;if(q=W-rear) W-rear=W-head;Enter-stackEnter-top=t; free(q);else printf(n便道里沒有車.n);else printf(n車
14、場里沒有車.); 顯示車場里的車輛情況源程序:void List1(SeqStackCar *S) /顯示車場里的車輛情況 int i; if(S-top0)printf(n車場:); printf(n 位置 到達時間 車牌號n); for(i=1;itop;i+)printf( %d ,i); printf( %d:%d ,S-stacki-reach.hour,S-stacki-reach.min); puts(S-stacki-num);else printf(n車場里沒有車);顯示便道上的車輛情況源代碼:void List2(LinkQueueCar *W) /顯示便道上的車輛情況 Q
15、ueueNode *p; int i; p=W-head-next; if(W-head!=W-rear)printf(n等待車輛的號碼為:); for(i=1; (p!=NULL); i+)printf(n第 %d 車輛.,i);puts(p-data-num); p=p-next ;else printf(n便道里沒有車.);printf(n);開始初始化兩個棧Enter和Temp及一個隊列Wait。進入主菜單車到達車離開退出Room前車輛進臨時棧對room計費便道車信息車場內信息判便道是否有車車場是否為空列表顯示棧Enter元素出棧隊列中元素進棧隊列Wait中元素出隊元素進棧Enter便
16、道車進車場元素進隊列Wait判斷棧是否為滿結束退出列表顯示是否否是否是圖1.3:停車場管理系統主流程圖.四 程序設計與調試分析停車場管理系統測試數據: 每個測試的數據都是以字符串的形式存儲的,輸入數據是嚴格按照提示的信息執行。調試遇到的問題與解決方法:在調試的過程中,輸出員工信息的時候格式老是錯位,調試了很多次才得以調整;在從文件中讀出數據時老是顯示不出數據,最后才發現原來是忘了寫輸出語句,但是在添加上去之后,能輸出信息卻有很多的亂碼,仔細檢查了一遍又一遍后終于發現了,原來是自己定義的指針在循環的過程中次序混亂了。在調試的過程中我還發現我的提示語句不多,導致讓別人不知道下一步要做些什么,所以就
17、適當的添加了一些提示的信息。五 用戶手冊停車場管理系統【 使用說明 】(1)進入程序的界面,出現命令的幫助信息(停車場的最大容量為三輛車,多了則進入便道中等待其他車離開車場)。 (2)輸入1:車輛到達登記;輸入2:車輛離開登記;輸入3:車輛列表顯示;輸入4:退出系統(首先得進行車輛登記,否則停車場里沒有車)(3)車輛登記時,到達的時間與離開的時間一定要嚴格按照時間的模式,如:8:00(4)顯示車輛列表時,有相應的信息提示,看自己的意愿執行程序。 (5)在覺得操作完畢時輸入4:退出系統。 【 程序中的頭文件 】#include#include#include#define MAX 3 / 停車場
18、最大容量為3輛,便于觀察#define price 0.05六 測試成果停車場管理系統七 附錄(源程序清單)停車場管理系統#include#include#include#define MAX 3 / 停車場最大容量為3輛,便于觀察#define price 0.05typedef struct time / 定義時間結構體 int hour;int min;Time;typedef struct node / 定義車輛信息結構體 char num10; /車牌號碼 Time reach; /到站時間 Time leave; /離開時間CarNode;typedef struct NODECa
19、rNode *stackMAX+1; int top;SeqStackCar;typedef struct carCarNode *data; struct car *next;QueueNode;typedef struct NodeQueueNode *head; QueueNode *rear;LinkQueueCar;void InitStack(SeqStackCar *); int InitQueue(LinkQueueCar *);int Arrival(SeqStackCar *,LinkQueueCar *); void Leave(SeqStackCar *,SeqStac
20、kCar *,LinkQueueCar *);void List(SeqStackCar,LinkQueueCar); void main()SeqStackCar Enter,Temp; LinkQueueCar Wait; int ch; InitStack(&Enter); InitStack(&Temp); InitQueue(&Wait); while(1) printf(n 歡迎使用停車場系統(停車場最大容量為3輛)t); printf(nt 1. 車輛到達登記.tn); printf(nt 2. 車輛離開登記.tn); printf(nt 3. 車輛列表顯示.tn); print
21、f(nt 4. 退 出 系 統 .tn);while(1)printf( 請選擇: ); scanf(%d,&ch); if(ch=1&chtop=0; for(i=0;istacks-top=NULL;int InitQueue(LinkQueueCar *Q) / 隊列的初始化 Q-head=(QueueNode *)malloc(sizeof(QueueNode);if(Q-head!=NULL)Q-head-next=NULL; Q-rear=Q-head; return(1); else return(-1);void PRINT(CarNode *p,int room)/ 車輛收費
22、 int A1,A2,B1,B2;printf(n車輛離開的時間:); scanf(%d:%d,&(p-leave.hour),&(p-leave.min); printf(n離開車輛的車牌號為:); puts(p-num); printf(n其到達時間為: %d:%d,p-reach.hour,p-reach.min); printf(n離開時間為: %d:%d,p-leave.hour,p-leave.min); A1=p-reach.hour; A2=p-reach.min; B1=p-leave.hour; B2=p-leave.min; printf(n應交費用為: %2.1f元,(
23、B1-A1)*60+(B2-A2)*price); free(p); int Arrival(SeqStackCar *Enter,LinkQueueCar *W)/ 車輛的到達登記 CarNode *p; QueueNode *t; p=(CarNode *)malloc(sizeof(CarNode); flushall(); printf(n請輸入車牌號(例:B1234):); gets(p-num);if(Enter-toptop+; printf(n車輛在車場第%d位置.,Enter-top); printf(n車輛到達時間:); scanf(%d:%d,&(p-reach.hour
24、),&(p-reach.min); Enter-stackEnter-top=p; return(1);else printf(n該車須在便道等待!有車位時進入車場); t=(QueueNode *)malloc(sizeof(QueueNode); t-data=p; t-next=NULL; W-rear-next=t; W-rear=t; return(1);void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W)/車輛的離開 int room; CarNode *p,*t; QueueNode *q;if(Ente
25、r-top0) / 判斷車場是否為空 while(1) printf(n請輸入車在車場的位置/1-%d/:,Enter-top); scanf(%d,&room); if(room=1&roomtop) break; else printf(n 輸入有誤,請重輸: );while(Enter-toproom) / 把要刪除的車輛的前面的車開出來,進臨時棧。Temp-top+; Temp-stackTemp-top=Enter-stackEnter-top; Enter-stackEnter-top=NULL; Enter-top-; p=Enter-stackEnter-top; / 把要刪除
26、的車輛節點賦給p。 Enter-stackEnter-top=NULL; Enter-top-;while(Temp-top=1) / 再把臨時棧里德車輛進停車場Enter-top+; Enter-stackEnter-top=Temp-stackTemp-top; Temp-stackTemp-top=NULL; Temp-top-;PRINT(p,room); / 調用計費函數計費。 if(W-head!=W-rear)&Enter-tophead-next; t=q-data; Enter-top+; printf(n便道的%s號車進入車場第%d位置.,t-num,Enter-top);
27、 printf(n請輸入%s號車進入車場的時間:,t-num); scanf(%d:%d,&(t-reach.hour),&(t-reach.min); W-head-next=q-next;if(q=W-rear) W-rear=W-head;Enter-stackEnter-top=t; free(q);else printf(n便道里沒有車.n);else printf(n車場里沒有車.); void List1(SeqStackCar *S) /顯示車場里的車輛情況 int i; if(S-top0)printf(n車場:); printf(n 位置 到達時間 車牌號n); for(i
28、=1;itop;i+)printf( %d ,i); printf( %d:%d ,S-stacki-reach.hour,S-stacki-reach.min); puts(S-stacki-num);else printf(n車場里沒有車);void List2(LinkQueueCar *W) /顯示便道上的車輛情況 QueueNode *p; int i; p=W-head-next; if(W-head!=W-rear)printf(n等待車輛的號碼為:); for(i=1; (p!=NULL); i+)printf(n第 %d 車輛.,i);puts(p-data-num); p=
29、p-next ;else printf(n便道里沒有車.);printf(n);void List(SeqStackCar S,LinkQueueCar W) /顯示,遍歷int flag,tag; flag=1;while(flag)printf( 查看車輛列表顯示: ); printf(n 1.車場列表n 2.便道列表n 3.返回主菜單n); printf(n請選擇 13:);while(1) scanf(%d,&tag); if(tag=1 & tagnext;if(!woker-next)/若鏈表為空printf(沒有資料可以查找!n);return;printf(ttt*n);pri
30、ntf(ttt*t1:按員工工號查找t *n);printf(ttt*t2:按員工姓名查找t *n);printf(ttt*n);scanf(%d,&sel);if(sel=1)flag2=0;printf(請輸入你要查找的員工工號:);scanf(%s,find);while(p)if(strcmp(p-data.num,find)=0)flag2=1;printf(工號 姓名 性別 生日 學歷 職位 工資 住址 電話n);if(flag2=1)printf(%-9s%-11s%-8s%-8s%-10s%-9s%-9s%-7s%-7sn,p-data.num,,p-da
31、ta.sex,p-data.birthday,p-data.degree,p-data.position,p-data.salary,p-data.address,p-data.telephone);p=p-next;if(flag2=0)printf(所要查找的員工不存在!n);elseif(sel=2)flag2=0; printf(請輸入你要查找的員工姓名:);scanf(%s,find);while(p)if(strcmp(,find)=0)flag2=1;printf(工號 姓名 性別 生日 學歷 職位 工資 住址 電話n); if(flag2=1) print
32、f(%-9s%-11s%-8s%-8s%-10s%-9s%-9s%-7s%-7sn,p-data.num,,p-data.sex,p-data.birthday,p-data.degree,p-data.position,p-data.salary,p-data.address,p-data.telephone); p=p-next;if(flag2=0)printf(所要查找的員工不存在!n);圖2.2源代碼:void delet(Node *woker)/刪除員工信息Node *p,*r,*s;char find10;if(!woker-next)printf(沒有資
33、料可以顯示!n);return;printf(請輸入您要刪除的員工工號!n);scanf(%s,find);p=woker-next;while(p!=NULL)if(strcmp(p-data.num,find)=0)/如果找到的話返回的是符合要求break;p=p-next;if(!p)printf(找不到您要刪除的員工工號!n);elser=woker;while(r-next!=p)r=r-next;s=r-next;r-next=r-next-next;員工信息保存源代碼:void save(Node *woker)/將員工信息保存到文件int n;Node *p;FILE *fp;
34、/指向文件的指針printf(需要保存嗎?(1-保存 0-不保存));scanf(%d,&n);if(n)if(woker-next=NULL)printf(無記錄);elsep=woker-next;if(fp=fopen(員工管理系統.txt,wb)=NULL)/打開文件,并判斷打開是否正常printf(can not open filen);/打開文件失敗while(p!=NULL)fprintf(fp,%-9s%-11s%-8s%-8s%-10s%-9s%-9s%-7s%-7sn,p-data.num,,p-data.sex,p-data.birthday,p-data.degree,p-data.position,p-data.salary,p-data.address,p-data.telephone);p=p-next;fclose(fp);/關閉文件 圖2.3:簡單的員工管理系統主流程圖四 程序設計與調試分析簡單的員工管理系統測試數據: 每個測試的數據嚴格按照提示的信息執行。調試遇到的問題與解決方法:在輸入登記車輛到達時間的時候,沒有相關的小時、分鐘數字的限制范圍(小時 023,分鐘 060);這就使程序不那么健壯了,還有,在計算收費時如果離開時間是到了第二天了,這樣就可能會導致收費時負
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 四川省達州市普通高中2025屆高三下學期3月摸底生物試題含解析
- 晉城市重點中學2024-2025學年5月中考二模生物試題含解析
- 工程項目合同范例匯編
- 版個人借款續期還款合同
- 創業公司借款合同范本
- 統編版三年級語文下冊第一次月考測試卷(含答案)
- 遼寧省沈陽市大東區2018-2019學年八年級上學期期末考試物理試題【含答案】
- 版醫療器械購銷合作協議
- 認籌登記合同細則
- 初中數學冪的乘除-冪的乘方教學設計+2024-2025學年北師大版數學七年級下冊
- 完整版各城基本風壓
- GB/T 6672-2001塑料薄膜和薄片厚度測定機械測量法
- GB/T 4937.4-2012半導體器件機械和氣候試驗方法第4部分:強加速穩態濕熱試驗(HAST)
- 涂料色漿MSDS-涂料色漿化學品安全技術說明書范本
- 三角形的內角和-課件
- CO變換工藝發展過程及趨勢
- 北師大版數學六年級下冊-總復習課件(精編版)
- 經濟效益證明(模板)
- 汽車總裝車輛返工返修作業標準管理辦法
- D建筑消防設施故障維修記錄表
- 黑龍江省哈爾濱市恒泰石材有限公司(擴大區)建筑用凝灰巖
評論
0/150
提交評論