多平台统一管理软件接口,如何实现多平台统一管理软件接口
919
2023-01-03
本文目录一览:
(已修改,请用最新机票订购系统接口设计的代码)代码说明机票订购系统接口设计:
1级菜单:选择购买的航班号,并显示对应座位状态。
(我只做测试,所以初始化initFlight函数中我只初始机票订购系统接口设计了2个航班,需要自己按照我的代码添)
(注意:实际开发软件,链表数据是从数据库中读取的,需要实时同步,如果要多次调用initFlight函数,记得自己写一个释放内存的函数,把所有链表“SINFO和FLINFO”节点都释放掉,释放函数我没写,需要你自己写机票订购系统接口设计!!!)
2级菜单:选择购买对应座位号,完成购买,并实时显示购买结果。
位置编号、座位最大排数、舱室类型、折扣等参数均由常量参数空值,需要修改自行改常量。
注意:舱室类型(我默认3个类型头等舱、公务舱、经济舱)对应折扣参数:tDiscount二维数组。如要如要添加新的舱室类型,必须将参数常量TYPESIZE、typeName、types、tDiscount这4个同时修改,具体看代码备注!!
座位票价=基础票价*类型折扣*时段折扣。
因为飞机不让吸烟,所以我没做吸烟区(笑),如果你需要,可以作为类型自行添加!
#include<stdio.h
#include<stdlib.h
#include<conio.h
#include<string.h
#include<malloc.h
#include<time.h
//-----------------------相关参数,想改变,在这里修改!!!!!!!-----------------------------
const float timeDiscount=1;//时段折扣,影响所有航班最终价格,默认1
const char cID[5]="ABCD";//位置编号
const int maxRow=20;//位置最大排号
//注意:如果修改类型数量,types和tDiscount必须同时修改!!!
#define TYPESIZE 3//类型数量
const char typeName[TYPESIZE][10]={"头等舱","公务舱","经济舱"};
const int types[TYPESIZE][2]={{1,2},{3,4},{5,20}};//排号对应类型。1~2排头等舱,3~4排公务舱,5~20排经济舱
const float tDiscount[TYPESIZE]={1.5,1.3,1};//类型折扣。头等舱1.5倍,公务舱1.3倍,经济舱1倍
//-------------------------------------------------------------------------------
typedef struct seatInfo//座位信息,一条链表对应一个航班信息,链表顺序从第一排左边第一个开始往后A1~D1,A2~D2。。。
{
char cloID;//位置编号A、B、C、D
int row;//位置排号
int type;//座位所属类型:0:头等舱、1:公务舱、2:经济舱,不同类型对应不同的类型折扣tDiscount
int sell;//出售状态,0:未出售机票订购系统接口设计;1:已出售
struct seatInfo *next;
}SINFO;
typedef struct flightInfo//航班信息
{
char fid[10];//航班号
time_t tfTime;//起飞时间
time_t ldTime;//降落时间
char toCity[20];//抵达城市
float tPrice;//基础票价,不同位置具有不同折扣,座位票价=基础票价*类型折扣*时段折扣
struct flightInfo *next;
struct seatInfo *sHead;//对应座位链表的头节点
}FLINFO;
void meError(void *p);
SINFO *getSINFO();//获取座位链表
//addFLINFO:添加航班信息链表的节点flinfoHead:头节点(第一次传NULL会自动生成),flinfoTail:尾节点,fNew:要添加的结构信息(成员指针无需赋值)
FLINFO *addFLINFO(FLINFO **ffHead,FLINFO *flinfoTail,FLINFO fNew);//返回尾节点
time_t getTime_tfromStr(char *sTime);//将YYYY-MM-DD hh:mm:ss格式的时间字符串转换成time_t型数值
FLINFO *initFlight();//初始化航班信息,返回航班链表头节点,如果想手动输入,请在这里添加!!!正常软件开发,这一步应该是从数据库读取!
char *getTString(struct tm *tm0);//通过tm获取时间字符串
void showSinfo(FLINFO *flinfo);//显示航班对应座位信息
void printfFlinfo(FLINFO * flinfoHead);
FLINFO *selectFlinfo(FLINFO *flinfoHead,char *fid);//选择航班号,返回节点
void showSinfo(FLINFO *flinfo);//显示航班对应座位信息
SINFO *selectSinfo(FLINFO *flinfo,char *sid);//选择座位,返回节点
int main()
{
FLINFO *flinfoHead=initFlight(),*ffSelect=NULL;
SINFO *sfSelect=NULL;
char fid[10]={0},sid[10]={10};
while(1)
{
ffSelect=NULL;
sfSelect=NULL;
memset(fid,0,10);
memset(sid,0,10);
printfFlinfo(flinfoHead);
printf("请输入要购买的航班号:");
scanf("%s",fid);
ffSelect=selectFlinfo(flinfoHead,fid);
if(!ffSelect)
{
printf("未找到对应航班,按任意键继续-----\n");
getch();
system("cls");
continue;
}
system("cls");
printf("航班号:%s 座位信息如下:\n",ffSelect-fid);
showSinfo(ffSelect);
printf("请输入要购买的座位编号(输入0返回主菜单):");
scanf("%s",sid);
if(!strcmp(sid,"0"))
{
system("cls");
continue;
}
else
{
sfSelect=selectSinfo(ffSelect,sid);
if(!sfSelect||sfSelect-sell)
{
printf("未找到对应座位或该座位已出售,请重新输入!按任意键继续-----\n");
getch();
system("cls");
continue;
}
printf("购买成功!按任意键继续-----");
sfSelect-sell=1;
getch();
system("cls");
}
}
return 0;
}
SINFO *selectSinfo(FLINFO *flinfo,char *sid)//选择座位,返回节点
{
SINFO *sinfoHead=flinfo-sHead;
while(sinfoHead-next)
{
if(sinfoHead-next-cloID==sid[0] sinfoHead-next-row==atoi(sid+1))
return sinfoHead-next;
sinfoHead=sinfoHead-next;
}
return NULL;
}
void showSinfo(FLINFO *flinfo)//显示航班对应座位信息
{
SINFO *sinfoHead=flinfo-sHead,*sfp=NULL;
int i,j,k,row=maxRow,clo=strlen(cID);
char typeStr[10]={0};
for(i=0;i<row;i++)
{
//---------读取座位所属舱室------------
memset(typeStr,0,10);
for(k=0;k<TYPESIZE;k++)
if(i+1=types[k][0] i+1<=types[k][1])
strcpy(typeStr,typeName[k]);
//--------------------------------------
printf("\n");
for(j=0;j<clo;j++)
printf("------------- ");
printf("\n");
sfp=sinfoHead;
for(j=0;j<clo;j++)
{
printf("| %c%02d | ",sfp-next-cloID,sfp-next-row);
sfp=sfp-next;
}
printf("\n");
sfp=sinfoHead;
for(j=0;j<clo;j++)
{
printf("| %c | ",sfp-next-sell?2:1);
sfp=sfp-next;
}
printf("\n");
sfp=sinfoHead;
for(j=0;j<clo;j++)
{
printf("|%6s:%4.0f| ",typeStr,flinfo-tPrice*tDiscount[sfp-next-type]*timeDiscount);
sfp=sfp-next;
}
printf("\n");
sinfoHead=sfp;
}
for(j=0;i<clo;j++)
printf("------- ");
printf("\n");
}
FLINFO *selectFlinfo(FLINFO *flinfoHead,char *fid)//选择航班号,返回节点
{
while(flinfoHead-next)
{
if(!strcmp(flinfoHead-next-fid,fid))
return flinfoHead-next;
flinfoHead=flinfoHead-next;
}
return NULL;
}
void printfFlinfo(FLINFO * flinfoHead)
{
while(flinfoHead-next)
{
printf("目的地:%s,航班号:%s\n----起飞时间:%s,抵达时间:%s\n\n",flinfoHead-next-toCity,flinfoHead-next-fid,getTString(localtime(flinfoHead-next-tfTime)),getTString(localtime(flinfoHead-next-ldTime)));
flinfoHead=flinfoHead-next;
}
}
char *getTString(struct tm *tm0)//通过tm获取时间字符串
{
char *str=(char *)malloc(sizeof(char)*20),num[5]={0};
meError(str);
memset(str,0,20);
sprintf(num,"%4d",tm0-tm_year+1900);
strcat(str,num);
strcat(str,"-");
memset(num,0,5);
sprintf(num,"%02d",tm0-tm_mon);
strcat(str,num);
strcat(str,"-");
memset(num,0,5);
sprintf(num,"%02d",tm0-tm_mday);
strcat(str,num);
strcat(str," ");
memset(num,0,5);
sprintf(num,"%02d",tm0-tm_hour);
strcat(str,num);
strcat(str,":");
memset(num,0,5);
sprintf(num,"%02d",tm0-tm_min);
strcat(str,num);
strcat(str,":");
memset(num,0,5);
sprintf(num,"%02d",tm0-tm_sec);
strcat(str,num);
return str;
}
time_t getTime_tfromStr(char *sTime)//将YYYY-MM-DD hh:mm:ss格式的时间字符串转换成time_t型数值
{
time_t rt;
struct tm *tm1=NULL;
rt=time(NULL);
tm1=localtime(rt);
sscanf(sTime,("%4d-%2d-%2d %2d:%2d:%2d"),tm1-tm_year,tm1-tm_mon,tm1-tm_mday,tm1-tm_hour,tm1-tm_min,tm1-tm_sec);
tm1-tm_year-=1900;
tm1-tm_mon--;
rt=mktime(tm1);
return rt;
}
FLINFO *initFlight()//初始化航班信息,返回航班链表头节点,如果想手动输入,请在这里添加!!!正常软件开发,这一步应该是从数据库读取!
{
FLINFO *ffHead=NULL,*flinfoTail=NULL,fNew;
//--------添加一个航班信息----需要增加按照我下面调用方式写--------------------------------
strcpy(fNew.fid,"CI502");
fNew.tfTime=getTime_tfromStr("2019-02-20 03:30:30");
fNew.ldTime=getTime_tfromStr("2019-02-20 05:20:30");
strcpy(fNew.toCity,"台北");
fNew.tPrice=1000;
fNew.next=NULL;
flinfoTail=addFLINFO(ffHead,flinfoTail,fNew);
//--------------------------------------------------------------------------------------------
strcpy(fNew.fid,"9C8921");
fNew.tfTime=getTime_tfromStr("2019-02-20 14:30:30");
fNew.ldTime=getTime_tfromStr("2019-02-20 16:40:30");
strcpy(fNew.toCity,"香港");
fNew.tPrice=500;
fNew.next=NULL;
flinfoTail=addFLINFO(ffHead,flinfoTail,fNew);
return ffHead;
}
FLINFO *addFLINFO(FLINFO **ffHead,FLINFO *flinfoTail,FLINFO fNew)//返回尾节点
//添加航班信息链表的节点flinfoHead:头节点(第一次传NULL会自动生成),flinfoTail:尾节点,fNew:要添加的结构信息(成员指针无需赋值)
{
FLINFO *flinfoHead=*ffHead;
if(flinfoHead==NULL)
{
*ffHead=(FLINFO *)malloc(sizeof(FLINFO));
flinfoHead=*ffHead;
meError(flinfoHead);
flinfoHead-next=NULL;
}
FLINFO *flinfoNew=(FLINFO *)malloc(sizeof(FLINFO));
meError(flinfoNew);
flinfoNew-next=NULL;
flinfoNew-fid[0]=0;
strcpy(flinfoNew-fid,fNew.fid);
flinfoNew-ldTime=fNew.ldTime;
flinfoNew-tfTime=fNew.tfTime;
flinfoNew-toCity[0]=0;
strcpy(flinfoNew-toCity,fNew.toCity);
flinfoNew-tPrice=fNew.tPrice;
flinfoNew-sHead=getSINFO();
if(flinfoHead-next==NULL)
flinfoHead-next=flinfoNew;
else
flinfoTail-next=flinfoNew;
flinfoTail=flinfoNew;
return flinfoTail;
}
SINFO *getSINFO()//获取座位链表
{
int maxClo=strlen(cID),cnt=maxClo*maxRow,clo=0,row=1,i;
SINFO *sinfoHead=(SINFO *)malloc(sizeof(SINFO)),*sinfoTail=NULL;
meError(sinfoHead);
sinfoHead-next=NULL;
SINFO *sinfoNew=NULL;
while(cnt--)//按顺序生成对应数量的座位链表
{
if(clo==maxClo)
clo=0,row++;
if(row==maxRow+1)
row=1;
sinfoNew=(SINFO *)malloc(sizeof(SINFO));
meError(sinfoNew);
sinfoNew-cloID=cID[clo];
sinfoNew-row=row;
for(i=0;i<TYPESIZE;i++)
if(row=types[i][0] row<=types[i][1])
{
sinfoNew-type=i;
break;
}
sinfoNew-sell=0;
sinfoNew-next=NULL;
if(sinfoHead-next==NULL)
sinfoHead-next=sinfoNew;
else
sinfoTail-next=sinfoNew;
sinfoTail=sinfoNew;
clo++;
}
return sinfoHead;
}
void meError(void *p)//内存申请失败
{
if(p==NULL)
{
printf("\n异常:内存申请失败!回车结束程序!\n");
while(getch()!='\r');
exit(0);
}
}
机票查询客户端前台主要是指:实现访客或会员在网站上,通过机票实时查询接口,实现从查询到预订再到扣位产生PNR编码机票订购系统接口设计的一种服务端口。
具体的操作方法和流程如下:
(1)由网站浏览者选择或输入城市,选定出发日期及相关条件,提交数据实现查询显示航班数据。
(2)用户点击预订按扭进入订单填写页面,填写完相关资料点击提交订单,即可将订单数据写入后台数据库,同时产生PNR扣位编码。
三、客户端后台操作流程
(1)后台操作包括特价管理、参数设置、订单管理、会员管理、会员服务、附加管理、系统管理、退出等。
具体的功能介绍如下:
1、特价管理
航班静态特价:添加此特价可自定义某航班特定舱位的特价机票价格及座舱数
航班动态特价:添加此特价可自定义某航班特定舱位的特价机票价格(航空公司发放的隐藏特价舱位)
航线特价(动态):添加此特价可自定义某航段或某航空公司所有航班的特价机票价格
假位控制:当航空公司出现无法扣位或无法出票的机票数据(假位)时,可以使用此功能让网站上不再显示此舱位的机票,以避免客户产生的纠纷。
2、参数设置
航空公司:可设置航空公司的名称、代码、退改签规定等相关信息
航空城市:航空城市中文名称,三字代码的更改
运价管理:一般的航段运价
常规航位:重要数据(需要根据航空公司规定的机票舱位代码表设定)
机型管理:可添加和修改机型的相关简介
星期表:星期的中英文对照
月份表:月份的中英文对照
3、订单管理
新订单:客户最新下的未经处理和查看的订单
已确定订单:经过确认后的订单
已生效订单:正在处理中,出票但还未送到客户手中,或客户还未付款的订单
已成交订单:已经付清款项的订单
已取消订单:客户下订单后,中途取消的订单
4、会员管理
网站管理员
普通注册会员
VIP会员
VIP贵宾会员
集团会员
5、会员服务
服务条款:会员服务条款和规定
兑奖奖品:可添加和修改积分兑换的奖品
兑奖业务:会员通过积分兑换奖品提交的相关数据(可处理)
6、附加管理
送票城市:可对填写订单页面的送票城市进行添加和修改
7、系统管理
管理员及权限:可更改、添加或删除后台管理员及管理员权限
基本参数设置:重要设置项(包括机票系统ID,提交到服务器的地址,邮件发送设置,扣位设置,燃油附加设置,机场建设费设置、网上银行设置等。相关参数在其后都有具体说明。
8、退出:不需要管理时,请点此安全退出后台管理
四、安装操作流程
可分为几中情况:
(1)由客户提供FTP(包括FTP的IP地址,登陆用户名,登陆密码,端口号),我司派技术人员负责安装调试。
(2)如客户不愿意提供FTP,我司可派专人将机票客户端系统通过网络发送给客户,由客户上传,调试,我司提供全程安装的技术支持服务。
如果一切顺利,一般安装接口所须时间为3-4个钟,便可以马上实现在客户网站运行。
航信系统CBE接口二次开发(Webservicers)产品
CBE接口是凯晨软件提供的民航业务软件开发的程接口,其功能等同于中航信IBE接口,程序人员可以在CBE接口上使用Webservicers服务开发机票销售网站、机票分销系统、民航业务管理软件等任何民航业务系统软件。
CBE接口程序开者使用方式:
凯晨软件已经将CBE接口复杂文件封装成DLL,并以Webservicers服务方式提供给开发者使用,开发者将以最简单的方式开发功能强大的民航业务软件。
CBE接口(Webservicers服务)特色:
指令方面:1、Eterm所使用的指令功能CBE接口一应俱全机票订购系统接口设计;
2、支持扩展应用指令,如当天全部航班一次查寻、自动出票应用功能;
速度方面:可与航信IBE接口媲美,在应用优化的情况下与IBE接口更快;
使用成本:IBE接口/年,5万接口租用+流量收费10万;
CBE接口/年,0成本(结合eterm路由器不占用配置);
易 用 性:IBE是航专为程序设计提供的开发接口,需要一定专业知识;
CBE接口通过webservicers服务实现,采用标准接口,支持多种开发语言
(如:ASP、.Net、JSP、PHP等各种程序开发语言),基础程序员也能开出强
大业务软件;
CBE接口的Webservicers版本功能列举:
基础版: AV指令功能(实现多种方式的航班查寻);
SD扣位指令组(实现国内国际航班扣位,生成PNR);
XEPNR指令(消取PNR);
民航客气业务基础数据包(票价、里程、城市代码、航空公司、舱位代码);
Eterm路由器一套(支持一个配置,单一OFFICE号接入);
企业版:AV指令功能(实现多种方式的航班查寻);
SD扣位指令组(实现国内国际航班扣位,生成PNR);
XEPNR指令(消取PNR);
RT指令(可实现PNR导入、行程单打印、出票检查等功能);
ETDZ出票组指令(包含:RR、EI、XE、PAT:A等指令,可实现自动出票功能);
Eterm路由器一套(最多支持两个配置,单一OFFICE号接入);
全功能版:AV指令功能(实现多种方式的航班查寻);
SD扣位指令组(实现国内国际航班扣位,生成PNR);
XEPNR指令(消取PNR);
RT指令(可实现PNR导入、行程单打印、出票检查等功能);
SMS航信短信(订座或出票成功后自动(或手动)短信通知乘机人);
CRS指令组(即:Eterm全部指令,可做WEB扩展应用或建立WEB版Eterm);
Eterm路由器一套(支持多个配置,多OFFICE号接入)。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~