zoukankan      html  css  js  c++  java
  • windows API 开发飞机订票系统 图形化界面 (四)

    接下来的是录入航班、修改航班信息功能的实现:

     1 //录入航班
     2 BOOL EntryFlight(HWND hEntryDlg){
     3 
     4     TCHAR szDiscount[16];
     5     TCHAR szFare[16],szSeat_Number[16];
     6     TCHAR szFlight_Number[16], szDate[16];
     7     TCHAR szDeparture[16], szDestination[16];
     8     TCHAR szTakeOff_Time[16], szLanding_Time[16];
     9 
    10     Flight *p = (Flight *)malloc(sizeof(Flight)),*q;
    11     if (!p){
    12         MessageBox(hEntryDlg, TEXT("内存申请错误!"), TEXT("错误"), MB_OK | MB_ICONERROR);
    13         return FALSE;
    14     }
    15 
    16     GetDlgItemText(hEntryDlg, IDC_DEPARTURE, szDeparture, 16);            //获取录入航班信息
    17     GetDlgItemText(hEntryDlg, IDC_DESTINATION, szDestination, 16);
    18     GetDlgItemText(hEntryDlg, IDC_FLTNUM, szFlight_Number, 16);
    19     GetDlgItemText(hEntryDlg, IDC_FARE, szFare, 16);
    20     GetDlgItemText(hEntryDlg, IDC_TAKEOFFTIME, szTakeOff_Time, 16);
    21     GetDlgItemText(hEntryDlg, IDC_LANDINGTIME, szLanding_Time, 16);
    22     GetDlgItemText(hEntryDlg, IDC_SEATNUM, szSeat_Number, 16);
    23     GetDlgItemText(hEntryDlg, IDC_DISCOUNT, szDiscount, 16);
    24     GetDlgItemText(hEntryDlg, IDC_DATE, szDate, 16);
    25 
    26     if (!lstrlen(szDeparture) || !lstrlen(szDestination) ||
    27         !lstrlen(szFlight_Number) || !lstrlen(szFare) ||
    28         !lstrlen(szTakeOff_Time) || !lstrlen(szLanding_Time) ||
    29         !lstrlen(szSeat_Number))
    30     {
    31         MessageBox(hEntryDlg, TEXT("请您填写完整航班信息!"), TEXT("提示"), MB_OK | MB_ICONINFORMATION);
    32         return FALSE;
    33     }
    34 
    35     q = flightlink.head;
    36     while (q){
    37         if (!lstrcmp(q->Flight_Number, szFlight_Number) && !lstrcmp(q->Date,szDate)){
    38             MessageBox(hEntryDlg, TEXT("对不起,同一航班在一天内只能有一班"), TEXT("提示"), MB_OK | MB_ICONINFORMATION);
    39             free(p);
    40             return FALSE;
    41         }
    42         q = q->Next;
    43     }//while
    44 
    45     lstrcpy(p->Date, szDate);                            //填入录入航班结点信息
    46     lstrcpy(p->Discount, szDiscount);
    47     lstrcpy(p->Departure, szDeparture);
    48     lstrcpy(p->Destination, szDestination);
    49     lstrcpy(p->TakeOff_Time, szTakeOff_Time);
    50     lstrcpy(p->Landing_Time, szLanding_Time);
    51     lstrcpy(p->Flight_Number, szFlight_Number);
    52     p->Fare = _ttof(szFare);
    53     p->Seat_Number = _ttoi(szSeat_Number);
    54     p->Vacant_Seat = p->Seat_Number;
    55     p->Next = NULL;
    56 
    57     if (flightlink.head == NULL)                        //将新结点添至航班链表
    58         flightlink.head = p;
    59     else
    60         flightlink.tail->Next = p;
    61     flightlink.tail = p;
    62     flightlink.Flight_Number++;                            //航班数目增加
    63 
    64     MessageBox(hEntryDlg, TEXT("航班录入成功!"), TEXT("提示"), MB_OK | MB_ICONINFORMATION);
    65 
    66     return TRUE;
    67 }//EntryFlight()
     1 //修改航班信息
     2 BOOL ModifyFlight(HWND hModifyDlg){
     3     int seat_num;
     4     TCHAR szDiscount[16];
     5     TCHAR szFare[16], szSeat_Number[16];
     6     TCHAR szTakeOff_Time[16], szLanding_Time[16];
     7     TCHAR Mdf_flt_num[16], Mdf_flt_date[16];
     8 
     9     OrderForm *q;
    10     Flight *p;
    11 
    12     GetDlgItemText(hModifyDlg, IDC_MDFFLTNUM, Mdf_flt_num, 16);                //获取要修改的航班
    13     GetDlgItemText(hModifyDlg, IDC_MDFDATE, Mdf_flt_date, 16);
    14 
    15     if (!lstrlen(Mdf_flt_num)){
    16         MessageBox(hModifyDlg, TEXT("请输入所要修改信息的航班号"), TEXT("信息"), MB_OK | MB_ICONINFORMATION);
    17         return FALSE;
    18     }
    19 
    20     GetDlgItemText(hModifyDlg, IDC_FARE, szFare, 16);                        //获取要修改的信息
    21     GetDlgItemText(hModifyDlg, IDC_DISCOUNT, szDiscount, 16);
    22     GetDlgItemText(hModifyDlg, IDC_SEATNUM, szSeat_Number, 16);
    23     GetDlgItemText(hModifyDlg, IDC_TAKEOFFTIME, szTakeOff_Time, 16);
    24     GetDlgItemText(hModifyDlg, IDC_LANDINGTIME, szLanding_Time, 16);
    25     
    26     p = flightlink.head;
    27     while (p){                                                                //查找要修改的航班
    28         if (!lstrcmp(Mdf_flt_num, p->Flight_Number) && !lstrcmp(Mdf_flt_date, p->Date)){
    29             if (lstrlen(szFare))                                            //改变航班票价
    30                 p->Fare = _ttof(szFare);
    31             if (lstrlen(szDiscount))                                        //改变航班折扣
    32                 wsprintf(p->Discount, szDiscount);
    33             if (lstrlen(szSeat_Number)){
    34                 seat_num = _ttoi(szSeat_Number);
    35                 if ((p->Seat_Number - seat_num) > p->Vacant_Seat){            //余座数量>=0
    36                     MessageBox(hModifyDlg, TEXT("对不起,座位数过少,请重新填写"), TEXT("提示"), MB_OK | MB_ICONINFORMATION);
    37                     return FALSE;
    38                 }
    39                 p->Vacant_Seat -= p->Seat_Number - seat_num;                //改变余票数量
    40                 p->Seat_Number = seat_num;                                    //改变座位数
    41             }//if
    42             if (lstrlen(szTakeOff_Time)){                                    //改变航班起飞时间
    43                 wsprintf(p->TakeOff_Time, szTakeOff_Time);
    44                 q = allorder.head;                                            //改变该航班所有订单出发时间
    45                 while (q){
    46                     if (!lstrcmp(q->Flight_Number, p->Flight_Number) && !lstrcmp(q->Date, p->Date))
    47                         wsprintf(q->TakeOff_Time, szTakeOff_Time);
    48                     q = q->Next;
    49                 } 
    50             }//if
    51             if (lstrlen(szLanding_Time)){                                    //改变航班降落时间
    52                 wsprintf(p->Landing_Time, szLanding_Time);
    53                 q = allorder.head;                                            //改变该航班所有订单降落时间
    54                 while (q) {
    55                     if (!lstrcmp(q->Flight_Number, p->Flight_Number) && !lstrcmp(q->Date, p->Date))
    56                         wsprintf(q->Landing_Time, szLanding_Time);
    57                     q = q->Next;
    58                 }
    59             }//if
    60             MessageBox(hModifyDlg, TEXT("修改成功!"), TEXT("提示"), MB_OK | MB_ICONINFORMATION);
    61             return TRUE;
    62         }//if
    63         p = p->Next;
    64     }//while
    65                                                                             
    66     MessageBox(hModifyDlg, TEXT("对不起,您所要修改的航班尚未录入。"), TEXT("提示"), MB_OK | MB_ICONINFORMATION);
    67     return FALSE;                                                            
    68 
    69 }//ModifyFlight()

    至此,订票系统的功能已经基本全部实现了,剩下的问题就是在程序退出时将账户、航班、订单数据写进文件里。

    具体实现起来很简单,需要注意的知识写入与读取要相对应。代码如下:

     1 //保存账户资料
     2 BOOL WriteAccountData(HWND hMainDlg){
     3     Passenger *p;
     4     FILE *fp;
     5     if ((fp = fopen(".\AccountData.txt", "w")) == NULL){
     6         MessageBox(hMainDlg, TEXT("账户信息保存出现错误!"), TEXT("错误"), MB_OK | MB_ICONERROR);
     7         return FALSE;
     8     }
     9 
    10     p = psglink.head;
    11     while (p){
    12         fprintf(fp, "%s
    %s
    %s
    ", p->Name, p->IdNum, p->PassWord);
    13         p = p->Next;
    14     }//while
    15 
    16     fclose(fp);
    17     return TRUE;
    18 }//WriteAccountData
    19 
    20 
    21 //保存订单信息
    22 BOOL WriteOrderData(HWND hMainDlg){
    23     OrderForm *p;
    24     FILE *fp;
    25     if ((fp = fopen(".\OrderForm.txt", "w")) == NULL){
    26         MessageBox(hMainDlg, TEXT("订单信息保存出现错误!"), TEXT("错误"), MB_OK | MB_ICONERROR);
    27         return FALSE;
    28     }
    29     p = allorder.head;
    30     while (p){
    31         fprintf(fp, "%s
    ", p->IdNum);
    32         fprintf(fp, "%d
    ", p->Order_Number);
    33         fprintf(fp, "%d
    ", p->Tickets_Num);
    34         fprintf(fp, "%s
    ", p->Flight_Number);
    35         fprintf(fp, "%s
    ", p->Departure);
    36         fprintf(fp, "%s
    ", p->Destination);
    37         fprintf(fp, "%s
    ", p->Date);
    38         fprintf(fp, "%s
    ", p->TakeOff_Time);
    39         fprintf(fp, "%s
    ", p->Landing_Time);
    40         p = p->Next;
    41     }//while
    42     fclose(fp);
    43     return TRUE;
    44 }//WriteOrderData()
    45 
    46 
    47 //保存航班信息
    48 BOOL WriteFlightData(HWND hMainDlg){
    49     Flight *p;
    50     FILE *fp;
    51     if ((fp = fopen(".\FlightData.txt", "w")) == NULL){
    52         MessageBox(hMainDlg, TEXT("航班信息保存出现错误!"), TEXT("错误"), MB_OK | MB_ICONERROR);
    53         return FALSE;
    54     }
    55     p = flightlink.head;
    56     while (p){
    57         fprintf(fp, "%s
    ", p->Flight_Number);
    58         fprintf(fp, "%.2lf
    ", p->Fare);
    59         fprintf(fp, "%s
    ", p->Discount);
    60         fprintf(fp, "%d
    %d
    ", p->Seat_Number, p->Vacant_Seat);
    61         fprintf(fp, "%s
    ", p->Departure);
    62         fprintf(fp, "%s
    ", p->Destination);
    63         fprintf(fp, "%s
    ", p->Date);
    64         fprintf(fp, "%s
    ", p->TakeOff_Time);
    65         fprintf(fp, "%s
    ", p->Landing_Time);
    66         p = p->Next;
    67     }//while
    68     fclose(fp);
    69     return TRUE;
    70 }//WriteFlight()

    至此,这个飞机订票系统算是完成了,其中还是有很多不足之处。查找算法只是简单的遍历链表,数据结构也只是采用了单链表,倒是订单用上了十字链表来存储。查找起来效率不高,一旦数据量变大,便会很耗费时间,不过考虑到这只是一个课程设计,数据量很小,查找起来时间耗费上没有多少差别,姑且就这样吧。

    把头文件以及其资源头文件代码就不贴出来了,想看的朋友可以直接把源码下载下来看一下。

  • 相关阅读:
    仅坚持了9天:京东今日宣布暂停火车票代购业务
    Highcharts JS——制作图表的纯js类库
    eclipse插件——php工具集成
    如何新增histats计数器到自己的 blog
    C#写入文本txt
    我怎么感觉js快无敌了~
    马云卸任演讲全文
    添加好玩的honehoneclock到自己的blog
    C#获取日期的年月日时分秒
    js闭包
  • 原文地址:https://www.cnblogs.com/z941030/p/4495811.html
Copyright © 2011-2022 走看看