




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、. 車票管理系統課程設計報告題目: 車票管理系統 專業: 信息與計算科學 班級: 1002 學號: 姓名: 指導教師: 完成日期: 2011年12月23日一、課程設計目的本課程設計的目標就是要達到理論與實際應用相結合,提高學生組織數據及編寫大型程序的能力,并培養基本的、良好的程序設計技能以及合作能力。設計中要求綜合運用所學知識,上機解決一些與實際應用結合緊密的、規模較大的問題,通過分析、設計、編碼、調試等各環節的訓練,使學生深刻理解、牢固掌握數據結構和算法設計技術,掌握分析、解決實際問題的能力。通過這次設計,要在程序設計方法以及上機操作等基本技能和科學作風方面受到比較系統和嚴格的訓練。二、課程
2、設計內容一.系統的主要功能:1.瀏覽班次信息2.查詢班次:按班次查詢;按終點查詢;3.售票 (1)售票成功(當車票有剩余,且車未發出時) (2)班次不存在(3)票已售完(當座位數小于等于已定票人數)(4)車已發出4.退票退票成功(輸入的班次號存在且當前時間比發車時間早)退票失敗(班次不存在或當前時間比發車時間晚)三、課程設計過程1需求分析(1) 輸入的形式和輸入值的范圍;錄入的班次信息的輸入形式和輸入值的范圍:車次(類型:int) 發車時間小時(類型:int 0,24) 發車時間分鐘(類型:int 0,60) 起始站及終點站(類型:void wap(int k))行車時間(類型:float t
3、imes(int k))額定票數(類型:number(int k))已定票人數(類型:nownumber(int k,int i))(2) 輸出的形式;printf(3) 程序所能達到的功能;錄入詳細的班次信息(發車時間,起點,終點站,行車時間,額定票數,訂票人數,是否已發車);瀏覽班次信息,可顯示出所有班次當前狀總(如果當前系統時間超過了某班次的發車時間,則顯示“此班已發出”的提示信息)。查詢功能(分班次查詢和終點站查詢兩種);訂票功能;(當查詢出已定票人數小于額定載量且當前系統時間久小于發車時間才能售票,自動更新已售票人數)退票功能;(輸入所退票的班次,當本班車未發出時才能退票,自動更新已
4、售票人數)臨時增加班次功能;2概要設計進入班次一覽進入班次查詢進入終點站查詢售票退票增加班次車票管理系統進入車票查詢界面按b按班次查詢按c終點站查詢按提示操作繼續查找,按1返回主菜單3詳細設計車票查詢依據提示操作進入售票界面售票成功班次不存在票已售完車已發出根據提示繼續售票,返回主菜單按1售票4調試分析內容包括:a調試過程中遇到的問題是如何解決的以及對設計與實現的回顧討論和分析;1.我們將一個個功能分為一個個函數,在發車時間上我們遇到了一些阻礙!我本來想通過算法來輸出發車時間,沒想到一次次的實驗不行!于是我們將發車時間的分為小時段和分鐘段!使用case函數輸出.int hour(int k)s
5、witch(k)case 1:return 07;break;case 2:return 10;break;。(省略一部分)case 27:return 19;break;case 28:return 22;break; /*d到羅源一天的發車時間小時段*/ /*開車時間段*/int minute(int k)switch(k)case 1:return 00;break;case 2:return 00;break;。(省略一部分)case 27:return 30;break;case 28:return 30;break; /*d到羅源一天的發車時間分鐘段*/ /*開車時間段*/2.是終
6、點站的輸出,我們一開始是使用字符串的輸出,這樣以便于按終點站查找時能進行比較。但這種方法我們又沒有實現!于是我們干脆用void,使用簡便的方法,達到相同的目的.void wap(int k)switch(k)case 1: printf("閩清");break;case 2: printf("長樂");break;case 3: printf("連江");break;case 4: printf("永泰");break;case 5: printf("福清");break;case 6: pri
7、ntf("羅源");break; /*輸入終點站的函數*/ 3.是時間的問題,這源于要比較發車時間與當前的時間,判斷這班車到底有沒有發車,和能不能訂票與退票,我們用了一個時間函數,輸出了當前的時間,但那邊有年月日,不好進行提取和比較,于是我們采用輸出了時間,然后看著那個時間手動的提取。int shijian() struct tm *ptr; time_t lt; lt =time(NULL); ptr=gmtime(<); printf(ctime(<); return 0; /*輸出當前時間的函數*/在主函數中:printf("請輸入上
8、述時間的時辰:"); scanf("%d",&s);printf("請輸入上述時間的分鐘:");scanf("%d",&t);、然后再將s和t帶入各個需要比較時間的函數中。4.我們碰到了文件的問題,這是在保存已定票人數中,這需要更新已定票人數和判斷能否售票,我們一開始就將這部分留到了最后,一開始我們只寫了暫時售票人數為0,在文件的運用上我們感覺比較困難,訓練的比較少,也比較少這方面的知識!在這里我們碰到了比較大的困難,我們一開始建立了一個txt的文本文檔,準備使用這個來儲存這些數據,但后來我們覺得使用一個文檔
9、比較復雜,容易出錯,于是我們使用比較麻煩,但是簡單的辦法,我建立了與班次一樣多的文檔,一個文檔保存一班車的數據,這樣就不是那么復雜了。int nownumber(int k,int i)int n=0;char filename10;switch(i)case 1:strcpy(filename,"qiu1.txt");break;case 2:strcpy(filename,"qiu2.txt");break;。case 27:strcpy(filename,"qiu27.txt");break;case 28:strcpy(fil
10、ename,"qiu28.txt");break; case 29:strcpy(filename,"qiu29.txt");break;FILE *fp;if(fp=fopen(filename,"rt+")=NULL)printf("cannot open file,strike any key exit!");exit(1);fscanf(fp,"%d",&n);n=n+k; rewind(fp);fprintf(fp,"%d",n); /將輸入數組里面的數據寫
11、到文本里fclose(fp);return n; /*現在已定票人數*/ 其他都是一些小問題了,我們可以自己一邊調試一邊就能自己一會兒解決!b算法的時空分析(包括基本操作和其他算法的時間復雜度和空間復雜度的分析)和改進設想;我們車票管理系統使用的語言并不復雜,使用的都是比較常見的,低級的語言,高級的語言和難懂的語言比較少!這是我們小組自己的成果,做出來了,我們挺有成就感的。我們也使用了很多的while循環。在主函數中while(log) /*循環*/ if(x='a')banci(s,t); /*調用班次的函數,班次一覽的函數*/ if(x='b') chaxu
12、n1(s,t); /*按班次查詢的函數*/ if(x='c') chaxun2(s,t); /*按終點站查詢的函數*/ if(x='d') maipiao(s,t); /*買票的函數*/ if(x='e') tuipiao(s,t); /*退票的函數*/if(x='f')zengban(); /*增加班次*/printf("n");printf("返回主界面:請輸入1:n"); printf("退出:0n"); scanf("%d",&n);
13、if(n=1) system("cls"); jiemian(); scanf("%c",&x); else if(n=0) break;這是在程序運行與退出之間循環在買票函數中:if(number(k)>=nownumber(0,i)&&log=1)printf("請輸入你要定的票的數量m:n");scanf("%d",&m);nownumber(m,i);while(number(k)<nownumber(0,i)nownumber(-m,i);printf(&quo
14、t;這班車已訂滿,請重新訂票:n");printf("請輸入您需要購買票的班次i:n");scanf("%d",i);n=i; while(n>0) k+; n=n-tangci(k); if(i>=10) printf("%d ",i); else printf("%d ",i); if(hour(i)>=10) printf("%d ",hour(i); else printf("%d%d ",o,hour(i); if(minute(i)&g
15、t;=10) printf("%d",minute(i); else printf("%d%d",o,minute(i); printf(" 閩侯 "); wap(i); printf(" %f ",times(k); printf("%d ",number(k); printf("%d ",nownumber(0,i);if(s<hour(i) printf("未發出"); log=1; else if(t<minute(i)&&am
16、p;s=hour(i) printf("未發出"); log=1; else printf("已發出"); log=0; printf("n");這是其中一個循環,實現已定人數小于額定數量!當其大于額定數量時繼續循環,直至你所選的班次小于額定數量未知! 這些循環都很容易理解,都不是什么難的問題,程序中還有很多循環我就不一一舉例了! 我們改進的思想就是盡可能讓它變得簡單!還有很多的不足和瑕疵需要我們繼續去奮斗,希望老師不吝賜教!c經驗和體會等。這次實驗讓我們收獲良多,這讓我們得到了很多經驗,又認識了很多的不足,在c語言這方面我們還需要很
17、多的歷練!我想通過這次的練習,我們都有所進展,我們現在需要的就是實踐。完成了任務我們還是很有成就感的,也增添了我們對c語言的熱情!在今后我們知道,凡事都要有自己的見解,我們可以借鑒別人,但別人是不可復制的,我們要明白只有理解才是自己的,只有通過自己實踐我們才能深刻的認識到這一點!5用戶使用說明該系統是出于對班車的各種信息進行管理和維護,并可以簡單的訂票和退票功能,還可適當地增加班次。1. 系統說明:在程序中直接錄入車次信息依次是:車次(類型:int) 發車時間小時(類型:int 0,24) 發車時間分鐘(類型:int 0,60) 起始站及終點站(類型:void wap(int k))行車時間(
18、類型:float times(int k))額定票數(類型:number(int k))已定票人數(類型:nownumber(int k,int i));2. 車次信息的操作:運行程序就會彈出一個界面如下圖所示:根據您的需求任選:a,b,c,d,e,f,中的任一功能選項進入系統,無論進入那一個,里面都有詳細的信息提示,只要按步操作即可。a:詳細的班次信息供您瀏覽;b:進入后只需輸入您所要定的班次,它就會顯示出該車的發車時間、終點站、行車時間、是否有票剩余,是否已發車。c:輸入您的終點站序號,就會顯示出到達該地的所有車次,供您選擇。d:輸入您想買的班次,若有票剩余且未發車,即可訂票,程序會顯示訂
19、票成功;此時再輸入您要定的票數;若車已發出或票賣完了,程序會提示您:此班不能訂票。e: 輸入您想退的班次,若未發車,即可退票,程序會顯示退票成功;此時再輸入您要退的票數,程序會顯示退票成功;若車已發出,程序會提示您無法退票。f:若想增加班次,則要輸入密碼(qiu),輸入您所要加的班次,及增加的終點站,發車時間。6測試結果主界面:班次查詢:終點站查詢:售票:退票:列出你的測試結果,包括輸入和輸出。這里的測試數據應該完整和嚴格,最好多于需求分析中所列。7附錄#include<stdio.h>#include<time.h> /*時間庫函數*/#include<stdl
20、ib.h> /*調用系統函數*/#include<string.h> /*串操作及內存操作函數*/ #include<conio.h>#include<math.h>#define N 80 /*宏定義多條記錄*/void maipiao(int s,int t); /*函數定義*/float times(int k);int hour(int k)switch(k)case 1:return 07;break;case 2:return 10;break;case 3:return 13;break; case 4:return 16;break;c
21、ase 5:return 19;break;case 6:return 21;break; /*d到閩清一天的發車時間小時段*/case 7:return 07;break;case 8:return 11;break;case 9:return 15;break;case 10:return 19;break;case 11:return 23;break; /*d到長樂一天的發車時間小時段*/case 12:return 07;break;case 13:return 11;break;case 14:return 15;break;case 15:return 19;break;case
22、 16:return 23;break; /*d到連江一天的發車時間小時段*/case 17:return 07;break;case 18:return 11;break;case 19:return 16;break;case 20:return 20;break; /*d到永泰一天的發車時間小時段*/ case 21:return 07;break;case 22:return 12;break;case 23:return 17;break;case 24:return 22;break; /*d到福清一天的發車時間小時段*/case 25:return 07;break;case 2
23、6:return 14;break;case 27:return 19;break;case 28:return 22;break; /*d到羅源一天的發車時間小時段*/ /*開車時間段*/int minute(int k)switch(k)case 1:return 00;break;case 2:return 00;break;case 3:return 00;break; case 4:return 00;break;case 5:return 00;break;case 6:return 00;break; /*d到閩清一天的發車時間分鐘段*/case 7:return 00;brea
24、k;case 8:return 00;break;case 9:return 00;break;case 10:return 00;break;case 11:return 00;break; /*d到長樂一天的發車時間分鐘段*/case 12:return 00;break;case 13:return 00;break;case 14:return 00;break;case 15:return 00;break;case 16:return 00;break; /*d到連江一天的發車時間分鐘段*/case 17:return 00;break;case 18:return 30;brea
25、k;case 19:return 00;break;case 20:return 30;break; /*d到永泰一天的發車時間分鐘段*/ case 21:return 00;break;case 22:return 30;break;case 23:return 00;break;case 24:return 30;break; /*d到福清一天的發車時間分鐘段*/case 25:return 30;break;case 26:return 00;break;case 27:return 30;break;case 28:return 30;break; /*d到羅源一天的發車時間分鐘段*/
26、 /*開車時間段*/void wap(int k)switch(k)case 1: printf("閩清");break;case 2: printf("長樂");break;case 3: printf("連江");break;case 4: printf("永泰");break;case 5: printf("福清");break;case 6: printf("羅源");break; /*輸入終點站的函數*/int shijian() struct tm *ptr; t
27、ime_t lt; lt =time(NULL); ptr=gmtime(<); printf(ctime(<); return 0; /*輸出當前時間的函數*/float times(int k)float t; if(k=1)t=1.5;if(k=2)t=3.0;if(k=3|k=4)t=4.0;if(k=5|k=6)t=4.5;return t; /*輸入行車時間的函數*/int number(int k)int f;if(k=1|k=2)f=30;if(k=3|k=4)f=40;if(k=5|k=6)f=45;return f; /*輸入最大載客量的函數*/in
28、t nownumber(int k,int i)int n=0;char filename10;switch(i)case 1:strcpy(filename,"qiu1.txt");break;case 2:strcpy(filename,"qiu2.txt");break;case 3:strcpy(filename,"qiu3.txt");break; case 4:strcpy(filename,"qiu4.txt");break;case 5:strcpy(filename,"qiu5.txt&
29、quot;);break;case 6:strcpy(filename,"qiu6.txt");break; case 7:strcpy(filename,"qiu7.txt");break;case 8:strcpy(filename,"qiu8.txt");break;case 9:strcpy(filename,"qiu9.txt");break;case 10:strcpy(filename,"qiu10.txt");break;case 11:strcpy(filename,"
30、;qiu11.txt");break; case 12:strcpy(filename,"qiu12.txt");break;case 13:strcpy(filename,"qiu13.txt");break;case 14:strcpy(filename,"qiu14.txt");break;case 15:strcpy(filename,"qiu15.txt");break;case 16:strcpy(filename,"qiu16.txt");break;case 17:st
31、rcpy(filename,"qiu17.txt");break;case 18:strcpy(filename,"qiu18.txt");break;case 19:strcpy(filename,"qiu19.txt");break;case 20:strcpy(filename,"qiu20.txt");break; case 21:strcpy(filename,"qiu21.txt");break;case 22:strcpy(filename,"qiu22.txt"
32、;);break;case 23:strcpy(filename,"qiu23.txt");break;case 24:strcpy(filename,"qiu24.txt");break; case 25:strcpy(filename,"qiu25.txt");break;case 26:strcpy(filename,"qiu26.txt");break;case 27:strcpy(filename,"qiu27.txt");break;case 28:strcpy(filename,&
33、quot;qiu28.txt");break; case 29:strcpy(filename,"qiu29.txt");break;FILE *fp;if(fp=fopen(filename,"rt+")=NULL)printf("cannot open file,strike any key exit!");exit(1);fscanf(fp,"%d",&n);n=n+k; rewind(fp);fprintf(fp,"%d",n); /將輸入數組里面的數據寫到文本里fcl
34、ose(fp);return n; /*現在已定票人數*/int tangci(int k)int x;switch(k)case 1:x=6;break;case 2:x=5;break;case 3:x=5;break;case 4:x=4;break;case 5:x=4;break;case 6:x=4;break;default:x=0;break;return x; /*確定每個地方一天行車趟次的函數*/void jiemian()printf("*n");printf("*歡迎來到車票查詢系統*");printf("n"
35、);printf("| a: 進入班次一覽 |n");printf("| b: 進入查詢班次 |n");printf("| c: 進入終點站查詢 |n");printf("| d: 售票 |n");printf("| e: 退票 |n");printf("| f: 增加班次 |n");printf("*n");printf("n請選擇(a-e):"); /*界面函數*/void banci(int s,int t) system(&qu
36、ot;cls"); /*清屏*/ int i,flag=1,m,k=1,o=0; /*定義一些要用的數據*/ printf(" 車票管理系統 "); printf("n"); printf("班次 發車時間 起點站 終點站 行車時間 額定數量 已訂票人數 狀態"); printf("n"); for(i=1;i<=N;i+) if(flag)m=i+tangci(k)-1; flag=0; /*計算同一個終點站的班次范圍*/if(i>=10) printf("%d ",i)
37、;else printf("%d ",i);if(hour(i)>=10) printf("%d ",hour(i); /*進行頁面的調整,美觀*/else printf("%d%d ",o,hour(i);if(minute(i)>=10)printf("%d",minute(i);elseprintf("%d%d",o,minute(i);printf(" 閩侯 ");wap(k);printf(" %lf ",times(k);print
38、f("%d ",number(k); printf("%d ",nownumber(0,i);if(s<hour(i)printf("未發出");else if(t<minute(i)&&s=hour(i)printf("未發出");elseprintf("已發出");printf("n"); if(i=m)flag=1; k+;if(k>6)break; /*班次一覽*/void chaxun1(int s,int t)system(&qu
39、ot;cls");int i,k=0,n,o=0; printf("n請輸入要查詢的班次i:"); scanf("%d",&i);n=i;while(n>0)k+;n=n-tangci(k); printf("班次 發車時間 起點站 終點站 行車時間 額定數量 已訂票人數 狀態n"); if(i>=10) printf("%d ",i);else printf("%d ",i);if(hour(i)>=10) printf("%d ",ho
40、ur(i);else printf("%d%d ",o,hour(i);if(minute(i)>=10)printf("%d",minute(i);elseprintf("%d%d",o,minute(i); printf(" 閩侯 ");wap(k);printf(" %f ",times(k);printf("%d ",number(k);printf("%d ",nownumber(0,i);if(s<hour(i)printf(&qu
41、ot;未發出");else if(t<minute(i)&&s=hour(i)printf("未發出");elseprintf("已發出"); printf("n");printf("返回重新查詢:3,輸入其他返回:n");scanf("%d",&n);while(n=3) /*循環*/system("cls");printf("n請輸入要查詢的班次i:"); scanf("%d",&i)
42、; printf("班次 發車時間 起點站 終點站 行車時間 額定數量 已訂票人數 狀態n"); if(i>=10) printf("%d ",i);else printf("%d ",i);if(hour(i)>=10) printf("%d ",hour(i);else printf("%d%d ",o,hour(i);if(minute(i)>=10)printf("%d",minute(i);elseprintf("%d%d",o
43、,minute(i);printf(" 閩侯 ");wap(k);printf(" %f ",times(k);printf("%d ",number(k); printf("%d ",nownumber(0,i);if(s<hour(i)printf("未發出");else if(t<minute(i)&&s=hour(i)printf("未發出");elseprintf("已發出");printf("n"
44、); printf("返回重新查詢:3,輸入其他返回:n"); scanf("%d",&n); /*按班次查詢*/void chaxun2(int s,int t) system("cls");int i,k=1,m,j,l=0,o=0;printf("請輸入你要查詢的終點站:n");printf("1:閩清.2:長樂.3:連江.4:永泰.5:福清.6:羅源.n");scanf("%d",&m);for(j=1;j<m;j+)k=k+tangci(j);
45、for(j=1;j<=m;j+)l=l+tangci(j);printf("班次 發車時間 起點站 終點站 行車時間 額定數量 已訂票人數 狀態n"); for(i=k;i<=l;i+) if(i>=10) printf("%d ",i); else printf("%d ",i); if(hour(i)>=10) printf("%d ",hour(i); else printf("%d%d ",o,hour(i); if(minute(i)>=10)printf
46、("%d",minute(i); elseprintf("%d%d",o,minute(i);printf(" 閩侯 ");wap(m);printf(" %f ",times(m);printf("%d ",number(m); printf("%d ",nownumber(0,i);if(s<hour(i)printf("未發出");else if(t<minute(i)&&s=hour(i)printf("未發出
47、");elseprintf("已發出");printf("n");printf("重新查詢請輸入11,直接買票請輸入12,輸入其他退出!:n");scanf("%d",&m);while(m=11)k=1;l=0;printf("請輸入你要查詢的終點站:n"); printf("1:閩清.2:長樂.3:連江.4:永泰.5:福清.6:羅源.n"); scanf("%d",&m); for(j=1;j<m;j+) k=k+tan
48、gci(j); for(j=1;j<=m;j+) l=l+tangci(j);printf("班次 發車時間 起點站 終點站 行車時間 額定數量 已訂票人數 狀態n"); for(i=k;i<=l;i+) if(i>=10) printf("%d ",i); else printf("%d ",i); if(hour(i)>=10) printf("%d ",hour(i); else printf("%d%d ",o,hour(i); if(minute(i)>=
49、10) printf("%d",minute(i); else printf("%d%d",o,minute(i); printf(" 閩侯 "); wap(m); printf(" %f ",times(m); printf("%d ",number(m); printf("%d ",nownumber(0,i);if(s<hour(i) printf("未發出"); else if(t<minute(i)&&s=hour(i
50、) printf("未發出"); else printf("已發出"); printf("n");printf("重新查詢請輸入11,直接買票請輸入12,輸入其他退出!:n"); scanf("%d",&m);if(m=12)maipiao(s,t); /*按終點站查詢*/void zengban()system("cls");int k,i;char stu110,stu210;printf("由于班次不夠,所以需要增加班次:n");printf("這個是工作人員所進,請輸入密碼:n");scanf("%s&q
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 聚焦動物健康2025年生物飼料添加劑研發成果鑒定報告
- 消費金融公司用戶畫像精準營銷策略:2025年行業深度研究報告001
- 2025年醫藥電商平臺醫藥電商物流配送模式與合規監管分析報告
- 2025年元宇宙社交平臺虛擬現實社交平臺品牌建設研究報告
- 2025年互聯網金融平臺合規整改與業務模式創新研究報告
- 2025年遠程醫療服務模式與醫療資源配置優化研究報告
- 2025年醫院電子病歷系統在醫療信息化中的應用優化與醫院管理報告
- 2025年基層醫療衛生機構信息化建設標準與規范報告001
- 2025年醫藥企業研發外包(CRO)模式質量管理體系優化報告
- 2025年醫藥企業研發外包(CRO)模式企業社會責任履行報告
- 購房違約免責協議書
- 清華大學語文試題及答案
- 陸游旅游攻略
- 2022愛德華EST3系統SDU軟件激活設備
- 2025年上半年山東濟寧市任城區事業單位招聘工作人員(衛生類)161人易考易錯模擬試題(共500題)試卷后附參考答案
- 股骨頭壞死中醫護理常規
- 血小板減少課件
- 2024《突發事件應對法》及其應用案例知識培訓
- 233KWh 定制戶外一體柜儲能系統項目技術方案
- 12J12無障礙設施圖集
- 小學生講誠信班會課件
評論
0/150
提交評論