实验室设备管理系统

在这里插入图片描述

#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;
}
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值