题目
飞机订票系统设计
功能:
(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;
}
感悟
代码还有很多不足,会努力哒~