求大神,编译没有错误,链接有一处错误!不知该如何查找?
仓库管理系统支持入库,出库,库存查询以及打印!自定设置库存警戒值!#include<stdio.h>
#include<string.h>
#define N 100
struct date
{
int year;
int month;
int day;
};
struct product
{char p_name[20];
long int p_num;
struct date in_date;
long int min_s;
long int max_s;
long int real_s;
struct product*next;
}pro[N];
int mn();
void menu();
write();
search();
searchmenu();
search_by_name();
search_by_date();
search_by_num();
insert();
rewrite();
lend();
sort();
statistics();
save(int n);
load();
input(int i);
printf_date(int i);
printf_back();
int mn()
{
void menu();
FILE*fp;
fp=fopen("货物清单.txt","wb");
fclose(fp);
menu();
}
void menu()
{int m,n;
do
{
printf("\t\t**************MENU**************\n");
printf("\t\t**********欢迎来到仓库管理系统*******\n");
printf("\t\t 1:商品入库 *\n");
printf("\t\t 2:商品出库 *\n");
printf("\t\t 3:库存查询 *\n");
printf("\t\t 4:信息修改 *\n");
printf("\t\t 5:排序 *\n");
printf("\t\t 6:统计 *\n");
printf("\t\t 7:退出 *\n");
printf("choice your number(1-7):[ ]\b\b");
scanf("%d",&n);
if(n<1||n>7)
{
m=1;
getchar();
}
else m=0;
}
while(m==1);
switch(n)
{
case 1:write();break;
case 2:lead();break;
case 3:search();break;
case 4:rewrite();break;
case 5:sort();break;
case 6:statistics();break;
case 7:exit(0);
}
}
/***************输入函数****************/
input(int i)
{
printf("请输入以下信息,按TAB键分开:\n名称 编号 入库日 期 最小库存 实际库存 最大库存\n");
scanf("%s %d %d.%d.%d %d %d %d",&pro[i].p_name,&pro[i].p_num,&pro[i].in_date.year,&pro[i].in_date.month,&pro[i].in_date.day,&pro[i].min_s,&pro[i].real_s,&pro[i].max_s); }
/***************打印函数**********************/
main()
{
puts("\n\n\n\t\t----------欢迎使用仓库管理系统-----");
puts("\t\t|MAME: wangyifan |");
puts("\n\t\t按任意键继续\n\n\n\n\n\n");
getch();
menu();
}
write()
{int i,n,k;
printf("\n\n\t提示:请确定这是你第一次录入信息,因为之前保存的数据将被删除\n\n");
printf("\t\t\t是否继续!\n\n\t\t\t0*****是\n\n\t\t\t其他******否[]\b\b");
scanf("%d",&k);
if(k!=0)printf_back();
printf("\n需要录入商品数量(0-%d)?:",N-1);
scanf("%d",&n);
printf("\n现在输入信息\n\n");
for(i=0;i<n;i++)
{printf("\n现在输入第 %d个商品的信息:\n",i+1);
input(i);
}
if(i!=0)save(n);
printf_back();
}
search()
{
searchmenu();
}
searchmenu()
{int n,w2;
do
{
puts("\n\t\t**************查询目录**************\n\n");
puts("\t\t\t1.以名称查询");
puts("\t\t\t2.以日期查询");
puts("\t\t\t3.以警戒值查询");
puts("\t\t\t4.返回");
puts("\n\n\t\t*************************************\n");
printf("选择命令[1-4]:[]\b\b");
scanf("%d",&n);
if(n<1||n>4)
{w2=1;getchar();}
else w2=0;
}while(w2==1);
switch(n)
{case 1:search_by_name();break;
case 2:search_by_date();break;
case 3:search_by_num();break;
case 4:getch();menu();
}
}
/******************以名称查询函数***************/
search_by_name()
{int j,n,m=0;char a[20];
n=load();
printf("\n输入你所查询信息的名称!\n name:");
scanf("%s",a);
for(j=0;j<n;j++)
if(strcmp(a,pro[j].p_name)==1)
{m++;
printf_data(j);
}
printf("\n有%d种物资与查询相匹配!",m);
getch();
menu();
}
/**********************************以日期查询函数************/
struct search_date
{int year;
int month;
int day;
}s;
search_by_date()
{int j,n,m=0;
n=load();
printf("\n输入你所查询信息的日期!\ndate:");
scanf("%d%d%d",&s.year,&s.month,&s.day);
for(j=0;j<n;j++)
if((s.year==pro[j].in_date.year)&&(s.month==pro[j].in_date.month)&&(s.day==pro[j].in_date.day))
{m++;
printf_data(j);
}
printf("\n有%d种商品与查询相匹配!",m);
getch();
menu();
}
/*********************以警戒值查询函数*********************/
search_by_num()
{
int j,n,m=0;
long int num;
n=load();
printf("/n请输入库存警戒值:[ ]\b\b\b\b\b\b");
scanf("%d",&num);
for(j=0;j<n;j++)
if(pro[j].real_s<num)
{
m++;
printf_data(j);
}
printf("/n有%d种商品与查询相匹配!",m);
getch();
menu();
}
/**********************商品出库结构体*****************/
struct one_pro
{char p_name[20];
long int p_num;
long int total;
struct date one_date;
struct one_pro*next;
}take;
/********************商品入库函数*************/
insert()
{int n,c;
n=load();
puts("\n请输入相关信息:\n");
do
{input(n);
printf_data(n);
printf("\n\n是否确定输入\n1)是\n2)从新输入\n其他)返回[]\b\b");
scanf("%d",&c);
if(c==1)
{
save(n+1);printf_back();
}
else if(c!=2)menu();
}while(c==2);
}
/****************信息更改函数********************/
rewrite()
{char p_name[20];
long int p_num;
int m,n,j,k=0;
n=load();
do
{
puts("\n要更改商品的信息:\n名称 编号");
scanf("%s%1d%s",&p_name,&p_num);
printf("\n\n\n\n\t\t\t是否继续!\n\n\t\t\t0******是\n\n\n\t\t\t1*****退出\n\n\t\t\t其它*****重新输入[]\b\b");
scanf("%d",&m);
if (m==1)
printf_back();
else if(m==0)
k=1;
}
while(k!=1);
for(j=0;j<n;j++)
if((strcmp(p_name,pro[j].p_name)==0)&&(p_num=pro[j].p_num)==0)
{puts("\n请重新输入信息\n");
input(j);
save(n);
printf_back();
}
puts("未找到\n按任意键返回!");
getch();
menu();
}
lend()
{
int j,n,k=0;
n=load();
printf("\n请输入你需要商品内容的相关信息!");
printf("\n名称\t编号\t出库日期\t出库数量\n");
scanf("%s\t%s\t%d.%d.%d\t%d",&take.p_name,&take.one_date.year,&take.one_date.month,&take.one_date.day,&take.total);
for(j=0;j<n;j++)
if((strcmp(take.p_name,pro[j].p_name)==0)&&(take.one_date.year==pro[j].in_date.year)&&(take.one_date.month==pro[j].in_date.month)&&(take.one_date.day==pro[j].in_date.day)&&(take.total<=pro[j].real_s))
{ pro[j].real_s=take.total;
printf_data(j);
k=1;
}
save(n);
printf_back();
}
/*************打印***********/
printf()
{int i,n;
n=load();
for(i=0;i<n;i++)
printf_data(i);
puts("\n\n\t\t\t任意键返回");
getch();
menu();
}
/*************常调用的函数****************/
#include<stdio.h>
save(int n) /*********保存函数***********/
{
FILE*fp;
int k;
if((fp=fopen("仓库货物清单.txt","w"))==NULL)
{printf("\n文件打开失败!\n");
return NULL;
}
for(k=0;k<n;k++)
fwrite(&pro[k],sizeof(struct product),1,fp);
fclose(fp);
}
load()
/*****************从文件处读入***************/
{
FILE*fp;
int k;
if((fp=fopen("仓库货物清单.txt","rb"))==NULL)
{printf("\n文件打开失败!\n"); return NULL;
}
for(k=0;!feof(fp);k++)
fread(&pro[k],sizeof(struct product),1,fp);
fclose(fp);
return(k-1);
}
printf_data(int i)
{
printf("\n名称\t\t编号\t日期\t\t库存最小-实际-最大\n");
printf("%s\t\t%d\t%d.%d.%d\t\t%d %d %d",pro[i].p_name,pro[i].p_num,pro[i].in_date.year,pro[i].in_date.month,pro[i].in_date.day,pro[i].min_s,pro[i].real_s,pro[i].max_s);
}
printf_back()
{
printf("\n\n操作完成\n\n按任意键返回!\n");
getch();
menu();
}