C语言作业——飞机订票系统设计

飞机订票系统设计

题目

飞机订票系统设计

功能:

(1)本飞机共有80个坐位,分20排, 每排4个位子。编号为A, B,C, D。如10D表示10 排D座。A和D靠窗,19到20排为吸烟区。定上票的乘客需给出姓名和身份证号,最后要打印出乘客清单。

(2)订票:分为自主订票和系统自动订票;前10排比后10排价位高。自主订票:显示出所有未售出的位置,供用户选择。系统自动订票:用户选择低价位还是高价位,系统自动分配相应的位置。

(3)保存:将相关数据写入txt文件,便于存、取操作。进一步要求:每次登录时读取上次保存在txt文件中的订票记录。

结果图

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

实现代码

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

struct Plane
{
    
    
	int p[20][4];//标记座位是否被购买 
	char  A[20];//座位号 
	char  B[20];//座位号 
	char  C[20];//座位号 
	char  D[20];//座位号 
};

Plane plane1;

void Chushihua()//初始化原始座位表 
{
    
    
	int i, j;
	char ch,n,name[30],id[25];
	for (i=0;i<20;i++)
		for (j=0;j<4;j++)
			plane1.p[i][j] = false; // 初始化所有位置为空
	
    FILE *p = fopen("xinxi.txt", "w");	//存储座位表 
    FILE *p2 = fopen("xinxi2.txt", "w");//0对应座位还在,1对应座位已出售 
    if(p2 == NULL)
    {
    
    
        printf("open error!\n");
    } 
    if(p == NULL)
    {
    
    
        printf("open error!\n");
    }   
	for (i=0;i<20;i++)
	{
    
    
		for (j=0;j<4;j++)
		{
    
    
			if (plane1.p[i][j] == false)
			{
    
    
				char a[100];
				sprintf(a,"%d",i+1); 
				fputs(a,p);
				fputc(j+65,p);
				fputs("\t",p);
				fputs("0",p2);
				fputs("\t",p2);
			}	
			else 
			{
    
    
				fputs("  \t",p);
				fputs("  \t",p2);
			}
		}
		fputs("\n",p);
		fputs("\n",p2);
	}
    fclose(p);
    fclose(p2);
    remove("yonghuxingxi.txt");
}

void Self_Order()//自主订票
{
    
    
	printf("\t\t========自主订票=======\t\t\n\n");
	printf("\t\t现有如下空位:\t\t\n\n");
				
	FILE *fp = fopen("xinxi.txt","r+");//打开文件 
    FILE *p = fopen("xinxi2.txt", "r");
	if(fp == NULL)
	{
    
    
		printf("read error!\n");
	}
	if(p == NULL)
	{
    
    
		printf("read error!\n");
	}
	int i = 0;
	char buf[999];//定义缓冲区,用于暂时存储数据 
	char buf1[999];//定义缓冲区,用于暂时存储数据 
	while(fgets(buf, 100, fp) != NULL)
	{
    
    
		fgets(buf1, 100, p);
		sscanf(buf1,"%d%d%d%d", &plane1.p[i][0], &plane1.p[i][1], &plane1.p[i][2], &plane1.p[i][3]);
		sscanf(buf,"%s%s%s%s", &plane1.A, &plane1.B, &plane1.C, &plane1.D);
		printf("窗\t");
		if(plane1.p[i][0] == 0)
		{
    
    
			printf("\t%s",plane1.A);
		} 
		else
		{
    
    
			printf("\t");
		}
		if(plane1.p[i][1] == 0)
		{
    
    
			printf("\t%s",plane1.B);
		} 
		else
		{
    
    
			printf("\t");
		}
		if(plane1.p[i][2] == 0)
		{
    
    
			printf("\t%s",plane1.C);
		} 
		else
		{
    
    
			printf("\t");
		}
		if(plane1.p[i][3] == 0)
		{
    
    
			printf("\t%s",plane1.D);
		} 
		else
		{
    
    
			printf("\t");
		}
		printf("\t窗\n");
		i++;
		if (i==18) 
			printf("\t\t********以下为吸烟区*******\n");
	}
	fclose(fp);
	fclose(p);
	
	printf("请输入您的选择:(如17D)\n");
	char zuowei[20];
	scanf("%s",&zuowei);
	int l = strlen(zuowei);
	char zuowei_tmp[20];
	strcpy(zuowei_tmp,zuowei);
	char zimu = zuowei_tmp[l-1];
	zuowei_tmp[l-1] = '\0';
	char shuzi[3]; 
	strcpy(shuzi,zuowei_tmp);
	int sz = atoi(shuzi);	
		
	int flag[20][4] = {
    
    0};
	flag[sz-1][zimu-65]	= 1;		
    FILE *p1 = fopen("xinxi.txt", "r");	
    FILE *p2 = fopen("xinxi2.txt", "r");
    FILE *p3 = fopen("tmp.txt", "w");//中间文件 
    FILE *p4 = fopen("yonghuxingxi.txt", "a");
    if(p4 == NULL)
    {
    
    
        printf("open error!\n");
    } 
    if(p3 == NULL)
    {
    
    
        printf("open error!\n");
    } 
    if(p2 == NULL)
    {
    
    
        printf("read error!\n");
    }  
    if(p1 == NULL)
    {
    
    
        printf("read error!\n");
    }   
    
	int q = 0;
	char buf3[999];//定义缓冲区,用于暂时存储数据 
	char buf4[999];//定义缓冲区,用于暂时存储数据 
	char xingming[50];
	char shengfz[50];
	char yuding[20];
	while(fgets(buf3, 100, p1) != NULL)
	{
    
    
		fgets(buf4, 100, p2);
		sscanf(buf4,"%d%d%d%d", &plane1.p[q][0], &plane1.p[q][1], &plane1.p[q][2], &plane1.p[q][3]);
		sscanf(buf3,"%s%s%s%s", &plane1.A, &plane1.B, &plane1.C, &plane1.D);
		printf("\t");
		if(plane1.p[q][0] == 0 && flag[q][0] == 0)
		{
    
    
			fputs("0\t",p3);
		} 
		else
		{
    
    
			fputs("1\t",p3);
			if(flag[q][0] == 1)
			{
    
    
				printf("\n您预定的座位是:%s,请输入您的姓名和身份证号\n",plane1.A);
				scanf("%s%s",xingming,shengfz);
				strcpy(yuding,plane1.A);
			}
		}
		if(plane1.p[q][1] == 0 && flag[q][1] == 0)
		{
    
    
			fputs("0\t",p3);
		} 
		else
		{
    
    
			fputs("1\t",p3);
			if(flag[q][1] == 1)
			{
    
    
				printf("\n您预定的座位是:%s,请输入您的姓名和身份证号\n",plane1.B);
				scanf("%s%s",xingming,shengfz);
				strcpy(yuding,plane1.B);
			}
		}
		if(plane1.p[q][2] == 0 && flag[q][2] == 0)
		{
    
    
			fputs("0\t",p3);
		} 
		else
		{
    
    
			fputs("1\t",p3);
			if(flag[q][2] == 1)
			{
    
    
				printf("\n您预定的座位是:%s,请输入您的姓名和身份证号",plane1.C);
				scanf("%s%s",xingming,shengfz);
				strcpy(yuding,plane1.C);
			}
		}
		if(plane1.p[q][3] == 0 && flag[q][3] == 0)
		{
    
    
			fputs("0\t",p3);
		} 
		else
		{
    
    
			fputs("1\t",p3);
			if(flag[q][3] == 1)
			{
    
    
				printf("\n您预定的座位是:%s,请输入您的姓名和身份证号",plane1.D);
				scanf("%s%s",xingming,shengfz);
				strcpy(yuding,plane1.D);
			}
		}
		fputs("\n",p3);
		q++; 
	}
	fputs(xingming,p4);
	fputs("\t",p4);
	fputs(shengfz,p4);
	fputs("\t",p4);
	fputs(yuding,p4);
	fputs("\n",p4);
    fclose(p1);
    fclose(p2);
    fclose(p3);
    fclose(p4);
	char f1[] = "xinxi2.txt" ;
	char f2[] = "tmp.txt";
	remove(f1);
	rename(f2,f1);
} 

void Auto_Order()//系统自动订票 
{
    
    
	int choice2 = 0; 
	printf("\t\t========系统自动订票=======\t\t\n\n");
	printf("\t\t1、低价\t\t\n\n");
	printf("\t\t2、高价\t\t\n\n");
	scanf("%d", &choice2);
	int a,b;
	int flag[20][4] = {
    
    0};
	int seati,seatj;
	switch(choice2)
	{
    
    
		case 1:
			{
    
    
				//产生随机数 
			    srand(time(NULL));
			    a=1,b=10;
			    seati = rand()%(b-a+1)+a;//随机产生1~10的位置 
			    seatj = rand()%4;//随机产生0~3的位置
			    flag[seati-1][seatj] = 1;
				break; 
			}
		case 2:
			{
    
    
				srand(time(NULL));
				a=11,b=20;
			    seati = rand()%(b-a+1)+a;//随机产生11~20的位置
			    seatj = rand()%4;//随机产生0~3的位置
			    flag[seati-1][seatj] = 1;
				break;
			}
	}	
		
    FILE *p1 = fopen("xinxi.txt", "r");	
    FILE *p2 = fopen("xinxi2.txt", "r");
    FILE *p3 = fopen("tmp.txt", "w");
    FILE *p4 = fopen("yonghuxingxi.txt", "a");
    if(p4 == NULL)
    {
    
    
        printf("open error!\n");
    } 
    if(p3 == NULL)
    {
    
    
        printf("open error!\n");
    } 
    if(p3 == NULL)
    {
    
    
        printf("read error!\n");
    }  
    if(p1 == NULL)
    {
    
    
        printf("read error!\n");
    }   
    
	int i = 0;
	char buf[999];//定义缓冲区,用于暂时存储数据 
	char buf1[999];//定义缓冲区,用于暂时存储数据 
	char xingming[50];
	char shengfz[50];
	char yuding[20];
	while(fgets(buf, 100, p1) != NULL)
	{
    
    
		fgets(buf1, 100, p2);
		sscanf(buf1,"%d%d%d%d", &plane1.p[i][0], &plane1.p[i][1], &plane1.p[i][2], &plane1.p[i][3]);
		sscanf(buf,"%s%s%s%s", &plane1.A, &plane1.B, &plane1.C, &plane1.D);
		printf("\t");
		if(plane1.p[i][0] == 0 && flag[i][0] == 0)
		{
    
    
			fputs("0\t",p3);
		} 
		else
		{
    
    
			fputs("1\t",p3);
			if(flag[i][0] == 1)
			{
    
    
				printf("\n系统已自动为您预定座位:%s,请输入您的姓名和身份证号\n",plane1.A);
				scanf("%s%s",xingming,shengfz);
				strcpy(yuding,plane1.A);
			}
		}
		if(plane1.p[i][1] == 0 && flag[i][1] == 0)
		{
    
    
			fputs("0\t",p3);
		} 
		else
		{
    
    
			fputs("1\t",p3);
			if(flag[i][1] == 1)
			{
    
    
				printf("\n系统已自动为您预定座位:%s,请输入您的姓名和身份证号\n",plane1.B);
				scanf("%s%s",xingming,shengfz);
				strcpy(yuding,plane1.B);
			}
		}
		if(plane1.p[i][2] == 0 && flag[i][2] == 0)
		{
    
    
			fputs("0\t",p3);
		} 
		else
		{
    
    
			fputs("1\t",p3);
			if(flag[i][2] == 1)
			{
    
    
				printf("\n系统已自动为您预定座位:%s,请输入您的姓名和身份证号\n",plane1.C);
				scanf("%s%s",xingming,shengfz);
				strcpy(yuding,plane1.C);
			}
		}
		if(plane1.p[i][3] == 0 && flag[i][3] == 0)
		{
    
    
			fputs("0\t",p3);
		} 
		else
		{
    
    
			fputs("1\t",p3);
			if(flag[i][3] == 1)
			{
    
    
				printf("\n系统已自动为您预定座位:%s,请输入您的姓名和身份证号\n",plane1.D);
				scanf("%s%s",xingming,shengfz);
				strcpy(yuding,plane1.D);
			}
		}
		fputs("\n",p3);
		i++; 
	}
	fputs(xingming,p4);
	fputs("\t",p4);
	fputs(shengfz,p4);
	fputs("\t",p4);
	fputs(yuding,p4);
	fputs("\n",p4);
    fclose(p1);
    fclose(p2);
    fclose(p3);
    fclose(p4);
	char f1[] = "xinxi2.txt" ;
	char f2[] = "tmp.txt";
	remove(f1);
	rename(f2,f1);
} 

void Print_order()//打印乘客清单 
{
    
    
	printf("\n乘客清单如下:\n");
	
    FILE *p4 = fopen("yonghuxingxi.txt", "r");
    if(p4 == NULL)
    {
    
    
        printf("read error!\n");
    } 
	int i = 0;
	char buf[999];//定义缓冲区,用于暂时存储数据 
	char xingming[20];
	char shenfz[20];
	char zuoweihao[20];
	while(fgets(buf, 100, p4) != NULL)
	{
    
    
		sscanf(buf,"%s%s%s", &xingming, &shenfz, &zuoweihao);
		printf("姓名:%s\t身份证号:%s\t预定座位号:%s\n",xingming, shenfz, zuoweihao);
	}
} 

void Display()//菜单界面
{
    
    
	int choice = 0; 
	printf("\t\t========飞机订票系统=======\t\t\n\n");
	printf("\t\t1、订票\t\t\n\n");
	printf("\t\t2、退出\t\t\n\n");
	scanf("%d", &choice);
	switch(choice)
	{
    
    
		case 1:
			{
    
    
				printf("\t\t欢迎进入订票界面\t\t\n\n");
				printf("\t\t1、自主订票\t\t\n\n");
				printf("\t\t2、系统自动订票\t\t\n\n");
				int choice1;
				scanf("%d",&choice1);
				switch(choice1)
				{
    
    
					case 1:
						{
    
    
							Self_Order();//自主订票
							break;
						}
					case 2:
						{
    
    
							Auto_Order();//系统自动订票 
							break;
						}
				} 
				break; 
			}
		case 2:
			{
    
    
				break;
			}
	}
} 

int main()
{
    
    
	char choice;
	printf("是否初始化座位表:Y/N\n");
	scanf("%c",&choice);
	switch(choice)
	{
    
    
		case 'Y':
			{
    
    
				Chushihua();//初始化原始座位表 
				break;
			}
		case 'N':
			break;
	}
	printf("\n");
	Display(); 
	Print_order();
	return 0;
}

感悟

代码还有很多不足,会努力哒~

猜你喜欢

转载自blog.csdn.net/hongguoya/article/details/112466214