仓库管理系统说明书.docx
《仓库管理系统说明书.docx》由会员分享,可在线阅读,更多相关《仓库管理系统说明书.docx(29页珍藏版)》请在冰豆网上搜索。
![仓库管理系统说明书.docx](https://file1.bdocx.com/fileroot1/2023-1/30/83f7d520-6c2e-4330-bcf9-655d67eca445/83f7d520-6c2e-4330-bcf9-655d67eca4451.gif)
仓库管理系统说明书
目录
摘要1
1.采用类c语言定义相关的数据类型2
2.各模块的伪码算法2
3.函数的调用关系图3
4.调试分析3
5.测试结果4
6.源程序(带注释)5
总结9
参考文献10
致谢11
附件Ⅰ任务一源程序代码12
摘要
自1972年推出C语言设计程序以来,C语言渐渐成为世界上流行最为广泛的高级设计语言,并在C语言的基础上产生了C++、VisualC++、Java、C#等。
C语言是目前编程领域中最有影响力的一种程序设计语言,它具有灵活性、丰富性、可移植性的优点。
C语言技术使人们的工作系统化,工作效率提高,并且实现了资源的共享。
一个庞大的仓库商品信息,人工处理起来非常吃力、费时。
以往的仓库管理基本上都是靠手工进行,随着仓库的规模增大,有关商品管理工作所涉及的数据量越来越大,单纯依靠增加人力、物力来进行商品管理已经脱离时代发展的轨道。
由于现今的仓库管理非常繁琐,管理人员付出大量的工作时间,得到的效率很低,有时甚至会延误商品的保质期,造成很大的经济损失。
因此为提高工作效率,减轻工作负担,开发仓库管理系统软件非常必要。
建立仓库信息管理系统,在C语言的平台下,可以方便记录商品详细信息的记录和查找等管理,提高工作效率,实现仓库商品信息管理工作流程的系统化、规范化和自动化。
这次课程设计的仓库管理系统采用结构体的方式,完成了对数据的录入、查找、删除、插入、修改、保存、输出等功能。
通过完成本课题进一步熟悉C语言基本知识,并掌握数据结构的一些重要的实用的算法思想,进一步熟悉数组的建立运用和函数调用,加深对数据结构的理解,提高算法设计的能力,锻炼编程的能力。
关键词:
仓库管理;单链表;数据结构和算法
1.采用类c语言定义相关的数据类型
(1)structDate/*声明structDate类型*/
{
intmouth;
intday;
intyear;
};
(2)structcangku
{
intnum;/*商品编号*/
charname[20];/*商品名称*/
charfactor[50];/*生产厂家*/
charintrodution[50];/*备注*/
intamount;/*入库数量*/
intnamount;/*现存数量*/
intprice/*商品价格*/
structDaterktime;/*入库时间也是另一结构体类型的成员*/
};
2.各模块的伪码算法
1.Main()主函数模块,用一个swtich()函数实现各个模块的连接以实现各个功能。
2.Menu_select()菜单函数模块,显示程序的菜单及输入所需的功能选项。
3.Import(Storehouset[])输入函数模块,完成数据的录入功能。
4.SaveRecord(Storehouset[],intn)保存函数模块,程序做每一次对数据的添加,修改,删除之后都会运行一次,把数据写到一个新建的文件中。
5.Load(Storehouset[],intn)加载函数模块,在对数据进行处理之前,运行本函数把已有的数据加载到运存中。
6.DeleteRecord(Storehouset[],intn)删除函数模块,按商品名称删除数据。
7.AlterRecord(Storehouset[],intn)修改函数模块,先if(strcmp(s,t[i].name)==0)按名称查找商品,在修改数据。
8.Search(Storehouset[],intn)查询函数模块,先输入查询方式if(strcmp(s,t[i].name)==0)查找数据。
9.Sort(Storehouset[],intn)排序函数模块,先选择排序方式,用冒泡排序的的方式排序。
10.voidtuichu()退出函数模块,显示退出函数界面。
3.函数的调用关系图
4.调试分析
a、调试中遇到的问题及对问题的解决方法
在实现商品查询功能时,输出乱码。
通过修改输出格式的控制和对printf()的修改解决乱码问题。
定义结构体时入库时间问题,通过在主结构体中定义structDaterktime再定义rktime为年月日解决。
b、算法的时间复杂度和空间复杂度
以最坏情况下的时间复杂度作为算法的时间复杂度。
本程序的最坏情况出现在排序时需要全部移动数据,排序为冒泡排序故时间复杂度为O(n²)。
算法所需要的储存空间分为三部分:
输入数据所占用的空间,程序代码所占用的空间和辅助变量所占用的空间。
一般以最坏情况下的空间复杂度作为算法的空间复杂度。
空间复杂度为O(n)。
5.测试结果
第一步
按Enter进入主界面
图1
第二步
按1录入一组数据
第三步
按6显示全部记录,显示如下
图2
第四步
按7再按1,按名称排序如下
图3
6.源程序(带注释)
voidSort(Storehouset[],intn)
{charxuanze;
system("cls");
printf("\n\n请输入排序方式(按4可返回系统管理菜单):
\n1.按名称排序2.按编号排序\
3.按入库时间排序");
printf("\n");
xuanze=getch();/*从控制台无回显地取一个字符*/
for(;xuanze!
='1'&&xuanze!
='2'&&xuanze!
='3'&&xuanze!
='4';)/*判断指令是否有效,无效则重新输入*/
xuanze=getch();
if(xuanze=='1')/*按商品名称排序*/
{
inti,j;
structcangkutemp;
for(j=1;jfor(i=0;iif((strcmp(t[i].name,t[i+1].name))>0)
{
temp=t[i];
t[i]=t[i+1];
t[i+1]=temp;
}
printf("排序成功!
!
!
\n");
printf("排序后仓库信息列表如下:
\n");
List(t,n);
}
if(xuanze=='2')
/*按商品编号排序*/
{
inti,j;
structcangkutemp;
for(j=1;jfor(i=0;iif(t[i].num>t[i+1].num)
{
temp=t[i];
t[i]=t[i+1];
t[i+1]=temp;
}
printf("排序成功!
!
!
\n");
printf("排序后仓库信息列表如下:
\n");
List(t,n);
}
if(xuanze=='3')
/*按入库时间排序*/
{
inti,j;
structcangkutemp;
for(j=1;jfor(i=0;iif(t[i].rktime.year>t[i+1].rktime.year)
{
temp=t[i];
t[i]=t[i+1];
t[i+1]=temp;
}
elseif(t[i].rktime.year==t[i+1].rktime.year)
{if(t[i].rktime.month>t[i+1].rktime.month)
{
temp=t[i];
t[i]=t[i+1];
t[i+1]=temp;
}
elseif(t[i].rktime.month==t[i+1].rktime.month)
{if(t[i].rktime.day>t[i+1].rktime.day)
{
temp=t[i];
t[i]=t[i+1];
t[i+1]=temp;
}
}
}
printf("排序成功!
!
!
\n");
printf("排序后仓库信息列表如下:
\n");
List(t,n);
}
if(xuanze=='4')
/*返回系统管理菜单*/
Menu_select();
}
总结
本系统通过在main主函数中使用switch结构,把各个子函数连接起来,形成鲜明的结构;增加了密码登录模块,更有效的保护信息安全;数据的录入采用结构体的形式,使数据录入、显示更加规范化;主界面通过菜单函数显示所有的功能,使界面简洁紧凑,功能一目了然,通过菜单函数的十个选项,选择不同的功能实现所要进行的操作;各个功能的设计比较严谨,使用过程方便快捷,可以更加准确快速的进行仓库信息的管理和存储;独特的系统使整个结构清晰明了;该程序设计小巧,便于使用和推广。
程序简便易操作,每个函数都有各自不同的功能,使得仓库信息管理管理系统更加细致全面。
我通过学习C语言程序设计和算法与数据结构,对C语言的基本概念和算法与数据结构也有了一定的了解,平时虽然也做过一些练习,也看了不少程序从而掌握一定的语法知识和编程经验。
但是对于有些功能强大的软件还是没有尝试过能否编得起来。
所以决定在所学知识的基础上,再加以拓展,编个主题明确、具有一定使用价值的中小程序,提高了自身的编程水平与上机调试技能。
通过这三星期的实习,我得到了很大的收获。
参考文献
[1]严蔚敏,吴伟民.《数据结构(C语言版)》.清华大学出版社.2007)
[2]张永,李睿,年福忠.《算法与数据结构》.国防工业出版社.2009)
[3]王连相,赵付青.《C/C++程序设计教程》.中国铁道出版社.2011)
[3]谭浩强.《c语言程序设计》.清华大学出版社.2008)
致谢
附件Ⅰ任务一源程序代码
#include
#include
#include
#include
structDate
{
intyear;
intmonth;
intday;
};
structcangku
{
intnum;
charname[20];
charfactor[50];
charintrodution[50];
intamount;
intnamount;
intprice;
structDaterktime;
};
typedefstructcangkuStorehouse;
intImport(Storehouset[]);
voidList(Storehouset[],intn);
voidSearch(Storehouset[],intn);
intDeleteRecord(Storehouset[],intn);
intAddRecord(Storehouset[],intn);
intchuku(Storehouset[],intn);
voidSort(Storehouset[],intn);
voidSaveRecord(Storehouset[],intn);
intLoadRecord(Storehouset[]);
intLoadRecord1(Storehouset[]);
voidSave(Storehouset[],intn);
voidLoad(Storehouset[],intn);
voidLoad1(Storehouset[]);
intMenu_select();
voidtuichu();
voidmain()
{
Storehouseck[50];
intlength,w=1;
while(w)
{
switch(Menu_select())
{
case1:
length=Import(ck);
SaveRecord(ck,length);
break;
case2:
length=LoadRecord(ck);
Search(ck,length);
break;
case3:
length=LoadRecord(ck);
length=DeleteRecord(ck,length);
SaveRecord(ck,length);
break;
case4:
length=LoadRecord(ck);
length=chuku(ck,length);
SaveRecord(ck,length);
break;
case5:
length=LoadRecord(ck);
length=AddRecord(ck,length);
SaveRecord(ck,length);
break;
case6:
length=LoadRecord(ck);
system("cls");
List(ck,length);
break;
case7:
length=LoadRecord(ck);
system("cls");
Sort(ck,length);
SaveRecord(ck,length);
break;
case8:
length=LoadRecord(ck);
system("cls");
Save(ck,length);
break;
case9:
length=LoadRecord1(ck);
Load1(ck);
system("cls");
Load(ck,length);
break;
case0:
tuichu();
}
}
}
intMenu_select()
{
intc;
printf("按Enter键进入仓库管理菜单\n");
getchar();
system("cls");
system("modeconcols=80lines=20&color17");
printf("\n\n");
printf("══════════════════════════════════");
printf("");
printf("欢迎进入仓库产品管理系统");
printf("");
printf("");
printf("1.录入仓库初始记录2.商品查询");
printf("");
printf("3.删除商品记录4.商品出库");
printf("");
printf("5.增加商品信息6.显示全部记录");
printf("");
printf("7.商品排序8.备份");
printf("");
printf("9.恢复0.退出");
printf("");
printf("");
printf("╭⌒╮⌒╮∵∴.");
printf("╱◥██◣'⌒╮∵∴");
printf("│田│田田│∴∴");
printf("╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬");
printf("══════════════════════════════════");
do
{
printf("\n输入您想要进行的操作选项键(0-9):
");
if(scanf("%d",&c)!
=1)
{
while(getchar()!
='\n')
continue;
}
}
while(c<0||c>9);
returnc;
}
intImport(Storehouset[])
{
inti,n;
system("cls");
printf("\n请输入要输入的商品数目:
\n");
scanf("%d",&n);
printf("开始输入仓库信息:
\n");
for(i=0;i{
system("cls");
printf("\n第%d个商品的编号:
",i+1);
scanf("%d",&t[i].num);
printf("第%d个商品的名称:
",i+1);
scanf("%s",&t[i].name);
printf("第%d个商品价格:
",i+1);
scanf("%d",&t[i].price);
printf("第%d个生产厂家:
",i+1);
scanf("%s",&t[i].factor);
printf("第%d个商品的入库时间:
",i+1);
scanf("%d%d%d",&t[i].rktime.year,&t[i].rktime.month,&t[i].rktime.day);
printf("第%d个商品的入库数量:
",i+1);
scanf("%d",&t[i].amount);
printf("第%d个商品的现存数量:
",i+1);
scanf("%d",&t[i].namount);
printf("第%d个商品备注:
",i+1);
scanf("%s",&t[i].introdution);
}
return(n);
}
voidList(Storehouset[],intn)
{
inti;
printf("**************************************************************************\n");
printf("编号名称价格生产厂家入库时间入库数量现存数量备注\n");
printf("--------------------------------------------------------------------------\n");
for(i=0;i{
printf("%-5d%-10s%-7d%-13s%-5d%-3d%-7d%-10d%-8d%-7s\n",t[i].num,t[i].name,t[i].price,t[i].factor,\
t[i].rktime.year,t[i].rktime.month,t[i].rktime.day,t[i].amount,t[i].namount,t[i].introdution);//
}
printf("**************************************************************************\n");
printf("\n");
getchar();
}
voidSearch(Storehouset[],intn)
{
charxuanze;
chars[20],ch[20];
intb,m,d,y,i,flag=0;
system("cls");
printf("\n\n请输入查询方式(按5可返回系统管理菜单):
\n1.通过编号查询2.通过名称查询\n");
printf("\n3.通过生产厂家查询4.通过入库时间查询\n");
printf("\n5.返回菜单选项\n");
xuanze=getch();/*从控制台无回显地取一个字符*/
for(;xuanze!
='1'&&xuanze!
='2'&&xuanze!
='3'&&xuanze!
='4'&&xuanze!
='5';)
/*判断指令是否有效,无效则重新输入*/
xuanze=getch();
if(xuanze=='1')
{
printf("\n请输入物品编号:
");
scanf("%d",&b);
for(i=0;i{
if(b==t[i].num)
{
flag=1;
system("cls");
printf("\n\n要查找的商品信息如下:
\n");
printf("\n");
printf("**************************************************************************\n");
printf("编号名称价格生产厂家入库时间入库数量现存数量备注\n");
printf("--------------------------------------------------------------------------\n");
{
printf("%-5d%-10s%-7d%-13s%-5d%-3d%-7d%-10d%-8d%-7s\n",t[i].num,t[i].name,t[i].price,t[i].factor,\
t[i].rktime.year,t[i].rktime.month,t[i].rktime.day,t[i].amount,t[i].namount,t[i].introdution);//
}
printf("**************************************************************************\n");
printf("\n");
}
}
if(flag==0)
printf("要查找的商品不存在!
!
\n");
getchar();
}
if(xuanze=='2')
{
printf("\n请输入要查找的商品名称:
\n");
scanf("%s",s);
for(i=0;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("%-5d%-10s%-7d%-13s%-5d%-3d%-7d%-10d%-8d%-7s\n",t[i].num,t[i].name,t[i].price,t[i].factor,\
t[i].rktime.year,t[i].rktime.month,t[i].rktime.day,t[i].amount,t[i].namount,t[i].introdution);//
}
printf("**************************************************************************\n");
printf("\n");
}
}
if(flag==0)
printf("要查找的商品不存在!
!
\n");
getchar();
}
if(xuanze=='3')
{
printf("\n请输入要查找的生产厂家:
\n");
scanf("%s",ch);
for(i=0;i{
if(strcmp(ch,t[i].factor)==0)
{
flag=1;
system("cls"