📄 飞机订票.cpp
字号:
//Predefine
//#include <conio.h> clrscr(); 清屏函数在TURBO C中
#include <stdio.h> //include printf()
#include <stdlib.h>//include exit()
#include <string.h>//include gets(char str[]) strcpy() strcmp()
#define PN 10
#define TM 20
#define RC 15
#define CN 20
#define CEN 20
#define DT 10
#define MaxP 10 //最大航班数
//航班与订票信息结构
typedef struct PlaneInfro{
char date[DT];
char PlaneName[PN];
char Time[TM];
char ReachCity[RC];
float Price;
float Counter; //折扣
float FinaPrice;
int Seateds; //已订票数
int Leaveseats; //剩余票数
int Fullseats;
}PlaneInf;
//客户资料结构
typedef struct ClientInfro{
char PlaneName[PN];
char ClientName[CN];
char CertifyNum[CEN];
char Date[30]; //订票日期
int BookPage; //订单号
int Bookcounter; //订票数
}ClientInf;
////数据信息
int Pn=0,Page=0; //Pn is Planenumbers,Page is BookPages
PlaneInf PIF[MaxP]; //relate PlaneInf.dat 其中航班数组下标与订票数组下标一一映射对应
//*********************Preload.c*************************************/
//预先载入航班数据信息
void LodePIF(){
FILE *fp;//文件指针
if((fp=fopen("PlaneInf.dat","rb"))==NULL)
{fprintf(stderr," PlaneInf.dat is not exist!\n");
return;
}
else while(fread(&PIF[Pn],sizeof(PlaneInf),1,fp)==1) Pn++;
fclose(fp);
}
//获取初始订单号
void GetPage(){
FILE *fp;//文件指针
if((fp=fopen("ClientInf.dat","rb"))==NULL)
{
fprintf(stderr,"ClientInf.dat is not exist!\n");
return;//page=0
}
else {fseek(fp,0,2);
Page=ftell(fp)/sizeof(ClientInf);//Page follow the end of File
fclose(fp);
}
}
//***
void Preload(){
printf("载入数据!!!\n");
GetPage();
LodePIF();
//clrscr();>>>>>>
}
//*********************BookFace().c*************************************/
//显示界面
void BookFace(){
printf("\t*****************************************************\n");
printf("\t\t BOOK SYSTEM\n");
printf("\t\t1.录入航班信息\n");
printf("\t\t2.查询航班信息\n");
printf("\t\t3.订票\n");
printf("\t\t4.退票\n");
printf("\t\t5.修改航班信息\n");
printf("\t\t6.显示全部航班信息\n");
printf("\t\t7.显示全部客户信息\n");
printf("\t\t8.显示全部定票信息\n");
printf("\t\t9.退出\n");
printf("\t*****************************************************\n");
printf("请选择相应选项的数值以启动相应功能:\n");
}
//************************AddPlaInf().c**********************************/
//获取航班信息
void Input_PIF(){
char str[10];
printf("请输入航班号:\n");
gets(PIF[Pn].PlaneName);
printf("请输入起飞日期 :\n");
gets(PIF[Pn].date);
printf("请输入起降时间 :\n");
gets(PIF[Pn].Time);
printf("请输入抵达城市 :\n");
gets(PIF[Pn].ReachCity);
printf("请输入票价 :\n");
gets(str);PIF[Pn].Price=atof(str);
printf("请输 折扣 :\n");
gets(str);PIF[Pn].Counter=atof(str);
printf("请输入满座数 :\n");
gets(str);PIF[Pn].Fullseats=PIF[Pn].Leaveseats=atoi(str);
PIF[Pn].FinaPrice=PIF[Pn].Counter*PIF[Pn].Price;
PIF[Pn].Seateds=0;
}
//录入航班信息
void AddPlaInf(){
char ch='y',str[4];
//clrscr();>>>>>>
printf("请输入相应的 航班号 起飞日期 起降时间 抵达城市 票价 折扣 满座数\n");
printf(" example NS001 9.10 9:30-10:30 wuhan 300.0 0.9 50\n");
while(ch!='N'&&ch!='n')
{
Input_PIF(); //获取航班信息
Pn++; //航班指针后移
printf("退出?[N or n]继续?[any key]:\n");
gets(str);
ch=str[0];
}
//clrscr();>>>>>>
BookFace();
}
//*************************InquireInf().c*********************************/
//判断该航班是否存在
//可传入 航班名 或者 抵达城市 判断
int IshavePla(int pos,char str[]){
for(;pos<Pn&&(strcmp(str,PIF[pos].PlaneName)!=0&&strcmp(str,PIF[pos].ReachCity)!=0);pos++);
if(pos<Pn) return pos;//成功则 还回该航班所在位子
else return -1;//OR RETURN -1
}
//**
void Inquire(){
char str[20];
int k=0;
void DisplayPn(int k);
gets(str);
if(Pn!=0){//没有录入航班信息
while((k=IshavePla(k,str))>=0)//找到该航班;
{DisplayPn(k);
k++;
}
printf("对不起,没有该航班的信息!!\n");
}
else printf("对不起,还没有录入航班信息!!\n");
}
//*********
void InquireInf(){
char str[4];
int opt;
//clrscr();>>>>>>
if(Pn!=0)
{
printf("请输入 1.航班号 2.抵达城市 0.退出\n");
gets(str);opt=atoi(str);
while(opt!=3)
{
if(opt==1)
{ printf("请输入航班号:\n");
Inquire();
}
else if(opt==2)
{ printf("请输入抵达城市:\n");
Inquire();
}
else printf("无效的输入命令,请再输入:\n");
printf("退出?[3] 继续?[1.航班号 2.抵达城市]:\n");
gets(str);opt=atoi(str);
}//end of while
//clrscr();>>>>>>
BookFace();
}else printf("空文件,没有任何数据信息!!请载入!!!\n");//end of if1
}
//判断该航班是否还有票
int IshavePiao(int k,int counter){
char ch='n';
if(PIF[k].Leaveseats>=counter) return counter;
else if(PIF[k].Leaveseats!=0)
{printf("对不起,只剩下%d张票了\n",PIF[k].Leaveseats);
printf("要定就选择[Y or y],退出就选择[any key]\n");
scanf("%1s",&ch);
if(ch=='Y'&&ch=='y') return PIF[k].Leaveseats;
else return -1;
}
else return 0;
}
//修改订票信息
void ChangeBIF(int k, int counter){
PIF[k].Seateds+=counter;
PIF[k].Leaveseats-=counter;
}
//获取客户资料
#include<time.h>//时间头文件
void CreatCIF(int k,int counter,ClientInf& temp){
time_t now;
long int curent=time(&now);//当前系统时间
char *str=ctime(&curent);
printf("请输入有关信息:\n");
printf("请输入姓名:\n");
gets(temp.ClientName);
printf("证件号:\n");
gets(temp.CertifyNum);
strcpy(temp.PlaneName,PIF[k].PlaneName);
strcpy(temp.Date,str);
temp.BookPage=Page++;
temp.Bookcounter=counter;
}
//***
void AddToFileC(ClientInf& newer){//-->Client.dat ab
FILE *fp;//文件指针
if((fp=fopen("ClientInf.dat","ab"))==NULL)
{
fprintf(stderr,"ClientInf.dat is not exist!\n");
exit(-1);
}
else while(fwrite(&newer,sizeof(ClientInf),1,fp)!=1);
fclose(fp);
}
//***
void Book(){
char str[PN],str1[PN];//缓存字符数组
int counter,k;
char ch='y';
ClientInf temp;
//clrscr();>>>>>>
if(Pn==0) printf("空文件,没有任何数据信息!!请载入!!!\n");
else while(ch!='N'&&ch!='n')
{
printf("请输入要定的航班号:\n");
gets(str);
printf("定票数量:\n");
gets(str1);
counter=atoi(str1);
if((k=IshavePla(0,str))>=0) //航班存在?
{counter=IshavePiao(k,counter);
if(counter>0) //还有余票?
{ChangeBIF(k,counter); //订票
CreatCIF(k,counter,temp); //创建客户质料
AddToFileC(temp); //add to Client.dat
}
else if(counter==0) printf("航班已满,对不起,请另选择!\n");
else printf("欢迎下次定票!!\n");
}
else printf("没有你要定的航班,请另选择!\n");
printf("退出?[N or n]继续?[any key]:\n");
gets(str);
ch=str[0];
}
//clrscr();>>>>>>
BookFace();
}
void ChangePIF(int k){
char ch='y',str[20];
int opt;
void DisplayPn(int k);
printf("请选择如下选项的数值进行修改:\n");
DisplayPn(k);
while(ch!='N'&&ch!='n')
{
printf("请输入选项值:\n");
gets(str);
opt=atoi(str);
printf("请输入更新值:\n");
switch(opt){
case 1: gets(str);//获取字符串到缓存ETR中
strcpy(PIF[k].PlaneName,str);//copy and change planeInf.PlaneName
break;
case 2: gets(str);
strcpy(PIF[k].date,str);
break;
case 3: gets(str);
strcpy(PIF[k].Time,str);
break;
case 4: gets(str);
strcpy(PIF[k].ReachCity,str);
break;
case 5: gets(str);
PIF[k].Price=atof(str);
PIF[k].FinaPrice=PIF[k].Counter*PIF[k].Price;
break;
case 6: gets(str);
PIF[k].Counter=atof(str);
PIF[k].FinaPrice=PIF[k].Counter*PIF[k].Price;
break;
case 7: printf("该项不能修改\n");
break;
case 8: gets(str);
PIF[k].Fullseats=atoi(str);
break;
default: printf("无效的输入命令\n");
}
printf("继续修改:[any key] 退出修改:[n or N]\n");
gets(str);
ch=str[0];
}
}
//***
void ChangePlaInf(){
int k;
char str[PN];
char ch='y';
void DisplayPn(int k);
//clrscr();>>>>>>
if(Pn==0) printf("空文件,没有任何数据信息!!请载入!!!\n");
else while(ch!='N'&&ch!='n')
{
printf("请输入要修改的航班号:\n");
gets(str);
if((k=IshavePla(0,str))<0) //航班存在?
printf("没有你要修改的航班号!\n");
else
if(PIF[k].Seateds==0) //没运作可修改
{ ChangePIF(k); //进入修改
printf("修改后的航班信息为:\n");
DisplayPn(k);
}
else fprintf(stderr,"该航班正在运作,不能修改!!");
printf("继续修改:[any key] 退出修改:[n or N]\n");
gets(str);
ch=str[0];
}
//clrscr();>>>>>>
BookFace();
}
//**********************DisplayP().c************************************/
//显示单个航班数据信息
void DisplayPn(int k){
printf("\t\t**************************\n");
printf("\t\t1.航班号 :%-s\n",PIF[k].PlaneName);
printf("\t\t2.起飞日期:%-s\n",PIF[k].date);
printf("\t\t3.起降时间:%-s\n",PIF[k].Time);
printf("\t\t4.抵达城市:%-s\n",PIF[k].ReachCity);
printf("\t\t5.票价 :%-.2f\n",PIF[k].Price);
printf("\t\t6.折扣 :%.2f\n",PIF[k].Counter);
printf("\t\t7.实际票价:%.2f\n",PIF[k].FinaPrice);
printf("\t\t8.满座数 :%d\n",PIF[k].Fullseats);
printf("\t\t**************************\n");
}
//显示全部航班数据信息
void DisplayP(){
if(Pn==0) printf("空文件,没有任何数据信息!!请载入!!!\n");
else for(int k=0;k<Pn;k++)
DisplayPn(k);
BookFace();
}
//********************DisplayC().c**************************************/
//显示单个客户数据信息
void DisplayCn(ClientInf& temp){
printf("\t\t**************************\n");
printf("\t\t1.订单号 :%-d\n",temp.BookPage);
printf("\t\t2.航班号 :%-s\n",temp.PlaneName);
printf("\t\t3.客户姓名 :%-s\n",temp.ClientName);
printf("\t\t4.证件号 :%-s\n",temp.CertifyNum);
printf("\t\t5.订票日期 :%-s\n",temp.Date);
printf("\t\t6.订票数量 :%d\n",temp.Bookcounter);
printf("\t\t**************************\n");
}
//显示全部客户数据信息
void DisplayC(){
FILE *fp;//文件指针
ClientInf temp;
if((fp=fopen("ClientInf.dat","rb"))==NULL)
{
fprintf(stderr,"ClientInf.dat is not exist!\n");
printf("没有任何数据信息!!请载入!!!\n");
BookFace();
return;
}
while(fread(&temp,sizeof(ClientInf),1,fp)==1) DisplayCn(temp);
fclose(fp);
BookFace();
}
//**********************DisplayB().c************************************/
//显示单个订票数据信息
void DisplayBn(int k){
printf("\t\t**************************\n");
printf("\t\t1.航班号 :%-s\n",PIF[k].PlaneName);
printf("\t\t2.已订票数 :%-d\n",PIF[k].Seateds);
printf("\t\t3.剩余票数 :%-d\n",PIF[k].Leaveseats);
printf("\t\t**************************\n");
}
//显示全部订票数据信息
void DisplayB(){
if(Pn==0) printf("还没有订票信息!!!\n");
else for(int k=0;k<Pn;k++)
DisplayBn(k);
BookFace();
}
// **********************Operate().c************************************/
void Operate(){
int opt;
char str[4];
gets(str);
opt=atoi(str);
while(opt!=9)
{
switch(opt)
{
case 1: AddPlaInf();break;
case 2: InquireInf();break;
case 3: Book();break;
// case 4: RetenBook();break;
case 5: ChangePlaInf();break;
case 6: DisplayP();break;
case 7: DisplayC();break;
case 8: DisplayB();break;
default : printf("无效的输入命令,请再输入:\n");
}
printf("请再输入:\n");
gets(str);
opt=atoi(str);
}
}
//***************************Aftload().c*******************************/
//用后保存数据信息
//保存航班信息
void SavePIF(){
FILE *fp;
if((fp=fopen("PlaneInf.dat","rb"))==NULL&&Pn==0) return;//file is not exist
else if((fp=fopen("PlaneInf.dat","wb"))==NULL)
{ fprintf(stderr,"can't open the file!\n");
exit(-1);
}
for(int k=0;k<Pn;k++)
fwrite(&PIF[k],sizeof(PlaneInf),1,fp);
fclose(fp);
}
//********
void Aftload(){
printf("保存数据!!!!\n");
SavePIF();
}
//***************************End of Modles()******************************/
/*************************main.c******************************************************/
int main(){
Preload(); //预先载入数据信息.......
BookFace(); //界面
Operate(); //操作功能模块
Aftload(); //保存数据信息...........
return 0;
}
/*********************endofmain.c*********************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -