windows API 开发飞机订票系统 图形化界面 (四)
接下来的是录入航班、修改航班信息功能的实现:
//录入航班
BOOL EntryFlight(HWND hEntryDlg){ TCHAR szDiscount[];
TCHAR szFare[],szSeat_Number[];
TCHAR szFlight_Number[], szDate[];
TCHAR szDeparture[], szDestination[];
TCHAR szTakeOff_Time[], szLanding_Time[]; Flight *p = (Flight *)malloc(sizeof(Flight)),*q;
if (!p){
MessageBox(hEntryDlg, TEXT("内存申请错误!"), TEXT("错误"), MB_OK | MB_ICONERROR);
return FALSE;
} GetDlgItemText(hEntryDlg, IDC_DEPARTURE, szDeparture, ); //获取录入航班信息
GetDlgItemText(hEntryDlg, IDC_DESTINATION, szDestination, );
GetDlgItemText(hEntryDlg, IDC_FLTNUM, szFlight_Number, );
GetDlgItemText(hEntryDlg, IDC_FARE, szFare, );
GetDlgItemText(hEntryDlg, IDC_TAKEOFFTIME, szTakeOff_Time, );
GetDlgItemText(hEntryDlg, IDC_LANDINGTIME, szLanding_Time, );
GetDlgItemText(hEntryDlg, IDC_SEATNUM, szSeat_Number, );
GetDlgItemText(hEntryDlg, IDC_DISCOUNT, szDiscount, );
GetDlgItemText(hEntryDlg, IDC_DATE, szDate, ); if (!lstrlen(szDeparture) || !lstrlen(szDestination) ||
!lstrlen(szFlight_Number) || !lstrlen(szFare) ||
!lstrlen(szTakeOff_Time) || !lstrlen(szLanding_Time) ||
!lstrlen(szSeat_Number))
{
MessageBox(hEntryDlg, TEXT("请您填写完整航班信息!"), TEXT("提示"), MB_OK | MB_ICONINFORMATION);
return FALSE;
} q = flightlink.head;
while (q){
if (!lstrcmp(q->Flight_Number, szFlight_Number) && !lstrcmp(q->Date,szDate)){
MessageBox(hEntryDlg, TEXT("对不起,同一航班在一天内只能有一班"), TEXT("提示"), MB_OK | MB_ICONINFORMATION);
free(p);
return FALSE;
}
q = q->Next;
}//while lstrcpy(p->Date, szDate); //填入录入航班结点信息
lstrcpy(p->Discount, szDiscount);
lstrcpy(p->Departure, szDeparture);
lstrcpy(p->Destination, szDestination);
lstrcpy(p->TakeOff_Time, szTakeOff_Time);
lstrcpy(p->Landing_Time, szLanding_Time);
lstrcpy(p->Flight_Number, szFlight_Number);
p->Fare = _ttof(szFare);
p->Seat_Number = _ttoi(szSeat_Number);
p->Vacant_Seat = p->Seat_Number;
p->Next = NULL; if (flightlink.head == NULL) //将新结点添至航班链表
flightlink.head = p;
else
flightlink.tail->Next = p;
flightlink.tail = p;
flightlink.Flight_Number++; //航班数目增加 MessageBox(hEntryDlg, TEXT("航班录入成功!"), TEXT("提示"), MB_OK | MB_ICONINFORMATION); return TRUE;
}//EntryFlight()
//修改航班信息
BOOL ModifyFlight(HWND hModifyDlg){
int seat_num;
TCHAR szDiscount[];
TCHAR szFare[], szSeat_Number[];
TCHAR szTakeOff_Time[], szLanding_Time[];
TCHAR Mdf_flt_num[], Mdf_flt_date[]; OrderForm *q;
Flight *p; GetDlgItemText(hModifyDlg, IDC_MDFFLTNUM, Mdf_flt_num, ); //获取要修改的航班
GetDlgItemText(hModifyDlg, IDC_MDFDATE, Mdf_flt_date, ); if (!lstrlen(Mdf_flt_num)){
MessageBox(hModifyDlg, TEXT("请输入所要修改信息的航班号"), TEXT("信息"), MB_OK | MB_ICONINFORMATION);
return FALSE;
} GetDlgItemText(hModifyDlg, IDC_FARE, szFare, ); //获取要修改的信息
GetDlgItemText(hModifyDlg, IDC_DISCOUNT, szDiscount, );
GetDlgItemText(hModifyDlg, IDC_SEATNUM, szSeat_Number, );
GetDlgItemText(hModifyDlg, IDC_TAKEOFFTIME, szTakeOff_Time, );
GetDlgItemText(hModifyDlg, IDC_LANDINGTIME, szLanding_Time, ); p = flightlink.head;
while (p){ //查找要修改的航班
if (!lstrcmp(Mdf_flt_num, p->Flight_Number) && !lstrcmp(Mdf_flt_date, p->Date)){
if (lstrlen(szFare)) //改变航班票价
p->Fare = _ttof(szFare);
if (lstrlen(szDiscount)) //改变航班折扣
wsprintf(p->Discount, szDiscount);
if (lstrlen(szSeat_Number)){
seat_num = _ttoi(szSeat_Number);
if ((p->Seat_Number - seat_num) > p->Vacant_Seat){ //余座数量>=0
MessageBox(hModifyDlg, TEXT("对不起,座位数过少,请重新填写"), TEXT("提示"), MB_OK | MB_ICONINFORMATION);
return FALSE;
}
p->Vacant_Seat -= p->Seat_Number - seat_num; //改变余票数量
p->Seat_Number = seat_num; //改变座位数
}//if
if (lstrlen(szTakeOff_Time)){ //改变航班起飞时间
wsprintf(p->TakeOff_Time, szTakeOff_Time);
q = allorder.head; //改变该航班所有订单出发时间
while (q){
if (!lstrcmp(q->Flight_Number, p->Flight_Number) && !lstrcmp(q->Date, p->Date))
wsprintf(q->TakeOff_Time, szTakeOff_Time);
q = q->Next;
}
}//if
if (lstrlen(szLanding_Time)){ //改变航班降落时间
wsprintf(p->Landing_Time, szLanding_Time);
q = allorder.head; //改变该航班所有订单降落时间
while (q) {
if (!lstrcmp(q->Flight_Number, p->Flight_Number) && !lstrcmp(q->Date, p->Date))
wsprintf(q->Landing_Time, szLanding_Time);
q = q->Next;
}
}//if
MessageBox(hModifyDlg, TEXT("修改成功!"), TEXT("提示"), MB_OK | MB_ICONINFORMATION);
return TRUE;
}//if
p = p->Next;
}//while MessageBox(hModifyDlg, TEXT("对不起,您所要修改的航班尚未录入。"), TEXT("提示"), MB_OK | MB_ICONINFORMATION);
return FALSE; }//ModifyFlight()
至此,订票系统的功能已经基本全部实现了,剩下的问题就是在程序退出时将账户、航班、订单数据写进文件里。
具体实现起来很简单,需要注意的知识写入与读取要相对应。代码如下:
//保存账户资料
BOOL WriteAccountData(HWND hMainDlg){
Passenger *p;
FILE *fp;
if ((fp = fopen(".\\AccountData.txt", "w")) == NULL){
MessageBox(hMainDlg, TEXT("账户信息保存出现错误!"), TEXT("错误"), MB_OK | MB_ICONERROR);
return FALSE;
} p = psglink.head;
while (p){
fprintf(fp, "%s\n%s\n%s\n", p->Name, p->IdNum, p->PassWord);
p = p->Next;
}//while fclose(fp);
return TRUE;
}//WriteAccountData //保存订单信息
BOOL WriteOrderData(HWND hMainDlg){
OrderForm *p;
FILE *fp;
if ((fp = fopen(".\\OrderForm.txt", "w")) == NULL){
MessageBox(hMainDlg, TEXT("订单信息保存出现错误!"), TEXT("错误"), MB_OK | MB_ICONERROR);
return FALSE;
}
p = allorder.head;
while (p){
fprintf(fp, "%s\n", p->IdNum);
fprintf(fp, "%d\n", p->Order_Number);
fprintf(fp, "%d\n", p->Tickets_Num);
fprintf(fp, "%s\n", p->Flight_Number);
fprintf(fp, "%s\n", p->Departure);
fprintf(fp, "%s\n", p->Destination);
fprintf(fp, "%s\n", p->Date);
fprintf(fp, "%s\n", p->TakeOff_Time);
fprintf(fp, "%s\n", p->Landing_Time);
p = p->Next;
}//while
fclose(fp);
return TRUE;
}//WriteOrderData() //保存航班信息
BOOL WriteFlightData(HWND hMainDlg){
Flight *p;
FILE *fp;
if ((fp = fopen(".\\FlightData.txt", "w")) == NULL){
MessageBox(hMainDlg, TEXT("航班信息保存出现错误!"), TEXT("错误"), MB_OK | MB_ICONERROR);
return FALSE;
}
p = flightlink.head;
while (p){
fprintf(fp, "%s\n", p->Flight_Number);
fprintf(fp, "%.2lf\n", p->Fare);
fprintf(fp, "%s\n", p->Discount);
fprintf(fp, "%d\n%d\n", p->Seat_Number, p->Vacant_Seat);
fprintf(fp, "%s\n", p->Departure);
fprintf(fp, "%s\n", p->Destination);
fprintf(fp, "%s\n", p->Date);
fprintf(fp, "%s\n", p->TakeOff_Time);
fprintf(fp, "%s\n", p->Landing_Time);
p = p->Next;
}//while
fclose(fp);
return TRUE;
}//WriteFlight()
至此,这个飞机订票系统算是完成了,其中还是有很多不足之处。查找算法只是简单的遍历链表,数据结构也只是采用了单链表,倒是订单用上了十字链表来存储。查找起来效率不高,一旦数据量变大,便会很耗费时间,不过考虑到这只是一个课程设计,数据量很小,查找起来时间耗费上没有多少差别,姑且就这样吧。
把头文件以及其资源头文件代码就不贴出来了,想看的朋友可以直接把源码下载下来看一下。
windows API 开发飞机订票系统 图形化界面 (四)的更多相关文章
- windows API 开发飞机订票系统 图形化界面 (一)
去年数据结构课程设计的作品,c语言实现,图形化界面使用windows API实现. 首发在我csdn博客:http://blog.csdn.net/u013805360/article/details ...
- windows API 开发飞机订票系统 图形化界面 (二)
首先,用到的数据结构的定义.以及全局变量和函数的声明如下: // Flight.c : 定义应用程序的入口点. // #include "stdafx.h" //订单 typede ...
- 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 ...
随机推荐
- Azure 上为Liunx VM 挂载File类型的存储。
1. Create a storage account in Azure, copy the storage account endpoint URL (with postfix of "f ...
- [转]Ionic 实现双击返回键退出功能
本文转自:http://ionichina.com/topic/5514b539b6421f9166aa5f88 一.准备 Toast插件 插件地址:cordova plugin add https: ...
- 如何利用ZBrush中的DynaMesh创建身体(二)
之前的ZBrush教程我们在了解了人体比例和结构的前提下,使用ZBrush®软件中的Append功能和InsertSphere笔刷添加躯干.本讲将参照图片继续对“亡灵僵尸”的形体结构进行细致刻画和使用 ...
- 合工大OJ 1330 种树
Description 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2, ...
- leetcode-Single NumberII
https://leetcode.com/problems/single-number-ii/ 很无耻的又一次使用了黑暗料理... class Solution: # @param {integer[ ...
- uGUI练习(六) ScrollView
练习目标 练习uGUI的滑动组件 一.相关组件 ScrollRect Mask Grid Layout Group Scrollbar 二.步骤 1.创建一个Panel,命名为ScrollRect,添 ...
- java 21 - 4 字符流的文件复制操作以及简化
既然字节流可以复制文件,那么字符流当然也有. 同样的思路: 数据源: a.txt -- 读取数据 -- 字符转换流 -- InputStreamReader目的地: b.txt -- 写出数据 -- ...
- 准备写一些读书笔记,最近在填坑 SQL学习指南 Spring in Action effective Java
把一些读书的理解通过白板图的形式展示出来,加深自己的认识, 因为目前没有工程项目练手,暂时在学习中把这些知识深化认识一下
- 用mel编写自定义节点的属性编辑器界面
用mel编写自定义节点的属性编辑器界面比较麻烦,而且网上例子又少,下面给出一个范例,说明基本的格式 // 初始化节点时调用 global proc initControl(string $attrNa ...
- [WPF]资源字典——程序集之间的资源共享 简单换皮肤
直接上代码,已便已后自己查况阅,新手也可以看! 1.新建一个资料类和一个WPF工程 2.APP.XAML应该资源字典,注意应Source格式,前面一定要有“/” <ResourceDiction ...