课程设计~民航管理系统
来源:互联网 发布:avmo 最新域名 编辑:程序博客网 时间:2024/05/01 11:53
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
/*宏定义*/
#define OK 1
#define ERROR 0
#define Max 7
/*全局变量*/
char *air_num[3]={"CA1588","FM9258","OZ3085"};//航班号
char password[Max];
//飞机航线信息,包括飞机航班号,此航线飞机总装载量等
typedef struct airline
{
char air_num[8];//航班号
char plane_num[8];//飞机型号
char end_place[20];//达到地点
int total;//飞机总载量
int seat_number[130];
int left;//剩余座位
struct airline *next;//指向下一结点
}airline;
//乘客的信息,包括姓名,所乘飞机航班号,以及座位号等
typedef struct customer
{
char name[16];
char password[6];
char air_num[15];
int seat_num;
struct customer *next;//指向下一结点
}customer;
//实现首架飞机基本信息的插入
airline *start_air()
{
airline *air;
//分配动态内存
if(air=(airline*)malloc(sizeof(airline)))
{
if(air==NULL) //插入第一架飞机时
air->next=NULL;
}
else //分配内存失败
printf("Memory's allotment is error");
return air;
}
//实现首位乘客基本信息的插入
customer *start_customer()
{
customer *cus;
if(cus=(customer*)malloc(sizeof(customer)))//分配动态内存
{
if(cus==NULL) //插入第一个乘客
cus->next=NULL;
}
else //分配内存失败
printf("Memory's allotment is error");
return cus;
}
//实现乘客退票时,该飞机剩余座位数加1
airline *modefy_airline(airline *line,char *air_num,int seat_num)
{
airline *p;
p=line->next;
for(;p!=NULL;p=p->next)//当还被没全部删除完毕时
{
if(strcmp(p->air_num,air_num)==0)
{
//如果删除乘客有效
if(strcmp(air_num,p->air_num)==0)//字符串的比较
{
p->seat_number[seat_num]=0;
p->left++;//则飞机剩余座位数加1
return line;
}
//else printf("/nNO the airline!/n");
return 0;
}
}
}
//对飞机所形成链表节点的添加
int insert_air(airline **p,char *air_num,char *plane_num,char *end_place,int *seat_number,int total,int left)
{
airline *q;
q=(airline*)malloc(sizeof(airline));//开辟内存
strcpy(q->air_num,air_num);
strcpy(q->plane_num,plane_num);
strcpy(q->end_place,end_place);//复制飞机航班号,飞机型号 ,飞往地点
strcpy(q->seat_number,seat_number);
q->total=total;
q->left=left;
q->next=NULL;
(*p)->next=q;
(*p)=(*p)->next;//添加节点数
return OK;
}
//对乘客所形成链表节点的添加
int insert_cus(customer **p,char *name,char *password,char *air_num,int seat_num)
{
customer *q;
q=(customer*)malloc(sizeof(customer));//开辟内存
strcpy(q->name,name);
strcpy(q->password,password);//储存密码
strcpy(q->air_num,air_num);//复制乘客的名字以及所乘飞机航班号
q->seat_num=seat_num;
q->next=NULL;
(*p)->next=q;
(*p)=(*p)->next;
return OK;
}
//实现乘客订票功能
int book(airline *a,char *air_num,customer *cus,char *name,char *password)
{
airline *p=a;
customer *q=cus->next;
p=a->next;
int i;//循环标志
//循环实现指向飞机的指针指向链表末尾
for(;q->next!=NULL;q=q->next)
{
}
for(;p!=NULL;p=p->next)
{
if(strcmp(p->air_num,air_num)==0)
{
if(p->left>0)
{
i=1;
while(p->seat_number[i]==i)
i++;
printf("/nYour seat number is %d/n",i);
p->seat_number[i]=i;
//printf("/nYour seat number is %d/n",(p->total-p->left+1));
insert_cus(&q,name,password,air_num,i);
//insert_cus(&q,name,password,air_num,p->total-p->left+1);
//p->total-p->left+1 表示对当前座位数的计算公式
p->left--;//订票成功,剩余空座数减1
return OK;
}
else
{
printf("Sorry! Seat is full/n");
return 0;//正常退出,不用ERROR
}
}
}
}
//实现乘客退票功能
int delete_customer(customer *cus,airline *line,char *name,char *password)
{
int seat_num;
customer *p,*pr;
airline *q;//飞机结点
char air_num[8];
pr=cus;
p=pr->next;
//航班当中至少还有一名乘客待删除
while(p!=NULL)
{
if(strcmp(p->name,name)==0&&strcmp(p->password,password)==0)
//如果真有乘客已经退票,并且输入密码正确
{
strcpy(air_num,p->air_num);
seat_num=p->seat_num;
/*正确删除时,调用此函数,实现剩余座位数加1*/
line=modefy_airline(line,air_num,seat_num);
pr->next=p->next;
p=pr->next; //删除节点P内容
printf("/nFinish Deleting!/n");
return OK;
}
pr=pr->next;
p=pr->next;//删除节点P内容
}
printf("/nSorry! User name or password is wrong!/n");
return ERROR;//异常退出0
}
//实现查询飞机基本信息情况
int search_air(airline *head)//实参传入形参链表的头节点
{
airline *p=head->next;//p指向第一个节点
printf("/n********** ^ Airline Information ^ ************/n");
printf("Air_num Plane_num End_place Total Left/n");
/*格式化打印每个飞机节点的结构体里面的属性*/
for(;p!=NULL;p=p->next)
{
printf("%s %-10s %-8s %-12d%-10d/n",p->air_num,p->plane_num,p->end_place
,p->total,p->left);
}
printf("****************************************************/n");
free(p);
return OK;//正常退出
}
//实现查询乘客购票情况
int search_customer(customer *head)//实参传入形参链表的头节点
{
customer *q=head->next->next;//p指向第一个节点
printf("/n********** ^ Customer Information ^ ************/n");
printf("Name Air_num Seat_num/n");
for(;q!=NULL;q=q->next)
{
printf("%-14s %-12s %-d/n",q->name,q->air_num,q->seat_num);
}
printf("****************************************************/n/n");
return OK;//正常退出
}
//创建初始化时飞机航班的基本信息
int creat_air(airline **line)
{
airline *p=*line;
int i=0;
char *plane_num[3]={"B733","CRJ","A319"};//机型
char *end_place[3]={"Beijing","Shanghai","Harbin"};
int *seat_number[3]={"0","0","0"};
//Shanghai means Shanghai Pudong International Airport
int total[3]={128,86,124};
int left[3]={128,86,124};
/* 实现链表的添加节点 */
for(i=0;i<3;i++)//实现链表的添加节点
insert_air(&p,air_num[i],plane_num[i],end_place[i],seat_number[i],total[i],left[i]);
return OK;
}
//创建初始化时所载乘客的基本信息
int creat_customer(customer **cus)
{
customer *p=*cus;
int i=0;
char *name="Xunian";
char password2[3]="abc";
//我们需要建立一个链表头节点
int seat_num[1]={0};
// int sp;
insert_cus(&p,name,password,air_num[i],seat_num[i]);
return OK;
}
/*设置用户密码*/
int set_password()
{
char ch;
int j=0;
printf("Now we will check your password/n");
while((ch=getch())!=13) //将输入的密码转换成字符***
{
if(ch!='/b')
putchar('*'); //打印密码显示为*
password[j]=ch;
j++;//记录密码长度
}
if(j<=6 && j>0) return 0;
else {
printf("/nSorry,Password is error(length<=6)!/n");
return -1;
}
}
//服务菜单打印
void printmenu(void)
{
/*打印用户界面*/
printf("/n****************************************/n");
printf("* Welcome to Weihai air System! */n");
printf("* */n");
printf("* Book ---------1 */n");
printf("* Delete ---------2 */n");
printf("* Search ---------3 */n");
printf("* Exit ---------4 */n");
printf("* */n");
printf("****************************************/n");
}
/*打印课程设计基本信息*/
void ourprint(void)
{
////////// ///////////////
// printf("*** Datastruction Designing ***");
printf("/**********************************/n");
printf("*** DataStruction Designing ***/n");
printf("***********************************/n");
}
/*
下面是航空订票服务程序 main()
*/
/*主函数*/
int main()
{
int sign=1;//设置一个退出循环的标志
int sign2;//内层循环退出的一个标志
int name_length; //乘客姓名的长度
char name[16],air_num[8],ch;
char num;
/* 初始化过程 */
/*分别开辟两个链表的头节点*/
/*一个是关于飞机航班的链表,一个是关于乘客的链表*/
customer *cus=start_customer();
airline *air=start_air();
/*两个链表分别添加节点数*/
creat_air(&air);
creat_customer(&cus);
while(sign==1)
{
sign2=1;//循环开始标志
/*打印菜单*/
printmenu();
printf("Please input your choice/n");
ch=getch();//等待输入
/*结构化的选择*/
/*第一个功能实现订票book*/
if(ch=='1')
{
printf("Which airline will you travel by? /n");
printf("1: CA1588 2: FM9258 3: OZ3085/n");
num=getch();
if(num=='1')
{
strcpy(air_num,"CA1588");
sign2=0;
}
else
if(num=='2')
{
strcpy(air_num,"FM9258");
sign2=0;
}
else
if(num=='3')
{
strcpy(air_num,"OZ3085");
sign2=0;
}
if(sign2==0)
{
printf("Please input a customer name:");
scanf("%s",name);
/*计算输入的乘客名字长度*/
name_length = strlen(name); // 总长度/单个元素的长度
if(name_length<16)
{
if(!set_password())//密码设置
{
/*调用乘客订票函数*/
book(air,air_num,cus,name,password);
printf("Finish!/n");
}//end if(!set_password())
} //end if(name_length<16)
/*名字过长时,打印出错误*/
else
printf("Error,Name is too long/n");
}
else
printf("Error!Please input agian~");
}
else
/*第二个功能实现退票delete*/
if(ch=='2')
{
printf("Please input your name:");
scanf("%s",name);
// printf("Now we will cheek your password./n");
if(!set_password())//核对密码
/*删除链表中的一个节点*/
delete_customer(cus,air,name,password);
}
else
/*第三个功能实现查询*/
if(ch=='3')
//查询飞机航班与已够买机票的乘客信息二者信息
{
search_air(air);
search_customer(cus);
}
else
/*最后选择退出*/
if(ch=='4')
{
sign=0;//外层循环退出标志
}
else
/*错误输入时,打印提示信息*/
printf("Sorry! The number is wrong,please input again (1-4)!/n");
}
getch();
system("pause");
return 0; //返回操作系统
}
- 课程设计~民航管理系统
- 课程设计---停车场管理系统
- 商品管理系统课程设计
- 课程设计:图书管理系统
- 课程设计:图书管理系统
- 课程设计选题管理系统
- 课程设计,图书馆管理系统
- 课程设计----员工管理系统
- 课程设计--图书管理系统
- 【课程设计-通讯录管理系统】
- 课程设计-家谱管理系统
- 课程设计---停车场管理系统
- 图书馆管理系统课程设计
- 电话费管理系统:清华大学课程设计
- 课程设计------学生考勤管理系统
- C语言课程设计 管理系统
- 课程设计---图书登记管理系统
- 课程设计账户管理系统(3)
- javascript天生就具备类似c#中的"委托"功能
- 跳槽——找马时,我被驴发现了(1) - 职业生涯顾问Leo - CSDNBlog
- IP到计算机用户名
- Visual studio 2005入门
- 跳槽——找马时,我被驴发现了(2) - 职业生涯顾问Leo - CSDNBlog
- 课程设计~民航管理系统
- .net Framework 2.0 专门提供了配置文件的操作
- 从今天开始学习编程.
- ubuntu7.10 安装后配置记录
- 免费下载工业实时数据库演示版
- 随便写写
- fedora8 使用小记之五:服务Service/Daemon
- mysql函数、存储过程、触发器、游标
- 跳槽——找马时,我被驴发现了(3) - 职业生涯顾问Leo - CSDNBlog