资源描述
设计题目
航空订票系统
任务:
航空客运定票的业务活动包括:查询航线、客票预定和办理退票等。试设计一个航空客运定票系统,以使上述业务可以借助计算机来完成。
功能要求:
(1)录入:可以录入航班情况
(2)查询:可以查询某个航线的情况(如输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;
(3)订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;
(4)退票: 可退票,退票后修改相关数据文件;
(5)客户资料:有姓名,证件号,订票数量及航班情况,订单要有编号;
(6)修改航班信息:当航班信息改变可以修改航班数据文件。
需求分析
本演示程序中,由用户录入或修改航班情况,进行查询,预定及办理退票等业务,用户在菜单中进行各个不同功能的选择,有“输入航班信息”、“列出航班信息”、“按航班号查询航班信息”、“按出发到达城市查询航班信息”、“订票”、“退票”、“修改航班信息”、“退出程序”八个功能。
概要设计
typedef struct{
double number;//订单编号
char name[20];//姓名
char id[20];//身份证号
int count;//数量
char p[20];//航班号
}GUEST;
typedef struct{
char num[20];//航班号
char depart[30];//出发城市
char arrive[30];//到达城市
char start[20];//起飞时间
char end[20];//到达时间
int price;//价格
int discount;//折扣率(%)
int total;//总票数
int rest;//剩余票数
int t;//订单数
GUEST guest[20];//乘客
}PLANE;
PLANE plane[20];
int n;//n为航班数
void inputplane()//输入航班
void list()//显示
void search1()//按航班号查询
void search2()//按起飞抵达城市查询
void book()//订票
void quit()//退票
void change()//修改
程序调用关系如下:
开始
输入操作编号(1-10)?
1 2 3 4 5 6 7 8
修改航班信息
退出
订票
退票
按出发到达城市查询航班信息
按航班号查询航班信息
列出航班信息
输入航班信息
详细设计
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct{
double number;//订单编号
char name[20];//姓名
char id[20];//身份证号
int count;//数量
char p[20];//航班号
}GUEST;
typedef struct{
char num[20];//航班号
char depart[30];//出发城市
char arrive[30];//到达城市
char start[20];//起飞时间
char end[20];//到达时间
int price;//价格
int discount;//折扣率(%)
int total;//总票数
int rest;//剩余票数
int t;//订单数
GUEST guest[20];//乘客
}PLANE;
PLANE plane[20];
int n;//n为航班数
void inputplane(){//输入航班
int i;
printf("输入总航班数:");
scanf("%d",&n);
printf("输入航班信息:\n");
printf("航班号 出发城市 到达城市 起飞时间 到达时间 价格 折扣率 总票数 剩余票数\n");
for(i=0;i<n;i++)
scanf("%s %s %s %s %s %d %d %d %d",plane[i].num,plane[i].depart,plane[i].arrive,plane[i].start,plane[i].end,&plane[i].price,&plane[i].discount,&plane[i].total,&plane[i].rest);
}
void list(){//显示
int i;
printf("航班号 出发城市 到达城市 起飞时间 到达时间 价格 折扣率 总票数 剩余票数\n");
for(i=0;i<n;i++)
printf("%s %s %s %s \t%s\t%d %d\t%d \t%d\n",plane[i].num,plane[i].depart,plane[i].arrive,plane[i].start,plane[i].end,plane[i].price,plane[i].discount,plane[i].total,plane[i].rest);
}
void search1(){//按航班号查询
int i;
char num[20];
printf("输入你查询的航班号:");
scanf("%s",num);
for(i=0;i<n;i++)
{
if(strcmp(num,plane[i].num)==0)
{
printf("航班号 出发城市 到达城市 起飞时间 到达时间 价格 折扣率 总票数 剩余票数\n");
printf("%s %s %s %s \t%s\t%d %d\t%d \t%d\n",plane[i].num,plane[i].depart,plane[i].arrive,plane[i].start,plane[i].end,plane[i].price,plane[i].discount,plane[i].total,plane[i].rest);
break;
}
}
if(i==n)
printf("没有此航班!\n");
}
void search2(){//按起飞抵达城市查询
int i;
char a[50],b[50];
printf("输入起飞城市和到达城市:");
scanf("%s %s",a,b);
printf("航班号 出发城市 到达城市 起飞时间 到达时间 价格 折扣率 总票数 剩余票数\n");
for(i=0;i<n;i++)
{
if((strcmp(a,plane[i].depart)==0)&&(strcmp(b,plane[i].arrive)==0))
printf("%s %s %s %s \t%s\t%d %d\t%d \t%d\n",plane[i].num,plane[i].depart,plane[i].arrive,plane[i].start,plane[i].end,plane[i].price,plane[i].discount,plane[i].total,plane[i].rest);
}
printf("\n");
for(i=0;i<n;i++)
{
if((strcmp(a,plane[i].depart)==0)&&(strcmp(b,plane[i].arrive)==0))
break;
}
if(i==n)
printf("没有此航班!\n");
}
void book(){//订票
char name[20],p[20],id[20];
double number;
int i,j,k,y,count;
for(i=0;i<n;i++)
plane[i].t=0;
do
{
printf("输入订单信息:\n");
printf("订单编号 姓名 身份证号 订票数 航班号\n");
scanf("%d %s %s %d %s",&number,name,id,&count,p);
for(i=0;i<n;i++)
{
if(strcmp(p,plane[i].num)==0)
break;
}
if(i==n)
printf("没有此航班\n");
else
{
if(plane[i].rest>=count)
{
j=plane[i].t;
plane[i].guest[j].number=number;
strcpy(plane[i].guest[j].name,name);
strcpy(plane[i].guest[j].id,id);
plane[i].guest[j].count=count;
strcpy(plane[i].guest[j].p,p);
plane[i].rest-=count;
plane[i].t++;
}
else
{
printf("很抱歉,该航班剩余票数为 %d 张\n",plane[i].rest);
for(k=0;k<n;k++)
{
if((strcmp(plane[i].depart,plane[k].depart)==0)&&(strcmp(plane[i].depart,plane[k].depart)==0))
break;
}
if(k==n)
printf("没有其他从%s到%s的航班\n",plane[i].depart,plane[i].arrive);
else
{
printf("从%s到%s还有 %s 航班\n\n",plane[k].depart,plane[k].arrive,plane[k].num);
printf("航班号 出发城市 到达城市 起飞时间 到达时间 价格 折扣率 总票数 剩余票数\n");
printf("%s %s %s %s \t%s\t%d %d\t%d \t%d\n",plane[k].num,plane[k].depart,plane[k].arrive,plane[k].start,plane[k].end,plane[k].price,plane[k].discount,plane[k].total,plane[k].rest);
}
}
}
printf("是否继续订票,“是”输入1,“否”输入0\n");
scanf("%d",&y);
}while(y);
}
void quit(){ //退票
double number;
char id[20];
int i,j,temp,k,y;
temp=0;
printf("请输入您的订单编号:\n");
scanf("%d",&number);
printf("请输入您的身份证:\n");
scanf("%s",id);
for(i=0;i<n;i++)
{
for(j=0;j<plane[i].t;j++)
{
if(number==plane[i].guest[j].number&&(strcmp(id,plane[i].guest[j].id)==0))
{
temp=1;
break;
}
}
if(temp==1)
break;
}
if(i==n)
printf("没有此订单!\n");
else
{
printf("订单编号 姓名 身份证号 订票数 航班号\n");
printf(" %d",plane[i].guest[j].number);
printf(" %s",plane[i].guest[j].name);
printf(" %s",plane[i].guest[j].id);
printf(" %d",plane[i].guest[j].count);
printf(" %s\n",plane[i].guest[j].p);
printf("您是否确认删除(1/0)\n");
scanf("%d",&y);
if(y==1)
{
plane[i].rest+=plane[i].guest[j].count;
for(k=j+1;k<plane[i].t;k++)
{
plane[i].guest[k-1].number=plane[i].guest[k].number;
strcpy(plane[i].guest[k-1].name,plane[i].guest[k].name);
strcpy(plane[i].guest[k-1].id,plane[i].guest[k].id);
plane[i].guest[k-1].count=plane[i].guest[k].count;
strcpy(plane[i].guest[k-1].p,plane[i].guest[k].p);
}
plane[i].t--;
printf("退票成功!!\n");
}
}
}
void change()//修改
{
char a[20];
int i;
printf("请输入你要修改的航班号:");
scanf("%s",a);
for(i=0;i<n;i++)
{
if(strcmp(a,plane[i].num)==0)
break;
}
if(i==n)
printf("没有此航班!\n");
else
{
printf("原信息:\n");
printf("航班号 出发城市 到达城市 起飞时间 到达时间 价格 折扣率 总票数 剩余票数\n");
printf("%s %s %s %s \t%s\t%d %d\t%d \t%d\n",plane[i].num,plane[i].depart,plane[i].arrive,plane[i].start,plane[i].end,plane[i].price,plane[i].discount,plane[i].total,plane[i].rest);
printf("请输入修改后的信息:\n");
printf("航班号 出发城市 到达城市 起飞时间 到达时间 价格 折扣率 总票数 剩余票数\n");
scanf("%s %s %s %s %s %d %d %d %d",plane[i].num,plane[i].depart,plane[i].arrive,plane[i].start,plane[i].end,&plane[i].price,&plane[i].discount,&plane[i].total,&plane[i].rest);
}
}
void main()
{
int a,b;
do
{
system("cls");
for(a=0;a<50;a++)
printf("*");
printf("\n");
printf("\t\t1: 输入航班信息\n");
printf("\t\t2: 列出航班信息\n");
printf("\t\t3: 按航班号查询航班信息\n");
printf("\t\t4: 按出发到达城市查询航班信息\n");
printf("\t\t5: 订票\n");
printf("\t\t6: 退票\n");
printf("\t\t7: 修改航班信息\n");
printf("\t\t8: 退出程序\n");
for(a=0;a<50;a++)
printf("*");
printf("\n");
printf("请输入功能选项1-8):\n");
scanf("%d",&b);
switch(b)
{
case 1:
inputplane();
system("pause");
break;
case 2:
list();
system("pause");
break;
case 3:
search1();
system("pause");
break;
case 4:
search2();
system("pause");
break;
case 5:
book();
system("pause");
break;
case 6:
quit();
system("pause");
break;
case 7:
change();
system("pause");
break;
case 8:
break;
}
}while(1);
}
调试分析
a. 在做“退票”函数(即void quit())时,系统总是显示没有此订票,最后发现没有跳出其中的一个这个双层for循环,现在通过调试,解决了这个问题。
b. 调试后程序会自动判断输入的数字的有效性。
用户手册
(1)演示程序的运行环境为Windows Vista系统,Microsoft Visual Studio 6.0中的Microsoft Visual C++ 6.0中运行。执行文件为:航空订票系统.exe
(2)进入演示程序后即显示DOS形式的界面:
(3)输入航班信息。
(4)由用户在菜单页面选择需要执行的功能,系统会显示相关信息
测试结果
(1)输入航班信息
(2)列出航班信息
(3)按航班号查询航班信息
(4)按出发到达城市查询航班信息
(5)订票
显示退票后航班信息:
(6)退票
显示退票后航班信息:
(7)修改:
修改后显示航班信息
对于特殊情况的处理
(1)输入不存在的航班号进行查询
(2)输入不存在的出发到达城市进行查询
(3)剩余票数不足
(4)修改时输入不存在的航班号
展开阅读全文