商品管理系统设计说明书.docx
- 文档编号:5453137
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:24
- 大小:183.33KB
商品管理系统设计说明书.docx
《商品管理系统设计说明书.docx》由会员分享,可在线阅读,更多相关《商品管理系统设计说明书.docx(24页珍藏版)》请在冰点文库上搜索。
商品管理系统设计说明书
算法与数据结构
课程设计说明书
课题:
商品管理系统
学院:
计算机与通信学院
班级:
软件工程二班
姓名:
吕少伟
学号:
1516270251
指导老师:
包仲贤
时间:
2017.01.12
调试分析:
………………………………………………………………8
摘要
随着社会经济的迅速发展和科学技术的全面进步,以计算机与商店管理技术为基础的管理系统正处于蓬勃发展的时期。
仓库这个名词,已经不能用货物贮存地来概括,它现在是一个分销中心(Distribution Center),完成的任务更全面。
过去,人们不明白这条渠道利益。
到了今天,企业间的竞争更加激烈了,因此仓库管理成了供应链管理当中不可或缺的一环。
在这样的发展形式下,经过系统的分析与调研,完成了本系统。
系统中主要分为两种操作权限,一种为超级管理员权限,另一种为普通用户权限。
主要功能包括对货物的入库、出库、借出、盘点的相应操作;查询库存、入库、出库、借出、归还的货物数量;对货物月出入库数量与年出入库数量进行统计;对供应商、用户、货物信息进行相应的设置;打印库存信息和货物的出库信息以及用户系统权限的管理。
超级管理员可以完成所有的操作,而普通用户只能完成查询统计与修改密码的。
本课题是一个适应现今仓库管理需求的计算机信息管理系统,具有一定的实际开发价值和使用价值
关键词:
库存;货物;入库;商店
序言
面对信息爆炸的今天,对库存管理人员来说,工作量正日趋繁琐,因此有一个好的管理系统,就显得非常的必要。
库存管理所涉及的范围广泛。
但是,最基本的入库、出库的操作,在以前的管理系统中,都会体现。
过去,人们的管理理念没有完善,并且经验不够,因此是在摸索中成长。
可是当今社会,如果还继承以前的东西,而没有更新或创新的部分,那么是不能适应当今这个大趋势的发展的。
现在,一个最明显的变化是仓库不再被看作仅仅是一个货物贮存地,以前人们把货物管理看的很单调。
最近出现了很多新的管理模式,如:
基于零库存思想的沃尔玛管理方式。
这些新的思想在中国的企业中普及只是个时间问题。
库存管理的意义重大,不容忽视,基于如此设计了这个系统
算法(数据结构)描述
5.1先定义一个商品的结构体数组:
typedefstruct/*定义结构体数组*/
{
charname[20];/*商品名称*/
inttime;/*进货时间*/
intyear;/*生产日期*/
intno;/*保质期*/
}goods;
5.2建立一个菜单函数,显示10个功能,供用户选择,进行人机对话。
5.3设置一个排序的函数,voidSort_by_time(goodsgs[],intn)。
利用冒泡法先对商品按进货的时间排序,对进货时间一样的货物,再按离保质期最近排序。
5.4设置一个输入的函数,intInput(goodsgs[],intn)。
这个函数是最初商品输入函数,当选择了这个功能后,如果是第一次运行这个程序,保存输入,那将在D盘产生一个名为“商品.doc”的文件,如果已经运行过了,并保存输入,那输入的商品信息将代替原有的信息,数据输入使用交互输入,进行人机对话,确定是否进行下一个数据的添加。
并且调用了上面的排序函数,对输入的数据进行排序。
5.5设置一个显示的函数,voidDisplay(goodsgs[],intn)。
显示上面输入的所有数据,或者是从文件中读取的数据。
5.6设置一个插入的函数,intInsert_a_record(goodsgs[],intn)。
每次插入一组数据,如果要再插入,则再选择这个功能进行操作。
并且在插入的同时,已经排好序,把数据插入适合的位置。
5.7设置一个查找删除的函数,intDelete_a_record(goodsgs[],intn)。
输入要查找的商品名称,如果不存在,则输出失败信息,如果存在,则用下一个信息代替原有信息的位置。
5.8设置一个查找显示的函数,voidQuery_a_record(goodsgs[],intn)。
输入要查找的商品名称,如果不存在,则输出失败信息,如果存在,则显示信息。
5.9设置一个写入文件的函数,voidWritetoText(goodsgs[],intn)。
设置文件指针,先判断文件是否能打开并且能进行写操作,不能则输出失败信息,能则循环写入数据,写完关闭文件。
5.10设置一个读文件的函数,intAddfromText(goodsgs[],intn)。
设置文件指针,判断文件是否能打开而且能进行读操作,能则先读出总的数据量,接着循环读出数据,最后关闭文件。
5.11进入最后一步,main函数。
判断选择的操作,根据用户选择的操作,利用switch语句进行相应的函数调用。
5.12选择保存功能,对数据进行保存,然后选择结束程序退出功能,退出程序。
Sort_by_time(gs,n)
初始条件:
数据已经存在
操作结果:
数据进行排序
Input(gs,n)
初始条件:
没有任何数据存在,或者要替换原文件中的所有数据
操作结果:
数据进行输入
Display(gs,n)
初始条件:
数据已经存在
操作结果:
数据显示
Insert_a_record(gs,n)
初始条件:
数据已经存在
操作结果:
数据插入
Delete_a_record(gs,n)
初始条件:
数据已经存在
操作结果:
数据删除
Query_a_record(gs,n)
初始条件:
数据已经存在
操作结果:
数据统计
WritetoText(gs,n)
初始条件:
数据已经存在
操作结果:
写入文件中
AddfromText(gs,n)
初始条件:
文件已经存在
操作结果:
从文件中读出
流程图:
调试分析:
a、调试中遇到的问题及对问题的解决方法;
1.在商品的排序方面,指针指向错误。
解决方案:
利用画图理清指针的指向,并改正
2.写入文件,当文件不存在数无法写入
解决方案:
当文件不存在时,创建一个文本去存取信息;
3.查找信息,当信息不存在时,程序没有反应
解决方案:
当所搜寻的信息不存在时,返回查找失败;
4.VS运行程序时,出现scanf不安全问题
解决方案:
在项目属性中的预处理器中加入一串代码;
b、算法的时间复杂度和空间复杂度;
算法的时间复杂度为:
O(n^3)
空间复杂度:
170
输出典型数据
界面:
显示功能,显示最初的数据:
插入功能:
删除功能:
查找商品信息:
统计并显示进货时间最早且最接近保质期中止时间的货物:
写入文件:
读取文件:
对读入文件进行排序:
获得测试结果:
源程序
#include
#include
#include
#include
typedefstruct/*定义结构体数组*/
{
charname[20];/*商品名称*/
inttime;/*进货时间*/
intyear;/*生产日期*/
intno;/*保质期*/
}goods;
goodsgs[80];/*结构体数组变量*/
intmenu_select()/*菜单函数*/
{
charc;
do{
system("cls");/*运行前清屏*/
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("*****************************************\n");
printf("请选择(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)/*输入若干条记录*/ { inti=0; charsign=0,x[10]; while(sign! ='n'&&sign! ='N')/*判断*/ { printf("商品名称: ");/*交互输入*/ scanf("%s",gs[n+i].name); printf("进货时间(例20070201): "); scanf("%d",&gs[n+i].time); printf("生产日期(例20070201): "); scanf("%d",&gs[n+i].year); printf("保质期(年): "); scanf("%d",&gs[n+i].no); gets(x);/*清除多余的输入*/ printf("继续输入? (Y/N)"); scanf("%c",&sign);/*输入判断*/ i++; } Sort_by_time(gs,n+i);/*调用排序函数*/ return(n+i); } voidDisplay(goodsgs[],intn)/*显示所有记录*/ { inti; printf("------------------------------------------------\n");/*格式头*/ printf("商品名称进货时间生产日期保质期(年)\n"); printf("------------------------------------------------\n"); for(i=1;i { printf("%-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("-----------------------------------\n");/*格式*/ system("pause"); printf("-----------------------------------\n"); } } system("pause");/*按任何键继续*/ } intInsert_a_record(goodsgs[],intn)/*插入一条记录*/ { charx[10];/*清除多余输入所用*/ printf("商品名称: ");/*交互输入*/ scanf("%s",gs[n].name); printf("进货时间: "); scanf("%d",&gs[n].time); printf("生产日期: "); scanf("%d",&gs[n].year); printf("保质期: "); scanf("%d",&gs[n].no); gets(x); n++; Sort_by_time(gs,n);/*调用排序函数*/ printf("插入成功! \n");/*返回成功信息*/ return(n); } intDelete_a_record(goodsgs[],intn)/*按商品名字查找,删除一条记录*/ { chars[20]; inti=0,j; printf("商品名称: "); scanf("%s",s); while(strcmp(gs[i].name,s)! =0&&i if(i==n) { printf("没找到! \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("删除成功! \n");/*返回成功信息*/ return(n-1); } voidQuery_a_record(goodsgs[],intn)/*查找并显示一个记录*/ { chars[20]; inti=0; printf("输入要查找的商品名称: "); scanf("%s",s); while(strcmp(gs[i].name,s)! =0&&i if(i==n) { printf("没找到! \n");/*输入失败信息*/ return; } printf("进贷时间: %d\n",gs[i].time);/*输出该商品信息*/ printf("生产日期: %d\n",gs[i].year); printf("保质期: %d\n",gs[i].no); } voidWritetoText(goodsgs[],intn)/*将所有记录写入文件*/ { inti=0; FILE*fp;/*定义文件指针*/ if((fp=fopen("d: \\商品.doc","wb"))==NULL)/*打开文件*/ { printf("cann'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("Successed! \n");/*返回成功信息*/ } intAddfromText(goodsgs[],intn)/*从文件中读入数据*/ { inti=0,num; FILE*fp;/*定义文件指针*/ if((fp=fopen("d: \\商品.doc","rb"))==NULL)/*打开文件*/ { printf("cann'topenthefile\n");/*打开失败信息*/ system("pause"); return(n); } fscanf(fp,"%d",&num);/*读入总记录量*/ while(i { fscanf(fp,"%s%d%d%d",gs[n+i].name,&gs[n+i].time,&gs[n+i].year,&gs[n+i].no); i++; } n+=num; fclose(fp);/*关闭文件*/ printf("Successed! \n"); system("pause"); return(n); } voidmain()/*主函数*/ { intn=0; for(;;) { switch(menu_select())/*选择判断*/ { case1: printf("输入最初商品\n");/*输入若干条记录*/ n=Input(gs,n); break; case2: printf("显示所有商品\n");/*显示所有记录*/ Display(gs,n); break; case3: printf("插入\n"); n=Insert_a_record(gs,n);/*插入*/ system("pause"); break; case4: printf("删除\n"); n=Delete_a_record(gs,n);/*按商品名称查找,删除*/ system("pause"); break; case5: printf("查找并显示\n"); Query_a_record(gs,n);/*查找并显示*/ system("pause"); break; case6: printf("统计并显示进货时间最早且最接近保质期中止时间的货物\n"); printf("共有%d件商品.\n",n);/*总共记录数*/ printf("进货时间最早且最接近保质期中止时间的货物: \n"); printf("商品名称: %s\n",gs[0].name); printf("进货时间: %d\n",gs[0].time); printf("生产日期: %d\n",gs[0].year); printf("保质期: %d\n\n",gs[0].no); system("pause"); break; case7: printf("写到文件中\n"); WritetoText(gs,n);/*循环写入数据*/ system("pause"); break; case8: printf("文件中读数据\n"); n=AddfromText(gs,n); break; case9: printf("\n"); Sort_by_time(gs,n); /*对读入的文件进行排序*/ break; case0: printf("结束退出! \n");/*结束程序*/ system("pause"); exit(0); } } } 设计总结 转眼,为期两周的《数据结构》课程设计结束了。 在这次实习中,自己的C语言知识和数据结构知识得到了巩固,编程能力也有了一定的提高。 同时也学会了解决问题的方法。 总结起来,自己主要有以下几点体会: 1.必须牢固掌握基础知识。 由于C语言是大一所学知识,有所遗忘,且未掌握好这学期所学的《算法与数据结构》这门课,所以在实习之初感到棘手。 不知如何下手,但在后来的实习过程中自己通过看书和课外资料,并请教其他同学,慢慢地对C语言和数据结构知识有所熟悉。 这时才逐渐有了思路。 所以,这次实习之后,我告诫自己: 今后一定要牢固掌握好专业基础知识。 2.必须培养严谨的科学态度。 自己在编程时经常因为一些类似于“少了分号”的小错误而导致错误,不够认真细致,这给自己带来了许多麻烦。 编程是一件十分严谨的事情,容不得马虎。 所以在今后自己一定要培养严谨的科学态度。 我想这不仅是对于程序设计,做任何事都应如此。 3.这次课程设计也让我充分认识到《算法与数据结构》这门课的重要性。 它给我们一个思想和大纲,让我们在编程时容易找到思路,不至于无章可循。 同时它也有广泛的实际应用。 总之,在这次实习中,自己的C语言以及数据结构知识得到提高,编程能力也得到了提高。 参考文献 1严蔚敏,吴伟民.数据结构(C语言版)[M].北京: 清华大学出版社.2003 2严蔚敏,吴伟民.数据结构题集(C语言版)[m].北京: 清华大学出版社.2003 3WilliamFord,WilliamTopp.DATASTRUCTUREWITHC++
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 商品 管理 系统 设计 说明书