c語言_汽車站售票管理系統(tǒng)_第1頁
已閱讀1頁,還剩37頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論