java仓库管理系统Word文档下载推荐.docx
《java仓库管理系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《java仓库管理系统Word文档下载推荐.docx(23页珍藏版)》请在冰豆网上搜索。
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)输入模块
申请一个结点空间,使ptr1指向它
将ptr1指向结点输入货品的信息
ptr1->
num!
=0
N
NULL=>
ptr1
Y
ptr1!
=NULL
是否为第一个数据(n=0)
Y
Ptr1=>
ptr2->
next;
ptr2=>
prior
Y
ptr1=>
head
n+1=>
n,ptr1=>
ptr2
next
返回head
结束
(2)插入模块
开始
调入载入模块
Head=NULL
申请一个结点空间,使ptr3指向它
给ptr3指向结点输入预插入货品的信息
Head=>
返回NULL
ptr2;
next=>
ptr3=>
ptr3->
“yes”or“no”
返回head
(3)保存模块
输入预保存文件的文件名
创建文件成功
Head=>
Ptr1!
将ptr1指向结点的数据写入文件
Ptr1->
2030
(4)输出模块
调用载入模块
Head==NULL
Y
输出ptr1指向结点的货品信息
对以上各模块的文字解释说明:
(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<
stdio.h>
/*标准输入/输出头文件*/
conio.h>
/*包含绘制图形函数等头文件*/
string.h>
/*包含字符串处理函数头文件*/
stdlib.h>
/*包含动态存储与释放函数头文件*/
graphics.h>
#defineLENsizeof(COM)
#definePRINT"
%-15ld%-15s%-15d\n"
ptr1->
num,ptr1->
name,ptr1->
count
#defineCHECK_COUNTptr1->
count<
#defineCHECK_COUNT2ptr3->
#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*/
/*输入模块*/
{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
PleaseinputtheNo.%dgoods'
%s:
n,string1);
scanf("
%ld"
&
num);
flushall();
if(ptr1->
num==0)
PleasepressanykeytobacktolastMenu:
free(ptr1);
return(0);
n,string2);
scanf("
%s"
name);
flushall();
/*刷新缓冲区函数*/
n,string3);
%d"
count);
if(CHECK_COUNT)
Pleaseinputtherightgoodscount!
}while(CHECK_COUNT);
while(ptr1->
=NULL)
{if(n==1)
head=ptr1;
elseptr2->
next=ptr1;
ptr1->
prior=ptr2;
n=n+1;
ptr2=ptr1;
if((ptr1=(COM*)malloc(LEN))==NULL)
{printf("
{ptr1->
num=NULL;
break;
}
ptr2->
next=NULL;
gotoxy(1,24);
Finishtheinputtingofgoods'
message,pressanykeytobacktolastMenu,pleasesave:
getch();
return(head);
/*插入模块*/
COM*insert()
{COM*ptr3;
charstring1[]={"
goodsnumber"
goodsname"
goodscount"
charjudge[10];
gotoxy(18,10);
Pleaseinputinsertedgoods'
fliename:
head=openfile();
if(head==NULL)
return(NULL);
else
{clrscr();
goodsmessage:
if((ptr3=(COM*)malloc(LEN))==NULL)
Noenoughmemory,failtocreatnode!
Pleaseinputgoods'
%s(>
0):
string1);
if(ptr3->
num<
=0)
Errorinputting!
pleasechoosetheinsertedgoodsagain\n"
return;
string2);
flushall();
string3);
(ptr3->
count));
if(CHECK_COUNT2)
Pleaseinputtherightgoodscount(>
0)!
}while(CHECK_COUNT2);
ptr1=head;
while(ptr1!
{ptr2=ptr1;
ptr1=ptr1->
next=ptr3;
ptr3->
\nInsertingsuccess!
Cotinuetoinsert?
(yesorno):
judge);
}while(!
strcmp(judge,"
yes"
));
gotoxy(20,10);
Insertingsuccess!
gotoxy(18,11);
PressanykeytobacktolastMenu\n"
gotoxy(16,12);
AndmakesuretoSave(6)themoryouwilllosethem!
/*删除模块*/
COM*delet()
{charname[10];
intsel;
intdel_num;
Pleaseinputdelectedgoods'
{do
gotoxy(3,4);
message:
gotoxy(1,9);
*1.Deldependongoodsnumber\n"
gotoxy(1,10);
*2.Deldependongoodsname\n"
gotoxy(10,22);
pleasechooseanumberbetween1and2:
sel);
switch(sel)
{case1:
clrscr();
gotoxy(6,6);
Pleaseinputgoodsnumber:
del_num);
case2:
Pleaseinputgoodsname:
}while(sel!
=1&
&
sel!
=2);
num==del_num||(strcmp(ptr1->
name,name)==0))
{head=ptr1->
Successtodelectgoodsmessage!
else/*判断是否是目标结点*/
{while(ptr1!
=NULL&
=del_num&
strcmp(ptr1->
name,name)!
{ptr2->
next=ptr1->
next->
prior=ptr1->
prior;
\nSuccesstodelectgoodsmessage!
\n\n"
elseprintf("
\nCan'
tfindthisgoodsmessage!
Cotinuetodelect?
strcmp(judge,"
Delectingsuccess!
/*查找模块*/
voidsearch()
{charname[10];
longintsel_num;
Pleasepresssearchedgoods'
return;
gotoxy(5,4);
Pleasechoosethewaytosearch:
*1.Searchdependongoodsnumber\n"
*1.Searchdependongoodsname\n"
sel_num);
name);
=sel_num&
if((ptr1->
num==sel_num)||(strcmp(ptr1->
\nSuccesstosearchgoodsmessage!
goodsnumbergoodsnamegoodscount\n\n"
printf(PRINT);
printf