java仓库管理系统.docx
- 文档编号:11462759
- 上传时间:2023-03-01
- 格式:DOCX
- 页数:29
- 大小:131.31KB
java仓库管理系统.docx
《java仓库管理系统.docx》由会员分享,可在线阅读,更多相关《java仓库管理系统.docx(29页珍藏版)》请在冰豆网上搜索。
java仓库管理系统
系统开发的必要性及介绍………………………
系统概要设计……………………………………
系统详细设计……………………………………
系统源代码………………………………………
调试分析和测试结果……………………………
系统使用说明书…………………………………
心得体会…………………………………………
参考文献…………………………………………
课程设计题目:
仓库货品信息管理系统
一、系统开发的必要性及介绍
1.必要性
仓库管理是现代物流管理的一个重要组成部分,仓库货物管理信息系统的设计,可以实现对存储货物信息及统计单据的计算机管理,简化作业程序,提高作业效率,为企业创造更高的利润。
2.主要功能介绍
本系统有对库存货品信息的输入、插入、删除、查找等功能,并能将建立和更新的库存信息保存于文件供输出或打印。
对于查找、删除等功能要求能按货品名、货品号分别进行。
每个货品的相关信息包括:
货品号、货品名、货品库存量、进货日期、货品生产厂家及供应商等。
二、系统概要设计
1.系统设计任务
要求系统能实现库存货品信息的输入、插入、删除、查找等功能,并能将建立和更新的库存信息保存于文件供输出或打印。
对于查找、删除等功能能够按货品名、货品号分别进行。
每个货品的相关信息包括:
货品号、货品名、货品库存量、进货日期、货品生产厂家及供应商等。
2.方案确定
库存货品信息管理系统要求实现许多功能,可遵循结构化程序设计思想来进行本系统的设计——自顶向下,逐步细化,也就是将软件设计任务划分成许多容易解决的小的子任务,即分解出许多子功能模块进行设计。
本程序经过分析可划分出6个子任务:
输入、输出、插入、删除、查找和保存。
3.模块划分
(1)程序设计模块连接图
库存货品信息管理系统的模块连接结构如下图:
4.环境要求
硬件:
PC机
软件:
电脑安装有TC集成环境
三、系统详细设计
1.数据结构设计
(1)数据结构的选择
选取动态数据结构,本系统是通过双向链表来完成的。
动态存储分配与释放:
申请存储空间函数malloc()
函数首部原型为
void*malloc(unsignedintsize)
释放存储空间函数free()
函数首部原型为
voidfree(void*p)
动态数据结构——双向链表
(2)数据类型的选择
structcommodity/*定义双向链表结构体*/
{intnumber;/*货物编号*/
charname[max];/*货物名称*/
intcounter;/*货物数量*/
structcommodity*piror,*next;/*定义两指针,分别指向其前驱和后继*/
};
(3)变量函数说明:
COM*input()
操作结果:
输入货品信息
COM*insert_perf()
操作结果:
插入某货品
COM*del_perf()
操作结果:
删除某货品
serch()
操作结果:
查找某货品
print_perf()
操作结果:
输出某货品
save(COM*head)
操作结果:
保存
COM*openfile()
操作结果:
载入
2.流程框图
查找模块和载入模块的算法框图在此略。
(1)输入模块
N
Y
N
Y
N
Y
Y
(2)插入模块
N
Y
N
Y
(3)保存模块
N
Y
N
Y
(4)输出模块
Y
Y
N
Y
N
对以上各模块的文字解释说明:
(1)输入模块:
其实就是一个建立链表的操作模块。
建立链表的具体操作就是逐一输入各结点数据,并建立其前后相链的关系。
首先设三个指针变量:
head,ptr1,ptr2。
它们都是指向结构体类型数据的。
先使head的值为NULL,这是链表为空的情况。
用malloc函数开辟一个结点,并使ptr1,ptr2都指向它,之后从键盘读入一个货品的数据给ptr1所指向的结点。
当输入的ptr1->num不为0时,令head=ptr1;ptr2=ptr1,即把ptr1的值赋给head,使ptr2,ptr1,head都指向这一新开辟的结点,此结点就成为链表中的第一个结点。
再开辟一个新结点并使ptr1指向它,读入该结点的数据,如果输入的ptr1->num不为0,则应链入这第二个结点,这时和上一个结点的处理不同,是将ptr1的值赋给ptr2->next,也就是使第一个结点的next成员指向第二个结点,接着将ptr2也指向结点2。
再开辟一个新结点并使ptr1指向它,读入该结点的数据,同样将ptr1的值赋给ptr2->next,也就是使第三个结点链接到第二个结点之后,并接着将ptr1的值赋给ptr2,使ptr2指向结点3。
再开辟一个新结点,并使ptr1指向它,输入该结点的数据,如果输入ptr1->num为0,则是输入结束标志,此结点不被链接到链表中,就将NULL赋给ptr2->next。
建立链表过程至此结束,ptr1最后所指结点并未链入链表中。
(2)插入模块:
要完成的是链表的插入操作,即将一个新结点插入到一个已有的链表中,对刚刚建立的链表,首先新设一个指针变量ptr0,并开辟一个结点使ptr3指向它,输入该结点的数据,即新货的有关数据,接下来查找要插入位置结点,找到后只需修改此结点和ptr0指向结点指针域的值即可,链表中所有元素位置均不需移动,这就体现了链表的优点。
(3)删除模块:
要完成的是链表的删除操作,只需修改链表中要删除结点的前一个结点的链指针。
使之指向被删除结点的后面一个结点即可。
(4)保存模块:
将最终想要保留的数据信息保存于文件中。
(5)输出模块:
要完成的是依次输出链表中各结点的数据的操作。
首先找到链表头结点的地址,也就是head的值,然后设一个指针变量ptr1,先指向第一个结点,输出ptr1所指的结点,然后使ptr1后移一个结点,再输入直至链表的尾结点结束。
四、系统源代码
#include
#include
#include
#include
#include
#defineLENsizeof(COM)
#definePRINT"%-15ld%-15s%-15d\n",ptr1->num,ptr1->name,ptr1->count
#defineCHECK_COUNTptr1->count<0
#defineCHECK_COUNT2ptr3->count<0
#defineNULL0
typedefstructcom
{longintnum;
charname[10];
intcount;
structcom*prior,*next;
}COM;/*定义结构体*/
COM*input();/*输入货品信息*/
COM*insert();/*插入货品信息*/
COM*delet();/*删除货品信息*/
voidsearch();/*查找货品信息*/
voidsave(COM*head);/*保存货品信息*/
COM*openfile();/*从文件将货品信息载入链表*/
voidprint();/*输出货品信息*/
FILE*fp;/*定义指向文件的指针变量*/
COM*head=NULL;
COM*ptr1=NULL,*ptr2=NULL;
charfilename1[10];/*定义字符数组,用来存放文件名*/
charfilename2[]={".dat"};/*文件扩展名.dat*/
/*输入模块*/
COM*input()
{charstring1[]={"number"};
charstring2[]={"name"};
charstring3[]={"count"};
intn=1;
if((ptr1=(COM*)malloc(LEN))==NULL)/*申请空间函数*/
{printf("Noenoughmemory,failtocreatlinklist!
");
getch();/*无回显的从键盘读取任意一个字符*/
}
clrscr();
printf("Pleaseinputdependontheemply(goodsnumber==0over):
\n");
do
{printf("PleaseinputtheNo.%dgoods'%s:
\n",n,string1);
scanf("%ld",&ptr1->num);flushall();
if(ptr1->num==0)
{printf("PleasepressanykeytobacktolastMenu:
");
getch();
free(ptr1);
return(0);
}
printf("PleaseinputtheNo.%dgoods'%s:
\n",n,string2);scanf("%s",&ptr1->name);
flushall();/*刷新缓冲区函数*/
printf("PleaseinputtheNo.%dgoods'%s:
\n",n,string3);scanf("%d",&ptr1->count);
flushall();
if(CHECK_COUNT)
printf("Pleaseinputtherightgoodscount!
\n");
}while(CHECK_COUNT);
while(ptr1->num!
=NULL)
{if(n==1)
head=ptr1;
elseptr2->next=ptr1;
ptr1->prior=ptr2;
n=n+1;
ptr2=ptr1;
if((ptr1=(COM*)malloc(LEN))==NULL)
{printf("Noenoughmemory,failtocreatlinklist!
");
getch();
}
do
{printf("PleaseinputtheNo.%dgoods'%s:
\n",n,string1);
scanf("%ld",&ptr1->num);
flushall();
if(ptr1->num==0)
{ptr1->num=NULL;
break;}
printf("PleaseinputtheNo.%dgoods'%s:
\n",n,string2);scanf("%s",&ptr1->name);
flushall();
printf("PleaseinputtheNo.%dgoods'%s:
\n",n,string3);scanf("%d",&ptr1->count);
flushall();
if(CHECK_COUNT)
printf("Pleaseinputtherightgoodscount!
\n");
}while(CHECK_COUNT);
}
ptr2->next=NULL;
gotoxy(1,24);
printf("Finishtheinputtingofgoods'message,pressanykeytobacktolastMenu,pleasesave:
");
getch();
return(head);
}
/*插入模块*/
COM*insert()
{COM*ptr3;
charstring1[]={"goodsnumber"};
charstring2[]={"goodsname"};
charstring3[]={"goodscount"};
charjudge[10];
clrscr();
gotoxy(18,10);
printf("Pleaseinputinsertedgoods'fliename:
");
head=openfile();
if(head==NULL)
return(NULL);
else
do
{clrscr();
printf("Pleaseinputinsertedgoods'goodsmessage:
\n");
if((ptr3=(COM*)malloc(LEN))==NULL)
{printf("Noenoughmemory,failtocreatnode!
");
getch();
}
do
{printf("Pleaseinputgoods'%s(>0):
\n",string1);scanf("%ld",&ptr3->num);
flushall();
if(ptr3->num<=0)
{printf("Errorinputting!
pleasechoosetheinsertedgoodsagain\n");
getch();return;
}
printf("Pleaseinputgoods'%s:
\n",string2);scanf("%s",&ptr3->name);flushall();
printf("Pleaseinputgoods'%s:
\n",string3);scanf("%d",&(ptr3->count));flushall();
if(CHECK_COUNT2)
printf("Pleaseinputtherightgoodscount(>0)!
\n");
}while(CHECK_COUNT2);
ptr1=head;
while(ptr1!
=NULL)
{ptr2=ptr1;
ptr1=ptr1->next;
ptr1->prior=ptr2;
}
ptr2->next=ptr3;
ptr3->prior=ptr2;
ptr3->next=NULL;
printf("\nInsertingsuccess!
Cotinuetoinsert?
(yesorno):
");
scanf("%s",judge);
clrscr();
}while(!
strcmp(judge,"yes"));
gotoxy(20,10);
printf("Insertingsuccess!
\n");
gotoxy(18,11);
printf("PressanykeytobacktolastMenu\n");
gotoxy(16,12);
printf("AndmakesuretoSave(6)themoryouwilllosethem!
\n");
getch();
return(head);
}
/*删除模块*/
COM*delet()
{charname[10];
charjudge[10];
intsel;
intdel_num;
clrscr();
gotoxy(20,10);
printf("Pleaseinputdelectedgoods'fliename:
");
head=openfile();
clrscr();
if(head==NULL)
return(NULL);
else
do
{do
{clrscr();
gotoxy(3,4);
printf("Pleaseinputdelectedgoods'message:
");
gotoxy(1,9);
printf("*1.Deldependongoodsnumber\n");
gotoxy(1,10);
printf("*2.Deldependongoodsname\n");
gotoxy(10,22);
printf("pleasechooseanumberbetween1and2:
");
scanf("%d",&sel);
switch(sel)
{case1:
clrscr();
gotoxy(6,6);
printf("Pleaseinputgoodsnumber:
");
scanf("%d",&del_num);
break;
case2:
clrscr();
gotoxy(6,6);
printf("Pleaseinputgoodsname:
");
scanf("%s",&name);
break;
}
}while(sel!
=1&&sel!
=2);
ptr1=head;
if(ptr1->num==del_num||(strcmp(ptr1->name,name)==0))
{head=ptr1->next;
printf("Successtodelectgoodsmessage!
\n");
}
else/*判断是否是目标结点*/
{while(ptr1!
=NULL&&ptr1->num!
=del_num&&strcmp(ptr1->name,name)!
=0)
{ptr2=ptr1;
ptr1=ptr1->next;
ptr1->prior=ptr2;
}
if(ptr1->num==del_num||(strcmp(ptr1->name,name)==0))
{ptr2->next=ptr1->next;
ptr1->next->prior=ptr1->prior;
free(ptr1);
printf("\nSuccesstodelectgoodsmessage!
\n\n");
}
elseprintf("\nCan'tfindthisgoodsmessage!
\n\n");
}
printf("Cotinuetodelect?
(yesorno):
");
scanf("%s",judge);
}while(!
strcmp(judge,"yes"));
clrscr();
gotoxy(20,10);
printf("Delectingsuccess!
\n");
gotoxy(18,11);
printf("PressanykeytobacktolastMenu\n");
gotoxy(16,12);
printf("AndmakesuretoSave(6)themoryouwilllosethem!
\n");
getch();
return(head);
}
/*查找模块*/
voidsearch()
{charname[10];
charjudge[10];
intsel;
longintsel_num;
clrscr();
gotoxy(18,10);
printf("Pleasepresssearchedgoods'fliename:
");
head=openfile();
if(head==NULL)
return;
else
do
{do
{clrscr();
gotoxy(5,4);
printf("Pleasechoosethewaytosearch:
");
gotoxy(1,9);
printf("*1.Searchdependongoodsnumber\n");
printf("*1.Searchdependongoodsname\n");
gotoxy(10,22);
printf("pleasechooseanumberbetween1and2:
");
scanf("%d",&sel);
switch(sel)
{case1:
clrscr();
printf("Pleaseinputgoodsnumber:
");
scanf("%ld",&sel_num);
break;
case2:
clrscr();
printf("Pleaseinputgoodsname:
");
scanf("%s",name);
break;
}
}while(sel!
=1&&sel!
=2);
ptr1=head;
while(ptr1!
=NULL&&ptr1->num!
=sel_num&&strcmp(ptr1->name,name)!
=0)
ptr1=ptr1->next;
if((ptr1->num==sel_num)||(strcmp(ptr1->name,name)==0))
{printf("\nSuccesstosearchgoodsmessage!
\n");
printf("goodsnumbergoodsnamegoodscount\n\n");
printf(PRINT);
}
else
printf("\nCan'tfindthisgoodsmessage!
\n\n");
printf("Cotinuetosearch?
(yesorno):
");
scanf("%s",judge);
}while(!
strcmp(judge,"yes"));
gotoxy(10,24);
printf("PleasepressanykeytobacktolastMenu:
");
getch();
}
/*输出模块*/
voidprint()
{inti=1;
clrscr();
gotoxy(18,10);
printf("Pleaseinputprintedgoods'filename:
");
head=openfile();
if(head==NULL)
return;
else
clrscr();
printf("Theprintedresultasfollows:
\n");
printf("goodsnumbergoodsnamegoodscount\n\n");
ptr1=head;
do
{printf(PRINT);
ptr1=ptr1->next;
if(i/10==1)/*超过十行换页*/
{i=0;
printf("Pressanykeytochangepage:
");
getch();
clrscr();
gotoxy(0,6);
printf("goodsnumb
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 仓库 管理 系统