目录
飞机订票系统
一、问题描述
二、功能要求
三、算法提示
四、代码说明
五、代码段
六、效果展示
飞机订票系统
备注:大一(上)C语言课程设计
一、问题描述
假设某航空公司只有M架N个座位的飞机,每架飞机每天飞行一趟,算作一个航班
通过该系统来实现机票的订购问题
二、功能要求
1、本系统采用一个包含M×N个数据的结构体数组
每个数据的结构应当包括:航班号、起飞地、目的地、座次号、座次订出与否标记、订座者的姓名和订座者的身份证号码
2、本系统显示这样的菜单:
(1)输入航班信息
(2)输出航班信息
(3)查找航班信息(按线路查询)
(4)订票预约
(5)退订
(6)退出系统
注:本系统成功执行菜单的每个功能,选项(4)和(5)将要求额外的输入
查找航班信息(按线路查)要输入查询航班的起飞地、目的地,查询结果显示空座的信息、数量、已订座的信息等
3、执行一个具体的功能之后,程序将重新显示菜单
建议相关数据信息最好用文本文件保存,从文本文件读取数据初始化,更新处理后的数据保存到文本文件中
三、算法提示
数据结构:结构体类型数组
航班号
起飞地
目的地
座次号
座次订出与否的标记
订票者姓名
订票者身份证号码
char [ ]
char [ ]
char [ ]
int
char / int
char [ ]
char [ ]
四、代码说明
1、代码运行环境如下:
2、定义的各类数据切勿超出以下结构体的定义中指定的长度:
struct flight // 航班
{
char fliname[10]; // 航班号
char sp[36]; // 起飞地点
char de[36]; // 目的地
int num1; // 座位数
int num2; // 已订出票数
};
struct book // 预定
{
char fliname[10]; // 航班号
char na[50]; // 姓名
char id[19]; // 身份证号(至多18位数)
char ph[30]; // 手机号
int st; // 状态(1表示已经预约,0则表示已经退订)
};
3、应将文件flightfile.txt、文件bookfile.txt和源代码文件放在同一目录下;
初始状态下,文件flightfile.txt和文件bookfile.txt可以为空;
运行程序后,可以通过输入航班信息功能向文件flightfile.txt中添加数据,可以通过订票预约功能向文件bookfile.txt中添加数据
4、文件flightfile.txt和文件bookfile.txt应采用ANSI编码,防止控制台输出乱码
文章来源:https://www.toymoban.com/news/detail-503745.html
五、代码段
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define M 9999
struct flight // 航班
{
char fliname[10]; // 航班号
char sp[36]; // 起飞地点
char de[36]; // 目的地
int num1; // 座位数
int num2; // 已订出票数
};
struct book // 预定
{
char fliname[10]; // 航班号
char na[50]; // 姓名
char id[19]; // 身份证号(至多18位数)
char ph[30]; // 手机号
int st; // 状态(1表示已经预约,0则表示已经退订)
};
FILE * fp1;
FILE * fp2;
int count1 = 0;
int count2 = 0;
struct flight A[M];
struct book B[M];
void init() // 初始化
{
fp1 = fopen("flightfile.txt", "r");
if(fp1 == NULL)
printf("can't open the flightfile! \n");
else
{
// 将文件指针移动到文件开头
fseek(fp1, 0, SEEK_SET);
// 从文件flightfile.txt中格式化读取数据
while(fscanf(fp1, "%s %s %s %d %d", A[count1].fliname, A[count1].sp, A[count1].de, &A[count1].num1, &A[count1].num2) == 5) count1 ++ ;
}
fclose(fp1);
fp2= fopen("bookfile.txt", "r");
if(fp2 == NULL)
printf("can't open the bookfile! \n");
else
{
// 将文件指针移动到文件开头
fseek(fp2, 0, SEEK_SET);
// 从文件bookfile.txt中格式化读取数据
while(fscanf(fp2, "%s %s %s %s %d", B[count2].fliname, B[count2].na, B[count2].id, B[count2].ph, &B[count2].st) == 5) count2 ++ ;
}
fclose(fp2);
}
void menu() // 菜单
{
printf("请输入你的选择:\n");
printf("1.输入航班信息\n");
printf("2.输出航班信息\n");
printf("3.查找航班信息\n");
printf("4.订票预约\n");
printf("5.退订\n");
printf("6.订票信息查询\n");
printf("7.退出系统\n\n");
}
void save1() // 保存1(向flightfile.txt中保存)
{
int i;
fp1 = fopen("flightfile.txt", "w+");
fseek(fp1, 0, SEEK_SET); // 将文件指针移动到文件开头
for(i=0; i<count1; i++) // 将数据格式化输出到文件flightfile.txt中
fprintf(fp1, "%s %s %s %d %d\n", A[i].fliname, A[i].sp, A[i].de, A[i].num1, A[i].num2);
fclose(fp1);
}
void save2() // 保存2(向bookfile.txt中保存)
{
int i;
fp2 = fopen("bookfile.txt", "w+");
fseek(fp2, 0, SEEK_SET); // 将文件指针移动到文件开头
for(i=0; i<count2; i++) // 将数据格式化输出到文件bookfile.txt中
fprintf(fp2, "%s %s %s %s %d\n", B[i].fliname, B[i].na, B[i].id, B[i].ph, B[i].st);
fclose(fp2);
}
void input() // 输入航班信息
{
int i,flag=1;
printf("请输入航班号:");
scanf("%s", A[count1].fliname);
for(i=0; i<count1; i++) // 判定航班号是否已经存在!
if(strcmp(A[count1].fliname, A[i].fliname) == 0)
{
printf("该航班号已存在,请重新选择输入航班信息并输入!\n\n");
flag = 0;
break;
}
if(flag == 1)
{
printf("起飞地点:");
scanf("%s", A[count1].sp);
printf("目的地:");
scanf("%s", A[count1].de);
printf("座位数:");
scanf("%d", &A[count1].num1);
printf("已订出票数:");
scanf("%d", &A[count1].num2);
printf("\n");
count1 ++ ;
save1();
}
}
void show() // 输出航班信息
{
int i;
printf("航班号\t起飞地点\t目的地\t剩余座位数\n");
for(i=0; i<count1; i++)
{
printf("%s\t%s \t%s \t%d\n", A[i].fliname, A[i].sp, A[i].de, A[i].num1-A[i].num2);
}
printf("\n");
}
void find() // 查找航班信息(按线路查询)
{
int i, num=0, flag=1;
char sp[36];
char de[36];
printf("请输入起飞地点:");
scanf("%s", sp);
printf("请输入目的地:");
scanf("%s", de);
printf("航班号\t起飞地点\t目的地\t剩余座位数\n");
for(i=0; i<count1; i++)
{
if(strcmp(sp, A[i].sp)==0 && strcmp(de, A[i].de)==0) // 按照用户输入的起飞地点和目的地到结构体flight数组A中查找相应的航班
{
printf("%s\t%s \t%s \t%d\n", A[i].fliname, A[i].sp, A[i].de, A[i].num1-A[i].num2);
num ++ ;
flag = 0;
}
}
if(flag == 1)
{
printf("无 %s %s 0\n", sp, de);
}
printf("本次共计为您查询到%d次航班!\n\n", num);
}
void booking() // 订票预约
{
int i, flag = 0;
printf("请输入航班号:");
scanf("%s", B[count2].fliname);
for(i=0; i<count1; i++)
if( strcmp(B[count2].fliname, A[i].fliname)==0 && A[i].num1-A[i].num2>0 )
{
flag = 1;
break;
}
if(flag == 1)
{
int j = -1;
printf("姓名:");
scanf("%s", B[count2].na);
printf("身份证号:");
scanf("%s", B[count2].id);
printf("手机号:");
scanf("%s", B[count2].ph);
printf("请您确认输入的信息:\n航班号:%s\n姓名:%s\n身份证号:%s\n手机号:%s\n", B[count2].fliname, B[count2].na, B[count2].id, B[count2].ph);
printf("输入数字1确认预约该航班,输入数字2重新选择订票预约:");
scanf("%d", &j);
if(j == 1)
{
B[count2].st=1;
count2 ++ ;
A[i].num2 ++ ; // 预约成功后相应的航班的已订出票数++
save2();
save1();
printf("您已成功预约航班号为%s从%s出发到达%s的航班!祝您旅途愉快!\n\n", B[count2-1].fliname, A[i].sp,A[i].de);
}
else
printf("请您重新选择订票预约!\n\n");
}
else
printf("该航班不存在或是该航班已无可预约座位,请重新选择订票预约并输入存在的航班号!\n\n");
}
void unsubscribe() // 退订
{
int i, flag=0;
char fliname[10]; // 航班号
char na[50]; // 姓名
char id[19]; // 身份证号
char ph[30]; // 手机号
int st; // 状态(1表示已经预约,0则表示已经退订)
printf("请输入航班号:");
scanf("%s", fliname);
printf("姓名:");
scanf("%s", na);
printf("身份证号:");
scanf("%s", id);
printf("手机号:");
scanf("%s", ph);
for(i=0; i<count2; i++)
if( strcmp(fliname, B[i].fliname)==0 && strcmp(na, B[i].na)==0 && strcmp(id, B[i].id)==0 && strcmp(ph, B[i].ph)==0 )
{
flag = B[i].st;
break;
}
if(flag == 1)
{
printf("请输入数字0确认退订该航班:");
scanf("%d", &B[i].st);
while(B[i].st != 0)
{
printf("请输入数字0确认退订该航班:");
scanf("%d",&B[i].st);
}
save2();
for(i=0; i<count1; i++)
if(strcmp(fliname, A[i].fliname) == 0)
break;
A[i].num2 -- ; // 退订成功后相应的航班的已订出票数--
save1();
printf("您已成功退订航班号为%s从%s出发到达%s的航班!\n\n", fliname,A[i].sp, A[i].de);
}
else
printf("该航班未被您预约,请重新选择退订并输入您已预约的航班号!\n\n");
}
void information() // 订票信息查询
{
int i,j,flag = 1;
char fliname[10]; // 航班号
char na[50]; // 姓名
char id[19]; // 身份证号
char ph[30]; // 手机号
printf("航班号:");
scanf("%s", fliname);
printf("姓名:");
scanf("%s", na);
printf("身份证号:");
scanf("%s", id);
printf("手机号:");
scanf("%s", ph);
for(i=0; i<count2; i++)
if(strcmp(fliname, B[i].fliname)==0 && strcmp(na, B[i].na)==0 && strcmp(id, B[i].id)==0 && strcmp(ph, B[i].ph)==0 && B[i].st==1)
{
flag = 0;
for(j=0; j<count1; j++)
if(strcmp(fliname, A[j].fliname)==0)
{
printf("订票信息查询成功,信息如下:\n");
printf("航班号\t起飞地点\t目的地\n");
printf("%s\t%s\t %s\n\n", A[j].fliname, A[j].sp, A[j].de);
break;
}
break;
}
if(flag) printf("未查询到您的航班,请重新输入信息查询!\n\n");
}
int main()
{
init(); // 初始化
int choice;
while(1)
{
menu(); // 菜单
scanf("%d", &choice);
switch(choice)
{
case 1: input(); break; // 输入航班信息
case 2: show(); break; // 输出航班信息
case 3: find(); break; // 查找航班信息
case 4: booking(); break; // 订票预约
case 5: unsubscribe(); break; // 退订
case 6: information(); break; // 订票信息查询
case 7: exit(0); break; // 退出系统
}
}
return 0;
}
六、效果展示
文章来源地址https://www.toymoban.com/news/detail-503745.html
到了这里,关于飞机订票系统(C语言版)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!