windows API 开发飞机订票系统 图形化界面 (二)
首先,用到的数据结构的定义、以及全局变量和函数的声明如下:
1 // Flight.c : 定义应用程序的入口点。 2 // 3 #include "stdafx.h" 4 5 //订单 6 typedef struct OrderForm{ 7 TCHAR IdNum[32]; //订单用户身份证号 8 int Order_Number; //订单号 9 int Tickets_Num; //订票数量 10 TCHAR Flight_Number[16]; //航班号 11 TCHAR Departure[16]; //出发地 12 TCHAR Destination[16]; //目的地 13 TCHAR Date[16]; //出发日期 14 TCHAR TakeOff_Time[16]; //起飞时间 15 TCHAR Landing_Time[16]; //降落时间 16 struct OrderForm *Next; //所有订单链表next 17 struct OrderForm *psgNext; //用户订单链表next 18 }OrderForm; 19 20 //乘客订单链表 21 typedef struct PsgOrderLink{ 22 int OrderNum; //订单数目 23 OrderForm *head; //头结点 24 OrderForm *tail; //尾结点 25 }PsgOrderLink; 26 27 //所有订单列表 28 typedef struct AllOrderLink{ 29 int AllOrderNum; //所有订单数目 30 OrderForm *head; //头结点 31 OrderForm *tail; //尾结点 32 }AllOrderLink; 33 34 //乘客 35 typedef struct Passenger{ 36 TCHAR Name[16]; //姓名 37 TCHAR IdNum[32]; //身份证号码 38 TCHAR PassWord[32]; //密码 39 int TicketNum; //订单数目 40 PsgOrderLink OrderLink; //用户所有订单 41 struct Passenger *Next; 42 }Passenger; 43 44 //乘客链表 45 typedef struct PsgLinkList{ 46 int PsgNum; //账户数量 47 Passenger *head; //头结点 48 Passenger *tail; //尾结点 49 }PsgLinkList; 50 51 //航班 52 typedef struct Flight{ 53 double Fare; //票价 54 int Seat_Number; //座位数 55 int Vacant_Seat; //空余座位数 56 TCHAR Discount[16]; //折扣 57 TCHAR Flight_Number[16]; //航班号 58 TCHAR Departure[16]; //出发地 59 TCHAR Destination[16]; //目的地 60 TCHAR Date[16]; //出发日期 61 TCHAR TakeOff_Time[16]; //起飞时间 62 TCHAR Landing_Time[16]; //降落时间 63 struct Flight *Next; 64 }Flight; 65 66 //航班链表 67 typedef struct FlightLinkList{ 68 Flight *head; //头结点 69 Flight *tail; //尾结点 70 int Flight_Number; //航班数目 71 }FilghtLinkList; 72 73 74 // 全局变量: 75 HICON hIcon; 76 HINSTANCE hInst; //当前实例 77 static TCHAR szBuffer[256]; //缓冲区 78 static PsgLinkList psglink; //所有账户_链表 79 static Passenger *passenger; //登陆账户信息 80 static AllOrderLink allorder; //所有订单_链表 81 static FilghtLinkList flightlink; //所有航班_链表 82 83 84 85 //函数声明 86 BOOL AccountLogIn(HWND); //账户登陆 87 BOOL AccountRegister(HWND); //注册账户 88 BOOL ReadFlightData(HWND); //读入航班信息 89 BOOL ReadAccountData(HWND); //读入账户资料 90 BOOL ReadAccountOrder(HWND,Passenger*); //读入所有订单、账户订单 91 BOOL SearchFlight(HWND); //查询航班 92 BOOL BookTickets(HWND); //订票 93 BOOL _Book_Tickets(HWND,Flight*,int); //订票 94 BOOL Recommend(HWND,Flight*,int); //航班建议 95 BOOL ReturnTickets(HWND); //退票 96 BOOL EntryFlight(HWND); //录入航班 97 BOOL ModifyFlight(HWND); //修改航班信息 98 BOOL PrintFlight(HWND, Flight*); //输出航班信息 99 BOOL WriteFlightData(HWND); //保存航班信息 100 BOOL WriteAccountData(HWND); //保存账户资料 101 BOOL WriteOrderData(HWND); //保存订单信息 102 BOOL CALLBACK LogInDlgProc(HWND, UINT, WPARAM, LPARAM); //登陆窗口窗口过程 103 BOOL CALLBACK MainDlgProc(HWND, UINT, WPARAM, LPARAM); //主界面窗口过程 104 BOOL CALLBACK NameDlgProc(HWND, UINT, WPARAM, LPARAM); //获取新注册用户姓名窗口过程 105 BOOL CALLBACK FlightNumDlgProc(HWND, UINT, WPARAM, LPARAM); //获取用户输入机票数量窗口过程 106 BOOL CALLBACK EntryFlightProc(HWND, UINT, WPARAM, LPARAM); //录入航班窗口过程 107 BOOL CALLBACK ModifyFlightProc(HWND, UINT, WPARAM, LPARAM); //修改航班信息窗口过程
数据结构定义
因为采用的是windows API,所以首先要了解windows程序的消息机制。
Windows是一个以消息为导向的系统,程序只能被动地等待用户操作的消息,不能主动地去读键盘、鼠标等的状态,也就是说,每当键盘上有个键被按下,或者鼠标在屏幕某个位置点击以后,系统就会发出一个消息(Message)给窗口,告诉它某个键被按下去了或是鼠标按键的点击状态。当鼠标点击了程序的某个按钮只要鼠标移动一下,系统也会发出相应的消息,并把鼠标的坐标信息传给窗口。
当我们鼠标点击了我们程序的某个按钮时,会向系统的消息队列发送一个消息(Mseeage),此消息包含了你鼠标点击的位置、该程序的句柄以及鼠标点击时的状态(如是否按住ctrl键等等)。程序中每个窗口在程序代码都有对应的一个窗口过程,即处理由该窗口所产生的消息的函数,而我们写代码的主要工作就在这里了。
我程序的主函数代码如下:
1 //主函数 2 int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR szCmdLine,int iCmdShow) 3 { 4 5 hInst = hInstance; 6 InitCommonControls(); 7 hIcon=LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON1)); 8 return DialogBox(hInst, MAKEINTRESOURCE(IDD_LOGINDLG), NULL, (DLGPROC)LogInDlgProc); 9 }//WinMain
其中,下面这行代码用来加载程序图片:
hIcon=LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON1));
下面贴出各个窗口的窗口过程:
1 //登陆窗口_窗口过程 2 BOOL CALLBACK LogInDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) 3 { 4 switch (uMsg) 5 { 6 //WM_INITDIALOG是当其对话框和子控件全部创建完毕,将要显示内容的时候发送的消息 7 //因此可以在WM_INITDIALOG消息响应函数中添加对编辑框控件的初始化和修改 8 case WM_INITDIALOG: 9 { 10 if (hIcon) 11 SendMessage(hwndDlg, WM_SETICON, ICON_SMALL, (LPARAM)hIcon); 12 ReadAccountData(hwndDlg); //登陆对话框初始化时读入账户资料 13 ReadFlightData(hwndDlg); //登陆对话框初始化时读入航班信息 14 }//WM_INITDIALOG 15 return TRUE; 16 17 case WM_CLOSE: 18 { 19 EndDialog(hwndDlg, 0); 20 }//WM_CLOSE 21 return TRUE; 22 23 case WM_COMMAND: 24 { 25 switch (LOWORD(wParam)) 26 { 27 case IDC_LOGIN: 28 AccountLogIn(hwndDlg); //登陆 29 break; 30 case IDC_REGISTER: 31 AccountRegister(hwndDlg); //注册 32 break; 33 }//switch 34 }//WM_COMMAND 35 return TRUE; 36 37 }//switch 38 return FALSE; 39 }//LogInDlgProc()
其中,下面这行代码用来加载程序标题栏图标
if (hIcon) SendMessage(hwndDlg, WM_SETICON, ICON_SMALL, (LPARAM)hIcon);
然后继续贴代码:
1 //主界面_窗口过程 2 BOOL CALLBACK MainDlgProc(HWND hMainDlg, UINT uMsg, WPARAM wParam, LPARAM lParam){ 3 switch (uMsg) 4 { 5 case WM_INITDIALOG: 6 { 7 if (hIcon) 8 SendMessage(hMainDlg, WM_SETICON, ICON_SMALL, (LPARAM)hIcon); 9 }//WM_INITDIALOG 10 return TRUE; 11 12 case WM_CLOSE: 13 { 14 //关闭程序时将信息保存 15 if (WriteOrderData(hMainDlg) && WriteAccountData(hMainDlg) && WriteFlightData(hMainDlg)) 16 EndDialog(hMainDlg, 0); 17 else 18 MessageBox(hMainDlg, TEXT("保存信息错误!"), TEXT("提示"), MB_OK | MB_ICONINFORMATION); 19 }//WM_CLOSE 20 return TRUE; 21 22 case WM_COMMAND: 23 { 24 switch (LOWORD(wParam)) 25 { 26 case IDC_SEARCH: 27 { 28 SearchFlight(hMainDlg); //查找航班 29 break; 30 } 31 case IDC_TICKET: 32 { 33 BookTickets(hMainDlg); //订票 34 break; 35 } 36 case IDC_RETURNTICKET: 37 { 38 ReturnTickets(hMainDlg); //退票 39 break; 40 } 41 case IDC_ENTRY: 42 { //录入航班对话框 43 DialogBox(hInst, MAKEINTRESOURCE(IDD_ENTRY), NULL, (DLGPROC)EntryFlightProc); 44 break; 45 } 46 case IDC_MODIFYFLIGHT: 47 { //修改航班信息对话框 48 DialogBox(hInst, MAKEINTRESOURCE(IDD_MODIFYFLT), NULL, (DLGPROC)ModifyFlightProc); 49 break; 50 } 51 }//switch 52 }//WM_COMMAND 53 return TRUE; 54 }//switch 55 return FALSE; 56 }//MainDlgProc()
1 //获取用户输入机票数量_窗口过程 2 BOOL CALLBACK FlightNumDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam){ 3 switch (uMsg) 4 { 5 6 case WM_INITDIALOG: 7 { 8 if (hIcon) 9 SendMessage(hwndDlg, WM_SETICON, ICON_SMALL, (LPARAM)hIcon); 10 }//WM_INITDIALOG 11 return TRUE; 12 13 case WM_CLOSE: 14 { 15 wsprintf(szBuffer, TEXT("\0")); 16 EndDialog(hwndDlg, FALSE); 17 }//WM_CLOSE 18 return TRUE; 19 20 case WM_COMMAND: 21 { 22 switch (LOWORD(wParam)) 23 { 24 case IDOK: 25 wsprintf(szBuffer, TEXT("\0")); 26 GetDlgItemText(hwndDlg, IDC_TICKETNUM, szBuffer, 256); 27 EndDialog(hwndDlg, TRUE); 28 break; 29 }//switch 30 }//WM_COMMAND 31 return TRUE; 32 33 }//switch 34 return FALSE; 35 }
1 //录入航班_窗口过程 2 BOOL CALLBACK EntryFlightProc(HWND hEntryDlg, UINT uMsg, WPARAM wParam, LPARAM lParam){ 3 switch (uMsg) 4 { 5 case WM_INITDIALOG: 6 { 7 if (hIcon) 8 SendMessage(hEntryDlg, WM_SETICON, ICON_SMALL, (LPARAM)hIcon); 9 } 10 return TRUE; 11 12 case WM_CLOSE: 13 { 14 EndDialog(hEntryDlg, 0); 15 }//WM_CLOSE 16 return TRUE; 17 18 case WM_COMMAND: 19 { 20 switch (LOWORD(wParam)) 21 { 22 case IDC_ADDFLT: 23 { 24 EntryFlight(hEntryDlg); //录入航班 25 break; 26 }//GETNAME 27 case IDC_QUIT: 28 { 29 EndDialog(hEntryDlg, FALSE); 30 break; 31 }//GETNAMECANCEL 32 33 }//stitch 34 35 }//WM_COMMAND 36 return TRUE; 37 38 }//stitch 39 40 return FALSE; 41 } 42 43 44 //修改航班信息_窗口过程 45 BOOL CALLBACK ModifyFlightProc(HWND hModifyDlg, UINT uMsg, WPARAM wParam, LPARAM lParam){ 46 switch (uMsg) 47 { 48 case WM_INITDIALOG: 49 { 50 if (hIcon) 51 SendMessage(hModifyDlg, WM_SETICON, ICON_SMALL, (LPARAM)hIcon); 52 } 53 return TRUE; 54 55 case WM_CLOSE: 56 { 57 EndDialog(hModifyDlg, 0); 58 }//WM_CLOSE 59 return TRUE; 60 61 case WM_COMMAND: 62 { 63 switch (LOWORD(wParam)) 64 { 65 case IDC_MODIFY: 66 { 67 ModifyFlight(hModifyDlg); //修改航班信息 68 break; 69 }//GETNAME 70 case IDC_QUIT: 71 { 72 EndDialog(hModifyDlg, FALSE); 73 break; 74 }//GETNAMECANCEL 75 76 }//stitch 77 78 }//WM_COMMAND 79 return TRUE; 80 }//stitch 81 82 return FALSE; 83 }//ModifyFlightProc()
在此给出了几个窗口的窗口过程,其中所调用的函数的实现将在下一篇博文中给出。
转载于:https://www.cnblogs.com/z941030/p/4495711.html
windows API 开发飞机订票系统 图形化界面 (二)相关推荐
- windows API 开发飞机订票系统 图形化界面 (一)
去年数据结构课程设计的作品,c语言实现,图形化界面使用windows API实现. 首发在我csdn博客:http://blog.csdn.net/u013805360/article/details ...
- 飞机订票系统 python实现(大二上数据结构课设)
说明: 本博客是从课设报告中截取的重要部分.这个飞机订票系统是本人大二上的数据结构课设,功能相对完善,界面相对美观.图形界面,本来想用Qt5(python中一个图形界面的类库,风格偏向于win10)去 ...
- 【性能测试】Loadrunner12.55(二)-飞机订票系统-脚本录制
1.1 飞机订票系统 Loadrunner 12.55不会自动安装飞机订票系统,要自己手动安装. 我们需要下载Web Tools以及一个小插件strawberry https://marketplac ...
- 软件自动化测试订飞机票,飞机订票系统自动化测试方案[教学知识]
<飞机订票系统自动化测试方案[教学知识]>由会员分享,可在线阅读,更多相关<飞机订票系统自动化测试方案[教学知识](18页珍藏版)>请在人人文库网上搜索. 1.飞机订票系统自动 ...
- 软件测试剧场订票系统背景,软件测试教学资源学生作品飞机订票系统的功能测试项目报告...
软件测试教学资源学生作品飞机订票系统的功能测试项目报告 <软件测试>课程项目库学生作品 项目名称飞机订票系统的功能测试 院 系计算机与软件学院 专 业 软件技术(测试) 班 级软件 093 ...
- 课程设计---飞机订票系统
1. 题目 本课程设计的题目为:飞机订票系统. 2. 项目描述 基于目前人们外出远行频繁,为方便乘客提前买票及优化飞机航空订票服务,需要开发一个飞机订票系统,此程序就是要实现航班情况的录入,查询,订票 ...
- Java版飞机订票系统
数据结构课程设计题目: [飞机订票系统] 通过此系统可以实现如下功能: 录入:可以录入航班情况(数据存储在一个数据文件中,数据结构和具体数据自定) 查询:可以查 ...
- Loadrunner12检查点之飞机订票系统
在上一篇文章中(https://blog.csdn.net/VEclipses/article/details/88662287),我们录制了登录功能的脚本,那我们现在就为脚本添加检查点. 什么是检查 ...
- 基于ssh的航空订票系统-飞机订票系统javaweb-机票订购课程设计java代码(源码+数据库文件+文档)
基于ssh的航空订票系统-飞机订票系统javaweb-机票订购java代码(源码+数据库文件+文档) 注意:该项目只展示部分功能,如需了解,评论区咨询即可. 作者:IT跃迁谷 1.开发环境 开发语言: ...
最新文章
- Guidance Package Manager button doesn’t appear in the VS menu
- sqoop 1.4.5 增量导入hive 0.12.0
- slice 和 splice 区别
- 【转】Javascript面向对象编程(二):构造函数的继承
- 感觉很好的IT自学参考教程收集
- TensorFlow学习笔记(十九) 基本算术运算和Reduction归约计算
- LINUX REDHAT第十单元文档
- UDP(发短信:简单模拟)
- php5.6获取文件名,PHP 5.6:headers_sent间歇性地返回true,空文件名和第0行
- Windows下的修改Tomcat的可用内存
- 【大规模深度强化学习(一) 】深度强化学习中的异步方法(A3C)
- 解析rtcm32报文工具_RTCM数据格式实时处理方法应用
- WPS全部常用快捷键
- 如何开始使用 Java 机器学习
- mysql 性能优化方向
- 深入理解蓝牙BLE之“BQB认证”
- Simulink选择器模块(Selector)
- 正易判讀 6-1 韓長庚 著
- 企业微信/skype sdk demo
- 股票代码中OF与SZ的区别
热门文章
- Mysql CURD复习(数据库、表、数据)
- 虚拟dom与diff算法 分析
- 学习面试题Day08
- python模块之lib2to3(py2转py3自动化工具)
- 你们计算机专业的学生应该看看这篇文章
- 在腾讯云轻量云服务器上搭建mysql数据库
- c++设置不适用预编译头
- 逆波兰计算器android源码简书,计算器的核心算法-JavaScript实现(逆波兰表达式)...
- html5支持udp协议吗,HTML5的TCP和UDP Web Socket API草案定稿
- 信息收集——DNS域名系统