數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告--航班信息查詢(xún)與檢索_第1頁(yè)
已閱讀1頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p>  《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)報(bào)告書(shū)</p><p><b>  姓名: </b></p><p><b>  性別: </b></p><p><b>  班級(jí):</b></p><p><b>  學(xué)號(hào):</b></p>&l

2、t;p><b>  日期:</b></p><p>  一、 課程設(shè)計(jì)題目:航班信息查詢(xún)與檢索</p><p>  二、 課程設(shè)計(jì)內(nèi)容: </p><p>  1、設(shè)計(jì)一個(gè)航班信息查詢(xún)與檢索系統(tǒng),每個(gè)航班記錄包括:航班號(hào)、起始站、終點(diǎn)站、起飛時(shí)間、到達(dá)時(shí)間、有效期。</p><p><b>  2、要有輸

3、入模塊。</b></p><p>  3、對(duì)航班信息進(jìn)行排序與查找。</p><p><b>  三、 算法設(shè)計(jì):</b></p><p><b>  設(shè)計(jì)思路:</b></p><p>  根據(jù)題目要求,程序必須實(shí)現(xiàn)航班信息的錄入和查詢(xún)。程序首先定義一個(gè)用于儲(chǔ)存航班信息的數(shù)據(jù)類(lèi)型,再由

4、用戶(hù)錄入航班數(shù)據(jù),在錄入的同時(shí)并對(duì)數(shù)據(jù)進(jìn)行基數(shù)排序,最后執(zhí)行數(shù)據(jù)查詢(xún)和檢索。在查詢(xún)?cè)O(shè)計(jì)中,使用折半查找法對(duì)排好序的航班數(shù)據(jù)按航班號(hào)實(shí)現(xiàn)快速查找,按起點(diǎn)站、終點(diǎn)站、起飛時(shí)間、到達(dá)時(shí)間查找的則采用順序查詢(xún)方法。用到了文件的一般概念。</p><p>  主要算法流程圖如下:</p><p>  四、 程序正確性驗(yàn)證(指邊界測(cè)試數(shù)據(jù),即程序?qū)τ诰倪x擇的典型、苛刻而帶有刁難性的幾組輸入數(shù)據(jù)能夠得

5、出滿(mǎn)足要求的結(jié)果)</p><p>  截取的程序運(yùn)行情況如下圖所示</p><p>  五、 課程設(shè)計(jì)過(guò)程中出現(xiàn)的主要問(wèn)題、原因及解決方法:</p><p>  首先是要實(shí)現(xiàn)所要的功能需用什么數(shù)據(jù)結(jié)構(gòu)的問(wèn)題,比如排序問(wèn)題究竟用那一種,在同學(xué)的幫助下和上網(wǎng)搜尋資料,采用基數(shù)排序最符合,程序無(wú)法運(yùn)行 ,最后在大家的努力下一起修改錯(cuò)誤使得程序可以正常運(yùn)行。</p&

6、gt;<p>  六、 課程設(shè)計(jì)的主要收獲:</p><p>  1、 通過(guò)這次課程設(shè)計(jì)使我對(duì)平時(shí)課上所學(xué)的知識(shí)有了更加深刻的理解,增加了熟練應(yīng)用的程度,對(duì)解決問(wèn)題的思路和算法設(shè)計(jì)思想有了更深刻的認(rèn)識(shí),解決問(wèn)題的思路是關(guān)鍵。</p><p>  2、 這次課程設(shè)計(jì)使我看到了自身還存在著很多不足,對(duì)與一些基本的問(wèn)題掌握的不是很扎實(shí),在設(shè)計(jì)過(guò)程中平添了不少麻煩。要繼續(xù)對(duì)知識(shí)進(jìn)行鞏

7、固,加深印象。</p><p>  3、 遇到問(wèn)題要積極與同學(xué)或者是老師進(jìn)行溝通,這樣能夠少走不少?gòu)澛贰?lt;/p><p>  4、 以后不管是做什么應(yīng)定要用心才能做好,不能偷工減料。</p><p>  七、 對(duì)今后課程設(shè)計(jì)的建議:</p><p>  1、 今后的課程設(shè)計(jì)可以更加貼近于生活,貼近于現(xiàn)實(shí),提高我們把書(shū)上學(xué)到的知識(shí)應(yīng)用到現(xiàn)實(shí)生

8、活中的能力,以及在現(xiàn)實(shí)社會(huì)中遇到問(wèn)題的解決能力。</p><p>  2、可以變換一種方式,減少或者是杜絕同學(xué)鉆空子和偷工減料的機(jī)會(huì)。</p><p><b>  附錄(源程序代碼)</b></p><p>  #include <iostream.h></p><p>  #include <stri

9、ng.h></p><p>  #include <iomanip.h></p><p>  #include <fstream.h></p><p>  #define MAXSIZE 50</p><p>  typedef struct{</p><p><b>  int

10、 hour;</b></p><p>  int minute;</p><p><b>  }time;</b></p><p>  typedef struct{</p><p><b>  int year;</b></p><p>  int month;

11、</p><p><b>  int day;</b></p><p><b>  }date;</b></p><p>  typedef struct information</p><p><b>  {</b></p><p>  char nu

12、mber[7]; //航班號(hào)</p><p>  time start; //起點(diǎn)站</p><p>  time end; //終點(diǎn)站</p><p>  char start_station[16]; //起飛時(shí)間</p><p>  char end_station[16]; //到達(dá)時(shí)間</p

13、><p>  date date_1; //有效期</p><p>  date date_2;</p><p>  information *next;</p><p><b>  }info;</b></p><p>  void screen()</p><p>

14、<b>  {</b></p><p>  cout<<" 【航班信息的查詢(xún)與檢索】"<<endl;</p><p>  cout<<" ★*******************************★"<<endl;</

15、p><p>  cout<<" 1.插入航班信息 "<<endl;</p><p>  cout<<" 2.按起終點(diǎn)查詢(xún) "<<endl;</p><p>  cout<<"

16、 3.按出行日期查詢(xún) "<<endl;</p><p>  cout<<" 4.按航班號(hào)進(jìn)行查詢(xún)"<<endl;</p><p>  cout<<" ★*******************************★"<<en

17、dl;</p><p><b>  }</b></p><p>  void Init_info(info *info_1[],int &count)</p><p><b>  {</b></p><p>  fstream iofile("hangban.txt",i

18、os::in|ios::out|ios::binary);</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  info_1[count]=new info;</p><p>  iofile.read((char*)info_1[cou

19、nt],sizeof(info));</p><p>  if(iofile.eof())break;</p><p>  if(count) info_1[count-1]->next=info_1[count];</p><p>  info_1[count]->next=NULL;</p><p><b>  co

20、unt++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void insert_info(info *info_1[],int &count)</p><p><b>  {</b></

21、p><p>  info_1[count]=new info;</p><p>  cout<<"航班號(hào):";</p><p>  cin>>info_1[count]->number;</p><p>  cout<<"起點(diǎn)站:";</p><

22、p>  cin>>info_1[count]->start_station;</p><p>  cout<<"終點(diǎn)站:";</p><p>  cin>>info_1[count]->end_station;</p><p>  cout<<"起飛時(shí)間(時(shí) 分):&qu

23、ot;;</p><p>  cin>>info_1[count]->start.hour>>info_1[count]->start.minute;</p><p>  cout<<"到達(dá)時(shí)間(時(shí) 分):";</p><p>  cin>>info_1[count]->end.h

24、our>>info_1[count]->end.minute;</p><p>  cout<<"有效期(年 月 日 年 月 日):";</p><p>  cin>>info_1[count]->date_1.year>>info_1[count]->date_1.month>>info_1

25、[count]->date_1.day</p><p>  >>info_1[count]->date_2.year>>info_1[count]->date_2.month>>info_1[count]->date_2.day;</p><p>  if(count) info_1[count-1]->next=info_

26、1[count];</p><p>  info_1[count]->next=NULL;</p><p><b>  count++;</b></p><p><b>  }</b></p><p>  void distribute(info *info_1[],info *info_2[

27、],info *info_3[],int count,int state)</p><p><b>  {</b></p><p>  for(int i=0;i<26;i++)</p><p><b>  {</b></p><p>  info_2[i]=NULL;</p>

28、<p>  info_3[i]=NULL;</p><p><b>  }</b></p><p>  for(int j=0;j<count;j++)</p><p><b>  {</b></p><p>  int value;</p><p>  if

29、('a'<=info_1[j]->number[state])</p><p>  value=info_1[j]->number[state]-'a';</p><p><b>  else</b></p><p>  value=info_1[j]->number[state]-

30、9;0';</p><p>  if(!info_2[value])</p><p><b>  {</b></p><p>  info_2[value]=info_1[j];</p><p>  info_3[value]=info_1[j];</p><p><b>  }

31、</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  info_3[value]->next=info_1[j];</p><p>  info_3[value]=info_1[j];</p><p&

32、gt;<b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void collect(info *info_1[],info *info_2[],info *info_3[])</p><p><b&g

33、t;  {</b></p><p>  for(int i=0,j=0;i<26;i++)</p><p><b>  {</b></p><p>  while(info_2[i])</p><p><b>  {</b></p><p>  info_1

34、[j++]=info_2[i];</p><p>  if(info_2[i]==info_3[i]) break;</p><p>  info_2[i]=info_2[i]->next;</p><p><b>  }</b></p><p><b>  }</b></p>

35、<p><b>  }</b></p><p>  void radix(info *info_1[],info *info_2[],info *info_3[],int count)</p><p><b>  {</b></p><p>  for(int i=strlen(info_1[0]->num

36、ber)-1;0<=i;i--)</p><p><b>  {</b></p><p>  distribute(info_1,info_2,info_3,count,i);</p><p>  collect(info_1,info_2,info_3);</p><p><b>  }</b&g

37、t;</p><p><b>  }</b></p><p>  int bin_search(info *info_1[],char *str,int low,int high)</p><p><b>  {</b></p><p><b>  int mid;</b>&l

38、t;/p><p>  while(low<=high)</p><p><b>  {</b></p><p>  mid=(low+high)/2;</p><p>  if(!strcmp(info_1[mid]->number,str))</p><p>  return mid;&

39、lt;/p><p>  if(strcmp(info_1[mid]->number,str)<0)</p><p>  low=mid+1;</p><p><b>  else</b></p><p>  high=mid-1;</p><p><b>  }</b>

40、;</p><p>  return (-1);</p><p><b>  }</b></p><p>  void print(info *info_1[],int state)</p><p><b>  {</b></p><p>  cout<<&quo

41、t;航班號(hào):"<<info_1[state]->number<<endl;</p><p>  cout<<"起點(diǎn)站-->終點(diǎn)站:"<<info_1[state]->start_station<<"-->"<<info_1[state]->end_station&

42、lt;<endl;</p><p>  cout<<"起飛時(shí)間-->到達(dá)時(shí)間:"<<info_1[state]->start.hour<<":"<<info_1[state]->start.minute</p><p>  <<"-->"&l

43、t;<info_1[state]->end.hour<<":"<<info_1[state]->end.minute<<endl;</p><p>  cout<<"有效期:"<<info_1[state]->date_1.year<<"."</p>

44、;<p>  <<info_1[state]->date_1.month<<"."<<info_1[state]->date_1.day</p><p>  <<"-->"<<info_1[state]->date_1.year<<"."<

45、/p><p>  <<info_1[state]->date_2.month<<"."<<info_1[state]->date_2.day<<endl;</p><p><b>  }</b></p><p>  int *serach_adress(info *in

46、fo_1[],char str_1[],char str_2[],int count)</p><p><b>  {</b></p><p>  int *data;</p><p>  data=new int[count+1];</p><p>  for(int i=0,j=0;i<count;i++)&l

47、t;/p><p><b>  {</b></p><p>  if(!strcmp(info_1[i]->start_station,str_1)&&!strcmp(info_1[i]->end_station,str_2))</p><p><b>  {</b></p><p

48、>  print(info_1,i);</p><p>  data[++j]=i;</p><p><b>  }</b></p><p><b>  }</b></p><p>  data[0]=j;</p><p>  cout<<"共有&

49、quot;<<data[0]<<"個(gè)記錄?。?!"<<endl;</p><p>  return data;</p><p><b>  }</b></p><p>  void search_date(info *info_1[],int data[],int data_1,int da

50、ta_2,int data_3,int count)</p><p><b>  {</b></p><p>  int i,j,k,m=0;</p><p>  int value_1,value_2,value_3;</p><p>  if(data) k=data[0];</p><p>

51、  else k=count;</p><p>  for(i=0;i<k;i++)</p><p><b>  {</b></p><p>  if(data) j=data[i+1];</p><p><b>  else j=i;</b></p><p>  va

52、lue_1=(info_1[j]->date_1.year-2000)*12*30+info_1[j]->date_1.month*30+info_1[j]->date_1.day;</p><p>  value_2=(info_1[j]->date_2.year-2000)*12*30+info_1[j]->date_2.month*30+info_1[j]->date_2

53、.day;</p><p>  value_3=(data_1-2000)*12*30+data_2*30+data_3;</p><p>  if(value_1<=value_3&&value_3<=value_2)</p><p><b>  {</b></p><p>  print(

54、info_1,j);</p><p><b>  m++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  cout<<"共有"<<m<<"個(gè)記錄?。?!

55、"<<endl;</p><p><b>  }</b></p><p>  void main()</p><p><b>  {</b></p><p>  int count=0;</p><p><b>  int i;</b&g

56、t;</p><p>  int data_1,data_2,data_3,data_4=1,data_5,*data;</p><p>  char str_1[16],str_2[16];</p><p>  info *info_1[MAXSIZE],*info_2[26],*info_3[26];</p><p>  Init_inf

57、o(info_1,count);</p><p>  radix(info_1,info_2,info_3,count);</p><p><b>  screen();</b></p><p><b>  while(1)</b></p><p><b>  {</b><

58、;/p><p>  char flag;</p><p>  cout<<"歡迎進(jìn)入本系統(tǒng)請(qǐng)選者所要進(jìn)行的操作:";</p><p>  cin>>flag;</p><p>  switch(flag)</p><p><b>  {</b></p&

59、gt;<p><b>  case '1':</b></p><p>  insert_info(info_1,count);</p><p>  radix(info_1,info_2,info_3,count);</p><p><b>  break;</b></p>&l

60、t;p><b>  case '2':</b></p><p>  cout<<"請(qǐng)輸入起點(diǎn)站,終點(diǎn)站:";</p><p>  cin>>str_1>>str_2;</p><p>  data=serach_adress(info_1,str_1,str_2,co

61、unt);</p><p>  if(!data[0]) break;</p><p>  cout<<"是否繼續(xù)按出行日期查詢(xún)(Y/N):";</p><p>  cin>>flag;</p><p>  if(flag=='N'||flag=='n') break

62、;</p><p>  cout<<setfill('*')<<setw(81)<<endl;</p><p><b>  data_4=0;</b></p><p><b>  case '3':</b></p><p>  co

63、ut<<"請(qǐng)輸入出行日期(年 月 日):";</p><p>  cin>>data_1>>data_2>>data_3;</p><p>  if(data_4) data=NULL;</p><p>  search_date(info_1,data,data_1,data_2,data_3,c

64、ount);</p><p><b>  break;</b></p><p><b>  case '4':</b></p><p>  cout<<"請(qǐng)輸入航班號(hào):";</p><p>  cin>>str_1;</p>

65、<p>  data_5=bin_search(info_1,str_1,0,count-1);</p><p>  if(data_5==-1)</p><p><b>  {</b></p><p>  cout<<"無(wú)記錄!?。?quot;<<endl;</p><p>

66、<b>  break;</b></p><p><b>  }</b></p><p>  print(info_1,data_5);</p><p><b>  break;</b></p><p><b>  case '0':</b>

67、;</p><p><b>  {</b></p><p>  fstream iofile("hangban.txt",ios::in|ios::out|ios::binary);</p><p>  for(i=0;i<count;i++)</p><p><b>  {</

68、b></p><p>  iofile.write((char*)info_1[i],sizeof(info));</p><p><b>  }</b></p><p><b>  return;</b></p><p><b>  }</b></p>&

69、lt;p><b>  default:</b></p><p>  cout<<"輸入錯(cuò)誤?。?!"<<endl;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論