商店存货管理系统.docx
- 文档编号:30485285
- 上传时间:2023-08-15
- 格式:DOCX
- 页数:40
- 大小:438.84KB
商店存货管理系统.docx
《商店存货管理系统.docx》由会员分享,可在线阅读,更多相关《商店存货管理系统.docx(40页珍藏版)》请在冰豆网上搜索。
商店存货管理系统
目录
摘要1
前言2
正文3
1.采用类c语言定义相关的数据类型3
2.各模块的伪码算法3
3.函数的调用关系图3
4.调试分析3
5.测试结果3
6.源程序(带注释)3
总结4
参考文献5
致谢6
附件Ⅰ部分源程序代码7
摘要
该设计要求建立一商店存货管理系统。
实现货物的输入,显示,插入,删除,查找,保存等,要求每次出货时间最早且最接近保质期终止时间的货物。
通过该题目的设计过程,可以加深理解线性表的逻辑结构,存储结构,掌握线性表上基本运算的实现,进一步理解和熟练掌握课本中所学的各种数据结构,学会如何把学到的知识用于解决实际问题,培养我们的动手能力。
关键词商品信息,商品的管理,顺序存储结构
前言
商店存货管理系统主要是用线性表的顺序存储结构来存储商品的生产日期,进货时间,保质期等对商品进行管理。
其功能主要有:
1)输入存储商品信息,调用函数为:
Input(goodsgs[],intn)。
2)显示所有商品信息(进货时间的早迟),调用的函数为:
Display(goodsgs[],intn)。
3)插入要添加的商品信息(根据商品名),其调用的函数为:
Insert_a_record(goodsgs[],intn)。
4)删除(根据商品名进行删除)。
调用的函数为Delete_a_record(goodsgs[],intn)。
5)查找并显示(根据商品名称),其调用的函数为Query_a_record(goodsgs[],intn)。
6)统计并显示进货时间最早且最接近保质期终止时间的货物(根据货物的进货时间,出厂时间,保质期等)。
7)写入文件,其调用的函数为WritetoText(gs,n)。
8)读文件,其调用函数AddfromText(goodsgs[],intn)。
9)对读入的文件进行排序,其调用的函数为Sort_by_time(goodsgs[],intn)。
正文
1.采用类c语言定义相关的数据类型
定义一个商品的结构体数组:
typedefstruct/*定义结构体数组*/
{
charname[20];/*商品名称*/
inttime;/*进货时间*/
intyear;/*生产日期*/
intno;/*保质期*/
}goods;
2.各模块的伪码算法
1).输入数据
intInput(goodsgs[],intn)/*输入若干条记录*/
{
charsign,x[10];
while(sign!
='n'&&sign!
='N')
{
//依次输入所有商品信息
printf("\t\t\t继续输入?
(Y/N)");
scanf("\t\t\t%c",&sign);/*输入判断*/
n++;
}
return(n);
}
2)显示数据
voidDisplay(goodsgs[],intn)
{
inti;
//显示所有商品信息
for(i=1;i<=n;i++)/*循环输入*/
{
printf("\t\t%-5s%d%d%d\n",gs[i-1].name,gs[i-1].time,gs[i-1].year,gs[i-1].no);
if(i>1&&i%10==0)/*每十个暂停*/
{
//输出格式
}
}
printf("\t\t\t");
system("pause");/*按任何键继续*/
}
3).插入数据
intInsert_a_record(goodsgs[],intn)/*插入一条记录*/
{
//输入要插入的商品信息
n++;
printf("\t\t\t插入成功!
\n");/*返回成功信息*/
return(n);
}
4)删除数据
intDelete_a_record(goodsgs[],intn)
{
chars[20];
inti=0,j;
printf("\t\t\t商品名称:
");
scanf("%s",s);
while(strcmp(gs[i].name,s)!
=0&&i if(i==n) { printf("\t\t\t没找到! \n"); return(n); } for(j=i;j { strcpy(gs[j].name,gs[j+1].name); gs[j].time=gs[j+1].time; gs[j].year=gs[j+1].year; gs[j].no=gs[j+1].no; } printf("\t\t\t删除成功! \n"); return(n-1); } 5)查找数据 voidQuery_a_record(goodsgs[],intn) { chars[20]; inti=0; printf("\t\t\t输入要查找的商品名称: "); scanf("\t\t\t%s",s); while(strcmp(gs[i].name,s)! =0&&i if(i==n) { printf("\t\t\t没找到! \n"); return; } //所要查找的商品信息的显示 } 6)写入文件 voidWritetoText(goodsgs[],intn) { inti=0; FILE*fp; if((fp=fopen("d: \\商品.doc","wb"))==NULL) { printf("\t\t\tcann'topenthefile\n"); system("pause"); return; } fprintf(fp,"%d\n",n); while(i { fprintf(fp,"%-5s%d%d%d\n",gs[i].name,gs[i].time,gs[i].year,gs[i].no); i++; } fclose(fp);/*关闭文件*/ printf("\t\t\tSuccessed! \n"); } 7)读文件 intAddfromText(goodsgs[],intn) { intnum; FILE*fp; if((fp=fopen("d: \\商品.doc","rb"))==NULL) { printf("\t\t\tcann'topenthefile\n"); printf("\t\t\t"); system("pause"); return(n); } fscanf(fp,"%d",&num); while(n { fscanf(fp,"%s%d%d%d",gs[n].name,&gs[n].time,&gs[n].year,&gs[n].no); n++; } n+=num; fclose(fp); printf("\t\t\tSuccessed! \n"); printf("\t\t\t"); system("pause"); return(n); } 8)对读入的文件进行排序 voidSort_by_time(goodsgs[],intn) { inti,j,*a,*b,c,*p,*q,s,*m,*k,d,e,f; chart[10]; for(i=0;i for(j=0;j if(gs[j].time>gs[j+1].time) { a=&gs[j+1].time; b=&gs[j].time; c=*a; *a=*b; *b=c; strcpy(t,gs[j+1].name); strcpy(gs[j+1].name,gs[j].name); strcpy(gs[j].name,t); p=&gs[j+1].year; q=&gs[j].year; s=*p; *p=*q; *q=s; m=&gs[j+1].no; k=&gs[j].no; d=*m; *m=*k; *k=d; } elseif(gs[j].time==gs[j+1].time) { p=&gs[j].year; a=&gs[j+1].year; b=&gs[j].no; q=&gs[j+1].no; e=(*p)+(*b)*10000; f=(*a)+(*q)*10000; if(e>f) { a=&gs[j+1].time; b=&gs[j].time; c=*a; *a=*b; *b=c; strcpy(t,gs[j+1].name); strcpy(gs[j+1].name,gs[j].name); strcpy(gs[j].name,t); p=&gs[j+1].year; q=&gs[j].year; s=*p; *p=*q; *q=s; m=&gs[j+1].no; k=&gs[j].no; d=*m; *m=*k; *k=d; } } } 3.函数的调用关系图 4.调试分析 a、调试中遇到的问题及对问题的解决方法 1.输出的运行界面不整齐,例如“*”在编写程序的时候输入不整齐,运行出来的界面就不好看。 2.函数的调用不正确。 解决方法: 当在一个函数中要调用另一个函数时,必须在调用函数的函数块中对被调用函数进行类型的声明 b、算法的时间复杂度和空间复杂度 1)函数sort_by_time()其功能为冒泡排序。 在最坏情况下,需要进行n-1趟排序,每趟排序要进行n-i次关键字比较(1<=i<=n-1),此时的时间复杂度为O( ).在原本排好序的情况下的时间复杂度为O(n)。 故其平均时间复杂度为O( ), 2)函数Input(goodsgs[],intn),其时间复杂度与输入的数据的多少n有关,所以其时间复杂度为O(n). 3)函数 Display(),Insert_a_record(),Delete_a_record(),Query_a_record(),WriteTo Text(),AddfromText()的时间复杂度均为O(n) 综上,整个程序在运行过程中的时间复杂度为O( ). 5.测试结果 1.初始界面 2选择功能2并显示: 3选择功能8并选择功能2,显示最初的数据: 4.对读出的文件进行排序,选功能9,再选功能2,进行显示: 5.选择功能3,进行插入操作,选择功能2,进行显示: 6.选择功能4,进行删除操作,第一种情况为找不到要删除的商品数据: 接下去这个是另一种情况,即找到要删除的商品数据并按功能2,显示 7.选择功能5,第一种情况为找不到要查找的数据: 第二种为存在情况 .8选择功能6: 9.选择功能7: 10.选择功能0,退出程序。 6.源程序(带注释) #include #include #include #include typedefstruct/*定义结构体数组*/ { charname[20];/*商品名称*/ inttime;/*进货时间*/ intyear;/*生产日期*/ intno;/*保质期*/ }goods; goodsgs[80];/*结构体数组变量*/ intmenu_select()/*菜单函数*/ { charc; do{ system("cls");/*运行前清屏*/ 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("\t\t|8.读文件|\n"); printf("\t\t|9.对读入的文件进行排序|\n"); printf("\t\t|0.退出|\n"); printf("\t\t*****************************************\n"); printf("\t\t\t请选择(0-9): "); c=getchar();/*读入选择*/ }while(c<'0'||c>'9'); return(c-'0');/*返回选择*/ } voidSort_by_time(goodsgs[],intn)/*按进货时间排序*/ { inti,j,*a,*b,c,*p,*q,s,*m,*k,d,e,f; chart[10]; for(i=0;i for(j=0;j if(gs[j].time>gs[j+1].time) { a=&gs[j+1].time; b=&gs[j].time; c=*a; *a=*b; *b=c; strcpy(t,gs[j+1].name); strcpy(gs[j+1].name,gs[j].name); strcpy(gs[j].name,t); p=&gs[j+1].year; q=&gs[j].year; s=*p; *p=*q; *q=s; m=&gs[j+1].no; k=&gs[j].no; d=*m; *m=*k; *k=d; } elseif(gs[j].time==gs[j+1].time) { p=&gs[j].year; a=&gs[j+1].year; b=&gs[j].no; q=&gs[j+1].no; e=(*p)+(*b)*10000; f=(*a)+(*q)*10000; if(e>f) { a=&gs[j+1].time; b=&gs[j].time; c=*a; *a=*b; *b=c; strcpy(t,gs[j+1].name); strcpy(gs[j+1].name,gs[j].name); strcpy(gs[j].name,t); p=&gs[j+1].year; q=&gs[j].year; s=*p; *p=*q; *q=s; m=&gs[j+1].no; k=&gs[j].no; d=*m; *m=*k; *k=d; } } } intInput(goodsgs[],intn)/*输入若干条记录*/ { charsign,x[10]; while(sign! ='n'&&sign! ='N')/*判断*/ { printf("\t\t\t商品名称: ");/*交互输入*/ scanf("\t\t\t%s",&gs[n].name); printf("\t\t\t进货时间: "); scanf("\t\t\t%d",&gs[n].time); printf("\t\t\t生产日期: "); scanf("\t\t\t%d",&gs[n].year); printf("\t\t\t保质期(年): "); scanf("\t\t\t%d",&gs[n].no); gets(x);/*清除多余的输入*/ printf("\t\t\t继续输入? (Y/N)"); scanf("\t\t\t%c",&sign);/*输入判断*/ n++; } return(n); } voidDisplay(goodsgs[],intn)/*显示所有记录*/ { inti; printf("\t\t------------------------------------------------\n");/*格式头*/ printf("\t\t商品名称进货时间生产日期保质期(年)\n"); printf("\t\t------------------------------------------------\n"); for(i=1;i<=n;i++)/*循环输入*/ { printf("\t\t%-5s%d%d%d\n",gs[i-1].name,gs[i-1].time,gs[i-1].year,gs[i-1].no); if(i>1&&i%10==0)/*每十个暂停*/ { printf("\t\t\t-----------------------------------\n");/*格式*/ printf("\t\t\t"); system("pause"); printf("\t\t\t-----------------------------------\n"); } } printf("\t\t\t"); system("pause");/*按任何键继续*/ } intInsert_a_record(goodsgs[],intn)/*插入一条记录*/ { printf("\t\t\t商品名称: ");/*交互输入*/ scanf("\t\t\t%s",&gs[n].name); printf("\t\t\t进货时间: "); scanf("\t\t\t%d",&gs[n].time); printf("\t\t\t生产日期: "); scanf("\t\t\t%d",&gs[n].year); printf("\t\t\t保质期: "); scanf("\t\t\t%d",&gs[n].no); n++; printf("\t\t\t插入成功! \n");/*返回成功信息*/ return(n); } intDelete_a_record(goodsgs[],intn)/*按商品名字查找,删除一条记录*/ { chars[20]; inti=0,j; printf("\t\t\t商品名称: "); scanf("%s",s); while(strcmp(gs[i].name,s)! =0&&i if(i==n) { printf("\t\t\t没找到! \n");/*返回失败信息*/ return(n); } for(j=i;j { strcpy(gs[j].name,gs[j+1].name); gs[j].time=gs[j+1].time; gs[j].year=gs[j+1].year; gs[j].no=gs[j+1].no; } printf("\t\t\t删除成功! \n");/*返回成功信息*/ return(n-1); } voidQuery_a_record(goodsgs[],intn)/*查找并显示一个记录*/ { chars[20]; inti=0; printf("\t\t\t输入要查找的商品名称: "); scanf("\t\t\t%s",s); while(strcmp(gs[i].name,s)! =0&&i if(i==n) { printf("\t\t\t没找到! \n");/*输入失败信息*/ return; } printf("\t\t\t进贷时间: %d\n",gs[i].time);/*输出该商品信息*/ printf("\t\t\t生产日期: %d\n",gs[i].year); printf("\t\t\t保质期: %d\n",gs[i].no); } voidWritetoText(goodsgs[],intn)/*将所有记录写入文件*/ { inti=0; FILE*fp;/*定义文件指针*/ if((fp=fopen("d: \\商品.doc","wb"))==NULL)/*打开文件*/ { printf("\t\t\tcann'topenthefile\n"); system("pause"); return; } fprintf(fp,"%d\n",n);/*循环写入数据*/ while(i { fprintf(fp,"%-5s%d%d%d\n",&gs[i].name,gs[i].time,gs[i].year,gs[i].no); i++; } fclose(fp);/*关闭文件*/ printf("\t\t\tSuccessed! \n");/*返回成功信息*/ } intAddfromText(goodsgs[],intn)/*从文件中读入数据*/ { intnum; FILE*fp;/*定义文件指针*/ if((fp=fopen("d: \\商品.doc","rb"))==NULL)/*打开文件*/ { printf("\t\t\tcann'topenthefile\n");/*打开失败信息*/ printf("\t\t\t"); system("pause"); return
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 商店 存货 管理 系统