⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shuilin.txt

📁 这是飞机的订票与退票系统
💻 TXT
字号:
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#include"iostream"

#define MaxNode 100
#define charl 100
#define MaxContainf 100
int m=2;//航班的次数 

typedef struct TypeTime
{
    int hour;
    int minute;
    int TimeLong;
}TypeTime;

typedef struct Passenger
{
    char name[charl];
    int TicketNum;  
    struct Passenger *next;
}Passenger;

typedef struct TypeFight
{
    TypeTime StartTime;
    TypeTime EndTime;
    int MaxContain;
    int ReadyContain;
    Passenger *head;
    Passenger *last;   
}TypeFight;

typedef struct TypePlane
{
    char ID[charl];
    char StartPlace[charl];
    char EndPlace[charl];
    int PlaneNum;
    TypeFight PlaneFight[MaxNode];    
}TypePlane;
TypePlane Plane[MaxNode];

void print1()
{       printf("*******************MENU*********************\n");
        printf("      定票  (select A)\n");
	    printf("      退票  (select B)\n");
	    printf("      退出  (select C)\n");
        printf("*************************************************\n");
}

int select()
{
int k;
 char a;
 do
{printf("Please select:");
 scanf("%c",&a);
if(a>='A'&&a<='C')
 a=a+32;
 }while((a>='A'&&a<='C'||a>='a'&&a<='c')!=1);
switch(a)
{  case 'a':k=1;break;
   case 'b':k=2;break;
   case 'c':k=3;break;
  
 }
return(k);
}

void Input()
{
    //初始输入输入 
    FILE *fp;
    int i, j;
    //freopen("outt.txt", "w", stdout);
    fp = fopen("plane.txt", "r");
    fscanf(fp, "%d", &m);
    printf("m = %d\n", m);
    for(i = 0;i < m;i++){
        fscanf(fp, "%s%s%s%d", Plane[i].StartPlace,Plane[i].EndPlace,
            Plane[i].ID, &Plane[i].PlaneNum);
        printf("%s %s\n%s\n%d\n", Plane[i].StartPlace, Plane[i].EndPlace,
            Plane[i].ID, Plane[i].PlaneNum); 
        for(j = 0;j < Plane[i].PlaneNum;j++)
          {fscanf(fp, "%d:%d", &Plane[i].PlaneFight[j].StartTime.hour,
                &Plane[i].PlaneFight[j].StartTime.minute);
            fscanf(fp, "%d:%d", &Plane[i].PlaneFight[j].EndTime.hour,
                &Plane[i].PlaneFight[j].EndTime.minute);
            
            printf("%d:%d ", Plane[i].PlaneFight[j].StartTime.hour,
                Plane[i].PlaneFight[j].StartTime.minute);
            printf("%d:%d\n", Plane[i].PlaneFight[j].EndTime.hour,
                Plane[i].PlaneFight[j].EndTime.minute);
            
            
            Plane[i].PlaneFight[j].MaxContain = MaxContainf;
            Plane[i].PlaneFight[j].ReadyContain = 0;
            Plane[i].PlaneFight[j].StartTime.TimeLong =  
                Plane[i].PlaneFight[j].StartTime.hour * 60 + 
                Plane[i].PlaneFight[j].StartTime.minute;
            Plane[i].PlaneFight[j].EndTime.TimeLong =  
                Plane[i].PlaneFight[j].EndTime.hour * 60 + 
                Plane[i].PlaneFight[j].EndTime.minute;   
           Plane[i].PlaneFight[j].head = (Passenger *)malloc(sizeof(Passenger));
            Plane[i].PlaneFight[j].head->next = NULL;    
            Plane[i].PlaneFight[j].last = Plane[i].PlaneFight[j].head;        
        }        
    }  
    fclose(fp);
}
int BookTicket()
{
    char ID[charl];
    char name[charl];
    TypeTime BeforeTime;
    int TimeLong, Remain;
    int i, j, TicketNum;
    int flag = 0;
    int n;
    Passenger *p, *s, *t;
    while(1)
   {
        system("cls");
        printf("请输入你要都买的航班的ID。\n");
        scanf("%s", ID);    
        for(i = 0;i < m;i++)
      {
            if(strcmp(Plane[i].ID, ID) == 0)break;
        } 
        if(i >= m) return 0; //找不到你要查找的ID
        printf("起飞地点:%s\n", Plane[i].StartPlace);
        printf("降落地点:%s\n", Plane[i].EndPlace);
        printf("\n\n");
        printf("1.继续\n");
        printf("2.重新输入ID\n");
        scanf("%d", &n);
        if(n == 1)break;
    }
    printf("请输入你要购买几点后的机票?\n"); 
    scanf("%d:%d", &BeforeTime.hour, &BeforeTime.minute);
    TimeLong = BeforeTime.hour * 60 + BeforeTime.minute;
    printf("请输入你要购买多少张票?\n");
    scanf("%d", &TicketNum);
    for(j = 0;j < Plane[i].PlaneNum;j++)
{
        Remain = Plane[i].PlaneFight[j].MaxContain - Plane[i].PlaneFight[j].ReadyContain;
        //printf("%d %d\n", Remain, TimeLong);
        if(Plane[i].PlaneFight[j].StartTime.TimeLong >= TimeLong  
            && TicketNum <= Remain)
     {
            //订票成功 
            printf("你可以购买此票\n");
            printf("起飞时间:%d:%d\n", Plane[i].PlaneFight[j].StartTime.hour, 
                Plane[i].PlaneFight[j].StartTime.minute);
            printf("降落时间:%d:%d\n", Plane[i].PlaneFight[j].EndTime.hour, 
                Plane[i].PlaneFight[j].EndTime.minute);
            Plane[i].PlaneFight[j].ReadyContain += TicketNum;
            //加入乘客对队列,按姓氏首字母顺序保存 
            printf("请输入你的姓名:");
            scanf("%s", name);
            printf("购买成功!\n");
            p = Plane[i].PlaneFight[j].head->next;
            s = Plane[i].PlaneFight[j].head;// 父节点 
            while(p != NULL)
        {
                if(strcmp(name, p->name) == 1)
             {
                    s = p;
                    p = p->next;
                }
                else break;
            }
            t = (Passenger *)malloc(sizeof(Passenger));
            strcpy(t->name, name);
            t->TicketNum = TicketNum;
            t->next = p;
            s->next = t;  
            flag = 1;
            break;           
        }
    }
    if(flag == 0) printf("对不起你所找的航班时间已过,请明天再购买\n");
    system("pause");
    return 1;
}

void CancelTicket()
{
    char ID[charl];
    char name[charl];
    int TicketNum;
    int flag = 0;
    int i, j;
    int n;
    Passenger *p, *s;
    while(1){
        system("cls");
        printf("请输入你要退票的ID.\n");
        scanf("%s", ID);
        for(i = 0;i < m;i++){
            if(strcmp(ID, Plane[i].ID) == 0)break;
        }
        if(i >= m){
            printf("没有你订购的航班\n");
            printf("1.重新输入\n"); 
            printf("2.退出退票");
            scanf("%d", &n); 
            if(n == 2) return;
        }
        else break;
    }
    printf("请输入你的名字。\n");
    scanf("%s", name);
    
    
    
    for(j = 0;j < Plane[i].PlaneNum;j++){
        p = Plane[i].PlaneFight[j].head->next;
        s = Plane[i].PlaneFight[j].head;//父节点 
        while(p != NULL){
            
            if(strcmp(name, p->name) == 0){
                //有这个人 
                printf("请输入你要退的票的数量。\n");
                scanf("%d", &TicketNum);
                if(TicketNum > p->TicketNum){
                    printf("对不起,你退票数大于你购买的机票,不能退票\n");
                }
                else{ 
                    //可以退票 
                    p->TicketNum -= TicketNum;
                    if(p->TicketNum <= 0){
                        s->next = s->next->next;  
                        free(p);
                    } 
                    printf("退票成功\n");
                    system("pause");
                }
                flag = 1;
                break;
            }
            p = p->next;
        }
        if(flag == 1) break;
    }
    if(flag == 0)printf("查无此人\n");
}
void main()
{int flag;
Input();
system("cls");
loop2:print1();
flag=select(); 
if(flag==1) 
{ 
BookTicket();    
goto loop2;
} 
if(flag==2) 
{ 
CancelTicket();   
goto loop2;
} 
if(flag==3) 
exit(0);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -