#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct _Plane
{
char start_place[20];//起点
char end_place[20];//终点
char start_time[20];//起时间
char end_time[20];//降时间
char no[20];//航班号
float price;//票价
int num;//票数
}Plane;
typedef struct _Ticket
{
char name[20];//姓名
char card[20];//证件号
char no[20];//航班号
char num[20];//订单编号
int count;//订票数量
}Ticket;
int Input_Plane_Info(Plane plane[],int n)
{
system("cls");
printf("请输入航班起点:");
scanf("%s",&plane[n].start_place);
printf("请输入航班终点:");
scanf("%s",&plane[n].end_place);
printf("请输入航班起飞时间:");
scanf("%s",&plane[n].start_time);
printf("请输入航班降落时间:");
scanf("%s",&plane[n].end_time);
printf("请输入航班号:");
scanf("%s",&plane[n].no);
printf("请输入航班票价:");
scanf("%f",&plane[n].price);
printf("请输入航班票数:");
scanf("%d",&plane[n].num);
printf("录入成功!\n");
n++;
system("pause");
return n;
}
void Dis_Plane_Info(Plane plane[],int n)
{
int i;
system("cls");
printf("%-10s%-20s%-20s%-20s%-20s%-10s%-10s\n","航班号","起点","终点","起飞时间","抵达时间","票价","票数");
for(i=0;i<n;i++)
{
printf("%-10s",plane[i].no);
printf("%-20s",plane[i].start_place);
printf("%-20s",plane[i].end_place);
printf("%-20s",plane[i].start_time);
printf("%-20s",plane[i].end_time);
printf("%-10g",plane[i].price);
printf("%-10d\n",plane[i].num);
}
system("pause");
}
void Serach_Plane_Info(Plane plane[],int n)
{
int i;
char temp[20];
system("cls");
printf("请输入要查询的航班号:");
scanf("%s",temp);
for(i=0;i<n;i++)
{
if(!strcmp(temp,plane[i].no))
{
break;
}
}
if(i==n)
{
printf("无该航班信息!\n");
}
else
{
printf("%-10s%-20s%-20s%-20s%-20s%-10s%-10s\n","航班号","起点","终点","起飞时间","抵达时间","票价","票数");
printf("%-10s",plane[i].no);
printf("%-20s",plane[i].start_place);
printf("%-20s",plane[i].end_place);
printf("%-20s",plane[i].start_time);
printf("%-20s",plane[i].end_time);
printf("%-10g",plane[i].price);
printf("%-10d\n",plane[i].num);
}
system("pause");
}
int menu()
{
int chioce;
system("cls");
printf("1:录入航班信息\n");
printf("2:查询航班信息\n");
printf("3:全部航班信息\n");
printf("4:订票\n");
printf("5:退票\n");
printf("0:退出\n");
printf("请输入选择:");
scanf("%d",&chioce);
while(chioce<0||chioce>5)
{
printf("请重新输入:");
scanf("%d",&chioce);
}
return chioce;
}
void Save_Plane_Info(Plane plane[],int n)
{
int i;
FILE* fp;
fp=fopen("Plane_Info.dat","w");
for(i=0;i<n;i++)
{
fwrite(&plane[i],1,sizeof(Plane),fp);
}
fclose(fp);
}
void Load_Plane_Info(Plane plane[],int* n)
{
FILE* fp;
fp=fopen("Plane_Info.dat","r");
if(fp==NULL)
{
return ;
}
while(fread(&plane[*n],1,sizeof(Plane),fp))
{
(*n)++;
}
fclose(fp);
}
void Save_Ticket_Info(Ticket rec[],int n)
{
int i;
FILE* fp;
fp=fopen("Ticket_Info.dat","w");
for(i=0;i<n;i++)
{
fwrite(&rec[i],1,sizeof(Ticket),fp);
}
fclose(fp);
}
void Load_Ticket_Info(Ticket rec[],int* n)
{
FILE* fp;
fp=fopen("Ticket_Info.dat","r");
if(fp==NULL)
{
return ;
}
while(fread(&rec[*n],1,sizeof(Ticket),fp))
{
(*n)++;
}
fclose(fp);
}
int Book_Plane_Ticket(Plane plane[],int n,Ticket rec[],int m)
{
int i;
char temp[20];
system("cls");
printf("请输入要购买的航班号:");
scanf("%s",temp);
for(i=0;i<n;i++)
{
if(!strcmp(temp,plane[i].no))
{
break;
}
}
if(i==n)
{
printf("无该航班信息!\n");
system("pause");
return m;
}
printf("%-10s%-20s%-20s%-20s%-20s%-10s%-10s\n","航班号","起点","终点","起飞时间","抵达时间","票价","票数");
printf("%-10s",plane[i].no);
printf("%-20s",plane[i].start_place);
printf("%-20s",plane[i].end_place);
printf("%-20s",plane[i].start_time);
printf("%-20s",plane[i].end_time);
printf("%-10g",plane[i].price);
printf("%-10d\n",plane[i].num);
printf("请输入要购买的票数:");
scanf("%d",&rec[m].count);
if(rec[m].count>plane[i].num)
{
printf("余票不足,购买失败!");
system("pause");
return m;
}
strcpy(rec[m].no,temp);
plane[i].num=plane[i].num-rec[m].count;
printf("请输入订购人姓名:");
scanf("%s",&rec[m].name);
printf("请输入订购人证件号:");
scanf("%s",&rec[m].card);
printf("请输入订单号");
scanf("%s",&rec[m].num);
m++;
printf("购票成功!\n");
system("pause");
return m;
}
int Del_Plane_Ticket(Plane plane[],int n,Ticket rec[],int m)
{
int i,j;
char temp[20];
system("cls");
printf("请输入要退票的订单号:");
scanf("%s",temp);
for(i=0;i<m;i++)
{
if(!strcmp(temp,rec[i].num))
{
break;
}
}
if(i==m)
{
printf("无该订单信息!\n");
system("pause");
return m;
}
for(j=0;j<n;j++)
{
if(!strcmp(plane[j].no,rec[i].no))
{
plane[j].num+=rec[i].count;
break;
}
}
for(j=i;j<m;j++)
{
rec[j]=rec[j+1];
}
m--;
printf("退票成功!\n");
system("pause");
return m;
}
int main3()
{
int chioce;
Plane plane[100];
int plane_num=0;
Ticket rec[100];
int rec_num=0;
system("mode con: cols=120 lines=40");
Load_Plane_Info(plane,&plane_num);
Load_Ticket_Info(rec,&rec_num);
do
{
chioce=menu();
switch(chioce)
{
case 1:
plane_num=Input_Plane_Info(plane,plane_num);
Save_Plane_Info(plane,plane_num);
break;
case 2:
Serach_Plane_Info(plane,plane_num);
break;
case 3:
Dis_Plane_Info(plane,plane_num);
break;
case 4:
rec_num=Book_Plane_Ticket(plane,plane_num,rec,rec_num);
Save_Ticket_Info(rec,rec_num);
Save_Plane_Info(plane,plane_num);
break;
case 5:
rec_num=Del_Plane_Ticket(plane,plane_num,rec,rec_num);
Save_Ticket_Info(rec,rec_num);
Save_Plane_Info(plane,plane_num);
break;
}
}while(chioce!=0);
return 0;
}
#define ELE int
typedef struct list
{
ELE data;
struct list* next;
}Node,*pnode;
void free_list(pnode head)
{//销毁链表
pnode p=head;
pnode q=head;
if(p==NULL)
return ;
if(p->next==head)
{
free(p);
head=NULL;
return ;
}
while(p->next!=head)
{
q=p;
p=p->next;
free(q);
}
free(p);
free(head);
head=NULL;
}
pnode creat_list(pnode head)
{
int n,i;
pnode p=NULL;
free_list(head);//创建之前先销毁上一次的数据
printf("请输入猴子数量:");
scanf("%d",&n);
while(n<=0)
{
printf("猴子至少为1,请重新输入\n");
scanf("%d",&n);
}
head=(pnode)malloc(sizeof(Node));
p=head;
for(i=1;i<n;i++)
{
p->data=i;
p->next=(pnode)malloc(sizeof(Node));
p=p->next;
}
p->data=n;
p->next=head;
return head;
}
pnode kill_list(pnode head)
{
int n,i;
pnode p=head;
pnode q=head;
printf("报数到几猴子离开:");
scanf("%d",&n);
while(n<=1)
{
printf("至少为2\n");
scanf("%d",&n);
}
if(head->next==head)
{
printf("猴子大王是%d",head->data);
return head;
}
do
{
for(i=1;i<n;i++)
{
q=p;
p=p->next;
}
q->next=p->next;
printf("%d号猴子离开\n",p->data);
free(p);
p=q->next;
}while(p->next!=p);
printf("猴子大王是%d\n",p->data);
return p;
}
int main7()
{
system("cls");
pnode head=NULL;
head=creat_list(head);
head=kill_list(head);
free_list(head);
system("pause");
return 0;
}
#define Max 100 //结点的最大个数
typedef struct node{
char data;
struct node *lchild,*rchild;
}BinTNode;//二叉树的结点类型
typedef BinTNode *BinTree; //定义二叉树的指针
int NodeNum,leaf; //NodeNum为结点数,leaf为叶子数
//==========基于先序遍历算法创建二叉树==============
//=====要求输入先序序列,其中加入虚结点"#"以示空指针的位置==========
BinTree CreatBinTree()
{
BinTree T;
char ch;
if((ch=getchar())=='#')
{
return (NULL); //读入#,返回空指针
}
T=(BinTNode *)malloc(sizeof(BinTNode)); //生成结点
T->data=ch;
T->lchild=CreatBinTree(); //构造左子树
T->rchild=CreatBinTree(); //构造右子树
return (T);
}
//======== 先序遍历=============
void Preorder(BinTree T)
{
if(T)
{
printf("%c",T->data); //访问结点
Preorder(T->lchild); //先序遍历左子树
Preorder(T->rchild); //先序遍历右子树
}
}
//======== 中序遍历===============
void Inorder(BinTree T)
{
if(T)
{
Inorder(T->lchild); //中序遍历左子树
printf("%c",T->data); //访问结点
Inorder(T->rchild); //中序遍历右子树
}
}
//========== 后序遍历============
void Postorder(BinTree T)
{
if(T)
{
Postorder(T->lchild); //后序遍历左子树
Postorder(T->rchild); //后序遍历右子树
printf("%c",T->data); //访问结点
}
}
//=====采用后序遍历求二叉树的深度、结点数及叶子数的递归算法========
int TreeDepth(BinTree T)
{
int hl,hr,max;
if(T)
{
hl=TreeDepth(T->lchild); //求左深度
hr=TreeDepth(T->rchild); //求右深度
max=hl>hr? hl:hr; //取左右深度的最大值
NodeNum=NodeNum+1; //求结点数
if(hl==0&&hr==0)
{
leaf=leaf+1; //若左右深度为0,即为叶子。
}
return(max+1);
}
return 0;
}
//====利用"先进先出"(FIFO)队列,按层次遍历二叉树==========
void Levelorder(BinTree T)
{
int front=0,rear=1;
BinTNode *cq[Max],*p; //定义结点的指针数组cq
cq[1]=T; //根入队
while(front!=rear)
{
front=(front+1)%NodeNum;
p=cq[front]; //出队
printf("%c",p->data); //出队,输出结点的值
if(p->lchild!=NULL)
{
rear=(rear+1)%NodeNum;
cq[rear]=p->lchild; //左子树入队
}
if(p->rchild!=NULL)
{
rear=(rear+1)%NodeNum;
cq[rear]=p->rchild; //右子树入队
}
}
}
//==========主函数=================
int main8()
{
BinTree root;
int chioce;
system("cls");
printf("\n");
printf("输入先序序列创建二叉树(例如:ABD###CE##F##):"); //输入二叉树的先序序列,
fflush(stdin);
root=CreatBinTree(); //创建二叉树,返回根结点
printf("\t********** 菜单 ************\n");
printf("\t1: 先序遍历\n");
printf("\t2: 中序遍历\n");
printf("\t3: 后序遍历\n");
printf("\t4: 层序遍历\n"); //按层次遍历之前,先求出该树的结点数。
printf("\t0: 退出\n");
printf("\t*******************************\n");
do
{
scanf("%d",&chioce);
switch (chioce)
{
case 0:
break;
case 1:
printf("先序遍历: ");
Preorder(root);
break;
case 2:
printf("中序遍历: ");
Inorder(root);
break;
case 3:
printf("后序遍历: ");
Postorder(root);
break;
case 4:
printf("层次遍历: ");
TreeDepth(root);
Levelorder(root);
break;
default:
printf("选择错误,重新选择!");
break;
}
printf("\n");
}while(chioce!=0);
return 0;
}
void InsertSort(int a[],int n)//直接插入排序
{
int i,j,k;
int temp;
for(i=1;i<n;i++)
{
temp=a[i];
j=i-1;
while(j>=0&&temp<a[j])
{
a[j+1]=a[j];
j--;
}
a[j+1]=temp;
printf("i=%-3d",i);
for(k=0;k<n;k++)
printf("%3d",a[k]);
printf("\n");
}
}
void BubbleSort(int R[],int n)//冒泡排序
{
int i,j,k,flag;
int temp;
for(i=0;i<n-1;i++)
{
flag=0;
for(j=n-1;j>i;j--)//比较,找出最小关键字的记录
if(R[j]<R[j-1])
{
temp=R[j];//与进行交换,将最小关键字记录前移
R[j]=R[j-1];
R[j-1]=temp;
flag=1;
}
if(flag==0)//中途结束算法
return;
printf("i=%-3d",i);
for(k=0;k<n;k++)
printf("%3d",R[k]);
printf("\n");
}
}
int menu13()
{
int chioce;
printf("1、直接插入排序\n");
printf("2、改进冒泡排序\n");
printf("3、选择排序\n");
printf("0、退出\n");
printf("请选择:");
scanf("%d",&chioce);
while(chioce<0||chioce>3)
{
printf("请重新选择:");
scanf("%d",&chioce);
}
return chioce;
}
int* In_Put(int* n)
{
int i;
int* a;
printf("要排序的数量:");
scanf("%d",n);
a=(int*)malloc(sizeof(int)*(*n));
printf("输入要排序数:");
for(i=0;i<*n;i++)
{
scanf("%d",&a[i]);
}
printf("\n");
printf("初始关键字");
for(i=0;i<*n;i++)
printf("%3d",a[i]);
printf("\n");
return a;
}
void swap(int*a,int*b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
void select_sort(int A[],int n)
{
int sum=1;
register int i,j,min,m;
for(i=0;i<n-1;i++)
{
min=i;//查找最小值
for(j=i+1;j<n;j++)
{
if(A[min]>A[j])
{
min=j;
}
}
if(min!=i)
{
swap(&A[min],&A[i]);
printf("第%d趟排序结果为:\n",sum++);
for(m=0;m<n;m++)
{
if(m>0)
{
printf("");
}
printf("%3d",A[m]);
}
printf("\n");
}
}
}
int main13()
{
int i,n,chioce;
int* a=NULL;
int* p;
system("cls");
a=In_Put(&n);
p=(int*)malloc(sizeof(int)*n);
do
{
memcpy(p,a,sizeof(int)*n);
chioce=menu13();
switch(chioce)
{
case 0:
free(a);
return 0;
break;
case 1:
InsertSort(p,n);
break;
case 2:
BubbleSort(p,n);
break;
case 3:
select_sort(p,n);
break;
}
printf("最后结果");
for(i=0;i<n;i++)
printf("%3d",p[i]);
printf("\n\n");
system("pause");
system("cls");
}while(chioce!=0);
free(a);
return 0;
}
int menu_main()
{
int chioce;
system("cls");
printf("1:航班\n");
printf("2:猴子\n");
printf("3:二叉树\n");
printf("4:排序\n");
printf("0:退出\n");
printf("请输入选择:");
scanf("%d",&chioce);
while(chioce<0||chioce>4)
{
printf("请重新选择:");
scanf("%d",&chioce);
}
return chioce;
}
int main()
{
int chioce;
do
{
chioce=menu_main();
switch(chioce)
{
case 1:
main3();
break;
case 2:
main7();
break;
case 3:
main8();
break;
case 4:
main13();
break;
}
}while(chioce!=0);
return 0;
}
航班管理系统
最新推荐文章于 2024-03-20 17:24:17 发布