📄 吴世山1050320103大作业一.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 + -