数据结构-家电库存管理系统课程设计报告.docx
重庆科技技学院数据结结构课课程设计计报告学 院:_电气气与信息息工程学学院_专专业班级级: 计计科20010-01 学生姓名名: 阳 勇勇 学 号: 2001044417798 设计地点点(单位位)_ _ 计算算机基础础自主学学习中心心 _ _ _设计题题目:_家电电库存管管理系统统的设计计_ _ _ 完成日日期:220122年 1 月月 133 日指导教师师评语:_ _ _ _ 成绩(五五级记分分制):_ _ 指导教教师(签签字):_ _ 重庆科技学院数据结构课程设计报告重庆科技技学院课程设计计任务书书设计题目目:家电电库存管管理系统统的设计计学生姓名名阳勇课程名称称数据结构构课程设设计专业班级级计科20010-01,02,03,04地 点计算机基基础自主主学习中中心起止时间间20111.122.311-20012.1.113设计内容容及要求求以链表结结构的有有序表表表示某商商场家电电部的库库存模型型。当有有提货或或进货时时需要对对该链表表及时进进行维护护。每次次退出程程序时,将该链表中的数据以文件形式保存在磁盘上,每次启动程序时,需将以文件形式保存的数据恢复成链表结构的有序表。链表结点点的数据据域包括括:类别别、型号号、品牌牌、重量量、单价价、数量、生生产日期期、厂家家名称,默认按按类别、品品牌升序序排好序序。程序序功能包包括:创创建链表表、插入入、删除除、修改改、查询询、排序序等。设计参数测试数据据要求:家电类别别(如:电视机机,空调调,冰箱箱等)不不少于55种,记记录数量量不少于于5000。进度要求20111.122.311 完完成任务务的讲解解、并接接受课程程设计任任务,选选定课程程设计的的题目20122.011.044 了了解任务务的算法法、并画画出算法法的程序序流程图图,对任任务的关关键技术术进行验验证、并并确定解解决办法法20122.011.055-20012.01.06 编制程程序20122.011.099 对程程序进行行调试,设设计测试试用例进进行测试试20122.011.100 整理理课程设设计的过过程、并并进行总总结,完完善程序序功能20122.011.111 编写写课程设设计报告告初稿20122.011.122 完善善课程设设计报告告、并准准备答辨辨20122.011.133 提交交课程设设计报告告和程序序,进行行答辨参考资料料1严蔚蔚敏 吴吴伟民, 数据结结构,清清华大学学出版社社,20007.32李春春葆 ,数数据结构构教程,清清华大学学出版社社,20005.13(美美)Sttephhen Praata, C Priimerr Pllus中中文版(第第五版),人人民邮电电出版社社,20005.2其它说明1.本表表应在每每次实施施前一周周由负责责教师填填写二份份,学院院审批后后交学院院教务办办备案,一一份由负负责教师师留用。22.若填填写内容容较多可可另纸附附后。33.一题题多名学学生共用用的,在在设计内内容、参参数、要要求等方方面应有有所区别别。系主任:雷亮 指指导教师师: 向向毅/彭彭军/王王双明/龙冯文文/黄永永文 20111年112月 26日日 摘要要随着信息息技术的的飞速发发展,人人们对信信息管理理技术要要求也越越来越高高以适应应飞速发发展的经经济。本本次课程程设计针针对当前前的需求求,设计计一个家家电仓库库信息的的管理系系统以方方便商家家更快捷捷更有效效的对仓仓库货品品的信息息进行管管理,给给商家创创造更多多的价值值!该系统整整体运用用了数据据结构的的知识,它它是将货货品信息息按链表表形式来来储存的的。将所所有的货货品分类类储存在在数据链链表的每每一个节节点中,每每个节点点也包含含了一种种类型家家电的所所有信息息。即是是,建一一个链表表,链表表中有许许多个节节点,节节点中储储存了不不同类型型的数据据;这样样我们就就很容易易的将货货品信息息管理起起来了!该系统进进行了精精心的规规划,有有齐全的的信息管管理功能能。方便便用户使使用,用用户能够够很快的的找到自自己所需需要的信信息并且且有添加加、删除除、修改改、查询询、排序序、保存存等功能能提高了了用户对对信息的的管理效效率!关键词:信息数据据结构 链链表 管理理 目录1 系统统需求分分析说明明书11.1系系统软件件界面介介绍11.2系系统设计计要求11.3系系统的设设计22 系统统分析与与设计32.1系系统分析析32.2系系统功能能分析43 代码码实现73.1链链表创建建函数代代码解释释73.2插插入节点点函数代代码解释释73.3删删除节点点函数代代码解释释83.4查查找函数数代码解解释83.5货货品信息息修改函函数代码码解释93.6信信息读取取函数代代码解释释104 系统统功能实实现114.1 仓库链链表建立立函数实实现114.2修修改信息息函数实实现1114.3新新增货品品插入函函数实现现124.4删删除函数数实现1124.5修修改函数数的实现现134.6插插入节点点函数实实现1335 系统统使用说说明书146 总结结15参考文献献16致谢11748重庆科技学院数据结构课程设计报告1 系统统需求分分析说明明书1.1系系统软件件界面介介绍1.1 系统界界面 该该系统的的软件界界面就是是以在CC+编编译后生生成的一一个系统统菜单,菜菜单有八八个选项项供用户户选择即即有创建建仓库链链表,信信息查找找等功能能!在菜菜单下面面有供用用户选择择系统项项目的输输入指令令,当用用户输入入0-77中的数数字后就就会实现现相应的的功能!如果输输入错误误后界面面会弹出出警告让让用户重重新输入入!1.2系系统设计计要求第一,该该系统的的设计对对设计者者的要求求比较高高。想要要设计该该系统,必必须对CC语言知知识掌握握牢固,以以及C+、数数据结构构知识灵灵活运用用。例如如:主菜菜单供客客户选择择的选择择项就需需要用到到C语言言的swwitcch条件件语句来来实现不不同的选选择功能能。数据据结构中中的数据据封装也也是必不不可少的的。1.3系系统的设设计 系统设设计分为为几大模模块进行行设计的的。第一大模模块总体体规划设设计,这这部分主主要是封封装头文文件,这这里要定定义好数数据结构构体,即即要把一一类家电电信息打打包成一一个节点点类型的的数据然然后再创创建链表表数据和和指向节节点数的的节点。该该过程就就是数据据结构中中的抽象象数据类类型ADDT,这这样将就就轻松的的把不同同类型数数据管理理起来了了!头文文件也包包含了所所有子函函数的头头。第二大模模块是主主函数的的设计,主主函数的的功能是是要建立立一个仓仓库管理理的链表表,然后后一一实实现系统统所有的的功能即即是在不不同的情情况对子子函数的的调用。第三大模模块是各各个函数数功能的的实现,该该部分是是系统的的核心部部分,在在写子函函数的时时候必须须考虑周周全;否否则就会会出现内内存出错错的情况况系统就就会崩溃溃掉,信信息就很很可能丢丢失。会会给用户户带来巨巨大的损损失!该系统设设计模块块图如图图1.22所示:系统总体结构头文件封装子函数设计链表的设计系统主界面设计 图1.2 系系统模块块设计2 系统统分析与与设计2.1系系统分析析系统主要要工作流流程是从从打开系系统后进进入功能能选择,选选择不同同的选项项进行操操作后就就返回系系统首页页。其运运行流程程图如图图2.11所示:主菜单Switch1创建链表2信息查找3新增信息4信息删除5信息修改6保存信息7读取文件8结束程序返回图2.11系统流流程图2.2系系统功能能分析系统功能能的实现现主要是是靠各个个子函数数来实现现的。1)仓库库链表的的创建: 当当用户选选择功能能号1时时,就进进行仓库库链表的的建立。仓库建立立流程图图如图22.2所所示:入口建立链表完成链表建立返回 图2.2 仓仓库链表表建立 2)仓库库货品信信息查找找:信息查找找流程图图如图22.3 所示:入口查找方式查询所有名称查询退出查询返回 图22.3 信息查查找流程程图3)新增增货品信信息插入入: 新新增货品品信息插插入流程程图如图图2.44所示:入口输入信息完成链表插入返回 图图2.44 信息息插入流流程图4)删除除已卖出出的货品品信息:删除信息息流程图图如图22.5所所示:入口查找方式编号查询名称查询返回删除 图22.5 删除信信息流程程图5)库存存货品信信息修改改库存货品品信息修修改流程程图如图图2.66所示:入口查找方式编号查询名称查询选择修改2修改时间1修改商标8修改型号5修改类别6修改编号7修改单价4修改重量3修改厂家返回首页图2.66 信息息修改流流程图6)信息息保存直直接选功功能号66即可保保存到文文件。7)仓库库信息读读取:仓库信息息读取流流程图如如图2.7所示示:入口读入信息信息显示返回图2.77信息读读取流程程图3 代码码实现3.1链链表创建建函数代代码解释释NODEE *ccreaatliist()NOODE *Heead;Heaad=nnew NODDE;intt i; innt kk; NODDE *P1, *PPtr;P1=(NOODE*)maallooc(ssizeeof(NODDE);P1=Heaad;couut<<<"输入入仓库电电器种类类数:""<<eendll;cinn>>kk;priintff("请请输入电电器类别别-型型号-商标-重量量-单单价-编号-日期期-厂厂家nn");forr(i=0;ii<k;i+)Pttr=(NODDE*)malllocc(siizeoof(NNODEE);sccanff("%s %s %s %f %lf %s %s %s"",Pttr->>datta.lleibbie,Ptrr->ddataa.xiinhaao,PPtr->daata.braand,&Pttr->>datta.hheigght,&Pttr->>datta.ppricce,PPtr->daata.no,Ptrr->ddataa.daate,Ptrr->ddataa.faactoory);P11->llinkk=Pttr;P11=Pttr;P11->llinkk=NUULL;retturnn Heead;这里使用用链表创创建函数数就可以以创建一一个链表表,并储储存货品品信息!3.2插插入节点点函数代代码解释释voidd InnserrtNoode(NODDE *heaad,NNODEE *pp) NODDE *p1,*p22;p1=heaad;p2=p1->liink;whiile(p2!=NUULL && strrcmpp(p22->ddataa.noo,p->daata.no)<0) p11=p22; /p11 指向向刚访问问过的结结点p22=p22->llinkk; /p22 指向向表的下下一个结结点 p11->llinkk=p; /插入 p 所所指向的的结点p->liink=p2; /连接表表中剩余余的结点点coout<<<"插插入成功功!"<<<enndl;该函数实实现了在在仓库链链表中插插入一个个节点的的功能!3.3删删除节点点函数代代码解释释voidd deeletteNoode(NODDE *heaad)/卖出出货品信信息删除除 chaar xx;NODDE *pPrre,*pLooc;pLooc=ssearrchLListt1(hheadd);/ dattaOuut = pLLoc->daata;if(pLooc=NULLL)pprinntf("没有有查到要要删除的的商品信信息!n");reeturrn ;if(pLooc!=NULLL) prrinttf(""真的要要删除该该商品吗吗?(yy/n):"); cinn>>xx; if (x='yy'|x='Y'') pPrre=hheadd;whhilee(ppPree!=NNULLL)&&&(pPPre->liink!=pLLoc)ppPree=pPPre->liink;pPPre->liink=pLooc->>linnk;frree(pLooc);prrinttf(""delletee suucceess!n"");该函数实实现了对对卖出货货品信息息的删除除!3.4查查找函数数代码解解释NODEE *ssearrchLListt(NOODE *heead)/货货品信息息查找 chhar a; chaar bb=' 'whiile(1)priintff("=n"); priintff(" 1. 查询所所有家电电信息 n"");priintff(" 2. 按商品品名称查查询 n"); priintff(" 0. 退出查查找系统统 n");priintff("=n"); priintff(" 请 选选 择: nn"); a = geetchh(); swiitchh(a) caase '0'':reeturrn 00;brreakk; caase '1'':liist00(heead);brreakk; caase '2'':liist11(heead);brreakk; deefauult:priintff("输输入错误误,请重重新输入入:nn");该函数用用swiitchh语句做做成一个个多种查查找方式式的查找找函数!3.5货货品信息息修改函函数代码码解释voidd moodiffy(NNODEE *hheadd)/库存货货品信息息修改intt m;NODDE *P;P=seearcchLiist11(heead);couut<<<"请输输入要修修改的商商品信息息番号!:"<<<enndl;if (P=NUULL) priintff("没没有查到到要修改改的商品品信息!n""); reeturrn;if(P!=NULLL)couut<<<enddl;priintff("请请输入您您选择的的功能号号<0-8>:n"");cinn>>mm; swwitcch(mm) casse 11:coout<<<"请请输入新新的商标标信息""<<eendll;ciin>>>P->>datta.bbrannd;bbreaak; casse 22:coout<<<"请请输入新新的日期期信息""<<eendll;ciin>>> P->daata.datte;bbreaak; casse 33:coout<<<"请请输入新新的厂家家信息""<<eendll;ciin>>> P->daata.facctorry;bbreaak; casse 44:coout<<<"请请输入新新的重量量信息""<<eendll;ciin>>> P->daata.heiightt;brreakk; casse 55:coout<<<"请请输入新新的类别别信息""<<eendll;ciin>>> P->daata.leiibiee;brreakk; casse 66:coout<<<"请请输入新新的编号号信息""<<eendll;ciin>>> P->daata.no;breeak; casse 77:coout<<<"请请输入新新的单价价信息""<<eendll;ciin>>> P->daata.priice;breeak; casse 88:coout<<<"请请输入新新的型号号信息""<<eendll;ciin>>>P->>datta.xxinhhao;breeak; casse 00:brreakk; P=PP->llinkk;该函数实实现了对对节点信信息的修修改!3.6信信息读取取函数代代码解释释NODEE *rreadd_fiile(NODDE *heaad)NOODE *q,*t;heaad=IInittlisst(hheadd);t=hheadd;ifsstreeam finn("家家电库存存信息.txtt");if( !ffin )pprinntf("nn打开文文件失败败!,可可能没有有记录n");reeturrn NNULLL;priintff("类类别-型号-商 标-重量-单价价-编编号-日期-厂家家n"");whiile ( !finn.eoof() )q=(NOODE*)maallooc(ssizeeof(NODDE);HOOUSEEHOLLD ttempp;fiin>>>temmp.lleibbie;finn>>ttempp.xiinhaao;finn>>ttempp.brrandd;finn>>ttempp.heeighht;fiin>>>temmp.ppricce;finn>>ttempp.noo;finn>>ttempp.daate;finn>>ttempp.faactoory;q->ddataa = temmp;q->liink=NULLL;t->liink=q;t=t->>linnk; priintff("读读取成功功!nn");finn.cllosee();retturnn heead;该函数将将文本文文件的数数据读出出来并生生成一个个链表!4 系统统功能实实现4.1仓仓库链表表建立函函数实现现图4.11仓库链链表建立立函数实实现4.2修修改信息息函数实实现图4.22修改信信息函数数实现4.3新新增货品品插入函函数实现现图4.33新增货货品插入入函数实实现4.4删删除函数数实现图4.44删除函函数实现现4.5修修改函数数的实现现图4.55修改函函数的实实现4.6插插入节点点函数实实现图4.66插入节节点函数数实现5 系统统使用说说明书1.创建建仓库链链表:在在此目录录下,用用户可以以创建一一个新的的仓库链链表。2.查查询记录录:在此此目录下下,用户户可以查查询所有有家电记记录和按按名称查查询家电电记录1).查查询所有有家电记记录:显显示所有有的家电电记录,如如果没有有记录则则会提示示用户输输入记录录。2).按按类别查查询家电电记录:输入要要查询家家电的名名称后,显显示相应应家电的的信息。3).按按品牌查查询家电电记录:输入要要查询家家电的品品牌后,显显示相应应家电的的信息。4).按型号号查询家家电记录录:输入入要查询询家电的的型号后后,显示示相应家家电的信信息。 00).退退出查询询系统:退出查查询系统统并返回回主菜单单。3. 插插入新增增货品信信息:在在此目录录下,用用户添加加新的纪纪录。添添加完后后,系统统会返回回主菜单单并提示示用户保保存,此此时你要要可以选选择。4. 删删除信息息:在此此目录下下,用户户删除纪纪录5. 修修改记录录:在此此目录下下,用户户在原有有的记录录上更改改记录。更更改后,系系统会返返回主菜菜单并提提示用户户保存,此此时你要要可以选选择2保保存,如如果不选选择保存存则不会会更改。6.保存存记录:在此目目录下,系系统会对对变动的的信息保保存起来来!7.读取取记录:在此目目录下,系系统将储储存的信信息全部部读出来来!0. 退退出系统统:提示示按0键键键退出出系统。6 总结结在为期两两周的时时间终于于完成了了本次课课程设计计。在设设计初期期准备阶阶段时做做好了充充分的准准备,包包括查询询资料、知知识的温温故等。有有了充分分的准备备后,就就可以有有个好的的开始了了。课程程设计在在设计阶阶段中遇遇到不少少的问题题,但是是都一一一解决了了。在开开始阶段段的数据据封装与与函数头头做起来来比较顺顺利,第第二阶段段在总体体规划时时开始很很混乱,但但在仔细细分析后后很快就就把总体体思路打打造好了了。最后后的也是是最困难难的问题题就是怎怎样实现现各个子子函数的的功能,由由于自己己的粗心心造成了了不少的的麻烦!例如,将将一个有有返回值值函数直直接调用用,而没没有进行行传值造造成了内内存错误误从而耽耽误了进进度。最最后进行行仔细调调试后才才发现这这个问题题,最后后程序就就顺利运运行了!参考文献献1 吴伟民民. 结结构(CC语言版版).大大学出版版社,2200002 周学毛毛 李健健. 据据结构与与程序设设计.人人民邮电电出版社社, 2200883 谭浩强强. CC程序设设计(第第三版). 清华华大学出出版设, 200084 韩永泉泉.高质质量程序序设计指指南C+/C语语言第33版, 200075 苏仕华华. 数数据结构构与算法法解析. 合肥肥: 中中国科学学技术大大学出版版社,2200446 刘振安安 孙忱忱 刘燕燕君. C程序序设计课课程设计计. 北北京:机机械工业业出版社社,200047 唐策善善,黄刘刘生. 数据结结构(第第二版). 合肥肥:中国国科学技技术大学学出版社社,200028 刘大有有,唐海海鹰. 数据结结构. 北京:高等教教育出版版社,2200119 严蔚敏敏,陈文文博. 数据结结构及应应用算法法教程. 北京京:清华华大学出出版社,22001110 苏仕仕华. 数据结结构自学学辅导. 北京京:清华华大学出出版社,22002211 徐孝孝凯. 数据结结构实用用教程. 北京京:清华华大学出出版社,11999912苏仕华华. 数数据结构构课程设设计. 北京:机械工工业出版版社,220055致谢经过为期期一周的的努力,我我的课程程设计任任务也终终于如期期完成。在设计阶段中遇到不少的问题,但是都一一解决了。有些是通过自己细心的研究和检查把程序调试好,有的问题是自己不懂的知识通过网上搜索以及同学的帮助也顺利的解决了!在此我要感谢帮助过我的老师和同学们,是你们耐心指导才让我顺利的完成了本次课程设计。我也从中学到许多的东西! 通过本次次课程设设计,我我对数据据结构的的知识掌掌握更牢牢固了!也培养养了自己己勤于思思考的良良好习惯惯!也让让我收获获了不少少的东西西,感谢谢所有帮帮助过我我的人!附页: 程序代代码头文件.h#inccludde <<strringg>#inccludde <<stddlibb.h>>#inccludde <<stddio.h>#inccludde<cconiio.hh>#inccludde ""winndowws.hh"#inccludde<iiosttreaam>#inccludde<ffstrreamm>usinng nnameespaace stdd;typeedeff sttrucct _Houusehholddchaar lleibbie20;chaar xxinhhao30;chaar braand30;flooat heiightt;douublee prricee;chaar noo300;chaar daate20;chaar faactoory30;intt keyy;HOUUSEHHOLDD;typeedeff sttrucct _NODDEHOUUSEHHOLDD daata;strructt _NNODEE *llinkk;NODDE;typeedeff sttrucct _LINNKLIISTNODDE* Pheead;intt coountt;LINNKLIIST;LINKKLISST *creeatvvoiddlisst();NODEE *ccreaatliist();voidd InnserrtNoode(NODDE *heaad,NNODEE *pp);voidd deeletteNoode(NODDE *heaad);NODEE *ssearrchLListt(NOODE *heead);NODEE *ssearrchLListt1(NNODEE *hheadd);voidd moodiffy(NNODEE *hheadd);booll diispllay(NODDE *heaad);NODEE *sorrt(NNODEE *hheadd); voidd wwritte_ffilee(NOODE *heead);NODEE *rreadd_fiile(NODDE *heaad);NODEE *IInittlisst(NNODEE *pp);voidd liist00(NOODE *heead);voidd liist11(NOODE *heead);int StrrCmpp(chhar na,ccharr naame,iint y);子函数.cppp #inncluude""stoore.h"LINKKLISST *creeatvvoiddlisst()/创创建一个个空的仓仓库链表表LINNKLIIST *p;p = (LLINKKLISST*)malllocc(siizeoof(LLINKKLISST);if(!p)exxit(0);p->>couunt=0;p->>Pheead=NULLL;retturnn p;NODEE *ccreaatliist()/创建链链表NODDE *Heaad;Heaad=nnew NODDE;intt i;intt k; NODDE *P1, *PPtr;P1=(NOODE*)maallooc(ssizeeof(NODDE);P1=Heaad;couut<<<"输入入仓库电电器种类类数:""<<eendll;cinn>>kk;priintff("请请输入电电器类别别-型型号-商标-重量量-单单价-编号-日期期-厂厂家nn");forr(i=0;ii<k;i+)Pttr=(NODDE*)malllocc(siizeoof(NNODEE);sccanff("%s %s %s %f %lf %s %s %s"",Pttr->>datta.lleibbie,Ptrr->ddataa.xiinhaao,PPtr->daata.braand,&Pttr->>datta.hheigght,&Pttr->>datta.ppricce,PPtr->daata.no,Ptrr->ddataa.daate,Ptrr->ddataa.faactoory);P11->llinkk=Pttr;P11=Pttr;P11->llinkk=NUULL;priintff("添添加成功功!");retturnn Heead;voidd InnserrtNoode(NODDE *heaad,NNODEE *pp)/插入新新的节点点 NODEE *pp1,*p2;p1=heaad;p2=p1->liink;whiile(p2!=NUULL && strrcmpp(p22->ddataa.noo,p->daata.no)<0) p11=p22; /p11 指向向刚访问问过的结结点p22=p22->llinkk; /p22 指向向表的下下一个结结点 p11->llinkk=p; /插入 p 所所指向的的结点p->liink=p2; /连接表表中剩余余的结点点coout<<<"插插入成功功!"<<<enndl;voidd deeletteNoode(NODDE *heaad)/卖出出货品信信息删除除 chaar xx;NODDE *pPrre,*pLooc;pLooc=ssearrchLListt1(hheadd);/ dattaOuut = pLLoc->daata;if(pLooc=NULLL)prrinttf(""没有查查到要删删除的商商品信息息!nn");reeturrn ;if(pLooc!=NULLL) prrinttf(""真的要要删除该该商品吗吗?(yy/n):"); cinn>>xx; if (x='yy'|x='Y'') pPPre=heaad;whhilee(ppPree!=NNULLL)&&&(pPPre->liink!=pLLoc)pPPre=pPrre->>linnk;pPPre->liink=pLooc->>linnk;frree(pLooc);prrinttf(""delletee suucceess!n"");NODEE *ssearrchLListt1(NNODEE *hheadd)/货品信信息查找找 NODDE *p;chaar nnum30;chaar nnamee300; chaar ppp; priintff("=n"); priintff(" a. 按商品品编号查查询 n");priintff(" b. 按商品品名称查查询 n");priintff("=n"); priintff(" 请 选选 择: "); p=hheadd->llinkk; cinn>