#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 20
int j,p;
int count=0;//全局變量
void view();//瀏覽函數
void add();//添加函數
void change();//更改函數
void find();//查找函數
void del();//刪除函數
void save();//保存函數
void read();//讀取函數
void goon();//繼續操作函數
void tc();//退出
struct ck
{
int bh; //定義倉庫編號
char name[20]; //定義倉庫名稱
int kc; //定義倉庫庫存量
int price; //定義貨品單價
}ckmas[N];
void main()
{
char opt;
printf("要讀取以前的記錄嗎?(y/n)\n");
scanf(" %c",&opt);
if(opt == 'y' || opt == 'Y')
read();
int p; //定義操作
printf("\tΨ*******************************************************Ψ\n");
printf("\tΨΨ1.瀏覽貨品信息 2.添加貨品 3.更改貨品信息ΨΨ*\n");
printf("\tΨΨ4.查找貨品信息 5.刪除貨品信息 6.退出 ΨΨ*\n");
printf("\tΨ*******************************************************Ψ\n");
printf("\t\t\t!!!歡迎進入倉庫管理系統!!!\n\n");
printf("\n");
printf("請輸入您想選擇的操作1-6:");
scanf("%d",&p); //輸入選擇的操作
switch(p) //條件語句
{
case 1:view();break;
case 2:add();break;
case 3:change();break;
case 4:find();break;
case 5:del();break;
case 6:tc();
}
};
/*-----------------------------瀏覽貨品信息------------------------*/
void view()
{
int i;
printf("編號\t名稱\t庫存\t單價\n");
for(i=0;i<count;i++)
printf("%d\t%s\t%d\t%d\n",ckmas[i].bh,ckmas[i].name,ckmas[i].kc,ckmas[i].price);
goon();//提醒用戶是否繼續操作
}
/*-----------------------------添加貨品信息------------------------*/
void add()
{
int i,addnum;
printf("\t\t妳想增加多少條記錄?\n");//問用戶添加幾條記錄
scanf("%d",&addnum);
printf("編號 名稱 庫存 單價\n");
for(i=count;i<count+addnum;i++)
scanf("%d %s %d %d",&ckmas[i].bh,ckmas[i].name,&ckmas[i].kc,&ckmas[i].price);//錄入添加的貨品信息
printf("\t\t妳添加了%d條記錄,總***有%d條記錄\n",addnum,count+addnum);
count=count+addnum;//儲存記錄條數
save();//儲存數據
goon();//提醒用戶是否繼續操作
}
/*----------------------------更改貨品信息------------------------*/
void change ()
{
int num,i,count1;
printf("\t\t請您輸入您要更改貨品信息的編號:\n");
scanf("\t\t%d",&num);
for(i=0;i<count;i++)//查找出更改貨品的信息
if(num==ckmas[i].bh)
{ printf("\t\t您要更改的貨品信息如下:\n");
printf("編號 名稱 庫存 單價\n");
printf("%d\t%s\t%d\t%d\n",ckmas[i].bh,ckmas[i].name,ckmas[i].kc,ckmas[i].price);
i++;
break;
}
count1=(i++)-1;//記錄要更改的是第幾個記錄
printf("\n");
printf("\t\t請重新輸入信息:\n");
printf("編號 名稱 庫存 單價\n");
scanf("%d%s%d%d",&ckmas[i].bh,ckmas[i].name,&ckmas[i].kc,&ckmas[i].price);//錄入添加的貨品信息
save();//儲存數據
goon();//提醒用戶是否繼續操作
}
/*----------------------------查找貨品信息------------------------*/
void find()
{
int i,a,num;
char b[20];
printf("1.按編號查找\t\t2.按名稱查找\n");
scanf("%d",&a);
if(a==1)
{
printf("\t\t請您輸入您要查找的貨品編號:\n");
scanf("\t\t%d",&num);
for(i=0;i<count;i++)//查找出更改貨品的信息
if(num==ckmas[i].bh)
{ printf("\t\t您要更改的貨品信息如下:\n");
printf("編號 名稱 庫存 單價\n");
printf("%d\t%s\t%d\t%d\n",ckmas[i].bh,ckmas[i].name,ckmas[i].kc,ckmas[i].price);
i++;
break;
}
}
else
{
printf("請輸入您想查找的貨品名稱:");
scanf("%s",b);
for(i=0;i<count;i++)
if(strcmp(b,ckmas[i].name)==0)
{
printf("編號 名稱 庫存 單價\n");
printf("%d\t%s\t%d\t%d\n",ckmas[i].bh,ckmas[i].name,ckmas[i].kc,ckmas[i].price);
break;
}
else if(strcmp(b,ckmas[i].name)!=0)
printf("對不起,查無此記錄!!!");
}
save();//儲存數據
goon();//提醒用戶是否繼續操作
}
/*--------------------------------刪除貨品信息結構體-----------------------*/
void del()
{
int i,j,delnum;
int count2=count;//將原先的記錄數保存下來,以便後面做比較以判斷是否做了刪除
char ch1,ch2;
do{
printf("\t\t請輸入妳想刪除的貨品編號:\n");
scanf("\t\t%d",&delnum);
for(i=0;i<count;i++)//查找
if(ckmas[i].bh==delnum)
{
for(j=i;j<count;j++)
ckmas[j]=ckmas[j+1];//將後面的元素覆蓋前面的元素,並且
count--; // 數組長度減壹
break;
}
if(count==count2)//當沒有刪除時,現在的記錄數與原先的記錄數相等,count是自減後的記錄數,count2是原來的記錄數
{
printf("\t\t對不起!您的操作不成功!\n");
}
printf("\t\t還要繼續刪除嗎?(Y/N)\n");
scanf(" \t\t%c",&ch1);
}while(ch1=='Y'||ch1=='y');
if(count!=count2)//自減後的記錄數與原來的記錄數不等,說明刪除成功,保存數據
{ printf("\t\t是否要保存所做的刪除操作?(Y/N)\n");
scanf(" \t\t%c",&ch2);
if(ch2=='y'||ch2=='Y')
save();
}
goon();//提醒用戶是否繼續操作
}
/*------------------------------------保存信息操作-------------------------------------*/
void save()
{
FILE *fp;//定義壹個文件指針
fp=fopen("ck.txt","w");//以覆蓋寫的方式打開"ck.txt"文件,並把指針指向它
if(fp==NULL)//如果指針返回壹個空值
printf("文件保存失敗!\n");//打印壹條錯誤提示
else//否則
{
for(int i=0;i<count;i++)//循環
fwrite(&ckmas[i],sizeof(ck),1,fp);//向"ck.txt"寫入信息,每次壹條
printf("文件保存成功!\n");//給出執行成功提示信息
}
fclose(fp);//關閉文件
}
/*----------------------------------讀取文件操作-------------------------------------*/
void read()
{
FILE *fp;//定義壹個文件指針
fp=fopen("ck.txt","r");//以只讀的方式打開"ck.txt"文件,並把指針指向它
if(fp==NULL)//如果指針返回壹個空值
printf("文件讀取失敗!\n");//打印壹條錯誤提示
else//否則
{
count=0;//將信息條數設置為0,下面的讀取工作將會覆蓋原先記錄
for(int i=0;;i++,count++)//循環
if(fread(&ckmas[count],sizeof(ck),1,fp)==NULL)//從"ck.txt"中讀取信息,每次壹條,如果fread()函數返回空值
break;//則退出循環
printf("文件讀取成功!\n");//給出執行成功提示信息
}
fclose(fp);//關閉文件
}
/*----------------------------------控制主循環操作-----------------------------------*/
void goon()//判斷是否繼續操作函數
{
char a;
printf("是否繼續操作(Y or N):");
scanf(" %c",&a);
if(a=='Y'||a=='y')
main();
else if(a=='N'||a=='n')
tc();
}
void tc()
{
printf("\t\t\t@@@@@@@@@@@@@@@@@@@@@@@@\n");
printf("\t\t\t!!!!謝謝您使用本系統!!!!\n");
printf("\t\t\t!!!!歡迎下次繼續使用!!!!\n");
printf("\t\t\t@@@@@@@@@@@@@@@@@@@@@@@@\n\n");
exit(0);
}