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

📄 dingpiao.cpp

📁 航空订票系统的c++源码。是数据结构航空客运订票系统的源码
💻 CPP
字号:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#define MAX 50
typedef struct LNode
{
	char name[10];
	int number;
	struct LNode *next;
}LNode;
typedef struct
{
	LNode *head;
}List;
typedef struct QNode
{
	char name[10];
	int number;
	struct QNode *next;
}QNode;
typedef struct
{
	QNode *front;
	QNode *rear;
}Queue;
typedef struct
{
	int tticket;
	int lticket;
	List list;
    Queue queue;
}Ticket;
typedef struct
{
	char destination[10];
	char flight[6];
	int plane;
	char week[10];
	char time[11];
	Ticket info;
}Line,LineList[MAX];

void print(LineList &L,int i)
{
	printf(" 终点\t\t航班号\t飞机号\t 星期\t\t   时间\t\t     余票量\n");
	printf("%s\t\t%s\t %d\t%s\t\t%s\t\t%d\n",L[i].destination,L[i].flight,L[i].plane,L[i].week,L[i].time,L[i].info.lticket);
}
void printlist(LineList &L,int i,int n)
{
	LNode *p;
	p=L[i].info.list.head;
	print(L,i);
	printf("\n订票信息:\n");
	printf("姓名\t票数\n");
	if(p==NULL)
		printf("暂无订票信息\n");
	else
    	while(p!=NULL)
		{
    		printf("%s\t %d\n",p->name,p->number);
    		p=p->next;
		}
}
void printqueue(LineList &L,int i,int n)
{
	QNode *q;
	q=L[i].info.queue.front;
	print(L,i);
	printf("\n预约信息:\n");
	printf("姓名\t票数\n");
	if(q==NULL)
		printf("暂无预约信息\n\n");
	else
    	while(q!=L[i].info.queue.rear->next)
		{   
    		printf("%s\t%d\n",q->name,q->number);
    		q=q->next;
		}
}

void search(LineList &L,int n)
{
	char des[10];
	int i;
	printf("输入终点:");
	scanf("%s",des);
	system("cls");
	for(i=0;i<n;i++)
		if(!strcmp(L[i].destination,des))
		{
			print(L,i);
			break;
		}
	if(i==n)
		printf("没有相关终点信息!\n");
}
void schedule(LineList &L,int i,int n)
{
	char nam[10];
	int num;
	QNode *q1,*q2;
	system("cls");
	printqueue(L,i,n);
	printf("预约\n");
	printf("输入姓名和票数:");
	scanf("%s%d",nam,&num);
	q1=(QNode *)malloc(sizeof(QNode));
	strcpy(q1->name,nam);
	q1->number=num;
	q1->next=NULL;
	q2=L[i].info.queue.front;
	if(q2==NULL)
	{
		L[i].info.queue.front=q1;
		L[i].info.queue.rear=q1;
	}
	else
	{
		L[i].info.queue.rear->next=q1;
		L[i].info.queue.rear=q1;
	}
	system("cls");
	printqueue(L,i,n);
	printf("\n预约成功。\n");
}
void book(LineList &L,int n)
{
	char des[10],nam[10];
	int num;
	int i;
	char c;
	LNode *p1,*p2;
	system("cls");
	printf("\t\t\t\t所有航班信息\n");
	printf(" 终点\t\t航班号\t飞机号\t 星期\t\t   时间\t\t     余票量\n");
	for(i=0;i<n;i++)
		printf("%s\t\t%s\t %d\t%s\t\t%s\t\t%d\n",L[i].destination,L[i].flight,L[i].plane,L[i].week,L[i].time,L[i].info.lticket);
	printf("\n输入终点:");
	scanf("%s",des);
	system("cls");
	for(i=0;i<n;i++)
		if(!strcmp(L[i].destination,des))
			break;
	if(i==n)
	{
		printf("没有相关终点信息!\n");
		return;
	}
	printlist(L,i,n);
	printqueue(L,i,n);
	if(L[i].info.lticket!=0)
	{
		printf("订票\n");
		printf("输入姓名和票数:");
		scanf("%s%d",nam,&num);
		while(num>L[i].info.lticket)
		{
			printf("票数超过余票,是否转入预约(Y/N):");
            scanf("\n%c",&c);
			if(c=='y')
			{
				schedule(L,i,n);
				return;
			}
			else
			{
				printf("请重新输入票数:");
				scanf("%d",&num);
			}
		}
		L[i].info.lticket-=num;
		p1=(LNode *)malloc(sizeof(LNode));
		strcpy(p1->name,nam);
		p1->number=num;
		p1->next=NULL;
		p2=L[i].info.list.head;
		if(p2==NULL)
			L[i].info.list.head=p1;
		else
		{
			while(p2->next!=NULL)
				p2=p2->next;
			p2->next=p1;
		}
		system("cls");
		printlist(L,i,n);
		printf("\n以订好,祝您旅途愉快。\n");
	}
	else
	{
		printf("余票数为0,是否转入预约(Y/N):");
		scanf("\n%c",&c);
		if(c=='y')
		{
		    schedule(L,i,n);
			return;
		}
	}
}
void quit(LineList &L,int n)
{
	char des[10],nam[10];
	int num;
	int i;
	FILE *fp;
	LNode *p1,*p2;
	QNode *q1,*q2;
	system("cls");
	if((fp=fopen("yuyue.txt","a"))==NULL)
	{
		printf("cannot open file!");
		exit(0);
	}
	printf("\n\n输入终点:");
	scanf("%s",des);
	for(i=0;i<n&&strcmp(L[i].destination,des);i++){}
	if(i==n)
	{
		printf("没有相关信息!\n");
		exit(0);
	}
	printlist(L,i,n);
	printqueue(L,i,n);
	printf("输入姓名:");
	scanf("%s",nam);
	p1=L[i].info.list.head;
	while(p1!=NULL)
		if(strcmp(p1->name,nam))
		{
			p2=p1;
			p1=p1->next;
		}
		else
		{
			printf("姓名\t票数\n");
			printf("%s\t%d\n",p1->name,p1->number);
			printf("输入退票数量:");
			scanf("%d",&num);
			while(num>p1->number)
			{
				printf("错误,重新输入:");
				scanf("%d",&num);
			}
			if(num==p1->number)
				if(p1==L[i].info.list.head)
					L[i].info.list.head=p1->next;
				else
				    p2->next=p1->next;
			else
				p1->number-=num;
			L[i].info.lticket+=num;
			q1=L[i].info.queue.front;
    		while(q1!=NULL)
			{
    			if(L[i].info.lticket>=q1->number)
				{
   					L[i].info.lticket-=q1->number;
   					if(q1==L[i].info.queue.front)
					{
   					    L[i].info.queue.front=q1->next;
   					    if(q1==L[i].info.queue.rear)
   						    L[i].info.queue.rear=NULL;
					}
   					else
					{
        				q2->next=q1->next;
    					if(q1==L[i].info.queue.rear)
    						L[i].info.queue.rear=q2;
					}
    				p1=L[i].info.list.head;
    				while(p1->next!=NULL)
   						p1=p1->next;
    				p2=(LNode *)malloc(sizeof(LNode));
   					p2->next=NULL;
   					strcpy(p2->name,q1->name);
   					p2->number=q1->number;
   					p1->next=p2;
   					q1=q1->next;
				}
   				else
				{
    				q2=q1;
    			    q1=q1->next;
				}
				if(L[i].info.lticket==0)
    				break;
			}
   			system("cls");
			printlist(L,i,n);
           	printqueue(L,i,n);
    		printf("\n退订完毕。\n");
   			fclose(fp);
   			break;
		}
	if(p1==NULL)
		printf("没有订票信息!\n");
}
void makelist(LineList &L,int *n)
{
	int a,i,j,t,r,l;
	LNode *p1,*p2;
	QNode *q1,*q2;
	int todayweek,weekday;
	char tdate[11]={"2008.01.08"};
	todayweek=4;
	char week[8][11]={"0","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
	FILE *fp1,*fp2;
	if((fp1=fopen("data.txt","r"))==NULL)
	{
		printf("cannot open file!");
		exit(0);
	}
	fscanf(fp1,"%s%s%d%d\n",L[*n].destination,&L[*n].flight,&L[*n].plane,&weekday);
	strcpy(L[*n].time,tdate);
	a=weekday-todayweek;
	if(a>=0)
		L[*n].time[9]=L[*n].time[9]+a;
	else
		L[*n].time[9]=L[*n].time[9]+a+7;
	if(L[*n].time[9]>'9')
	{
		L[*n].time[9]=L[*n].time[9]-10;
		L[*n].time[8]=L[*n].time[8]+1;
	}
	strcpy(L[*n].week,week[weekday]);
	L[*n].info.list.head=NULL;
	L[*n].info.queue.front=NULL;
	L[*n].info.queue.rear=NULL;
	while(L[*n].plane!=0)
	{
		*n=*n+1;
		fscanf(fp1,"%s%s%d%d\n",L[*n].destination,L[*n].flight,&L[*n].plane,&weekday);
		strcpy(L[*n].time,tdate);
		a=weekday-todayweek;
	    if(a>=0)
			L[*n].time[9]=L[*n].time[9]+a;
		else
			L[*n].time[9]=L[*n].time[9]+a+7;
	    if(L[*n].time[9]>'9')
		{
			L[*n].time[9]=L[*n].time[9]-10;
			L[*n].time[8]=L[*n].time[8]+1;
		}
		strcpy(L[*n].week,week[weekday]);
		L[*n].info.list.head=NULL;
		L[*n].info.queue.front=NULL;
		L[*n].info.queue.rear=NULL;
	}
	fclose(fp1);
	if((fp2=fopen("name.txt","r"))==NULL)
	{
		printf("cannot open file!");
		exit(0);
	}
	for(i=0;i<*n;i++)
	{
		r=rand();
		while(r<20||r>35)
			r=rand();
		L[i].info.tticket=r;
		r=rand()%2;
		if(r==0)
			L[i].info.lticket=0;
		else
		{
		    t=rand();
		    while(t<=0||t>8)
			    t=rand();
			L[i].info.lticket=r+t;
		}
		l=L[i].info.tticket-L[i].info.lticket;
		r=rand();
		while(r<20||r>50)
			r=rand();
		fseek(fp2,r,0);
		while(l>0)
		{
			p1=(LNode *)malloc(sizeof(LNode));
			r=rand()%5;
			while(r==0||l-r<0)
				r=rand()%5;
			l=l-r;
			p1->number=r;
			p1->next=NULL;
			r=rand()%8;
			while(r<5)
				r=rand()%8;
			fgets(p1->name,r,fp2);
			if(L[i].info.list.head==NULL)
			{
				L[i].info.list.head=p1;
				p2=p1;
			}
			else
			{
				p2->next=p1;
				p2=p1;
			}
		}
	}
	for(i=0;i<*n;i++)
		if(L[i].info.lticket==0)
		{
			t=rand()%13;
			while(t<5)
				t=rand()%13;
			for(j=0;j<t;j++)
			{
			    r=rand();
    		    while(r<20||r>50)
    			    r=rand();
            	fseek(fp2,r,0);
    			q1=(QNode *)malloc(sizeof(QNode));
    			r=rand()%5;
    			while(r==0)
    				r=rand()%5;
    			q1->number=r;
    			q1->next=NULL;
    			r=rand()%8;
    			while(r<5)
    				r=rand()%8;
    			fgets(q1->name,r,fp2);
    			if(L[i].info.queue.front==NULL)
				{
    				L[i].info.queue.front=q1;
    				q2=q1;
    				L[i].info.queue.rear=q1;
				}
    		    else
				{
    				q2->next=q1;
    		    	q2=q1;
    		    	L[i].info.queue.rear=q2;
				}
			}
		}
	fclose(fp2);
}
void menu()
{
	printf("航空订票系统\n");
	printf("1: 查询航线\n");
	printf("2: 订票业务\n");
	printf("3: 退票业务\n");
	printf("0:   退出\n");
	printf(" 输入操作:");
}
void main()
{
	LineList L;
	int n=0,s;
	makelist(L,&n);
	menu();
	scanf("%d",&s);
	while(s!=0)
	{
		switch(s)
		{
		case 1: search(L,n);break;
		case 2: book(L,n);break;
		case 3: quit(L,n);break;
		}
		printf("\n\n\n");
		menu();
		scanf("%d",&s);
	}
}

⌨️ 快捷键说明

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