自己写了一个小东西,有很多不足,欢迎大家指点,批评....
您的意见是我的动力..
#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编辑过]

 
											





 
	    
 
										
					
	
 
											 
										
					
	
