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\n%s\n%s\n", 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\n", p->IdNum);
32         fprintf(fp, "%d\n", p->Order_Number);
33         fprintf(fp, "%d\n", p->Tickets_Num);
34         fprintf(fp, "%s\n", p->Flight_Number);
35         fprintf(fp, "%s\n", p->Departure);
36         fprintf(fp, "%s\n", p->Destination);
37         fprintf(fp, "%s\n", p->Date);
38         fprintf(fp, "%s\n", p->TakeOff_Time);
39         fprintf(fp, "%s\n", 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\n", p->Flight_Number);
58         fprintf(fp, "%.2lf\n", p->Fare);
59         fprintf(fp, "%s\n", p->Discount);
60         fprintf(fp, "%d\n%d\n", p->Seat_Number, p->Vacant_Seat);
61         fprintf(fp, "%s\n", p->Departure);
62         fprintf(fp, "%s\n", p->Destination);
63         fprintf(fp, "%s\n", p->Date);
64         fprintf(fp, "%s\n", p->TakeOff_Time);
65         fprintf(fp, "%s\n", p->Landing_Time);
66         p = p->Next;
67     }//while
68     fclose(fp);
69     return TRUE;
70 }//WriteFlight()

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

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

时间: 2024-12-14 19:32:04

windows API 开发飞机订票系统 图形化界面 (四)的相关文章

windows API 开发飞机订票系统 图形化界面 (三)

来吧,接下来是各个功能的函数的实现代码. 首先,程序运行时加载读入账户信息和航班信息.接下来就该读取文件了. 我把账户资料和航班信息储存在了.txt文件里 那么问题就来了,挖掘机...额,不对,应该怎么读入账户资料和航班信息? 每一行是结构体的一个成员,我读入的方式是一行一行读入. 两个读入函数代码如下: 1 //读入账户信息 2 BOOL ReadAccountData(HWND hwndDlg){ 3 4 FILE *fp; 5 6 passenger = (Passenger *)mall

飞机订票系统

飞机订票系统 // 飞机订票系统.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <stdio.h> #include <string.h> #include<stdlib.h> #include<conio.h> #define N 2 typedef struct plane { char ID[10]; char Start_Place[10]; char End_Place

web类协议脚本-飞机订票系统示例

以下是LR自带的飞机订票系统的Demo,希望能帮助大家. Action() { int iRand; int iTmp; char *strTmpA; char *strTmpB; char *strTmpC; char *position; if ((strTmpA = (char *)malloc(100 * sizeof(char))) == NULL) { lr_output_message ("Insufficient memory available"); return -

C语言实现-航空订票系统(飞机订票系统)

开发环境:CodeBlocks 开发语言:C 实现功能:登录,订票,退票 数据存储:文本读写 涉及文件: ? 相关文件下载: 码云:https://gitee.com/ikaros-521/c_project/tree/master/%E9%A3%9E%E6%9C%BA%E8%AE%A2%E7%A5%A8%E7%B3%BB%E7%BB%9F%EF%BC%88%E8%88%AA%E7%A9%BA%E8%AE%A2%E7%A5%A8%E7%B3%BB%E7%BB%9F%EF%BC%89 程序主界面:

qtp脚本测试飞机订票系统(代码)

嗯,以前没怎么研究过这个,最近做课设用到了,顺便发一下. 有要用的话,自己改一下路径什么的.版本qtp10.0 Mainaction Dim AgentName Dim Password Dim DateOfFlight Dim FaxNumber Dim SelectTest Dim DateOfUpdate Dim DeleteName Dimy Dim e Dim e Datatable.ImportSheet "C:\Users\yue\Desktop\yuetest\excel\Mai

UTF简单脚本录制(飞机订票系统)

1.直接录制脚本-文件-新建-测试-GUI-创建 2.录制配置-添加程序路径 3.录制-输入用户名密码.机票事件地点.查询航班情况.登机人,提交 Dialog("Login").WinEdit("Agent Name:").SetSelection 0,6 Dialog("Login").WinEdit("Agent Name:").Set "dfsdf" Dialog("Login")

课程设计之(struts2+Hibernate)航空订票系统

1.题目 课程设计之航空订票系统 为某家机票预订服务商开发一个机票预订和查询管理系统.该系统中的航班和机票信息由多家航空公司负责提供.客户通过上网方式查询航班时间表.机票可用信息.机票折扣信息,可以远程订票.退票.通过信用卡支付票款.客户分为三类:金牌客户.银牌客户和普通客户.普通客户通过订票积分至一定的额度可以逐步升级为银牌客户.金牌客户.不同类别的客户可享有不同的机票折扣.系统还必须每日.每周.每月给出机票销售的统计分析报表. l         实验要求: 按基于数据流的软件工程的要求完成

【C语言】火车订票系统

#include<stdio.h> #include<string.h> #include<iostream> #include<process.h> #include<conio.h> #include<iomanip> #define max 60 typedef struct customer {//乘客信息 char name[10];//姓名 int  amount;//订票数 char rank;//火车票种类:硬座.软座

计算机毕业设计源码分享-784双鱼林JSP_SSH2_EasyUI电影院电影票订票系统

系统开发环境: MyEclipse8.5以上版本 + mysql开发语言:JSP,Java后台采用技术: struts 2 + Spring + Hibernate (SSH2) 前台技术: jquery + easyui框架 本次设计为电影院订票系统的设计与实现,因此需要了解订票系统的功能设计,一般订票系统分成以下几个功能模块:1.会员管理功能模块实现会员信息的添加.查询.修改和删除:2.影院管理功能模块影片管理:影片信息的添加.查询.修改和删除.档期计划:影片放映日期计划.影评管理:影评信息