#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_NUM 100 //数组最大长度
typedef struct _EQUIPMENT
{
int num;//编号
int is_bolish;//是否报废
char style[20];//种类
char name[20];//名称
char buy_date[20];//购入日期
char bolish_date[20];//报废日期
float price;//价格
}EQU;
int Addnew(EQU arr[],int cur)//添加新设备
{
system("cls");
printf("输入编号:");
scanf("%d",&arr[cur].num);
printf("输入设备种类:");
scanf("%s",arr[cur].style);
printf("输入设备名称:");
scanf("%s",arr[cur].name);
printf("输入购入日期:");
scanf("%s",arr[cur].buy_date);
printf("输入购入价格:");
scanf("%f",&arr[cur].price);
printf("设备是否报废(1:报废 0:未报废):");
scanf("%d",&arr[cur].is_bolish);
if(arr[cur].is_bolish==1)//根据是否报废 判断是否要输入报废日期
{
printf("输入报废日期:");
scanf("%s",arr[cur].bolish_date);
}
printf("录入成功!\n");
system("pause");
return cur+1;//数组长度+1
}
/*
显示设备
根据首地址和数量n显示
*/
void Display(EQU arr[],int n)
{
int i;
system("cls");
printf("%10s%10s%10s%10s%10s%10s%10s\n","编号","种类","名称","购入日期","是否报废","报废日期","购入价格");
for(i=0;i<n;i++)
{
printf("%10d",arr[i].num);
printf("%10s",arr[i].style);
printf("%10s",arr[i].name);
printf("%10s",arr[i].buy_date);
printf("%10d",arr[i].is_bolish);
if(arr[i].is_bolish == 1)//如果报废显示报废日期
{
printf("%10s",arr[i].bolish_date);
}
else
{
printf("%10s","-");
}
printf("%10.2f\n",arr[i].price);
}
}
/*保存到文件*/
void Save_File(EQU arr[],int cur)
{
int i;
FILE* fp=fopen("equipment.txt","w+");
if(fp==NULL)
{
return ;
}
for(i=0;i<cur;i++)
{
fwrite(&arr[i],sizeof(EQU),1,fp);
}
fclose(fp);
}
/*加载文件*/
int Open_File(EQU arr[])
{
int i=0;
FILE* fp=fopen("equipment.txt","r+");
if(fp==NULL)
{
return 0;
}
while(fread(&arr[i],sizeof(EQU),1,fp))
{
i++;
}
return i;
}
/*查找设备*/
void Serach_Num(EQU arr[],int cur)
{
int i;
int temp;
system("cls");
printf("请输入要查询的设备编号:");
scanf("%d",&temp);
for(i=0;i<cur;i++)
{
if(temp==arr[i].num)
{
break;
}
}
if(i==cur)//遍历结束i==cur 如果找到会break i<cur
{
printf("无该设备信息!\n");
}
else
{
Display(&arr[i],1);
}
system("pause");
}
/*修改设备信息*/
void Modify(EQU arr[],int cur)
{
int i;
int temp;
char chioce[20];
EQU swap;
system("cls");
printf("请输入要修改的设备编号:");
scanf("%d",&temp);
for(i=0;i<cur;i++)
{
if(temp==arr[i].num)
{
break;
}
}
if(i==cur)
{
printf("无该设备信息!\n");
system("pause");
return ;
}
Display(&arr[i],1);
printf("输入新编号:");
scanf("%d",&swap.num);
printf("输入设备种类:");
scanf("%s",swap.style);
printf("输入设备名称:");
scanf("%s",swap.name);
printf("输入购入日期:");
scanf("%s",swap.buy_date);
printf("输入购入价格:");
scanf("%f",&swap.price);
printf("设备是否报废(1:报废 0:未报废):");
scanf("%d",&swap.is_bolish);
if(swap.is_bolish==1)
{
printf("输入报废日期:");
scanf("%s",swap.bolish_date);
}
printf("确认修改?(Y/N)");
scanf("%s",chioce);
if(!strcmp(chioce,"Y")||!strcmp(chioce,"y"))//确认修改则将其覆盖
{
arr[i]=swap;
printf("修改成功!\n");
}
system("pause");
}
void Total(EQU arr[],int cur)
{
int i;
int temp=0;
system("cls");
for(i=0;i<cur;i++)
{
if(1==arr[i].is_bolish)
{
temp++;
}
}
printf("损坏设备数量:%d\n",temp);
printf("未损坏设备数量:%d\n",cur-temp);
printf("设备总数量:%d\n",cur);
system("pause");
}
int Del_Num(EQU arr[],int cur)
{
int i,j;
int temp;
char chioce[20];
system("cls");
printf("请输入要删除的设备编号:");
scanf("%d",&temp);
for(i=0;i<cur;i++)
{
if(temp==arr[i].num)
{
break;
}
}
if(i==cur)
{
printf("无该设备信息!\n");
system("pause");
return cur;
}
Display(&arr[i],1);
printf("确认删除?(Y/N)");
scanf("%s",chioce);
if(!strcmp(chioce,"Y")||!strcmp(chioce,"y"))
{
for(j=i;j<cur;j++)//用后一个元素覆盖前一个元素 达到删除效果
{
arr[j]=arr[j+1];
}
printf("删除成功!\n");
}
else
{
return cur;
}
return cur-1;//删除后数量-1
}
int Menu()
{
int chioce;
system("cls");
printf("1:录入设备信息\n");
printf("2:修改设备信息\n");
printf("3:查询设备信息\n");
printf("4:遗损设备删除\n");
printf("5:显示全部设备\n");
printf("6:统计设备信息\n");
printf("0:退出\n");
printf("请输入选项:");
scanf("%d",&chioce);
while(chioce<0||chioce>6)
{
printf("范围错误,请重新输入:");
scanf("%d",&chioce);
}
return chioce;
}//菜单函数 提供用户菜单 返回给主函数用户选项
int main()
{
int chioce;
EQU equ[MAX_NUM];//结构体数组
int NUM = 0;//记录数组长度
NUM=Open_File(equ);//读取文件
do
{
chioce=Menu();//获取用户选择
switch(chioce)//根据选择进入相应功能
{
case 1:
NUM=Addnew(equ,NUM);
break;
case 2:
Modify(equ,NUM);
break;
case 3:
Serach_Num(equ,NUM);
break;
case 4:
NUM=Del_Num(equ,NUM);
break;
case 5:
Display(equ,NUM);
system("pause");
break;
case 6:
Total(equ,NUM);
break;
}
}while(chioce!=0);
Save_File(equ,NUM);//保存文件
return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/182253.html原文链接:https://javaforall.cn