电器商场仓库管理.docx

上传人:b****7 文档编号:11212326 上传时间:2023-02-25 格式:DOCX 页数:33 大小:98.25KB
下载 相关 举报
电器商场仓库管理.docx_第1页
第1页 / 共33页
电器商场仓库管理.docx_第2页
第2页 / 共33页
电器商场仓库管理.docx_第3页
第3页 / 共33页
电器商场仓库管理.docx_第4页
第4页 / 共33页
电器商场仓库管理.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

电器商场仓库管理.docx

《电器商场仓库管理.docx》由会员分享,可在线阅读,更多相关《电器商场仓库管理.docx(33页珍藏版)》请在冰豆网上搜索。

电器商场仓库管理.docx

电器商场仓库管理

 

数据结构课程设计报告

 

班级:

_______计算机121班_______

姓名:

__________周一苇___________

指导教师:

__________董跃华___________

成绩:

__________________________

信息工程学院

年月日

目录

 

1.需求分析………………………3

2.概要设计………………………4

3.详细设计………………………11

4.调试分析………………………12

5.测试结果………………………13

6.参考文献………………………17

7.附录……………………………17

 

第一章需求分析

问题题目:

家电商场仓库管理

问题描述:

仓库管理系统是一个典型的信息管理系统,主要是对实际的库存商品信息加以分类管理,以便及时的为商品的交易提供货品库存信息.类似的问题有图书馆管理系统,通讯录,学生信息管理系统.

本题目使用线性表的链式存储结构完成。

主要需实现功能有:

创建管理表,向表中添加记录,查询商品种类数,输出所有商品信息,追加新商品记录,已有商品库存量的增减,将商品信息写入文件并可以从文件中读出等.

问题要求:

由问题描述我们可知仓库管理所涉及到的功能有如上几种,这就要求我们逐个实现,同时为了可以和用户进行很好的信息交换我们需要编写菜单函数.下面以链表结构的有序表表示某商场家电部的库存模型。

当有提货或进货时需要对该链表及时进行维护。

每个工作日结束之后,将该链表中的数据以文件形式保存,每日开始营业之前,需将以文件形式保存的数据恢复成链表结构的有序表.链表结点的数据域,包括家电名称、品牌、单价和数量,以单价的升序体现链表的有序性。

程序功能包括:

初始化、创建表、插入、删除、更新数据,查询及链表数据与文件之间的转换等。

 

第二章概要设计

(1)思路确定:

拿到此问题进行分析知道此题目是要对大量的货品信息进行管理,因此要将所需要的功能进行逐个实现,也就是函数的分块实现。

首先明确系统所需的功能有:

创建管理表,向表中添加记录,查询商品种类数,输出所有商品信息,追加新商品记录,已有商品库存量的进货或提货,将商品信息写入文件并可以从文件中读出等。

对应的程序中需要的函数模块有:

初始化链表,输入、插入、删除、更新数据,查询、链表数据与文件之间的转换以及一些辅助函数。

同时,为了更好的和用户进行信息交换,我们要构建菜单函数。

最后我们要用主函数调用以上函数模块。

(2)系统功能设计图

(3)数据结构定义:

typedefstructsnode

{

charkind[20];

charbrand[20];

intmodel;

intprice;

intnumber;

}store;

typedefstoreElemType;

typedefstructSNode

{

ElemTypedata;

structSNode*next;

}SNode,*LinkedList;

使用到的头文件:

#include

#include

#include

#include

(4)函数模块功能说明:

对本系统的功能进行分析后对主要函数可作如下的模块化设计:

输入模块实现功能:

按需添加货品数目将货品型号、种类、名称、价格、数量依次输入,并建立链表将其连接。

插入模块实现功能:

向已有数据中再次添加新货品的记录,包括货品型号、种类、名称、价格、数量。

以结点的方式链接到链表中。

删除模块实现功能:

在已有的数据中删除某种停产后无库存货品信息,并释放内存空间。

删除按货品关键码型号进行。

查找模块实现功能:

在已有的数据中查找指定的货品信息。

按照查找货品编号进行。

输出模块实现功能:

将已有的数据中按单价的升序进行遍历,输出该管理表中所包含的全部货品信息。

保存模块实现功能:

在每日工作结束时都要将数据进行保存操作,链表中的信息以文件形式被长期保存。

载入模块实现功能:

将文件中的数据信息载入链表。

主序模块实现功能:

完成系统的界面处理,包括开始界面和主菜单界面。

具体函数有:

intmenu();/*主菜单函数*/

LinkedListLinkedListInit();/*初始化单链表*/

LinkedListLinkedListAppend();/*添加数据信息*/

intLinkedListLength(LinkedListL);/*查询货品的种类数*/

voidLinkedListTraverse(LinkedListL);/*遍历链表显示货品信息*/

intLinkedListInsert(LinkedListL,inti,ElemTypex);/*插入信息*/

intLinkedListDelete(LinkedListL,inti);/*删除信息*/

intsearch(LinkedListL);/*查询某货品的库存*/

LinkedListpx(LinkedListL);/*由单价排序*/

intLinkedListLocal(LinkedListL);/*定位进出货的位置*/

LinkedListAppends(LinkedListL);/*记录进货量*/

LinkedListsells(LinkedListL);/*记录出货量*/

intsave(LinkedListL);/*保存信息到文件*/

LinkedListload(LinkedListL);/*从文件中读取*/

 

输入模块实现功能:

LinkedListLinkedListAppend();/*添加数据信息*/

i>n

开始

申请一个结点空间,p指向它

向p指向结点输入货品的信息

N

Y

N

Y

是否为第一个数据(i=0)

N

r->next=p;

r=r->next;r=r->next;r=r->next;

Y

p=>L

i<=n,p=>p->next

NULL=>p->next

返回L

结束

图4-1

 

插入模块实现功能:

intLinkedListInsert(LinkedListL,inti,ElemTypex);/*插入信息*/

开始

调入载入模块

L=NULL

p=L;

申请一个结点空间,使P指向它

给T指向结点输入预插入货品的信息

Y

p->next!

=NULL&&j

N

Y

返回NULL

Y

p=p->next;

j++;

t->next=p->next;

p->next=t;

返回L

结束

图4-2

删除模块实现功能:

intLinkedListDelete(LinkedListL,inti);/*删除信息*/

开始

调用载入模块

L->next==null

Y

N

从键盘读入i值

p=L;

p->next!

=NULL&&j

Y

Ptr1->next=>head

q=p->next;p->next=p->next->next;

p->next=p->next->next;

返回L

结束

图4-3

 

保存模块实现功能

intsave(LinkedListL);/*保存信息到文件*/

开始

输入预保存文件的文件名

创建文件成功

N

L!

=NULL

N

Y

将指向结点的数据写入文件

L=L->next;

结束

图4-4

 

读取模块实现功能

LinkedListload(LinkedListL);/*从文件中读取*/

开始

调用载入模块

 

fp==NULL

Y

N

为结点申请空间

 

输出p1指向结点的货品信息

p2=p1->next;

p2=p1;

 

Y

N

结束

 

图4-5

第三章详细设计

见附录

第四章调试分析

通过这次课程设计专周实验我认识到,在进行程序设计前要进行系统的问题分析,确定问提的解决流程,问题所需要解决的具体功能要求,明确设计对象的要求。

在专周实验中还是遇到了不少的问题,总结有如下几条:

《1》对函数指针的应用以及结点之间的后移关系掌握不牢固

由于之前发现第一遍的插入数据函数缺少对极端数据的判断,因此重新另外写了一个插入数据函数,可是这个函数在存储上和原本系统中的其他函数不配适,因为原本的函数实现头指针为空,而此函数头指针有存数据而且必须用到,所以使得系统无运行。

一次我改变思路,再第一遍的基础上对原有的插入函数进行修改,起到对极端数据的判断作用。

不配适的函数实现:

/*添加数据信息*/

《2》对单链表的排序

首先想到的是两两比较结点关键码大小,然后交换两个结点,可是在实验过程中不断出现指向错误使得系统无法正常运行。

之后,改进其他方法,两两比较,仅交换结点的数据信息,实现对单链表的排序。

《3》文件的读写

由于平时对文件的使用较少,因此本次实验中文件算是一处难点,

通过查阅书籍编写出代码,知道了,文件首先要定义文件指针,

FILE*fp;而文件的读写函数有fprintf,fscanfreadfwrite等。

输入文件名时,可以控制文件类型,如:

data.txt

 

第五章测试结果

(1)模拟数据:

种类品牌型号单价数量

电视康佳16000140

手机TCL7140040

电脑惠普25800160

冰箱海尔3480080

数码相机索尼42200170

数码相机佳能51700180

手机诺基亚61800260

(2)界面

 

(3)添加信息

 

 

 

(4

)查询货品种类数

 

(5)显示货品信息

(6)插入新货品信息

 

(7)删除货品信息

(8)进货

(9)提货

(10)查询特定商品

(11)文件

(12)读出

 

第六章参考文献

1.严慰敏,吴伟民数据结构(C语言版),清华大学出版社

2.谭浩强,C语言程序设计(第四版),清华大学出版社

附录

#include

#include

#include

#include

#defineN5

typedefstructsnode

{

charkind[20];//各种数据的名称种类与其编号对应

charbrand[20];

intmodel;

intprice;

intnumber;

}store;

typedefstoreElemType;

typedefstructSNode

{

ElemTypedata;

structSNode*next;

}SNode,*LinkedList;

intmenu();

LinkedListLinkedListInit();/*初始化单链表*/

LinkedListLinkedListAppend();/*添加数据信息*/

voidLinkedListClear(LinkedListL);/*清空单链表*/

intLinkedListLength(LinkedListL);/*查询货品的种类数*/

voidLinkedListTraverse(LinkedListL);/*遍历链表显示货品信息*/

intLinkedListInsert(LinkedListL,inti,ElemTypex);/*插入信息*/

intLinkedListDelete(LinkedListL,inti);/*删除信息*/

intsearch(LinkedListL);/*查询某货品的库存*/

LinkedListpx(LinkedListL);/*由单价排序*/

intLinkedListLocal(LinkedListL);/*定位进出货的位置*/

LinkedListAppends(LinkedListL);/*记录进货量*/

LinkedListsells(LinkedListL);/*记录出货量*/

intsave(LinkedListL);/*保存信息到文件*/

LinkedListload(LinkedListL);/*从文件中读取*/

intmenu()

{

intoption;

printf("\n");

printf("|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");

printf("|~~~~~~~~~~~~~家电商场仓库管理~~~~~~~~~~~~~~|\n");

printf("|~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");

printf("|主菜单项|\n");

printf("|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");

printf("|1---初始化链表|\n");

printf("|2---添加数据信息|\n");

printf("|3---清空链表|\n");

printf("|4---查询货品的种类数|\n");

printf("|5---显示货品信息|\n");

printf("|6---插入新货品记录|\n");

printf("|7---删除停产无存货货品记录|\n");

printf("|8---记录进货量|\n");

printf("|9---记录出货量|\n");

printf("|10---查询货品的余量|\n");

printf("|11---每日结算|\n");

printf("|12---每日开始|\n");

printf("|0---退出|\n");

printf("|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");

printf("请选择:

");

scanf("%d",&option);

return(option);

}

/*初始化单链表*/

LinkedListLinkedListInit()

{

LinkedListL;

L=(SNode*)malloc(sizeof(SNode));//头结点

L->next=NULL;//头结点的指针分量为空

returnL;

}

/*添加数据信息*/

LinkedListLinkedListAppend()

{

inti,n,m;

stores;

LinkedListL,r,p,q;

L=LinkedListInit();

r=L;

m=1;

q=(LinkedList)malloc(sizeof(SNode));

printf("请输入货品的种类总数:

\n");

scanf("%d",&n);

for(i=1;i<=n;i++)

{printf("第%d种货品\n",i);

repeat:

printf("请输入货品型号:

");

scanf("%d",&s.model);printf("\n");

q=L;

for(i=1;i

{

if(s.model!

=q->data.model)

q=q->next;

else

{

printf("型号重复,请重新输入!

");printf("\n");

gotorepeat;

}

}

printf("请输入货品种类:

");

scanf("%s",&s.kind);printf("\n");

printf("请输入货品品牌:

");

scanf("%s",&s.brand);printf("\n");

printf("请输入货品价格:

");

scanf("%d",&s.price);printf("\n");

printf("请输入货品数量:

");

scanf("%d",&s.number);printf("\n");

while(s.price<0||s.number<0)

{

printf("输入错误,请重新输入信息");

printf("请输入货品价格:

");

scanf("%d",&s.price);

printf("请输入货品数量:

");

scanf("%d",&s.number);

}

printf("\n");

p=(LinkedList)malloc(sizeof(SNode));

strcpy(p->data.kind,s.kind);

strcpy(p->data.brand,s.brand);

p->data.price=s.price;

p->data.model=s.model;

p->data.number=s.number;

p->next=NULL;

m++;

r->next=p;

r=r->next;

}

return(L);

}

/*清空单链表*/

voidLinkedListClear(LinkedListL)

{

L->next=NULL;

}

/*查询货品的种类数*/

intLinkedListLength(LinkedListL)

{

LinkedListp;

inti=1;

p=(SNode*)malloc(sizeof(SNode));

p=L->next;

while(p->next!

=NULL)

{

p=p->next;

i++;

}

return(i);

}

/*遍历链表显示货品信息*/

voidLinkedListTraverse(LinkedListL)

{

LinkedListp;

p=L->next;

printf("当前表是:

\n");

printf("%10s%10s%10s%10s%10s\n","种类","品牌","型号","单价","数量");

while(p!

=NULL)

{

printf("%10s%10s%10d%10d%10d\n",p->data.kind,p->data.brand,p->data.model,p->data.price,p->data.number);

p=p->next;

}

}

/*插入信息*/

intLinkedListInsert(LinkedListL,inti,ElemTypex)

{

LinkedListp,t;

intj;

p=L;

j=1;

t=(SNode*)malloc(sizeof(SNode));

strcpy(t->data.kind,x.kind);

strcpy(t->data.brand,x.brand);

t->data.price=x.price;

t->data.model=x.model;

t->data.number=x.number;

if(L->next==NULL)

{if(i==1)//若L为空表且要求将新结点插入到第1个位置

{

L->next=t;

t->next=NULL;

return1;

}

}

while(p->next!

=NULL&&j

{

p=p->next;

j++;

}

if(p->next==NULL)

{

if(j

{

printf("给的i值超过了表长");

return0;

}

}

t->next=p->next;

p->next=t;

return

(1);

}

/*删除信息*/

intLinkedListDelete(LinkedListL,inti)

{

LinkedListp,q;

intj;

p=L;

j=1;

if(L->next==NULL)//空表

{

printf("没有货品信息!

\n");

return0;

}

while(p->next!

=NULL&&j

{

p=p->next;

j++;

}

if(p->next==NULL)

{

printf("给的i值超过了表长\n");

return0;

}

else

{

q=p->next;

p->next=p->next->next;

free(q);

return

(1);

}

}

/*查询某货品的库存*/

intsearch(LinkedListL)

{

LinkedListp;

intc;

inti=1;

p=L;

printf("请输入商品型号:

");scanf("%d",&c);

while(p->data.model!

=c&&p->next!

=NULL)

{

p=p->next;

}

printf("%10s%10s%10s%10s%10s\n","种类","品牌","型号","单价","数量");

printf("%10s%10s%10d%10d%10d\n",p->data.kind,p->data.brand,p->data.model,p->data.price,p->data.number);

}

voidIntSwap(int*p,int*r)

{

intt;

t=*p;

*p=*r;

*r=t;

}

/*由单价排序*/

LinkedListpx(LinkedListL)

{

LinkedListq,p,H;

chara[20],b[20];

H=L;

for(p=L;p!

=NULL;p=p->next)

{

for(q=L->next;q->next!

=NULL;q=q->next)

{

if(q->data.price>p->data.price)

{

strcpy(a,p->data.kind);strcpy(p->data.kind,q->data.kind);strcpy(q->data.kind,a);

strcpy(b,p->data.brand);strcpy(p->data.brand,q->data.brand);strcpy(q->data.brand,b);

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

当前位置:首页 > 解决方案 > 其它

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

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