大数据结构实习报告材料链表维护.docx

上传人:b****7 文档编号:9387242 上传时间:2023-02-04 格式:DOCX 页数:26 大小:345.69KB
下载 相关 举报
大数据结构实习报告材料链表维护.docx_第1页
第1页 / 共26页
大数据结构实习报告材料链表维护.docx_第2页
第2页 / 共26页
大数据结构实习报告材料链表维护.docx_第3页
第3页 / 共26页
大数据结构实习报告材料链表维护.docx_第4页
第4页 / 共26页
大数据结构实习报告材料链表维护.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

大数据结构实习报告材料链表维护.docx

《大数据结构实习报告材料链表维护.docx》由会员分享,可在线阅读,更多相关《大数据结构实习报告材料链表维护.docx(26页珍藏版)》请在冰豆网上搜索。

大数据结构实习报告材料链表维护.docx

大数据结构实习报告材料链表维护

据结构实习报告一

机房名称  信息楼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语言的程序的能力。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 职业技术培训

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1