首先,用到的数据结构的定义、以及全局变量和函数的声明如下:

 // Flight.c : 定义应用程序的入口点。
//
#include "stdafx.h" //订单
typedef struct OrderForm{
TCHAR IdNum[]; //订单用户身份证号
int Order_Number; //订单号
int Tickets_Num; //订票数量
TCHAR Flight_Number[]; //航班号
TCHAR Departure[]; //出发地
TCHAR Destination[]; //目的地
TCHAR Date[]; //出发日期
TCHAR TakeOff_Time[]; //起飞时间
TCHAR Landing_Time[]; //降落时间
struct OrderForm *Next; //所有订单链表next
struct OrderForm *psgNext; //用户订单链表next
}OrderForm; //乘客订单链表
typedef struct PsgOrderLink{
int OrderNum; //订单数目
OrderForm *head; //头结点
OrderForm *tail; //尾结点
}PsgOrderLink; //所有订单列表
typedef struct AllOrderLink{
int AllOrderNum; //所有订单数目
OrderForm *head; //头结点
OrderForm *tail; //尾结点
}AllOrderLink; //乘客
typedef struct Passenger{
TCHAR Name[]; //姓名
TCHAR IdNum[]; //身份证号码
TCHAR PassWord[]; //密码
int TicketNum; //订单数目
PsgOrderLink OrderLink; //用户所有订单
struct Passenger *Next;
}Passenger; //乘客链表
typedef struct PsgLinkList{
int PsgNum; //账户数量
Passenger *head; //头结点
Passenger *tail; //尾结点
}PsgLinkList; //航班
typedef struct Flight{
double Fare; //票价
int Seat_Number; //座位数
int Vacant_Seat; //空余座位数
TCHAR Discount[]; //折扣
TCHAR Flight_Number[]; //航班号
TCHAR Departure[]; //出发地
TCHAR Destination[]; //目的地
TCHAR Date[]; //出发日期
TCHAR TakeOff_Time[]; //起飞时间
TCHAR Landing_Time[]; //降落时间
struct Flight *Next;
}Flight; //航班链表
typedef struct FlightLinkList{
Flight *head; //头结点
Flight *tail; //尾结点
int Flight_Number; //航班数目
}FilghtLinkList; // 全局变量:
HICON hIcon;
HINSTANCE hInst; //当前实例
static TCHAR szBuffer[]; //缓冲区
static PsgLinkList psglink; //所有账户_链表
static Passenger *passenger; //登陆账户信息
static AllOrderLink allorder; //所有订单_链表
static FilghtLinkList flightlink; //所有航班_链表 //函数声明
BOOL AccountLogIn(HWND); //账户登陆
BOOL AccountRegister(HWND); //注册账户
BOOL ReadFlightData(HWND); //读入航班信息
BOOL ReadAccountData(HWND); //读入账户资料
BOOL ReadAccountOrder(HWND,Passenger*); //读入所有订单、账户订单
BOOL SearchFlight(HWND); //查询航班
BOOL BookTickets(HWND); //订票
BOOL _Book_Tickets(HWND,Flight*,int); //订票
BOOL Recommend(HWND,Flight*,int); //航班建议
BOOL ReturnTickets(HWND); //退票
BOOL EntryFlight(HWND); //录入航班
BOOL ModifyFlight(HWND); //修改航班信息
BOOL PrintFlight(HWND, Flight*); //输出航班信息
BOOL WriteFlightData(HWND); //保存航班信息
BOOL WriteAccountData(HWND); //保存账户资料
BOOL WriteOrderData(HWND); //保存订单信息
BOOL CALLBACK LogInDlgProc(HWND, UINT, WPARAM, LPARAM); //登陆窗口窗口过程
BOOL CALLBACK MainDlgProc(HWND, UINT, WPARAM, LPARAM); //主界面窗口过程
BOOL CALLBACK NameDlgProc(HWND, UINT, WPARAM, LPARAM); //获取新注册用户姓名窗口过程
BOOL CALLBACK FlightNumDlgProc(HWND, UINT, WPARAM, LPARAM); //获取用户输入机票数量窗口过程
BOOL CALLBACK EntryFlightProc(HWND, UINT, WPARAM, LPARAM); //录入航班窗口过程
BOOL CALLBACK ModifyFlightProc(HWND, UINT, WPARAM, LPARAM); //修改航班信息窗口过程

数据结构定义

因为采用的是windows API,所以首先要了解windows程序的消息机制。

Windows是一个以消息为导向的系统,程序只能被动地等待用户操作的消息,不能主动地去读键盘、鼠标等的状态,也就是说,每当键盘上有个键被按下,或者鼠标在屏幕某个位置点击以后,系统就会发出一个消息(Message)给窗口,告诉它某个键被按下去了或是鼠标按键的点击状态。当鼠标点击了程序的某个按钮只要鼠标移动一下,系统也会发出相应的消息,并把鼠标的坐标信息传给窗口。

当我们鼠标点击了我们程序的某个按钮时,会向系统的消息队列发送一个消息(Mseeage),此消息包含了你鼠标点击的位置、该程序的句柄以及鼠标点击时的状态(如是否按住ctrl键等等)。程序中每个窗口在程序代码都有对应的一个窗口过程,即处理由该窗口所产生的消息的函数,而我们写代码的主要工作就在这里了。

我程序的主函数代码如下:

 //主函数
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR szCmdLine,int iCmdShow)
{ hInst = hInstance;
InitCommonControls();
hIcon=LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON1));
return DialogBox(hInst, MAKEINTRESOURCE(IDD_LOGINDLG), NULL, (DLGPROC)LogInDlgProc);
}//WinMain

其中,下面这行代码用来加载程序图片:

hIcon=LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON1));

下面贴出各个窗口的窗口过程:

 //登陆窗口_窗口过程
BOOL CALLBACK LogInDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
//WM_INITDIALOG是当其对话框和子控件全部创建完毕,将要显示内容的时候发送的消息
//因此可以在WM_INITDIALOG消息响应函数中添加对编辑框控件的初始化和修改
case WM_INITDIALOG:
{
if (hIcon)
SendMessage(hwndDlg, WM_SETICON, ICON_SMALL, (LPARAM)hIcon);
ReadAccountData(hwndDlg); //登陆对话框初始化时读入账户资料
ReadFlightData(hwndDlg); //登陆对话框初始化时读入航班信息
}//WM_INITDIALOG
return TRUE; case WM_CLOSE:
{
EndDialog(hwndDlg, );
}//WM_CLOSE
return TRUE; case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case IDC_LOGIN:
AccountLogIn(hwndDlg); //登陆
break;
case IDC_REGISTER:
AccountRegister(hwndDlg); //注册
break;
}//switch
}//WM_COMMAND
return TRUE; }//switch
return FALSE;
}//LogInDlgProc()

其中,下面这行代码用来加载程序标题栏图标

if (hIcon) SendMessage(hwndDlg, WM_SETICON, ICON_SMALL, (LPARAM)hIcon);

然后继续贴代码:

 //主界面_窗口过程
BOOL CALLBACK MainDlgProc(HWND hMainDlg, UINT uMsg, WPARAM wParam, LPARAM lParam){
switch (uMsg)
{
case WM_INITDIALOG:
{
if (hIcon)
SendMessage(hMainDlg, WM_SETICON, ICON_SMALL, (LPARAM)hIcon);
}//WM_INITDIALOG
return TRUE; case WM_CLOSE:
{
//关闭程序时将信息保存
if (WriteOrderData(hMainDlg) && WriteAccountData(hMainDlg) && WriteFlightData(hMainDlg))
EndDialog(hMainDlg, );
else
MessageBox(hMainDlg, TEXT("保存信息错误!"), TEXT("提示"), MB_OK | MB_ICONINFORMATION);
}//WM_CLOSE
return TRUE; case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case IDC_SEARCH:
{
SearchFlight(hMainDlg); //查找航班
break;
}
case IDC_TICKET:
{
BookTickets(hMainDlg); //订票
break;
}
case IDC_RETURNTICKET:
{
ReturnTickets(hMainDlg); //退票
break;
}
case IDC_ENTRY:
{ //录入航班对话框
DialogBox(hInst, MAKEINTRESOURCE(IDD_ENTRY), NULL, (DLGPROC)EntryFlightProc);
break;
}
case IDC_MODIFYFLIGHT:
{ //修改航班信息对话框
DialogBox(hInst, MAKEINTRESOURCE(IDD_MODIFYFLT), NULL, (DLGPROC)ModifyFlightProc);
break;
}
}//switch
}//WM_COMMAND
return TRUE;
}//switch
return FALSE;
}//MainDlgProc()
 //获取用户输入机票数量_窗口过程
BOOL CALLBACK FlightNumDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam){
switch (uMsg)
{ case WM_INITDIALOG:
{
if (hIcon)
SendMessage(hwndDlg, WM_SETICON, ICON_SMALL, (LPARAM)hIcon);
}//WM_INITDIALOG
return TRUE; case WM_CLOSE:
{
wsprintf(szBuffer, TEXT("\0"));
EndDialog(hwndDlg, FALSE);
}//WM_CLOSE
return TRUE; case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case IDOK:
wsprintf(szBuffer, TEXT("\0"));
GetDlgItemText(hwndDlg, IDC_TICKETNUM, szBuffer, );
EndDialog(hwndDlg, TRUE);
break;
}//switch
}//WM_COMMAND
return TRUE; }//switch
return FALSE;
}
 //录入航班_窗口过程
BOOL CALLBACK EntryFlightProc(HWND hEntryDlg, UINT uMsg, WPARAM wParam, LPARAM lParam){
switch (uMsg)
{
case WM_INITDIALOG:
{
if (hIcon)
SendMessage(hEntryDlg, WM_SETICON, ICON_SMALL, (LPARAM)hIcon);
}
return TRUE; case WM_CLOSE:
{
EndDialog(hEntryDlg, );
}//WM_CLOSE
return TRUE; case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case IDC_ADDFLT:
{
EntryFlight(hEntryDlg); //录入航班
break;
}//GETNAME
case IDC_QUIT:
{
EndDialog(hEntryDlg, FALSE);
break;
}//GETNAMECANCEL }//stitch }//WM_COMMAND
return TRUE; }//stitch return FALSE;
} //修改航班信息_窗口过程
BOOL CALLBACK ModifyFlightProc(HWND hModifyDlg, UINT uMsg, WPARAM wParam, LPARAM lParam){
switch (uMsg)
{
case WM_INITDIALOG:
{
if (hIcon)
SendMessage(hModifyDlg, WM_SETICON, ICON_SMALL, (LPARAM)hIcon);
}
return TRUE; case WM_CLOSE:
{
EndDialog(hModifyDlg, );
}//WM_CLOSE
return TRUE; case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case IDC_MODIFY:
{
ModifyFlight(hModifyDlg); //修改航班信息
break;
}//GETNAME
case IDC_QUIT:
{
EndDialog(hModifyDlg, FALSE);
break;
}//GETNAMECANCEL }//stitch }//WM_COMMAND
return TRUE;
}//stitch return FALSE;
}//ModifyFlightProc()

在此给出了几个窗口的窗口过程,其中所调用的函数的实现将在下一篇博文中给出。

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

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

    接下来的是录入航班.修改航班信息功能的实现: //录入航班 BOOL EntryFlight(HWND hEntryDlg){ TCHAR szDiscount[]; TCHAR szFare[],s ...

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

    去年数据结构课程设计的作品,c语言实现,图形化界面使用windows API实现. 首发在我csdn博客:http://blog.csdn.net/u013805360/article/details ...

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

    来吧,接下来是各个功能的函数的实现代码. 首先,程序运行时加载读入账户信息和航班信息.接下来就该读取文件了. 我把账户资料和航班信息储存在了.txt文件里 那么问题就来了,挖掘机...额,不对,应该怎 ...

  4. 【性能测试】Loadrunner12.55(二)-飞机订票系统-脚本录制

    1.1 飞机订票系统 Loadrunner 12.55不会自动安装飞机订票系统,要自己手动安装. 我们需要下载Web Tools以及一个小插件strawberry https://marketplac ...

  5. Java版飞机订票系统

    关注微信公众号:Worldhello 回复 飞机订票系统 可获得系统源代码并可加群讨论交流 数据结构课程设计题目:          [飞机订票系统]            通过此系统可以实现如下功能 ...

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

    以下是LR自带的飞机订票系统的Demo,希望能帮助大家. Action() { int iRand; int iTmp; char *strTmpA; char *strTmpB; char *str ...

  7. loadrunner飞机订票系统从登陆订票退票登出的脚本实现代码调试通过

    在LR自带的飞机订票系统中,完整模拟一个用户从登陆->订票->退票->登出这样一个业务流程,分解每个事务为一个Action: 进入首页->登陆->进入订票页面->选 ...

  8. loadrunner笔记(二):飞机订票系统--客户信息注册

    (一)  几个重要概念说明 集合点:同步虚拟用户,以便同一时间执行任务. 事务:事务是指服务器响应用户请求所用的时间,当然它可以衡量某个操作,如登录所需要的时间,也可以衡量一系列的操作所用的时间,如从 ...

  9. LR自带网站飞机订票系统 启动

    LR自带的网站:飞机订票系统 可是如何启动自带的网站呢?? 一.启动服务:开始-所有程序--HP Software-HP LoadRunner-Samples-Web-Start Web Server ...

随机推荐

  1. FAQ-Ubuntu12.04 15.04禁止移动介质自动播放

    网上有有很多关于Ubuntu10.04关闭移动介质自动播放的方法,包括在文件管理器里面设置或者使用gconf-editor,但是从12.04开始这两种方法都不再好用了,关于移动介质的处理方法被移到了S ...

  2. JavaScript中的直接量与初始器的区别

    很多代码优化及公司规范都会提到 写对象不应该 var obj = new Object() 而应该 var obj = {} 写数组不应该 var arr = new Array() 而应该 var ...

  3. Linux 之创建工作目录-mkdir

    在Linux下创建工作目录,一般使用 "mkdir" 指令,一下将介绍"mkdir"指令的使用方法,供大家参考. 一.使用帮助 在Linux终端(命令行)输入: ...

  4. Linux gcc命令

    一.简介 GCC 的意思也只是 GNU C Compiler 而已.经过了这么多年的发展,GCC 已经不仅仅能支持 C 语言:它现在还支持 Ada 语言.C++ 语言.Java 语言.Objectiv ...

  5. web.xml文件报错:The processing instruction target matching "[xX][mM][lL]" is not allowed.

    昨晚把我的项目上传到了gitlab,然后今天在公司从gitlab下载下来, 发现web.xml报错.

  6. 字符串长度函数strlen()

    如下是我的测试文件: #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { ...

  7. puppet学习笔记(一)

    之前搞了一个月zabbix,基本上是能熟练使用了,不过在后来部署的时候发现这玩意在部署的时候机子少还行,机子多了手动安装手会残的.第一反应是用puppet,后来师父直接用puppet搞定了.索性自己也 ...

  8. 形如(function(){}).call()的js语句

    研究新浪微博的自动登陆流程,其中涉及到它的加密算法脚本,其中有一段如下形式的代码: (function(){...}).call(name) 其中红色的....是函数的内部各种实现,name为一个对象 ...

  9. 谷歌开源项目Google Preview Image Extractor(PIEX) (附上完整demo代码)

    前天偶然看到谷歌开源项目中有一个近乎无人问津的项目Google Preview Image Extractor(PIEX) . 项目地址: https://github.com/google/piex ...

  10. 2014 Super Training #1 C Ice-sugar Gourd 模拟,扫描线

    原题 HDU 3363 http://acm.hdu.edu.cn/showproblem.php?pid=3363 给你一个串,串中有H跟T两种字符,然后切任意刀,使得能把H跟T各自分为原来的一半. ...