大数据结构实习报告材料链表维护Word格式文档下载.docx
《大数据结构实习报告材料链表维护Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《大数据结构实习报告材料链表维护Word格式文档下载.docx(26页珍藏版)》请在冰豆网上搜索。
三,详细设计
以链式结构的有序表表示某商厦家电部的库存模型,日常的维护包括初始化、插入、删除、更新、打印、查询,其中主函数设计如下:
当输入不同的数字时,主函数将调用不同的功能函数。
主函数设计如下:
voidmain()
intoperate=1;
LNode*L;
printf("
\t\t\t@!
@家电部库存管理系统@!
@\n\n"
);
Init(&
L);
while(operate)
{
printf("
\t************************************************"
\n\t\t1.系统初始化\t2.插入数据\t3.删除数据\t\n\t\t4.更新数据\t5.打印数据\t6.查询数据\n\t\t0.退出系统\n"
\t************************************************\n"
选择您所要执行的操作编号:
"
scanf("
%d"
&
operate);
switch(operate)
{
case0:
\n\n\t---*---*---操作结束,按任意键退出系统!
---*---*---\n\n"
break;
case1:
operate1(&
case2:
operate2(&
case3:
operate3(&
case4:
operate4(&
case5:
operate5(L);
case6:
operate6(L);
default:
printf("
对不起,没有这项操作。
\n"
)
详细程序设计如下:
#include<
stdio.h>
#include<
malloc.h>
string.h>
#include<
stdlib.h>
#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;
//头指针指向空
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->
//新结点初始化
while(p)
{//寻找新产品该插入的位置并插入L中
if(p->
date.price<
=N->
date.price)
pre=p;
p=p->
next;
if(!
p)pre->
next=New;
}
else
New->
next=pre->
pre->
p=NULL;
}
}
StatusDelete(LNode**L,inti)
{//寻找该产品的位置并删除产品数据
LNode*p,*q;
q=p->
while(q->
next&
&
q->
date.number!
=i)
p=p->
q=p->
}//寻找该产品的位置
if(!
q)returnERROR;
p->
next=q->
//删除产品数据
free(q);
StatusPrintdate(sheete)
{//打印某产品数据
编号:
%d\n名称:
%s\n型号:
%s\n价格:
%d\n库存:
%d\n"
e.number,e.name,e.pattern,e.price,e.inventory);
---*---*---*---\n"
StatusUpdatenumber(LNode**L,inti)
{//更新编号为i的产品编号
LNode*p=(*L)->
intj;
sheete;
UPDATE;
scanf("
j);
while(p&
p->
=i)p=p->
//寻找该产品的位置
p)returnERROR;
date.number=j;
//更新产品编号
e=p->
\n\n****产品数据更新****\n"
Printdate(e);
//打印新产品数据
StatusUpdatename(LNode**L,inti)
{//更新编号为i的产品名称
charj[20];
%s"
j);
strcpy(p->
date.name,j);
//更新产品名称
StatusUpdatepattern(LNode**L,inti)
{//更新编号为i的产品型号
date.pattern,j);
//更新产品型号
StatusUpdateprice(LNode**L,inti)
{//更新编号为i的产品价格
date.price=j;
//更新产品价格
StatusUpdateinventory(LNode**L,inti)
{//更新编号为i的产品库存
库存改变量为:
date.inventory=p->
date.inventory+j;
//更新产品库存
StatusCheekdate(LNode*L,inti)
{//查询编号为i的产品是否存在
LNode*p=L->
StatusPrintList(LNode*L)
{//打印整个数据表
e=p->
Printdate(e);
}//边遍历边打印数据
voidoperate1(LNode**L)
{//辅助初始化
(*L));
\n\t----初始化完成----\n"
voidoperate2(LNode**L)
{//辅助插入,实现确认新信息再插入。
LNode*N;
intchoose;
N=(LNode*)malloc(sizeof(LNode));
SEPARATE;
\t****新产品信息****\n"
\n编号:
N->
date.number);
\n名称:
N->
date.name);
\n型号:
date.pattern);
\n价格:
date.price);
\n库存:
date.inventory);
\t****您要插入的新数据****\n"
date.number,N->
date.name,N->
date.pattern,N->
date.price,N->
CHOOSE;
choose);
//确认信息
if(choose)
Insert(&
(*L),N);
//插入
\n\t----数据已插入----\n\n"
elseprintf("
\n\t----数据插入失败----\n\n"
voidoperate3(LNode**L)
{//辅助删除,以编号为索引。
inti,j,choose;
您要删除的产品编号:
i);
j=Cheekdate((*L),i);
//检查数据是否存在
if(j)
\n\n\t****您要删除的数据****\n"
LNode*p=(*L)->
while(p->
CHOOSE;
//确认信息
if(choose)
Delete(&
(*L),i);
//删除
printf("
\t----已删除----\n"
elseprintf("
\t----退出----\n"
\t----数据不存在,删除失败----\n"
voidoperate4(LNode**L)
{//辅助更新,以编号为索引,实现选择性更新。
inti,content,choose;
您要更新的产品编号为:
if(Cheekdate((*L),i))
\n\t\t1.产品编号\t2.产品名称\t3.产品型号\t\n\t\t4.产品价格\t5.产品库存\t6.取消更新\t\t\n"
loop:
您要更新的产品内容为:
content);
switch(content)
Updatenumber(&
Updatename(&
Updatepattern(&
Updateprice(&
Updateinventory(&
break;
对不起,没有此操作项。
CHOOSE;
scanf("
if(choose)gotoloop;
//可选择继续更新
}//选择不同内容更新
对不起,没有这个编号。
\t----更新完毕----\n\n"
voidoperate5(LNode*L)
{//辅助打印
\t----家电数据表----\n\n"
PrintList(L);
voidoperate6(LNode*L)
{//辅助查询,以编号为索引。
inti,j;
您要查询的产品编号是:
j=Cheekdate(L,i);
LNode*p=L->
\t----产品数据----\n"
//打印产品数据
对不起,没有此编号的信息。
{//以链式结构的有序表表示某商厦家电部的库存模型,日常的维护包括初始化、插入、删除、更新、打印、查询。
intoperate=1;
四,运行与测试结果:
以下是进入系统后的主界面:
用户选择所需进行的操作:
假如输入不识别数字,系统会自动提示,如下:
以下是进库操作,插入一中商品:
以下是产品的更新操作演示:
以下是打印所需产品数据的操作:
以下是删除数据的操作:
以下是退出系统的操作:
以下是再次进入系统后,进行一些功能操作的截图:
五,实习体会:
通过本次实习,加深了对线性表的理解,从其定义,存储,以及一些基本操作如:
插入,删除,打印,和查找等操作进行了全面的理解和应用,再遇到困难时通过查询资料和实例来帮助自己完善和改进算法程序,同时也提高了自己设计完整的C语言的程序的能力。