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

📄 吴世山1050320103大作业一.cpp

📁 这是一个航空售票系统的C语言程序,主要完成售票定票等系统功能
💻 CPP
字号:
/*
*大作业一
*哈尔滨工业大学
*05级计算机学院信息安全专业
*作者:吴世山 1050320103
*程序作用:设计一个航空售票系统,
*1:飞机基本信息包括:(1)航班号;(2)飞行日期(星期几飞行);(3)目的地;(4)余票;(5)载客容量。
*2:乘客基本信息包括:(1)姓名;(2)身份证号;(3)座位号。
*3:系统功能基本包括:(1)查询功能(包括:按机票查找乘客;按乘客查找机票);(2)订票功能;(3)退票功能。
*
*******优点:添加航班十分方便,只需修改一下MIN,并再添加目的地即可。
*此程序现有12条航班,每条航班有100个座位。
*日期 :2007年4月12日        
*/
#include <iostream>
#include <string.h>
#define MAX 101               //载客容量
#define MIN 12                //航班数量

struct node                   //每个座位所包含的信息
{
	int empty;                //座位是否为空
	char name[20];            //乘客姓名
	char id[20];              //乘客身份证号
	int seat;                 //座位号
};
struct line                   //每条航班所包含的信息
{
	int linenumber;           //航班号
	int day;                  //飞行日期
	char destination[20];     //目的地
	int capacity;             //载客容量
	int left;                 //剩余座位数
	struct node a[MAX];       //座位
};
char* d[]={"","北京", "南京", "上海", "天津", "西安", "香港", "纽约", "巴黎", "伦敦", "柏林", "东京"};//目的地

void initial(struct line *p);          //用于初始化航班的函数
void inquire(struct line *p);          //查询函数
void pbuy(struct line *p);             //订票函数
void reback(struct line *p);           //退票函数
void inqbyid(struct line *p);          //用身份证号查询
void inqbyseat(struct line *p);        //用座位号查询
void inqbyname(struct line *p);        //用姓名常洵
void printnode(struct line *p, int n); //打印座位及相关航班的信息
int find(struct line* p, char* r);

int main(void)
{
	int m=0;
	struct line b[MIN], *p=&b[0];

	initial(p);
	printf("*****请注意根据提示信息输入!*****\n");
	printf("1、查询\n2、订票\n3、退票\n4、退出系统\n");
	scanf("%d", &m);
	getchar();
	do{
		switch(m)                      //按提示进入相应的系统
		{
		case 1:
			inquire(p);                //1查询 
			break;
		case 2:
			pbuy(p);                   //2订票
			break;
		case 3:
			reback(p);                 //3退票
			break;
		case 4:                        //4退出系统
			return 0;
		}
		printf("*****请注意根据提示信息输入!*****\n");
		printf("1、查询\n2、订票\n3、退票\n4、退出系统\n");
		scanf("%d", &m);
		getchar();
	}
	while(m!=4);
	return 0;
}

void inquire(struct line *p)          //查询函数
{
	int n;
	printf("1、按身份证查询\n2、按票查询\n3、按姓名查询\n4、返回上一层\n");
	scanf("%d", &n);
	switch(n)
	{	
	case 1:
		inqbyid(p);
		break;
	case 2:
		inqbyseat(p);
		break;
	case 3:
		inqbyname(p);
	case 4:
		return ;
		break;
	}
	
	return;
}
void pbuy(struct line *p)              //订票函数
{
	int n, i, k=0, l=1;
	char s[20], t[18], *q=&s[0], *r=&t[0];
	printf("请输入您要预定的航班号:\n");
	scanf("%d", &n);
	if(n<=0||n>=MIN)
	{
		printf("无此航班!\n\n");
		return;
	}
	getchar();
	printf("请输入您的姓名:\n");
	gets(q);
	
	printf("请输入您的身份证号:\n");
	gets(r);
	l=find(p, r);
	if(l==0)
	{
		printf("已有此人订票信息!\n*****每人限定一张票!******\n\n");
		return;
	}
	for(i=1;i<MAX;i++)
	{
		if(p[n].a[i].empty==1)
		{
			k=1;
			p[n].a[i].empty=0;         //将空位标志设0
			strcpy(p[n].a[i].name, q); //将姓名、ID等信息输入相应的座位信息中
			strcpy(p[n].a[i].id, r);
			p[n].left--;               //剩余座位减1
			printf("*****订票结果如下*****\n");
			printnode(&p[n], i);       //打印订票结果
		}
		if(k==1)
			break;
	}
	if(k!=1)
		printf("此航班已满!\n\n");
	return ;
}
void reback(struct line *p)            //退票函数
{
	int i, j, k=0;
	char c, s[20], *r=&s[0];
	printf("请输入您的身份证号:\n");
	gets(r);
	for(i=1;i<MIN;i++)
	{
		for(j=1;j<MAX;j++)
		{
			if(memcmp(p[i].a[j].id, r, 18)==0) //查找与该姓名匹配的对象
			{
				k=1;
				printf("*****帐号信息如下:\n");
				printnode(&p[i], j);             //打印该节点,确认是否删除其中信息
				printf("*****确认退票?(y/n)\n");
				c=getchar();
				switch(c)
				{
				case 'y':
					strcpy(p[i].a[j].name, "NULL"); //将其中信息置为原始状态
					strcpy(p[i].a[j].id, "NULL");
					p[i].a[j].empty=1;
					p[i].left++;
					printf("*****该票已删除!*****\n\n");
					break;
				case 'n':
					break;
				}
			}
			if(k==1)
				break;
		}
		if(k==1)
			break;
	}
	if(k!=1)
		printf("没有找到符合要求的对象!\n\n");
	return ;
}
void inqbyid(struct line *p)           //按身份证号查询
{
	int i, j, k;
	char s[18], *q=&s[0], *r;
	struct line *t;
	printf("请输入身份证号码:\n");
	getchar();
	gets(&s[0]);
	for(i=1;i<MIN;i++)
	{
		for(j=1;j<MAX;j++)
		{
			r=p[i].a[j].id;
			k=memcmp(q, r, 18);        //比较匹配的对象
			if(k==0)
			{
				t=&p[i];
				printf("*****查询结果如下*****\n");
				printnode(t, j);       //打印查询结果
				break;
			}
		}
		if(k==0)
			break;
	}
	if(k!=0)
		printf("没有找到符合要求的对象!\n\n");
	return;
}
void inqbyseat(struct line *p)         //按座位查询
{
	int lnum, num, i, k=-1;
	struct line* q;
	printf("请输入您的航班号:\n");
	scanf("%d", &lnum);
	printf("请输入您的座位号:\n");
	scanf("%d", &num);
	for(i=0;i<MAX;i++)
	{
		if(p[lnum].a[i].seat==num)
		{
			q=&p[lnum];                //比较匹配的对象
			printf("*****查询结果如下*****\n");
			printnode(q, i);           //打印查询结果
			k=0;
		}
		if(k==0)
			break;
	}
	return ;
}

void inqbyname(struct line *p)         //按姓名常洵
{
	struct line *t;
	int i, j, k=-1;
	char s[20], *q=&s[0], *r;
	getchar();
	printf("请输入您的姓名:\n");
	gets(q);
	for(i=1;i<MIN;i++)
	{
		for(j=1;j<MAX;j++)
		{
			r=p[i].a[j].name;
			k=memcmp(q, r, 20);        //比较匹配的对象
			if(k==0)
			{
				t=&p[i];
				printf("*****查询结果如下*****\n");
				printnode(t, j);       //打印查询结果
				break;
			}
		}
		if(k==0)
			break;
	}
	if(k!=0)
		printf("没有找到符合要求的对象!\n\n");
	return;
}

void printnode(struct line *p, int n)  //打印座位及相关航班的信息
{
	printf("航班号:%d\n", p->linenumber);
	if(p->day==0)
		printf("日期:星期日\n");
	else
		printf("日期:星期%d\n", p->day);
	printf("目的地:%s\n", &p->destination[0]);
	printf("此航班余票:%d\n", p->left);
	printf("姓名:%s\n", p->a[n].name);
	printf("身份证号:%s\n", p->a[n].id);
	printf("座位号:%d\n\n", p->a[n].seat);
	return;
}

void initial(struct line *p)           //用于初始化航班的函数
{
	int i, j;
	for(i=1;i<MIN;i++)
	{
		p[i].linenumber=i;
		p[i].day=i%7;
		strcpy(p[i].destination, d[i]);
		p[i].capacity=p[i].left=MAX-1;
		for(j=1;j<MAX;j++)
		{
			p[i].a[j].empty=1;        //将座位空标志置为1
			strcpy(p[i].a[j].name, "NULL");//将姓名、ID初始设为NULL
			strcpy(p[i].a[j].id, "NULL");
			p[i].a[j].seat=j;
		}
	}
	return;
}

int find(struct line* p, char* r)
{
	int i, j, k=1;
	for(i=0;i<MIN;i++)
	{
		for(j=0;j<MAX;j++)
		{
			k=memcmp(p[i].a[j].id, r, 18);
			if(k==0)
				return k;
		}
	}
	return k;
}

⌨️ 快捷键说明

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