欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      飛機(jī)訂票系統(tǒng)課程設(shè)計(jì)(共五則)

      時(shí)間:2019-05-14 05:01:41下載本文作者:會(huì)員上傳
      簡(jiǎn)介:寫(xiě)寫(xiě)幫文庫(kù)小編為你整理了多篇相關(guān)的《飛機(jī)訂票系統(tǒng)課程設(shè)計(jì)》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫(xiě)寫(xiě)幫文庫(kù)還可以找到更多《飛機(jī)訂票系統(tǒng)課程設(shè)計(jì)》。

      第一篇:飛機(jī)訂票系統(tǒng)課程設(shè)計(jì)

      《銀行帳戶(hù)管理系統(tǒng)》設(shè)計(jì)報(bào)告

      飛機(jī)航班訂票系統(tǒng)概要設(shè)計(jì)

      根據(jù)需求分析中的描述,知道需要三個(gè)struct結(jié)構(gòu)體類(lèi)型和一個(gè)class的類(lèi)

      struct person //定義旅客信息結(jié)構(gòu)體類(lèi)型 { char name[50];//旅客姓名

      char sex[20];//旅客性別

      char id[20];//旅客身份證號(hào) char from[50];//旅客出發(fā)地

      char to[50];//旅客目的地

      int year;//旅客出發(fā)年

      int month;//月 int day;//日

      };struct fly //定義航班信息結(jié)構(gòu)體類(lèi)型 struct piao //定義訂單信息結(jié)構(gòu)體類(lèi)型 這兩個(gè)結(jié)構(gòu)體類(lèi)型和之前第一個(gè)相似。

      class plane //定義一個(gè)類(lèi)--plane { public: //public表示是共有屬性,里面的東西變?yōu)楣灿械摹?duì)象外的用戶(hù)可以調(diào)用對(duì)象內(nèi)的類(lèi)型

      char menu();//定義 各種成員函數(shù)

      void set();//**********************旅客信息添加修改刪除函數(shù)聲明

      void AddPer();//旅客 增加信息

      void chp();//旅客 修改信息

      void dep();//旅客 刪除信息 //**********************航班信息添加修改刪除函數(shù)聲明

      《銀行帳戶(hù)管理系統(tǒng)》設(shè)計(jì)報(bào)告

      void addf();//航班 增加信息 void chf();//航班 修改信息

      void def();//航班 刪除信息 //**********************訂單信息添加修改刪除函數(shù)聲明

      void addt();//訂單中 增加信息 void cht();//訂單中 修改信息

      void det();//訂單中 刪除信息

      //**********************按條件顯示訂單信息函數(shù)聲明

      void showno();//按航班班次顯示訂單信息

      void showplace();//按出發(fā)地、目的地顯示訂單信息

      void showname();//按旅客姓名顯示訂單信息

      void save();//保存信息 void exit();//退出界面

      private:

      person a[100];//定義一個(gè)用戶(hù)的數(shù)組

      fly b[100];//定義一個(gè)航班的數(shù)組

      piao c[100];//定義一個(gè)訂單的數(shù)組

      int t;

      //旅客個(gè)數(shù) int s;

      //航班個(gè)數(shù)

      int r;//訂單個(gè)數(shù) };三個(gè)struct結(jié)構(gòu)體類(lèi)型中用于存放數(shù)據(jù),在private中定義出a[]、b[]、c[]三個(gè)數(shù)組用來(lái)存放數(shù)據(jù)。并在public中聲明出將要調(diào)用的函數(shù)。public表示是共有屬性,將里面的東西變?yōu)楣灿械?。?duì)象外的用戶(hù)也可以調(diào)用對(duì)象內(nèi)的類(lèi)型。

      然后在main函數(shù)中寫(xiě)入一個(gè)switch函數(shù)用來(lái)滿(mǎn)足用戶(hù)的選擇,依照用戶(hù)的選擇來(lái)實(shí)現(xiàn)case中的函數(shù)。case中函數(shù)來(lái)實(shí)現(xiàn)用戶(hù)的需求:例如增加、修改、刪除一個(gè)旅客資料等等。

      《銀行帳戶(hù)管理系統(tǒng)》設(shè)計(jì)報(bào)告

      2. 詳細(xì)設(shè)計(jì)

      //***********************plane創(chuàng)建一個(gè)類(lèi)m將鍵盤(pán)輸入的數(shù)據(jù)輸入進(jìn)m類(lèi)中 plane m;

      //**************************從文件流之中講數(shù)據(jù)讀取************ void plane::set()

      {

      fstream file(“person.txt”,ios::in);//定義一個(gè)文件流,以輸入的方式打開(kāi)文件

      int i=0;if(file.is_open())

      //判斷文件是否打開(kāi)

      {

      while(!file.eof())

      //判斷文件是否是最末尾端(如果不是則運(yùn)行下列代碼)

      {

      file>>m.a[i].name;//將名字寫(xiě)入到結(jié)構(gòu)體類(lèi)型person中

      file>>m.a[i].sex;

      file>>m.a[i].id;

      file>>m.a[i].from;

      file>>m.a[i].to;

      file>>m.a[i].year>>m.a[i].month>>m.a[i].day;

      if(!file.eof())//判斷文件是否是最末尾端

      i++;

      //不是的話i+1

      }

      m.t=i;

      file.close();} fstream file2(“fly.txt”,ios::in);

      //file2 3類(lèi)似 fstream file3(“piao.txt”,ios::in);//***************************講變量名中的數(shù)據(jù)輸入到文件流之中 void plane::save(){

      //*******************************將數(shù)據(jù)輸入到person文件中

      fstream file(“person.txt”,ios::out | ios::trunc);/*out以輸出方式打開(kāi)一個(gè)文件

      trunc打開(kāi)一個(gè)文件要是存在則刪除其中全部數(shù)據(jù) 若不存在則建立新文件*/

      if(file.is_open())//講變量名之中的數(shù)據(jù)輸入到file中

      {

      for(int i=0;i

      file<

      file<

      file<

      《銀行帳戶(hù)管理系統(tǒng)》設(shè)計(jì)報(bào)告

      file<

      file<

      file<

      file<

      file<

      file.close();

      } fstream file2(“fly.txt”,ios::out | ios::trunc);

      //file2 3類(lèi)似 fstream file3(“piao.txt”,ios::out | ios::trunc);

      //******************************定義一個(gè)menu char plane::menu()

      {

      int k;

      cout<<“*************************飛

      機(jī)

      統(tǒng)**********************”<

      cout<<“

      1.增加一個(gè)旅客信息

      ”<

      cout<<“

      2.修改一個(gè)旅客信息

      ”<

      cout<<“

      3.刪除一個(gè)旅客信息

      ”<

      cout<<“

      4.增加一個(gè)航班信息

      ”<

      cout<<“

      5.修改一個(gè)航班信息

      ”<

      cout<<“

      6.刪除一個(gè)航班信息

      ”<

      cout<<“

      7.增加一個(gè)訂單信息

      ”<

      cout<<“

      8.修改一個(gè)訂單信息

      ”<

      cout<<“

      9.刪除一個(gè)訂單信息

      ”<

      cout<<“

      10.按班次顯示訂單資料

      ”<

      cout<<“

      11.按航班線路顯示訂單資料

      ”<

      cout<<“

      12.按旅客姓名顯示訂單資料

      ”<

      cout<<“請(qǐng)輸入您要選擇的功能序號(hào):”;

      cin>>k;

      return k;

      //將用戶(hù)選擇的K值返回到主函數(shù)中賦值給R以此選擇case

      } //*****************************添加旅客信息—從鍵盤(pán)中將數(shù)據(jù)輸入到一個(gè)變量名之中 void plane::AddPer()

      {

      char choice;//choice用來(lái)判斷y/n

      for(int i=m.t;i<100;i++)

      {

      //**************添加旅客信息

      cout<<“添加旅客信息--姓名:”;

      cin>>m.a[i].name;

      cout<<“添加旅客信息--性別:”;

      cin>>m.a[i].sex;

      cout<<“添加旅客信息--身份證:”;

      cin>>m.a[i].id;

      cout<<“添加旅客信息--出發(fā)地:”;

      cin>>m.a[i].from;

      cout<<“添加旅客信息--目的地:”;

      cin>>m.a[i].to;

      cout<<“添加旅客信息--出發(fā)年:”;

      cin>>m.a[i].year;

      《銀行帳戶(hù)管理系統(tǒng)》設(shè)計(jì)報(bào)告

      cout<<“添加旅客信息--出發(fā)月:”;

      cin>>m.a[i].month;

      cout<<“添加旅客信息--出發(fā)日:”;

      cin>>m.a[i].day;

      m.t++;

      cout<<“一位旅客新信息輸入完成,還要繼續(xù)添加新的旅客信息么(y/n)?”;

      while(1)

      {

      cin>>choice;

      if(choice=='y'||choice=='n')

      //邏輯或 如果是y或者n則跳出while函數(shù)

      break;

      else

      cout<<“輸入錯(cuò)誤!請(qǐng)重新輸入!”<

      if(choice=='n')//如果是n的話跳出for循環(huán)

      break;

      }

      save();

      //保存旅客信息

      } //************************改變旅客信息

      void plane::chp(){

      char J[100];//定義一個(gè)數(shù)組J用于修改旅客身份證號(hào)(利用id號(hào)來(lái)進(jìn)行修改)

      cout<<“請(qǐng)輸入要修改的旅客身份證號(hào):”;

      cin>>J;

      for(int i=0;i

      if(strcmp(m.a[i].id,J)==0)

      //將已有的旅客id號(hào)和剛輸入的id號(hào)進(jìn)行比較

      break;

      if(i==m.t)

      {

      cout<<“輸入錯(cuò)誤,沒(méi)有此航班!”<

      return;

      }

      //********************輸出修改內(nèi)容 進(jìn)行修改

      cout<<“請(qǐng)輸入旅客的姓名:”;

      cin>>m.a[i].name;

      cout<<“請(qǐng)輸入旅客的性別:”;

      cin>>m.a[i].sex;

      cout<<“請(qǐng)輸入旅客的身份證號(hào):”;

      cin>>m.a[i].id;

      cout<<“請(qǐng)輸入旅客的出發(fā)地:”;

      cin>>m.a[i].from;

      cout<<“請(qǐng)輸入旅客的目的地:”;

      cin>>m.a[i].to;

      cout<<“請(qǐng)輸入旅客的出發(fā)年:”;

      cin>>m.a[i].year;

      cout<<“請(qǐng)輸入旅客的出發(fā)月:”;

      cin>>m.a[i].month;

      cout<<“請(qǐng)輸入旅客的出發(fā)日:”;

      cin>>m.a[i].day;

      save();

      cout<<“修改成功!”<

      } //**************************刪除旅客信息

      void plane::dep()

      《銀行帳戶(hù)管理系統(tǒng)》設(shè)計(jì)報(bào)告

      {

      char R[100];

      cout<<“請(qǐng)輸入要?jiǎng)h除的旅客身份證:”;cin>>R;

      for(int i=0;i

      if(strcmp(m.a[i].id,R)==0)

      break;

      if(i==m.t)

      {

      cout<<“刪除錯(cuò)誤,沒(méi)有您要?jiǎng)h除的游客!”<

      return;

      }

      m.a[i]=m.a[m.t-1];

      //將后面數(shù)組賦值到了找到的要?jiǎng)h除的數(shù)組就將那個(gè)要?jiǎng)h除的數(shù)組給刪除了

      m.t--;

      save();

      cout<<“刪除成功!”<

      之后的幾個(gè)函數(shù)都相類(lèi)似。

      //****************************添加航班信息 void plane::addf()//*****************************修改航班信息 void plane::chf()//*************************刪除航班信息 void plane::def()//***********************添加航班訂票信息 void plane::addt()//******************************修改訂票信息 void plane::cht()//*********************刪除訂單信息 void plane::det()//****************************按航班起飛降落城市來(lái)查詢(xún)訂單信息 void plane::showplace()

      {

      char H[100];

      char E[100];

      cout<<“請(qǐng)輸入要查詢(xún)的訂單航班出發(fā)地:”;

      cin>>H;

      cout<<“請(qǐng)輸入要查詢(xún)的訂單航班目的地:”;

      cin>>E;

      for(int i=0;i

      //將輸入的出發(fā)和降落城市和已存在的城市想比較來(lái)找到這筆訂單

      if(strcmp(m.c[i].chufadi,H)==0 && strcmp(m.c[i].mudidi,E)==0)

      break;

      if(i==m.r)

      {

      《銀行帳戶(hù)管理系統(tǒng)》設(shè)計(jì)報(bào)告

      cout<<“沒(méi)有此訂單!輸入錯(cuò)誤!”<

      return;

      }

      cout<<“查詢(xún)結(jié)果如下:”<

      for(i=0;i

      if(strcmp(m.c[i].chufadi,H)==0 && strcmp(m.c[i].mudidi,E)==0)

      {

      cout<<“旅客姓名:”<

      cout<<“旅客性別:”<

      cout<<“旅客身份證:”<

      cout<<“航班班次:”<

      cout<<“出發(fā)地:”<

      cout<<“目的地:”<

      cout<<“出發(fā)日期-年:”<

      cout<<“出發(fā)日期-月:”<

      cout<<“出發(fā)日期-日:”<

      }

      } //*****************************按訂單姓名來(lái)查詢(xún)訂單信息 void plane::showname()//****************************按航班班次來(lái)查詢(xún)訂單信息 void plane::showno()//***************************主函數(shù)使用switch函數(shù)來(lái)選擇各個(gè)功能 int main(){

      plane p;

      //plane定義一個(gè)p的類(lèi)

      p.set();

      /*面向?qū)ο蟮乃枷?以對(duì)象為載體下一個(gè)對(duì)象要干什么 執(zhí)行過(guò)程應(yīng)該封裝起來(lái)

      而不是像面向過(guò)程一樣講過(guò)程代碼一步一步寫(xiě)出來(lái)*/

      while(1){

      int R;

      R=p.menu();//在menu函數(shù)中選擇case然后賦值到R中然后選擇是第幾個(gè)case

      switch(R)

      {

      case 1:p.AddPer();

      break;

      case 2:p.chp();

      break;

      case 3:p.dep();

      break;

      case 4:p.addf();

      break;

      case 5:p.chf();

      break;

      case 6:p.def();

      break;

      case 7:p.addt();

      break;

      case 8:p.cht();

      break;

      《銀行帳戶(hù)管理系統(tǒng)》設(shè)計(jì)報(bào)告

      case 9:p.det();

      break;

      case 10:p.showno();

      break;

      case 11:p.showplace();

      break;

      case 12:p.showname();

      break;

      default:cout<<“輸入錯(cuò)誤,請(qǐng)重新輸入!”<

      } } return 0;}

      第二篇:數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 飛機(jī)訂票系統(tǒng)

      飛機(jī)訂票系統(tǒng)

      1.需求分析

      描述要求編程解決的問(wèn)題。以無(wú)歧義的陳述說(shuō)明程序設(shè)計(jì)的任務(wù),強(qiáng)調(diào)的是程序要做什么?明確規(guī)定:

      (a)輸入的形式和輸入值的范圍;

      (b)輸出的形式;

      (c)程序所能達(dá)到的功能;

      (d)測(cè)試數(shù)據(jù):包括正確的輸入及其輸出結(jié)果和含有錯(cuò)誤的輸入及其輸出結(jié)果。

      2.概要設(shè)計(jì)

      給出程序要達(dá)到的具體的要求。描述解決相應(yīng)問(wèn)題算法的設(shè)計(jì)思想。描述所設(shè)計(jì)程序的各個(gè)模塊(即函數(shù))功能。說(shuō)明本程序中用到的所有抽象數(shù)據(jù)類(lèi)型的定義、主程序的流程以及各程序模塊之間的層次(調(diào)用)關(guān)系。

      3.詳細(xì)設(shè)計(jì)

      實(shí)現(xiàn)概要設(shè)計(jì)中定義的所有數(shù)據(jù)類(lèi)型,對(duì)每個(gè)操作只需要寫(xiě)出流程或偽碼算法;對(duì)主程序和其他模塊也都需要寫(xiě)出流程或偽碼算法(偽碼算法達(dá)到的詳細(xì)程度建議為:按照偽碼算法可以在計(jì)算機(jī)鍵盤(pán)直接輸入高級(jí)程序設(shè)計(jì)語(yǔ)言程序);畫(huà)出函數(shù)的調(diào)用關(guān)系圖。給出所使用的基本抽象數(shù)據(jù)類(lèi)型,所定義的具體問(wèn)題的數(shù)據(jù)類(lèi)型,以及新定義的抽象數(shù)據(jù)類(lèi)型。設(shè)計(jì)出良好的輸入輸出界面(清晰易懂)。

      4.調(diào)試分析 內(nèi)容包括:

      (a)調(diào)試過(guò)程中遇到的問(wèn)題是如何解決的以及對(duì)設(shè)計(jì)與實(shí)現(xiàn)的回顧討論和分析;

      (b)算法的時(shí)空分析(包括基本操作和其他算法的時(shí)間復(fù)雜度和空間復(fù)雜度的分析)和改進(jìn)設(shè)想;

      (c)經(jīng)驗(yàn)和體會(huì)等。

      5.用戶(hù)使用說(shuō)明

      說(shuō)明如何使用你編寫(xiě)的程序,詳細(xì)列出每一步的操作步驟。

      6.測(cè)試結(jié)果

      設(shè)計(jì)測(cè)試數(shù)據(jù),或具體給出測(cè)試數(shù)據(jù)。要求測(cè)試數(shù)據(jù)能全面地測(cè)試所設(shè)計(jì)程序的功能。列出你的測(cè)試結(jié)果,包括輸入和輸出。這里的測(cè)試數(shù)據(jù)應(yīng)該完整和嚴(yán)格,最好多于需求分析中所列。

      7.測(cè)試情況:給出程序的測(cè)試情況,并分析運(yùn)行結(jié)果

      附錄(非必須,按照需要添加)

      帶注釋的源程序??梢灾涣谐龀绦蛭募那鍐?。

      需求分析

      任務(wù):通過(guò)此系統(tǒng)可以實(shí)現(xiàn)如下功能: 錄入:

      可以錄入航班情況(數(shù)據(jù)可以存儲(chǔ)在一個(gè)數(shù)據(jù)文件中,數(shù)據(jù)結(jié)構(gòu)、具體數(shù)據(jù)自定)

      查詢(xún):

      可以查詢(xún)某個(gè)航線的情況(如,輸入航班號(hào),查詢(xún)起降時(shí)間,起飛抵達(dá)城市,航班票價(jià),票價(jià)折扣,確定航班是否滿(mǎn)倉(cāng)); 可以輸入起飛抵達(dá)城市,查詢(xún)飛機(jī)航班情況;

      訂票:(訂票情況可以存在一個(gè)數(shù)據(jù)文件中,結(jié)構(gòu)自己設(shè)定)可以訂票,如果該航班已經(jīng)無(wú)票,可以提供相關(guān)可選擇航班;

      退票: 可退票,退票后修改相關(guān)數(shù)據(jù)文件;

      客戶(hù)資料有姓名,證件號(hào),訂票數(shù)量及航班情況,訂單要有編號(hào)。

      概要設(shè)計(jì)

      詳細(xì)設(shè)計(jì)

      詳列函數(shù) void list(){

      struct airline *info;

      int i=0;

      info=start;

      printf(“起點(diǎn)城市t終點(diǎn)城市t航班號(hào)t起飛時(shí)間t降落時(shí)間t總票數(shù)t余票數(shù)n”);

      while(i

      {

      display(info);

      info++;

      i++;

      }

      printf(“nn”);}

      查詢(xún)函數(shù) void search(){

      struct airline *info,*find();

      char qiname[10];

      char jiangname[10];

      int i=0;

      info=start;

      printf(“請(qǐng)輸入要起飛城市的名稱(chēng):”);

      scanf(“%s”,qiname);

      printf(“請(qǐng)輸入要抵達(dá)城市的名稱(chēng):”);

      scanf(“%s”,jiangname);

      while(i

      {

      if(!strcmp(jiangname,info->jiang_name))

      {

      break;

      }

      info++;

      i++;

      }

      if(i>=MAXSIZE)

      {

      printf(“沒(méi)有這條航線!n”);

      }

      else

      {

      printf(“起飛城市t降落城市t航班號(hào)t起飛時(shí)間t降落時(shí)間t總票數(shù)t余票數(shù)n”);

      display(info);

      } }

      struct airline *find(){

      struct airline *info;

      char number[10];

      int i=0;

      info=start;

      printf(“請(qǐng)輸入航班號(hào):”);

      scanf(“%s”,number);

      while(i

      {

      if(!strcmp(number,info->air_num))

      {

      return info;

      }

      info++;

      i++;

      }

      printf(“沒(méi)有這條航線!n”);

      return NULL;}

      訂票函數(shù) void order(){

      struct airline *info;

      char qiname[10];

      char jiangname[10];

      int amount;

      char name[10];

      char id[30];

      info=start;

      printf(“請(qǐng)輸入您的起飛城市:”);

      scanf(“%s”,qiname);

      printf(“請(qǐng)輸入您的降落城市:”);

      scanf(“%s”,jiangname);

      printf(“請(qǐng)輸入您需要的票數(shù):”);

      scanf(“%d”,&amount);

      int i=1;

      while(i<5)

      {

      if(!strcmp(info->qi_name,qiname)&&!strcmp(info->jiang_name,jiangname))

      {

      if(amount<=info->ticket_left)

      {

      int i;

      printf(“請(qǐng)輸入您的姓名:”);

      scanf(“%s”,name);

      printf(“請(qǐng)輸入您的身份證號(hào):”);

      scanf(“%s”,id);

      info->order=insertlink(info->order,amount,name,id);

      printf(“您的航班信息為:n”);

      display(info);

      for(i=0;i

      {

      printf(“%s的座位號(hào)是:%dn”,name,info->ticket_all-info->ticket_left+i+1);

      }

      info->ticket_left-=amount;

      printf(“訂票成功!n”);

      break;

      }

      else

      {

      info++;

      i++;

      }

      }

      else

      {

      info++;

      i++;

      }

      } }

      退票函數(shù)

      void returnticket(){

      struct airline *info;

      linklist *p1,*p2,*head;

      char name[10];

      if(!(info=find()))

      {

      return;

      }

      head=info->order;

      p1=head;

      printf(“請(qǐng)輸入您的姓名:”);

      scanf(“%s”,name);

      while(p1!=NULL)

      {

      if(!strcmp(name,p1->name))

      {

      break;

      }

      p2=p1;

      p1=p1->next;

      }

      if(p1==NULL)

      {

      printf(“您沒(méi)有訂過(guò)票!n”);

      return;

      }

      else

      {

      if(p1==head)

      {

      head=p1->next;

      }

      else

      {

      p2->next=p1->next;

      }

      info->ticket_left+=p1->tickets;

      printf(“%s退票成功!n”,p1->name);

      free(p1);

      }

      info->order=head;}

      存儲(chǔ)結(jié)構(gòu)

      typedef struct passenger {

      char name[10];

      int tickets;

      char id[30];

      struct passenger *next;} linklist;typedef struct airline {

      char qi_name[10];

      char jiang_name[10];

      char air_num[10];

      char qi_time[10];

      char jiang_time[10];

      int ticket_all;

      int ticket_left;

      linklist *order;} lineinfo;調(diào)試分析

      查看航線信息

      查詢(xún)航線 ① 輸入起飛城市 ② 輸入抵達(dá)城市 ③ 輸出航班信息

      辦理訂票業(yè)務(wù) ① 查詢(xún)符合的航班 ② 查詢(xún)余票量 ③ 輸出航班信息

      辦理退票業(yè)務(wù)

      源代碼

      #include #include #include #include #include #include using namespace std;#define MAXSIZE 5 typedef struct passenger {

      char name[10];

      int tickets;

      char id[30];

      struct passenger *next;} linklist;

      typedef struct airline {

      char qi_name[10];

      char jiang_name[10];

      char air_num[10];

      char qi_time[10];

      char jiang_time[10];

      int ticket_all;

      int ticket_left;

      linklist *order;} lineinfo;

      struct airline *start;

      void display(struct airline *info){ printf(“%st %10st %10st %10st %10st %5dt %5dn”,info->qi_name,info->jiang_name,info->air_num,info->qi_time,info->jiang_time,info->ticket_all,info->ticket_left);} void list(){

      struct airline *info;

      int i=0;

      info=start;

      printf(“起點(diǎn)城市t終點(diǎn)城市t航班號(hào)t起飛時(shí)間t降落時(shí)間t總票數(shù)t余票數(shù)n”);

      while(i

      {

      display(info);

      info++;

      i++;

      }

      printf(“nn”);}

      void search(){

      struct airline *info,*find();

      char qiname[10];

      char jiangname[10];

      int i=0;

      info=start;

      printf(“請(qǐng)輸入要起飛城市的名稱(chēng):”);

      scanf(“%s”,qiname);

      printf(“請(qǐng)輸入要抵達(dá)城市的名稱(chēng):”);

      scanf(“%s”,jiangname);

      while(i

      {

      if(!strcmp(jiangname,info->jiang_name))

      {

      break;

      }

      info++;

      i++;

      }

      if(i>=MAXSIZE)

      {

      printf(“沒(méi)有這條航線!n”);

      }

      else

      {

      printf(“起飛城市t降落城市t航班號(hào)t起飛時(shí)間t降落時(shí)間t總票數(shù)t余票數(shù)n”);

      display(info);

      } } struct airline *find(){

      struct airline *info;

      char number[10];

      int i=0;

      info=start;

      printf(“請(qǐng)輸入航班號(hào):”);

      scanf(“%s”,number);

      while(i

      {

      if(!strcmp(number,info->air_num))

      {

      return info;

      }

      info++;

      i++;

      }

      printf(“沒(méi)有這條航線!n”);

      return NULL;}

      linklist *insertlink(linklist *head,int amount,char name[],char id[]){

      linklist *p1,*new1;

      p1=head;

      new1=(linklist*)malloc(sizeof(linklist));

      strcpy(new1->name,name);

      new1->tickets=amount;

      new1->next=NULL;

      strcpy(new1->id,id);

      if(head==NULL)

      {

      head=new1;

      new1->next=NULL;

      }

      else

      {

      while(p1->next!=NULL)

      p1=p1->next;

      p1->next=new1;

      }

      return head;}

      void order(){

      struct airline *info;

      char qiname[10];

      char jiangname[10];

      int amount;

      char name[10];

      char id[30];

      info=start;

      printf(“請(qǐng)輸入您的起飛城市:”);

      scanf(“%s”,qiname);

      printf(“請(qǐng)輸入您的降落城市:”);

      scanf(“%s”,jiangname);

      printf(“請(qǐng)輸入您需要的票數(shù):”);

      scanf(“%d”,&amount);

      int i=1;

      while(i<5)

      {

      if(!strcmp(info->qi_name,qiname)&&!strcmp(info->jiang_name,jiangname))

      {

      if(amount<=info->ticket_left)

      {

      int i;

      printf(“請(qǐng)輸入您的姓名:”);

      scanf(“%s”,name);

      printf(“請(qǐng)輸入您的身份證號(hào):”);

      scanf(“%s”,id);

      info->order=insertlink(info->order,amount,name,id);

      printf(“您的航班信息為:n”);

      display(info);

      for(i=0;i

      {

      printf(“%s的座位號(hào)是:%dn”,name,info->ticket_all-info->ticket_left+i+1);

      }

      info->ticket_left-=amount;

      printf(“訂票成功!n”);

      break;

      }

      else

      {

      info++;

      i++;

      }

      }

      else

      {

      info++;

      i++;

      }

      } }

      void returnticket(){

      struct airline *info;

      linklist *p1,*p2,*head;

      char name[10];

      if(!(info=find()))

      {

      return;

      }

      head=info->order;

      p1=head;

      printf(“請(qǐng)輸入您的姓名:”);

      scanf(“%s”,name);

      while(p1!=NULL)

      {

      if(!strcmp(name,p1->name))

      {

      break;

      }

      p2=p1;

      p1=p1->next;

      }

      if(p1==NULL)

      {

      printf(“您沒(méi)有訂過(guò)票!n”);

      return;

      }

      else

      {

      if(p1==head)

      {

      head=p1->next;

      }

      else

      {

      p2->next=p1->next;

      }

      info->ticket_left+=p1->tickets;

      printf(“%s退票成功!n”,p1->name);

      free(p1);

      }

      info->order=head;}

      int menu_select(){

      int c;

      char s[20];

      printf(“

      訂票系統(tǒng)n”);

      printf(“-------------n”);

      printf(“

      1.查看航線信息

      printf(”

      2.查詢(xún)航線

      printf(“

      3.辦理訂票業(yè)務(wù)

      printf(”

      4.辦理退票業(yè)務(wù)

      printf(“

      5.退出系統(tǒng)

      printf(”-------------n“);

      do

      {

      printf(”請(qǐng)選擇(1-5):“);

      scanf(”%s“,s);

      c=atoi(s);

      }

      while(c<1||c>6);

      return c;

      n”);n“);n”);n“);

      n”);

      }

      int main(){

      struct airline air[MAXSIZE]=

      {

      {“harbin”,“beijing”,“1”,“12:00”,“14:00”,30,30},{“harbin”,“shanghai”,“2”,“10:00”,“13:00”,20,20},{“harbin”,“beijing”,“3”,“13:30”,“10:00”,50,50},{“harbin”,“guangzhou”,“4”,“17:00”,“21:00”,50,50},{“harbin”,“dalian”,“5”,“14:00”,“17:00”,40,40}

      };

      start=air;

      while(1)

      {

      system(“cls”);

      switch(menu_select())

      {

      case 1:

      list();

      break;

      case 2:

      search();

      break;

      case 3:

      order();

      break;

      case 4:

      returnticket();

      break;

      case 5:

      exit(0);

      }

      getch();

      } }

      經(jīng)驗(yàn)體會(huì)

      1、通過(guò)設(shè)計(jì)飛機(jī)訂票系統(tǒng),加深了對(duì)鏈表的運(yùn)用和理解。

      2、通過(guò)多組測(cè)試數(shù)據(jù),發(fā)現(xiàn)了程序的問(wèn)題,并做了調(diào)整、3、通過(guò)設(shè)計(jì)選擇菜單,對(duì)選擇結(jié)構(gòu)有更深刻的了解。

      第三篇:數(shù)據(jù)庫(kù)課程設(shè)計(jì)+飛機(jī)訂票系統(tǒng)

      飛機(jī)訂票系統(tǒng)

      1.概述(設(shè)計(jì)題目與可行性分析)

      1.1設(shè)計(jì)題目:飛機(jī)訂票系統(tǒng)

      1.2可行性分析

      飛機(jī)訂票系統(tǒng)是為機(jī)場(chǎng)工作人員和客戶(hù)提供訂票退票等與機(jī)票相關(guān)內(nèi)容的管理系統(tǒng),方便機(jī)場(chǎng)工作人員對(duì)機(jī)票的管理,以提高機(jī)場(chǎng)工作人員對(duì)機(jī)票管理工作的效率。當(dāng)前飛機(jī)訂票問(wèn)題:手工訂票所產(chǎn)生的客座率低。而我們的目標(biāo)是:建立一個(gè)飛機(jī)訂票系統(tǒng)數(shù)據(jù)庫(kù)。

      1.2.1研究現(xiàn)有系統(tǒng),畫(huà)現(xiàn)有系統(tǒng)的流程圖

      了解當(dāng)前系統(tǒng)能夠完成的功能及組成

      航班管理:票據(jù)管理

      售票點(diǎn):直接面向用戶(hù) 航班管理

      票據(jù)管理

      票庫(kù)

      訂票庫(kù)

      訂票管理

      出售管理

      打印機(jī)票

      售票點(diǎn)1 售票點(diǎn)n

      現(xiàn)有系統(tǒng):票據(jù)都分布在各個(gè)售票點(diǎn)

      1.2.2導(dǎo)出新系統(tǒng)的高層邏輯結(jié)構(gòu)

      數(shù)據(jù)流圖的基本符號(hào):

      數(shù)據(jù)源/終點(diǎn)(人機(jī)界面):

      加工處理:

      文件名

      文件: 數(shù)據(jù)流名

      數(shù)據(jù)流: 票價(jià)信息

      機(jī)票

      查訂票號(hào)

      訂票處理

      客戶(hù)信息

      出票處理

      訂票記錄

      顧客

      訂票信息

      訂票號(hào)

      庫(kù)存信息

      票價(jià)信息

      票價(jià)管理

      航班管理

      航班信息

      操作員

      航班信息

      保存

      新系統(tǒng)的數(shù)據(jù)流圖:

      說(shuō)明:流向文件的數(shù)據(jù)流的名可以省略

      1.2.3可行性分析報(bào)告

      隨著Internet的迅速發(fā)展和用戶(hù)數(shù)量的急劇增加,互聯(lián)網(wǎng)對(duì)于企業(yè)和事業(yè)單位的運(yùn)營(yíng)和發(fā)展日益重要,網(wǎng)上交易也逐漸被人們認(rèn)可,并成為未來(lái)交易的發(fā)展方向。在這種情況下,很多原有的C/S模式的系統(tǒng)也逐步向B/S模式靠攏,飛機(jī)訂票系統(tǒng)也不例外。

      飛機(jī)訂票系統(tǒng)是飛機(jī)旅游服務(wù)信息系統(tǒng)的一個(gè)重要組成部分。為旅客提供優(yōu)質(zhì)便捷的服務(wù),為了提高飛機(jī)客運(yùn)的售票效率,豐富飛機(jī)客運(yùn)的營(yíng)銷(xiāo)手段,飛機(jī)售票總站的下屬代售點(diǎn)可以通過(guò)公用的互聯(lián)網(wǎng)資源,建立數(shù)據(jù)庫(kù),實(shí)現(xiàn)網(wǎng)上的售票,查詢(xún)及管理工作。

      2.系統(tǒng)目標(biāo)和設(shè)計(jì)原則

      2.1系統(tǒng)目標(biāo):

      建立一個(gè)飛機(jī)訂票系統(tǒng)數(shù)據(jù)庫(kù)。

      2.1.1系統(tǒng)簡(jiǎn)介:

      本系統(tǒng)是專(zhuān)為乘坐飛機(jī)的旅客準(zhǔn)備的,旅客只需把自己的信息(姓名.性別.工作單位.身份證號(hào).旅行時(shí)間.旅行目的地)預(yù)先交給旅行社,旅行社就可以將信息輸入本系統(tǒng),系統(tǒng)就可以為旅客安排航班,打印出取票通知和帳單。旅客只要在飛機(jī)起飛的前一天憑取票通知單和帳單交款取單,系統(tǒng)校對(duì)無(wú)誤即印出機(jī)票給旅客。

      2.2設(shè)計(jì)原則

      2.2.1根據(jù)實(shí)際情況考慮三種可行性

      技術(shù)可行性、經(jīng)濟(jì)可行性、操作可行性

      2.2.2提出侯選方案、提出各種各樣的實(shí)現(xiàn)方案

      主機(jī)(純主機(jī)型、C/S型)、開(kāi)發(fā)環(huán)境、網(wǎng)絡(luò)方案、對(duì)提出的每個(gè)方案進(jìn)行成本估計(jì)

      硬件、軟件費(fèi)用投資(根據(jù)各公司的報(bào)價(jià))開(kāi)發(fā)成本估計(jì)(任務(wù)估算法)

      運(yùn)行費(fèi)用、投資回收期

      純收入:通過(guò)本系統(tǒng)的運(yùn)行、投資回收后的收入

      3、描述推薦理由:分別從技術(shù)、經(jīng)濟(jì)、用戶(hù)、投資方的不同角度考慮

      3.支撐環(huán)境規(guī)劃

      3.1整體系統(tǒng)運(yùn)作圖

      3.2運(yùn)行環(huán)境

      服務(wù)器:硬件配置:CPU Intel P4 1.2G以上

      內(nèi)存256 硬盤(pán) 80G以上

      軟件配置:Windows 2000/2003 SERVER SQL SERVER 2000 4.系統(tǒng)功能結(jié)構(gòu)

      1、錄入:可以錄入航班情況(數(shù)據(jù)可以存儲(chǔ)在一個(gè)數(shù)據(jù)文件中,數(shù)據(jù)結(jié)構(gòu)、具體數(shù)據(jù)自定)

      2、查詢(xún):可以查詢(xún)某個(gè)航線的情況(如,輸入航班號(hào),查詢(xún)起降時(shí)間,起飛抵達(dá)城市,航班票價(jià),票價(jià)折扣,確定航班是否滿(mǎn)倉(cāng));可以輸入起飛抵達(dá)城市,查詢(xún)飛機(jī)航班情況;

      3、訂票:(訂票情況可以存在一個(gè)數(shù)據(jù)文件中,結(jié)構(gòu)自己設(shè)定)可以訂票,如果該航班已經(jīng)無(wú)票,可以提供相關(guān)可選擇航班;

      4、退票:可退票,退票后修改相關(guān)數(shù)據(jù)文件;

      客戶(hù)資料有姓名,證件號(hào),訂票數(shù)量及航班情況,訂單要有編號(hào)。

      5、修改航班信息:當(dāng)航班信息改變可以修改航班數(shù)據(jù)文件。

      5.數(shù)據(jù)庫(kù)設(shè)計(jì)

      5.1概念結(jié)構(gòu)設(shè)計(jì)

      E-R圖如下:

      5.2邏輯結(jié)構(gòu)設(shè)計(jì)

      1.航空公司表:AIRLINE 2.客戶(hù)表CUSTOMER

      3、飛機(jī)表PLANE 4.航線表LINE 5.航班表FLIGHT 6.訂票表BOOKTICKET

      5.3實(shí)現(xiàn)設(shè)計(jì)

      實(shí)現(xiàn)以下操作:

      1、注冊(cè)航空公司:

      2、增加飛機(jī):

      3、增加航線:

      4、增加航班:

      5、增加客戶(hù):

      6、建立一個(gè)訂票的存儲(chǔ)過(guò)程,存儲(chǔ)過(guò)程名為Book_Ticket,請(qǐng)完成以下存儲(chǔ)過(guò)程,實(shí)現(xiàn)訂票的操作:

      a)指定要訂的航班號(hào)(HID)及客戶(hù)的編號(hào)(KID);

      b)先查看客戶(hù)是否為特殊客戶(hù),如果不是,票價(jià)不打折扣;

      c)否則如果客戶(hù)航程超過(guò)5萬(wàn)公里,票價(jià)7折,超過(guò)15萬(wàn)公里,票價(jià)打5折;

      d)查看客戶(hù)訂票以后,所有乘客的票數(shù)是否超過(guò)總的座位數(shù),如果超過(guò),回滾訂票操作;

      e)要求在操作過(guò)程中使用到事務(wù)技術(shù)。

      CREATE PROCEDURE Book_ticket @HID VARCHAR(20)

      @HID VARCHAR(20)

      AS DECLARE @TRANS_NAME VARCHAR(20)select @TRANS_NAME=’ ’

      BEGIN TRANSACTION DECLARE @Bookid int,@seats int,@IsSpec char(1)/*定義訂票里程DIST、折扣率discount、總的訂票里程distance、票價(jià)PRICE(實(shí)型)*/ select @Isspec=Isspec,@distance=Points FROM Customer where select @discount=1 IF @ BEGIN

      END /*選擇出票價(jià)*/ SELECT @PRICE=PRICE FROM FLIGHT WHERE /*加入客戶(hù)訂票信息*/

      /*將客戶(hù)新訂票里程的信息累計(jì)到用戶(hù)信息里面*/

      UPDATE SET WHERE /*查看客戶(hù)訂票后,是否超過(guò)可容納的座位數(shù)目,如果超過(guò),取消所有操作*/ SELECT booked=count(*)FROM WHERE FID= /*查看額定座位容量*/ SELECT @seats=seatsnum FROM WHERE

      IF @BOOKED>@SEATS

      ELSE

      COMMIT TRANSACTION GO 7.運(yùn)行這個(gè)訂票操作的存儲(chǔ)過(guò)程(自己設(shè)定客戶(hù)及航班)

      book_ticket , 8.事務(wù)運(yùn)行成功后,再顯示各表的數(shù)據(jù),按表分別寫(xiě)出來(lái)。

      6.總體實(shí)施計(jì)劃

      6.1可行性研究:

      研究現(xiàn)有系統(tǒng),畫(huà)現(xiàn)有系統(tǒng)的流程圖,編寫(xiě)可行性分析報(bào)告

      6.2進(jìn)行數(shù)據(jù)庫(kù)設(shè)計(jì):

      概念結(jié)構(gòu)設(shè)計(jì),邏輯結(jié)構(gòu)設(shè)計(jì),實(shí)現(xiàn)設(shè)計(jì)

      6.3概要設(shè)計(jì):

      從數(shù)據(jù)流圖導(dǎo)出初始結(jié)構(gòu)圖,設(shè)計(jì)優(yōu)化 6.4詳細(xì)設(shè)計(jì):

      結(jié)構(gòu)化的程序設(shè)計(jì),采用流程圖的形式

      6.5保密設(shè)計(jì)

      1.每個(gè)用戶(hù)需要注冊(cè)才能進(jìn)入航空訂票信息系統(tǒng),并進(jìn)行網(wǎng)上訂票的。用戶(hù)必須

      用自己真實(shí)的身份進(jìn)行注冊(cè)。

      2.系統(tǒng)要另外在備一份數(shù)據(jù)庫(kù),防止系統(tǒng)出現(xiàn)錯(cuò)誤而使數(shù)據(jù)信息丟失的可能性。

      3.系統(tǒng)要安裝防火墻,防止黑客入侵破壞系統(tǒng)。還有就是安裝殺毒軟件,防止

      病毒入侵而導(dǎo)致系統(tǒng)癱瘓。

      6.6維護(hù)設(shè)計(jì)

      系統(tǒng)設(shè)置提供管理員操作頁(yè)面:

      1.提供管理員密碼,方便維護(hù)操作.2.固定時(shí)間對(duì)系統(tǒng)進(jìn)行維護(hù)和檢測(cè).3.若系統(tǒng)出現(xiàn)癱瘓時(shí),可出動(dòng)備用系統(tǒng)維持運(yùn)轉(zhuǎn).4.定期對(duì)系統(tǒng)進(jìn)行更新整頓清空.7.總結(jié)

      這次數(shù)據(jù)庫(kù)課程設(shè)計(jì)的“飛機(jī)訂票系統(tǒng)”,通過(guò)近一周的上機(jī)操作,充分應(yīng)用了所學(xué)的數(shù)據(jù)庫(kù)的知識(shí),并去圖書(shū)館查閱了一些書(shū)集和上網(wǎng)搜索一部分相當(dāng)資料,粗略設(shè)計(jì)出該系統(tǒng)??傮w上來(lái)說(shuō),這次課程設(shè)計(jì)還是比較成功的,充分運(yùn)用了所學(xué)的軟件工程設(shè)計(jì)、數(shù)據(jù)庫(kù)的設(shè)計(jì),設(shè)計(jì)出E-R圖、流程圖、數(shù)據(jù)庫(kù)基本表,從整體規(guī)劃出了系統(tǒng)的運(yùn)行環(huán)境和系統(tǒng)實(shí)現(xiàn)的功能。

      當(dāng)然,由于學(xué)藝不精,在課程設(shè)計(jì)的過(guò)程也碰到的一些問(wèn)題。其中,畫(huà)E-R圖時(shí),各實(shí)體中的關(guān)系的確定,由于對(duì)系統(tǒng)還不夠了解而找不到一個(gè)準(zhǔn)確的詞來(lái)形容;總體規(guī)劃時(shí),材料太多,不易整理;相關(guān)數(shù)據(jù)庫(kù)技術(shù)方面沒(méi)有多注意,這次課程設(shè)計(jì)的重點(diǎn)只在對(duì)整個(gè)系統(tǒng)的總體思路設(shè)計(jì)。

      其實(shí)這些通過(guò)最近的課程設(shè)計(jì)覺(jué)得最重要一點(diǎn)就是:我們一定要自己動(dòng)手,這樣才能真正的學(xué)到東西。書(shū)本知識(shí)固然重要,但我們更要學(xué)會(huì)將書(shū)本知識(shí)應(yīng)用到實(shí)際的工作中。實(shí)踐中才會(huì)發(fā)現(xiàn)錯(cuò)誤,也才能改進(jìn),才能達(dá)到學(xué)習(xí)的最終目的。

      最后感謝在這次課程設(shè)計(jì)中幫助過(guò)我的老師,同學(xué)!8.參考文獻(xiàn)

      物流信息系統(tǒng)

      趙剛 四川大學(xué)人民出版社 2002/9 物流信息管理

      尹濤 東北財(cái)經(jīng)大學(xué)出版社

      2005/1 數(shù)據(jù)庫(kù)系統(tǒng)概論

      王珊 薩師煊 高等教育出版社 2006/5 數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用-Access2000篇 郭力平人民郵電出版社

      2002/8 軟件設(shè)計(jì)師教程 陳平禇華

      清華大學(xué)出版社 2006/6 文章引用自:

      第四篇:C語(yǔ)言課程設(shè)計(jì)——飛機(jī)訂票系統(tǒng)源代碼

      #include //標(biāo)準(zhǔn)輸入、輸出頭文件 #include //包含字符串函數(shù)處理頭文件 #include

      //包含access函數(shù)的頭文件 #define N 9999

      //定義最多的航班數(shù)

      #define PRINT “%dtt%stt%stt星期%stt%dn ”,s[i].num,s[i].start,s[i].over,s[i].time,s[i].count

      //宏定義輸出格式

      struct air

      //定義結(jié)構(gòu)體數(shù)組 { int num;

      //定義航班號(hào)

      char start[20];//航班起始站

      char over[20];//終點(diǎn)站

      char time[10];//飛行時(shí)間

      int count;

      //機(jī)票數(shù)量 }s[N];

      int i,m=0;

      //定義全局變量 char ii[10];

      void add();//函數(shù)聲明增加航班信息函數(shù) void print();

      //顯示航班信息 void search();//查找航班信息 void dingpiao();//訂票業(yè)務(wù) void tuipiao();//退票 void read();//讀取文件

      void save();//保存文件 void output();//輸出格式 void paixu();//航班排序 void chushihua();//系統(tǒng)初始化 void build();//建立數(shù)據(jù)文件 void paixu1();//按航班號(hào)從小到大排序 void paixu2();//從大到小

      void main()//主函數(shù) { int j;

      chushihua();//系統(tǒng)初始化判斷是否存在原始數(shù)據(jù)文件

      printf(“

      歡迎使用飛機(jī)訂票系統(tǒng)n”);//打印出系統(tǒng)主界面

      do {

      printf(“================================== ”);

      printf(“1.增加航班信息n”

      “t2.瀏覽航班信息n”

      “tt3.查找航班信息(按航班號(hào))tt╮(╯_╰)╭n”

      “ttt4.航班排序(按航班號(hào))n”

      “tttt5.訂票業(yè)務(wù)n”

      “to(︶︿︶)ottt6.退票業(yè)務(wù)n”

      “tttttt0.退出n”);printf(“================================== ”);

      printf(“請(qǐng)?jiān)?-6中選擇以回車(chē)鍵結(jié)束: ”);scanf(“%d”,&j);switch(j){

      case 1: add();//調(diào)用增加航班函數(shù)

      break;

      case 2:print();//調(diào)用顯示模塊

      break;

      case 3:search();//調(diào)用查找模塊

      break;

      case 4:paixu();//調(diào)用排序函數(shù)

      break;

      case 5:dingpiao();//調(diào)用訂票模塊

      break;

      case 6:tuipiao();//調(diào)用退票模塊

      break;

      case 0:

      //退出系統(tǒng)

      save();

      printf(“謝謝使用,再見(jiàn)!”);

      break;} }while(j!=0);//判斷是否調(diào)用其他函數(shù)

      }

      void chushihua()//定義系統(tǒng)初始化函數(shù) { if(access(“hangban.dat”,0)){

      build();} else

      read();} void build()//定義建立數(shù)據(jù)文件函數(shù) { FILE *fp;//定義文件指針

      if((fp=fopen(“hangban.dat”,“wb”))==NULL)//打開(kāi)文件并判定是否出錯(cuò)

      {

      printf(“創(chuàng)建文件失敗!”);//打印出錯(cuò)提示

      getchar();

      return;} printf(“請(qǐng)依次輸入航班信息(以回車(chē)鍵結(jié)束):n”);

      //打印提示信息

      printf(“------------n”);for(i=0;i

      printf(“請(qǐng)輸入航班號(hào): ”);

      scanf(“%d”,&s[i].num);//輸入航班號(hào)

      printf(“請(qǐng)輸入起始站: ”);

      scanf(“%s”,s[i].start);//輸入起始站

      printf(“請(qǐng)輸入終點(diǎn)站: ”);

      scanf(“%s”,s[i].over);//輸入終點(diǎn)站

      printf(“請(qǐng)輸入時(shí)間(星期幾): ”);

      scanf(“%s”,s[i].time);//輸入時(shí)間

      printf(“請(qǐng)輸入機(jī)票數(shù): ”);

      scanf(“%d”,&s[i].count);//輸入機(jī)票數(shù)

      fwrite(&s[i],sizeof(struct air),1,fp);

      m++;

      printf(“添加完畢,是否繼續(xù)添加?請(qǐng)鍵入y或n以回車(chē)鍵結(jié)束:”);

      scanf(“%s”,ii);

      if(strcmp(ii,“y”)!=0)

      //判斷是否繼續(xù)添加航班信息

      {

      fclose(fp);

      //關(guān)閉文件

      return;

      } } }

      void read()

      //定義讀取文件函數(shù) { FILE *fp;if((fp=fopen(“hangban.dat”,“r”))==NULL){

      printf(“創(chuàng)建文件失敗!”);

      getchar();

      return;} i=0;while(!feof(fp)){

      fread(&s[i],sizeof(struct air),1,fp);//逐塊讀取數(shù)據(jù)

      i++;

      m++;//計(jì)算存在航班數(shù)

      } m--;fclose(fp);}

      void save()//定義保存函數(shù) { FILE *fp;if((fp=fopen(“hangban.dat”,“wb”))==NULL)

      {

      printf(“創(chuàng)建文件失敗!”);

      getchar();

      return;} for(i=0;i

      //逐塊保存數(shù)據(jù)

      fwrite(&s[i],sizeof(struct air),1,fp);fclose(fp);}

      void add()//定義增加航班信息函數(shù) { do{

      printf(“請(qǐng)依次輸入您要增加的航班信息(以回車(chē)鍵結(jié)束): n”);

      //打印提示信息

      printf(“------------n”);

      printf(“請(qǐng)輸入航班號(hào): ”);

      scanf(“%d”,&s[m].num);//讀取航班號(hào)

      printf(“請(qǐng)輸入起始站: ”);

      scanf(“%s”,s[m].start);//讀取起始站

      printf(“請(qǐng)輸入終點(diǎn)站: ”);

      scanf(“%s”,s[m].over);//讀取終點(diǎn)站

      printf(“請(qǐng)輸入時(shí)間: ”);

      scanf(“%s”,s[m].time);//讀取時(shí)間

      printf(“請(qǐng)輸入機(jī)票數(shù): ”);

      scanf(“%d”,&s[m].count);//讀取機(jī)票數(shù)

      m++;

      printf(“添加完畢,是否繼續(xù)添加?請(qǐng)鍵入y或n以回車(chē)鍵結(jié)束:”);

      scanf(“%s”,ii);}while(!strcmp(ii,“y”));//判斷是否繼續(xù)添加 }

      void output()//定義輸出格式函數(shù) { printf(“航班號(hào)tt起始站tt終點(diǎn)站tt時(shí)間tt機(jī)票數(shù)n”);//信息標(biāo)題

      for(i=0;i

      printf(PRINT);//打印出信息

      }

      void print()//定義顯示航班信息函數(shù) { printf(“n目前我們有如下航班:n”);output();

      //調(diào)用輸出格式函數(shù)

      printf(“n請(qǐng)按回車(chē)鍵返回上層菜單 ”);getchar();getchar();}

      void search()//定義查詢(xún)函數(shù) { int n;

      do {

      printf(“n請(qǐng)輸入航班號(hào): ”);

      scanf(“%d”,&n);//輸入查詢(xún)的航班號(hào)

      for(i=0;i

      {

      if(s[i].num==n)//按航班號(hào)判定輸出條件

      {

      printf(“n您所查找的航班信息為:n ”);

      printf(“航班號(hào)tt起始站tt終點(diǎn)站tt時(shí)間tt機(jī)票數(shù) nn”);

      printf(PRINT);//顯示信息

      printf(“n查詢(xún)完畢,按回車(chē)鍵繼續(xù)”);

      getchar();

      getchar();

      return;

      } } printf(“n對(duì)不起,沒(méi)有您需要的信息!n ”);printf(“是否重新查找?請(qǐng)鍵入y或n以回車(chē)鍵結(jié)束 ”);scanf(“%s”,ii);}while(!strcmp(ii,“y”));//判定是否重新查找 }

      void dingpiao()//定義訂票業(yè)務(wù)函數(shù) { int n;char a[10]=“y”;do {

      search();//調(diào)用查詢(xún)模塊

      if(!strcmp(ii,“n”))

      {

      printf(“對(duì)不起!沒(méi)有找到您所需要的航班,所以不能訂票。n”);//未查找到所需航班

      printf(“n請(qǐng)按回車(chē)鍵返回上層菜單 ”);

      getchar();

      getchar();

      strcpy(ii,“n”);

      break;

      }

      do

      {

      printf(“請(qǐng)輸入您要訂的機(jī)票數(shù)(以回車(chē)鍵結(jié)束): ”);

      scanf(“%d”,&n);//輸入所訂機(jī)票數(shù)

      if(n<=0)

      //判定機(jī)票數(shù)是否出錯(cuò)

      {

      printf(“輸入錯(cuò)誤!至少需訂1張機(jī)票。n”);

      }

      else if(s[i].count==0)//判定機(jī)票是否售完

      {

      printf(“對(duì)不起,你所選擇的航班的機(jī)票已售完!n”);

      break;

      }

      else if(s[i].count!=0&&s[i].count>=n)//判定機(jī)票數(shù)是否大于等于訂票數(shù)

      {

      s[i].count=s[i].count-n;

      printf(“訂票成功!”);

      break;

      }

      else if(s[i].count

      {

      printf(“對(duì)不起,你所選擇的航班只剩 %d張機(jī)票n”, s[i].count);

      printf(“是否需要重新輸入機(jī)票數(shù)?請(qǐng)輸入y或n以回車(chē)鍵結(jié)束: ”);//判定是否重新輸入訂票數(shù)

      scanf(“%s”,a);

      }

      }while(!strcmp(a,“y”));

      printf(“是否需要訂其他航班的機(jī)票?請(qǐng)輸入y或n以回車(chē)鍵結(jié)束: ”);

      scanf(“%s”,a);}while(!strcmp(a,“y”));//判定是否繼續(xù)訂票 }

      void tuipiao()//定義退票函數(shù) { int n;char a[10];do {

      search();//調(diào)用查詢(xún)函數(shù)

      if(!strcmp(ii,“n”))

      {

      printf(“對(duì)不起!沒(méi)有找到您所需要的航班,所以不能退票。n”);

      printf(“n請(qǐng)按回車(chē)鍵返回上層菜單 ”);

      getchar();

      getchar();

      strcpy(ii,“n”);

      break;

      }

      printf(“請(qǐng)輸入您要退的機(jī)票數(shù)目: ”);

      scanf(“%d”,&n);//輸入所退票數(shù)

      if(n<=0)

      //判定票數(shù)是否有效

      printf(“輸入錯(cuò)誤!至少需退1張機(jī)票。”);

      else

      {

      s[i].count=s[i].count+n;

      printf(“退票成功!”);

      }

      printf(“是否繼續(xù)? 請(qǐng)鍵入y或n以回車(chē)鍵結(jié)束: ”);//判定是否繼續(xù)退票

      scanf(“%s”,a);}while(!strcmp(a,“y”));//判定并跳出循環(huán)

      }

      void paixu()//定義排序函數(shù) { int n;

      printf(“n******************************************************************************** ”);

      printf(“1.按航班號(hào)從小到大排序n”

      “t2.按航班號(hào)從大到小排序n”);printf(“******************************************************************************** ”);

      printf(“請(qǐng)?jiān)?-2中選擇以回車(chē)鍵結(jié)束: ”);scanf(“%d”,&n);//輸入排序方式

      switch(n){

      case 1:paixu1();//調(diào)用從小到大排序函數(shù)

      break;

      case 2:paixu2();//調(diào)用從大到小排序函數(shù)

      break;} printf(“排序后的航班信息為:n”);output();

      //顯示排序后航班信息

      printf(“n請(qǐng)按回車(chē)鍵返回上層菜單 ”);

      getchar();

      getchar();}

      void paixu1()//定義從小到大排序函數(shù) { int k,j;struct air t;for(i=0;i

      {

      k=i;

      for(j=i+1;j

      if(s[k].num>s[j].num)

      k=j;

      if(i!=k)

      {

      t=s[k];

      s[k]=s[i];

      s[i]=t;

      } } }

      void paixu2()//定義從大到小排序函數(shù) {

      } int k,j;struct air t;for(i=0;i

      if(s[k].num

      k=j;if(i!=k){

      t=s[k];

      s[k]=s[i];

      s[i]=t;} }

      第五篇:數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)c語(yǔ)言版《飛機(jī)訂票系統(tǒng)》

      軟件工程專(zhuān)業(yè)14級(jí)

      《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)報(bào)告

      設(shè)計(jì)題目: 飛機(jī)訂票系統(tǒng) 班 級(jí): 軟 件14 姓 名: 指導(dǎo)教師:

      2015年 11月20日

      目錄

      一、設(shè)計(jì)任務(wù)與要求........................................................1 1.1 總體目標(biāo)與任務(wù)要求................................................1 1.2 題目選擇與目的意義................................................1 1.3 所選題目的主要工作................................................1

      二、需求分析..............................................................2 2.1 用戶(hù)需求分析......................................................2 2.2 功能需求分析......................................................2 2.3 系統(tǒng)需求分析......................................................2

      三、概要設(shè)計(jì)..............................................................3 3.1 各模塊的算法設(shè)計(jì)說(shuō)明..............................................3 3.2 存儲(chǔ)結(jié)構(gòu)設(shè)計(jì)說(shuō)明..................................................8

      四、詳細(xì)設(shè)計(jì).............................................................10

      五、源代碼...............................................................11

      六、運(yùn)行結(jié)果分析.........................................................21

      七、收獲與體會(huì)...........................................................28

      八、主要參考資料.........................................................28

      一、設(shè)計(jì)任務(wù)與要求

      1.1 總體目標(biāo)與任務(wù)要求

      制作一個(gè)訂票系統(tǒng),通過(guò)此系統(tǒng)可以實(shí)現(xiàn)如下功能: 1)錄入

      可以錄入航班情況(數(shù)據(jù)可以存儲(chǔ)在一個(gè)數(shù)據(jù)文件中,數(shù)據(jù)結(jié)構(gòu)、具體數(shù)據(jù)自定)。2)查詢(xún)

      可以查詢(xún)某個(gè)航線的情況(如,輸入航班號(hào),查詢(xún)起降時(shí)間,起飛抵達(dá)城市,航班票價(jià),票價(jià)折扣,確定航班是否滿(mǎn)倉(cāng))可以輸入起飛抵達(dá)城市,查詢(xún)飛機(jī)航班情況。3)訂票

      可以訂票,如果該航班已經(jīng)無(wú)票,可以提供相關(guān)可選擇的航班(訂票情況可以存在一個(gè)數(shù)據(jù)文件中,結(jié)構(gòu)自己設(shè)定)。4)退票

      可退票,退票后修改相關(guān)數(shù)據(jù)文件;客戶(hù)資料有姓名,證件號(hào),訂票數(shù)量及航班情況,訂單要有編號(hào)。5)修改航班信息

      當(dāng)航班信息改變可以修改航班數(shù)據(jù)文件。

      根據(jù)以上功能說(shuō)明,設(shè)計(jì)航班信息,訂票信息的存儲(chǔ)結(jié)構(gòu),設(shè)計(jì)程序完成功能。

      1.2 題目選擇與目的意義

      選擇這個(gè)題目的原因是,訂票系統(tǒng)在現(xiàn)實(shí)生活中應(yīng)用很廣泛,通過(guò)這個(gè)系統(tǒng)可以使訂票、退票等變得簡(jiǎn)便。與傳統(tǒng)的人工用紙、筆來(lái)記錄辦理訂票、退票等相比,使用這個(gè)系統(tǒng)也會(huì)增加工作效率。這個(gè)題目做出來(lái)的系統(tǒng)還是比較實(shí)用的,所以我選擇了訂票系統(tǒng)這個(gè)題目。

      完成此系統(tǒng),需要綜合運(yùn)用數(shù)據(jù)結(jié)構(gòu)課程中學(xué)到的幾種典型數(shù)據(jù)結(jié)構(gòu),以及程序設(shè)計(jì)語(yǔ)言(C語(yǔ)言),自行實(shí)現(xiàn)一個(gè)較為完整的應(yīng)用系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā)。通過(guò)課程設(shè)計(jì),自己通過(guò)系統(tǒng)分析、系統(tǒng)設(shè)計(jì)、編程調(diào)試,寫(xiě)實(shí)驗(yàn)報(bào)告等環(huán)節(jié),進(jìn)一步掌握應(yīng)用系統(tǒng)設(shè)計(jì)的方法和步驟,靈活運(yùn)用并深刻理解典型數(shù)據(jù)結(jié)構(gòu)在軟件開(kāi)發(fā)中的應(yīng)用。學(xué)會(huì)將知識(shí)應(yīng)用于實(shí)際的方法,提高分析和解決問(wèn)題的能力,增加綜合能力。1.3 所選題目的主要工作

      這個(gè)題目的主要工作是使訂票系統(tǒng)可以錄入航班情況,查詢(xún)某個(gè)航線的情況、辦理訂票、辦理退票、修改航班信息、查詢(xún)訂票信息等。

      第 1 頁(yè)

      二、需求分析

      2.1 用戶(hù)需求分析

      用戶(hù)使用此程序所要完成的工作主要為:查詢(xún)所有航線信息、查看已訂票客戶(hù)信息、查詢(xún)航線、辦理訂票業(yè)務(wù)、辦理退票業(yè)務(wù)。通過(guò)此系統(tǒng)可以方便的進(jìn)行上述工作。

      每條航線所涉及的信息有:終點(diǎn)站名、航班號(hào)、飛行時(shí)間、票價(jià)、乘員定額、余票量。

      已訂票的客戶(hù)名單信息包括姓名、訂票量、艙位等級(jí)(1,2或3)。等候替補(bǔ)的客戶(hù)名單信息包括姓名、所需票量。

      查詢(xún)航線功能可以根據(jù)旅客提出的終點(diǎn)站名輸出航班號(hào)、飛行時(shí)間、票價(jià)、乘員定額、余票量。

      訂票業(yè)務(wù)功能根據(jù)客戶(hù)提出的要求(航班號(hào)、訂票數(shù)額)查詢(xún)?cè)摵桨嗥鳖~情況,若尚有余票,則為客戶(hù)辦理訂票手續(xù),輸出座位號(hào);若已滿(mǎn)員或余票額少于定票額,則需重新詢(xún)問(wèn)客戶(hù)要求。若需要,可登記排隊(duì)候補(bǔ)購(gòu)票。

      退票業(yè)務(wù)功能根據(jù)客戶(hù)提供的情況(航班號(hào)、姓名)為客戶(hù)辦理退票手續(xù),然后查詢(xún)?cè)摵桨嗍欠裼腥伺抨?duì)候補(bǔ),首先詢(xún)問(wèn)排在第一的客戶(hù),若所退票額能滿(mǎn)足他的要求,則為他辦理訂票手續(xù),否則依次詢(xún)問(wèn)其他排隊(duì)候補(bǔ)的客戶(hù)。2.2 功能需求分析

      功能需求分析模塊圖如圖2.1所示。

      圖2.1 功能模塊圖

      2.3 系統(tǒng)需求分析

      第 2 頁(yè)

      開(kāi)發(fā)環(huán)境: Windows 7系統(tǒng)

      使用軟件:編寫(xiě)實(shí)驗(yàn)報(bào)告:Microsoft Office Word 制 作 程 序:Microsoft Visual C++ 6.0

      三、概要設(shè)計(jì)

      3.1 各模塊的算法設(shè)計(jì)說(shuō)明

      1.瀏覽航線信息功能,調(diào)用display函數(shù)進(jìn)行輸出。如圖3.1所示。航線信息流程圖:

      圖3.1 瀏覽航線信息流程圖:

      其中display函數(shù)的流程圖如圖3.2 display函數(shù)流程圖:

      瀏覽第 3 頁(yè)

      圖3.2 display函數(shù)流程圖

      2.瀏覽已訂票客戶(hù)信息功能,按順序輸出客戶(hù)信息鏈表中的信息。流程圖如圖3.3 瀏覽已訂票客戶(hù)信息功能流程圖:

      圖3.3 瀏覽已訂票客戶(hù)信息功能流程圖

      3.查詢(xún)航線功能,根據(jù)客戶(hù)提出的終點(diǎn)站名輸出航線信息。流程圖如圖3.4 查詢(xún)航線流程圖:

      第 4 頁(yè)

      圖3.4 查詢(xún)航線流程圖

      4.辦理訂票業(yè)務(wù)功能,根據(jù)客戶(hù)提出的航線信息等進(jìn)行訂票。流程圖如圖3.5 辦理訂票業(yè)務(wù)功能流程圖:

      第 5 頁(yè)

      圖3.5 辦理訂票業(yè)務(wù)功能流程圖

      5.辦理退票業(yè)務(wù)功能,根據(jù)客戶(hù)提出的航線信息等進(jìn)行退票。流程圖如圖3.6 辦理退票業(yè)務(wù)功能流程圖:

      第 6 頁(yè)

      圖3.6 辦理退票業(yè)務(wù)功能流程圖

      6.主函數(shù)流程圖如圖3.7 主函數(shù)流程圖:

      第 7 頁(yè)

      圖3.7 主函數(shù)流程圖

      3.2 存儲(chǔ)結(jié)構(gòu)設(shè)計(jì)說(shuō)明

      typedef struct wat_ros

      /*單鏈隊(duì)列存儲(chǔ)等候替補(bǔ)的客戶(hù)信息*/ {

      char name[10];

      /*姓名*/ int req_amt;

      /*訂票量*/ struct wat_ros *next;

      }qnode,*qptr;

      第 8 頁(yè)

      typedef struct pqueue

      /*等候替補(bǔ)的客戶(hù)名單*/ {

      qptr front;

      qptr rear;

      }linkqueue;上述單鏈隊(duì)列用來(lái)存儲(chǔ)排隊(duì)等候的客戶(hù)名單,這樣可以通過(guò)隊(duì)先進(jìn)先出的特點(diǎn)來(lái)進(jìn)行操作。先排隊(duì)的客戶(hù)可以先訂票成功。

      typedef struct ord_ros

      /*乘員名單*/ {

      char name[10];

      /*客戶(hù)姓名*/ int ord_amt;int grade;

      /*訂票量*/

      /*艙位等級(jí)*/ struct ord_ros *next;}linklist;上述單鏈表用來(lái)存儲(chǔ)乘員的信息,包括姓名、訂票量、艙位等級(jí)。struct airline

      /*航線信息*/ {

      char ter_name[10];

      /*抵達(dá)城市*/ char air_num[10];

      /*航班號(hào)*/ char time[10];

      /*飛機(jī)時(shí)間*/ char pri[7];

      /*票價(jià)*/ int tkt_amt;

      /*乘員定額*/ int tkt_sur;

      /*余票量*/ linklist *order;

      /*乘員名單域,指向乘員名單鏈表的頭指針*/ linkqueue wait;

      /*等候替補(bǔ)的客戶(hù)名單域,分別指向排隊(duì)等候名單隊(duì)頭隊(duì)尾的指針*/ }lineinfo;這個(gè)結(jié)構(gòu)體存儲(chǔ)了航線信息,包括抵達(dá)城市、航班號(hào)、飛行時(shí)間、票價(jià)、乘員定額、余票量等。

      #define MAXSIZE 5

      /*定義航線數(shù)量,可修改*/ struct airline air[MAXSIZE]=

      /*初始化航線信息*/ {

      {“beijing”,“1”,“1200”,“860”,30,30}, {“shanghai”,“2”,“1000”,“770”,20,20}, {“l(fā)ondon”,“3”,“1330”,“960”,10,10},第 9 頁(yè)

      };{“harbin”,“4”,“1700”,“760”,50,50}, {“dalian”,“5”,“1400”,“550”,40,40} 通過(guò)修改全局變量MAXSIZE的數(shù)值即可更改航線數(shù)。在struct airline air[MAXSIZE]中可以修改、增加、刪除航線信息。航線信息內(nèi)容依次為抵達(dá)城市、航班號(hào)、飛行時(shí)間、票價(jià)、乘員定額、余票量(飛行時(shí)間1200即12:00)。

      四、詳細(xì)設(shè)計(jì)

      1.查看航線信息

      編寫(xiě)void list()函數(shù)來(lái)查看全部航線信息。其中調(diào)用了void display(struct airline *info)函數(shù),該函數(shù)的功能是打印每條航線的基本信息。這樣即可按順序打印出struct airline鏈表中存儲(chǔ)的全部航線信息。2.查看已訂票客戶(hù)信息

      編寫(xiě)void prtlink()函數(shù)來(lái)查看已訂票客戶(hù)信息。這個(gè)函數(shù)中需要輸入要查詢(xún)的航線,通過(guò)find()函數(shù)來(lái)尋找這個(gè)航線然后輸出該航線乘員域的乘員信息。3.查詢(xún)航線

      編寫(xiě)void search()函數(shù)來(lái)實(shí)現(xiàn)查詢(xún)航線的功能。用戶(hù)輸入抵達(dá)城市名,該函數(shù)會(huì)在航線信息鏈表中進(jìn)行查詢(xún)。如果有該城市,則會(huì)輸出此航線的信息。4.辦理訂票業(yè)務(wù)

      編寫(xiě)void order()函數(shù)來(lái)實(shí)現(xiàn)訂票功能。首先提示用戶(hù)輸入航班號(hào),然后調(diào)用find()函數(shù)來(lái)查找此航班,如果該航班存在,則會(huì)提示用戶(hù)輸入信息并調(diào)用linklist *insertlink(linklist *head,int amount,char name[],int grade)在訂票乘員名單域中添加客戶(hù)信息。如果余票不足,則會(huì)提示用戶(hù)進(jìn)行排隊(duì),如果排隊(duì),則會(huì)調(diào)用提示用戶(hù)輸入信息并調(diào)用linkqueue appendqueue(linkqueue q,char name[],int amount)在排隊(duì)等候乘員名單域中添加客戶(hù)信息。5.辦理退票業(yè)務(wù)

      編寫(xiě)void return_tkt()函數(shù)來(lái)實(shí)現(xiàn)退票功能。首先提示用戶(hù)輸入航班號(hào),然后調(diào)用find()函數(shù)來(lái)查找此航班,如果該航班存在,則會(huì)提示用戶(hù)輸入信息,信息正確則會(huì)提示退票成功。此時(shí)將乘員信息中的該乘員信息刪除,然后檢查替補(bǔ)乘員鏈表中的信息,如果其訂票量可以得到滿(mǎn)足,則會(huì)將其插入到訂票客戶(hù)名單鏈表中,提示他訂票成功。6.退出系統(tǒng)

      主函數(shù)中無(wú)限循環(huán)輸出菜單for(;;),用戶(hù)在菜單頁(yè)面下輸入6回車(chē)即exit(0),即可退出系統(tǒng)。

      第 10 頁(yè)

      五、源代碼

      #include #include #include #include #include

      #define MAXSIZE 5

      /*定義航線數(shù)量,可修改*/

      typedef struct wat_ros

      /*單鏈隊(duì)列存儲(chǔ)等候替補(bǔ)的客戶(hù)信息*/ {

      char name[10];

      /*姓名*/ int req_amt;

      /*訂票量*/ struct wat_ros *next;

      }qnode,*qptr;typedef struct pqueue

      /*等候替補(bǔ)的客戶(hù)名單*/ {

      qptr front;

      /*等候替補(bǔ)客戶(hù)名單域的隊(duì)頭指針*/ qptr rear;

      /*等候替補(bǔ)客戶(hù)名單域的隊(duì)尾指針*/ }linkqueue;

      typedef struct ord_ros

      /*乘員名單*/ {

      char name[10];

      /*客戶(hù)姓名*/ int ord_amt;

      /*訂票量*/

      int grade;

      /*艙位等級(jí)*/ struct ord_ros *next;}linklist;

      struct airline {

      char ter_name[10];

      /*抵達(dá)城市*/ char air_num[10];

      /*航班號(hào)*/ char time[10];

      /*飛機(jī)時(shí)間*/ char pri[7];

      /*票價(jià)*/

      第 11 頁(yè)

      int tkt_amt;

      /*乘員定額*/ int tkt_sur;

      /*余票量*/ linklist *order;

      /*乘員名單域,指向乘員名單鏈表的頭指針*/ linkqueue wait;

      /*等候替補(bǔ)的客戶(hù)名單域,分別指向排隊(duì)等候名單隊(duì)頭隊(duì)尾的指針*/ }lineinfo;struct airline *start;

      void display(struct airline *info)

      /*打印每條航線的基本信息*/ { }

      void list()

      /*打印全部航線信息*/ {

      }

      void search()

      /*根據(jù)客戶(hù)提出的終點(diǎn)站名輸出航線信息*/ {

      printf(“%8st%3st%stt%4st%3dt%10dn”,info->ter_name,info->air_num,info->time,info->pri,info->tkt_amt,info->tkt_sur);struct airline *info;int i=0;info=start;printf(“終點(diǎn)站名t航班號(hào)t飛行時(shí)間t票價(jià)t乘員定額t余票量n”);while(i

      } printf(“nn”);display(info);

      /*調(diào)用display函數(shù)來(lái)輸出*/ info++;i++;struct airline *info,*find();char name[10];

      /*要抵達(dá)的城市名稱(chēng)*/ int i=0;info=start;

      第 12 頁(yè)

      printf(“請(qǐng)輸入要抵達(dá)城市的名稱(chēng):”);scanf(“%s”,name);while(iter_name))/*有該站名strcmp則返回,if(!0)即break*/

      {

      break;

      }

      info++;

      i++;} if(i>=MAXSIZE)

      /*沒(méi)有匹配的航線*/ {

      printf(“對(duì)不起,沒(méi)有這條航線!n”);} else {

      printf(“終點(diǎn)站名t航班號(hào)t飛行時(shí)間t票價(jià)t乘員定額t余票量n”);

      display(info);

      /*調(diào)用display函數(shù)輸出航線信息*/ } } struct airline *find()

      / *根據(jù)系統(tǒng)提出的航班號(hào)查詢(xún)并以指針形式返回*/ {

      struct airline *info;char number[10];

      /*查詢(xún)的航班號(hào)*/ int i=0;info=start;printf(“請(qǐng)輸入航班號(hào):”);scanf(“%s”,number);while(i

      {

      if(!strcmp(number,info->air_num))

      /*有匹配航班*/

      {

      return info;

      }

      第 13 頁(yè)

      } info++;i++;}

      /*無(wú)匹配航班*/ printf(“對(duì)不起,沒(méi)有這條航線!n”);return NULL;void prtlink()

      /*打印訂票乘員名單域的客戶(hù)名單信息*/ {

      } linklist *insertlink(linklist *head,int amount,char name[],int grade)

      /*增加訂票乘員名單域的客戶(hù)信息*/ {

      linklist *p;struct airline *info;info=find();p=info->order;if(p!=NULL)

      /*按順序輸出客戶(hù)信息鏈表*/ {

      printf(“客戶(hù)姓名

      訂票數(shù)額

      艙位等級(jí)n”);while(p)

      {

      } printf(“%stt%dt%dn”,p->name,p->ord_amt,p->grade);p=p->next;

      }

      else

      /*沒(méi)有人訂這個(gè)航班*/ printf(“該航線沒(méi)有客戶(hù)信息!n”);linklist *p1,*new1;p1=head;new1=(linklist*)malloc(sizeof(linklist));if(!new1)

      /*存儲(chǔ)空間不足*/ {

      }

      第 14 頁(yè) printf(“nOut of memory!n”);return NULL;

      } strcpy(new1->name,name);new1->ord_amt=amount;new1->grade=grade;new1->next=NULL;if(head==NULL)

      /*若原訂票客戶(hù)信息為空*/ {

      } else

      { } new1->next=p1;return head;

      head=new1;head=new1;new1->next=NULL;linkqueue appendqueue(linkqueue q,char name[],int amount)

      /*增加排隊(duì)等候的客戶(hù)名單域*/ {

      qptr new1;new1=(qptr)malloc(sizeof(qnode));strcpy(new1->name,name);new1->req_amt=amount;new1->next=NULL;if(q.front==NULL)

      /*若原排隊(duì)等候客戶(hù)名單域?yàn)榭?/ { } else { } q.rear=new1;return q;

      第 15 頁(yè) q.front=new1;q.rear->next=new1;

      }

      void order()

      /*辦理訂票業(yè)務(wù)*/ {

      struct airline *info;int amount,grade;

      /*訂票數(shù)量,艙位等級(jí)*/ char name[10];

      /*要訂的航班號(hào)*/ info=start;if(!(info=find()))

      /*根據(jù)客戶(hù)提供的航班號(hào)進(jìn)行查詢(xún),如為空,退出該模塊*/ { } printf(“請(qǐng)輸入您需要的票數(shù):”);scanf(“%d”,&amount);if(amount>info->tkt_amt)

      /*若客戶(hù)訂票額超過(guò)乘員定票總額,退出*/ {

      } if(amount<=info->tkt_sur)

      /*若客戶(hù)訂票額末超過(guò)余票量,訂票成功并{

      int i;printf(“請(qǐng)輸入您的姓名:”);scanf(“%s”,name);printf(“請(qǐng)輸入您需要的艙位等級(jí)(1,2或):”);scanf(“%d”,&grade);info->order=insertlink(info->order,amount,name,grade);

      /*在訂票乘員名單域for(i=0;i

      /*依次輸出該訂票客戶(hù)的座位號(hào)*/ { } info->tkt_sur-=amount;

      /*該航線的余票量應(yīng)減掉該客戶(hù)的訂票量*/ printf(“n祝您乘坐愉快!n”);

      第 16 頁(yè) return;printf(“n對(duì)不起,您輸入票數(shù)已經(jīng)超過(guò)乘員定額!”);return;等記信息*/ 中添加客戶(hù)信息*/ printf(“%s的座位號(hào)是:%dn”,name,info->tkt_amt-info->tkt_sur+i+1);

      } } else

      /*若滿(mǎn)員或余票額少于訂票額,詢(xún)問(wèn)客戶(hù)是否需要進(jìn)行排隊(duì)等候*/ {

      } char r;printf(“n沒(méi)有這么多票了,您需要排隊(duì)等候嗎?(Y/N)”);r=getch();printf(“%c”,r);if(r=='Y'||r=='y'){

      } else { } printf(“n歡迎您再次訂購(gòu)!n”);printf(“n請(qǐng)輸入您的姓名:”);scanf(“%s”,name);info->wait=appendqueue(info->wait,name,amount);/*在排隊(duì)等候乘員名單域printf(“n注冊(cè)排隊(duì)成功!n”);中添加客戶(hù)信息*/ void return_tkt()

      /*退票模塊*/ {

      struct airline *info;qnode *t,*back,*f,*r;int grade;linklist *p1,*p2,*head;char cusname[10];if(!(info=find()))

      /*調(diào)用查詢(xún)函數(shù),根據(jù)客戶(hù)提供的航線進(jìn)行搜索*/ { } head=info->order;p1=head;

      第 17 頁(yè) return;

      printf(“請(qǐng)輸入你的姓名:”);scanf(“%s”,cusname);while(p1!=NULL)

      /*根據(jù)客戶(hù)提供的姓名到訂票客戶(hù)名單域進(jìn)行查詢(xún)*/ {

      } if(p1==NULL)

      /*若未找到,退出本模塊*/ {

      } else

      /*若信息查詢(xún)成功,刪除訂票客戶(hù)名單域中的信息*/ {

      } info->order=head;

      /*重新將航線名單域指向訂票單鏈表的頭指針*/ f=(info->wait).front;

      /*f指向排隊(duì)等候名單隊(duì)列的頭結(jié)點(diǎn)*/ r=(info->wait).rear;

      /*r指向排隊(duì)等候名單隊(duì)列的尾結(jié)點(diǎn)*/ t=f;

      /*t為當(dāng)前滿(mǎn)點(diǎn)條件的排隊(duì)候補(bǔ)名單域*/

      第 18 頁(yè) if(!strcmp(cusname,p1->name)){ } p2=p1;p1=p1->next;break;printf(“對(duì)不起,您沒(méi)有訂過(guò)票!n”);return;if(p1==head){ } { } grade=p1->grade;printf(“%s退票成功!n”,p1->name);p2->next=p1->next;head=p1->next;

      else

      info->tkt_sur+=p1->ord_amt;

      free(p1);

      while(t){

      if(info->tkt_sur>=info->wait.front->req_amt)

      /*若滿(mǎn)足條件者為頭結(jié)點(diǎn)*/ {

      } back=t;t=t->next;if((info->tkt_sur)>=(t->req_amt)&&t!=NULL)/*若滿(mǎn)足條件者不為頭結(jié)點(diǎn)*/ {

      } if(f==r){

      第 19 頁(yè) int i;info->wait.front=t->next;printf(“%s訂票成功!n”,t->name);for(i=0;ireq_amt;i++){ } info->tkt_sur-=t->req_amt;info->order=insertlink(info->order,t->req_amt,t->name,grade);/*插入到訂票客free(t);break;printf(“%s的座位號(hào)是:%dn”,t->name,(info->tkt_sur)-i);

      /*輸出座位號(hào)*/ 戶(hù)名單鏈表中*/ int i;back->next=t->next;printf(“%s訂票成功!n”,t->name);for(i=0;ireq_amt;i++)

      /*輸出座位號(hào)*/ { } info->tkt_sur-=t->req_amt;info->order=insertlink(info->order,t->req_amt,t->name,grade);/*插入到訂票客free(t);break;printf(“<%s>'s seat number is:%dn”,t->name,(info->tkt_sur)-i);戶(hù)名單鏈表中*/

      break;

      } } }

      int menu_select()

      /*菜單界面*/ {

      int c;char s[20];printf(“t訂票系統(tǒng)n”);printf(“~~~~~~~~~~~~~~~~~~~~~~~~~n”);printf(“1.查看航線信息n”);printf(“2.查看已訂票客戶(hù)信息n”);printf(“3.查詢(xún)航線n”);printf(“4.辦理訂票業(yè)務(wù)n”);printf(“5.辦理退票業(yè)務(wù)n”);printf(“6.退出系統(tǒng)n”);printf(“~~~~~~~~~~~~~~~~~~~~~~~~~n”);do {

      printf(“請(qǐng)選擇(1-6):”);

      scanf(“%s”,s);c=atoi(s);}while(c<1||c>6);return c;}

      void main(){

      struct airline air[MAXSIZE]=

      /*初始化航線信息*/ {

      {“beijing”,“1”,“1200”,“860”,30,30},{“shanghai”,“2”,“1000”,“770”,20,20},{“l(fā)ondon”,“3”,“1330”,“960”,10,10}, {“harbin”,“4”,“1700”,“760”,50,50},第 20 頁(yè)

      {“dalian”,“5”,“1400”,“550”,40,40} };start=air;

      for(;;)

      /*無(wú)限循環(huán)(除非用戶(hù)選擇.退出)*/ {

      system(“cls”);

      /*清空屏幕*/

      switch(menu_select())

      {

      case 1:list();

      /*打印全部航線信息*/

      break;

      case 2:prtlink();

      /*瀏覽已訂票客戶(hù)信息*/

      break;

      case 3:search();

      /*查詢(xún)航線*/

      break;

      case 4:order();

      /*訂票*/

      break;

      case 5:return_tkt();

      /*退票*/

      break;

      case 6:printf(“n感謝您的使用,再見(jiàn)!n”);/*退出系統(tǒng)*/

      exit(0);

      /*正常退出程序*/

      }

      printf(“n任意鍵繼續(xù)...n”);

      getch();

      /*任意鍵繼續(xù)*/ } }

      六、運(yùn)行結(jié)果分析

      1.菜單:進(jìn)入系統(tǒng)后,會(huì)出現(xiàn)如下菜單,如圖6.1 菜單:

      第 21 頁(yè)

      圖6.1 菜單

      用戶(hù)根據(jù)自己需求選擇輸入數(shù)字(1-6)即可進(jìn)入相應(yīng)功能。

      2.查看航線信息:在菜單頁(yè)面下輸入數(shù)字1,回車(chē),即可瀏覽全部航線信息。如圖6.2 查看航線信息:

      圖6.2 查看航線信息

      3.查看已訂票客戶(hù)信息:在菜單頁(yè)面下輸入數(shù)字2,回車(chē),然后輸入航班號(hào)即可查看。如圖6.3 查看航線信息:

      圖6.3 查看航線信息

      該航線有客戶(hù)預(yù)定則顯示客戶(hù)預(yù)定的信息。如圖6.3 查看客戶(hù)預(yù)定信息:

      第 22 頁(yè)

      6.3 查看客戶(hù)預(yù)定信息

      如果該航線沒(méi)有客戶(hù)預(yù)定,則會(huì)提示該航線沒(méi)有客戶(hù)信息。如圖6.4 無(wú)人預(yù)定航線:

      圖6.4 無(wú)人預(yù)定航線

      4.查詢(xún)航線:在菜單頁(yè)面下輸入數(shù)字3,回車(chē),即可進(jìn)入查詢(xún)航線功能。如圖6.5 查詢(xún)航線頁(yè)面:

      圖6.5 查詢(xún)航線頁(yè)面

      根據(jù)提示輸入要抵達(dá)城市的名稱(chēng)即可查詢(xún)。如果有該航線,則會(huì)顯示該航線的信息。如圖6.6 航線信息:

      第 23 頁(yè)

      圖6.6 航線信息

      如果沒(méi)有該航線,則會(huì)顯示對(duì)不起,沒(méi)有這條航線。如圖6.7 無(wú)此航線:

      圖6.7 無(wú)此航線

      5.辦理訂票業(yè)務(wù):在菜單頁(yè)面下輸入數(shù)字4,回車(chē),即可進(jìn)入辦理訂票業(yè)務(wù)功能。如圖6.8 訂票頁(yè)面:

      圖6.8 訂票頁(yè)面

      用戶(hù)根據(jù)提示依次輸入航班號(hào)、票數(shù)、姓名、艙位等級(jí)即可。如圖6.9 訂票信息:

      第 24 頁(yè)

      圖6.9 訂票信息

      如果訂票成功,則會(huì)顯示座位號(hào),并提示祝您乘坐愉快。如圖6.10 訂票成功:

      圖6.10 訂票成功

      如果在輸入訂票信息時(shí),輸入的票數(shù)大于額定乘員數(shù),則會(huì)訂票失敗并提示。

      第 25 頁(yè)

      圖6.11 訂票失敗

      如果在輸入訂票信息時(shí),輸入的票數(shù)小于額定乘員數(shù),大于余票數(shù),則會(huì)提示沒(méi)有這么多票了,詢(xún)問(wèn)是否進(jìn)行排隊(duì)等候。如圖6.12 詢(xún)問(wèn)是否排隊(duì)等候:

      圖6.12 詢(xún)問(wèn)是否排隊(duì)等候

      如果輸入N,代表不排隊(duì),則會(huì)提示歡迎下次訂購(gòu)。如果輸入Y,代表進(jìn)行排隊(duì)等候。這是會(huì)提示用戶(hù)輸入姓名進(jìn)行排隊(duì)。如圖6.13 排隊(duì)等候:

      圖6.13 排隊(duì)等候

      6.辦理退票業(yè)務(wù):在菜單頁(yè)面下輸入數(shù)字5,回車(chē),即可進(jìn)入辦理退票業(yè)務(wù)功能。如圖6.14 辦理退票業(yè)務(wù)頁(yè)面:

      第 26 頁(yè)

      圖6.14 辦理退票業(yè)務(wù)頁(yè)面

      根據(jù)提示輸入航線號(hào)和姓名即可進(jìn)行退票。如果此時(shí)這條航線有人排隊(duì)等候,余票數(shù)可以滿(mǎn)足其需求,其訂票即可成功。如圖6.15 排隊(duì)等候訂票成功:

      圖6.15 排隊(duì)等候訂票成功

      第 27 頁(yè)

      7.退出系統(tǒng):在菜單頁(yè)面下輸入數(shù)字6,回車(chē),即可退出系統(tǒng)。如圖6.16 退出系統(tǒng):

      圖6.16 退出系統(tǒng)

      七、收獲與體會(huì)

      在編寫(xiě)的時(shí)候只使用了相對(duì)較為簡(jiǎn)單的基礎(chǔ)語(yǔ)言,代替了相對(duì)較為復(fù)雜的語(yǔ)言,降低了運(yùn)行效率。測(cè)試輸入的數(shù)據(jù)也有一定的局限性,但是基本可以滿(mǎn)足訂票系統(tǒng)的需求。

      這個(gè)程序有許多地方可以改進(jìn),例如:

      ① 數(shù)據(jù)全部存儲(chǔ)在內(nèi)存中,可以考慮繼續(xù)編寫(xiě)將數(shù)據(jù)保存在文件中,這樣不會(huì)丟失。

      ② 航線信息只能通過(guò)修改代碼來(lái)修改,可以編寫(xiě)一個(gè)函數(shù)來(lái)修改航線信息并將其保存在文件中。

      ③ 使用的語(yǔ)言較基礎(chǔ),運(yùn)行效率較低,可以考慮寫(xiě)一些較為復(fù)雜但運(yùn)行效率高的語(yǔ)言。

      ④ 界面不夠美觀,菜單也只是局限在左上角,可以修改。

      八、參考文獻(xiàn)

      [1] 嚴(yán)蔚敏,吳偉民,數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版)[M].清華大學(xué)出版社,1997.[2] 夏濤.C語(yǔ)言程序設(shè)計(jì),北京郵電大學(xué)出版社,2007.[3] 譚浩強(qiáng).C程序設(shè)計(jì)(第三版)[M].清華大學(xué)出版社,2006.[4] 百度.百度知道.百度文庫(kù)

      第 28 頁(yè)

      下載飛機(jī)訂票系統(tǒng)課程設(shè)計(jì)(共五則)word格式文檔
      下載飛機(jī)訂票系統(tǒng)課程設(shè)計(jì)(共五則).doc
      將本文檔下載到自己電腦,方便修改和收藏,請(qǐng)勿使用迅雷等下載。
      點(diǎn)此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶(hù)自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        飛機(jī)訂票系統(tǒng)風(fēng)險(xiǎn)評(píng)估

        飛機(jī)訂票系統(tǒng) —項(xiàng)目風(fēng)險(xiǎn)評(píng)估報(bào)告 本文檔的范圍和目的 本文主要針對(duì)飛機(jī)訂票系統(tǒng)軟件開(kāi)發(fā)涉及到的風(fēng)險(xiǎn),包括在軟件開(kāi)發(fā)周期過(guò)程中可能出現(xiàn)的風(fēng)險(xiǎn)以及軟件實(shí)施過(guò)程中外部......

        C語(yǔ)言程序設(shè)計(jì)——飛機(jī)訂票系統(tǒng)

        C語(yǔ)言程序設(shè)計(jì)——飛機(jī)訂票系統(tǒng) 代碼如下:” #include"stdio.h" #include"stdlib.h" #include"string.h" #defineLENsizeof (structplane) #defineMAX 10; structplane { ch......

        1 飛機(jī)訂票系統(tǒng)可行性研究報(bào)告

        文檔編號(hào): 版本號(hào):v1.0 可行性研究報(bào)告 項(xiàng)目名稱(chēng) 飛機(jī)訂票系統(tǒng) 項(xiàng)目負(fù)責(zé)人何柳青 文檔編寫(xiě)者阿依古麗.麥麥提 項(xiàng)目開(kāi)發(fā)者計(jì)算機(jī)081第二組 2010年9月26日 目錄 1.引言 ..........

        4 飛機(jī)訂票系統(tǒng)系統(tǒng)概要設(shè)計(jì)說(shuō)明書(shū)

        文檔編號(hào): 版本號(hào):V1.0 概要設(shè)計(jì)說(shuō)明書(shū) 項(xiàng)目名稱(chēng) 飛機(jī)訂票系統(tǒng) 項(xiàng)目負(fù)責(zé)人何柳青 本文檔編寫(xiě)者 李欣純 項(xiàng)目開(kāi)發(fā)者 計(jì)算機(jī)081第二組 2010年11月7日 目錄 1.引言 ..............

        6 飛機(jī)訂票系統(tǒng)開(kāi)發(fā)總結(jié)報(bào)告

        文檔編號(hào): 版本號(hào):v1.0 開(kāi)發(fā)總結(jié)報(bào)告項(xiàng)目名稱(chēng) 飛機(jī)訂票系統(tǒng) 項(xiàng)目負(fù)責(zé)人何柳青 本文檔編寫(xiě)者 何柳青 項(xiàng)目開(kāi)發(fā)者計(jì)算機(jī)081第二組 2010年12月20日 目錄 1.引言 ................

        火車(chē)訂票管理系統(tǒng)

        學(xué)號(hào)11~15 選題三:火車(chē)票訂票管理系統(tǒng) 1. 基本要求:為方便管理火車(chē)票購(gòu)買(mǎi)信息,編寫(xiě)一個(gè)火車(chē)票訂票管理系統(tǒng)軟件。系統(tǒng)記錄必須包括訂票人姓名、訂票人身份證號(hào)、始發(fā)站、終到站......

        QTP自帶的飛機(jī)訂票功能測(cè)試報(bào)告

        QTP自帶的飛機(jī)訂票功能測(cè)試報(bào)告 課題名稱(chēng) 飛機(jī)訂票系統(tǒng)功能測(cè)試報(bào)告 系/專(zhuān) 業(yè) *******學(xué)院 班級(jí) ***** 學(xué)號(hào) ***** 學(xué)生姓名 ***** 指導(dǎo)教師:***** 測(cè)試目標(biāo)了解熟悉QTP......

        飛機(jī)結(jié)構(gòu)設(shè)計(jì)課程設(shè)計(jì)心得

        經(jīng)過(guò)兩個(gè)星期的努力,終于完成了長(zhǎng)空無(wú)人機(jī)的方向舵設(shè)計(jì).在這次作業(yè)過(guò)程中,我遇到了許多困難,一遍又一遍的計(jì)算,一次又一次的設(shè)計(jì)方案修改這都暴露出了前期我在這方面的知識(shí)......