编译没有问题但是在dos下执行时突然弹出runtime error。请高手帮帮忙,菜鸟在此谢过了。
程序代码:#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct cangku//定义仓库结构
{
int coding;
char name[20];
char introdution[50];
int sum;
};
typedef struct cangku Cangku;
int Input(Cangku t[]);
void List(Cangku t[],int n);
void SearchOnName(Cangku t[],int n);
int DeleteRecord(Cangku t[],int n);
int AlterRecord(Cangku t[],int n);
int AddRecord(Cangku t[],int n);
void SortOncoding(Cangku t[],int n);
void SortOnsum(Cangku t[],int n);
void SaveRecord(Cangku t[],int n);
int LoadRecord(Cangku t[]);
int LoadRecord1(Cangku t[]);
void Save(Cangku t[],int n);
void Load(Cangku t[],int n);
void Load1(Cangku t[]);
int Menu_select();
void logface();
void logface()
{
printf("\n\n\n\n");
printf("\t\t\t*--------------------------------------*\n");
printf("\t\t\t| *********************************** |\n");
printf("\t\t\t| * * |\n");
printf("\t\t\t| * 欢迎使用仓库管理系统 * |\n");
printf("\t\t\t| * * |\n");
printf("\t\t\t| *********************************** |\n");
printf("\t\t\t*--------------------------------------*\n");
}
void main()
{
Cangku ck[50];
int length,w=1,a;
a=5409;
logface();
printf("\t\t\t\t请输入密码:");
scanf("%d",&a);
system("cls");
while(w)
{
switch(Menu_select())
{
case 1: length=Input(ck);
SaveRecord(ck,length);//录入仓库初始记录
break;
case 2: length=LoadRecord(ck);
SearchOnName(ck,length);
break;
case 3: length=LoadRecord(ck);
length=DeleteRecord(ck,length);
SaveRecord(ck,length);
break;
case 4: length=LoadRecord(ck);
length=AlterRecord(ck,length);
SaveRecord(ck,length);
break;
case 5: length=LoadRecord(ck);
length=AddRecord(ck,length);
SaveRecord(ck,length);
break;
case 6: length=LoadRecord(ck);
system("cls");
List(ck,length); //显示全部商品记录
break;
case 7: length=LoadRecord(ck);
system("cls");
SortOncoding(ck,length);//按商品编号排序
SaveRecord(ck,length);
break;
case 8: length=LoadRecord(ck);
system("cls");
SortOnsum(ck,length); //按商品个数排序
SaveRecord(ck,length);
break;
case 9: length=LoadRecord(ck);
system("cls");
Save(ck,length);//备份
break;
case 0: length=LoadRecord1(ck);
Load1(ck);
system("cls");
Load(ck,length);//恢复
break;
case 10: exit(0); //退出
}
}
}
int Menu_select()
{
int c;
printf("按任意键进入仓库管理菜单\n");
getchar();
system("cls");
system("color F0");
printf(" ******************************仓库管理*******************************\n");
printf(" * 1. 录入仓库初始记录 *\n");
printf(" * 2. 按商品名称查找记录 *\n");
printf(" * 3. 删除商品记录 *\n");
printf(" * 4. 修改商品记录 *\n");
printf(" * 5. 增加仓库信息 *\n");
printf(" * 6. 显示全部记录 *\n");
printf(" * 7. 按商品编号排序 *\n");
printf(" * 8. 按商品个数排序 *\n");
printf(" * 9. 备份 *\n");
printf(" * 0. 恢复 *\n");
printf(" * 10. 退出 *\n");
printf(" *********************************************************************\n");
do
{
printf("\n输入您想要进行的操作选项键(0-10):");
if(scanf("%d",&c)!=1)
{
while(getchar()!='\n')
continue;
}
}
while(c<0||c>10);
return c;
}
int Input(Cangku t[])//输入函数
{
int i,n;
system("cls");
printf("\n请输入要输入的商品中数目:\n");
scanf("%d",&n);
printf("开始输入仓库信息:\n");
for(i=0;i<n;i++)
{
system("cls");
printf("\n第%d个商品的编号:",i+1);
scanf ("%d",&t[i].coding);
printf("第%d个商品的名称:",i+1);
scanf ("%s",&t[i].name);
printf("第%d个商品的个数:",i+1);
scanf ("%f",&t[i].sum);
printf("第%d个商品的说明:",i+1);
scanf ("%s",&t[i].introdution);
}
return (n);
}
void List(Cangku t[],int n) //列表函数
{
int i;
printf(" *********************************************************************\n");
printf(" ** 编号 名称 数目 说明\n");
printf(" ---------------------------------------------------------------------\n");
for(i=0;i<n;i++)
{
printf("%17d%13s%20f%14s\n",t[i].coding,t[i].name,t[i].sum,t[i].introdution);
}
printf(" *********************************************************************\n");
printf ("\n");
getchar();
}
void SearchOnName(Cangku t[],int n)//查找函数
{
char s[20];
int i,flag=0;
system("cls");
printf("请输入要查找的商品名称:\n");
scanf("%s",s);
for(i=0;i<n;i++)
{
if(strcmp(s,t[i].name)==0)
{
flag=1;
system("cls");
printf("\n\n要查找的商品信息如下:\n");
printf("\n");
printf(" *********************************************************************\n");
printf(" ** 编号 名称 数目 说明\n");
printf(" ---------------------------------------------------------------------\n");
{
printf("%17d%13s%20f%14s\n",t[i].coding,t[i].name,t[i].sum,t[i].introdution);
}
printf(" *********************************************************************\n");
printf ("\n");
}
}
if(flag==0)
printf("要查找的商品不存在!!\n");
getchar();
}
int DeleteRecord(Cangku t[],int n)//删除函数
{
char s[20];
char ch;
int i,j,flag=0;
system("cls");
printf("请输入要删除的商品名称\n");
scanf("%s",s);
for(i=0;i<n;i++)
{
if(strcmp(s,t[i].name)==0)
{
flag=1;
system("cls");
printf("\n\n要删除的商品信息如下:\n");
printf("\n");
printf(" *********************************************************************\n");
printf(" ** 编号 名称 数目 说明\n");
printf(" ---------------------------------------------------------------------\n");
{
printf("%17d%13s%20f%14s\n",t[i].coding,t[i].name,t[i].sum,t[i].introdution);
}
printf(" *********************************************************************\n");
printf ("\n");
printf("确定删除商品信息吗?(Y/N)\n");
ch=getchar();
ch=getchar();
if(ch=='Y'||ch=='y')
{
for(j=i;j<n-1;j++)
t[j]=t[j+1];
n--;
i--;
printf ("删除成功.\n");
}
}
}
if(flag==0)
printf("要删除的商品不存在!!\n");
getchar();
return n;
}
int AlterRecord(Cangku t[],int n)//修改记录函数
{
int i,flag=0;
char s[20],ch;
system("cls");
printf("请输入要修改的商品名称\n");
scanf("%s",s);
for(i=0;i<n;i++)
{
if(strcmp(s,t[i].name)==0)
{
flag=1;
system("cls");
printf("\n\n要修改的仓库信息如下:\n");
printf("\n");
printf(" *********************************************************************\n");
printf(" ** 编号 名称 数目 说明\n");
printf(" ---------------------------------------------------------------------\n");
{
printf("%17d%13s%20f%14s\n",t[i].coding,t[i].name,t[i].sum,t[i].introdution);
}
printf(" *********************************************************************\n");
printf ("\n");
printf("确定修改商品信息吗?(Y/N)\n");
ch=getchar();
ch=getchar();
if(ch=='y'||ch=='Y')
{
system("cls");
printf("请输入修改后的信息:\n");
printf("请输入商品新的名称:");
scanf("%s",t[i].name);
printf("请输入%s商品新的编号:",t[i].name);
scanf("%d",&t[i].coding);
printf("请输入%s商品新的数目:",t[i].name);
scanf("%f",&t[i].sum);
printf("请输入%s商品新的说明:",t[i].name);
scanf("%s",t[i].introdution);
}
}
}
if(flag==0)
printf("要修改的商品不存在!!\n");
getchar();
return n;
}
int AddRecord(Cangku t[],int n) //追加记录函数
{
int i,m;
system("cls");
printf("\n请输入再增加的记录数:\n");
scanf("%d",&m);
printf("开始追加记录\n");
for(i=n;i<n+m;i++)
{
system("cls");
printf("\n第%d个商品的编号:",i+1);
scanf("%d",&t[i].coding);
printf("第%d个商品的名称:",i+1);
scanf("%s",t[i].name);
printf("第%d个商品的数目:",i+1);
scanf("%f",&t[i].sum);
printf("第%d个商品的说明:",i+1);
scanf("%s",t[i].introdution);
}
return (n+m);
}
void SortOncoding(Cangku t[],int n)//按商品编号排序
{
int i,j;
struct cangku temp ;
for(j=1;j<n;j++)
for(i=0;i<n-j;i++)
if(t[i].coding<t[i+1].coding)
{
temp=t[i];
t[i]=t[i+1];
t[i+1]=temp;
}
printf("排序成功!!!\n");
printf("排序后仓库信息列表如下:\n");
List(t,n);
}
void SortOnsum(Cangku t[],int n)//按商品数目排序
{
int i,j;
struct cangku temp ;
for(j=1;j<n;j++)
for(i=0;i<n-j;i++)
if(t[i].sum<t[i+1].sum)
{
temp=t[i];
t[i]=t[i+1];
t[i+1]=temp;
}
printf("排序成功!!!\n");
printf("排序后商品信息列表如下:\n");
List(t,n);
}
void SaveRecord(Cangku t[],int n)
{
int i;
FILE *fp;
if((fp=fopen("record.txt","w"))==NULL)
{
printf("不能打开文件!\n");
exit(1);
}
for(i=0;i<n;i++)
{
fwrite(&t[i],sizeof(struct cangku),1,fp);
}
fclose(fp);
}
int LoadRecord(Cangku t[])
{
int n=0;
FILE *fp;
if((fp=fopen("record.txt","a+"))==NULL)
{
printf("不能打开文件!\n");
exit(1);
}
while(fread(&t[n],sizeof(struct cangku),1,fp)) n++;
fclose(fp);
printf("从文件中成功读出记录!!!\n");
return n;
}
int LoadRecord1(Cangku t[])
{
int n=0;
FILE *fp;
if((fp=fopen("bkrecord.txt","a+"))==NULL)
{
printf("不能打开文件!\n");
exit(1);
}
while(fread(&t[n],sizeof(struct cangku),1,fp)) n++;
fclose(fp);
printf("从文件中成功读出记录!!!\n");
return n;
}
void Save(Cangku t[],int n)//保存文件
{
int i;
FILE *fp;
if((fp=fopen("bkrecord.txt","w"))==NULL)
{
printf("不能打开文件!\n");
exit(1);
}
for(i=0;i<n;i++)
{
fwrite(&t[i],sizeof(struct cangku),1,fp);
}
fclose(fp);
printf("备份成功.\n");
getchar();
}
void Load1(Cangku t[])
{
int n=0;
FILE *fp;
if((fp=fopen("bkrecord.txt","a+"))==NULL)
{
printf("不能打开文件!\n");
exit(1);
}
while
(fread(&t[n],sizeof(struct cangku),1,fp)) n++;
fclose(fp);
getchar();
}
void Load(Cangku t[],int n)
{
int i;
FILE *fp;
if((fp=fopen("record.txt","w"))==NULL)
{
printf("不能打开文件!\n");
exit(1);
}
for(i=0;i<n;i++)
{
fwrite(&t[i],sizeof(struct cangku),1,fp);
}
fclose(fp);
printf("恢复成功.\n");
}

