大数据结构实习报告材料链表维护.docx
《大数据结构实习报告材料链表维护.docx》由会员分享,可在线阅读,更多相关《大数据结构实习报告材料链表维护.docx(26页珍藏版)》请在冰豆网上搜索。
大数据结构实习报告材料链表维护
据结构实习报告一
机房名称 信息楼420
时间 2012年12月25日
学院计算机与通信工程学院
专业班级
姓 名
学 号
指导教师
商品库存管理系统实习报告
一,问题的提出
在各种商场的库存管理中,各种商品的库存量在每天的销售与进货过程中会发生不断的变化,而由于商场是零售经营,所以每天涉及库存的维护是一个比较麻烦的问题,另一方面,由于受市场和物价,商品的价格在不同的时间内会发生一定的变化,部分商品也会由于科技的发展,或者消费者的价值取向,审美观等方面的影响,会淘汰掉,这既涉及到库存价格的变化,以及商品的变化,作为一个大型商场,没有好的库存管理方案,将会是一场灾难,所以,库存管理系统是必需的。
为此,我用所学数据结构算法设计了这样一个实现库存模型维护的程序,从而实现商场家电部门的库存维护,其中包括商品的初始化,商品的录入,淘汰商品的删除,以及商品信息的更新,商品信息的打印,以及库存商品文件与程序中表的转换。
因此可以以链式结构的有序表表示某商厦家电部的库存模型。
当有提货或进货的业务要求是,需要对该有序表及时进行维护。
每个工作日结束之后,将链式结构的有序表中的数据以文件的形式保存;每天营业之初需要将文件形式的数据恢复成链式结构的有序表。
二,功能需求分析:
基本要求如下:
链式结构的有序表的结点结构的数据域应包括家电名称、品牌型号、单价及数量、以结点中单价值的非减序列体现着有序性。
日常的维护操作应包括初始化、创建表、插入、删除、更新数据、打印、查询以及链式结构的有序表与文件之间的数据转换。
具体如下描述:
商品信息的输入形式:
以手动输入或者从文件中读取。
商品结构体中(商品号,商品名,商品品牌,商品单价,商品数量)是要求输入的,其中商品号和商品数量的数据类型是整型,商品名和商品品牌的数据类型是字符串型,商品单价是浮点型。
输出的形式包括以单行为一商品信息的屏幕输出和输出到文件。
包括按商品号的顺序输出和按商品价格高低输出两种。
商品的初始化,商品的录入,按商品号的排序,按商品号排序输出,按商品价格排序,按商品价格排序输出,指定商品的查询,淘汰商品的删除,以及商品信息的更新,商品信息的打印,以及库存商品文件与程序中表的转换。
测试数据,当库存文件记录为空时,输出库存文件。
三,详细设计
以链式结构的有序表表示某商厦家电部的库存模型,日常的维护包括初始化、插入、删除、更新、打印、查询,其中主函数设计如下:
当输入不同的数字时,主函数将调用不同的功能函数。
主函数设计如下:
voidmain()
intoperate=1;
LNode*L;
printf("\t\t\t@!
@家电部库存管理系统@!
@\n\n");
Init(&L);
while(operate)
{
printf("\t************************************************");
printf("\n\t\t1.系统初始化\t2.插入数据\t3.删除数据\t\n\t\t4.更新数据\t5.打印数据\t6.查询数据\n\t\t0.退出系统\n");
printf("\t************************************************\n");
printf("选择您所要执行的操作编号:
");
scanf("%d",&operate);
switch(operate)
{
case0:
printf("\n\n\t---*---*---操作结束,按任意键退出系统!
---*---*---\n\n");break;
case1:
operate1(&L);break;
case2:
operate2(&L);break;
case3:
operate3(&L);break;
case4:
operate4(&L);break;
case5:
operate5(L);break;
case6:
operate6(L);break;
default:
printf("对不起,没有这项操作。
\n")
详细程序设计如下:
#include
#include
#include
#include
#defineTURE1
#defineFALSE0
#defineOK1
#defineERROR0
#defineSEPARATEprintf("\n\n\n\t***************************************\n\n\n")
#defineCHOOSEprintf("您是否继续操作(1/0):
")
#defineUPDATEprintf("将其更新为:
")
typedefintStatus;
typedefstructsheet
{
intnumber;//产品编号
charname[20];//产品名称
charpattern[20];//产品型号
intprice;//产品价格
intinventory;//目前产品库存
}sheet;//存储产品数据的结构体
typedefstructLNode
{
sheetdate;//产品数据域
structLNode*next;//链表指针域
}LNode,*List;//链式结构存储
StatusInit(LNode**L)
//初始化链表
{
*L=(LNode*)malloc(sizeof(LNode));//开辟头结点空间
(*L)->next=NULL;//头指针指向空
(*L)->date.price=0;//预设头结点中价格为0,方便价格排序
returnOK;
}
StatusInsert(LNode**L,LNode*N)
//在链表中插入数据为e的新产品数据
{
LNode*New;
LNode*pre,*p;
p=*L;pre=*L;
New=(LNode*)malloc(sizeof(LNode));//开辟新结点空间
New->date=N->date;New->next=NULL;//新结点初始化
while(p)
{//寻找新产品该插入的位置并插入L中
if(p->date.price<=N->date.price)
{
pre=p;
p=p->next;
if(!
p)pre->next=New;
}
else
{
New->next=pre->next;
pre->next=New;
p=NULL;
}
}
returnOK;
}
StatusDelete(LNode**L,inti)
{//寻找该产品的位置并删除产品数据
LNode*p,*q;
p=*L;q=p->next;
while(q->next&&q->date.number!
=i)
{
p=p->next;
q=p->next;
}//寻找该产品的位置
if(!
q)returnERROR;
p->next=q->next;//删除产品数据
free(q);
returnOK;
}
StatusPrintdate(sheete)
{//打印某产品数据
printf("编号:
%d\n名称:
%s\n型号:
%s\n价格:
%d\n库存:
%d\n",e.number,e.name,e.pattern,e.price,e.inventory);
printf("---*---*---*---\n");
returnOK;
}
StatusUpdatenumber(LNode**L,inti)
{//更新编号为i的产品编号
LNode*p=(*L)->next;
intj;
sheete;
UPDATE;
scanf("%d",&j);
while(p&&p->date.number!
=i)p=p->next;//寻找该产品的位置
if(!
p)returnERROR;
p->date.number=j;//更新产品编号
e=p->date;
printf("\n\n****产品数据更新****\n");
Printdate(e);//打印新产品数据
returnOK;
}
StatusUpdatename(LNode**L,inti)
{//更新编号为i的产品名称
LNode*p=(*L)->next;
charj[20];
sheete;
UPDATE;
scanf("%s",j);
while(p&&p->date.number!
=i)p=p->next;//寻找该产品的位置
if(!
p)returnERROR;
strcpy(p->date.name,j);//更新产品名称
e=p->date;
printf("\n\n****产品数据更新****\n");
Printdate(e);//打印新产品数据
returnOK;
}
StatusUpdatepattern(LNode**L,inti)
{//更新编号为i的产品型号
LNode*p=(*L)->next;
charj[20];
sheete;
UPDATE;
scanf("%s",j);
while(p&&p->date.number!
=i)p=p->next;//寻找该产品的位置
if(!
p)returnERROR;
strcpy(p->date.pattern,j);//更新产品型号
e=p->date;
printf("\n\n****产品数据更新****\n");
Printdate(e);//打印新产品数据
returnOK;
}
StatusUpdateprice(LNode**L,inti)
{//更新编号为i的产品价格
LNode*p=(*L)->next;
intj;
sheete;
UPDATE;
scanf("%d",&j);
while(p&&p->date.number!
=i)p=p->next;//寻找该产品的位置
if(!
p)returnERROR;
p->date.price=j;//更新产品价格
e=p->date;
printf("\n\n****产品数据更新****\n");
Printdate(e);//打印新产品数据
returnOK;
}
StatusUpdateinventory(LNode**L,inti)
{//更新编号为i的产品库存
LNode*p=(*L)->next;
intj;
sheete;
printf("库存改变量为:
");
scanf("%d",&j);
while(p&&p->date.number!
=i)p=p->next;//寻找该产品的位置
if(!
p)returnERROR;
p->date.inventory=p->date.inventory+j;//更新产品库存
e=p->date;
printf("\n\n****产品数据更新****\n");
Printdate(e);//打印新产品数据
returnOK;
}
StatusCheekdate(LNode*L,inti)
{//查询编号为i的产品是否存在
LNode*p=L->next;
while(p&&p->date.number!
=i)p=p->next;
if(!
p)returnERROR;
returnOK;
}
StatusPrintList(LNode*L)
{//打印整个数据表
LNode*p=L->next;
sheete;
while(p)
{
e=p->date;
Printdate(e);
p=p->next;
}//边遍历边打印数据
returnOK;
}
voidoperate1(LNode**L)
{//辅助初始化
Init(&(*L));
printf("\n\t----初始化完成----\n");
}
voidoperate2(LNode**L)
{//辅助插入,实现确认新信息再插入。
LNode*N;
intchoose;
N=(LNode*)malloc(sizeof(LNode));
SEPARATE;
printf("\t****新产品信息****\n");
printf("\n编号:
");
scanf("%d",&N->date.number);
printf("\n名称:
");
scanf("%s",N->date.name);
printf("\n型号:
");
scanf("%s",N->date.pattern);
printf("\n价格:
");
scanf("%d",&N->date.price);
printf("\n库存:
");
scanf("%d",&N->date.inventory);
printf("\t****您要插入的新数据****\n");
printf("编号:
%d\n名称:
%s\n型号:
%s\n价格:
%d\n库存:
%d\n",N->date.number,N->date.name,N->date.pattern,N->date.price,N->date.inventory);
CHOOSE;
scanf("%d",&choose);
//确认信息
if(choose)
{
Insert(&(*L),N);//插入
printf("\n\t----数据已插入----\n\n");
}
elseprintf("\n\t----数据插入失败----\n\n");
SEPARATE;
}
voidoperate3(LNode**L)
{//辅助删除,以编号为索引。
inti,j,choose;
sheete;
SEPARATE;
printf("您要删除的产品编号:
");
scanf("%d",&i);
j=Cheekdate((*L),i);//检查数据是否存在
if(j)
{
printf("\n\n\t****您要删除的数据****\n");
LNode*p=(*L)->next;
while(p->date.number!
=i)p=p->next;
e=p->date;
Printdate(e);
CHOOSE;
scanf("%d",&choose);
//确认信息
if(choose)
{
Delete(&(*L),i);//删除
printf("\t----已删除----\n");
}
elseprintf("\t----退出----\n");
}
elseprintf("\t----数据不存在,删除失败----\n");
SEPARATE;
}
voidoperate4(LNode**L)
{//辅助更新,以编号为索引,实现选择性更新。
inti,content,choose;
SEPARATE;
printf("您要更新的产品编号为:
");
scanf("%d",&i);
printf("---*---*---*---\n");
if(Cheekdate((*L),i))
{
printf("\n\t\t1.产品编号\t2.产品名称\t3.产品型号\t\n\t\t4.产品价格\t5.产品库存\t6.取消更新\t\t\n");
loop:
printf("您要更新的产品内容为:
");
scanf("%d",&content);
switch(content)
{
case1:
Updatenumber(&(*L),i);break;
case2:
Updatename(&(*L),i);break;
case3:
Updatepattern(&(*L),i);break;
case4:
Updateprice(&(*L),i);break;
case5:
Updateinventory(&(*L),i);break;
case6:
break;
default:
printf("对不起,没有此操作项。
\n");CHOOSE;scanf("%d",&choose);if(choose)gotoloop;//可选择继续更新
}//选择不同内容更新
}
elseprintf("对不起,没有这个编号。
\n");
printf("\t----更新完毕----\n\n");
}
voidoperate5(LNode*L)
{//辅助打印
printf("\t----家电数据表----\n\n");
PrintList(L);
SEPARATE;
}
voidoperate6(LNode*L)
{//辅助查询,以编号为索引。
inti,j;
sheete;
printf("您要查询的产品编号是:
");
scanf("%d",&i);
j=Cheekdate(L,i);//检查数据是否存在
if(j)
{
LNode*p=L->next;
while(p->date.number!
=i)p=p->next;
e=p->date;
printf("\t----产品数据----\n");
Printdate(e);//打印产品数据
}
elseprintf("对不起,没有此编号的信息。
");
SEPARATE;
}
voidmain()
{//以链式结构的有序表表示某商厦家电部的库存模型,日常的维护包括初始化、插入、删除、更新、打印、查询。
intoperate=1;
LNode*L;
printf("\t\t\t@!
@家电部库存管理系统@!
@\n\n");
Init(&L);
while(operate)
{
printf("\t************************************************");
printf("\n\t\t1.系统初始化\t2.插入数据\t3.删除数据\t\n\t\t4.更新数据\t5.打印数据\t6.查询数据\n\t\t0.退出系统\n");
printf("\t************************************************\n");
printf("选择您所要执行的操作编号:
");
scanf("%d",&operate);
switch(operate)
{
case0:
printf("\n\n\t---*---*---操作结束,按任意键退出系统!
---*---*---\n\n");break;
case1:
operate1(&L);break;
case2:
operate2(&L);break;
case3:
operate3(&L);break;
case4:
operate4(&L);break;
case5:
operate5(L);break;
case6:
operate6(L);break;
default:
printf("对不起,没有这项操作。
\n");
}
}
}
四,运行与测试结果:
以下是进入系统后的主界面:
用户选择所需进行的操作:
假如输入不识别数字,系统会自动提示,如下:
以下是进库操作,插入一中商品:
以下是产品的更新操作演示:
以下是打印所需产品数据的操作:
以下是删除数据的操作:
以下是退出系统的操作:
以下是再次进入系统后,进行一些功能操作的截图:
五,实习体会:
通过本次实习,加深了对线性表的理解,从其定义,存储,以及一些基本操作如:
插入,删除,打印,和查找等操作进行了全面的理解和应用,再遇到困难时通过查询资料和实例来帮助自己完善和改进算法程序,同时也提高了自己设计完整的C语言的程序的能力。