自己写了一个小东西,有很多不足,欢迎大家指点,批评....
您的意见是我的动力..
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
/************************************************************************************/
/************** 机票部分 *****************/
/************** ****************/
/************************************************************************************/
/***************************机票链表********************************/
typedef struct Plane
{
int tick;//票数
float TickTrend;
char number[10];
float FirstPiece;
float EndPiece;
char start[10];
char end[10];
struct Plane *next;
}PlaneLink;
/******************************************************************/
/****************************机票链表初始化**************************************/
PlaneLink *InitPlane()
{
PlaneLink *Q;
Q=(PlaneLink*)malloc(sizeof(PlaneLink));
if(Q==NULL)
return NULL;
Q->next=NULL;
return Q;
}
/**************************************************************************/
/******************************创建机票链表***********************************/
int CreatPlane(PlaneLink *Q)
{
int flag;
PlaneLink *s;
while(flag)
{
s=(PlaneLink*)malloc(sizeof(PlaneLink));
printf("请输入航班票号:");
scanf("%s",s->number);
printf("请输入起始城市:");
scanf("%s",s->start);
printf("请输入到达城市:");
scanf("%s",s->end);
/***********************************************/
printf("请输入机票原价格:");
scanf("%f",&s->FirstPiece);
while(s->FirstPiece<=0)
{
getchar();
printf("请输入机票原价格:");
scanf("%f",&s->FirstPiece);
}
printf("请输入折扣后价格:");
scanf("%f",&s->EndPiece);
while(s->EndPiece<=0)
{
getchar();
printf("请输入机票原价格:");
scanf("%f",&s->EndPiece);
}
/***********************************************/
printf("请输入机票欲售数量:");
scanf("%d",&s->tick);
while(s->tick<=0)
{
getchar();
printf("请输入机票欲售数量:");
scanf("%d",&s->tick);
}
/***********************************************/
s->TickTrend=(s->EndPiece/s->FirstPiece)*10;
s->TickTrend*=10;//把小数点后一位左移,6.3345->63.345
s->TickTrend=(int)//把实数变整数,如63.345=63
s->TickTrend=(float)s->TickTrend/10;//把整数变成实数,最终保留小数点后一位
s->next=Q->next;
Q->next=s;
printf("是否继续输入:(1/0)");
scanf("%d",&flag);
while(flag!=0&&flag!=1)
{
getchar();
printf("输入错误!\n");
printf("是否继续输入:(1/0)");
scanf("%d",&flag);
}
}
printf("输入结束!\n");
return 1;
}
/********************************************************************/
/********************************查询飞机始发地*******************************/
int InsultPlace(PlaneLink *Q,char *pStart,char *pEnd,int pTick)
{
int n=0;
PlaneLink *q;
q=Q;
while(q->next!=NULL)
{
q=q->next;
if((strcmp(pStart,q->start)||strcmp(pEnd,q->end))==0)
{
printf("符合条件的班次:\n");
printf("|航班编号|始发站 |终点站 |机票原价|机票折扣价|机票折扣|机票数量|\n");
printf("|%8s|%8s|%8s|%8.1f|%10.1f|%8.1f|%8d|\n",q->number,q->start,q->end,q->FirstPiece,q->EndPiece,q->TickTrend,q->tick);
n++;
}
}
if(n==0)
return 0;
else
return 1;
}
/********************************************************************/
/**********************************************************************/
int InsultPlaneNumber(PlaneLink *Q,char *Tname)
{
int InsultTick=0,Iflag;
PlaneLink *p;
p=Q;
while(p->next!=NULL)
{
p=p->next;
if((strcmp(p->number,Tname))==0)
{
if(p->tick==0)
{
printf("对不起,机票以欲售完!");
return InsultTick;
}
printf("您所选择的班次剩余%d张票:\n",p->tick);
printf("请选择购买票数:");
scanf("%d",&InsultTick);
getchar();//可纠正输入错误
if(InsultTick>p->tick)
{
printf("所剩机票少于旅客所需机票,是否全部购买?(1/0)");
scanf("%d",&Iflag);
while(Iflag!=0&&Iflag!=1)
{
getchar();
printf("输入错误!\n");
printf("是否继续输入:(1/0)");
scanf("%d",&Iflag);
}
if(Iflag==1)
{
p->tick=0;
return InsultTick;
}
else
{
printf("请重新选择路线!\n");
InsultTick=0;
return InsultTick;
}
}
else
{
p->tick=p->tick-InsultTick;
return InsultTick;
}
}
}
if(p->next==NULL)
printf("没有该班次.请重新输入");
return InsultTick;
}
/**************************************************************************/
/**********************************打折票查询****************************************/
int InsultOnsaleTick(float Ttick,PlaneLink *Q)
{
int n=0;
PlaneLink *q;
q=Q;
if(q->next==NULL)
{
printf("无机票信息!\n");
return 0;
}
while(q->next!=NULL)
{
q=q->next;
if(Ttick==q->TickTrend)
{
printf("符合条件的班次:\n");
printf("|航班编号|始发站 |终点站 |机票原价|机票折扣价|机票折扣|机票数量|\n");
printf("|%8s|%8s|%8s|%8.1f|%10.1f|%8.1f|%8d|\n",q->number,q->start,q->end,q->FirstPiece,q->EndPiece,q->TickTrend,q->tick);
n++;
}
}
if(n==0)
return 0;
else
return 1;
}
/**************************************************************************/
/********************输出机票链表***************************/
void PrintPlane(PlaneLink *Q)
{
PlaneLink *q;
q=Q;
if(q->next==NULL)
printf("没有输入机票!");
else
{
printf("|航班编号|始发站 |终点站 |机票原价|机票折扣价|机票折扣|机票数量|\n");
while(q->next!=NULL)
{
q=q->next;
printf("|%8s|%8s|%8s|%8.1f|%10.1f|%8.1f|%8d|\n",q->number,q->start,q->end,q->FirstPiece,q->EndPiece,q->TickTrend,q->tick);
}
}
}
/******************************************************************************************/
/************************************************************************************/
/************** 机票完毕 *****************/
/************** ****************/
/************************************************************************************/
/************************************************************************************/
/************** 旅客部分 *****************/
/************** ****************/
/************************************************************************************/
/************************************旅客链表***************************************/
typedef struct Trust
{
int TrustTick;
int TrustNumber;
char TrustName[10];
char TrustEnd[10];
char TrustStart[10];
char TrustPlane[10];
struct Trust *next;
}TrustLink;
/********************************************************************************/
/***********************************初始化旅客************************************/
TrustLink *InitTrust()
{
TrustLink *Q;
Q=(TrustLink*)malloc(sizeof(TrustLink));
Q->next=NULL;
return Q;
}
/*******************************************************************************/
/**********************************构造旅客链表**********************************/
int CreatTurst(TrustLink *Q,PlaneLink *L)
{
int flag,Cflag;
float Ctick;
TrustLink *p;
while(flag)
{
p=(TrustLink*)malloc(sizeof(TrustLink));
printf("请选择查询方式(1.始发与终点 2.特价票 0.返回上一步):\n");
scanf("%d",&Cflag);
switch(Cflag)
{
case 1:
printf("请输入始发站:");
scanf("%s",p->TrustStart);
printf("请输入终点站:");
scanf("%s",p->TrustEnd);
if(InsultPlace(L,p->TrustStart,p->TrustEnd,p->TrustTick)==1)
{
printf("请输入你选择的航班号:");
scanf("%s",p->TrustPlane);
if((p->TrustTick=InsultPlaneNumber(L,p->TrustPlane))==0)
{
printf("请重新选择.\n");
break;
}
printf("请输入旅客姓名:");
scanf("%s",p->TrustName);
printf("请输入有效证件号码:");
scanf("%d",&p->TrustNumber);
p->next=Q->next;
Q->next=p;
}
else
printf("对不起,没有符合的机票!\n");
printf("是否继续查询(1/0):");
scanf("%d",&flag);
while(flag!=0&&flag!=1)
{
getchar();
printf("输入错误!\n");
printf("是否继续输入:(1/0)");
scanf("%d",&flag);
}
break;
case 2:
printf("请输入您期望的折扣价:");
scanf("%f",&Ctick);
while(Ctick<0||Ctick>10)
{
getchar();
printf("输入错误!\n");
printf("请输入您期望的折扣价:");
scanf("%f",&Ctick);
}
if((InsultOnsaleTick(Ctick,L))==1)
{
printf("请输入你选择的航班号:");
scanf("%s",p->TrustPlane);
if((p->TrustTick=InsultPlaneNumber(L,p->TrustPlane))==0)
{
printf("请重新选择.\n");
break;
}
printf("请输入始发站:");
scanf("%s",p->TrustStart);
printf("请输入终点站:");
scanf("%s",p->TrustEnd);
printf("请输入旅客姓名:");
scanf("%s",p->TrustName);
printf("请输入有效证件号码:");
scanf("%d",&p->TrustNumber);
p->next=Q->next;
Q->next=p;
}
else
printf("对不起,没有符合的机票!\n");
printf("是否继续查询(1/0):");
scanf("%d",&flag);
while(flag!=0&&flag!=1)
{
getchar();
printf("输入错误!\n");
printf("是否继续输入:(1/0)");
scanf("%d",&flag);
}
break;
case 0:
return 0;
}
}
}
/***********************************************************************/
/******************************输出客户资料****************************/
void PrintTrust(TrustLink *Q)
{
TrustLink *p;
p=Q;
if(p->next==NULL)
printf("无客户资料!\n");
else
{
printf("全部客户资料:\n");
while(p->next!=NULL)
{
p=p->next;
printf("|客户姓名|有效证件|航班编号|始发站|终点站|机票数量|\n");
printf("|%8s|%8d|%8s|%6s|%6s|%8d|\n",p->TrustName,p->TrustNumber,p->TrustPlane,p->TrustStart,p->TrustEnd,p->TrustTick);
}
}
}
/********************************************************************************************/
/********************************************************************************************/
/*************** 菜单 ****************/
/********************************************************************************************/
int menu()
{
int flag;
printf("\n\n\t\t\t\t航空售票系统\t\t\t\n");
printf("********************************************************************************\n");
printf("1.输入航班资料\t\t\t2.查询所需航班\t\t\t3显示航班资料\t\t\t\n");
printf("4.显示客户资料\t\t\t5.存储信息\t\t\t6.调取信息\t\t\t\n");
printf("0.退出程序\n");
printf("\n********************************************************************************\n");
printf("请输入操作方式:");
scanf("%d",&flag);
getchar();
return flag;
}
/********************************************************************************************/
/********************************************************************************************/
/*************** 操作功能 ****************/
/********************************************************************************************/
void UseSystem()
{
int Uflag,Mflag;
PlaneLink *Q,*q;
TrustLink *T,*t;
Q=InitPlane();
T=InitTrust();
while(Uflag)
{
Mflag=menu();
switch(Mflag)
{
case 1:CreatPlane(Q);
system("cls");
break;
case 2:CreatTurst(T,Q);
system("cls");
break;
case 3:PrintPlane(Q);
printf("请按任意键继续........\n");
getch();
system("cls");
break;
case 4:PrintTrust(T);
printf("请按任意键继续........\n");
getch();
system("cls");
break;
case 5:Save(Q,T);
printf("请按任意键继续........\n");
getch();
system("cls");
break;
case 6:
q=InitPlane();
t=InitTrust();
Load(q,t);
printf("请按任意键继续........\n");
getch();
system("cls");
break;
}
if(Mflag==0)
break;
}
}
/*************************************************************************************/
/********************************************************************************************/
/*************** 储存信息 ****************/
/********************************************************************************************/
int Save(PlaneLink *Q,TrustLink *L)
{
int Sflag;
PlaneLink *q;
TrustLink *t;
FILE *fp;
q=Q;
t=L;
if(t->next==NULL&&q->next==NULL)
{
printf("未建立信息!\n");
return 0;
}
printf("存储信息(1.旅客信息 2.机票信息 0.返回):");
scanf("%d",&Sflag);
while(Sflag!=0&&Sflag!=1&&Sflag!=2)
{
getchar();
printf("输入错误!\n");
printf("是否继续输入:(1/0)");
scanf("%d",&Sflag);
}
switch(Sflag)
{
case 1:
if(t->next==NULL)
{
printf("未建立客户资料!\n");
printf("存储失败!\n");
return 0;
}
if((fp=fopen("D:/客户资料.txt","w+"))==NULL)
{
printf("输入路径错误!\n");
return 0;
}
fprintf(fp,"\t\t\t\t\t航空客户资料\t\t\t\t\n");
fprintf(fp,"---------------------------------------------------------------------------------------------------------\n");
fprintf(fp,"\t\t|客户姓名|有效证件|航班编号|始发站|终点站|机票数量|\n");
while(t->next!=NULL)
{
t=t->next;
fprintf(fp,"|%8s|%8d|%8s|%6s|%6s|%8d|\n",t->TrustName,t->TrustNumber,t->TrustPlane,t->TrustStart,t->TrustEnd,t->TrustTick);
}
printf("客户资料在D盘存储成功.\n");
fclose(fp);
return 1;
case 2:
if(q->next==NULL)
{
printf("未建立即票资料!\n");
printf("存储失败!\n");
return 0;
}
if((fp=fopen("D:/机票资料.txt","w+"))==NULL)
{
printf("输入路径错误!\n");
return 1;
}
fprintf(fp,"\t\t\t\t\t航空公司机票资料\t\t\t\t\n");
fprintf(fp,"---------------------------------------------------------------------------------------------------------\n");
fprintf(fp,"\t\t|航班编号|始发站 |终点站 |机票原价|机票折扣价|机票折扣|机票数量|\n");
while(q->next!=NULL)
{
q=q->next;
fprintf(fp,"\t\t|%8s|%8s|%8s|%8.1f|%10.1f|%8.1f|%8d|\n",q->number,q->start,q->end,q->FirstPiece,q->EndPiece,q->TickTrend,q->tick);
}
printf("机票资料在D盘存储成功.\n");
fclose(fp);
return 1;
case 0:return 0;
}
}
/****************************************************************************************/
/********************************************************************************************/
/*************** 导入资料 ****************/
/********************************************************************************************/
int Load(PlaneLink *Q,TrustLink *T)
{
int Lflag;
PlaneLink *q;
TrustLink *t;
FILE *fp;
T->next=NULL;
Q->next=NULL;
printf("请选择导入资料(1.机票资料 2.客户资料):");
scanf("%d",&Lflag);
while(Lflag!=0&&Lflag!=1&&Lflag!=2)
{
getchar();
printf("输入错误!\n");
printf("是否继续输入:(1/0)");
scanf("%d",&Lflag);
}
switch(Lflag)
{
case 1:
if((fp=fopen("D:/机票资料.txt","r+"))==NULL)
{
printf("导入失败!\n");
return NULL;
}
printf("成功导入资料:\n");
fscanf(fp,"\t\t\t\t\t航空公司机票资料\t\t\t\t\n");
fscanf(fp,"---------------------------------------------------------------------------------------------------------\n");
fscanf(fp,"\t\t|航班编号|始发站 |终点站 |机票原价|机票折扣价|机票折扣|机票数量|\n");
//printf("\t\t\t航空公司机票资料\t\t\t\n");
//printf("----------------------------------------------------------------------------\n");
//printf("|航班编号|始发站 |终点站 |机票原价|机票折扣价|机票折扣|机票数量|\n");
do
{
q=(PlaneLink*)malloc(sizeof(PlaneLink));
fscanf(fp,"%s\n%s%s%f%f%f%d\n",q->number,q->start,q->end,&q->FirstPiece,&q->EndPiece,&q->TickTrend,&q->tick);
//printf("|%8s|%8s|%8s|%8.1f|%10.1f|%8.1f|%8d|\n",q->number,q->start,q->end,q->FirstPiece,q->EndPiece,q->TickTrend,q->tick);
printf("%s\n",q->number);
q->next=Q->next;
Q->next=q;
}while(!feof(fp));
fclose(fp);
PrintPlane(q);
return Q;
case 2:
if((fp=fopen("D:/客户资料.txt","r+"))==NULL)
{
printf("导入失败!\n");
return NULL;
}
printf("成功导入资料:\n");
fscanf(fp,"\t\t\t\t\t航空客户资料\t\t\t\t\n");
fscanf(fp,"---------------------------------------------------------------------------------------------------------\n");
fscanf(fp,"\t\t|客户姓名|有效证件|航班编号|始发站|终点站|机票数量|\n");
printf("\t\t\t\t\t航空客户资料\t\t\t\t\n");
printf("---------------------------------------------------------------------------------------------------------\n");
printf("\t\t|客户姓名|有效证件|航班编号|始发站|终点站|机票数量|\n");
do
{
t=(TrustLink*)malloc(sizeof(TrustLink));
fscanf(fp,"|%8s|%8d|%8s|%6s|%6s|%8d|\n",t->TrustName,t->TrustNumber,t->TrustPlane,t->TrustStart,t->TrustEnd,t->TrustTick);
printf(fp,"|%8s|%8d|%8s|%6s|%6s|%8d|\n",t->TrustName,t->TrustNumber,t->TrustPlane,t->TrustStart,t->TrustEnd,t->TrustTick);
t->next=T->next;
T->next=t;
}while(!feof(fp));
fclose(fp);
return T;
case 0:return NULL;
}
}
/********************************************************************************************/
/*************** 主函数 ****************/
/********************************************************************************************/
void main()
{
UseSystem();
system("pause");
}
[此贴子已经被作者于2007-2-9 19:38:38编辑过]