编译没有问题但是在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"); }