数据结构家电库存管理系统课程设计报告.docx
《数据结构家电库存管理系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《数据结构家电库存管理系统课程设计报告.docx(37页珍藏版)》请在冰豆网上搜索。
![数据结构家电库存管理系统课程设计报告.docx](https://file1.bdocx.com/fileroot1/2022-12/14/ca25c76e-d295-4ba1-8b96-b52f6fd5f6c9/ca25c76e-d295-4ba1-8b96-b52f6fd5f6c91.gif)
数据结构家电库存管理系统课程设计报告
重庆科技学院
《数据结构》课程设计
报告
设计地点(单位)___计算机基础自主学习中心____
设计题目:
________家电库存管理系统的设计___________
完成日期:
2012年1月13日
指导教师评语:
_______________________________________
____________________________________________________________________________________________________________________________________________________________________________________________________________________
成绩(五级记分制):
________________
指导教师(签字):
________________
重庆科技学院
课程设计任务书
设计题目:
家电库存管理系统的设计
学生姓名
课程名称
数据结构课程设计
专业班级
计科2010-01,02,03,04
地点
计算机基础自主学习中心
起止时间
2011.12.31-2012.1.13
设计内容及要求
以链表结构的有序表表示某商场家电部的库存模型。
当有提货或进货时需要对该链表及时进行维护。
每次退出程序时,将该链表中的数据以文件形式保存在磁盘上,每次启动程序时,需将以文件形式保存的数据恢复成链表结构的有序表。
链表结点的数据域包括:
类别、型号、品牌、重量、单价、数量、生产日期、厂家名称,默认按类别、品牌升序排好序。
程序功能包括:
创建链表、插入、删除、修改、查询、排序等。
设计
参数
测试数据要求:
家电类别(如:
电视机,空调,冰箱等)不少于5种,记录数量不少于500。
进度
要求
2011.12.31完成任务的讲解、并接受课程设计任务,选定课程设计的题目
2012.01.04了解任务的算法、并画出算法的程序流程图,对任务的关键技术进行验证、并确定解决办法
2012.01.05-2012.01.06编制程序
2012.01.09对程序进行调试,设计测试用例进行测试
2012.01.10整理课程设计的过程、并进行总结,完善程序功能
2012.01.11编写课程设计报告初稿
2012.01.12完善课程设计报告、并准备答辨
2012.01.13提交课程设计报告和程序,进行答辨
参考资料
1.严蔚敏吴伟民,数据结构,清华大学出版社,2007.3
2.李春葆,数据结构教程,清华大学出版社,2005.1
3.(美)StephenPrata,CPrimerPlus中文版(第五版),人民邮电出版社,2005.2
其它
说明
1.本表应在每次实施前一周由负责教师填写二份,学院审批后交学院教务办备案,一份由负责教师留用。
2.若填写内容较多可另纸附后。
3.一题多名学生共用的,在设计内容、参数、要求等方面应有所区别。
系主任:
雷亮指导教师:
向毅/彭军/王双明/龙冯文/黄永文
2011年12月26日
摘要
随着信息技术的飞速发展,人们对信息管理技术要求也越来越高以适应飞速发展的经济。
本次课程设计针对当前的需求,设计一个家电仓库信息的管理系统以方便商家更快捷更有效的对仓库货品的信息进行管理,给商家创造更多的价值!
该系统整体运用了数据结构的知识,它是将货品信息按链表形式来储存的。
将所有的货品分类储存在数据链表的每一个节点中,每个节点也包含了一种类型家电的所有信息。
即是,建一个链表,链表中有许多个节点,节点中储存了不同类型的数据;这样我们就很容易的将货品信息管理起来了!
该系统进行了精心的规划,有齐全的信息管理功能。
方便用户使用,用户能够很快的找到自己所需要的信息并且有添加、删除、修改、查询、排序、保存等功能提高了用户对信息的管理效率!
关键词:
信息数据结构链表管理
1系统需求分析说明书
1.1系统软件界面介绍
1.1系统界面
该系统的软件界面就是以在C++编译后生成的一个系统菜单,菜单有八个选项供用户选择即有创建仓库链表,信息查找等功能!
在菜单下面有供用户选择系统项目的输入指令,当用户输入0-7中的数字后就会实现相应的功能!
如果输入错误后界面会弹出警告让用户重新输入!
1.2系统设计要求
第一,该系统的设计对设计者的要求比较高。
想要设计该系统,必须对C语言知识掌握牢固,以及C++、数据结构知识灵活运用。
例如:
主菜单供客户选择的选择项就需要用到C语言的switch条件语句来实现不同的选择功能。
数据结构中的数据封装也是必不可少的。
1.3系统的设计
系统设计分为几大模块进行设计的。
第一大模块总体规划设计,这部分主要是封装头文件,这里要定义好数据结构体,即要把一类家电信息打包成一个节点类型的数据然后再创建链表数据和指向节点数的节点。
该过程就是数据结构中的抽象数据类型ADT,这样将就轻松的把不同类型数据管理起来了!
头文件也包含了所有子函数的头。
第二大模块是主函数的设计,主函数的功能是要建立一个仓库管理的链表,然后一一实现系统所有的功能即是在不同的情况对子函数的调用。
第三大模块是各个函数功能的实现,该部分是系统的核心部分,在写子函数的时候必须考虑周全;否则就会出现内存出错的情况系统就会崩溃掉,信息就很可能丢失。
会给用户带来巨大的损失!
该系统设计模块图如图1.2所示:
图1.2系统模块设计
2系统分析与设计
2.1系统分析
系统主要工作流程是从打开系统后进入功能选择,选择不同的选项进行操作后就返回系统首页。
其运行流程图如图2.1所示:
图2.1系统流程图
2.2系统功能分析
系统功能的实现主要是靠各个子函数来实现的。
1)仓库链表的创建:
当用户选择功能号1时,就进行仓库链表的建立。
仓库建立流程图如图2.2所示:
图2.2仓库链表建立
2)仓库货品信息查找:
信息查找流程图如图2.3所示:
图2.3信息查找流程图
3)新增货品信息插入:
新增货品信息插入流程图如图2.4所示:
图2.4信息插入流程图
4)删除已卖出的货品信息:
删除信息流程图如图2.5所示:
图2.5删除信息流程图
5)库存货品信息修改
库存货品信息修改流程图如图2.6所示:
图2.6信息修改流程图
6)信息保存直接选功能号6即可保存到文件。
7)仓库信息读取:
仓库信息读取流程图如图2.7所示:
图2.7信息读取流程图
3代码实现
3.1链表创建函数代码解释
NODE*creatlist()
{NODE*Head;
Head=newNODE;
inti;intk;
NODE*P1,*Ptr;
P1=(NODE*)malloc(sizeof(NODE));
P1=Head;
cout<<"输入仓库电器种类数:
"<cin>>k;
printf("请输入电器类别--型号--商标--重量--单价--编号--日期--厂家\n");
for(i=0;i{Ptr=(NODE*)malloc(sizeof(NODE));
scanf("%s%s%s%f%lf%s%s%s",Ptr->data.leibie,Ptr->data.xinhao,Ptr->data.brand,&Ptr->data.height,&Ptr->data.price,Ptr->data.no,Ptr->data.date,Ptr->data.factory);
P1->link=Ptr;
P1=Ptr;
P1->link=NULL;}
returnHead;
}
这里使用链表创建函数就可以创建一个链表,并储存货品信息!
3.2插入节点函数代码解释
voidInsertNode(NODE*head,NODE*p)
{
NODE*p1,*p2;
p1=head;
p2=p1->link;
while(p2!
=NULL&&strcmp(p2->data.no,p->data.no)<0)
{
p1=p2;//p1指向刚访问过的结点
p2=p2->link;//p2指向表的下一个结点}
p1->link=p;//插入p所指向的结点
p->link=p2;//连接表中剩余的结点
cout<<"插入成功!
"<}
}
该函数实现了在仓库链表中插入一个节点的功能!
3.3删除节点函数代码解释
voiddeleteNode(NODE*head)//卖出货品信息删除
{
charx;
NODE*pPre,*pLoc;
pLoc=searchList1(head);
//dataOut=pLoc->data;
if(pLoc==NULL)
{printf("没有查到要删除的商品信息!
\n");
return;}
if(pLoc!
=NULL)
printf("真的要删除该商品吗?
(y/n):
");
cin>>x;
if(x=='y'||x=='Y')
{pPre=head;
while((pPre!
=NULL)&&(pPre->link!
=pLoc))
pPre=pPre->link;
pPre->link=pLoc->link;
free(pLoc);
printf("deletesuccess!
\n");
}
}
该函数实现了对卖出货品信息的删除!
3.4查找函数代码解释
NODE*searchList(NODE*head)//货品信息查找
{chara;
charb='';
while
(1)
{
printf("==================\n");
printf("1.查询所有家电信息\n");
printf("2.按商品名称查询\n");
printf("0.退出查找系统\n");
printf("==================\n");
printf("请选择:
\n");
a=getch();
switch(a)
{
case'0':
return0;break;
case'1':
list0(head);break;
case'2':
list1(head);break;
default:
printf("输入错误,请重新输入:
\n");
}
}
}
该函数用switch语句做成一个多种查找方式的查找函数!
3.5货品信息修改函数代码解释
voidmodify(NODE*head)//库存货品信息修改
{
intm;
NODE*P;
P=searchList1(head);
cout<<"请输入要修改的商品信息番号!
:
"<if(P==NULL)
{printf("没有查到要修改的商品信息!
\n");
return;}
if(P!
=NULL)
cout<printf("请输入您选择的功能号<0-8>:
\n");
cin>>m;switch(m)
{
case1:
cout<<"请输入新的商标信息"<>P->data.brand;break;
case2:
cout<<"请输入新的日期信息"<>P->data.date;break;
case3:
cout<<"请输入新的厂家信息"<>P->data.factory;break;
case4:
cout<<"请输入新的重量信息"<>P->data.height;break;
case5:
cout<<"请输入新的类别信息"<>P->data.leibie;break;
case6:
cout<<"请输入新的编号信息"<>P->data.no;break;
case7:
cout<<"请输入新的单价信息"<>P->data.price;break;
case8:
cout<<"请输入新的型号信息"<>P->data.xinhao;break;
case0:
break;
}
P=P->link;
}
该函数实现了对节点信息的修改!
3.6信息读取函数代码解释
NODE*read_file(NODE*head)
{NODE*q,*t;
head=Initlist(head);
t=head;
ifstreamfin("家电库存信息.txt");
if(!
fin)
{printf("\n打开文件失败!
可能没有记录\n");
returnNULL;}
printf("类别--型号--商标--重量--单价--编号--日期--厂家\n");
while(!
fin.eof())
{
q=(NODE*)malloc(sizeof(NODE));
HOUSEHOLDtemp;
fin>>temp.leibie;fin>>temp.xinhao;fin>>temp.brand;fin>>temp.height;
fin>>temp.price;fin>>temp.no;fin>>temp.date;fin>>temp.factory;
q->data=temp;
q->link=NULL;
t->link=q;
t=t->link;
}
printf("读取成功!
\n");
fin.close();
returnhead;
}
该函数将文本文件的数据读出来并生成一个链表!
4系统功能实现
4.1仓库链表建立函数实现
图4.1仓库链表建立函数实现
4.2修改信息函数实现
图4.2修改信息函数实现
4.3新增货品插入函数实现
图4.3新增货品插入函数实现
4.4删除函数实现
图4.4删除函数实现
4.5修改函数的实现
图4.5修改函数的实现
4.6插入节点函数实现
图4.6插入节点函数实现
5系统使用说明书
1.创建仓库链表:
在此目录下,用户可以创建一个新的仓库链表。
2..查询记录:
在此目录下,用户可以查询所有家电记录和按名称查询家电记录
1).查询所有家电记录:
显示所有的家电记录,如果没有记录则会提示用户输入记录。
2).按类别查询家电记录:
输入要查询家电的名称后,显示相应家电的信息。
3).按品牌查询家电记录:
输入要查询家电的品牌后,显示相应家电的信息。
4).按型号查询家电记录:
输入要查询家电的型号后,显示相应家电的信息。
0).退出查询系统:
退出查询系统并返回主菜单。
3.插入新增货品信息:
在此目录下,用户添加新的纪录。
添加完后,系统会返回主菜单并提示用户保存,此时你要可以选择。
4.删除信息:
在此目录下,用户删除纪录
5.修改记录:
在此目录下,用户在原有的记录上更改记录。
更改后,系统会返回主菜单并提示用户保存,此时你要可以选择2保存,如果不选择保存则不会更改。
6.保存记录:
在此目录下,系统会对变动的信息保存起来!
7.读取记录:
在此目录下,系统将储存的信息全部读出来!
0.退出系统:
提示按0键键退出系统。
6总结
在为期两周的时间终于完成了本次课程设计。
在设计初期准备阶段时做好了充分的准备,包括查询资料、知识的温故等。
有了充分的准备后,就可以有个好的开始了。
课程设计在设计阶段中遇到不少的问题,但是都一一解决了。
在开始阶段的数据封装与函数头做起来比较顺利,第二阶段在总体规划时开始很混乱,但在仔细分析后很快就把总体思路打造好了。
最后的也是最困难的问题就是怎样实现各个子函数的功能,由于自己的粗心造成了不少的麻烦!
例如,将一个有返回值函数直接调用,而没有进行传值造成了内存错误从而耽误了进度。
最后进行仔细调试后才发现这个问题,最后程序就顺利运行了!
参考文献
[1]吴伟民.结构(C语言版).大学出版社,2000
[2]周学毛李健.据结构与程序设计.人民邮电出版社,2008
[3]谭浩强.C程序设计(第三版).清华大学出版设,2008
[4]韩永泉.高质量程序设计指南—C++/C语言第3版,2007
[5]苏仕华.数据结构与算法解析.合肥:
中国科学技术大学出版社,2004
[6]刘振安孙忱刘燕君.C程序设计课程设计.北京:
机械工业出版社,2004
[7]唐策善,黄刘生.数据结构(第二版).合肥:
中国科学技术大学出版社,2002
[8]刘大有,唐海鹰.数据结构.北京:
高等教育出版社,2001
[9]严蔚敏,陈文博.数据结构及应用算法教程.北京:
清华大学出版社,2001
[10]苏仕华.数据结构自学辅导.北京:
清华大学出版社,2002
[11]徐孝凯.数据结构实用教程.北京:
清华大学出版社,1999
[12]苏仕华.数据结构课程设计.北京:
机械工业出版社,2005
致谢
经过为期一周的努力,我的课程设计任务也终于如期完成。
在设计阶段中遇到不少的问题,但是都一一解决了。
有些是通过自己细心的研究和检查把程序调试好,有的问题是自己不懂的知识通过网上搜索以及同学的帮助也顺利的解决了!
在此我要感谢帮助过我的老师和同学们,是你们耐心指导才让我顺利的完成了本次课程设计。
我也从中学到许多的东西!
通过本次课程设计,我对数据结构的知识掌握更牢固了!
也培养了自己勤于思考的良好习惯!
也让我收获了不少的东西,感谢所有帮助过我的人!
附页:
程序代码
头文件.h
#include
#include
#include
#include
#include"windows.h"
#include
#include
usingnamespacestd;
typedefstruct_Household{
charleibie[20];
charxinhao[30];
charbrand[30];
floatheight;
doubleprice;
charno[30];
chardate[20];
charfactory[30];
intkey;
}HOUSEHOLD;
typedefstruct_NODE{
HOUSEHOLDdata;
struct_NODE*link;
}NODE;
typedefstruct_LINKLIST{
NODE*Phead;
intcount;
}LINKLIST;
LINKLIST*creatvoidlist();
NODE*creatlist();
voidInsertNode(NODE*head,NODE*p);
voiddeleteNode(NODE*head);
NODE*searchList(NODE*head);
NODE*searchList1(NODE*head);
voidmodify(NODE*head);
booldisplay(NODE*head);
NODE*sort(NODE*head);
voidwrite_file(NODE*head);
NODE*read_file(NODE*head);
NODE*Initlist(NODE*p);
voidlist0(NODE*head);
voidlist1(NODE*head);
intStrCmp(charna[],charname[],inty);
子函数.cpp
#include"store.h"
LINKLIST*creatvoidlist()//创建一个空的仓库链表
{
LINKLIST*p;
p=(LINKLIST*)malloc(sizeof(LINKLIST));
if(!
p)
exit(0);
p->count=0;
p->Phead=NULL;
returnp;
}
NODE*creatlist()//创建链表
{
NODE*Head;
Head=newNODE;
inti;
intk;
NODE*P1,*Ptr;
P1=(NODE*)malloc(sizeof(NODE));
P1=Head;
cout<<"输入仓库电器种类数:
"<cin>>k;
printf("请输入电器类别--型号--商标--重量--单价--编号--日期--厂家\n");
for(i=0;i{
Ptr=(NODE*)malloc(sizeof(NODE));
scanf("%s%s%s%f%lf%s%s%s",Ptr->data.leibie,Ptr->data.xinhao,Ptr->data.brand,&Ptr->data.height,&Ptr->data.price,Ptr->data.no,Ptr->data.date,Ptr->data.factory);
P1->link=Ptr;
P1=Ptr;
P1->link=NULL;
}
printf("添加成功!
");
returnHead;
}
voidInsertNode(NODE*head,NODE*p)//插入新的节点
{
NODE*p1,*p2;
p1=head;
p2=p1->link;
while(p2!
=NULL&&strcmp(p2->data.no,p->data.no)<0)
{
p1=p2;//p1指向刚访问过的结点
p2=p2->link;//p2指向表的下一个结点}
p1->link=p;//插入p所指向的结点
p->link=p2;//连接表中剩余的结点
cout<<"插入成功!
"<}
}
voiddeleteNode(NODE*head)//卖出货品信息删除
{
charx;
NODE*pPre,*pLoc;
pLoc=searchList1(head);
//dataOut=pLoc->data;
if(pLoc==NULL)