歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁 裝配圖網(wǎng) > 資源分類 > DOC文檔下載  

C語言集中上機(jī)實驗報告 - 車票管理系統(tǒng)

  • 資源ID:135678689       資源大?。?span id="xkaaprx" class="font-tahoma">86.50KB        全文頁數(shù):20頁
  • 資源格式: DOC        下載積分:10積分
快捷下載 游客一鍵下載
會員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要10積分
郵箱/手機(jī):
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機(jī)號,方便查詢和重復(fù)下載(系統(tǒng)自動生成)
支付方式: 支付寶    微信支付   
驗證碼:   換一換

 
賬號:
密碼:
驗證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會被瀏覽器默認(rèn)打開,此種情況可以點擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預(yù)覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒有明確說明有答案則都視為沒有答案,請知曉。

C語言集中上機(jī)實驗報告 - 車票管理系統(tǒng)

C語言集中上機(jī)報告車票管理系統(tǒng) 院 系: 計算機(jī)學(xué)院 班 級: xxx 姓 名: xxx 合 作 者: 無 指導(dǎo)教師: xxx 2009年 6月 11日目 錄一概述3二總體方案設(shè)計3三詳細(xì)設(shè)計5四程序的調(diào)試與運(yùn)行結(jié)果說明8五課程設(shè)計總結(jié)10六后記10七附錄11參考文獻(xiàn)20一 概述1. 課程設(shè)計的目的熟練掌握C語言的應(yīng)用及特點; 掌握函數(shù)聲明、定義和使用的方法;熟練掌握C語言中的對文件進(jìn)行操作的基本方法;熟練掌握結(jié)構(gòu)體的使用方法;掌握鏈表的基本操作。2. 課程設(shè)計的要求1.要求利用C語言面向過程的編程思想完成系統(tǒng)設(shè)計;2.突出C語言的函數(shù)特征,以多個函數(shù)實現(xiàn)每一個子功能;3.畫出功能模塊圖;4.進(jìn)行簡單的界面設(shè)計,能夠?qū)崿F(xiàn)友好交互;5.具有清晰的程序流程圖和數(shù)據(jù)結(jié)構(gòu)的詳細(xì)定義;6.源碼格式規(guī)范,要有適當(dāng)?shù)淖⑨?,使程序容易閱讀。3. 課程設(shè)計的主要設(shè)計思想這次設(shè)計的車票管理系統(tǒng),實現(xiàn)了對車票的實時管理,功能包括錄入、增加班次信息(信息用文件保存),瀏覽班次信息,查詢路線以及售票和退票功能。主要使用了鏈表實現(xiàn)了數(shù)據(jù)的保存和修改,同時使用文件相關(guān)函數(shù)對文件進(jìn)行同步。二 總體方案設(shè)計這個程序比較簡單,主要分為菜單,瀏覽/查詢,售票/退票,和增加數(shù)據(jù)四個部分。采用了鏈表作為存儲的方式,并實現(xiàn)了結(jié)構(gòu)體與文件的同步修改,已經(jīng)具備了題目要求的所有功能。這個程序由我個人完成。在編程過程中遇到的關(guān)鍵問題有系統(tǒng)時間的獲取與顯示,從文件中讀取鏈表,處理每天班次的人數(shù)刷新問題,以及如何提高代碼的復(fù)用率等。程序整體框圖如下:啟動程序文件是否存在5增加新班次記錄結(jié)構(gòu)體鏈表文件是否為空否是是修改3查找班次4退出系統(tǒng)數(shù)據(jù)文件banci.dat修改菜單1-5否關(guān)閉文件將文件讀入結(jié)構(gòu)體鏈表更新班次日期等讀取寫入修改1顯示班次讀取調(diào)用2售票 / 退票調(diào)用判斷是否能夠售票/退票(根據(jù)時間,已訂票人數(shù))是修改三 詳細(xì)設(shè)計程序結(jié)構(gòu)以及各函數(shù)的具體功能main.c:void main();程序入口,對文件進(jìn)行打開和初始化后進(jìn)入菜單void menu(struct banci *head,struct banci *nw,FILE *data,unsigned int serial);顯示菜單,從主函數(shù)中得到各種信息,通過switch語句調(diào)用其他功能operate.c:void update(struct banci *ut,FILE *data);更新結(jié)構(gòu)體中的各個數(shù)據(jù),主要對日期進(jìn)行處理,當(dāng)班次更新后重新寫入日期并將已訂票人數(shù)清零void displaybanci(struct banci *head, unsigned short mode);作為整個程序中唯一的數(shù)據(jù)顯示函數(shù),顯示班次信息,有3個顯示模式struct banci * addbanci(struct banci * tail, FILE *data,unsigned serial);增加一條新的班次信息到鏈表末尾,并寫入文件void searchbanci(struct banci * head);查找班次信息,可按班次號查詢或按終點站查詢void piao(struct banci *head,FILE *data);實現(xiàn)售票和退票功能,并自動更新文件operate.h聲明結(jié)構(gòu)體和各個自定義函數(shù)部分函數(shù)的算法分析1. 對文件進(jìn)行打開和初始化。這個功能在主函數(shù)main()中完成。有關(guān)代碼如下,具體功能解釋在程序注釋中。FILE *data;struct banci *head,*nw;head=(struct banci*)malloc(sizeof(struct banci);if(data=fopen("banci.dat","r+")=NULL)data=fopen("banci.dat","w");printf("nn建立新文件,請至少輸入一條班次記錄n");nw=addbanci(head,data,1);head=nw;else if(fread(head,sizeof(struct banci),1,data)=0)/判斷文件是否為空。fread()返回的是讀取成功的數(shù)據(jù)塊數(shù)目,返回0說明讀取失敗。若文件不為空則實現(xiàn)讀取文件printf("nn數(shù)據(jù)文件是空的,請至少輸入一條班次記錄n");nw=addbanci(head,data,1);head=nw;elsenw=head;while(1) /把整個鏈表從文件中讀出來,同時獲取目前的班次總數(shù)serial+;/if(nw->next=NULL) break; /這么判斷結(jié)尾時不可行的,因為nw->next已經(jīng)被賦值不可能為空了nw->next=malloc(sizeof(struct banci);if(fread(nw->next,sizeof(struct banci),1,data)=0)/逐條讀取。若遇到結(jié)尾,結(jié)束讀取nw->next=NULL;break;nw=nw->next;2. update() 函數(shù)。使用這個函數(shù)主要是考慮到系統(tǒng)日期變化后對班次的售票信息進(jìn)行更新。在程序中每進(jìn)入一次菜單就要執(zhí)行一次update()函數(shù)。當(dāng)結(jié)構(gòu)體中存儲的年月日和系統(tǒng)目前的時間都相等是則跳過并不清零已訂票人數(shù),否則對結(jié)構(gòu)體進(jìn)行更新并清零已訂票人數(shù)。主要代碼如下:if(nowtime.wYear = ut->fache.wYear &&nowtime.wMonth = ut->fache.wMonth &&nowtime.wDay = ut->fache.wDay )fseek(data,sizeof(struct banci),1); /不需要更新,則跳過這個結(jié)構(gòu)體,不寫文件elseut->fache.wYear=nowtime.wYear;ut->fache.wMonth=nowtime.wMonth;ut->fache.wDay=nowtime.wDay;ut->fache.wDayOfWeek=nowtime.wDayOfWeek;ut->yidingpiaorenshu=0;fwrite(ut,sizeof(struct banci),1,data);3. displaybanci() 函數(shù)。通過顯示模式這一變量,實現(xiàn)了代碼的重復(fù)利用。當(dāng)顯示整個鏈表時,循環(huán)顯示所有信息;當(dāng)在查找中僅需要顯示單條記錄時,不再繼續(xù)顯示之后的信息。這是有關(guān)顯示模式的主要代碼:while(head!=NULL) if (mode=1 | mode=3) /顯示全部記錄時,繼續(xù)顯示 head=head->next; if (mode=2) /顯示單條記錄時,不再顯示 break;if(mode=1) getch(); /模式2和3不需要暫停,故有這個判斷4. 關(guān)于班次的序列號。這個程序中班次是固定的,不需要修改或刪除,故班次的序號又系統(tǒng)自動分配,不需要輸入。在程序開始初始化文件時,就獲取了目前的班次總數(shù),若再增加班次,則序列號自動加一。具體實現(xiàn):(菜單menu()中)case '5': serial+;nw=addbanci(nw,data,serial); break;(addbanci()中)newnode->serial=serial;四 程序的調(diào)試與運(yùn)行結(jié)果說明1. 啟動程序,提示輸入第一條記錄建立文件建立新文件,請至少輸入一條班次記錄這是第 1 個班次輸入發(fā)車時間(小時:分鐘)2. 若文件為空,也提示輸入第一條記錄數(shù)據(jù)文件是空的,請至少輸入一條班次記錄這是第 1 個班次輸入發(fā)車時間(小時:分鐘)3. 輸入記錄后進(jìn)入菜單,使用了簡單的文本菜單界面C題目二十三: 車票管理系統(tǒng)今天是 2009 年 6 月 12 日,目前讀取的時間為 8 時 37 分 1. 瀏覽班次信息 2. 售票 / 退票 3. 查詢班次 4. 退出系統(tǒng) 5. 增加班次4. 瀏覽班次信息瀏覽班次班次 發(fā)車時間 起點站 終點站 行車時間 額定載量 已定票人數(shù) 是否已發(fā)出1 8 : 00 aaa bbb 0.5 40 0 已發(fā)出2 23 : 00 bbb aaa 0.5 40 23 12 : 00 rtf bbb 1.5 40 14 17 : 30 bbb rtf 1.5 40 05 19 : 30 ttt rtf 0.3 40 06. 查詢班次信息,按終點站查詢查詢班次 1. 按班次號查詢 2. 按終點站查詢輸入要查詢的終點站: bbb瀏覽班次班次 發(fā)車時間 起點站 終點站 行車時間 額定載量 已定票人數(shù) 是否已發(fā)出1 8 : 00 aaa bbb 0.5 40 0 已發(fā)出瀏覽班次班次 發(fā)車時間 起點站 終點站 行車時間 額定載量 已定票人數(shù) 是否已發(fā)出3 12 : 00 rtf bbb 1.5 40 17. 售票、退票,以售票為例瀏覽班次班次 發(fā)車時間 起點站 終點站 行車時間 額定載量 已定票人數(shù) 是否已發(fā)出1 8 : 00 aaa bbb 0.5 40 0 已發(fā)出2 23 : 00 bbb aaa 0.5 40 23 12 : 00 rtf bbb 1.5 40 24 17 : 30 bbb rtf 1.5 40 05 19 : 30 ttt rtf 0.3 40 0售票 / 退票 1. 售票 2. 退票輸入要售票的班次號:3第 3 班次完成一次售票8. 增加班次信息這是第 6 個班次輸入發(fā)車時間(小時:分鐘)10:15輸入起點站ytr輸入終點站aaa輸入行車時間(分鐘)60輸入額定載量32五 課程設(shè)計總結(jié)經(jīng)過測試,這個系統(tǒng)已經(jīng)達(dá)到了題目中的全部要求。從功能上講,這個程序還有不完善的地方,如不能修改或刪除班次信息等。另外,由于追求代碼復(fù)用率的原因,在查詢班次時會顯示出多余的信息,有待進(jìn)一步改進(jìn)。這個程序有一個特點就是界面簡明,但從另一方面講也可以說是界面簡陋,如果可能的話,下一個版本將采用圖形界面。在編程過程中也遇到了一些困難,如系統(tǒng)時間的獲取與保存,從文件中讀出整個鏈表等,這些都通過查詢資料和詢問同學(xué)得到了解決。另外在程序測試過程中發(fā)現(xiàn)了發(fā)車后訂票人數(shù)不能歸零的問題,后來通過添加update()函數(shù)得到了解決。六 后記經(jīng)過這次集中上機(jī)實習(xí),我充分認(rèn)識到了C語言的用途是非常廣的,功能也非常強(qiáng)大,是學(xué)計算機(jī)不可缺少的語言。更重要的是,在這次編程中熟悉了編寫一個比較復(fù)雜程序的流程,以及發(fā)現(xiàn)問題、解決問題的能力,為下一步計算機(jī)語言的學(xué)習(xí)做了準(zhǔn)備。之前感覺遙不可及的功能,現(xiàn)在可以實現(xiàn)了,應(yīng)當(dāng)感謝老師和同學(xué)的熱心幫助,這是我得以及時完成這個程序的重要因素。七 附錄main.c#include<stdio.h>#include<string.h>#include<windows.h>#include"operate.h"unsigned int serial=0; /班次序列號,由系統(tǒng)自動生成不能修改void menu(struct banci *head,struct banci *nw,FILE *data,unsigned int serial);void main()FILE *data;struct banci *head,*nw;/system("mode con cols=80 lines=25");/定義屏幕寬度head=(struct banci*)malloc(sizeof(struct banci);if(data=fopen("banci.dat","r+")=NULL)data=fopen("banci.dat","w");printf("nn建立新文件,請至少輸入一條班次記錄n");nw=addbanci(head,data,1);head=nw;else if(fread(head,sizeof(struct banci),1,data)=0)/判斷文件是否為空。fread()返回的是讀取成功的數(shù)據(jù)塊數(shù)目,返回0說明讀取失敗。若文件不為空則實現(xiàn)讀取文件printf("nn數(shù)據(jù)文件是空的,請至少輸入一條班次記錄n");nw=addbanci(head,data,1);head=nw;elsenw=head;while(1) /把整個鏈表從文件中讀出來,同時獲取目前的班次總數(shù)serial+;/if(nw->next=NULL) break; /這么判斷結(jié)尾時不可行的,因為nw->next已經(jīng)被賦值不可能為空了nw->next=malloc(sizeof(struct banci);if(fread(nw->next,sizeof(struct banci),1,data)=0)/逐條讀取。若遇到結(jié)尾,結(jié)束讀取nw->next=NULL;break;nw=nw->next;menu(head,nw,data,serial);void menu(struct banci *head,struct banci *nw,FILE *data,unsigned int serial)char kinput;while(1)system("cls");printf("C題目二十三: 車票管理系統(tǒng)");update(head,data);printf("n 1. 瀏覽班次信息n 2. 售票 / 退票n 3. 查詢班次n 4. 退出系統(tǒng)n 5. 增加班次nn");kinput=getch();switch(kinput)case '1': displaybanci(head,1);break;case '2': piao(head,data);break;case '3': searchbanci(head);break;case '4': fclose(data);exit(0);case '5': serial+;nw=addbanci(nw,data,serial); break;default:;oprate.c#include<stdio.h>#include<string.h>#include<windows.h>#include"operate.h"void update(struct banci *ut,FILE *data) /防止第二天定票人數(shù)不歸零的情況發(fā)生SYSTEMTIME nowtime;GetLocalTime(&nowtime);printf("n今天是 %d 年 %d 月 %d 日,目前讀取的時間為 %d 時 %d 分n",nowtime.wYear,nowtime.wMonth,nowtime.wDay,nowtime.wHour,nowtime.wMinute);rewind(data);for(;ut!=NULL;ut=ut->next)if(nowtime.wYear = ut->fache.wYear &&nowtime.wMonth = ut->fache.wMonth &&nowtime.wDay = ut->fache.wDay )fseek(data,sizeof(struct banci),1);/不需要更新,則跳過這個結(jié)構(gòu)體,不寫文件elseut->fache.wYear=nowtime.wYear;ut->fache.wMonth=nowtime.wMonth;ut->fache.wDay=nowtime.wDay;ut->fache.wDayOfWeek=nowtime.wDayOfWeek;ut->yidingpiaorenshu=0;fwrite(ut,sizeof(struct banci),1,data);void displaybanci(struct banci *head, unsigned short mode) /承擔(dān)所有的鏈表顯示,有3個顯示模式SYSTEMTIME nowtime;GetLocalTime(&nowtime);printf("瀏覽班次n");printf("班次 發(fā)車時間 起點站 終點站 行車時間 額定載量 已定票人數(shù) 是否已發(fā)出n");while(head!=NULL)printf("%-4d %2d : %02d %-10s%-10s%-10.1f%-9d%-3d ",head->serial,head->fache.wHour,head->fache.wMinute,head->qidian,head->zhongdian,(float)head->shijian/60,head->edingzailiang,head->yidingpiaorenshu);if( nowtime.wHour>head->fache.wHour| (head->fache.wHour=nowtime.wHour && nowtime.wMinute>head->fache.wMinute)head->shifouyifachu=1;printf(" 已發(fā)出n");head->yidingpiaorenshu=0;elsehead->shifouyifachu=0;printf(" n"); if (mode=1 | mode=3) /顯示全部記錄時,繼續(xù)顯示 head=head->next; if (mode=2) /顯示單條記錄時,不再顯示 break;if(mode=1) getch(); /模式2和3不需要暫停,故有這個判斷struct banci * addbanci(struct banci * tail, FILE *data,unsigned serial)struct banci *newnode;newnode=(struct banci*)malloc(sizeof(struct banci);GetLocalTime(&newnode->fache); /先調(diào)出系統(tǒng)時間printf("n這是第 %d 個班次n",serial);printf("輸入發(fā)車時間(小時:分鐘)n");scanf("%d:%d",&newnode->fache.wHour,&newnode->fache.wMinute);printf("輸入起點站n");scanf("%s",newnode->qidian);printf("輸入終點站n");scanf("%s",newnode->zhongdian);printf("輸入行車時間(分鐘)n");scanf("%d",&newnode->shijian);printf("輸入額定載量n");scanf("%d",&newnode->edingzailiang);newnode->yidingpiaorenshu=0;/這兩個變量由系統(tǒng)自動指定無需輸入newnode->serial=serial;tail->next=newnode;/連接鏈表newnode->next=NULL;fwrite(newnode,sizeof(struct banci),1,data);/更新文件fflush(data);return newnode;void searchbanci(struct banci * head)char sinput;unsigned sserial;char szhongdian8;unsigned short label=0;printf("查詢班次nn 1. 按班次號查詢n 2. 按終點站查詢n");sinput=getch();switch(sinput)case '1': printf("輸入要查詢的班次: ");scanf("%d",&sserial);for(;head!=NULL;head=head->next)if(head->serial=sserial)label=1;displaybanci(head,2);break;case '2': printf("輸入要查詢的終點站: ");scanf("%s",szhongdian);for(;head!=NULL;head=head->next)if(strcmp(szhongdian,head->zhongdian)=0)label=1;displaybanci(head,2);break;default:;if(label=0)printf("n沒有找到或無法操作n");getch();void piao(struct banci *node,FILE *data)char pinput;unsigned int pserial;unsigned short label=0;displaybanci(node,3);printf("售票 / 退票");printf("n 1. 售票n 2. 退票n");pinput=getch();switch(pinput)case '1':printf("輸入要售票的班次號:");scanf("%d",&pserial);for(;node!=NULL;node=node->next)if(node->serial=pserial)if(node->shifouyifachu=0 && node->yidingpiaorenshu<node->edingzailiang)node->yidingpiaorenshu+;fseek(data,(pserial-1)*sizeof(struct banci),0);fwrite(node,sizeof(struct banci),1,data);label=1;printf("n第 %d 班次完成一次售票n",pserial);break;case '2':printf("輸入要退票的班次號:");scanf("%d",&pserial);for(;node!=NULL;node=node->next)if(node->serial=pserial)if(node->shifouyifachu=0 && node->yidingpiaorenshu!=0)node->yidingpiaorenshu-;fseek(data,(pserial-1)*sizeof(struct banci),0);fwrite(node,sizeof(struct banci),1,data);label=1;printf("n第 %d 班次完成一次退票n",pserial);break;default:;if(label=0)printf("n沒有找到,或無法操作n");getch();oprate.hstruct banciunsigned int serial;SYSTEMTIME fache;char qidian10;char zhongdian10;unsigned int shijian;/行車時間用分鐘數(shù)保存unsigned int edingzailiang;unsigned int yidingpiaorenshu;unsigned short shifouyifachu;struct banci *next;void displaybanci(struct banci *head, unsigned short mode);struct banci * addbanci(struct banci * tail, FILE *data,unsigned serial);void searchbanci(struct banci * head);void piao(struct banci *head,FILE *data);void update(struct banci *ut,FILE *data);參考文獻(xiàn)1 譚浩強(qiáng),C程序設(shè)計題解與上機(jī)指導(dǎo)(第二版),北京,清華大學(xué)出版社,2000年9月。2 甘玲 ,解析C程序設(shè)計,北京,清華大學(xué)出版社,2007年3月。

注意事項

本文(C語言集中上機(jī)實驗報告 - 車票管理系統(tǒng))為本站會員(沈***)主動上傳,裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng)(點擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因為網(wǎng)速或其他原因下載失敗請重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!