设备管理系统设计.docx
《设备管理系统设计.docx》由会员分享,可在线阅读,更多相关《设备管理系统设计.docx(13页珍藏版)》请在冰豆网上搜索。
设备管理系统设计
8、设备管理
问题描述:
已知一公司需要使用10种设备(设备编号、设备名称),4个部门(部门编号、部门名称),该四个部门需要其他供应商购买使用设备,设计一程序,,完成以下功能:
1)1)购买:
输入设备编号、部门编号(购买),购买日期、设备数量,完成购买的功能:
需要判断设备编号、部门编号是否存在,设备数量是否大于0,购买日期格式是否合法(格式为:
YYYY-MM-DD,如2009-01-02))
2)2)报废:
输入设备编号、部门编号(报废),报废日期、设备数量,完成报废功能:
需要判断设备编号、部门编号是否存在,设备数量是否大于0小于该部门当前正使用设备数量。
报废日期格式是否合法(格式为:
YYYY-MM-DD,如2009-01-02))
3)3)查询指定设备编号购买历史
4)4)指定部门报废设备的历史
5)5)统计指定日期公司各设备可以使用的数量
提示:
●●定义一个日期结构体保存日期,具体信息为:
年、月、日
●●判断购买(报废)日期的格式是否合法时,需要判断长度是否为10,第5位和第8位是否为’-’,字符,将1-4位表示的年份,6-7位表示的月份,9-10位表示的日期分别转换成整数。
判断是否满足构成日期的条件闰年月份只能是1-12之间的数,如果是闰年,二月可以是29天否则不能大于28,1,3,5,7,8,10,12月可以是31天,其余只能小于等于30(建议写成函数)。
●●定义一个结构体数组保存10种设备的信息,具体为:
设备编号,设备名称
●●定义一个结构体数组保存4个部门的信息,具体为部门编号、部门名称
●●定义一个链表保存购买(报废)信息,具体为设备编号、部门编号、购买(报废)日期、操作类型、设备数量、购买单价、购买金额。
其中操作类型为1表示购买、-1表示报废。
●●输入购买信息时,查询设备数组和部门数组,是否设备编号和部门编号存在,如果存在,根据购买数量和购买单价计算购买金额,找出设备的插入购买(报废)链表(操作类型为1)。
●●输入报废信息时,查询购买(报废)链表,计算在报废日期之前购买的设备数量(操作类型为1的),计算在报废日期之前报废的设备数量,得到当前在使用的设备数量,如果输入的报废数量小于当前在使用的设备数量则插入入购买(报废)链表(操作类型为-1)。
●●统计在指定日期,查询购买(报废)链表,计算各个部门在统计日期之前购买的设备数量(操作类型为1的),计算各个部门在统计日期之前报废的设备数量,可以使用一个数组保存这些数据信息,打印形成报表。
/******头文件(.h)***********/
#include"stdio.h" /*I/O函数*/
#include"stdlib.h"/*标准库函数*/
#include"string.h"/*字符串函数*/
#include"ctype.h"/*字符操作函数*/
#include"cstdlib"
/*定义时间结构体*/
structtime{
intyear;
intmouth;
intday;
}a;
/*定义设备结构体*/
structshebei{
charbh[10];
charmc[10];
}b[10];
/*定义部门结构体*/
structbumen{
charbh[10];
charmc[10];
}c[4];
/*定义链表结构体*/
structsave{
charsbbh[10];/*设备编号*/
charbmbh[11];/*部门编号*/
chartime[20];/*日期*/
intitem;/*操作类型1或者-1*/
intn;/*设备数量*/
doubleprice;/*单价*/
doublemoney;/*总金额*/
structsave*next;
};
/*函数申明*/
voidread();/*文件读入函数*/
intmenu_show();/*菜单函数,函数返回值为整数,代表所选的菜单项*/
intmenu_select(intsel,structsave*head);/*根据参数选择相应的功能函数 sel功能选择代码 head链表头节点*/
inttimes(inttime[]);/*日期函数*/
voidsaved(structsave*head);/*购买功能函数*/
voidbroken(structsave*head);/*报废功能*/
voidsearch1(structsave*head);/*查询指定设备编号购买历史*/
voidsearch2(structsave*head);/*查询指定部门报废设备历史*/
voidlist(structsave*head);/*统计指定日期公司各设备可以使用的数量*/
structsave*load(structsave*head);/*读入函数,参数为头节点*/
/*主函数*/
main()
{
structsave*head; /*定义链表的头节点*/
read();
head=(structsave*)malloc(sizeof(structsave));
system("color1F");
head->next=NULL;
system("cls"); /*清屏*/
for(;;)/*无限循环*/
{
menu_select(menu_show(),head);
}
}
/*
根据参数选择相应的功能函数
sel 功能选择代码
head 链表头节点
*/
menu_select(intsel,structsave*head)
{
switch(sel) /*调用主菜单函数,返回值整数作开关语句的条件*/
{
case1:
saved(head);break;/*购买功能*/
case2:
broken(head);break;/*报废功能*/
case3:
search1(head);break;/*查询指定设备编号购买历史*/
case4:
search2(head);break;/*查询指定部门报废设备历史*/
case5:
list(head);break;/*统计指定日期公司各设备可以使用的数量*/
case6:
save(head);break;
case7:
head=load(head);break;
case0:
exit(0);/*如返回值为11则程序结束*/
}
}
/*菜单函数,函数返回值为整数,代表所选的菜单项*/
intmenu_show()
{
chars[80];
intc;
printf("\n\n");
printf("\n\n 欢迎使用设备管理系统!
!
!
!
!
!
!
!
\n\n");
printf("\n\n\n\n\n 请按任意键继续......\n");/*提示压任意键继续*/
getch();/*读入任意字符*/
system("cls"); /*清屏*/
printf(" ********************设备管理系统***********************\n\n");
printf(" 1.购买设备!
!
!
\n");
printf(" 2.报废设备!
!
!
\n");
printf(" 3.查询指定设备编号购买历史!
!
!
\n");
printf(" 4.查询指定部门报废设备历史!
!
!
\n");
printf(" 5.统计指定日期公司各设备可以使用的数量!
!
!
\n");
printf(" 6.导入购买与报废信息!
!
!
\n");
printf(" 7.导出购买与报废信息!
!
!
\n");
printf(" 0.退出系统!
!
!
\n");
printf(" *********************************************************\n");
do{
printf("\n 请输入0-7之间的数选择需要的操作(0~7):
");/*提示输入选项*/
scanf("%s",s);/*输入选择项*/
c=atoi(s);/*将输入的字符串转化为整型数*/
}while(c<0||c>7);/*选择项不在0~7之间重输*/
returnc;/*返回选择项,主程序根据该数调用相应的函数*/
}
/*文件读入函数*/
voidread()
{
inti=0;
FILE*fp1,*fp2;
if((fp1=fopen("c:
\\f1.txt","r"))==NULL)
{
printf("打开出错!
");
exit
(1);
}
while(!
feof(fp1))
{
fscanf(fp1,"%s%s",b[i].bh,b[i].mc);
i++;
}
fclose(fp1);
i=0;
if((fp2=fopen("c:
\\f2.txt","r"))==NULL)
{
printf("打开出错!
");
exit
(1);
}
while(!
feof(fp2))
{
fscanf(fp2,"%s%s",c[i].bh,c[i].mc);
i++;
}
fclose(fp2);
}
/*日期函数*/
inttimes(chartime[])
{
intflag=0;
intn=0;
char*p=time;
if(strlen(time)!
=10)
returnflag;
while(*p!
='-')
{
n=n*10+*p-'0';
p++;
}
a.year=n;
p++; n=0;
while(*p!
='-')
{
n=n*10+*p-'0';
p++;
}
a.mouth=n;
p++; n=0;
while(*p!
='\0')
{
n=n*10+*p-'0';
p++;
}
a.day=n;
if(a.mouth>0&&a.mouth<=12)
{ if(a.year%4==0&&a.year%100!
=0||a.year%400==0)
{ if(a.mouth==2)
{ if(a.day>=1&&a.day<=29)
flag=1;}
elseif(a.mouth==1||a.mouth==3||a.mouth==5||a.mouth==7||a.mouth==8||a.mouth==10||a.mouth==12)
{ if(a.day>=1&&a.day<=31)
flag=1;}
else
{ if(a.day>=1&&a.day<=30)
flag=1;}
}
else
{ if(a.mouth==2)
{if(a.day>=1&&a.day<=28)
flag=1;}
elseif(a.mouth==1||a.mouth==3||a.mouth==5||a.mouth==7||a.mouth==8||a.mouth==10||a.mouth==12)
{ if(a.day>=1&&a.day<=31)
flag=1;}
else
{ if(a.day>=1&&a.day<=30)
flag=1;}
}
}
returnflag;
}
/*购买功能函数*/
voidsaved(structsave*head)
{
structsave*p,*temp;
inti,j,k,k1,m=0,flag=0,flag1=0;
p=head;
while(p->next!
=NULL)
{
p=p->next;
}
system("cls"); /*清屏*/
printf("请输入购买信息:
\n\n");
temp=malloc(sizeof(structsave));
temp->next=NULL;
printf("设备编号 部门编号 购买日期(格式如2009-01-01) 设备数量 设备单价\n\n");
printf("**************************************************************************\n\n");
scanf("%s%s%s%d%lf",temp->sbbh,temp->bmbh,temp->time,&temp->n,&temp->price);
do{for(k=0;k<10;k++)
if(!
strcmp(temp->sbbh,b[k].bh))
{
flag=1;break;}
if(flag==0)
{ printf("设备编号输入有误,请重新输入:
\n");
scanf("%s",temp->sbbh);}}while(flag==0);
do{for(k1=0;k1<4;k1++)
if(!
strcmp(temp->bmbh,c[k1].bh))
{
flag1=1;break;}
if(flag1==0)
{ printf("部门编号输入有误,请重新输入:
\n");
scanf("%s",temp->bmbh);}}while(flag1==0);
while(times(temp->time)!
=1){
printf("时间输入有误,请重新输入:
\n");
scanf("%s",temp->time);}
while(temp->n<=0){
printf("设备数量输入有误,请重新输入:
\n");
scanf("%d",&temp->n);}
while(temp->price<=0){
printf("设备单价输入有误,请重新输入:
\n");
scanf("%lf",&temp->price);}
for(i=0;i<10;i++)
for(j=0;j<4;j++)
{ if(!
strcmp(temp->sbbh,b[i].bh)&&!
strcmp(temp->bmbh,c[j].bh))
if(times(temp->time)&&temp->n>0&&temp->price>0)
{
temp->item=1;
temp->money=(temp->n)*(temp->price);
p->next=temp;
m=1;
printf("购买成功!
!
!
谢谢使用!
!
!
\n\n");
}
}
if(m==0)
printf("对不起,购买失败,请重新购买!
!
!
\n");
}
/*报废功能*/
voidbroken(structsave*head)
{
structsave*p,*temp;
intk,k1,m=0,flag=0,flag1=0;
p=head;
system("cls"); /*清屏*/
printf("请输入报废信息:
\n\n");
temp=malloc(sizeof(structsave));
temp->next=NULL;
printf("设备编号 部门编号 报废日期(格式如2009-01-01) 设备数量 \n\n");
printf("**********************************************************************\n\n");
scanf("%s%s%s%d",temp->sbbh,temp->bmbh,temp->time,&temp->n);
do{for(k=0;k<10;k++)
if(!
strcmp(temp->sbbh,b[k].bh))
{
flag=1;break;}
if(flag==0)
{ printf("设备编号输入错误,请重新输入:
\n");
scanf("%s",temp->sbbh);}}while(flag==0);
do{for(k1=0;k1<4;k1++)
if(!
strcmp(temp->bmbh,c[k1].bh))
{
flag1=1;break;}
if(flag1==0)
{ printf("部门编号输入有误,请重新输入:
\n");
scanf("%s",temp->bmbh);}}while(flag1==0);
while(times(temp->time)!
=1){
printf("时间输入有误,请重新输入:
\n");
scanf("%s",temp->time);}
while(temp->n<=0){