




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、前 言隨著計算機技術的發展,可視編程技術占有了越來越重要的作用。Visual C+6.0 是一種功能強大行之有效的可視化編程工具。因此此軟件是在Visual C+6.0環境下編寫的。對于我們,隨著學習的深入,已經大體掌握了Visual C+6.0環境下的程序開發。為了將我們的編程能力提升到一個更高的水平,深化面向對象的編程思維和解決問題的能力,值此課程設計周期間,進行基于Visual C+6.0環境的軟件開發,先以字符統計軟件作為開始,對Visual C+6.0環境和面向對象程序設計進行回憶和熟悉,使得在此基礎上的下一個員工培訓系統軟件的開發進行的更加順利。本文檔詳細敘述了基于Visual C
2、+6.0環境下的車票管理系統的設計過程以及程序源代碼。本文檔從概要設計,詳細設計,參考源程序代碼以及顯示程序運行的截屏等方面詳盡的介紹了軟件開發過程。此次車票管理系統的開發目的是使我們用面向對象的方式來思考和解決問題的能力,并且可以掌握字符數組的使用、字符指針的使用、數據庫的設計和文件使用以及C語言語法。本文檔的安排如下:第一章 主要介紹了對面向對象C語言以及Visual C+6.0編程環境。第二章 主要的介紹說明了車票管理系統的編程思想和詳細設計。第三章 主要對車票管理系統進行調試,運行程序并截圖,顯示運行界面和結果。第四章 主要介紹了軟件開發過程中遇到的一些問題,對該軟件進行的一個總結。程
3、序在設計的過程中遇到的問題已及時更正,但由于編者的能力和水平有限,車票管理系統和文檔中不免會出現一些不期待的錯誤,望文檔讀者能夠理解和體諒,并歡迎提醒和糾正,在此表示感謝以及敬意。1課程設計概述1.車票管理系統功能概述(1)錄入班次信息(信息用文件保存),可不定時地增加班次數據(2)瀏覽班次信息,可顯示出所有班次當前狀總(如果當前系統時間超過了某班次的發車時間,則顯示“此班已發出”的提示信息)。(3)查詢路線(起點、終點):可按班次號查詢 ,可按終點站查詢(4)增加及修改班次和刪除班次信息(5)售票和退票功能 當查詢出已定票人數小于額定載量且當前系統時間小于發車時間時才能售票,自動更新已售票人
4、數退票時,輸入退票的班次,當本班車未發出時才能退票,自動更新已售票人數1.2Visual C+6.0概述Visual C+是微軟公司的重要產品之一, 是一種功能強大行之有效的可視化編程工具。它提供了MFC類庫,使用戶可以方便的開發自己想實現的功能。Visual C+6.0的主要特點:(1)自動化和宏功能。(2)可以靈活地定制工具欄和菜單。(3)可以直接運行和調試程序,還可以使用宏語言來自動操作調試器。(4)支持Internet連接。(5)一個新的便捷的項目系統可以允許一個工作區內包含多個不同的項目類型。(6)在工作區內可以包含多個并列的工程文件。(7)可以在對話框中使用WizardBar將程序
5、同可視化元素聯系起來。(8)Find in File命令支持兩個獨立的輸出窗格,可以保存上一次搜索的結果。這些新特性可以更好地利用Visual C+開發工具進行Windows應用程序開發。2車票管理系統總體設計2.1車票管理系統總體設計思想車票管理系統的功能為1. 錄入班次2. 顯示所有班次3. 查詢班次4. 增加班次 5. 售票6. 退票7. 修改班次8. 刪除班次9. 退出9. 車票管理系統軟件的功能模塊有:(1)提供菜單界面,方便用戶對程序個功能進行選擇,選擇要實現的功能按enter鍵進入該功能。(2)接受用戶輸入的功能項,按enter鍵結束輸入并將進入該系統,其需要的結果顯示出來,方便
6、用戶查看。(3)完成每次功能,可保存用戶的修改的信息,及時更新文件信息。下次查詢時內容為最新信息。實時的信息更新對比等。一個名TICKET的結構體進行定義,包括num10 hour3; min3 from10; to10; hours max; now;等結構體成員。然后對調用函數進行定義。int system_time()系統時間,void NewMessage() 新紀錄錄入函數,void ShowTable1() void ShowTable2(int i) 線框調用1和2不用沒次輸,void Display()顯示所有函數,void add()增加記錄,void save() 保存函數
7、,void save()保存函數,void load() 按班次查詢函數,void search() 查詢函數,void change()修改函數,void quit()退出函數,void Ticketorder() 售票函數,void Ticketdelete()刪除函數,int menu_select()菜單函數, int whether(int)判斷時間是否超出函數,void find(char s1,char s2) 查詢函數/s1為班次/s2為終點站,void deletemessage()刪除函數,int findnum(char s1)班次查詢函數,void get(int,in
8、t)修改及增加班次,char *menu菜單函數。該系統將這些信息均放在文件d:車票管理系統0中。最后定義main()函數,利用函數調用,實現程序的各種功能。將其放在系統文件d:車票管理系統0中。程序分為多個小模塊,通過調用實現各種功能,增強了程序的可建設性。程序把每種功能分開實現,更簡單,實用程序更易理解。2.2總體設計流程圖9調用退出8調用刪除班次7調用修改班次6調用退票5調用售票4調用增加班次車票管理系統結束 3調用查詢班次1調用錄入班次2調用顯示所有班次完成功能后返回主菜單 調用主菜單選項 輸入選擇后分別 圖212 總體設計流程3車票管理系統軟件詳細設計一個名TICKET的結構體進行定
9、義,包括num10 hour3; min3 from10; to10; hours max; now;等結構體成員。然后對調用函數進行定義。int system_time()系統時間,void NewMessage() 新紀錄錄入函數,void ShowTable1() void ShowTable2(int i) 線框調用1和2不用沒次輸,void Display()顯示所有函數,void add()增加記錄,void save() 保存函數,void save()保存函數,void load() 按班次查詢函數,void search() 查詢函數,void change()修改函數,vo
10、id quit()退出函數,void Ticketorder() 售票函數,void Ticketdelete()刪除函數,int menu_select()菜單函數, int whether(int)判斷時間是否超出函數,void find(char s1,char s2) 查詢函數/s1為班次/s2為終點站,void deletemessage()刪除函數,int findnum(char s1)班次查詢函數,void get(int,int)修改及增加班次,char *menu菜單函數。該系統將這些信息均放在文件d:車票管理系統0中。最后定義main()函數,利用函數調用,實現程序的各種
11、功能。將其放在系統文件d:車票管理系統0中。4程序測試、4.0菜單界面圖301 菜單界面如上圖所示,該程序為用戶提供菜單界面,用戶可以對程序的各種功能進行選擇,方便用戶使用。選擇1-9并按enter鍵進行操作。如選擇出錯,系統將提出警告,并提醒用戶重新進行選擇。4.1錄入班次界面 圖31- 1 第一次輸入時的界面圖31- 2 第二次輸入時的界面 如上圖所示,該功能實現錄入班次信息。選擇1按enter鍵進入該功能,程序提醒用戶輸入車次.發車時間.起始站.終點站.行車時間.額定載量.已售票數,輸入完畢后按enter鍵將完成錄入班次結果,同時程序將再次提醒用戶進行新的選擇。而第二次輸入時提醒已經輸過
12、,不能在加。4.2查詢所有班次界面圖32 字符串重新統計界面如上圖所示,該功能實現顯示所有班次。選擇2按enter鍵進入該功能,程序提直接顯示出信息,按enter鍵,程序進入菜單項,程序將再次提醒用戶進行新的選擇。4.3 查詢班次界面圖 33-1 查詢班次界面 圖33- 2 選擇查詢方式的界面如上圖所示,該功能將實現程序運行班次的查詢。選擇3并按enter鍵將實現該功能。分班次和終點站兩種方式查詢。4.4 增加班次界面圖341增加功能界面 圖342增加前界面圖343增加后界面如上圖所示,該功能將增加班次信息,幫助用戶更新班次信息。選擇4并按enter鍵將實現該功能,再按提示輸入就行。按任意鍵返
13、回主菜單。4.5 售票界面圖351 選擇售票功能界面 圖352 選擇后的界面 圖353 訂票時的界面如上圖所示,該功能將幫助人們選擇買票。選擇5按enter鍵實現該功能,按任意鍵關閉程序。買票程序可提示買票成功否,且自動判斷是否可賣。4.6 退票界面 圖36 退票時的界面 如上圖所示,該功能將幫助人們選擇退票。選擇6按enter鍵實現該功能,按任意鍵關閉程序。退票程序可提示退票成功否,且自動判斷是否可退。 4.7 修改班次界面 圖37 修改班次時的界面如上圖所示,該功能將幫助人們修改班次信息。選擇7按enter鍵實現該功能,按任意鍵關閉程序。按提示操作修改班次。4.8 刪除班次界面 圖38 刪
14、除班次時的界面 如上圖所示,該功能可刪除班次信息。選擇8按enter鍵實現該功能,按任意鍵關閉程序。按提示操作刪除班次。 4.9 退出界面 圖39 退出時的界面如上圖所示,該功能可退出系統。選擇9按enter鍵實現該功能。課程設計總結為了提高我們的實踐能力和合作能力,讓我們學以致用,能靈活運用所學的知識進行再創造,學校特安排我們進行為期一周的C語言課程設計實習,并安排了專門的指導老師幫助輔導,讓我們在規范化、嚴謹化、實用化上面有了很大進展。為今后的工作適應環境。在此次車票管理系統開發過程中,有很多東西值得我們思考并總結。開發過程大體可分為以下幾個步驟:(1)思考總體設計方案:總體結構和模塊外部
15、設計,功能分配。思考要實現整個程序大體需要的幾個模塊和其中用到的 C語言基本操作符、語句格式等。(2)畫出總體設計方案流程圖:用流程圖的形式展現你的基本編程思想。(3)流程圖具體化:即將流程圖中的幾大模塊的具體實現思考清楚,可以用流程圖的形式展現并想好實現的關鍵代碼框架。(4)編輯程序代碼:這是一個至關重要復雜而且需要反復修改的環節,在此環節中你將發現總體設計和模塊思想會存在很多問題,需不斷改進如何實現各函數功能,達到預期效果也將是一項繁復的工作。(5)代碼的調試:在Visual C+6.0環境下輸入代碼并進行調試和正確運行。在調試過程中會遇到很多需要精化的地方,需要十足的耐心與細心,不斷改進
16、完善程序。(6)最后修飾:程序可以正確運行之后,再不影響程序功能的情況下,運用各種輔助性符號,使界面更加美觀漂亮,操作更人性化增強程序的新意與可行性。通過這次課程設計,使我們更加熟悉的掌握了C語言的運用。幫助我們熟悉了更多C語言的功能,提高了我們的動手能力,學到了許多解決實際問題的寶貴經驗同時也挖掘出了我們潛在的能力,使我們對自己更有自信,對編程也更有興趣。我相信,只要努力、勤奮、堅持不懈,就沒有什么做不到的事,不能還沒開始就退縮,要勇于拼搏,敢于創新。致謝最后,在這里鄭重的感謝張老師的幫助,讓我得到了許多的收獲。同時感謝學校提供給我們這次寶貴的實踐機會,讓我們可以動手動腦,大大提高了個人的能
17、力和素質。非常的感謝!參考文獻一:譚浩強 C程序設計(第三版) 北京 清華大學出版社 2005.7二:耿國華 高級程序設計技術(C語言版)西安電子科技大學出版社 2009三:譚浩強 C程序設計教程 北京 高等教育出版社 1992四:C編寫組編 常用C語言用法快速查詢手冊 北京 龍門書局 1995附錄源程序#include /宏定義函數#include /串操作及內存操作函數#include /調用系統函數#include /時間庫函數 #include /輸入輸出函數#define N 1000 /宏定義多條記錄typedef struct TICKET /定義新結構體TICKETchar n
18、um10; /車次編號char hour3; /時間,小時char min3; /分鐘char from10; /起始站char to10; /終點站float hours; /車程實際時間int max; /最大車載容量int now; /已售票數CLASS;int class_num=0; /初始班次總數為0 CLASS recordsN; / 多條記錄int system_time(); /系統時間void NewMessage(); /新紀錄*錄入函數*void ShowTable1(); /線框調用1,不用沒次輸 void ShowTable2(int i); /線框調用2,不用沒次
19、輸 void Display(); /顯示所有函數void add(); /增加記錄void save(); / 保存函數void load(); / 按班次查詢函數void search(); /查詢函數void change(); /修改函數* void quit(); / /退出函數*void Ticketorder(); / /*售票函數* void Ticketdelete(); /刪除函數*int menu_select(); /菜單函數*int whether(int); /判斷時間是否超出函數*void find(char s1,char s2); /查詢函數/s1為班次/s2
20、為終點站void deletemessage(); /刪除函數int findnum(char s1); /班次查詢函數void get(int,int); /修改及增加班次*char *menu=*歡迎使用車票查詢系統*,n*MENU功能菜單*,n 1. 錄入班次 ,n 2. 顯示所有班次 ,n 3. 查詢班次 ,n 4. 增加班次 ,n 5. 售票 ,n 6. 退票 ,n 7. 修改班次 ,n 8. 刪除班次 ,n 9. 退出 ; /*主函數*/void main()system(cls); /刷屏while(1) /菜單函數循環switch(menu_select() /菜單函數*cas
21、e 1: NewMessage();break; /新紀錄*錄入函數*case 2: Display();break; / /顯示case 3: search();break; /查找函數*case 4: add();break; / /增加記錄case 5: Ticketorder();break; /*售票函數*case 6: Ticketdelete();break; /刪除函數*case 7: change();break; /修改函數*case 8: deletemessage();break; /選擇調用刪除函數case 9: quit();break; /退出函數*/*菜單函數*
22、/int menu_select() /菜單函數*char s5; /定義要輸入的數字功能int c,i; system(cls); /刷屏 system(color 09);/改變顏色 for(i=0;i11;i+)printf(%s,menui); /輸出菜單各項) i=0; while(c9) /判斷是否是1到9的命令printf(n); /輸出換行 printf(*); printf(n請選擇(1-9):);scanf(%s,s);c=atoi(s); /atoi將字符串轉換成一個整數值 /輸出菜單面return c; /返回請求 /*錄入函數*/void NewMessage() /
23、*錄入函數* int i=0,j=5,h; /char s5;FILE *fp; /定義文件型指針變量system(cls); /刷屏if(fp=fopen(d:車票管理系統0.dat,rb)!=NULL) /fopen打開文件 printf(車票信息已經存在請選擇增加功能!n);printf(任意輸入則返回菜單n);scanf(%s,s);i=1; /通過是1if(i=0) system(cls); /刷屏printf(請輸入要錄入班次總數:n);scanf(%d,&class_num); /指向班次指針system(cls); /刷屏for(i=0;iclass_num;i+) syste
24、m(cls); /刷屏printf(請輸入第%d個班次信息:n,i+1);h=-1;for(;h!=i;) /循環輸出printf(請輸入班次:n);scanf(%s,recordsi.num);for(h=0;hi;h+)if(strcmp(recordsh.num,recordsi.num)=0) /判斷字符串比較是否相等, 待比較的字符串 printf(輸入錯誤!該班次已存在!n);break; /返回get(i,j); /修改及增加班次*j=5;save(); /調用保存函數/*顯示所有函數*/void Display() /顯示所有函數int i,j;system(cls); /刷屏
25、load(); / 調用按班次查詢函數ShowTable1(); /線框調用1,不用沒次輸 for(i=0,j=0;iclass_num;i+,j+=2) /按班次順序輸出 printf(n|-|-|-|-|-|-|-|n);if(whether(i) /判斷時間是否超出函數*printf(|%10s|%5s:%-4s|%10s|%10s|%8.1f|%8d|%8d|,recordsi.num,recordsi.hour,recordsi.min,recordsi.from,recordsi.to,recordsi.hours,recordsi.max,recordsi.now);else p
26、rintf(|%10s| 已發車 |%10s|%10s|%8.1f|%8d|%8d|,recordsi.num,recordsi.from,recordsi.to,recordsi.hours,recordsi.max,recordsi.now);ShowTable2(j); /線框調用2printf(n按任意鍵繼續.n);getch(); /從控制臺讀取一個字符,但不顯示在屏幕上/*打印表頭*/void ShowTable1() /線框調用1,不用沒次輸int i=2;system(cls); /刷屏printf(*MESSAGE車程信息*n);printf(n|-|-|-|-|-|-|-|
27、n); printf(n| 班次 | 發車時間 | 起點站 | 終點站 |行車時間|額定載量| 已售票 |n);/*打印表尾*/void ShowTable2(int i) /線框調用2。不用沒次輸。printf(n|-|-|-|-|-|-|-|n);/*查找函數11*/void search() /查詢調用int i;char s110=0,s210=0;system(cls); /刷屏printf(1. 按班次查詢n);printf(2. 按終點站查詢n);printf(3. 退出n);printf(請選擇(1-3):n);scanf(%d,&i);load(); / 調用按班次查詢函數s
28、witch(i) /多分枝選擇語句 case 1: printf(請輸入要查詢的班次:n); /s1為班次scanf(%s,s1);find(s1,s2); /調用查找函數222 2 break;case 2:printf(請輸入要查詢終點站:n); /s2為終點站scanf(%s,s2);find(s1,s2); /調用查找函數222 2 break; case 3: break;default : printf(輸入錯誤!n);break;printf(按任意鍵繼續.n);getch(); /從控制臺讀取一個字符,但不顯示在屏幕上/*查詢函數22*/void find(char s1,ch
29、ar s2)int i,h=0,m;ShowTable1(); /調用線框1if(s20=0)m=1; /1為無條件執行else m=0;for(i=0;iclass_num;i+)if(strcmp(s1,recordsi.num)=0|strcmp(s2,recordsi.to)=0) /判斷字符串比較是否相等, 待比較的字符串 printf(n|-|-|-|-|-|-|-|n);printf(|%10s|%5s:%-4s|%10s|%10s|%8.1f|%8d|%8d|,recordsi.num,recordsi.hour,recordsi.min,recordsi.from,recor
30、dsi.to,recordsi.hours,recordsi.max,recordsi.now);h+=2;if(m=1)break;ShowTable2(h); /調用線框2if(h=0)printf(要查找的班次不存在!n);/*增加函數*/void add() / /增加記錄int i,j=5;load(); / 調用按班次查詢函數system(cls); /刷屏printf(1. 增加班次n);printf(2. 返回n);printf(請選擇(1-2)n);scanf(%d,&i);if(i=1)system(cls); /刷屏printf(1. 請輸入要增加的班次:n);scanf
31、(%s,recordsclass_num.num);for(i=0;iclass_num;i+)if(strcmp(recordsclass_num.num,recordsi.num)=0)/判斷字符串比較是否相等, 待比較的字符串 判斷車次沒重復 printf(輸入錯誤!n);getch(); /從控制臺讀取一個字符,但不顯示在屏幕上break;if(i=class_num) get(i,j); /修改及增加班次*class_num+; /使班次數加1save(); /調用保存函數/*售票函數*/void Ticketorder() /*售票函數*int i;char num10;syste
32、m(cls); /刷屏printf(1. 售票n);printf(2. 返回n);printf(請選擇(1-2):n);scanf(%d,&i);if(i=1)load(); / 調用按班次查詢函數search(); /查找函數*printf(請輸入要訂票的班次(若無請輸入0):n);scanf(%s,num);for(i=0;irecordsi.now&whether(i)=1) /判斷時間是否超出函數*并且*沒超出最大客量recordsi.now+; /使已售的暑假1printf(通向%s班次為%s的票訂票成功!n,recordsi.to,recordsi.num);save(); /調用
33、保存函數getch(); /從控制臺讀取一個字符,但不顯示在屏幕上break;elseprintf(該班次已滿或已發出!n);getch(); /從控制臺讀取一個字符,但不顯示在屏幕上/*退票刪除函數*/void Ticketdelete() /刪除函數*int i;char num10;system(cls); /刷屏printf(1. 退票n);printf(2. 返回n);printf(請選擇(1-2)n:);scanf(%d,&i);if(i=1)system(cls); /刷屏load(); / 調用按班次查詢函數printf(請輸入要退票的班次:n);scanf(%s,num);i
34、=findnum(num); /調用班次查詢函數if(strcmp(num,recordsi.num)=0) /判斷字符串比較是否相等 待比較的字符串 if(whether(i) /判斷時間是否超出函數*printf(確定(Y/N)?);scanf(%s,num);if(num0=y|num0=Y) recordsi.now-; /使已售票加1printf(退票成功!n);save(); /調用保存函數getch(); /從控制臺讀取一個字符,但不顯示在屏幕上elseprintf(該班車已發出,無法退票!n);getch(); /從控制臺讀取一個字符,但不顯示在屏幕上if(i=class_nu
35、m)printf(輸入錯誤!n);getch(); /從控制臺讀取一個字符,但不顯示在屏幕上/*修改函數*/void change() /修改函數*char num10,s10;int h=0,j=13,i;load(); / 調用按班次查詢函數system(cls); /刷屏printf(請輸入要修改的班次:n);scanf(%s,num);i=findnum(num); /調用班次查詢函數 if(i=class_num)printf(輸入錯誤,無此班次!n);getch(); /從控制臺讀取一個字符,但不顯示在屏幕上elseprintf(確定修改(Y/N)?n);scanf(%s,s);i
36、f(s0=y|s0=Y)get(i,j); /修改及增加班次*save(); /調用保存函數/*刪除函數*/void deletemessage() /刪除班次信息int i,h=0;char num10;system(cls); /刷屏printf(1. 刪除班次n);printf(2. 返回n);printf(請選擇(1-2):n);scanf(%d,&i);if(i=1)system(cls); /刷屏printf(請輸入要刪除的班次:n);scanf(%s,num);i=findnum(num); /調用班次查詢函數if(i=class_num)printf(輸入錯誤,無此班次!n);getch(); /從控制臺讀取一個字符,但不顯示在屏幕上elseprintf(確定?(y/n)n);scanf(%s,num);if(num0=y|num0=Y)for(;iclass_num-1;i+) recordsi=recordsi+1;class_num-; /班次總數減1save(); /調用保存函數printf(刪除成功!n);getch();/*按班次查詢函數*/int findnum(char s1) /查找班次 int i,h=0;ShowTable1();
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 計算機二級MySQL考試特色內容分享及試題及答案
- 成功的22025年計算機二級考試經驗與試題及答案
- 直擊2025年文學概論的考題及答案
- 探明2025年Web行業價值鏈試題及答案
- 暴露Msoffice考試考點的試題及答案
- 法學史的重要節點試題及答案
- 算法復雜度分析Python試題及答案
- 財務成本管理考試技巧分享試題及答案
- 深度解析網絡管理員考試試題及答案
- 2025年應考者指南試題及答案
- 國家開放大學《數據結構(本)》形考作業1-4參考答案
- 學生英語讀寫情況調查分析報告(二)
- 最全可自由編輯的中國各省市地圖
- 河北工業大學本科生體育課程考核管理辦法-河北工業大學本科生院
- 林木銷售合同
- 病房發生火災應急預案
- 熱學李椿__電子
- 煤倉安全管理規范標準
- 適配器安裝、使用、調試說明
- 畢業設計(論文)電子點火系統故障診斷與維修
- 施工現場事故應急預案處理程序
評論
0/150
提交評論