民 航 售 票 系 统
班级 :
时间: 西北大学***
2008-**-**
1.需求分析
以无歧义的陈述说明项目开发的任务,强调的是该项目要实现什么?并明确规定: (1) 项目采用的技术路线,支持软件; (2) 系统整体框架图; (3) 项目实现的功能点;
该项目为民航订票系统。由于经济水平的不断提高,出行选择飞机的旅客也逐渐增多,为方便用户订票退票买票,对民航订票系统的要求也在逐年提高。特此编写了一个民航机票订票系统的代码程序,它的功能主要是完成 航班信息的录入、编辑、修改;用户的注册、订票、查票、退票、买票
(1) 项目采用的技术路线,支持软件
该项目用c 语言实现,创建结构体变量,并以链表的形式将航班信息、订票人信息、国内航班已订票信息和国际航班已订票信息写入文件中。程序运行开始,打开文件并将其分别链入链表之中;程序结束关闭并保存文件。整体系统功能全部由链表实现。
在主函数main()函数中,只调用一个函数,在系统中,函数之间采用级联调用,即一个函数里调用另一个函数,每个函数实现一个单独的功能,可被一次或多次调用。 (2) 系统整体框架图
(3) 项目实现的功能点 航班信息录入、删除、修改
分别按照航班号、起始站、终点站、航班日期、航班价钱、打折信息、用户名、身份证号、护照号查找航班信息
分别按照航班号、起点站、终点站、座位数总数、已售出座位数、价格、折扣信息对航班信息进行排序
分别对航班总数、已售出机票数、未售出机票数、打折机票情况、某个航班的售票情况、热门航班的前十名、本月消费额最大的五个用户、入座率不足50%的航班进行统计
文件的打开、保存和另存为
用户信息的注册、信息的修改、用户密码的修改、民航机票售票员的创建
注册用户的国际航班订票、国内航班订票、国际和国内航班对已订票信息的查询、退票、已订票用户买票、未定票用户买票
2.概要设计
说明项目包含的所有模块及其交互关系,所有类和接口的定义,类或接口之间的层次/调用关系,数据的定义形式,文件的组织结构。
系统定义了4个.h 文件,2个.c 文件。Flight_Book.h用来存放所有库文件的声明,如#include 语句。 Flight_Book_define.h用来存放所有变量的宏定义,如#define Name_Length_Max (20)(姓名的最大长度)。Flight_Book_hanshu.h用来存放所有函数的声明语句,如int Search_by_no() (按航班号查找函数)。Flight_Book_struct.h用来存放所有的结构体及枚举类型信息,如
typedef enum tagF_SORT{
F_SORT_BY_NO
= 1,
//排序菜单的用户输入选择
//通过航班号排序 //通过起始站排序 //通过终点站排序 //通过座位数排序 //通过票价排序 //通过折扣排序 //通过未售座位数排序 //退出排序菜单
F_SORT_BY_FROMPLACE, F_SORT_BY_TOPLACE,
F_SORT_BY_SEATAMOUNT,
F_SORT_BY_PRICE,
F_SORT_BY_DISCOUNT,
F_SORT_BY_UNSOLDAMOUNT, F_SORT_EXIT
}F_SORT_MENU_SELECT;
Flight_Book_main.c函数,用来编写主函数void main()。 Flight_Book_hanshu.c 函数,用来编写程序调用的所有子函数。
系统分为四种用户:浏览用户、注册用户、售票员和系统管理员。每种用户的具体功能
如下。各种用户的功能有交叉,有相同点也有不同点。
浏览用户:航班信息查找、航班信息排序、注册信息录入
注册用户:航班信息查找、排序、国际航班订票、国内航班订票、查看订票信息、退票、修改个人信息、修改密码
售票员:航班信息查找、排序、国际航班已订票用户买票、国内航班已订票用户买票、未订票用户买票、
系统管理员:航班信息查找、排序、统计、航班信息录入、修改、删除、创建民航机票售票员、管理员密码修改、文件备份
程序中所需的所有数据的宏定义都定一在Flight_Book_define.h头文件中,枚举类型变量选择以及及构体变量的定义都在Flight_Book_struct.h中。程序中不出现任何数字。
系统定义了四个主要结构体 (1)航班信息结构体
typedef struct Flight_Info //航班信息结构体 {
char FlightNo[Flight_No_Max]; //航班号
char FromPlace[Place_Length_Max]; //航线起始站
char ToPlace[Place_Length_Max]; //航线终点站 char Date[Date_Length]; //航班日期 int SeatAmount; //票数 int unSoldAmount;
//剩余票数
int Price; //票价 float Discount; //折扣信息 struct Flight_Info *next;
}F_Info,*Flight_List;
此结构体创建的链表用来存放航班信息。此链表节点的信息存放在flight1.txt 文件中。程序开始时,进行文件载入调用void Flight_Load()函数,将文件中的所有信息存放在以FL 为头结点的链表中。程序运行中,只对链表进行修改,不对文件进行直接操作。程序结束后调用void Flight_Save()函数,执行用户信息保存功能,将链表中的所有用户信息重新写入文件flight1.txt 中
用户信息结构体。包括注册用户、售票员和系统管理员
typedef struct Booker_Info //用户信息 {
char UserName[Name_Length_Max]; //用户名
char Password[Password_Length]; //密码 char Name[Name_Length_Max]; //姓名 char Sex; //性别 char Nation[Nation_Length_Max]; //民族 char ID[ID_No]; //身份证号 float Crash;
//累计购票金额
//用户类型
MENU_SELECT type;
struct Booker_Info *next; }Booker_Info,*Booker_List;
此结构体创建的链表用来存放系统管理员、售票员、以及注册用户的信息。此链表节点的信息存放在flight.txt 文件中。程序开始时,进行文件载入调用void Booker_Load()函数,将文件中的所有信息存放在以L 为头结点的链表中。程序运行中,只对链表进行修改,不对文件进行直接操作。程序结束后调用void Booker_Save()函数,执行用户信息保存功能,将链表中的所有用户信息重新写入flight.txt 文件中。
国内航班订票人信息结构体
typedef struct User_Booked_Ticket //国内用户订票信息 {
char UserName[Name_Length_Max]; //用户名
char FlightNo[Flight_No_Max]; //航班号
char Date[Date_Length]; //航班日期 int BookAmount; char ID[ID_No];
//订票数 //身份证号
struct User_Booked_Ticket * next; }User_Booked_Ticket,*Ticket_List;
此结构体创建的链表用来存放注册用户所订的国内航班机票信息。此链表节点的信息存放在d:\\book_ticket_info.txt文件中。程序开始时,进行文件载入,调用void Ticket_Load()函数,将文件中的所有信息存放在以T 为头节点的链表中。程序运行中,支队链表进行修改,不对文件进行直接操作。程序结束后,调用void Ticket_Save()函数,执行用户信息保存功能,将链表中的所有用户信息重新写入文件book_ticket_info.txt中。
国际航班订票人信息结构体
typedef struct outcountry_User_Booked_Ticket //国际用户订票信息 {
char UserName[Name_Length_Max];
//用户名
char FlightNo[Flight_No_Max];
char Date[Date_Length]; int BookAmount; char ID[ID_No];
//航班号 //航班日期 //订票数 //身份证号 //签证国家 //签证日期 //护照号
char VisaCountry[Country_Length_Max]; char VisaDate[Date_Length]; char Passport[Passport_No];
struct outcountry_User_Booked_Ticket * next; }outcountry_User_Booked_Ticket,*outcountry_Ticket_List;
此结构体创建的链表用来存放注册用户所订的国际航班机票信息。此链表节点的信息存放在d:\\outcountry_book_ticket_info.txt文件中。程序开始时,进行文件载入,调用void outcountry_Ticket_Load()函数,将文件中的所有信息存放在以OCT 为头节点的链表中。程序运行中,只对链表进行修改,不对文件进行直接操作。程序结束后,调用void outcountry_Ticket_Save()函数,执行用户信息保存功能,将链表中的所有用户信息重新写入outcountry_book_ticket_info.txt文件中。
3.详细设计
实现概要设计中定义的所有类和接口的成员变量和方法的原型,对复杂操作按照算法书写规范用写出过程或函数形式的算法框架,给出主要函数的流程图,画出主要算法的时序图,交互图。
(1)初始化文件 flight.txt 和 flight1.txt 和 settingpath.txt 和 userpass.txt
(2)文件载入 (3)函数调用。
在main()函数中调用函数 LoadFile(pAllData),MainMenu();MainMenu()函数为显示前端界面函数。打印输出“欢迎进入民航订票系统”。在此函数中调用初始化函数Initsys(),将所有的文件初始化并执行(2)文件载入中的四个load 函数。之后调用get_front_menu()函数。此函数打印并执行主菜单。
get_front_menu()函数中,调用主菜单选项print_front_menu()。 Case 1: get_ScanUser_menu() 获取浏览用户主菜单。 Case 2: get_RegistUser_menu() 获取注册用户主菜单。
Case 3: get_Seller_menu() 获取售票员主菜单 Case 4: get_Admin_menu() 获取系统管理员主菜单。
在get_ScanUser_menu() 获取浏览用户主菜中,先调用print_ScanUser_menu()函数,打印浏览用户菜单。
Case 1: get_search_menu() 获取查找菜单 Case 2: get_sort_menu() 获取排序菜单 Case 3: Register_new_user() 注册新用户 Case 4: 推出。
在get_RegistUser_menu() 获取注册用户主菜单中,先调用print_RegistUser_menu()函数,打印注册用户菜单。
Case 1: get_search_menu() 获取查找用户菜单 Case 2: get_sort_menu() 获取排序菜单 Case 3: get_RBookTicket_menu() 进入订票子菜单
Case 4: get_RShow_BookedTicket_menu() 进入查看订票信息及退票菜单 Case 5: change_userinfo() 调用修改个人信息函数 Case 6: change_password() 调用修改密码函数 Case 7: 推出。
在get_Seller_menu() 获取售票员主菜单中,先调用print_Seller_menu()函数,打印售票员菜单。
Case 1: get_search_menu() 进入查找子菜单。 Case 2: get_sort_menu() 进入排序子菜单。 Case 3: get_buyticket_menu() 进入买票子菜单。 Case 4: 推出。
在get_Admin_menu() 获取系统管理员主菜单中,先调用print_Admin_menu()函数,打印系统管理员菜单。
Case 1: get_search_menu() 进入查找子菜单。 Case 2: get_sort_menu() 进入排序子菜单。
Case 3: get_total_menu() 进入统计子菜单。 Case 4: EditFlightInfo() 进入编辑航班信息子菜单。 Case 5: Register_new_user() 调用创建明航机票售票员函数。 Case 6: Sys_recopy() 调用文件备份函数。
Case 7:change_password() 调用系统管理员密码修改函数。 Case 8: 退出。
在get_search_menu() 进入查找子菜单中,先调用print_search_menu()函数,打印查找菜单。
Case 1: Search_by_no() 按航班号查找航班信息。 Case 2: Search_by_fromplace() 按起始站查找航班信息。 Case 3: Search_by_toplace() 按终点站查找航班信息。 Case 4: Search_by_price() 按航班的票价查找航班信息。 Case 5: Search_by_discount() 按航班的打着信息查找航班信息。 Case 6: Search_by_date() 按航班的起飞时间查找航班信息。 Case 7: Search_by_registname() 按注册用户的用户名查找航班信息。 Case 8: Search_by_ID() 按航班号查找航班信息。 Case 9: Search_by_passport() 按护照好查找航班信息。 Case 0:退出。
在get_sort_menu() 获取排序菜单中,先调用print_sort_menu()函数,打印排序菜单。
Case 1: Sort_by_no() 按照航班号排序。 Case 2: ort_by_fromplace() 按照起始站排序。 Case 3: Sort_by_toplace() 按终点站排序。 Case 4: Sort_by_seatamount() 按总票数排序。 Case 5: Sort_by_price() 按票价排序。 Case 6: Sort_by_discount() 按折扣信息排序。 Case 7: Sort_by_unsoldamount() 按剩余票数排序。 Case 8: 退出。
在get_RBookTicket_menu() 进入订票子菜单中,先调用print_RBookTicket_menu()函
数,打印订票航班选择菜单。
Case 1: incountry_book_ticket() 调用或内航班订票函数。 Case 2: outcountry_book_ticket() 调用国际航班订票函数。 Case 3: 返回上一级菜单函数。 Case 4: 退出。
在get_RShow_BookedTicket_menu() 进入查看订票信息及退票菜单中,先调用print_show_BookedTicket_menu()函数,打印查看订票信息及退票函数。
Case 1: show_incountry_booked_info() 调用国内航班已订票信息查看函数。 Case 2: show_outcountry_booked_info() 调用国际航班已订票信息查看函数。 Case 3: 返回上一级菜单。 Case 4: 退出。
在get_buyticket_menu() 进入买票子菜单中,先调用print_buyticket_menu()函数,打印售票员售票菜单。
Case 1: bookedU_buyT() 调用已订票用户买票函数。
Case 2: unbookedU_buyT() 调用普通用户(为订票用户)买票函数。 Case 3: 返回上一级菜单 Case 4: 退出。
在get_total_menu() 进入统计子菜单中,先调用print_total_menu()函数,打印统计航班信息子菜单。
Case 1: Total_allflight() 调用统计航班总数、已售出的机票数目未售出的机票数目、打折机票情况。
Case 2: Total_single() 调用统计某个航班的售票情况函数。 Case 3: Total_popu_tenth() 调用统计热门航班的情势名函数。
Case 4: Total_month_custom() 调用同基本月消费额最大的五个用户函数。 Case 5: Total_f_half_seat() 调用统计入座率不足50%的航班函数。 Case 6: Total_discount_info() 调用统计打折信息函数函数。 Case 7: 返回上一级菜单。
在EditFlightInfo() 进入编辑航班信息子菜单中,先调用print_editFlightInfo()函数,打印编辑航班信息菜单。
Case 1: PutIn_Flight_Info() 调用录入航班信息函数。 Case 2: ChangFlightInfo() 调用修改航班信息函数。 Case 3: DeleteFlightInfo() 调用删除航班信息函数。 Case 4:返回上一级菜单 Case 5: 退出。 排序函数的流程图:
统计函数流程图:
4.测试分析
内容包括:
a .调试过程中遇到的问题是如何解决的以及对设计与实现的回顾讨论和分析; b .主要算法的时间复杂度和空间复杂度分析,改进设想; c .经验和体会等。
一、 黑盒测试
目的
本方案主要实施产品程序代码的黑盒测试。保证软件的功能能正常进行,保证用户可以安全、快捷进行操作
测试项
软件的各部分的功能
测试依据
根据概要设计和详细设计说明,针对软件说明书的步骤,对软件的功能进行测试。
测试环境配置
1.测试工具: 2.软件环境: 3.资源文件
测试步骤和用例
(1)浏览用户
(2) 注册用户
(4) 系统管理员
5.用户使用说明
说明如何使用你开发的系统,详细列出每一步的操作步骤并给出屏幕抓图。 首先,登陆民航订票系统主界面,您间看到有如下四种用户: 对此系统的使用作整体介绍:
注册用户的用户名和密码在浏览用户菜单中创建。售票员的用户名和密码在系统管理员菜单中创建。系统管理员的最初用户名为admin ,密码为000。进入系统后,使用者可根据需要,对密码进行修改。以确保安全。每个用户都有查找和排序功能对航班信此查看。每一个菜单结束,都以返回上一级菜单和推出选项共用户进行选择。
普通用户都为浏览用户,在浏览用户菜单中。 浏览用户功能介绍:
选项3 为新用户注册功能。只有经注册后的用户,才可选择进入主界面中2注册用户功能。在注册用户的用户登录中填写您已注册的用户名和密码,按回车后即可进入注册用户功能菜单。
注册用户功能介绍:
您可以通过查找功能,找到您想要查看的票的相关信息,您也可以通过排序功能进入查 看。选择1查找功能后,您可以看到有如下几种查找方法:
选择2 排序功能后,您可以看到有如下几种排序方法,您可以选择您想要的方式进行排序查看:
在注册用户菜单中,您可以实现订票功能。选择3 进入订票菜单
在订票菜单中进行您的订票选择,例如你要预定的航班信息如下
返回到注册用户菜单后,您可以选择4 进行订票信息查看
如果您退票,请输入Y 或y ,如果不退票 请输入N 或n .
注册用户菜单中,您也可以对您的信息进行修改。选择5修改个人信息后,您将看到系统为您输出您的相关信息:
由您确认是否进行修改。
注册用户菜单中,您可以选择6 对您的密码进行修改。
返回主菜单。在主菜单中,3售票员的用户名和密码,是由系统管理员创建的。
选择4进入系统管理员菜单。系统管理员的最初用户名是admin, 密码是000。进入管理员菜单
系统管理员菜单功能介绍:
查找和排序功能与以上三种用户的相同,3统计菜单只有系统管理员可见,其他三种用户没有此功能。
系统管理员可根据以上6 种方法对航班的相关信息进行统计。4选项对航班信息进行编辑。
1 录入新的航班信息,例如您录入信息如下
:
您也可以选择2 或3 选项对航班信息进行修改和删除。
5选项创建民航机票售票员。注册民航机票售票员后,您可由此用户名和密码,登陆主界面中民航机票售票员选项。
系统管理员菜单中6选项,可实现文件备份功能。如将D 盘根目录下的flight.txt 文件,备份到C 盘根目录下。
进入主菜单,选项3 进入民航机票售票员选项。用户名和密码为系统管理员创建的。 民航机票售票员菜单功能介绍:
3选项,进入售票菜单:
售票菜单分为已订票用户买票和未订票用户买票。已订票用户又分为国际航班和国内航班。国内航班由订票者的身份证来验证您是否已订票。国际航班用订票者的签证和护照来验真你是否已订票
6.附录
带注释的源程序清单。
需要注意的是,实习报告的各种文档资料如上述中的前三部分要在程序开发的过程中逐渐充实形成
Flight_Book.h头文件如下 #ifndef __FLIGHT_BOOK_H__ #define __FLIGHT_BOOK_H__
#include #include #include #include #include #include #include #include
#include"Flight_Book_define.h" #include"Flight_Book_hanshu.h" #include"Flight_Book_struct.h" #endif
Flight_Book_define.h头文件如下 #ifndef __FLIGHT_BOOK_DEFINE_H__ #define __FLIGHT_BOOK_DEFINE_H__ #define Name_Length_Max (20) #define ID_No (18) #define Passport_No (13) //#define Country_Length_Max (20) //#define Date_Length (9) //#define Flight_No_Max (10) //#define Place_Length_Max (10) //place#define Password_Length (32) //#define Nation_Length_Max (20) //#define EXIT_STATUS_YES
( -1 ) 姓名的最大长度 身份证号的最大长度护照号的长度 国家字母的最大长度日期的长度 最长航班号 的最大长度 密码的长度 民族的最大长度 确定退出系统
// // //
#define EXIT_STATUS_NO #define RET_SUCCESS
( 0 )
//确定返回系统(不退出) //标志函数以正确状态返回
( 0 )
#define LOGIN_SUCCESS (1) #define LOGIN_FAIL (0) #define flag (1) #define Initial (0)
//登陆成功 //登陆失败 //flag标志 //初始值为零 //消费金额初始化 //查找成功标志位 //热门航班前10名
//消费数额最大的前5个客户
#define Crash_Init (0.0) #define SearchYes (1) #define HotFlight (10) #define TopCustom (5) #endif
Flight_Book_struct.h如下
#ifndef __FLIGHT_BOOK_STRUCT_H__
typedef enum front_MENU{
MENU_SCANUSER=1, MENU_REGISTUSER, MENU_SELLER, MENU_ADMIN, MENU_EXIT
//主菜单的用户输入选择 //选择浏览用户 //选择注册用户
//选择民航机票售票员售票员 //选择系统管理员 //退出主菜单
#define __FLIGHT_BOOK_STRUCT_H__
}MENU_SELECT;
typedef enum admin_MENU{
AMENU_SEARCH=1,
AMENU_SORT,
//系统管理员菜单输入选择 //进入查找菜单 //进入排序菜单
AMENU_TOTAL, AMENU_PUTIN,
AMENU_CREATESELLER, AMENU_SYSOPERAT, AMENU_CHGPSWORD,
AMENU_EXIT
}AMENU_SELECT; typedef struct Flight_Info {
char FlightNo[Flight_No_Max]; // char FromPlace[Place_Length_Max]; // char ToPlace[Place_Length_Max]; // char Date[Date_Length]; // int SeatAmount; // int unSoldAmount;
int Price; // float Discount;
struct Flight_Info *next;
}F_Info,*Flight_List; typedef struct Booker_Info { char UserName[Name_Length_Max]; // char Password[Password_Length]; // char Name[Name_Length_Max]; // char Sex; // char Nation[Nation_Length_Max]; // char ID[ID_No]; //
float Crash;
MENU_SELECT type; struct Booker_Info *next; }Booker_Info,*Booker_List;
//进入统计菜单 //选择航班信息录入 //创建民航机票售票员售票员 //文件备份 //修改密码
//返回主菜单
//航班信息 航班号
航线起始站 航线终点站 航班日期 票数 //剩余票数
票价 //折扣信息 //订票人信息
用户名 密码 姓名 性别 民族 身份证号 //累计购票金额
typedef struct User_Booked_Ticket {
char UserName[Name_Length_Max]; //用户名
//国内用户订票信息
char FlightNo[Flight_No_Max]; //航班号
char Date[Date_Length]; //航班日期 int BookAmount; char ID[ID_No];
//订票数 //身份证号
struct User_Booked_Ticket * next; }User_Booked_Ticket,*Ticket_List;
typedef struct outcountry_User_Booked_Ticket {
char UserName[Name_Length_Max];
//用户名 //航班号 //航班日期 //订票数 //身份证号 //签证国家 //签证日期 //护照号
//国际用户订票信息
char FlightNo[Flight_No_Max];
char Date[Date_Length]; int BookAmount; char ID[ID_No];
char VisaCountry[Country_Length_Max]; char VisaDate[Date_Length]; char Passport[Passport_No];
struct outcountry_User_Booked_Ticket * next; }outcountry_User_Booked_Ticket,*outcountry_Ticket_List;
typedef enum tagF_SEARCH{
F_SEARCH_BY_NO = 1,
//查找菜单的用户输入选择 //通过航班号查找 //通过起始站查找 //通过终点站查找 //通过价格查找 //通过折扣信息查找 //通过日期查找 //通过注册用户姓名查找
F_SEARCH_BY_FROMPLACE, F_SEARCH_BY_TOPLACE,
F_SEARCH_BY_PRICE,
F_SEARCH_BY_DISCOUNT, F_SEARCH_BY_DATE,
F_SEARCH_BY_REGISTNAME,
F_SEARCH_BY_ID, F_SEARCH_BY_PASSPORT, F_SEARCH_EXIT=0
}F_SEARCH_MENU_SELECT; typedef enum tagF_SORT{ F_SORT_BY_NO
= 1,
F_SORT_BY_FROMPLACE, F_SORT_BY_TOPLACE,
F_SORT_BY_SEATAMOUNT,
F_SORT_BY_PRICE,
F_SORT_BY_DISCOUNT,
F_SORT_BY_UNSOLDAMOUNT,
F_SORT_EXIT
}F_SORT_MENU_SELECT;
typedef enum tagF_TOTAL{
F_TOTAL_ALLFLIGHT=1,
F_TOTAL_SINGLE,
F_TOTAL_POPU_TENTH,
F_TOTAL_MONTH_CUSTOM, F_TOTAL_F_HALF_SEAT,
F_TOTAL_DISCOUNT_INFO,
F_TOTAL_EXIT
}F_TOTAL_MENU_SELECT;
typedef enum scan_MENU{ SMENU_SEARCH=1, SMENU_SORT,
SMENU_REGISTER,
//通过注册用户身份证号查找 //通过护照号查找
//退出查找菜单
//排序菜单的用户输入选择 //通过航班号排序 //通过起始站排序 //通过终点站排序 //通过座位数排序 //通过票价排序 //通过折扣排序 //通过未售座位数排序
//退出排序菜单
//统计菜单的用户输入选择
//统计航班总数、已售出的机票数目、未售出的机票数目、打折机票情况等
//统计某个航班的售票情况 //统计热门航班前10名
//统计在本月消费数额最大的5个客户 //统计入座率不足50%的航班 //统计打折信息 //退出统计菜单
//浏览用户的菜单输入选择 //进入查找菜单 //进入排序菜单
//注册新用户
}SMENU_SELECT;
typedef enum register_MENU{ RMENU_SEARCH=1, RMENU_SORT, RMENU_BOOK,
//RMENU_DROP,
RMENU_SHOWBOOKINFO,
RMENU_CHANGEINFO,
RMENU_CHANGEPSWORD,
RMENU_EXIT
}RMENU_SELECT;
typedef enum rbookticket_MENU{ RBMENU_INCOUNTRY=1, RBMENU_OUTCOUNTRY, RBMENU_LAST,
RBMENU_EXIT
}RBMENU_SELECT;
typedef enum rshow_bookedticket_MENU{ RBMENU_SHOWINCBOOKT=1, RBMENU_SHOWOUTCBOOKT, RSHOWBTMENU_LAST,
RSHOWBTMENU_EXIT
}SHOWBOOKTMENU_SELECT;
typedef enum seller_MENU{ SLMENU_SEARCH=1,
SLMENU_SORT,
//注册用户菜单输入选择 //进入查找菜单 //进入排序菜单 //订票 //退票 //查看订票记录 //修改个人信息 //修改密码 //返回主菜单
//国内航班选择 //国际航班选择 //返回上一级菜单
//返回主菜单
//注册用户查看订票信息 //查看已定国内航班信息选择 //查看已定国际航班信息选择 //返回上一级菜单
//返回主菜单
//售票员菜单输入选择 //进入查找菜单 //进入排序菜单
SLMENU_EXIT
}SLMENU_SELECT;
typedef enum buyticket_MENU{ BOOKER_BUY=1,
GENERAL_BUY, BUY_RETURN,
BUY_EXIT
}BUYTICKET_SELECT;
typedef enum editflight_MENU{ FLIGHT_INPUT=1,
FLIGHT_CHANG, FLIGHT_DELET, FLIGHT_RETURN,
FLIGHT_EXIT
}EDITFLIGHT_SELECT;
typedef enum sysoperat_MENU{ SYS_RECOPY=1, SYS_RECOVERY, SYS_RETURN,
SYS_EXIT
}SYSOPERAT_SELECT; #endif
Flight_Book_hanshu.h如下 #ifndef __FLIGHT_BOOK_HANSHU_H__
//返回主菜单
//售票员卖票菜单输入选择 //已订票用户买票 //未订票用户买票 //返回上一级菜单 //退出
//编辑航班信息菜单的输入选择//航班信息录入 //修改航班信息 //删除航班信息 //返回上一级菜单 //退出
#define __FLIGHT_BOOK_HANSHU_H__ #include"Flight_Book.h" #include"Flight_Book_struct.h"
void Initsys();
int Register_new_user(MENU_SELECT);
int login(MENU_SELECT , Booker_List *); int change_userinfo(Booker_List);
void Password(char* ); int change_password();
void Encrypt(char* cSrc,char* cDest); void Decrypt(char* cSrc,char* cDest);
void print_front_menu(); int get_front_menu();
void print_search_menu(MENU_SELECT); int get_search_menu(MENU_SELECT); int Search_by_no();
int Search_by_fromplace(); int Search_by_toplace(); int Search_by_price();
int Search_by_discount(); int Search_by_date();
int Search_by_registname(); int Search_by_ID();
int Search_by_passport();
void print_sort_menu(); int get_sort_menu(); int Sort_by_no();
int Sort_by_fromplace();
//文件载入
//注册新用户 //登陆
//注册用户修改用户信息
//密码显示 //修改密码 //密码加密 //密码解密
//显示主菜单 //获取主菜单选项
//显示查找菜单选项 //执行查找功能 //按航班号查找 //按起始站查找 //按终点站查找 //按票价查找 //按折扣信息查找 //按日期查找 //按注册用户姓名查找 //按注册用户身份证号查找//按注册用户护照号查找
//显示排序菜单选项 //执行排序功能 //按航班号排序 //按起始站排序
int Sort_by_toplace();
//按终点站排序 //按座位数排序 //按票价排序 //按折扣排序 //按折扣排序并显示 //按剩余票数排序
int Sort_by_seatamount(); int Sort_by_price();
void Sort_discount(); int Sort_by_discount();
int Sort_by_unsoldamount();
void print_total_menu(); int get_total_menu();
//显示统计菜单选项 //执行统计功能
int Total_allflight(); //统计航班总数、已售出的机票数目、未
售出的机票数目、打折机票情况等
int Total_single();
//统计某个航班的售票情况 //统计热门航班前10名
//统计在本月消费数额最大的5个客户 //统计入座率不足%50的航班 //统计打折信息
int Total_popu_tenth();
int Total_month_custom(); int Total_f_half_seat();
int Total_discount_info();
void printf_main_menu();
void print_ScanUser_menu();
//打印桌面菜单
//显示浏览用户菜单 //执行浏览用户功能
int get_ScanUser_menu(MENU_SELECT);
void print_RegistUser_menu();
//显示注册用户菜单 //执行注册用户功能
int get_RegistUser_menu(MENU_SELECT,Booker_List);
void print_Seller_menu();
//显示售票员菜单 //执行注册用户功能
int get_Seller_menu(MENU_SELECT,Booker_List);
void print_Admin_menu();
//显示系统管理员菜单 //执行管理员功能
int get_Admin_menu(MENU_SELECT,Booker_List);
int EditFlightInfo();
//编辑航班信息 //航班信息录入 //删除航班信息 //修改航班信息 //显示航班信息
int PutIn_Flight_Info(F_Info *); int DeleteFlightInfo(); int ChangFlightInfo(); void show_flight_info();
void print_RBookTicket_menu();
//国内航班国际航班的选择函数
int incountry_book_ticket();
//国内航班订票函数 //国际航班订票函数 //国内航班查看订票情况及退票
int outcountry_book_ticket();
int show_incountry_booked_info(Booker_List);
int show_outcountry_booked_info(Booker_List r); //国际航班查看订票情况及退票
int bookedU_buyT();
//已订票用户买票 //普通用户买票(未订票用
int unbookedU_buyT(); 户)
void Booker_Load(); void Booker_Save(); void Flight_Load(); void Flight_Save(); void Ticket_Load(); void Ticket_Save();
//用户信息文件载入 //保存用户信息文件 //航班信息文件载入 //保存航班信息文件 //国内订票信息文件载入 //保存国内订票信息文件 //国际订票信息文件载入 //保存国际订票信息文件
void outcountry_Ticket_Load(); void outcountry_Ticket_Save();
int SysOperat();
//进入系统操作 //文件备份 //文件恢复
int Sys_recopy(); int SyS_recovery();
void SysSave();
//所有系统文件的保存
#endif
民 航 售 票 系 统
班级 :
时间: 西北大学***
2008-**-**
1.需求分析
以无歧义的陈述说明项目开发的任务,强调的是该项目要实现什么?并明确规定: (1) 项目采用的技术路线,支持软件; (2) 系统整体框架图; (3) 项目实现的功能点;
该项目为民航订票系统。由于经济水平的不断提高,出行选择飞机的旅客也逐渐增多,为方便用户订票退票买票,对民航订票系统的要求也在逐年提高。特此编写了一个民航机票订票系统的代码程序,它的功能主要是完成 航班信息的录入、编辑、修改;用户的注册、订票、查票、退票、买票
(1) 项目采用的技术路线,支持软件
该项目用c 语言实现,创建结构体变量,并以链表的形式将航班信息、订票人信息、国内航班已订票信息和国际航班已订票信息写入文件中。程序运行开始,打开文件并将其分别链入链表之中;程序结束关闭并保存文件。整体系统功能全部由链表实现。
在主函数main()函数中,只调用一个函数,在系统中,函数之间采用级联调用,即一个函数里调用另一个函数,每个函数实现一个单独的功能,可被一次或多次调用。 (2) 系统整体框架图
(3) 项目实现的功能点 航班信息录入、删除、修改
分别按照航班号、起始站、终点站、航班日期、航班价钱、打折信息、用户名、身份证号、护照号查找航班信息
分别按照航班号、起点站、终点站、座位数总数、已售出座位数、价格、折扣信息对航班信息进行排序
分别对航班总数、已售出机票数、未售出机票数、打折机票情况、某个航班的售票情况、热门航班的前十名、本月消费额最大的五个用户、入座率不足50%的航班进行统计
文件的打开、保存和另存为
用户信息的注册、信息的修改、用户密码的修改、民航机票售票员的创建
注册用户的国际航班订票、国内航班订票、国际和国内航班对已订票信息的查询、退票、已订票用户买票、未定票用户买票
2.概要设计
说明项目包含的所有模块及其交互关系,所有类和接口的定义,类或接口之间的层次/调用关系,数据的定义形式,文件的组织结构。
系统定义了4个.h 文件,2个.c 文件。Flight_Book.h用来存放所有库文件的声明,如#include 语句。 Flight_Book_define.h用来存放所有变量的宏定义,如#define Name_Length_Max (20)(姓名的最大长度)。Flight_Book_hanshu.h用来存放所有函数的声明语句,如int Search_by_no() (按航班号查找函数)。Flight_Book_struct.h用来存放所有的结构体及枚举类型信息,如
typedef enum tagF_SORT{
F_SORT_BY_NO
= 1,
//排序菜单的用户输入选择
//通过航班号排序 //通过起始站排序 //通过终点站排序 //通过座位数排序 //通过票价排序 //通过折扣排序 //通过未售座位数排序 //退出排序菜单
F_SORT_BY_FROMPLACE, F_SORT_BY_TOPLACE,
F_SORT_BY_SEATAMOUNT,
F_SORT_BY_PRICE,
F_SORT_BY_DISCOUNT,
F_SORT_BY_UNSOLDAMOUNT, F_SORT_EXIT
}F_SORT_MENU_SELECT;
Flight_Book_main.c函数,用来编写主函数void main()。 Flight_Book_hanshu.c 函数,用来编写程序调用的所有子函数。
系统分为四种用户:浏览用户、注册用户、售票员和系统管理员。每种用户的具体功能
如下。各种用户的功能有交叉,有相同点也有不同点。
浏览用户:航班信息查找、航班信息排序、注册信息录入
注册用户:航班信息查找、排序、国际航班订票、国内航班订票、查看订票信息、退票、修改个人信息、修改密码
售票员:航班信息查找、排序、国际航班已订票用户买票、国内航班已订票用户买票、未订票用户买票、
系统管理员:航班信息查找、排序、统计、航班信息录入、修改、删除、创建民航机票售票员、管理员密码修改、文件备份
程序中所需的所有数据的宏定义都定一在Flight_Book_define.h头文件中,枚举类型变量选择以及及构体变量的定义都在Flight_Book_struct.h中。程序中不出现任何数字。
系统定义了四个主要结构体 (1)航班信息结构体
typedef struct Flight_Info //航班信息结构体 {
char FlightNo[Flight_No_Max]; //航班号
char FromPlace[Place_Length_Max]; //航线起始站
char ToPlace[Place_Length_Max]; //航线终点站 char Date[Date_Length]; //航班日期 int SeatAmount; //票数 int unSoldAmount;
//剩余票数
int Price; //票价 float Discount; //折扣信息 struct Flight_Info *next;
}F_Info,*Flight_List;
此结构体创建的链表用来存放航班信息。此链表节点的信息存放在flight1.txt 文件中。程序开始时,进行文件载入调用void Flight_Load()函数,将文件中的所有信息存放在以FL 为头结点的链表中。程序运行中,只对链表进行修改,不对文件进行直接操作。程序结束后调用void Flight_Save()函数,执行用户信息保存功能,将链表中的所有用户信息重新写入文件flight1.txt 中
用户信息结构体。包括注册用户、售票员和系统管理员
typedef struct Booker_Info //用户信息 {
char UserName[Name_Length_Max]; //用户名
char Password[Password_Length]; //密码 char Name[Name_Length_Max]; //姓名 char Sex; //性别 char Nation[Nation_Length_Max]; //民族 char ID[ID_No]; //身份证号 float Crash;
//累计购票金额
//用户类型
MENU_SELECT type;
struct Booker_Info *next; }Booker_Info,*Booker_List;
此结构体创建的链表用来存放系统管理员、售票员、以及注册用户的信息。此链表节点的信息存放在flight.txt 文件中。程序开始时,进行文件载入调用void Booker_Load()函数,将文件中的所有信息存放在以L 为头结点的链表中。程序运行中,只对链表进行修改,不对文件进行直接操作。程序结束后调用void Booker_Save()函数,执行用户信息保存功能,将链表中的所有用户信息重新写入flight.txt 文件中。
国内航班订票人信息结构体
typedef struct User_Booked_Ticket //国内用户订票信息 {
char UserName[Name_Length_Max]; //用户名
char FlightNo[Flight_No_Max]; //航班号
char Date[Date_Length]; //航班日期 int BookAmount; char ID[ID_No];
//订票数 //身份证号
struct User_Booked_Ticket * next; }User_Booked_Ticket,*Ticket_List;
此结构体创建的链表用来存放注册用户所订的国内航班机票信息。此链表节点的信息存放在d:\\book_ticket_info.txt文件中。程序开始时,进行文件载入,调用void Ticket_Load()函数,将文件中的所有信息存放在以T 为头节点的链表中。程序运行中,支队链表进行修改,不对文件进行直接操作。程序结束后,调用void Ticket_Save()函数,执行用户信息保存功能,将链表中的所有用户信息重新写入文件book_ticket_info.txt中。
国际航班订票人信息结构体
typedef struct outcountry_User_Booked_Ticket //国际用户订票信息 {
char UserName[Name_Length_Max];
//用户名
char FlightNo[Flight_No_Max];
char Date[Date_Length]; int BookAmount; char ID[ID_No];
//航班号 //航班日期 //订票数 //身份证号 //签证国家 //签证日期 //护照号
char VisaCountry[Country_Length_Max]; char VisaDate[Date_Length]; char Passport[Passport_No];
struct outcountry_User_Booked_Ticket * next; }outcountry_User_Booked_Ticket,*outcountry_Ticket_List;
此结构体创建的链表用来存放注册用户所订的国际航班机票信息。此链表节点的信息存放在d:\\outcountry_book_ticket_info.txt文件中。程序开始时,进行文件载入,调用void outcountry_Ticket_Load()函数,将文件中的所有信息存放在以OCT 为头节点的链表中。程序运行中,只对链表进行修改,不对文件进行直接操作。程序结束后,调用void outcountry_Ticket_Save()函数,执行用户信息保存功能,将链表中的所有用户信息重新写入outcountry_book_ticket_info.txt文件中。
3.详细设计
实现概要设计中定义的所有类和接口的成员变量和方法的原型,对复杂操作按照算法书写规范用写出过程或函数形式的算法框架,给出主要函数的流程图,画出主要算法的时序图,交互图。
(1)初始化文件 flight.txt 和 flight1.txt 和 settingpath.txt 和 userpass.txt
(2)文件载入 (3)函数调用。
在main()函数中调用函数 LoadFile(pAllData),MainMenu();MainMenu()函数为显示前端界面函数。打印输出“欢迎进入民航订票系统”。在此函数中调用初始化函数Initsys(),将所有的文件初始化并执行(2)文件载入中的四个load 函数。之后调用get_front_menu()函数。此函数打印并执行主菜单。
get_front_menu()函数中,调用主菜单选项print_front_menu()。 Case 1: get_ScanUser_menu() 获取浏览用户主菜单。 Case 2: get_RegistUser_menu() 获取注册用户主菜单。
Case 3: get_Seller_menu() 获取售票员主菜单 Case 4: get_Admin_menu() 获取系统管理员主菜单。
在get_ScanUser_menu() 获取浏览用户主菜中,先调用print_ScanUser_menu()函数,打印浏览用户菜单。
Case 1: get_search_menu() 获取查找菜单 Case 2: get_sort_menu() 获取排序菜单 Case 3: Register_new_user() 注册新用户 Case 4: 推出。
在get_RegistUser_menu() 获取注册用户主菜单中,先调用print_RegistUser_menu()函数,打印注册用户菜单。
Case 1: get_search_menu() 获取查找用户菜单 Case 2: get_sort_menu() 获取排序菜单 Case 3: get_RBookTicket_menu() 进入订票子菜单
Case 4: get_RShow_BookedTicket_menu() 进入查看订票信息及退票菜单 Case 5: change_userinfo() 调用修改个人信息函数 Case 6: change_password() 调用修改密码函数 Case 7: 推出。
在get_Seller_menu() 获取售票员主菜单中,先调用print_Seller_menu()函数,打印售票员菜单。
Case 1: get_search_menu() 进入查找子菜单。 Case 2: get_sort_menu() 进入排序子菜单。 Case 3: get_buyticket_menu() 进入买票子菜单。 Case 4: 推出。
在get_Admin_menu() 获取系统管理员主菜单中,先调用print_Admin_menu()函数,打印系统管理员菜单。
Case 1: get_search_menu() 进入查找子菜单。 Case 2: get_sort_menu() 进入排序子菜单。
Case 3: get_total_menu() 进入统计子菜单。 Case 4: EditFlightInfo() 进入编辑航班信息子菜单。 Case 5: Register_new_user() 调用创建明航机票售票员函数。 Case 6: Sys_recopy() 调用文件备份函数。
Case 7:change_password() 调用系统管理员密码修改函数。 Case 8: 退出。
在get_search_menu() 进入查找子菜单中,先调用print_search_menu()函数,打印查找菜单。
Case 1: Search_by_no() 按航班号查找航班信息。 Case 2: Search_by_fromplace() 按起始站查找航班信息。 Case 3: Search_by_toplace() 按终点站查找航班信息。 Case 4: Search_by_price() 按航班的票价查找航班信息。 Case 5: Search_by_discount() 按航班的打着信息查找航班信息。 Case 6: Search_by_date() 按航班的起飞时间查找航班信息。 Case 7: Search_by_registname() 按注册用户的用户名查找航班信息。 Case 8: Search_by_ID() 按航班号查找航班信息。 Case 9: Search_by_passport() 按护照好查找航班信息。 Case 0:退出。
在get_sort_menu() 获取排序菜单中,先调用print_sort_menu()函数,打印排序菜单。
Case 1: Sort_by_no() 按照航班号排序。 Case 2: ort_by_fromplace() 按照起始站排序。 Case 3: Sort_by_toplace() 按终点站排序。 Case 4: Sort_by_seatamount() 按总票数排序。 Case 5: Sort_by_price() 按票价排序。 Case 6: Sort_by_discount() 按折扣信息排序。 Case 7: Sort_by_unsoldamount() 按剩余票数排序。 Case 8: 退出。
在get_RBookTicket_menu() 进入订票子菜单中,先调用print_RBookTicket_menu()函
数,打印订票航班选择菜单。
Case 1: incountry_book_ticket() 调用或内航班订票函数。 Case 2: outcountry_book_ticket() 调用国际航班订票函数。 Case 3: 返回上一级菜单函数。 Case 4: 退出。
在get_RShow_BookedTicket_menu() 进入查看订票信息及退票菜单中,先调用print_show_BookedTicket_menu()函数,打印查看订票信息及退票函数。
Case 1: show_incountry_booked_info() 调用国内航班已订票信息查看函数。 Case 2: show_outcountry_booked_info() 调用国际航班已订票信息查看函数。 Case 3: 返回上一级菜单。 Case 4: 退出。
在get_buyticket_menu() 进入买票子菜单中,先调用print_buyticket_menu()函数,打印售票员售票菜单。
Case 1: bookedU_buyT() 调用已订票用户买票函数。
Case 2: unbookedU_buyT() 调用普通用户(为订票用户)买票函数。 Case 3: 返回上一级菜单 Case 4: 退出。
在get_total_menu() 进入统计子菜单中,先调用print_total_menu()函数,打印统计航班信息子菜单。
Case 1: Total_allflight() 调用统计航班总数、已售出的机票数目未售出的机票数目、打折机票情况。
Case 2: Total_single() 调用统计某个航班的售票情况函数。 Case 3: Total_popu_tenth() 调用统计热门航班的情势名函数。
Case 4: Total_month_custom() 调用同基本月消费额最大的五个用户函数。 Case 5: Total_f_half_seat() 调用统计入座率不足50%的航班函数。 Case 6: Total_discount_info() 调用统计打折信息函数函数。 Case 7: 返回上一级菜单。
在EditFlightInfo() 进入编辑航班信息子菜单中,先调用print_editFlightInfo()函数,打印编辑航班信息菜单。
Case 1: PutIn_Flight_Info() 调用录入航班信息函数。 Case 2: ChangFlightInfo() 调用修改航班信息函数。 Case 3: DeleteFlightInfo() 调用删除航班信息函数。 Case 4:返回上一级菜单 Case 5: 退出。 排序函数的流程图:
统计函数流程图:
4.测试分析
内容包括:
a .调试过程中遇到的问题是如何解决的以及对设计与实现的回顾讨论和分析; b .主要算法的时间复杂度和空间复杂度分析,改进设想; c .经验和体会等。
一、 黑盒测试
目的
本方案主要实施产品程序代码的黑盒测试。保证软件的功能能正常进行,保证用户可以安全、快捷进行操作
测试项
软件的各部分的功能
测试依据
根据概要设计和详细设计说明,针对软件说明书的步骤,对软件的功能进行测试。
测试环境配置
1.测试工具: 2.软件环境: 3.资源文件
测试步骤和用例
(1)浏览用户
(2) 注册用户
(4) 系统管理员
5.用户使用说明
说明如何使用你开发的系统,详细列出每一步的操作步骤并给出屏幕抓图。 首先,登陆民航订票系统主界面,您间看到有如下四种用户: 对此系统的使用作整体介绍:
注册用户的用户名和密码在浏览用户菜单中创建。售票员的用户名和密码在系统管理员菜单中创建。系统管理员的最初用户名为admin ,密码为000。进入系统后,使用者可根据需要,对密码进行修改。以确保安全。每个用户都有查找和排序功能对航班信此查看。每一个菜单结束,都以返回上一级菜单和推出选项共用户进行选择。
普通用户都为浏览用户,在浏览用户菜单中。 浏览用户功能介绍:
选项3 为新用户注册功能。只有经注册后的用户,才可选择进入主界面中2注册用户功能。在注册用户的用户登录中填写您已注册的用户名和密码,按回车后即可进入注册用户功能菜单。
注册用户功能介绍:
您可以通过查找功能,找到您想要查看的票的相关信息,您也可以通过排序功能进入查 看。选择1查找功能后,您可以看到有如下几种查找方法:
选择2 排序功能后,您可以看到有如下几种排序方法,您可以选择您想要的方式进行排序查看:
在注册用户菜单中,您可以实现订票功能。选择3 进入订票菜单
在订票菜单中进行您的订票选择,例如你要预定的航班信息如下
返回到注册用户菜单后,您可以选择4 进行订票信息查看
如果您退票,请输入Y 或y ,如果不退票 请输入N 或n .
注册用户菜单中,您也可以对您的信息进行修改。选择5修改个人信息后,您将看到系统为您输出您的相关信息:
由您确认是否进行修改。
注册用户菜单中,您可以选择6 对您的密码进行修改。
返回主菜单。在主菜单中,3售票员的用户名和密码,是由系统管理员创建的。
选择4进入系统管理员菜单。系统管理员的最初用户名是admin, 密码是000。进入管理员菜单
系统管理员菜单功能介绍:
查找和排序功能与以上三种用户的相同,3统计菜单只有系统管理员可见,其他三种用户没有此功能。
系统管理员可根据以上6 种方法对航班的相关信息进行统计。4选项对航班信息进行编辑。
1 录入新的航班信息,例如您录入信息如下
:
您也可以选择2 或3 选项对航班信息进行修改和删除。
5选项创建民航机票售票员。注册民航机票售票员后,您可由此用户名和密码,登陆主界面中民航机票售票员选项。
系统管理员菜单中6选项,可实现文件备份功能。如将D 盘根目录下的flight.txt 文件,备份到C 盘根目录下。
进入主菜单,选项3 进入民航机票售票员选项。用户名和密码为系统管理员创建的。 民航机票售票员菜单功能介绍:
3选项,进入售票菜单:
售票菜单分为已订票用户买票和未订票用户买票。已订票用户又分为国际航班和国内航班。国内航班由订票者的身份证来验证您是否已订票。国际航班用订票者的签证和护照来验真你是否已订票
6.附录
带注释的源程序清单。
需要注意的是,实习报告的各种文档资料如上述中的前三部分要在程序开发的过程中逐渐充实形成
Flight_Book.h头文件如下 #ifndef __FLIGHT_BOOK_H__ #define __FLIGHT_BOOK_H__
#include #include #include #include #include #include #include #include
#include"Flight_Book_define.h" #include"Flight_Book_hanshu.h" #include"Flight_Book_struct.h" #endif
Flight_Book_define.h头文件如下 #ifndef __FLIGHT_BOOK_DEFINE_H__ #define __FLIGHT_BOOK_DEFINE_H__ #define Name_Length_Max (20) #define ID_No (18) #define Passport_No (13) //#define Country_Length_Max (20) //#define Date_Length (9) //#define Flight_No_Max (10) //#define Place_Length_Max (10) //place#define Password_Length (32) //#define Nation_Length_Max (20) //#define EXIT_STATUS_YES
( -1 ) 姓名的最大长度 身份证号的最大长度护照号的长度 国家字母的最大长度日期的长度 最长航班号 的最大长度 密码的长度 民族的最大长度 确定退出系统
// // //
#define EXIT_STATUS_NO #define RET_SUCCESS
( 0 )
//确定返回系统(不退出) //标志函数以正确状态返回
( 0 )
#define LOGIN_SUCCESS (1) #define LOGIN_FAIL (0) #define flag (1) #define Initial (0)
//登陆成功 //登陆失败 //flag标志 //初始值为零 //消费金额初始化 //查找成功标志位 //热门航班前10名
//消费数额最大的前5个客户
#define Crash_Init (0.0) #define SearchYes (1) #define HotFlight (10) #define TopCustom (5) #endif
Flight_Book_struct.h如下
#ifndef __FLIGHT_BOOK_STRUCT_H__
typedef enum front_MENU{
MENU_SCANUSER=1, MENU_REGISTUSER, MENU_SELLER, MENU_ADMIN, MENU_EXIT
//主菜单的用户输入选择 //选择浏览用户 //选择注册用户
//选择民航机票售票员售票员 //选择系统管理员 //退出主菜单
#define __FLIGHT_BOOK_STRUCT_H__
}MENU_SELECT;
typedef enum admin_MENU{
AMENU_SEARCH=1,
AMENU_SORT,
//系统管理员菜单输入选择 //进入查找菜单 //进入排序菜单
AMENU_TOTAL, AMENU_PUTIN,
AMENU_CREATESELLER, AMENU_SYSOPERAT, AMENU_CHGPSWORD,
AMENU_EXIT
}AMENU_SELECT; typedef struct Flight_Info {
char FlightNo[Flight_No_Max]; // char FromPlace[Place_Length_Max]; // char ToPlace[Place_Length_Max]; // char Date[Date_Length]; // int SeatAmount; // int unSoldAmount;
int Price; // float Discount;
struct Flight_Info *next;
}F_Info,*Flight_List; typedef struct Booker_Info { char UserName[Name_Length_Max]; // char Password[Password_Length]; // char Name[Name_Length_Max]; // char Sex; // char Nation[Nation_Length_Max]; // char ID[ID_No]; //
float Crash;
MENU_SELECT type; struct Booker_Info *next; }Booker_Info,*Booker_List;
//进入统计菜单 //选择航班信息录入 //创建民航机票售票员售票员 //文件备份 //修改密码
//返回主菜单
//航班信息 航班号
航线起始站 航线终点站 航班日期 票数 //剩余票数
票价 //折扣信息 //订票人信息
用户名 密码 姓名 性别 民族 身份证号 //累计购票金额
typedef struct User_Booked_Ticket {
char UserName[Name_Length_Max]; //用户名
//国内用户订票信息
char FlightNo[Flight_No_Max]; //航班号
char Date[Date_Length]; //航班日期 int BookAmount; char ID[ID_No];
//订票数 //身份证号
struct User_Booked_Ticket * next; }User_Booked_Ticket,*Ticket_List;
typedef struct outcountry_User_Booked_Ticket {
char UserName[Name_Length_Max];
//用户名 //航班号 //航班日期 //订票数 //身份证号 //签证国家 //签证日期 //护照号
//国际用户订票信息
char FlightNo[Flight_No_Max];
char Date[Date_Length]; int BookAmount; char ID[ID_No];
char VisaCountry[Country_Length_Max]; char VisaDate[Date_Length]; char Passport[Passport_No];
struct outcountry_User_Booked_Ticket * next; }outcountry_User_Booked_Ticket,*outcountry_Ticket_List;
typedef enum tagF_SEARCH{
F_SEARCH_BY_NO = 1,
//查找菜单的用户输入选择 //通过航班号查找 //通过起始站查找 //通过终点站查找 //通过价格查找 //通过折扣信息查找 //通过日期查找 //通过注册用户姓名查找
F_SEARCH_BY_FROMPLACE, F_SEARCH_BY_TOPLACE,
F_SEARCH_BY_PRICE,
F_SEARCH_BY_DISCOUNT, F_SEARCH_BY_DATE,
F_SEARCH_BY_REGISTNAME,
F_SEARCH_BY_ID, F_SEARCH_BY_PASSPORT, F_SEARCH_EXIT=0
}F_SEARCH_MENU_SELECT; typedef enum tagF_SORT{ F_SORT_BY_NO
= 1,
F_SORT_BY_FROMPLACE, F_SORT_BY_TOPLACE,
F_SORT_BY_SEATAMOUNT,
F_SORT_BY_PRICE,
F_SORT_BY_DISCOUNT,
F_SORT_BY_UNSOLDAMOUNT,
F_SORT_EXIT
}F_SORT_MENU_SELECT;
typedef enum tagF_TOTAL{
F_TOTAL_ALLFLIGHT=1,
F_TOTAL_SINGLE,
F_TOTAL_POPU_TENTH,
F_TOTAL_MONTH_CUSTOM, F_TOTAL_F_HALF_SEAT,
F_TOTAL_DISCOUNT_INFO,
F_TOTAL_EXIT
}F_TOTAL_MENU_SELECT;
typedef enum scan_MENU{ SMENU_SEARCH=1, SMENU_SORT,
SMENU_REGISTER,
//通过注册用户身份证号查找 //通过护照号查找
//退出查找菜单
//排序菜单的用户输入选择 //通过航班号排序 //通过起始站排序 //通过终点站排序 //通过座位数排序 //通过票价排序 //通过折扣排序 //通过未售座位数排序
//退出排序菜单
//统计菜单的用户输入选择
//统计航班总数、已售出的机票数目、未售出的机票数目、打折机票情况等
//统计某个航班的售票情况 //统计热门航班前10名
//统计在本月消费数额最大的5个客户 //统计入座率不足50%的航班 //统计打折信息 //退出统计菜单
//浏览用户的菜单输入选择 //进入查找菜单 //进入排序菜单
//注册新用户
}SMENU_SELECT;
typedef enum register_MENU{ RMENU_SEARCH=1, RMENU_SORT, RMENU_BOOK,
//RMENU_DROP,
RMENU_SHOWBOOKINFO,
RMENU_CHANGEINFO,
RMENU_CHANGEPSWORD,
RMENU_EXIT
}RMENU_SELECT;
typedef enum rbookticket_MENU{ RBMENU_INCOUNTRY=1, RBMENU_OUTCOUNTRY, RBMENU_LAST,
RBMENU_EXIT
}RBMENU_SELECT;
typedef enum rshow_bookedticket_MENU{ RBMENU_SHOWINCBOOKT=1, RBMENU_SHOWOUTCBOOKT, RSHOWBTMENU_LAST,
RSHOWBTMENU_EXIT
}SHOWBOOKTMENU_SELECT;
typedef enum seller_MENU{ SLMENU_SEARCH=1,
SLMENU_SORT,
//注册用户菜单输入选择 //进入查找菜单 //进入排序菜单 //订票 //退票 //查看订票记录 //修改个人信息 //修改密码 //返回主菜单
//国内航班选择 //国际航班选择 //返回上一级菜单
//返回主菜单
//注册用户查看订票信息 //查看已定国内航班信息选择 //查看已定国际航班信息选择 //返回上一级菜单
//返回主菜单
//售票员菜单输入选择 //进入查找菜单 //进入排序菜单
SLMENU_EXIT
}SLMENU_SELECT;
typedef enum buyticket_MENU{ BOOKER_BUY=1,
GENERAL_BUY, BUY_RETURN,
BUY_EXIT
}BUYTICKET_SELECT;
typedef enum editflight_MENU{ FLIGHT_INPUT=1,
FLIGHT_CHANG, FLIGHT_DELET, FLIGHT_RETURN,
FLIGHT_EXIT
}EDITFLIGHT_SELECT;
typedef enum sysoperat_MENU{ SYS_RECOPY=1, SYS_RECOVERY, SYS_RETURN,
SYS_EXIT
}SYSOPERAT_SELECT; #endif
Flight_Book_hanshu.h如下 #ifndef __FLIGHT_BOOK_HANSHU_H__
//返回主菜单
//售票员卖票菜单输入选择 //已订票用户买票 //未订票用户买票 //返回上一级菜单 //退出
//编辑航班信息菜单的输入选择//航班信息录入 //修改航班信息 //删除航班信息 //返回上一级菜单 //退出
#define __FLIGHT_BOOK_HANSHU_H__ #include"Flight_Book.h" #include"Flight_Book_struct.h"
void Initsys();
int Register_new_user(MENU_SELECT);
int login(MENU_SELECT , Booker_List *); int change_userinfo(Booker_List);
void Password(char* ); int change_password();
void Encrypt(char* cSrc,char* cDest); void Decrypt(char* cSrc,char* cDest);
void print_front_menu(); int get_front_menu();
void print_search_menu(MENU_SELECT); int get_search_menu(MENU_SELECT); int Search_by_no();
int Search_by_fromplace(); int Search_by_toplace(); int Search_by_price();
int Search_by_discount(); int Search_by_date();
int Search_by_registname(); int Search_by_ID();
int Search_by_passport();
void print_sort_menu(); int get_sort_menu(); int Sort_by_no();
int Sort_by_fromplace();
//文件载入
//注册新用户 //登陆
//注册用户修改用户信息
//密码显示 //修改密码 //密码加密 //密码解密
//显示主菜单 //获取主菜单选项
//显示查找菜单选项 //执行查找功能 //按航班号查找 //按起始站查找 //按终点站查找 //按票价查找 //按折扣信息查找 //按日期查找 //按注册用户姓名查找 //按注册用户身份证号查找//按注册用户护照号查找
//显示排序菜单选项 //执行排序功能 //按航班号排序 //按起始站排序
int Sort_by_toplace();
//按终点站排序 //按座位数排序 //按票价排序 //按折扣排序 //按折扣排序并显示 //按剩余票数排序
int Sort_by_seatamount(); int Sort_by_price();
void Sort_discount(); int Sort_by_discount();
int Sort_by_unsoldamount();
void print_total_menu(); int get_total_menu();
//显示统计菜单选项 //执行统计功能
int Total_allflight(); //统计航班总数、已售出的机票数目、未
售出的机票数目、打折机票情况等
int Total_single();
//统计某个航班的售票情况 //统计热门航班前10名
//统计在本月消费数额最大的5个客户 //统计入座率不足%50的航班 //统计打折信息
int Total_popu_tenth();
int Total_month_custom(); int Total_f_half_seat();
int Total_discount_info();
void printf_main_menu();
void print_ScanUser_menu();
//打印桌面菜单
//显示浏览用户菜单 //执行浏览用户功能
int get_ScanUser_menu(MENU_SELECT);
void print_RegistUser_menu();
//显示注册用户菜单 //执行注册用户功能
int get_RegistUser_menu(MENU_SELECT,Booker_List);
void print_Seller_menu();
//显示售票员菜单 //执行注册用户功能
int get_Seller_menu(MENU_SELECT,Booker_List);
void print_Admin_menu();
//显示系统管理员菜单 //执行管理员功能
int get_Admin_menu(MENU_SELECT,Booker_List);
int EditFlightInfo();
//编辑航班信息 //航班信息录入 //删除航班信息 //修改航班信息 //显示航班信息
int PutIn_Flight_Info(F_Info *); int DeleteFlightInfo(); int ChangFlightInfo(); void show_flight_info();
void print_RBookTicket_menu();
//国内航班国际航班的选择函数
int incountry_book_ticket();
//国内航班订票函数 //国际航班订票函数 //国内航班查看订票情况及退票
int outcountry_book_ticket();
int show_incountry_booked_info(Booker_List);
int show_outcountry_booked_info(Booker_List r); //国际航班查看订票情况及退票
int bookedU_buyT();
//已订票用户买票 //普通用户买票(未订票用
int unbookedU_buyT(); 户)
void Booker_Load(); void Booker_Save(); void Flight_Load(); void Flight_Save(); void Ticket_Load(); void Ticket_Save();
//用户信息文件载入 //保存用户信息文件 //航班信息文件载入 //保存航班信息文件 //国内订票信息文件载入 //保存国内订票信息文件 //国际订票信息文件载入 //保存国际订票信息文件
void outcountry_Ticket_Load(); void outcountry_Ticket_Save();
int SysOperat();
//进入系统操作 //文件备份 //文件恢复
int Sys_recopy(); int SyS_recovery();
void SysSave();
//所有系统文件的保存
#endif