程序开发===》航空订票系统设计------开发源代码---雏形设计——经典C的完全应用

在这里插入图片描述

在学习了一段时间的数据结构和算法后,我们可以尝试做一个程序雏形,利用C语言来编码,将所学知识挪到应用板块。
航空订票系统

  • 结构体的描述
  • 浏览航线信息
  • 录入信息
  • 订票信息
  • 查询信息
  • 退票信息
  • 修改航班
  • 文件操作

1.结构体的描述 :

typedef struct wat_ros /*等候订票乘客的信息*/
{  char name[20];/*姓名*/
   char phone[15];/*等候订票乘客的联系方式*/
   struct wat_ros *next;
}qnode,*qptr;

typedef struct pqueue
{  qptr front;/*等候替补客户名单域的头指针*/
   qptr rear;/*等候替补客户名单域的属指针*/
}linkqueue;

typedef struct ord_ros
{  char name[20];/*客户姓名*/
   char IDnum[20];/*客户有效证件的编号*/
   char airnum[7];/*航班号*/
   int dpl;/*订票量*/
   char piaohaio[20];//票的编号,由航班号起飞日期此航班订票前的余票量
   struct ord_ros *next;
}Lnode ,*linklist;

typedef struct airline
{   char qdname[20];/*起点站名*/
	char zhname[20];/*终点站名 */
    char air_num[7];/*航班号*/
    char plane_num[10];/*飞机型号*/
    char year[5];
    char month[3];
    char day[3];/*飞行日期*/
	char qhour[3];
	char qminute[3];/*起飞时间*/
	char jhour[3];
	char jminute[3];/*降落时间*/
	float zhekou;/*没有折扣为十折*/
	float price;/*票价*/
    int tkt_amt;/*乘员定额*/
    int tkt_sur;/*余票量*/
    Lnode *order;/*本航班乘客名单域,指向乘客名单链表的头指针*/
    linkqueue *wait;/*本航班等候替补的客户名单域,分别指向排队等候名单队头队尾的指针*/
    struct airline  *next;/*指向下一个结点*/
}lineinfo,*lineair;

2.浏览航线信息:

void Explorer(lineair H) 
{
	lineinfo *p;
	p=H->next;
	printf("航班号 起飞站 终点站 机型 飞行日期    起、降时间   票价  折扣 成员定额 余票量\n");
	while(p)
	{	printf("%s  %s   %s  %s  %s/%s/%s %.2s:%.2s %.2s:%.2s  %5.1f  %3.1f   %d     %d\n",p->air_num,p->qdname,p->zhname,p->plane_num,p->year,p->month,p->day,p->qhour,p->qminute,p->jhour,p->jminute,p->price,p->zhekou,p->tkt_amt,p->tkt_sur);
		p=p->next;
	}
}

3.录入信息:

int Greatelist(lineair&H,int n)   
{ 
  char a;
	int i;
	lineinfo *p;
	if(!(H=(lineair)malloc(sizeof(lineinfo))))
	{
		printf("分配空间出错");
	    a=getchar();
	    return(0);
	}
	H->next=NULL;
	if(!(H->order=(linklist)malloc(sizeof(lineinfo))))
	{
		printf("分配空间出错");
	    a=getchar();
	    return 0;
	}
	H->order->next=NULL;
	if(!(H->wait=(linkqueue*)malloc(sizeof(lineinfo))))
	{
		printf("分配空间出错");
	    a=getchar();
	    return 0;
	}
	H->wait->rear=H->wait->front=NULL;
	printf("\n开始录入航班信息:\n");
	printf("起点 终点 航班号 机型 年   月 日   起降时间 折扣 票价 乘员定额\n");/*起飞时间和降落时间包含时分*/
	for(i=0;i<n;i++)
	{
		if(!(p=(lineair)malloc(sizeof(lineinfo))))
		{ printf("分配空间出错");
	       a=getchar();
	       return 0;
		}
	scanf("%s%s%s%s%s%s%s%s%s%s%s%f%f%d",p->qdname,p->zhname,p->air_num,p->plane_num,p->year,p->month,p->day,p->qhour,p->qminute,p->jhour,p->jminute,&p->zhekou,&p->price,&p->tkt_amt);
		p->tkt_sur=p->tkt_amt;
		if(!(p->order=(linklist)malloc(sizeof(lineinfo))))
		{printf("分配空间出错");
	     a=getchar();
	     return 0;
		}
    	p->order->next=NULL;
    	if(!(p->wait=(linkqueue*)malloc(sizeof(lineinfo))))
		{printf("分配空间出错");
	     a=getchar();
	     return 0;
		}
    	p->wait->rear=p->wait->front=NULL;
		p->next=H->next;
		H->next=p;
	}
	return 1;
}

4.订票信息:

int Dinpiao(lineair H)  
{
	int m,k=0,x,v=0,c=1,d;
    lineinfo *p,*t;
    Lnode *q;
	char a,*b;
    qnode *s;
    char year[5];
    char month[3];
    char day[3];/*飞行日期*/
    char air_num[7];/*航班号*/
	p=H->next;
	t=H->next;
	printf("请输入所定的航班号,票的年、月、日:\n");
	scanf("%s",air_num);
    scanf("%s",year);
	scanf("%s",month);
	scanf("%s",day);
	while(p)
	{
	if(!(strcmp(air_num,p->air_num))&&!(strcmp(year,p->year))&&!(strcmp(month,p->month))&&!(strcmp(day,p->day)))
		{
			c=0;
			if(p->tkt_sur)
			{
			 printf("此航班还有%d张票可订,请输入您要订票的张数:",p->tkt_sur);
			 scanf("%d",&m);
		    	if(m<=p->tkt_sur)
				{
			    	printf("您已成功订到%d张票!\n请输入您的姓名:",m);
				    if(!(q=(linklist)malloc(sizeof(Lnode))))
					{
					   printf("分配空间出错");
					   a=getchar();
					   return 0;
					}
			    	scanf("%s",q->name);
				    printf("请输入您的身份证号码:");
				    scanf("%s",q->IDnum);
					q->dpl=m;
					if(!(b=(char*)malloc(sizeof(char))))
					{
						printf("分配空间出错");
						a=getchar();
						return 0;
					}
					strcpy(q->airnum,p->air_num);
					itoa(p->tkt_sur,b,10);
				    strcpy(q->piaohaio,p->air_num);
				    strcat(q->piaohaio,p->year);
				    strcat(q->piaohaio,p->month);
					strcat(q->piaohaio,p->day);
				    strcat(q->piaohaio,b);
					printf("您所订票的编号:%s",q->piaohaio);
					p->tkt_sur-=m;
			    	q->next=p->order->next;
			    	p->order->next=q;
                    return 1;
				}
		    	else
				{
			    	printf("对不起余票量不够,请选择其他航班!");
			    	k=1;
				}
			}
	    	if(!p->tkt_sur||k==1)
			{
				printf("航班已经满仓,您可以选择以下相关航班:\n");
			    while(t)
				{
			  	if(!(strcmp(t->year,p->year))&&!(strcmp(t->month,p->month))&&!(strcmp(p->qdname,t->qdname))&&!(strcmp(p->zhname,t->zhname))&&p->tkt_sur)
					{
						printf("航班号 机型  飞行日期    起降时间  票价 折扣 余票量\n%s %s  %s/%s/%s   %s:%s   %s:%s %5.1f %3.1f  %d\n ",t->air_num,t->plane_num,t->year,t->month,t->day,t->qhour,t->qminute,t->jhour,t->jminute,t->price,t->zhekou,t->tkt_sur);
					}
				    t=t->next;
				}
				printf("有没有您可以乘坐的航班\t0  没有 \t 非0整数  有\t请选择:");
				scanf("%d",&x);
				if(!x)
				{
					printf("请输入您的姓名、联系方式\n");
					if(!(s=(qptr)malloc(sizeof(qnode))))
					{
						printf("分配空间出错!");
						a=getchar();
						return 0;
					}
					scanf("%s",s->name);
					scanf("%s",s->phone);
					s->next=NULL;
					if(p->wait->front==NULL&&p->wait->rear==NULL) /*等候订票队列为空*/
						p->wait->rear=p->wait->front=s;
					else
					{
						s->next=p->wait->rear->next;
						p->wait->rear->next=s;
						p->wait->rear=s;
					}
					printf("如果有人退票,我们会在第一时间联系您!\n");
					return 0;
				}
				else 
					return Dinpiao(H);
			}
		}
		p=p->next;
	}
	if(c)
	{
		printf("没有您所指定的航班,0 菜单栏  非0数字 重新输入航班号,票的年、月、日\n");
		scanf("%d",&d);
		if(d)
			return Dinpiao(H);
		else
			return 0;
	}
	return 1;
}

5.查询信息:

int Locateair(lineair H)  
{
	int m,k=1,t;
    lineinfo *p;
    char qdname[20];/*起点站名*/
	char zhname[20];/*终点站名*/
    char air_num[7];/*航班号*/
	p=H->next;
	printf("输入0按航班号查询,输入1按起飞抵达城市查询,请输入您的选择:");
	scanf("%d",&m);
	while(m<0||m>1)
	{
		printf("请您重新选择,输入0按航班号查询,输入1按起飞抵达城市查询:");
	    scanf("%d",&m);
	}
	if(m)
	{
		printf("请分别输入起飞抵达城市:\n");
		scanf("%s",qdname);
		scanf("%s",zhname);
		printf("机型 航班号    飞行日期      起降时间   票价 折扣 余票量\n");
		while(p)
		{
			if(!(strcmp(p->qdname,qdname))&&!(strcmp(p->zhname,zhname)))
			{
				printf("%s %s  %s/%s/%s   %.2s:%.2s %.2s:%.2s %5.1f   %3.1f   %d\n ",p->plane_num,p->air_num,p->year,p->month,p->day,p->qhour,p->qminute,p->jhour,p->jminute,p->price,p->zhekou,p->tkt_sur);
				k=0;
			}
			p=p->next;
		}
	}
	else
	{
		printf("请输入要查询的航班号:");
		scanf("%s",air_num);
		while(p)
		{
			if(!(strcmp(p->air_num,air_num)))
			{
				printf("机型 航班号 起飞城市 抵达城市  飞行日期       起降时间 票价 折扣 余票量\n%s %s   %s    %s    %s /%s/%s   %.2s:%.2s %.2s:%.2s  %5.1f  %3.1f %d\n ",p->plane_num,p->air_num,p->qdname,p->zhname,p->year,p->month,p->day,p->qhour,p->qminute,p->jhour,p->jminute,p->price,p->zhekou,p->tkt_sur);
				k=0;
			}
			p=p->next;
		}	
	}
	if(k)
	{
		printf("没有您要查询的航线!\n");
		return 0;
	}
	else
	{
		printf("有没有您要订票的航班!\n");
		do
		{
			printf("1有 0没有 请选择:\n");
			scanf("%d",&t);
		}while(!(t==1)&&!(t==0));
		if(t)
			return	Dinpiao(H);
		else
			return 0;		
	}
}

6.退票信息:

int Tuipiao(lineair H)  
{
	lineinfo *p;
	int m=0,t;
	Lnode *q,*f;
	char b[20];
	scanf("%s",b);
	p=H->next;
	while(p)
	{
		q=p->order->next;
		if(!(strcmp(b,q->piaohaio)))
		{
			m=1;
			p->order->next=q->next;
			t=q->dpl;
			free(q);
			break;
		}
		while(q->next)
		{
			if(!(strcmp(b,q->next->piaohaio)))
			{
				m=1;
				f=q->next;
				t=f->dpl;
				q->next=f->next;
				free(f);
				break;
			}
			q=q->next;
		}
		if(m)
			break;
		p=p->next;
	}
	if(!m)
	{
		printf("对不起没有搜索到您的订单,请重新输入订单编号!");
		Tuipiao(H);
	}
	else
	{
		printf("您已成功退票!\n");
		p->tkt_sur+=t;
		if(p->wait->rear==p->wait->front)
	        return 1;
		else
		{//机场订票系统服务人员马上通知本次航班等候订票乘客
			printf("通知等候订票的乘客,通知成功后按任意键\n");
			getchar();
			return Dinpiao(H);
		}
	}
	return 0;

}

7.修改航班:

int Alter(lineair H,char b[])  
{
	lineinfo *p,*q;
    char year[5];
	char a,s[20];
    char month[3];
    char day[3];/*飞行日期*/
    char air_num[7];/*航班号*/
	int c,i,n,d,r=0;
	printf("请输入密码:\n");
	scanf("%s",s);
	if(strcmp(s,b))
	{
		printf("输入密码错误!");
		return 0;
	}
	do
	{
		printf("1 添加航线 0 对已有的航班信息进行改动(修改和删除),请选择:");
		scanf("%d",&c);
	}while(c!=1&&!(c==0));
	if(c)
	{
		printf("请输入您要添加航班的条数");
		scanf("%d",&n);
		printf("起点 终点 航班号 机型 年   月 日   起降时间 折扣 票价 乘员定额\n");/*起飞时间和降落时间包含时 分*/
		for(i=0;i<n;i++)
		{
		    if(!(p=(lineair)malloc(sizeof(lineinfo))))
			{
		          printf("分配空间出错!");
			      a=getchar();
			      return 0;
			}
	scanf("%s%s%s%s%s%s%s%s%s%s%s%f%f%d",p->qdname,p->zhname,p->air_num,p->plane_num,p->year,p->month,p->day,p->qhour,p->qminute,p->jhour,p->jminute,&p->zhekou,&p->price,&p->tkt_amt);
		    if(!(p->order=(linklist)malloc(sizeof(lineinfo))))
			{
				printf("分配空间出错");
	            a=getchar();
	            return 0;
			}
        	p->order->next=NULL;
    	   if(!(p->wait=(linkqueue*)malloc(sizeof(lineinfo))))
		   {
			   printf("分配空间出错");
	           a=getchar();
	           return 0;
		   }
           p->tkt_sur=p->tkt_amt;
		   p->wait->front=NULL;
		   p->wait->rear=p->wait->front;
		   p->next=H->next;
	       H->next=p;
		}
		printf("已成功添加%d条航线\n",n);
	}
	else
	{
		do
		{
			printf("1 删除航班 0 修改航班信息,请选择:");
			scanf("%d",&d);
		}while(d!=1&&d!=0);
		if(d)
		{
			printf("请输入要删除的航班条数:");
			scanf("%d",&n);
			for(i=1;i<=n;i++)
			{
				printf("请输入第%d条要删除航班的航班号和飞行日期(年、月、日)!\n",i);
				scanf("%s%s%s%s",air_num,year,month,day);
				p=H->next;
				q=H;
				while(p)
				{			if(!(strcmp(air_num,p->air_num))&&!(strcmp(year,p->year))&&!(strcmp(month,p->month))&&!(strcmp(day,p->day)))
						break;
					q=p;
					p=p->next;
				}
				if(!p)
				{
					printf("没有您要删除的航线,请核对后再进行删除!\n");
					r++;
				}
				else
				{
					q->next=p->next;
					printf("已成功删除第%d条航线\n",n);
					free(p);
				}
			}
			if(r<n)
				return 1;
			else
				return 0;
		}
		else
		{
		    printf("请输入要修改航班要修改航班的条数:");
		    scanf("%d",&n);
		    for(i=1;i<=n;i++)
			{
				printf("请输入第%d条要修改航班的航班号和此航班的飞行日期(年、月、日)\n",i);
			    scanf("%s%s%s%s",air_num,year,month,day);
			    p=H->next;
			    while(p)
				{
				    if(!(strcmp(air_num,p->air_num))&&!(strcmp(year,p->year))&&!(strcmp(month,p->month))&&!(strcmp(day,p->day)))
					    break;
				    p=p->next;
				}
			    if(!p)
				{
				     printf("没有您要修改的航线,请核对后再进行修改!\n");
				     r++;
				}
			   else
			   {
				    printf("请输入此修改航班的航班信息!\n");
				    printf("起点 终点 航班号 机型 年、月、日   起降时间   折扣 票价 乘员定额\n");/*起飞时间和降落时间包含时分*/	    scanf("%s%s%s%s%s%s%s%s%s%s%s%f%f%d",p->qdname,p->zhname,p->air_num,p->plane_num,p->year,p->month,p->day,p->qhour,p->qminute,p->jhour,p->jminute,&p->zhekou,&p->price,&p->tkt_amt);
				    printf("您已成功修改了第%d条航线\n",i);
			   }	
			}
			if(r<n)
			    return 1;
			else
				return 0;
		}
	}
	return 0;
}

8.文件操作:

int File(lineair H,int t,int j)   
{
	int a=1,b=1,c=0;
	FILE *fp;
    lineinfo *p;
	Lnode *q;		
	if(t)
	{
		c=1;
		p=H->next;
		fp=fopen("航班信息.txt","w");
		fprintf(fp,"%s%c%s%c%s%c%c%s%c%s%c%s%c%s%c%s%s%c%s%s%c%s%c%s%c%s%c%s%c","航班号",32,"起点",32,"终点",32,32,"机型",32,"年",32,"月",32,"日",32,"起时","分",32,"降时","分",32,"票价",32,"折扣",32,"定员",32,"余票量",32);
		while(p)
		{		fprintf(fp,"%c%s%c%s%c%s%c%s%c%s%c%s%c%s%c%.2s%c%.2s%c%.2s%c%.2s%c%5.1f%c%3.1f%c%c%d%c%c%c%d%c",'\n', p->air_num,32,p->qdname,32,p->zhname,32,p->plane_num,32,p->year,'\\',p->month,'\\',p->day,32,p->qhour,':',p->qminute,32,p->jhour,':',p->jminute,32,p->price,32,p->zhekou,32,32,p->tkt_amt,32,32,32,p->tkt_sur,'\n');
			p=p->next;
		}
		a=ferror(fp);
		fclose(fp); 
	}
	if(j)
	{
		c=1;
		fp=fopen("订票信息.txt","w");
		p=H->next;
		fprintf(fp,"%s%c%s%c%s%c%s%c%s%c","姓名",'\t',"证件号码",'\t',"航班号",32,"订票量",32,"编号",'\n');
		while(p)
		{
			if(p->order->next)
			{
				q=p->order->next;
				while(q)
				{		fprintf(fp,"%c%s%c%s%c%s%c%d%c%s%c",'\n',q->name,32,q->IDnum,32,q->airnum,32,q->dpl,32,q->piaohaio,'\n');
					q=q->next;
				}	
			}
			p=p->next;
		}
		b=ferror(fp);
		fclose(fp); 
	}
	return (a&&b&&c);
}

------》源代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//1.结构体描述:
typedef struct wat_ros /*等候订票乘客的信息*/
{  char name[20];/*姓名*/
   char phone[15];/*等候订票乘客的联系方式*/
   struct wat_ros *next;
}qnode,*qptr;

typedef struct pqueue
{  qptr front;/*等候替补客户名单域的头指针*/
   qptr rear;/*等候替补客户名单域的属指针*/
}linkqueue;

typedef struct ord_ros
{  char name[20];/*客户姓名*/
   char IDnum[20];/*客户有效证件的编号*/
   char airnum[7];/*航班号*/
   int dpl;/*订票量*/
   char piaohaio[20];//票的编号,由航班号起飞日期此航班订票前的余票量
   struct ord_ros *next;
}Lnode ,*linklist;

typedef struct airline
{   char qdname[20];/*起点站名*/
	char zhname[20];/*终点站名 */
    char air_num[7];/*航班号*/
    char plane_num[10];/*飞机型号*/
    char year[5];
    char month[3];
    char day[3];/*飞行日期*/
	char qhour[3];
	char qminute[3];/*起飞时间*/
	char jhour[3];
	char jminute[3];/*降落时间*/
	float zhekou;/*没有折扣为十折*/
	float price;/*票价*/
    int tkt_amt;/*乘员定额*/
    int tkt_sur;/*余票量*/
    Lnode *order;/*本航班乘客名单域,指向乘客名单链表的头指针*/
    linkqueue *wait;/*本航班等候替补的客户名单域,分别指向排队等候名单队头队尾的指针*/
    struct airline  *next;/*指向下一个结点*/
}lineinfo,*lineair;


//2.浏览航线信息:
void Explorer(lineair H) 
{
	lineinfo *p;
	p=H->next;
	printf("航班号 起飞站 终点站 机型 飞行日期    起、降时间   票价  折扣 成员定额 余票量\n");
	while(p)
	{	printf("%s  %s   %s  %s  %s/%s/%s %.2s:%.2s %.2s:%.2s  %5.1f  %3.1f   %d     %d\n",p->air_num,p->qdname,p->zhname,p->plane_num,p->year,p->month,p->day,p->qhour,p->qminute,p->jhour,p->jminute,p->price,p->zhekou,p->tkt_amt,p->tkt_sur);
		p=p->next;
	}
}

//3.录入信息:
int Greatelist(lineair&H,int n)   
{ 
  char a;
	int i;
	lineinfo *p;
	if(!(H=(lineair)malloc(sizeof(lineinfo))))
	{
		printf("分配空间出错");
	    a=getchar();
	    return(0);
	}
	H->next=NULL;
	if(!(H->order=(linklist)malloc(sizeof(lineinfo))))
	{
		printf("分配空间出错");
	    a=getchar();
	    return 0;
	}
	H->order->next=NULL;
	if(!(H->wait=(linkqueue*)malloc(sizeof(lineinfo))))
	{
		printf("分配空间出错");
	    a=getchar();
	    return 0;
	}
	H->wait->rear=H->wait->front=NULL;
	printf("\n开始录入航班信息:\n");
	printf("起点 终点 航班号 机型 年   月 日   起降时间 折扣 票价 乘员定额\n");/*起飞时间和降落时间包含时分*/
	for(i=0;i<n;i++)
	{
		if(!(p=(lineair)malloc(sizeof(lineinfo))))
		{ printf("分配空间出错");
	       a=getchar();
	       return 0;
		}
	scanf("%s%s%s%s%s%s%s%s%s%s%s%f%f%d",p->qdname,p->zhname,p->air_num,p->plane_num,p->year,p->month,p->day,p->qhour,p->qminute,p->jhour,p->jminute,&p->zhekou,&p->price,&p->tkt_amt);
		p->tkt_sur=p->tkt_amt;
		if(!(p->order=(linklist)malloc(sizeof(lineinfo))))
		{printf("分配空间出错");
	     a=getchar();
	     return 0;
		}
    	p->order->next=NULL;
    	if(!(p->wait=(linkqueue*)malloc(sizeof(lineinfo))))
		{printf("分配空间出错");
	     a=getchar();
	     return 0;
		}
    	p->wait->rear=p->wait->front=NULL;
		p->next=H->next;
		H->next=p;
	}
	return 1;
}

//4.订票信息:
int Dinpiao(lineair H)  
{
	int m,k=0,x,v=0,c=1,d;
    lineinfo *p,*t;
    Lnode *q;
	char a,*b;
    qnode *s;
    char year[5];
    char month[3];
    char day[3];/*飞行日期*/
    char air_num[7];/*航班号*/
	p=H->next;
	t=H->next;
	printf("请输入所定的航班号,票的年、月、日:\n");
	scanf("%s",air_num);
    scanf("%s",year);
	scanf("%s",month);
	scanf("%s",day);
	while(p)
	{
	if(!(strcmp(air_num,p->air_num))&&!(strcmp(year,p->year))&&!(strcmp(month,p->month))&&!(strcmp(day,p->day)))
		{
			c=0;
			if(p->tkt_sur)
			{
			 printf("此航班还有%d张票可订,请输入您要订票的张数:",p->tkt_sur);
			 scanf("%d",&m);
		    	if(m<=p->tkt_sur)
				{
			    	printf("您已成功订到%d张票!\n请输入您的姓名:",m);
				    if(!(q=(linklist)malloc(sizeof(Lnode))))
					{
					   printf("分配空间出错");
					   a=getchar();
					   return 0;
					}
			    	scanf("%s",q->name);
				    printf("请输入您的身份证号码:");
				    scanf("%s",q->IDnum);
					q->dpl=m;
					if(!(b=(char*)malloc(sizeof(char))))
					{
						printf("分配空间出错");
						a=getchar();
						return 0;
					}
					strcpy(q->airnum,p->air_num);
					itoa(p->tkt_sur,b,10);
				    strcpy(q->piaohaio,p->air_num);
				    strcat(q->piaohaio,p->year);
				    strcat(q->piaohaio,p->month);
					strcat(q->piaohaio,p->day);
				    strcat(q->piaohaio,b);
					printf("您所订票的编号:%s",q->piaohaio);
					p->tkt_sur-=m;
			    	q->next=p->order->next;
			    	p->order->next=q;
                    return 1;
				}
		    	else
				{
			    	printf("对不起余票量不够,请选择其他航班!");
			    	k=1;
				}
			}
	    	if(!p->tkt_sur||k==1)
			{
				printf("航班已经满仓,您可以选择以下相关航班:\n");
			    while(t)
				{
			  	if(!(strcmp(t->year,p->year))&&!(strcmp(t->month,p->month))&&!(strcmp(p->qdname,t->qdname))&&!(strcmp(p->zhname,t->zhname))&&p->tkt_sur)
					{
						printf("航班号 机型  飞行日期    起降时间  票价 折扣 余票量\n%s %s  %s/%s/%s   %s:%s   %s:%s %5.1f %3.1f  %d\n ",t->air_num,t->plane_num,t->year,t->month,t->day,t->qhour,t->qminute,t->jhour,t->jminute,t->price,t->zhekou,t->tkt_sur);
					}
				    t=t->next;
				}
				printf("有没有您可以乘坐的航班\t0  没有 \t 非0整数  有\t请选择:");
				scanf("%d",&x);
				if(!x)
				{
					printf("请输入您的姓名、联系方式\n");
					if(!(s=(qptr)malloc(sizeof(qnode))))
					{
						printf("分配空间出错!");
						a=getchar();
						return 0;
					}
					scanf("%s",s->name);
					scanf("%s",s->phone);
					s->next=NULL;
					if(p->wait->front==NULL&&p->wait->rear==NULL) /*等候订票队列为空*/
						p->wait->rear=p->wait->front=s;
					else
					{
						s->next=p->wait->rear->next;
						p->wait->rear->next=s;
						p->wait->rear=s;
					}
					printf("如果有人退票,我们会在第一时间联系您!\n");
					return 0;
				}
				else 
					return Dinpiao(H);
			}
		}
		p=p->next;
	}
	if(c)
	{
		printf("没有您所指定的航班,0 菜单栏  非0数字 重新输入航班号,票的年、月、日\n");
		scanf("%d",&d);
		if(d)
			return Dinpiao(H);
		else
			return 0;
	}
	return 1;
}

//5.查询信息:
int Locateair(lineair H)  
{
	int m,k=1,t;
    lineinfo *p;
    char qdname[20];/*起点站名*/
	char zhname[20];/*终点站名*/
    char air_num[7];/*航班号*/
	p=H->next;
	printf("输入0按航班号查询,输入1按起飞抵达城市查询,请输入您的选择:");
	scanf("%d",&m);
	while(m<0||m>1)
	{
		printf("请您重新选择,输入0按航班号查询,输入1按起飞抵达城市查询:");
	    scanf("%d",&m);
	}
	if(m)
	{
		printf("请分别输入起飞抵达城市:\n");
		scanf("%s",qdname);
		scanf("%s",zhname);
		printf("机型 航班号    飞行日期      起降时间   票价 折扣 余票量\n");
		while(p)
		{
			if(!(strcmp(p->qdname,qdname))&&!(strcmp(p->zhname,zhname)))
			{
				printf("%s %s  %s/%s/%s   %.2s:%.2s %.2s:%.2s %5.1f   %3.1f   %d\n ",p->plane_num,p->air_num,p->year,p->month,p->day,p->qhour,p->qminute,p->jhour,p->jminute,p->price,p->zhekou,p->tkt_sur);
				k=0;
			}
			p=p->next;
		}
	}
	else
	{
		printf("请输入要查询的航班号:");
		scanf("%s",air_num);
		while(p)
		{
			if(!(strcmp(p->air_num,air_num)))
			{
				printf("机型 航班号 起飞城市 抵达城市  飞行日期       起降时间 票价 折扣 余票量\n%s %s   %s    %s    %s /%s/%s   %.2s:%.2s %.2s:%.2s  %5.1f  %3.1f %d\n ",p->plane_num,p->air_num,p->qdname,p->zhname,p->year,p->month,p->day,p->qhour,p->qminute,p->jhour,p->jminute,p->price,p->zhekou,p->tkt_sur);
				k=0;
			}
			p=p->next;
		}	
	}
	if(k)
	{
		printf("没有您要查询的航线!\n");
		return 0;
	}
	else
	{
		printf("有没有您要订票的航班!\n");
		do
		{
			printf("1有 0没有 请选择:\n");
			scanf("%d",&t);
		}while(!(t==1)&&!(t==0));
		if(t)
			return	Dinpiao(H);
		else
			return 0;		
	}
}

//6.退票信息:
int Tuipiao(lineair H)  
{
	lineinfo *p;
	int m=0,t;
	Lnode *q,*f;
	char b[20];
	scanf("%s",b);
	p=H->next;
	while(p)
	{
		q=p->order->next;
		if(!(strcmp(b,q->piaohaio)))
		{
			m=1;
			p->order->next=q->next;
			t=q->dpl;
			free(q);
			break;
		}
		while(q->next)
		{
			if(!(strcmp(b,q->next->piaohaio)))
			{
				m=1;
				f=q->next;
				t=f->dpl;
				q->next=f->next;
				free(f);
				break;
			}
			q=q->next;
		}
		if(m)
			break;
		p=p->next;
	}
	if(!m)
	{
		printf("对不起没有搜索到您的订单,请重新输入订单编号!");
		Tuipiao(H);
	}
	else
	{
		printf("您已成功退票!\n");
		p->tkt_sur+=t;
		if(p->wait->rear==p->wait->front)
	        return 1;
		else
		{//机场订票系统服务人员马上通知本次航班等候订票乘客
			printf("通知等候订票的乘客,通知成功后按任意键\n");
			getchar();
			return Dinpiao(H);
		}
	}
	return 0;

}

//7.修改航班:
int Alter(lineair H,char b[])  
{
	lineinfo *p,*q;
    char year[5];
	char a,s[20];
    char month[3];
    char day[3];/*飞行日期*/
    char air_num[7];/*航班号*/
	int c,i,n,d,r=0;
	printf("请输入密码:\n");
	scanf("%s",s);
	if(strcmp(s,b))
	{
		printf("输入密码错误!");
		return 0;
	}
	do
	{
		printf("1 添加航线 0 对已有的航班信息进行改动(修改和删除),请选择:");
		scanf("%d",&c);
	}while(c!=1&&!(c==0));
	if(c)
	{
		printf("请输入您要添加航班的条数");
		scanf("%d",&n);
		printf("起点 终点 航班号 机型 年   月 日   起降时间 折扣 票价 乘员定额\n");/*起飞时间和降落时间包含时 分*/
		for(i=0;i<n;i++)
		{
		    if(!(p=(lineair)malloc(sizeof(lineinfo))))
			{
		          printf("分配空间出错!");
			      a=getchar();
			      return 0;
			}
	scanf("%s%s%s%s%s%s%s%s%s%s%s%f%f%d",p->qdname,p->zhname,p->air_num,p->plane_num,p->year,p->month,p->day,p->qhour,p->qminute,p->jhour,p->jminute,&p->zhekou,&p->price,&p->tkt_amt);
		    if(!(p->order=(linklist)malloc(sizeof(lineinfo))))
			{
				printf("分配空间出错");
	            a=getchar();
	            return 0;
			}
        	p->order->next=NULL;
    	   if(!(p->wait=(linkqueue*)malloc(sizeof(lineinfo))))
		   {
			   printf("分配空间出错");
	           a=getchar();
	           return 0;
		   }
           p->tkt_sur=p->tkt_amt;
		   p->wait->front=NULL;
		   p->wait->rear=p->wait->front;
		   p->next=H->next;
	       H->next=p;
		}
		printf("已成功添加%d条航线\n",n);
	}
	else
	{
		do
		{
			printf("1 删除航班 0 修改航班信息,请选择:");
			scanf("%d",&d);
		}while(d!=1&&d!=0);
		if(d)
		{
			printf("请输入要删除的航班条数:");
			scanf("%d",&n);
			for(i=1;i<=n;i++)
			{
				printf("请输入第%d条要删除航班的航班号和飞行日期(年、月、日)!\n",i);
				scanf("%s%s%s%s",air_num,year,month,day);
				p=H->next;
				q=H;
				while(p)
				{			if(!(strcmp(air_num,p->air_num))&&!(strcmp(year,p->year))&&!(strcmp(month,p->month))&&!(strcmp(day,p->day)))
						break;
					q=p;
					p=p->next;
				}
				if(!p)
				{
					printf("没有您要删除的航线,请核对后再进行删除!\n");
					r++;
				}
				else
				{
					q->next=p->next;
					printf("已成功删除第%d条航线\n",n);
					free(p);
				}
			}
			if(r<n)
				return 1;
			else
				return 0;
		}
		else
		{
		    printf("请输入要修改航班要修改航班的条数:");
		    scanf("%d",&n);
		    for(i=1;i<=n;i++)
			{
				printf("请输入第%d条要修改航班的航班号和此航班的飞行日期(年、月、日)\n",i);
			    scanf("%s%s%s%s",air_num,year,month,day);
			    p=H->next;
			    while(p)
				{
				    if(!(strcmp(air_num,p->air_num))&&!(strcmp(year,p->year))&&!(strcmp(month,p->month))&&!(strcmp(day,p->day)))
					    break;
				    p=p->next;
				}
			    if(!p)
				{
				     printf("没有您要修改的航线,请核对后再进行修改!\n");
				     r++;
				}
			   else
			   {
				    printf("请输入此修改航班的航班信息!\n");
				    printf("起点 终点 航班号 机型 年、月、日   起降时间   折扣 票价 乘员定额\n");/*起飞时间和降落时间包含时分*/	    scanf("%s%s%s%s%s%s%s%s%s%s%s%f%f%d",p->qdname,p->zhname,p->air_num,p->plane_num,p->year,p->month,p->day,p->qhour,p->qminute,p->jhour,p->jminute,&p->zhekou,&p->price,&p->tkt_amt);
				    printf("您已成功修改了第%d条航线\n",i);
			   }	
			}
			if(r<n)
			    return 1;
			else
				return 0;
		}
	}
	return 0;
}

//8.文件操作:
int File(lineair H,int t,int j)   
{
	int a=1,b=1,c=0;
	FILE *fp;
    lineinfo *p;
	Lnode *q;		
	if(t)
	{
		c=1;
		p=H->next;
		fp=fopen("航班信息.txt","w");
		fprintf(fp,"%s%c%s%c%s%c%c%s%c%s%c%s%c%s%c%s%s%c%s%s%c%s%c%s%c%s%c%s%c","航班号",32,"起点",32,"终点",32,32,"机型",32,"年",32,"月",32,"日",32,"起时","分",32,"降时","分",32,"票价",32,"折扣",32,"定员",32,"余票量",32);
		while(p)
		{		fprintf(fp,"%c%s%c%s%c%s%c%s%c%s%c%s%c%s%c%.2s%c%.2s%c%.2s%c%.2s%c%5.1f%c%3.1f%c%c%d%c%c%c%d%c",'\n', p->air_num,32,p->qdname,32,p->zhname,32,p->plane_num,32,p->year,'\\',p->month,'\\',p->day,32,p->qhour,':',p->qminute,32,p->jhour,':',p->jminute,32,p->price,32,p->zhekou,32,32,p->tkt_amt,32,32,32,p->tkt_sur,'\n');
			p=p->next;
		}
		a=ferror(fp);
		fclose(fp); 
	}
	if(j)
	{
		c=1;
		fp=fopen("订票信息.txt","w");
		p=H->next;
		fprintf(fp,"%s%c%s%c%s%c%s%c%s%c","姓名",'\t',"证件号码",'\t',"航班号",32,"订票量",32,"编号",'\n');
		while(p)
		{
			if(p->order->next)
			{
				q=p->order->next;
				while(q)
				{		fprintf(fp,"%c%s%c%s%c%s%c%d%c%s%c",'\n',q->name,32,q->IDnum,32,q->airnum,32,q->dpl,32,q->piaohaio,'\n');
					q=q->next;
				}	
			}
			p=p->next;
		}
		b=ferror(fp);
		fclose(fp); 
	}
	return (a&&b&&c);
}

void main()
{ 
	int i,n,j,k,m=0,t=1;
	lineair H;
	char a[20];
	printf("请设置管理员密码:\n");
	scanf("%s",a);
	printf("\n          欢迎进入订票系统\n");
	do
	{
		j=0;
		k=0;
		printf("\n============订票系统菜单=============\n");
        printf("*************************************\n");
        printf("***********1.录入航线信息************\n");
        printf("***********2.浏览航线信**************\n");
        printf("***********3.修改航班信息************\n");
        printf("***********4.查询航线****************\n");
        printf("***********5.办理订票业务************\n");
        printf("***********6.办理退票业务************\n");
        printf("***********0.退出系统****************\n");
        printf("*************************************\n");
        printf("请在0-6中选择您需要的服务按回车键结束:\n\n");
		scanf("%d",&i);
		switch(i)
		{case 1:{
			        printf("请输入要录入航线的条数:");
			        scanf("%d",&n);
			        if(Greatelist(H, n)) 
			           m=1;
				    if(File(H,m,j))
						printf("航班信息数据存储出错,请检查程序后重新录入信息!\n");
					break;
				}
		 case 2:
			{
				if(m)
					Explorer(H);
				else
					printf("请录入航班信息!\n");
				break;
			}
         case 3:
			 {
				 if(m)
					 k=Alter(H,a);
				 else
					 printf("请录入航班信息!\n");
				if(File(H,k,j))
					 printf("航班信息数据存储出错,请检查程序后重新录入信息!\n");
				 break;
			 }
         case 4:
			 {
				 if(m)
					 j=Locateair(H);
				 else
					 printf("请录入航班信息!\n");
				 if(File(H,m,j))
					 printf("数据存储出错,请检查程序!\n");
				 break;
			 }
         case 5:
			 {
				 if(m)
					 j=Dinpiao(H);
				 else
					 printf("请录入航班信息!\n");
				 if(File(H,m,j))
					 printf("数据存储出错,请检查程序!\n");
				 break;
			 }
         case 6:
			 {
				 if(m)
				 {
					 printf("请输入您所退票的订单编号:");
					 j=Tuipiao(H);
				 }
				 else
					 printf("请录入航班信息!\n");
				 if(File(H,m,j))
					 printf("数据存储出错,请检查程序!\n");
				 break;
			 }
         case 0:
			 {
				 t=0;
				 break;
			 }
		 default:printf("对不起,没有您需要的服务,请重新选择!\n");
		}
	}while(t);
	printf("\n谢谢使用本系统,欢迎您下次再次使用!\n");
	//free(H);
	return ;
}

本系统的设计是基于基础原理性知识的应用,只需要在“VC2010”软件中的源文件处编译即可,不需要其他任何工程软件,甚至不需要另外添加头文件。此系统实用功能并不是十分强大,但作为刚接触计算机理论基础的朋友们来说这绝对是一个非常好的实践项目。

实验效果图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值