开发环境:CodeBlocks

开发语言:C

实现功能:登录,订票,退票

数据存储:文本读写

涉及文件:

相关文件下载

码云:传送门 GitHub:传送门

相关图片(仅供参考):程序是没有涉及旅行社的

ER图:

数据库:

类图:

用例图:

订票顺序图:

订票状态图:

登录活动图:

以上图片仅供参考,请自行斟酌

程序主界面:

源码如下:

 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
//#include "getch.h"
#include <conio.h>
#define MAX_Flight 50
#define MAX_Passenger 20
#define MAX_Order 50 typedef struct Flight
{
char fid[]; //航班号
char fname[]; //航班名称
char start[]; //起点
char end[]; //终点
int fnum; //票数
}Flight; typedef struct Passenger
{
char pid[]; //身份证
char pname[]; //姓名
char password[]; //密码
char tell[]; //电话
}Passenger; typedef struct Order
{
char pid[]; //身份证
char fid[]; //航班号
int num; //票数
}Order; Flight *FLI;
Passenger *PAS;
Order *ORD; char start[]; //起点
char end[]; //终点
char search_fid[][]; //符合条件的航班号
int search_fnum[]; //符合条件的航班票数
int online = ; //是否登录的变量
char online_pid[]; //在线用户的身份证
int search_num = ; //符合条件的航班数 void init_sys(void); // 系统初始化
void show_flight(void); // 显示航班表
void start_sys(void); // 系统开始运行
void exit_sys(void); // 退出系统
void menu(void); // 生成主菜单
void login(void); // 登录
void logout(void); //用户登出
void passenger_info(void); //查询旅客信息
bool change_pas_info(void); //修改旅客信息
void search_start(void); // 生成查询页面
bool search(void); // 查询航班
void order_list(void); // 生成订单表
void del_order(void); // 退票
void clear_stdin(void); // 清除输入缓冲区
char* get_str(char* str,size_t len); // 获取字符串
char get_cmd(char start,char end); // 获取cmd命令 int main()
{
init_sys();
start_sys();
exit_sys();
return ;
} // 系统初始化
void init_sys(void)
{
// 申请堆内存、加载数据
FLI = calloc(MAX_Flight,sizeof(Flight));
PAS = calloc(MAX_Passenger,sizeof(Passenger));
ORD = calloc(MAX_Order,sizeof(Order));
printf("system_init...\n"); FILE* ofrp = fopen("order.txt","r");
int i=;
for(i=; i<MAX_Order; i++) //读取文本中的数据到内存
{ int num = ;
num = fscanf(ofrp,"%s %s %d\n",ORD[i].pid,ORD[i].fid,&ORD[i].num);
} FILE* ffrp = fopen("flight.txt","r");
for(i=; i<MAX_Flight; i++)
{
int num = ;
num = fscanf(ffrp,"%s %s %s %s %d\n",FLI[i].fid,FLI[i].fname,FLI[i].start,FLI[i].end,&FLI[i].fnum);
} FILE* pfrp = fopen("passenger.txt","r");
for(i=; i<MAX_Passenger; i++)
{
int num = ;
num = fscanf(pfrp,"%s %s %s %s\n",PAS[i].pid,PAS[i].pname,PAS[i].password,PAS[i].tell);
}
} // 显示航班表
void show_flight(void)
{
int i = ;
for(i=; i<MAX_Flight; i++)
{
if(strlen(FLI[i].fid) != )
{
printf("id:%s name:%s start:%s end:%s fnum:%d\n",FLI[i].fid,FLI[i].fname,FLI[i].start,FLI[i].end,FLI[i].fnum);
}
}
} // 系统开始运行
void start_sys(void)
{
// 进入系统的业务流程控制
//printf("系统开始运行...\n");
//show_flight();
while(true)
{
menu();
switch(get_cmd('',''))
{
case '': search_start(); break;
case '': order_list(); break;
case '': del_order(); break;
case '': passenger_info(); break;
case '': change_pas_info(); break;
case '': login(); break;
case '': logout(); break;
case '': return;
}
}
} // 系统结束
void exit_sys(void)
{
printf("data insert...\n");
FILE* ofwp = fopen("order.txt","w");
printf("ready insert order.txt\n");
int i= ;
for(i=; i<MAX_Order; i++) //数据存储回本地
{
int num = ;
if(strlen(ORD[i].pid) != )
{
num = fprintf(ofwp,"%s %s %d\n",ORD[i].pid,ORD[i].fid,ORD[i].num);
//printf("insert order.txt success\n");
}
} FILE* ffwp = fopen("flight.txt","w");
printf("insert flight.txt\n");
for(i=; i<MAX_Flight; i++)
{
int num = ;
if(strlen(FLI[i].fid) != )
{
num = fprintf(ffwp,"%s %s %s %s %d\n",FLI[i].fid,FLI[i].fname,FLI[i].start,FLI[i].end,FLI[i].fnum);
//printf("insert flight.txt success\n");
}
} FILE* pfwp = fopen("passenger.txt","w");
printf("insert passenger.txt\n");
for(i=; i<MAX_Passenger; i++)
{
int num = ;
if(strlen(PAS[i].pid) != )
{
num = fprintf(pfwp,"%s %s %s %s\n",PAS[i].pid,PAS[i].pname,PAS[i].password,PAS[i].tell);
//printf("insert passenger.txt success\n");
}
}
// 释放内存、保存数据
free(FLI);
free(PAS);
free(ORD);
printf("exit...\n");
} // 生成主菜单
void menu(void)
{
printf("\n");
printf("********************************\n");
printf("| |\n");
printf("| flight order system |\n");
printf("* 1.search_flight *\n"); //查询航班
printf("| 2.order_list |\n"); //查询订票信息
printf("* 3.del_order *\n"); //退订
printf("| 4.passenger_info |\n"); //查询旅客信息
printf("* 5.change_pas_info *\n"); //修改旅客信息
printf("| 6.login |\n"); //用户登录
printf("* 7.logout *\n"); //用户登出
printf("| 0.exit_sys |\n"); //退出系统
printf("| |\n");
printf("********************************\n");
//printf("\n");
} // 登录
void login(void)
{
if(online == ) //如果没有登录
{
int i=;
int time = ;
while(time<)
{
char entry_pid[]; //临时变量身份证
char entry_pw[]; //临时变量密码
printf("please login!\n");
printf("please entry pid:");
get_str(entry_pid,);
printf("please entry password:");
get_str(entry_pw,);
for(i=; i<MAX_Passenger; i++)
{
if(strlen(entry_pid)== || strlen(entry_pw)==)
{
printf("pid or password can't be empty\n");
time++;
break;
}
else if(strcmp(PAS[i].pid,entry_pid) == && strcmp(PAS[i].password,entry_pw) == )
{
printf("login success!\n");
strcpy(online_pid,entry_pid);
online = ;
return;
}
else if(i==MAX_Passenger-)
{
printf("pid or password error\n");
time++;
}
}
}
online = -;
printf("you have been locked,you can use this system now\n");
}
else if(online ==)
{
printf("you have been login\n");
}
else
{
printf("you have been locked,you can use this system now\n");
} } // 用户登出
void logout(void)
{
if(online == ) //如果已经登录
{
online = ;
printf("logout success\n");
}
else if(online == -)
{
printf("you have been locked,you can use this system now\n");
}
else
{
printf("you have not login\n");
}
} // 查询旅客信息
void passenger_info(void)
{
if(online == ) //如果已经登录
{
//printf("online_pid:");
//puts(online_pid);
int i = ;
for(i=; i<MAX_Passenger; i++)
{
if(strcmp(online_pid,PAS[i].pid)==)
{
printf("pid:%s, pname:%s, password:%s, tell:%s\n",PAS[i].pid,PAS[i].pname,PAS[i].password,PAS[i].tell);
break;
}
}
}
else if(online == -)
{
printf("you have been locked,you can use this system now\n");
}
else
{
printf("you have not login\n");
}
} //修改旅客信息
bool change_pas_info(void)
{
if(online == ) //如果已经登录
{
printf("your old info:\n");
int i = ;
for(i=; i<MAX_Passenger; i++)
{
if(strcmp(online_pid,ORD[i].pid)==)
{
printf("pid:%s, pname:%s\npassword:%s, tell:%s\n",PAS[i].pid,PAS[i].pname,PAS[i].password,PAS[i].tell);
break;
}
}
char new_pid[];
char new_pname[];
char new_password[];
char new_tell[];
printf("please entry new pid:");
get_str(new_pid,);
printf("please entry new pname:");
get_str(new_pname,);
printf("please entry new password:");
get_str(new_password,);
printf("please entry new tell:");
get_str(new_tell,);
strcpy(PAS[i].pid,new_pid);
strcpy(PAS[i].pname,new_pname);
strcpy(PAS[i].password,new_password);
strcpy(PAS[i].tell,new_tell);
printf("change success\n");
}
else if(online == -)
{
printf("you have been locked,you can use this system now\n");
}
else
{
printf("you have not login\n");
}
} // 开始查询航班
void search_start(void)
{
if(search())
{
printf("1.order\n");
printf("0.back\n");
char cmd = get_cmd('','');
if(cmd == '')
{
return;
//start_sys();
}
else
{
char fid[]; // 选择的航班号
if(online == ) // 如果已经登录
{
printf("please entry fid:");
get_str(fid,);
if( == strlen(fid))
{
printf("fid is empty\n");
}
int i = ;
for(i=; i<search_num; i++)
{
//printf("fid:%s s_fid:%s num:%d\n",fid,search_fid[i],search_fnum[i]);
if(strcmp(fid,search_fid[i])== && search_fnum[i]>) //查询到对应航班
{
printf("order success\n");
int j=;
for(j=; j<MAX_Flight; j++) // 遍历航班表
{
if(strcmp(fid,FLI[j].fid)==)
{
FLI[j].fnum--; //票数减1
break;
}
}
int k=;
for(k=; k<MAX_Order; k++) // 遍历订票表
{
//printf("ready insert...\n");
if(strlen(ORD[k].pid) == ) // 在空位置插入数据
{
strcpy(ORD[k].pid,online_pid); // 插入当前用户身份证
strcpy(ORD[k].fid,search_fid[i]); // 插入当前选择的航班号
ORD[k].num = ;
printf("insert_to_order success\n");
break;
}
}
return;
}
else if(strcmp(fid,search_fid[i])== && search_fnum[i] == )
{
printf("no ticket\n");
search_start();
}
else if(i==MAX_Flight-)
{
printf("don't have this fid\n");
search_start();
}
}
}
else if(online == -)
{
printf("you have been locked,you can use this system now\n");
}
else
{
login();
}
}
}
} // 查询航班
bool search(void)
{
printf("start: \n");
get_str(start,);
printf("end: \n");
get_str(end,);
int i=;
search_num = ;
for(i=; i<MAX_Flight; i++)
{
if(strlen(start) == || strlen(end) == )
{
printf("start or end can't be empty\n");
return false;
}
if(strcmp(FLI[i].start,start)== && strcmp(FLI[i].end,end)==)
{
printf("fid:%s, ticket_num:%d\n",FLI[i].fid,FLI[i].fnum);
strcpy(search_fid[search_num],FLI[i].fid);
search_fnum[search_num] = FLI[i].fnum;
//printf("search_fid[%d]:%s, search_fun[%d]:%d\n",search_num,search_fid[search_num],search_num,search_fnum[search_num]);
++search_num;
}
if( == search_num && i == MAX_Flight-)
{
printf("no flight\n");
return false;
}
if(search_num > && i == MAX_Flight-)
{
//show_flight();
return true;
}
}
} // 输出订单信息
void order_list(void)
{
if(online == )
{
int i=;
for(i=; i<MAX_Order; i++)
{
if(strcmp(online_pid,ORD[i].pid)==)
{
//printf("online_pid:%s\n",online_pid);
printf("fid:%s, pid:%s, ticket:%d\n",ORD[i].fid,ORD[i].pid,ORD[i].num);
}
}
}
else if(online == -)
{
printf("you have been locked,you can use this system now\n");
}
else
{
login();
}
} // 删除订单
void del_order(void)
{
if(online == )
{
char fid[];
printf("order_list:\n");
order_list();
printf("please entry del_order fid:");
get_str(fid,);
int i=;
for(i=; i<MAX_Order; i++)
{
if(strlen(fid)==) //判空
{
printf("del_order fid can't be empty\n");
return;
}
if(strcmp(fid,ORD[i].fid)==)
{
memset(ORD[i].pid,'\0',sizeof(ORD[i].pid));
int j=;
for(j=; j<MAX_Flight; j++)
{
if(strcmp(fid,FLI[j].fid)==)
{
FLI[j].fnum++; // 返还飞机票
break;
}
}
printf("delete success\n");
return;
}
}
}
else if(online == -)
{
printf("you have been locked,you can use this system now\n");
}
else
{
login();
} } // 清理输入缓冲区
/*void clear_stdin(void)
{
stdin->_IO_read_ptr = stdin->_IO_read_end;//清理输入缓冲区
}
*/ // 读取输入字符串
char* get_str(char* str,size_t len)
{
if(NULL == str)
{
puts("empty ptr!");
return NULL;
} char *in=fgets(str,len,stdin); size_t cnt = strlen(str);
if('\n' == str[cnt-])
{
str[cnt-] = '\0';
}
else
{
scanf("%*[^\n]");
scanf("%*c");
} //clear_stdin(); return str;
} // 获取cmd命令
char get_cmd(char start,char end)
{
//clear_stdin(); printf("please entry cmd:");
while(true)
{
char val = getch();
if(val >= start && val <= end)
{
printf("%c\n",val);
return val;
}
}
}

C语言实现-航空订票系统(飞机订票系统)的更多相关文章

  1. windows API 开发飞机订票系统 图形化界面 (四)

    接下来的是录入航班.修改航班信息功能的实现: //录入航班 BOOL EntryFlight(HWND hEntryDlg){ TCHAR szDiscount[]; TCHAR szFare[],s ...

  2. windows API 开发飞机订票系统 图形化界面 (一)

    去年数据结构课程设计的作品,c语言实现,图形化界面使用windows API实现. 首发在我csdn博客:http://blog.csdn.net/u013805360/article/details ...

  3. web类协议脚本-飞机订票系统示例

    以下是LR自带的飞机订票系统的Demo,希望能帮助大家. Action() { int iRand; int iTmp; char *strTmpA; char *strTmpB; char *str ...

  4. loadrunner飞机订票系统从登陆订票退票登出的脚本实现代码调试通过

    在LR自带的飞机订票系统中,完整模拟一个用户从登陆->订票->退票->登出这样一个业务流程,分解每个事务为一个Action: 进入首页->登陆->进入订票页面->选 ...

  5. loadrunner笔记(二):飞机订票系统--客户信息注册

    (一)  几个重要概念说明 集合点:同步虚拟用户,以便同一时间执行任务. 事务:事务是指服务器响应用户请求所用的时间,当然它可以衡量某个操作,如登录所需要的时间,也可以衡量一系列的操作所用的时间,如从 ...

  6. LR自带网站飞机订票系统 启动

    LR自带的网站:飞机订票系统 可是如何启动自带的网站呢?? 一.启动服务:开始-所有程序--HP Software-HP LoadRunner-Samples-Web-Start Web Server ...

  7. Java版飞机订票系统

    关注微信公众号:Worldhello 回复 飞机订票系统 可获得系统源代码并可加群讨论交流 数据结构课程设计题目:          [飞机订票系统]            通过此系统可以实现如下功能 ...

  8. 【性能测试】Loadrunner12.55(二)-飞机订票系统-脚本录制

    1.1 飞机订票系统 Loadrunner 12.55不会自动安装飞机订票系统,要自己手动安装. 我们需要下载Web Tools以及一个小插件strawberry https://marketplac ...

  9. C# 第三方DLL,可以实现PDF转图片,支持32位系统、64位系统

    itextsharp.dll,是一个开源的在C#中用来生成PDF文档的库文件,不少C#爱好者用它制作出了PDF文档生成器.使用时只需在你的C#项目中添加引入此组件即可,使用方法网上有很多,自己查阅一下 ...

  10. linux系统top命令查看系统状态

    Linux系统可以通过top命令查看系统的CPU.内存.运行时间.交换分区.执行的线程等信息.通过top命令可以有效的发现系统的缺陷出在哪里.是内存不够.CPU处理能力不够.IO读写过高. 使用SSH ...

随机推荐

  1. XF相对控件布局

    using System; using Xamarin.Forms; using Xamarin.Forms.Xaml; [assembly: XamlCompilation (XamlCompila ...

  2. WPF ValidationRule的特点(默认目标-源才校验)

    默认是当目标发生改变时候,通过绑定改变源时候进行校验,因为WPF认为源是安全的,如果想让源改变时候,也进行校验则设置验证规则的ValidatesOnTargetUpdated =true using ...

  3. WPF RichTextBox 导出与加载

    private void Button_Click(object sender, RoutedEventArgs e) { string savePth = System.IO.Path.Combin ...

  4. FileHelper

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Win ...

  5. 利用Python sklearn的SVM对AT&T人脸数据进行人脸识别

    要求:使用10-fold交叉验证方法实现SVM的对人脸库识别,列出不同核函数参数对识别结果的影响,要求画对比曲线. 使用Python完成,主要参考文献[4],其中遇到不懂的功能函数一个一个的查官方文档 ...

  6. 请求通道在等待 00:00:58.9616639 以后答复时超时。增加传递给请求调用的超时值,或者增加绑定上的 SendTimeout 值。分配给此操作的时间可能是更长超时的一部分。

    异常信息:请求通道在等待 00:00:58.9616639 以后答复时超时.增加传递给请求调用的超时值,或者增加绑定上的 SendTimeout 值.分配给此操作的时间可能是更长超时的一部分. 开发背 ...

  7. API HOOK介绍 【转】

    什么是“跨进程 API Hook”? 众所周知Windows应用程序的各种系统功能是通过调用API函数来实现.API Hook就是给系统的API附加上一段小程序,它能监视甚至控制应用程序对API函数的 ...

  8. C语言中.h和.c文件解析(转载)

    转载:http://www.cnblogs.com/laojie4321/archive/2012/03/30/2425015.html   简单的说其实要理解C文件与头文件(即.h)有什么不同之处, ...

  9. Delphi6/7 中XML 文档的应用

    XML文档是新一代的Web数据格式.它可以用树的形式储存一切数据.下面介绍一下TXMLDocument控件的一些用法:已定义:XMLDoc: TXMLDocument;EncoderMIME: TId ...

  10. 轻量级 Material Design 前端框架 MDUI (纯html,css,与css框架跟react vue不冲突)

    MDUI 是一个轻量级的 Material Design 前端框架,对照着 Material Design 文档进行开发,争取 1:1 实现 Material Design 中的组件. 多主题支持 M ...