#include "stdio.h"
#include "stdlib.h"
#include "string.h"
struct shebei
{
char ID[10];
char name[15];
char kind[15];
char over[15];
char yesno[10];
char time[10];
char price[10];
};
typedef struct node
{
struct shebei data;
struct node *next; //建立壹個鏈表。
}Node;
void Add(Node *equip) //添加記錄
{
Node *p,*r,*s;
char id[10]; //先用於輸入ID,也用於判斷是否跳出循環
r=equip;
s=equip->next; //使s為第壹個有用的結點
while(r->next!=NULL) //這個循環的作用是使r為最後壹個有用的結點
r=r->next; //將指針置於最末尾
while(1)
{
printf(">>>>>>>>>>提示:輸入0則返回主菜單!\n");
printf("\n請妳輸入設備ID號:");
scanf("%s",id);
if(strcmp(id,"0")==0) break;
p=(Node *)malloc(sizeof(Node)); //申請空間
strcpy(p->data.ID,id);
printf("\n請輸入設備名稱:");
scanf("%s",p->data.name);
printf("\n請輸入設備種類:");
scanf("%s",p->data.kind);
printf("\n請輸入報廢日期:");
scanf("%s",&p->data.over);
printf("\n請輸入設備是否報廢:");
scanf("%s",&p->data.yesno);
printf("\n請輸入設備購買時間:");
scanf("%s",&p->data.time);
printf("\n請輸入設備價格:");
scanf("%s",&p->data.price);
printf(">>>>>>>>>>提示:已經完成壹條記錄的添加。\n");
p->next=NULL;
r->next=p; //這壹步是必需的,將p與先前的鏈表連起來構成壹條新鏈表
r=p; //也是必需的.將r 又重設為新鏈的最後壹個有用結點
}
}
void Modify(Node *equip)//修改
{
Node *p;
char find[20];
if(!equip->next)
{
printf("\n>>>>>>>>>>提示:沒有資料可以修改!\n");
return;
}
printf("請輸入要修改的設備ID號:");
scanf("%s",find);
p=equip->next;
while(p!=NULL)
{
if(strcmp(p->data.ID,find)==0) //如果找到的話返回的是符合要求
break;
p=p->next;
}
if(p) //若找到
{
int x;
while(1)
{
printf("完成修改請輸入0否則輸入任意數再進行修改:");
scanf("%d",&x);
if(x==0)
{break;}
printf("請輸入新設備號(原來是 %s ):",p->data.ID);
scanf("%s",p->data.ID);
printf("請輸入新設備名稱(原來是 %s ):",p->data.name);
scanf("%s",p->data.name);
printf("請輸入新設備設備種類名稱(原來是 %s ):",p->data.kind);
scanf("%s",p->data.kind);
printf("請輸入新設備報廢日期名稱(原來是 %s ):",p->data.over);
scanf("%s",p->data.over);
printf("請輸入新設備是否報廢(原來是 %s ):",p->data.yesno);
scanf("%s",p->data.yesno);
printf("請輸入新設備購買時間(原來是 %s ):",p->data.kind);
scanf("%s",p->data.time);
printf("請輸入新設備價格(原來是 %s ):",p->data.price);
scanf("%s",p->data.price);
printf("\n>>>>>>>>>>提示:該項記錄資料已經成功修改!\n");
}
}
else printf("\n>>>>>>>>>>提示:妳要修改的信息不存在!\n");
}
void Disp(Node *equip)//輸出記錄
{
Node *p;
p=equip->next;
if(!p)
{
printf("\n>>>>>>>>>>提示:沒有記錄可以顯示!\n");
return;
}
printf("\t\t\t\t顯示結果\n");
printf("設備號 設備名稱 設備種類 報廢日期 是否報廢 購買時間 價格\n");
while(p)
{
printf("\n%-13s%-11s%-7s%-10s%-13s%-10s%-5s\n",p->data.ID,p->data.name,p->data.kind,p->data.over,p->data.yesno,p->data.time,p->data.price);
p=p->next;
}
}
void Tongji(Node *equip)//統計
{
Node *p;
int sel;int flag2=0,ha=0;
p=equip->next;
char find[20];
if(!equip->next) //若鏈表為空
{
printf("\n>>>>>>>>>>提示:沒有資料可以統計分類!\n");
return;
}
printf(">>>>>>>>>>提示:\n=====>0退出\n=====>1按設備號統計\n=====>2按設備名稱統計\n");
scanf("%d",&sel);
if(sel==1)
{
printf("\n輸入妳要統計分類的設備號:");
scanf("%s",find);
while(p)
{
if(strcmp(p->data.ID,find)==0)
{
flag2++;
}
if(flag2==1&&ha!=flag2)
{ printf("設備號 設備名稱 設備種類 報廢日期 是否報廢 購買時間 價格\n");
printf("\n%-13s%-11s%-7s%-10s%-13s%-10s%-5s\n",p->data.ID,p->data.name,p->data.kind,p->data.over,p->data.yesno,p->data.time,p->data.price);
ha=flag2;
}
else if(flag2>ha){printf("\n%-13s%-11s%-7s%-10s%-13s%-10s%-5s\n",p->data.ID,p->data.name,p->data.kind,p->data.over,p->data.yesno,p->data.time,p->data.price);ha=flag2;}
p=p->next;
}
if(flag2)
{
printf("\n*************************按設備號%s統計分類的有%d條記錄:*************************\n\n",find,flag2);
}
else {printf("\n按設備號%s統計的結果為0個\n\n",find);}
}
else if(sel==2)
{
printf("\n輸入妳要統計分類的設備名稱:");
scanf("%s",find);
while(p)
{
if(strcmp(p->data.name,find)==0)
{
flag2++;
}
if(flag2==1&&ha!=flag2)
{ printf("設備號 設備名稱 設備種類 報廢日期 是否報廢 購買時間 價格\n");
printf("\n%-13s%-11s%-7s%-10s%-13s%-10s%-5s\n",p->data.ID,p->data.name,p->data.kind,p->data.over,p->data.yesno,p->data.time,p->data.price);
ha=flag2;
}
else if(flag2>ha){printf("\n%-13s%-11s%-7s%-10s%-13s%-10s%-5s\n",p->data.ID,p->data.name,p->data.kind,p->data.over,p->data.yesno,p->data.time,p->data.price);ha=flag2;}
p=p->next;
}
if(flag2)
{
printf("\n******************按設備名稱%s統計的有%d條記錄:********************\n\n",find,flag2);
}
else {printf("\n按設備名稱%s統計分類的結果為0個\n\n",find);}
}
else if(sel==0) return;
}
void main()
{
Node *equip;
FILE *fp;
int flag;
Node *p,*q;
printf("\t\t\t\t設備管理系統\n");
equip=(Node*)malloc(sizeof(Node));
equip->next=NULL;
p=equip;
fp=fopen("設備管理系統","wb+");
q=(Node*)malloc(sizeof(Node));
if(fread(q,sizeof(Node),1,fp)) //將文件的內容放入接點中
{
q->next=NULL;
p->next=q;
p=q; //將該接點掛入鏈表中
}
fclose(fp); //關閉文件
while(1)
{
printf("**************************************目錄**************************************");
printf("\n1添加記錄\n");
printf("\n2修改記錄\n");
printf("\n3顯示記錄\n");
printf("\n4統計分類記錄\n");
printf("\n0*-EXIT-*\n");
printf("請輸入妳要操作的序號:");
scanf("%d",&flag);
switch(flag)
{
case 0: printf("\n>>>>>>>>>>提示:已經退出系統,ByeBye!\n");break;
case 1: Add(equip); break; //增加記錄
case 2: Modify(equip); break;//修改記錄
case 3: Disp(equip); break;//顯示記錄信息
case 4: Tongji(equip); break;//統計記錄
default: printf("\n>>>>>>>>>>提示:輸入錯誤!\n"); break;
}
}
}