#include<stdio.h>
#include <stdlib.h>
#include <string.h>
#include <memory.h>
#define SIZE 2
#define NN 4
#define NM 7
typedef struct Used
{
char used[NM];
struct Used *next1;
}Used,*U;
struct MAC
{
char MID[6];
char uing[NN][7];
U usd; //链表
}Mac[SIZE],Mac1[SIZE];
typedef struct Part
{
char PID[6];
char RE[100];
struct Part *next;
}Part,*P;
//建立链表
void CreateList(P &L)
{
int sum=0;
P p1,p2;
L=(P)malloc(sizeof(Part));
L->next=NULL;
p1=(P)malloc(sizeof(Part));
p1->next=L->next;
L->next=p1;
printf("注意:当零件ID为0时输入结束\n");
while(1)
{
//getchar();
printf("请输入零件ID\n");
gets(p1->PID);
if(strcmp(p1->PID,"0")==0)
{
sprintf(L->PID,"%d",sum);
break;
}
printf("请输入该零件ID的状态转化流程\n");
gets(p1->RE);
p2=(P)malloc(sizeof(Part));
p2->next=p1->next;
p1->next=p2;
p1=p2;
sum++;
}
}
//建立链表1
void CreateList1(U &L)
{
int sum=0;
U p1,p2;
L=(U)malloc(sizeof(Used));
L->next1=NULL;
p1=(U)malloc(sizeof(Used));
p1->next1=L->next1;
L->next1=p1;
printf("注意:当零件ID为0时输入结束\n");
while(1)
{
printf("请输入零件ID\n");
gets(p1->used);
if(strcmp(p1->used,"0")==0)
{
sprintf(L->used,"%d",sum);
break;
}
p2=(U)malloc(sizeof(Used));
p2->next1=p1->next1;
p1->next1=p2;
p1=p2;
sum++;
}.
printf("\n");
}
//把数据写入到文件中
void PrintFile(P L,FILE *fp)
{
P p1;
p1=L;
for(;p1->next!=NULL;p1=p1->next)
fwrite(p1,sizeof(Part),1,fp);
fclose(fp);
printf("数据成功保存到文件中\n");
}
//从文件中读取数据
void ReadFile(FILE *fp,P &L)
{
P p1,p2;
L=(P)malloc(sizeof(Part));
L->next=NULL;
fread(L,sizeof(Part),1,fp);
p1=(P)malloc(sizeof(Part));
p1->next=L->next;
L->next=p1;
while(!feof(fp))
{
fread(p1,sizeof(Part),1,fp);
p2=(P)malloc(sizeof(Part));
fread(p2,sizeof(Part),1,fp);
p2->next=p1->next;
p1->next=p2;
p1=p2;
}
fclose(fp);
printf("读取数据成功!\n");
}
void tip()
{
printf("************************操作提示*******************\n");
printf("输入1:查询指定机械ID现在所使用的所有零件ID\n");
printf("输入2:查询指定机械ID所使用过的所有零件ID\n");
printf("输入3:查询处于各个状态的零件数量\n");
printf("输入4:查询某个ID的零件在其生命周期的状态转换流程\n");
printf("输入5:查询所有使用过返修零件的机械编号\n");
printf("输入6:输入初始数据\n");
printf("输入7:更改指定ID零件的状态\n");
printf("输入8:结束操作\n");
printf("***************************************************\n");
}
void tip1()
{
printf("************************操作提示*******************\n");
printf("输入11:查询处于“存储”状态的零件数量\n");
printf("输入12:查询处于“正在使用”状态的零件数量\n");
printf("输入13:查询处于“返修”状态的零件数量\n");
printf("输入14:查询处于“报废”状态的零件数量\n");
printf("输入15:结束操作\n");
printf("***************************************************\n");
}
//从文件1中读取数据
void ReadFile1()
{
U p1,p2;
//重新建立链表
int i,j,Count;
FILE *fp;
if((fp=fopen("T1.dat","rb"))==NULL)
{
printf("cannot open file\n");
exit(0);
}
for(i=1;i<SIZE;i++)
{
fread(&Mac1[i],sizeof(MAC),1,fp);
Mac1[i].usd=(U)malloc(sizeof(Used));
fread(Mac1[i].usd,sizeof(Used),1,fp);
Mac1[i].usd->next1=NULL;
Count=atoi(Mac1[i].usd->used);
p2=(U)malloc(sizeof(Used));
fread(p2,sizeof(Used),1,fp);
p2->next1=Mac1[i].usd->next1;
Mac1[i].usd->next1=p2;
for(j=0;j<Count;j++)
{
p1=(U)malloc(sizeof(Used));
fread(p1,sizeof(Used),1,fp);
p1->next1=NULL;
p2->next1=p1;
p2=p1;
}
}
fclose(fp);
}
int main()
{
P x2,x3,x4,x5;
P x22,x33,x44,x55;
FILE *fp1,*fp2,*fp3,*fp4,*fp5;
Part h2,h3,h4,h5;
int s2,s3,s4,s5;
int i;
int t3;
char ID[6];
do
{
tip();
scanf("%d",&i);
switch(i)
{
case 1:
int r1,r2;
printf("请输入要查询的机器ID:");
scanf("%s",ID);
ReadFile1();
r1=atoi(ID);
for(r2=1;r2<NN;r2++)
printf("%s ",Mac1[r1].uing[r2]);
printf("\n");
break;
case 2:
U w;
int r4;
printf("请输入要查询的机器ID:");
scanf("%s",ID);
ReadFile1();
r4=atoi(ID);
w=Mac1[r4].usd;
w=w->next1;
while(w->next1!=NULL)
{
printf("%s ",w->used);
w=w->next1;
}
printf("\n");
break;
case 3:
printf("查询处于各个状态的零件数量\n");
do
{
tip1();
scanf("%d",&t3);
switch(t3);
{
case 11:
printf("查询处于“存储”状态的零件数量\n");
if((fp2=fopen("T2.dat","rb"))==NULL)
{
printf("cannot open file\n");
exit(0);
}
fread(&h2,sizeof(Part),1,fp2);
s2=atoi(h2.PID);
printf("“存储”状态的零件数量有%d件\n",s2);
fclose(fp2);
break;
case 12:
printf("查询处于“正在使用”状态的零件数量\n");
if((fp3=fopen("T3.dat","rb"))==NULL)
{
printf("cannot open file\n");
exit(0);
}
fread(&h3,sizeof(Part),1,fp3);
s3=atoi(h3.PID);
printf("“正在使用”状态的零件数量有%d件\n",s3);
fclose(fp3);
break;
case 13:
printf("查询处于“返修”状态的零件数量\n");
if((fp4=fopen("T4.dat","rb"))==NULL)
{
printf("cannot open file\n");
exit(0);
}
fread(&h4,sizeof(Part),1,fp4);
s4=atoi(h4.PID);
printf("“返修”状态的零件数量有%d件\n",s4);
fclose(fp4);
break;
case 14:
printf("查询处于“报废”状态的零件数量\n");
if((fp5=fopen("T5.dat","rb"))==NULL)
{
printf("cannot open file\n");
exit(0);
}
fread(&h5,sizeof(Part),1,fp5);
s5=atoi(h5.PID);
printf("“报废”状态的零件数量有%d件\n",s5);
fclose(fp5);
break;
case 15:
printf("查询完毕\n");
break;
}
}while(t3!=15);
break;
case 4:
int i2,i3,i4,i5;
printf("查询指定ID零件的生命周期的状态转换流程\n");
printf("\n");
char ID4[6];
printf("请输入所要查询的零件ID:");
scanf("%s",ID4);
int flag;
flag=1;
if((fp2=fopen("T2.dat","rb"))==NULL)
{
printf("cannot open file\n");
exit(0);
}
ReadFile(fp2,x22);
P h22;
h22=x22->next;
while(h22->next!=NULL)
{
if(strcmp(h22->PID,ID4)==0)
{
printf("%s \n",h22->RE);
flag=0;
break;
}
h22=h22->next;
}
if(flag==1)
{
if((fp3=fopen("T3.dat","rb"))==NULL)
{
printf("cannot open file\n");
exit(0);
}
ReadFile(fp3,x33);
P h33;
h33=x33->next;
while(h33->next!=NULL)
{
if(strcmp(h33->PID,ID4)==0)
{
printf("%s \n",h33->RE);
flag=0;
break;
}
h33=h33->next;
}
}
if(flag==1)
{
if((fp4=fopen("T4.dat","rb"))==NULL)
{
printf("cannot open file\n");
exit(0);
}
ReadFile(fp4,x44);
P h44;
h44=x44->next;
while(h44->next!=NULL)
{
if(strcmp(h44->PID,ID4)==0)
{
printf("%s \n",h44->RE);
flag=0;
break;
}
h44=h44->next;
}
}
if(flag==1)
{
if((fp5=fopen("T5.dat","rb"))==NULL)
{
printf("cannot open file\n");
exit(0);
}
ReadFile(fp5,x55);
P h55;
h55=x55->next;
while(h55->next!=NULL)
{
if(strcmp(h55->PID,ID4)==0)
{
printf("%s \n",h55->RE);
flag=0;
break;
}
h55=h55->next;
}
}
if(flag==1)
{
printf("查询不到对应ID的零件,请核对后再输入\n");
}
break;
case 5:
int flag1;
flag1=1;
U w1;
int r7
评论1