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 ...
随机推荐
- CentOS 7 安装Docker
1.安装前检查: a.内核版本 uname -a b.检查Device Mapper ls -l /sys/class/misc/device-mapper 2.安装Docker: a.更新系统包到最 ...
- 修改Tomcat服务器的端口号
关键技术: Connector子元素下的port是设置服务器端口,而connection Timeout则是服务器连接超时单位为毫秒. 操作过程: (1)采用记事本打开Tomcat安装目录下的conf ...
- 怎么通过 Microsof Office Project 2010 来写功能开发计划
新建一个Microsof Office Project 2010 功能, 直接填写,可以通过快捷键来改变目录分级情况.(shift+alt+ —> 或者 <—) 也可以通过导航栏上面的摘要 ...
- which,whereis, locate, find
which 在PATH环境变量中的路径中查找目标文件,所以用来查找都是可执行文件,Linux下的各种命令本质上就是一个可执行的文件,所以我们安装新的软件之后通常都会有相应的命令将其打开,就是因为安装的 ...
- nyoj 170 网络的可靠性
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=170 思路:统计每个节点的度,将度为1的节点消去所需要的最少的边即为答案. 代码: #in ...
- HttpClient如何解决302重定向问题
最近的接口测试,发现接口地址报302错误,通过上网搜索,发现问题所在,解决办法是需要请求重定向后的URI. package com.btv; import org.apache.http.Header ...
- 【读书笔记《Android游戏编程之从零开始》】3.Android 游戏开发常用的系统控件(Button、Layout、ImageButton)
3.1 Button Button这控件不用多说,就是一个按钮,主要是点击后进行相应事件的响应. 给组件添加ID属性:定义格式为 android:id="@+id/name",这里 ...
- Volley(六 )—— 从源码带看Volley的缓存机制
磁盘缓存DiskBasedCache 如果你还不知道volley有磁盘缓存的话,请看一下我的另一篇博客请注意,Volley已默认使用磁盘缓存 DiskBasedCache内部结构 它由两部分组成,一部 ...
- ArcGis 统计方法
from:http://blog.sina.com.cn/s/blog_4177d50b0100fjbg.html 概述 一般常用的统计功能例如:唯一字段统计.数据行数统计.数据值求和统计等. 1.基 ...
- [转]reids客户端 redis-cli用法
连接:redis-cli -h machine -p port -n db转的:每次都搜,还是扔在这 Redis提供了丰富的命令(command)对数据库和各种数据类型进行操作,这些command可以 ...