#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct _Plane
{
char no[20];//客机编号
char style[20];//客机型号
char buy_time[20];//购买时间
char use_time[20];//服役时间
char fly[20];//已飞总里程
char more[20];//备注信息
int num1;//经济舱
int num2;//公务
int num3;//头等舱
}Plane;
//输入客机信息
void Input(Plane plane[],int* n)
{
system("cls");
printf("请输入客机编号:");
scanf("%s",plane[*n].no);
printf("请输入客机型号:");
scanf("%s",plane[*n].style);
printf("请输入客机购买时间:");
scanf("%s",plane[*n].buy_time);
printf("请输入客机服役时间:");
scanf("%s",plane[*n].use_time);
printf("请输入客机已飞行总里数:");
scanf("%s",plane[*n].fly);
printf("请输入客机经济舱座位数:");
scanf("%d",&plane[*n].num1);
printf("请输入客机公务舱座位数:");
scanf("%d",&plane[*n].num2);
printf("请输入客机头等舱座位数:");
scanf("%d",&plane[*n].num3);
printf("请输入客机备注信息:");
scanf("%s",plane[*n].more);
printf("录入成功!\n");
system("pause");
(*n)++;//客机的数量增加1
}
//显示客机信息
void Display(Plane plane[],int n)
{
int i;
printf("%-10s%-10s","编号","型号");
printf("%-10s%-10s","购买时间","服役时间");
printf("%-10s%-15s","已飞行","经济舱座位");
printf("%-15s%-15s","公务舱座位","头等舱座位");
printf("%-20s\n","备注");
for(i=0;i<n;i++)//遍历结构体数组 输出信息
{
printf("%-10s%-10s",plane[i].no,plane[i].style);
printf("%-10s%-10s",plane[i].buy_time,plane[i].use_time);
printf("%-10s%-15d",plane[i].fly,plane[i].num1);
printf("%-15d%-15d",plane[i].num2,plane[i].num3);
printf("%-20s\n",plane[i].more);
}
}
//根据编号查找
void Search_By_Num(Plane plane[],int m)
{
int i;
int flag=0;
char temp[20];
system("cls");
printf("请输入要查询的客机编号:");
scanf("%s",temp);
for(i=0;i<m;i++)//遍历结构体数组
{
if(!strcmp(temp,plane[i].no))//如果找到
{
Display(&plane[i],1);//显示该图书
flag=1;//说明已经找到
}
}
if(flag==0)//还是等于0说明没找到
{
printf("无该编号!\n");
}
system("pause");
}
//根据型号查找
void Search_By_Style(Plane plane[],int m)
{
int i;
int flag=0;
char temp[20];
system("cls");
printf("请输入要查询的客机型号:");
scanf("%s",temp);
for(i=0;i<m;i++)
{
if(!strcmp(temp,plane[i].style))//如果相同
{
Display(&plane[i],1);//显示该信息
flag=1;//说明已经找到
}
}
if(flag==0)
{
printf("无该书名!\n");
}
system("pause");
}
//删除客机信息
void Del(Plane plane[],int* n)
{
int i,m=*n,j;
int flag=0;
char temp[20];
system("cls");
printf("请输入要删除的客机编号:");
scanf("%s",temp);
for(i=0;i<m;i++)
{
if(!strcmp(temp,plane[i].no))//如果号相同
{
flag=1;//说明已经找到
break;
}
}
if(flag==0)
{
printf("无该编号!\n");
system("pause");
return ;
}
Display(&plane[i],1);//显示该信息
printf("是否删除?(Y/N)");
scanf("%s",temp);
if(!strcmp(temp,"Y")||!strcmp(temp,"y"))
{
for(j=i;j<m;j++)//结构体数组前移
{
plane[j]=plane[j+1];//用后一个数据覆盖前一个 达到删除效果
}
printf("删除成功!\n");
(*n)--;//删除成功 结构体数组长度减一
}
else
{
printf("已取消删除!\n");
}
system("pause");
}
void Modify(Plane plane[],int m)
{
int i;
int flag=0;
char temp[20];
Plane swap;
system("cls");
printf("请输入要修改的客机编号:");
scanf("%s",temp);
for(i=0;i<m;i++)
{
if(!strcmp(temp,plane[i].no))//如果号相同
{
flag=1;//说明已经找到
break;
}
}
if(flag==0)
{
printf("无该编号!\n");
system("pause");
return ;
}
Display(&plane[i],1);//显示该信息
printf("请输入客机型号:");
scanf("%s",swap.style);
printf("请输入客机购买时间:");
scanf("%s",swap.buy_time);
printf("请输入客机服役时间:");
scanf("%s",swap.use_time);
printf("请输入客机已飞行总里数:");
scanf("%s",swap.fly);
printf("请输入客机经济舱座位数:");
scanf("%d",&swap.num1);
printf("请输入客机公务舱座位数:");
scanf("%d",&swap.num2);
printf("请输入客机头等舱座位数:");
scanf("%d",&swap.num3);
printf("请输入客机备注信息:");
scanf("%s",swap.more);
strcpy(swap.no,temp);
printf("是否修改?(Y/N)");
scanf("%s",temp);
if(!strcmp(temp,"Y")||!strcmp(temp,"y"))
{
plane[i]=swap;
printf("已成功修改!\n");
}
else
{
printf("已取消修改!\n");
}
system("pause");
}
int Menu()
{
int i;
system("cls");
printf("1:录入客机信息\n");
printf("2:显示客机信息\n");
printf("3:根据编号查询\n");
printf("4:修改客机信息\n");
printf("5:删除客机信息\n");
printf("6:根据型号查询\n");
printf("7:按编号显示\n");
printf("8:统计各舱座位\n");
printf("0:退出系统\n");
printf("请输入选择:");
scanf("%d",&i);
while(i<0||i>9)//判断输入的是不是0-9范围内
{
printf("请重新选择:");
scanf("%d",&i);
}
return i;
}
void Save(Plane arr[],int n)//保存信息到文件
{
int i;
FILE* fp;
fp= fopen("plane_info.txt","w+");//打开文件
if(fp==NULL)//打开失败则退出
{
return;
}
for(i=0;i<n;i++)//循环写入到文件
{
fwrite(&arr[i],1,sizeof(Plane),fp);
}
fclose(fp);
}
int Read(Plane arr[])//读取文件
{
int i=0;
FILE* fp;
fp= fopen("plane_info.txt","r+");
if(fp==NULL)
{
return 0;
}
while(fread(&arr[i++],1,sizeof(Plane),fp));//当文件不为空 一直读取
fclose(fp);
if(i>=1)//把读取的回车去掉
{
return i-1;
}
return 0;
}
void Sort(Plane arr[],int n)
{
int i,j;
Plane swap;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(strcmp(arr[i].no,arr[j].no)>0)
{
swap=arr[i];
arr[i]=arr[j];
arr[j]=swap;
}
}
}
}
void Total(Plane arr[],int n)
{
int sum[3]={0};
int i;
system("cls");
for(i=0;i<n;i++)
{
sum[0]+=arr[i].num1;
sum[1]+=arr[i].num2;
sum[2]+=arr[i].num3;
}
printf("总客机数:%d\n",n);
printf("总座位数量:%d\n",sum[0]+sum[1]+sum[2]);
printf("总经济舱数量:%d\n",sum[0]);
printf("总公务舱数量:%d\n",sum[1]);
printf("总头等舱数量:%d\n",sum[2]);
system("pause");
}
int main()
{
int choice;
Plane plane[100];//记录信息
int n=Read(plane);//数量
system("mode con: cols=120 lines=30");//设置屏幕大小
while(1)
{
choice=Menu();//获取用户选择
switch(choice)//根据选择进入相应功能
{
case 0:
Save(plane,n);
exit(0);
break;
case 1:
Input(plane,&n);
break;
case 2:
system("cls");
Display(plane,n);
system("pause");
break;
case 3:
Search_By_Num(plane,n);
break;
case 4:
Modify(plane,n);
break;
case 5:
Del(plane,&n);
break;
case 6:
Search_By_Style(plane,n);
break;
case 7:
Sort(plane,n);
system("cls");
Display(plane,n);
system("pause");
break;
case 8:
Total(plane,n);
break;
}
}
return 0;
}
相关文章: