版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> xx大學(xué)(華東)</b></p><p><b> 上機(jī)實(shí)驗(yàn)報(bào)告</b></p><p> 課程名稱: 軟件技術(shù)基礎(chǔ) </p><p> 上機(jī)題目: 汽車站售票管理系統(tǒng) </p><p> 組長姓名:
2、 </p><p> 成員姓名: </p><p> 綜合成績 </p><p> 201x年 xx 月xx 日</p><p><b> 一、需求分析</b></p><p><b&
3、gt; 1.問題描述</b></p><p> 要求設(shè)計(jì)一個(gè)汽車站的售票系統(tǒng),具有對(duì)班次及車票管理的基本功能,要求設(shè)計(jì)的程序?qū)嵱?,便于操作,主要任?wù)是用計(jì)算機(jī)對(duì)每個(gè)汽車班次的信息進(jìn)行管理,包括用戶驗(yàn)證、班次數(shù)據(jù)維護(hù)、售票管理等模塊,實(shí)現(xiàn)班次信息的錄入、修改、刪除、查詢,車票的售票、退票等一系列功能。界面美觀可以滿足基本的班次管理及售票的操作,且程序穩(wěn)定,沒有錯(cuò)誤。</p><p
4、><b> 2.功能需求</b></p><p><b> ?。?),用戶驗(yàn)證</b></p><p> 首先要求有用戶驗(yàn)證,輸入用戶名及密碼,并且能判斷用戶類型。由此進(jìn)入不同的操作界面。</p><p> ?。?),班次數(shù)據(jù)維護(hù)(只有管理員有權(quán)操作)</p><p> 錄入班次信息:輸
5、入一個(gè)班次信息</p><p> 修改班次信息:根據(jù)班次號(hào)修改某個(gè)班次信息</p><p> 刪除班次信息:根據(jù)班次號(hào)刪除某個(gè)班次信息</p><p> 查詢班次信息:分別根據(jù)班次號(hào)、發(fā)車時(shí)間、到站及其發(fā)車時(shí)間與到站的組合查詢班次信息</p><p> ?。?),售退票管理(售票員操作)</p><p> 售票
6、:首先根據(jù)到站地點(diǎn)查詢相關(guān)班次及剩余票數(shù),若存在并且剩余票數(shù)大于購票數(shù),則售票并計(jì)算出票價(jià),否則,給出提示信息</p><p> 退票:首先按班次號(hào)進(jìn)行查詢,有這個(gè)班次的售票才可以進(jìn)行退票處理,</p><p><b> 3.?dāng)?shù)據(jù)需求</b></p><p> 用戶數(shù)據(jù):包括用戶名char(10)、密碼char(10)、用戶類型int(1
7、)管理員(2)售票員</p><p> 汽車班次數(shù)據(jù):班次int、到站char(10)、發(fā)車時(shí)間char(6)、票價(jià)(int)、座位數(shù)(int)</p><p><b> 4.其它需求</b></p><p> 系統(tǒng)用鍵盤操作,以選擇菜單方式工作界面;</p><p> 只考慮當(dāng)日售退票情況,不提供訂票功能;&l
8、t;/p><p> 售出的車票要有座號(hào),假設(shè)每個(gè)班次的座位數(shù)都不超過50。</p><p><b> 5.進(jìn)度計(jì)劃</b></p><p> ?。?)組隊(duì)劃分任務(wù)階段:(11月1日到11月8日)</p><p> 在這一階段首先確定組員及組長,同時(shí)研究實(shí)驗(yàn)內(nèi)容,進(jìn)行實(shí)驗(yàn)內(nèi)容分析功能需求分析。組長進(jìn)行概要設(shè)計(jì),初步構(gòu)想出
9、軟件框架,細(xì)分各項(xiàng)功能模塊。并且讓組員根據(jù)自己的能力及特長選擇自己的不同的分工;同時(shí)確定編寫規(guī)范與標(biāo)準(zhǔn),主要工作包括個(gè)函數(shù)名的命名的統(tǒng)一,變量名的定義規(guī)范,方便個(gè)組員的函數(shù)聲明,及以后組長的統(tǒng)一調(diào)試,避免因編寫不規(guī)范帶來的麻煩;</p><p> (2)各組員各自的模塊編寫設(shè)計(jì)階段(11月9日——11月16日) </p><p> 主要任務(wù)包括各組員對(duì)自己所選的功能模塊進(jìn)行設(shè)計(jì),編寫代
10、碼,調(diào)試,界面編輯。最終完成自己的功能模塊,提交文檔給組長,組長負(fù)責(zé)下一階段的調(diào)試及統(tǒng)一設(shè)計(jì);</p><p> ?。?)代碼集成,總體界面編輯,整體調(diào)試階段(11月16日到11月18日)</p><p> 主要任務(wù)是組長集成各組員提交的模塊代碼,進(jìn)行調(diào)試,保證各模塊的功能在集成后能正常工作;測(cè)試發(fā)現(xiàn)系統(tǒng)的錯(cuò)誤并調(diào)試改正,保證整個(gè)系統(tǒng)能協(xié)調(diào)流暢的工作;調(diào)試設(shè)計(jì)系統(tǒng)的工作界面,設(shè)計(jì)美觀友好
11、的人機(jī)交互界面。</p><p> ?。?)上機(jī)實(shí)驗(yàn)報(bào)告的最終編寫排版階段(11月18日到21)</p><p> 實(shí)驗(yàn)報(bào)告的編寫一直貫穿于整個(gè)實(shí)驗(yàn)過程,在這一階段的主要任務(wù)是由組長最終編寫好實(shí)驗(yàn)報(bào)告,編寫實(shí)驗(yàn)總結(jié),用戶手冊(cè),最終完成整個(gè)實(shí)驗(yàn)過程。打印提交實(shí)驗(yàn)報(bào)告。</p><p><b> 二、概要設(shè)計(jì)</b></p>&l
12、t;p> 1.軟件結(jié)構(gòu)設(shè)計(jì) 如圖為軟件結(jié)構(gòu)圖,表示了軟件各個(gè)模塊之間的調(diào)用關(guān)系;</p><p> 2.各功能模塊的功能說明</p><p> 1):對(duì)于用戶登錄模塊(log函數(shù)),其主要功能是提供一個(gè)登錄界面,請(qǐng)用戶輸入用戶名及密碼,同時(shí)對(duì)于輸入的用戶名及密碼進(jìn)行判斷,如果用戶名或者密碼錯(cuò)誤就無法登錄進(jìn)系統(tǒng)。對(duì)于用戶名和密碼正確的用戶會(huì)判斷其用戶類型。選擇根據(jù)其用戶類型是管理
13、員還是售票員進(jìn)入不同的操作主菜單;</p><p> 2):管理員模塊(busMenu函數(shù)),其主要功能是提供選擇操作菜單,供登錄進(jìn)來的管理員選擇不同的操作,根據(jù)用戶的選擇分別調(diào)用相應(yīng)功能模塊。一共有5個(gè)功能模塊可供調(diào)用:</p><p> ?、偬砑榆嚧危ˋdd 函數(shù))</p><p> 提供添加車次的功能。如果車次已經(jīng)存在則給出提示,無法繼續(xù)添加車次。如果車次
14、信息不存在則向車次文件中寫入該車次的信息并存儲(chǔ)。</p><p> ?、趧h除車次(Delbus 函數(shù))</p><p> 提供刪除車次信息的功能。先根據(jù)車次號(hào)進(jìn)行查詢,如果查詢到該車次信息則顯示該車次信息,并詢問用戶是否確認(rèn)刪除。如果沒有該車次信息則給出提示,返回操作菜單。</p><p> ③修改車次信息(change 函數(shù))</p><p
15、> 提供修改車次信息的功能。根據(jù)車次號(hào)驚醒查詢,并讓用戶選擇修改項(xiàng),然后打印出修改后的車次信息,并確認(rèn)。最終成功修改車次信息。</p><p> ?、懿樵冘嚧涡畔ⅲ╡nquire 函數(shù))</p><p> 提供查詢車次信息的操作菜單。根據(jù)用戶的不同選擇提供不同的查詢方式。有班次號(hào)查詢,到站地點(diǎn)查詢,按發(fā)車時(shí)間及到站地點(diǎn)組合查詢?nèi)N不同的查詢功能可供用戶選擇。</p>
16、<p> ?、蒿@示所有信息(Prin 函數(shù))</p><p> 打印當(dāng)前所有的車次信息。</p><p><b> 三、詳細(xì)設(shè)計(jì)</b></p><p> 1.所定義的數(shù)據(jù)結(jié)構(gòu)</p><p> 在本系統(tǒng)中用到的數(shù)據(jù)結(jié)構(gòu)有線性數(shù)據(jù)結(jié)構(gòu),包括:</p><p> 汽車班次數(shù)據(jù):
17、班次號(hào)(int)、到站char(10)、發(fā)車時(shí)間char(6)、票價(jià)(int)、座位數(shù)(int)</p><p> struct Bus_type{</p><p><b> int num;</b></p><p> char time[20];</p><p> char place[20];</p&g
18、t;<p> int ticket;</p><p> int price;</p><p> }BUS[50],buss[50];</p><p> 用戶數(shù)據(jù):包括用戶名char(10)、密碼char(10)、用戶類型(int,1:管理員,2:售票員):</p><p> struct USER_type{</
19、p><p> char name[10];</p><p> char cip[10];</p><p><b> int ty;</b></p><p> }User[10];</p><p> 2.主要功能模塊的算法(用N-S圖描述)</p><p><b&
20、gt; 用戶登錄的算法</b></p><p> 管理員操作菜單的算法</p><p> 添加車次信息的算法NS圖</p><p> 按發(fā)車時(shí)間與到站地點(diǎn)組合查詢NS圖</p><p><b> 3.界面的設(shè)計(jì)</b></p><p> 界面的設(shè)計(jì)主要當(dāng)要輸出信息是設(shè)計(jì)其工
21、作界面,其中最重要的一項(xiàng)應(yīng)該是輸出車次信息時(shí)屏幕顯示的信息。下面是幾張輸出信息時(shí)的截圖</p><p> 輸出車次信息時(shí)的界面</p><p><b> 四、編碼實(shí)現(xiàn)</b></p><p> 1.核心功能算法的編碼實(shí)現(xiàn)</p><p> (1) 添加車次信息 代碼:</p><p>
22、 void Add()</p><p><b> {</b></p><p> void busMenu();</p><p> int jud,ai=1;</p><p> int nume,ei;</p><p> FILE *fpadd;</p><p>
23、 printf("\n\t\t\t添加車次信息\n");</p><p> fpe=fopen("BUS.txt","r");</p><p> for (ei=0;ei<bnum;ei++) </p><p><b> { </b></p><p
24、> fscanf(fpe,"%d %s %s %d %d",&BUS[ei].num,&BUS[ei].time,&BUS[ei].place,&BUS[ei].ticket,&BUS[ei].price);</p><p><b> rin(ei);</b></p><p><b>
25、}</b></p><p> fclose(fpe);</p><p> while(ai==1)</p><p><b> { </b></p><p> printf("\n\t\t請(qǐng)輸入車次號(hào): 》");</p><p> scanf(&quo
26、t;%d",&BUS[numi].num);</p><p> int jude=0;</p><p> for (ei=0;ei<bnum;ei++) ////判斷是否存在該班次號(hào)</p><p><b> { </b></p><p> if(BUS[numi].num==bu
27、ss[ei].num)</p><p> { jude++; </p><p> if (jude==1) printf("\n\n\t\t該車次信息已存在!無法添加!!");</p><p> break; ////如果存在則做出標(biāo)記,跳出本次循環(huán)</p><p><b> }</
28、b></p><p><b> }</b></p><p> if(jude==1)</p><p><b> break;</b></p><p> printf("\n\t\t請(qǐng)輸入發(fā)車時(shí)間:》 ");</p><p> scanf(&
29、quot;%s",&BUS[numi].time);</p><p> printf("\n\t\t請(qǐng)輸入到達(dá)地點(diǎn):》 ");</p><p> scanf("%s",&BUS[numi].place);</p><p> printf("\n\t\t請(qǐng)輸入限載人數(shù):》 ")
30、;</p><p> scanf("%d",&BUS[numi].ticket );</p><p> printf("\n\t\t請(qǐng)輸 入 票價(jià):》 ");</p><p> scanf("%d",&BUS[numi].price);</p><p>
31、 fpadd=fopen("BUS.txt","a"); fprintf(fpadd,"%d %s %s %d %d\n",BUS[numi].num,BUS[numi].time,BUS[numi].place,BUS[numi].ticket,BUS[numi].price);//依次輸入車次信息</p><p> fclose(fpadd);&
32、lt;/p><p> numi++;//班次數(shù)加一</p><p> bnum=1+bnum;</p><p> fpc= fopen("CONT.txt","w"); /////每添加一條班次信息 向文件中寫一條信息</p><p> fprintf(fpc,"%d",bn
33、um);</p><p> fclose(fpc);</p><p> printf("\n\t\t是否繼續(xù)添加車次?(1)是(2)否 》");</p><p> scanf("%d",&jud);</p><p> system("cls"); </p>
34、<p> if(jud==1)</p><p><b> ai=1;</b></p><p> else if (jud==2)</p><p><b> ai=ai-1;</b></p><p><b> else</b></p><
35、;p><b> {ai=ai-1;</b></p><p> printf("input error");</p><p><b> }</b></p><p><b> }</b></p><p> jud=getch();</p&g
36、t;<p> busMenu()</p><p><b> }</b></p><p> (2)刪除車次信息的代碼</p><p> void Delbus(){</p><p> void busMenu();</p><p> int di,chd, Dbn,dju
37、de=0,dai;</p><p> printf("\t\t\t刪除班次信息");</p><p> printf("\n\n\n\t\t請(qǐng)輸入您想刪除的班次號(hào):》");</p><p> fpc=fopen("BUS.txt","r");</p><p>
38、; scanf("%d",&Dbn);</p><p> for (di=0;di<bnum;di++)</p><p><b> { </b></p><p> fscanf(fpc,"%d %s %s %d %d",&BUS[di].num,&BUS[di].
39、time,&BUS[di].place,&BUS[di].ticket,&BUS[di].price);</p><p><b> rin(di);</b></p><p><b> }</b></p><p> for (di=0;di<bnum;di++)</p>&l
40、t;p><b> {</b></p><p> if(Dbn==BUS[di].num)</p><p> { djude++;</p><p> printf("\n\t找到該班次信息!");</p><p> printf("\n \n 班次 出
41、發(fā)時(shí)間 到站地點(diǎn) 余票數(shù) 票價(jià)\n");</p><p> printf("\n%10d%13s%16s%12d%13d\n",BUS[di].num,BUS[di].time,BUS[di].place,BUS[di].ticket,BUS[di].price);</p><p><b> dai=di;&l
42、t;/b></p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p> fclose(fpc);//////刪除車次信息</p><p> if(djude
43、!=0)</p><p><b> {</b></p><p> printf("\n\t\t確認(rèn)刪除該車次信息? \n\t\t(1)確定 (2)取消>>");</p><p> scanf("%d",&djude);</p><p> if(djud
44、e==1)</p><p><b> { </b></p><p> for(dai;dai<bnum;dai++)</p><p><b> {</b></p><p> buss[dai].num=buss[dai+1].num;</p><p> b
45、uss[dai].ticket=buss[dai+1].ticket;</p><p> buss[dai].price=buss[dai+1].ticket;</p><p> strcpy(buss[dai].place,buss[dai+1].place);</p><p> strcpy(buss[dai].time,buss[dai+1].time)
46、;</p><p><b> }</b></p><p><b> bnum--;</b></p><p> fpc= fopen("CONT.txt","w");</p><p> fprintf(fpc,"%d",bnum);&
47、lt;/p><p> fclose(fpc);</p><p> fpc=fopen("BUS.txt","w");</p><p> for(di=0;di<bnum;di++)</p><p><b> {</b></p><p> fpri
48、ntf(fpc,"%d %s %s %d %d\n",buss[di].num,buss[di].time,buss[di].place,buss[di].ticket,buss[di].price);</p><p><b> }</b></p><p> fclose(fpc);</p><p><b>
49、 }</b></p><p> printf("\n\n\t\t操作成功!\n");</p><p> chd=getch();</p><p> busMenu();</p><p><b> }</b></p><p> if(djude==0)<
50、;/p><p><b> {</b></p><p> printf("\n\n\n\t\t沒有該班次的信息!!");</p><p> chd=getch();</p><p> busMenu();</p><p><b> }</b></
51、p><p><b> }</b></p><p><b> ?。?)售票的代碼</b></p><p> void sell()</p><p><b> {</b></p><p> int snum,xa,tn=0,si,price, epi,e
52、pn=0;</p><p> char enp[15];</p><p> int nume,ei=0,jude=0,seatnum,seatnumf;</p><p> void ticketMenu();</p><p> printf("\n\n\t\t請(qǐng)輸入到站地點(diǎn)>>");</p>
53、<p> fpe=fopen("BUS.txt","r");</p><p> scanf("%s",enp);</p><p> for(epi=0;epi<bnum;epi++) //**循環(huán) 查找符合條件的車次</p><p> { fscanf(fpe,"
54、%d %s %s %d %d",&BUS[epi].num,&BUS[epi].time,&BUS[epi].place,&BUS[epi].ticket,&BUS[epi].price);</p><p> rin(epi); ////**把符合條件的車次信息暫時(shí)存儲(chǔ)在buss數(shù)組中 待使用</p><p> if(strcmp(
55、BUS[epi].place,enp)==0)</p><p><b> {</b></p><p> epn=epn+1; ////***buss從下標(biāo)1開始計(jì)數(shù)</p><p> if(epn==1)</p><p><b> {</b></p><p> p
56、rintf("\n\t找到符合條件的車次信息如下:\n");</p><p> printf("\n 班次 出發(fā)時(shí)間 到站地點(diǎn) 余票數(shù) 票價(jià)\n");</p><p><b> }</b></p><p> printf("\n%
57、10d%13s%16s%12d%13d\n",BUS[epi].num,BUS[epi].time,BUS[epi].place,BUS[epi].ticket,BUS[epi].price);</p><p><b> }</b></p><p><b> }</b></p><p> if(epn==0
58、)</p><p> printf("\n對(duì)不起!沒有該班次的信息!\n");</p><p> else if(epn!=0)</p><p><b> {</b></p><p> printf("\n\n\t\t請(qǐng)選擇要出售的班次:》 ");</p>&
59、lt;p> scanf("%d",&snum);</p><p> printf("\n\t\t請(qǐng)輸入要出售的票數(shù):》 ");</p><p> scanf("%d",&tn);</p><p> fpc=fopen("BUS.txt","r&qu
60、ot;);</p><p> for(si=0;si<bnum;si++)</p><p><b> {</b></p><p> if(buss[si].num==snum)</p><p><b> {</b></p><p> seatnumf=buss
61、[si].ticket;</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p> fclose(fpc);</p><p> buss[si].ticket=
62、buss[si].ticket-tn; ////**判斷車次信息符合,票數(shù)減去tn 張***//</p><p> if(buss[si].ticket<0&&buss[si].ticket==0) </p><p> printf("當(dāng)前剩余票數(shù)不足,請(qǐng)重新選擇出售票數(shù)!");</p><p> else if (b
63、uss[si].ticket>0)</p><p><b> { </b></p><p> price=tn*buss[si].price;</p><p> printf("\n\t\t%d張票總計(jì) %d 元\n",tn,price);</p><p> printf("
64、\n\t\t是否支付并出售?(1)是 (2)否 ");</p><p> scanf("%d",&xa);</p><p><b> if(xa==1)</b></p><p> { fpc=fopen("BUS.txt","w+");</p&
65、gt;<p> for(epi=0;epi<bnum;epi++)</p><p> fprintf(fpc,"%d %s %s %d %d\n",buss[epi].num,buss[epi].time,buss[epi].place,buss[epi].ticket,buss[epi].price);</p><p> fclose(fpc
66、);</p><p> printf("\n\t\t座位號(hào)為:\t"); ////計(jì)算每一張票的座位號(hào)</p><p> for(si=1;si<tn+1;si++)</p><p><b> {</b></p><p> seatnum=50-seatnumf+si; ///這里假設(shè)
67、限載人數(shù)為50</p><p> printf(" %d ",seatnum);</p><p><b> }</b></p><p> printf("\n\n\t\t操作成功!!\n");</p><p><b> }</b></p>
68、<p> else if (xa==2)</p><p><b> {</b></p><p> printf("\n\t\t售票取消");</p><p><b> }</b></p><p> fclose(fpc);</p><p
69、><b> }</b></p><p><b> }</b></p><p> si=getch();</p><p> ticketMenu();</p><p> ?。?)按時(shí)間與到站地點(diǎn)查找車次信息</p><p> void enqpt()</p
70、><p> { void enquire();</p><p> char time[10],pla[10];</p><p> int epi=0,pti=0;</p><p> printf(" \n\t\t\t 按到站地點(diǎn)與時(shí)間查詢車次信息\n ");</p><p> pr
71、intf(" \n\n\t\t 請(qǐng)輸入發(fā)車時(shí)間:》 ");</p><p> scanf("%s",time);</p><p> printf("\n \t\t 請(qǐng)輸入到站地點(diǎn):》");</p><p> scanf("%s",pla);</p><p>
72、 fpe=fopen("BUS.txt","r");</p><p> for(epi=0;epi<bnum;epi++) //**循環(huán) 查找符合條件的車次</p><p><b> { </b></p><p> fscanf(fpe,"%d %s %s %d %d&qu
73、ot;,&BUS[epi].num,&BUS[epi].time,&BUS[epi].place,&BUS[epi].ticket,&BUS[epi].price);</p><p><b> rin(epi);</b></p><p><b> }</b></p><p>
74、for(epi=0;epi<bnum;epi++)</p><p><b> {</b></p><p> if(strcmp( buss[epi].time,time)==0&&strcmp(buss[epi].place,pla)==0)</p><p><b> { </b></p
75、><p><b> pti++;</b></p><p> if (pti==1)</p><p><b> {</b></p><p> printf("\n\t找到符合條件的班次如下:\n"); </p><p> printf("\n
76、 班次 出發(fā)時(shí)間 到站地點(diǎn) 余票數(shù) 票價(jià)\n");</p><p><b> }</b></p><p> printf("\n%10d%13s%16s%12d%13d\n",buss[epi].num,buss[epi].time,buss[epi].place,buss[
77、epi].ticket,buss[epi].price);</p><p><b> }</b></p><p><b> }</b></p><p> if(pti==0)</p><p> printf("\n\n\t\t\t沒有找到符合條件的班次信息!!!");&l
78、t;/p><p> epi=getch();</p><p> system("cls");</p><p> enquire();</p><p><b> }</b></p><p> 2.難點(diǎn)及其代碼實(shí)現(xiàn)</p><p> 在實(shí)驗(yàn)中的難點(diǎn)有
79、兩點(diǎn)</p><p> (1) 如何查找符合條件的班次信息 其實(shí)現(xiàn)方法是一次把車次文件中的信息讀入數(shù)組中,然后在循環(huán)中BUS 數(shù)組的每一項(xiàng)數(shù)據(jù)進(jìn)行比較,直到找到符合條件的車次信息,停止循環(huán)。代碼如下</p><p> printf("\n\n\t\t請(qǐng)輸入到站地點(diǎn)》");</p><p> scanf("%s",enp
80、);</p><p> fpe=fopen("BUS.txt","r");</p><p> for(epi=0;epi<bnum;epi++) //**循環(huán) 查找符合條件的車次</p><p> { fscanf(fpe,"%d %s %s %d %d",&BUS[epi].nu
81、m,&BUS[epi].time,&BUS[epi].place,&BUS[epi].ticket,&BUS[epi].price);</p><p><b> rin(epi);</b></p><p> ////**把符合條件的車次信息暫時(shí)存儲(chǔ)在buss數(shù)組中 待使用</p><p> if(strcm
82、p(BUS[epi].place,enp)==0)</p><p><b> {</b></p><p> epn=epn+1; ////***buss從下標(biāo)1開始計(jì)數(shù)</p><p> if(epn==1)</p><p><b> {</b></p><p>
83、 printf("\n\t\t找到符合條件的車次信息如下:\n");</p><p> printf("\n 班次 出發(fā)時(shí)間 到站地點(diǎn) 余票數(shù) 票價(jià)\n");</p><p><b> }</b></p><p> printf("
84、;\n%10d%13s%16s%12d%13d\n",BUS[epi].num,BUS[epi].time,BUS[epi].place,BUS[epi].ticket,BUS[epi].price);</p><p><b> }</b></p><p><b> }</b></p><p> if(ep
85、n==0) printf("\n\n\n\n\t\t未找到該車次信息"); </p><p> ?。?),如何刪除一條車次信息。 然后又怎樣變更車次文件中的信息,同時(shí)還需要改變車次總數(shù)的記錄值。其解決辦法是先用“只讀 r”的方式打開文件,把車次文件中的信息輸入到buss 數(shù)組中,關(guān)閉文件,對(duì)數(shù)組進(jìn)行查找刪除操做,刪除成功后,用“w+”的方式打開文件,這樣文件中原來的數(shù)據(jù)就被刪除,然后再把新的
86、車次信息一次寫入文件中。實(shí)現(xiàn)了車次信息的刪除。對(duì)于存儲(chǔ)車次信息數(shù)文件也使用同樣的算法。達(dá)到更改車次總數(shù)的目的。其代碼如下:</p><p> void busMenu();</p><p> int di,chd, Dbn,djude=0,dai;</p><p> printf("\t\t\t刪除班次信息");</p>&l
87、t;p> printf("\n\n\n\t\t請(qǐng)輸入您想刪除的班次號(hào):》");</p><p> fpc=fopen("BUS.txt","r");</p><p> scanf("%d",&Dbn);</p><p> for (di=0;di<bnum;d
88、i++)</p><p><b> { </b></p><p> fscanf(fpc,"%d %s %s %d %d",&BUS[di].num,&BUS[di].time,&BUS[di].place,&BUS[di].ticket,&BUS[di].price);</p><
89、;p><b> rin(di);</b></p><p><b> }</b></p><p> for (di=0;di<bnum;di++)</p><p><b> {</b></p><p> if(Dbn==BUS[di].num)</p&
90、gt;<p> { djude++;</p><p> printf("\n\t找到該班次信息!");</p><p> printf("\n \n 班次 出發(fā)時(shí)間 到站地點(diǎn) 余票數(shù) 票價(jià)\n");</p><p> printf("
91、\n%10d%13s%16s%12d%13d\n",BUS[di].num,BUS[di].time,BUS[di].place,BUS[di].ticket,BUS[di].price);</p><p><b> dai=di;</b></p><p><b> break;</b></p><p>&l
92、t;b> }</b></p><p><b> }</b></p><p> fclose(fpc);//////刪除車次信息</p><p> if(djude!=0)</p><p><b> {</b></p><p> printf(&q
93、uot;\n\t\t確認(rèn)刪除該車次信息? \n\t\t(1)確定 (2)取消>>");</p><p> scanf("%d",&djude);</p><p> if(djude==1)</p><p><b> { </b></p><p> for(d
94、ai;dai<bnum;dai++)</p><p><b> {</b></p><p> buss[dai].num=buss[dai+1].num;</p><p> buss[dai].ticket=buss[dai+1].ticket;</p><p> buss[dai].price=buss[
95、dai+1].ticket;</p><p> strcpy(buss[dai].place,buss[dai+1].place);</p><p> strcpy(buss[dai].time,buss[dai+1].time);</p><p><b> }</b></p><p><b> bnu
96、m--;</b></p><p> fpc= fopen("CONT.txt","w"); ////CONT.txt 中存儲(chǔ)的是車次總數(shù),在這里刪除一條車次信息,其值發(fā)生改變,然后存入文件中////</p><p> fprintf(fpc,"%d",bnum);</p><p> fc
97、lose(fpc);</p><p> fpc=fopen("BUS.txt","w");</p><p> for(di=0;di<bnum;di++)</p><p><b> {</b></p><p> fprintf(fpc,"%d %s %s %
98、d %d\n",buss[di].num,buss[di].time,buss[di].place,buss[di].ticket,buss[di].price);</p><p><b> }</b></p><p> fclose(fpc);</p><p><b> }</b></p>
99、<p> printf("\n\n\t\t操作成功!\n");</p><p> chd=getch();</p><p> busMenu();</p><p><b> }</b></p><p> if(djude==0)</p><p><b&
100、gt; {</b></p><p> printf("\n\n\n\t\t沒有該班次的信息!!");</p><p> chd=getch();</p><p> busMenu();</p><p><b> }</b></p><p><b>
101、; }</b></p><p><b> 五、運(yùn)行測(cè)試</b></p><p> 1.系統(tǒng)運(yùn)行的主要界面 </p><p><b> 用戶登錄界面</b></p><p><b> 管理員操作菜單界面</b></p><p>&l
102、t;b> 添加車次信息的界面</b></p><p><b> 刪除班次信息的界面</b></p><p><b> 班次查詢的界面</b></p><p><b> 售票員操作界面</b></p><p><b> 售票的界面</b
103、></p><p><b> 退票的界面</b></p><p> 2.測(cè)試用例或測(cè)試數(shù)據(jù)</p><p> 在測(cè)試中 用班次號(hào)為 1002 到 BeiJing 的車票 但是原來已經(jīng)存在該車次的信息。</p><p> 3.測(cè)試結(jié)果及結(jié)果分析(測(cè)試結(jié)果可以截屏)</p><p>
104、 在添加車次信息的時(shí)候</p><p> 說明添加車次時(shí)無法添加重復(fù)班次號(hào)的車次。</p><p> 下面要修改該車次的信息</p><p> 下面選擇修改票價(jià)信息,出現(xiàn)如下界面,成功的修改了車次的票價(jià)信息:</p><p> 顯示全部的車次信息(此時(shí)文件中只有兩條車次信息)</p><p> 下面刪除該班次
105、的信息:其運(yùn)行結(jié)果如下。</p><p> 此時(shí)顯示全部的車次信息</p><p> 可見只有一條車次信息</p><p><b> 可見刪除操作成功!</b></p><p> 下面在添加車次信息為1003的車次信息</p><p> 這時(shí)顯示全部車次信息</p><
106、;p> 可見已成功添加了車次信息</p><p><b> 下面是對(duì)售票的操作</b></p><p> 其結(jié)果打印出了座位號(hào)信息 及總票價(jià) 符合預(yù)期</p><p> 下面查詢?cè)摯诬嚨男畔?lt;/p><p> 可以看見 結(jié)果該車次的車票少了五張,說明上面的售票操作成功,已經(jīng)成功的售出5張票。</p&
107、gt;<p> 下面選擇退掉1003次車的兩張票</p><p><b> 其結(jié)果如圖:</b></p><p> 現(xiàn)在再查詢?cè)撥嚧蔚男畔⒖梢姡?lt;/p><p> 可見余票數(shù)增加兩張,說明退票成功。</p><p> 對(duì)于查詢的操作中,按照地點(diǎn)與時(shí)間查詢上面的操作都有用到,其測(cè)試結(jié)果表明其運(yùn)行都很
108、準(zhǔn)確。</p><p> 下面主要測(cè)試組合查詢的功能 例如要查詢10:30 開往南京的車次</p><p> 結(jié)果也查找到了正確的班次</p><p> 以上的這寫測(cè)試結(jié)果表明,該系統(tǒng)能順利的完成各項(xiàng)預(yù)期的設(shè)計(jì)功能,迅速準(zhǔn)確的對(duì)用戶的操作命令做出反應(yīng)。滿足開發(fā)要求。</p><p> 4.測(cè)試中出現(xiàn)的問題及解決方法</p>
109、<p> 測(cè)試中經(jīng)常會(huì)碰到意想不到的測(cè)試結(jié)果,這遠(yuǎn)比查找語法錯(cuò)誤要困難,當(dāng)遇到這種問題時(shí)主要的解決辦法是把出問題模塊單獨(dú)拿出來進(jìn)行測(cè)試。逐句分析代碼,一般都能找到錯(cuò)誤,如果還是無法排除錯(cuò)誤,就需要考慮其算法問題,檢查流程圖與算法是否相符,改正其中的錯(cuò)誤,或者重新設(shè)計(jì)算法。直到測(cè)試得到滿意的結(jié)果。</p><p><b> 六、總結(jié)</b></p><p&
110、gt;<b> 1.軟件評(píng)價(jià)</b></p><p> 本次開發(fā)的售票系統(tǒng)經(jīng)過測(cè)試很好的完成了各項(xiàng)預(yù)期的要求及功能,對(duì)于要求的每一項(xiàng)功能系統(tǒng)都能正確的響應(yīng),完成操作。完全滿足開發(fā)需求。然而也存在不足:</p><p> 第一,對(duì)于登錄用戶而言雖然有密碼驗(yàn)證,但是設(shè)計(jì)的算法可以無限次的輸入密碼,沒有上限次數(shù)保護(hù),這里存在安全隱患,可以考慮設(shè)計(jì)最高輸錯(cuò)次數(shù),防止有人
111、暴力破解密碼。</p><p> 第二,在系統(tǒng)的操作中沒有辨認(rèn)時(shí)間與到站地點(diǎn)信息,因?yàn)闀r(shí)間與地點(diǎn)的數(shù)據(jù)類型都是字符型。有可能造成添加班次的時(shí)候把時(shí)間信息與到站地點(diǎn)信息弄錯(cuò),在這個(gè)問題的解決思路是先在系統(tǒng)中存儲(chǔ)可以售的到站地點(diǎn),每次輸入地址時(shí)進(jìn)行比較,如果不符合信息則給出提示。對(duì)于時(shí)間的輸入也可以考慮用相同的算法進(jìn)行設(shè)計(jì)。</p><p> 第三,查詢功能與售票功能相互獨(dú)立,操作不方便。
112、考慮到實(shí)際情況,對(duì)于售票員來說一般會(huì)先進(jìn)行查詢?nèi)绻蟹蠗l件的下一步都會(huì)選擇出售車票。而在本系統(tǒng)中只能通過查詢地點(diǎn)進(jìn)行售票,其效率較低,操作不方便也可以改進(jìn)。其思路是在每次查詢后都詢問是否選擇出售車票,如果是則選擇符合條件的車次,調(diào)用出售車票的功能模塊,出售車票。不出售則返回上一級(jí)操作界面。</p><p><b> 2.心得體會(huì)與收獲</b></p><p>
113、在完成本次試驗(yàn)內(nèi)容的過程中每位組員都有很多的心得體會(huì)與收獲:</p><p> 1):對(duì)于編寫大型的軟件或者系統(tǒng),工程化,模塊化的思想很重要與實(shí)用。例如本次作業(yè)內(nèi)容,其最終代碼達(dá)到700多行。對(duì)于普通本科生來說要在短時(shí)間內(nèi)有效的編寫出這么多的內(nèi)容并不是一件容易的事情,但是有了工程化模塊化的思想之后,可以把一個(gè)大問題細(xì)分成小問題來解決。每一個(gè)成員負(fù)責(zé)一個(gè)問題,最終就把問題解決了。如果沒有工程化模塊化的思想是很難完
114、成這樣的工作的。</p><p> 2):規(guī)范化,標(biāo)準(zhǔn)化很在軟件開發(fā)過程中有著重要的作用。 如果沒有規(guī)范與標(biāo)準(zhǔn),每個(gè)組員按照自己的想法與思路隨便編寫代碼,定義變量。雖然小模塊可以運(yùn)行,但是當(dāng)所有模塊集成后其問題就凸顯出來了,沒有規(guī)范與標(biāo)準(zhǔn)的結(jié)果是軟件代碼的可移植性低,集成之后需要一行一行的檢查代碼中出現(xiàn)則錯(cuò)誤。其工作量不亞于一個(gè)人同時(shí)開發(fā)所有的模塊。如果沒有規(guī)范化就提不上標(biāo)準(zhǔn)化與工程化的開發(fā)。</p&g
115、t;<p> 3) 軟件開發(fā)需要耐心與毅力,在開發(fā)軟件的過程中遇到問題時(shí)在所難免的,有的時(shí)候即使花費(fèi)很大的精力也很難找出錯(cuò)誤所在,這時(shí)候就要求開發(fā)者有足夠的耐性與毅力,不能浮躁。能靜下心來慢慢的排查錯(cuò)誤,一次次的調(diào)試,最終找到錯(cuò)誤的癥結(jié)并修正。這個(gè)時(shí)候越是浮躁越是難發(fā)現(xiàn)問題。有的時(shí)候即使是很明顯的問題也發(fā)現(xiàn)不了。而這一點(diǎn)收獲我相信不僅僅是在軟件開發(fā)上對(duì)我有益,對(duì)于我以后的整個(gè)人生,這樣的教訓(xùn)都會(huì)讓我大大受益。</p
116、><p><b> 七、用戶手冊(cè)</b></p><p> 該售票系統(tǒng)實(shí)用,功能齊全操作簡(jiǎn)單,易學(xué)。 軟件是在DOS界面上運(yùn)行,全鍵盤操作。菜單選項(xiàng)前有選擇碼。當(dāng)需要選擇一項(xiàng)操作時(shí)只需要選擇相應(yīng)的選擇碼即可。</p><p> 實(shí)用該系統(tǒng)首先需要用戶驗(yàn)證及登錄。密碼或者用戶名出現(xiàn)錯(cuò)誤都無法登錄系統(tǒng)。</p><p>
117、 該系統(tǒng)主要分為兩個(gè)模塊:</p><p> 管理員模塊 對(duì)車次信息進(jìn)行管理有以下功能:</p><p> ① 添加車次信息 一次只能添加一條車次信息,本次添加完成后可以選擇繼續(xù)添加,添加下一條車次信息。</p><p> ② 刪除車次信息 根據(jù)車次號(hào)查詢要?jiǎng)h除的車次,一次只可刪除一條車次信息。</p><p> ?、?修改車次信息
118、可以修改車次的到站地點(diǎn),發(fā)車時(shí)間,限載人數(shù),及票價(jià)信息。一次只能修改一項(xiàng)內(nèi)容</p><p> ?、?查詢車次 可以根據(jù)到站地點(diǎn) 車次號(hào) 以及到站地點(diǎn)與發(fā)車時(shí)間的組合來查詢符合條件的車次信息。</p><p> ⑤ 顯示所有信息 可以在屏幕上輸出當(dāng)前系統(tǒng)中存儲(chǔ)的所有的車次信息。便于管理</p><p> 售票員模塊 進(jìn)行售票,退票操作 有一下功能:</p
119、><p> ① 售票 可以進(jìn)行售票操作,根據(jù)到站地點(diǎn)查詢車次信息,一次可售出多張票,并打印車票的座位號(hào)和總的票價(jià)。</p><p> ?、?退票 提供退票操作 ,根據(jù)車次號(hào)進(jìn)行退票 一次可退多張票。</p><p> ?、?查詢 通過多種方式查詢需要的車次</p><p><b> 文件信息</b></p&g
120、t;<p> 該系統(tǒng)包括三個(gè)文本文件BUS.txt文件中存儲(chǔ)當(dāng)前所有的車次信息。USER.txt文件中存儲(chǔ)當(dāng)前所有的用戶信息。COUNT.txt文件用來存放當(dāng)前車次信息的總條數(shù)。</p><p><b> 八、程序清單</b></p><p><b> 源程序代碼:</b></p><p> #inc
121、lude<stdio.h></p><p> #include<stdlib.h></p><p> #include <conio.h></p><p> #include<string.h></p><p> int numi=0,bnum;</p><p>
122、 FILE * fpe,*fpc;</p><p> struct Bus_type{</p><p><b> int num;</b></p><p> char time[20];</p><p> char place[20];</p><p> int ticket;<
123、/p><p> int price;</p><p> }BUS[50],buss[50]={NULL,NULL,NULL,NULL};</p><p> struct USER_type{</p><p> char name[10];</p><p> char cip[10];</p><
124、;p><b> int ty;</b></p><p> }User[10];</p><p> int cont()</p><p> { int coi;</p><p> fpc=fopen("CONT.txt","r+");</p><
125、;p> fscanf(fpc,"%d",&coi);</p><p> fclose(fpc);</p><p> return coi;</p><p><b> }</b></p><p> void rin(int ri){</p><p> b
126、uss[ri].num=BUS[ri].num;</p><p> strcpy(buss[ri].time,BUS[ri].time);</p><p> strcpy(buss[ri].place,BUS[ri].place);</p><p> buss[ri].ticket=BUS[ri].ticket;</p><p> b
127、uss[ri].price=BUS[ri].price;</p><p><b> }</b></p><p> void Add()</p><p><b> {</b></p><p> void busMenu();</p><p> int jud,ai=1
128、;</p><p> int nume,ei;</p><p> FILE *fpadd;</p><p> printf("\n\t\t\t添加車次信息\n");</p><p> fpe=fopen("BUS.txt","r");</p><p>
129、 for (ei=0;ei<bnum;ei++) </p><p><b> { </b></p><p> fscanf(fpe,"%d %s %s %d %d",&BUS[ei].num,&BUS[ei].time,&BUS[ei].place,&BUS[ei].ticket,&BUS[
130、ei].price);</p><p><b> rin(ei);</b></p><p><b> }</b></p><p> fclose(fpe);</p><p> while(ai==1)</p><p><b> { </b>
131、;</p><p> printf("\n\t\t請(qǐng)輸入車次號(hào): 》");</p><p> scanf("%d",&BUS[numi].num);</p><p> int jude=0;</p><p> for (ei=0;ei<bnum;ei++) ////判斷是否存在
132、該班次號(hào)</p><p><b> { </b></p><p> if(BUS[numi].num==buss[ei].num)</p><p> { jude++; </p><p> if (jude==1) printf("\n\n\t\t該車次信息已存在!無法添加!!");
133、</p><p> break; ////如果存在則做出標(biāo)記,跳出本次循環(huán)</p><p><b> }</b></p><p><b> }</b></p><p> if(jude==1)</p><p><b> break;</b&
134、gt;</p><p> printf("\n\t\t請(qǐng)輸入發(fā)車時(shí)間:》 ");</p><p> scanf("%s",&BUS[numi].time);</p><p> printf("\n\t\t請(qǐng)輸入到達(dá)地點(diǎn):》 ");</p><p> scanf(&qu
135、ot;%s",&BUS[numi].place);</p><p> printf("\n\t\t請(qǐng)輸入限載人數(shù):》 ");</p><p> scanf("%d",&BUS[numi].ticket );</p><p> printf("\n\t\t請(qǐng)輸 入 票價(jià):》 &qu
136、ot;);</p><p> scanf("%d",&BUS[numi].price);</p><p> fpadd=fopen("BUS.txt","a");</p><p> fprintf(fpadd,"%d %s %s %d %d\n",BUS[numi].num
137、,BUS[numi].time,BUS[numi].place,BUS[numi].ticket,BUS[numi].price);//依次輸入車次信息</p><p> fclose(fpadd);</p><p> numi++;//班次數(shù)加一</p><p> bnum=1+bnum;</p><p> fpc= fopen(
138、"CONT.txt","w"); /////每添加一條班次信息 向文件中寫一條信息</p><p> fprintf(fpc,"%d",bnum);</p><p> fclose(fpc);</p><p> printf("\n\t\t是否繼續(xù)添加車次?(1)是(2)否 》"
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 某汽車站設(shè)計(jì)
- 白云汽車站w
- 窖口汽車站室外照明系統(tǒng)
- 南通永興汽車站資料
- 南通永興汽車站資料
- 汽車站消防應(yīng)急預(yù)案
- 汽車站春運(yùn)工作安排
- 淳安汽車站時(shí)刻表
- 安全汽車站綜合應(yīng)急預(yù)案
- hdmi光端機(jī)應(yīng)用汽車站多媒體系統(tǒng)
- 汽車站防汛搶險(xiǎn)應(yīng)急預(yù)案
- 安全汽車站綜合應(yīng)急預(yù)案
- c語言航班售票系統(tǒng)課程設(shè)計(jì)報(bào)告----航班售票系統(tǒng)
- 汽車站春運(yùn)工作總結(jié)
- 汽車站春運(yùn)工作總結(jié)
- 長途汽車站車票管理系統(tǒng)-課程設(shè)計(jì)報(bào)告
- 汽車站站務(wù)安全知識(shí)手冊(cè)
- 禹州汽車站發(fā)車時(shí)間表
- 汽車站思想工作總結(jié)_
- 汽車站各項(xiàng)崗位職責(zé)匯編
評(píng)論
0/150
提交評(píng)論