windows API 开发飞机订票系统 图形化界面 (二)
首先,用到的数据结构的定义、以及全局变量和函数的声明如下:
// 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 开发飞机订票系统 图形化界面 (二)的更多相关文章
- windows API 开发飞机订票系统 图形化界面 (四)
接下来的是录入航班.修改航班信息功能的实现: //录入航班 BOOL EntryFlight(HWND hEntryDlg){ TCHAR szDiscount[]; TCHAR szFare[],s ...
- windows API 开发飞机订票系统 图形化界面 (一)
去年数据结构课程设计的作品,c语言实现,图形化界面使用windows API实现. 首发在我csdn博客:http://blog.csdn.net/u013805360/article/details ...
- windows API 开发飞机订票系统 图形化界面 (三)
来吧,接下来是各个功能的函数的实现代码. 首先,程序运行时加载读入账户信息和航班信息.接下来就该读取文件了. 我把账户资料和航班信息储存在了.txt文件里 那么问题就来了,挖掘机...额,不对,应该怎 ...
- 【性能测试】Loadrunner12.55(二)-飞机订票系统-脚本录制
1.1 飞机订票系统 Loadrunner 12.55不会自动安装飞机订票系统,要自己手动安装. 我们需要下载Web Tools以及一个小插件strawberry https://marketplac ...
- Java版飞机订票系统
关注微信公众号:Worldhello 回复 飞机订票系统 可获得系统源代码并可加群讨论交流 数据结构课程设计题目: [飞机订票系统] 通过此系统可以实现如下功能 ...
- web类协议脚本-飞机订票系统示例
以下是LR自带的飞机订票系统的Demo,希望能帮助大家. Action() { int iRand; int iTmp; char *strTmpA; char *strTmpB; char *str ...
- loadrunner飞机订票系统从登陆订票退票登出的脚本实现代码调试通过
在LR自带的飞机订票系统中,完整模拟一个用户从登陆->订票->退票->登出这样一个业务流程,分解每个事务为一个Action: 进入首页->登陆->进入订票页面->选 ...
- loadrunner笔记(二):飞机订票系统--客户信息注册
(一) 几个重要概念说明 集合点:同步虚拟用户,以便同一时间执行任务. 事务:事务是指服务器响应用户请求所用的时间,当然它可以衡量某个操作,如登录所需要的时间,也可以衡量一系列的操作所用的时间,如从 ...
- LR自带网站飞机订票系统 启动
LR自带的网站:飞机订票系统 可是如何启动自带的网站呢?? 一.启动服务:开始-所有程序--HP Software-HP LoadRunner-Samples-Web-Start Web Server ...
随机推荐
- SQL Server 2008 R2——学习/练习/错误/总结/搜集
==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...
- 问题解决——在结构体中使用set保存结构体数据
=====================声明========================== 本文原创,转载请明确的注明出处和作者,并保持文章的完整性(包括本声明部分). 本文链接:http:/ ...
- andriod增、删、改、查
将数据库的增删改查单独放进一个包 */ package com.itheima28.sqlitedemo.dao; import java.util.ArrayList; import java.ut ...
- 开启mysql慢查询
Linux查看mysql 安装路径一.查看文件安装路径由于软件安装的地方不止一个地方,所有先说查看文件安装的所有路径(地址).这里以mysql为例.比如说我安装了mysql,但是不知道文件都安装在哪些 ...
- css常见问题
CSS: 1.垂直居中布局 (1)已知宽高 (2)未知宽高 https://segmentfault.com/q/1010000004073623 2.文字退格 text-indent: 4em; 3 ...
- html弹窗半透明
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="C ...
- UWP 矢量字体图标(iconfont)使用
本文使用 阿里巴巴开源字体: 选择矢量字体图标: 查看或编辑 Unicode编码 或字体名称 下载到本地,添加到uwp项目 代码中写法 Text:Unicode编码 FontFamily:文件路径#字 ...
- phpcms v9调用多个栏目下文章的方法
示例:{pc:get sql="SELECT * from v9_news where status=99 and catid in(6,7,8) order by id DESC" ...
- linux下mysql安装、目录结构、配置
1.准备安装程序(官方网站下载) 服务端:MySQL-server-community-5.1.44-1.rhel4.i386.rpm 客户端:MySQL-client-community-5.1.4 ...
- HTable和HTablePool使用注意事项
HTable和HTablePool都是HBase客户端API的一部分,可以使用它们对HBase表进行CRUD操作.下面结合在项目中的应用情况,对二者使用过程中的注意事项做一下概括总结. HTable ...