资源描述
重庆科技学院综合性设计报告院(系):电子信息工程学院班级:学生姓名:学号:设计地点(单位)计算机科学与工程实验室设计题目:家电库存系统的设计完成日期:2009年9月11日指导教师评语:_成绩(五级记分制):指导教师(签字):重庆科技学院课程设计任务书设计题目:家电库存系统的设计学生姓名课程名称数据结构课程设计专业班级计科普 2008-01,02地 点计算机专业实验室起止时间设 计 内 容 及 要 求以链表结构的有序表表示某商场家电部的库存模型。当有提货或进货时需要对 该链表及时进行维护。每个工作日结束之后,将该链表中的数据以文件形式保存, 每日开始营业之前,需将以文件形式保存的数据恢复成链表结构的有序表。链表结点的数据域包括:类别、型号、品牌、单价和数量,以单价的升序体现链 表的有序性。程序功能包括:初始化、创建表、插入、删除、更新数据,查询及链 表数据与文件之间的转换等。设计参数测试数据要求:家电类别(如:电视机,空调,冰箱等)不少于5种,记录数量 不少于50。进度要求星期一完成任务的讲解、并接受课程设计任务,选定课程设计的题目星期二了解任务的算法、并画出算法的程序流程图星期三对任务的关键技术进行验证、并确定解决办法星期四 编制程序星期五 编制程序星期一调试程序,并试运行星期二 整理课程设计过程中的各参数、进行总结并提出改进意见星期三对改进办法进行实现,并编写课程设计报告星期四编写课程设计报告并准备答辨星期五参加答辨,提交设计报告参 考 资料1. 严蔚敏吴伟民著,数据结构,清华大学出版社,2007.32. 李春葆著,数据结构教程,清华大学出版社,2005.13. Richard F.Gilberg Behrouz A.Forouzan,数据结构的 C+伪码实现(央文版), 人民邮电出版社,2002.1其 它说明1.本表应在每次实施前一周由负责教师填写二份,院系审批后交院系办备案,一份 由负责教师留用。2.若填写内容较多可另纸附后。3. 一题多名学生共用的,在设计 内容、参数、要求等方面应有所区别。教研室主任:向毅指导教师:向毅王双明摘要本程序的作用是建立一个简单的家电库存管理系统。当库存信息发生变化时要求能 对链表的信息进行更新并存入文件。每个工作日开始时,需要把磁盘中的商品信息读出 并加入链表中,每个工作日结束之后,在将该链表中的数据以文件形式保存,链表结点 的数据域包括:类别、型号、品牌、单价和数量,以单价的升序体现链表的有序性。程 序功能包括:初始化、创建表、插入、删除、更新数据,查询及链表数据与文件之间的 转换等。程序需要对链表进行初始化、插入、删除、更新数据,查询等操作,还要求对文件 的操作。关键字:链表 数据域插入删除目录第一部分 设计题目、内容及要求11.1设计题目11.2设计要求1第二部分概要设计22.1链表节点信息说明22.2总体程序框图3第三部分详细设计43.1初始化数据模块详细设计4初始化数据模块伪码算法4初始化模块程序流程图53.2添加商品模块详细设计6添加信息模块伪码算法6添加商品模块程序流程图73.3删除货物模块详细设计7删除模块伪码算法7删除模块程序流程图93.4查询模块详细设计10查询模块伪码算法10查询模块流程图123.5从文件中读取商品信息13伪码算法13读取信息模块程序流程图143.6数据更新模块详细设计15数据更新模块伪码算法15更新数据模块程序流程图153.6退出并保存商品清单173.6.1 退出并保存商品伪码算法17退出并保存商品程序流程图17第四部分 调试分析184.1问题回顾和分析184.2经验和体会18第五部分用户使用说明19第六部分测试结果206.1初始化模块测试图206.2添加商品模块测试图216.3删除商品模块测试图226.4查询模块测试图236.5读取商品信息测试图24致谢26参考文献27第一部分设计题目、内容及要求1.1设计题目以链表结构的有序表表示某商场家电部的库存模型。当有提货或进货时需要对 该链表及时进行维护。每个工作日结束之后,将该链表中的数据以文件形式保存,每日 开始营业之前,需将以文件形式保存的数据恢复成链表结构的有序表。链表结点的数据域包括:类别、型号、品牌、单价和数量,以单价的升序体现链表 的有序性。程序功能包括:初始化、创建表、插入、删除、更新数据,查询及链表数据 与文件之间的转换等。1.2设计要求要求实现以下功能(1)初始化并创建链表:能够初始化并创建商品信息表并按照单价的升序排列;(2)插入及删除:能够添加新商品信息并且当商品由于某种原因(损坏,售出及 其他原因)而不得不删除之时能够顺利地实现删除操作;(3)更新数据:当商品的价格或者数量变动的时候能够作出相应的改变;(4)查询:能够按照某种要求需求商品的信息,并决定是否购买该商品,然后作 出相应的数据更新;(5)链表与文件之间的转换:能够成功地将链表中的信息写入文件,并能根据需 要读出文件中的信息。第二部分概要设计2.1链表节点信息说明表1各数据类型名称及其表示意义名称数据类型表示的意义Species字符家电的类型(包括电视机,空调等类型)Xinghao字符串家电的型号Pinpai字符串家电的品牌Danjia浮点型家电价格,为浮点型Shuliang整型家电的数量Data节点信息,包括以上数据信息next指针指向由Date和next组成节点表中,Species表示家电的类型,用一个大写字母代替。例如“D”表示电视机,“K” 表示空调,“B”表示冰箱,“J”表示电脑,“X”表示洗衣机。Xinghao和Pinpai都是以 字符串的形式表示的,Danjia表示一个商品的价格,而Shuliang这表示某种商品的库存 量。Date则是数据域,包括以上五项。而next则表示指向下一个节点的指针。这就是 一个商品种类的全部信息,用一个节点的空间来储存该类型商品的信息。而在以后的删 除和插入以及查询操作中在某些情况下只需对商品的库存量做一些修改久可以达到目 的,非常方便。2.2总体程序框图选择是否进入系统选择进入的模块0添删查从退更出并保存商品信息商品清单中读取信息询并决定是否购买除商品信息品信息结束输入i值决定下一步操作图2-1总体程序框图第三部分详细设计3.1初始化数据模块详细设计初始化数据模块伪码算法int Inticial(ListNode &p) while(i != 2) scanf(&pp-Date); pp-next = p-next;p-next = pp; scanf(&i); Paixu(p);Display(p);ListTxt(p);return OK; 其中,排序函数伪码算法如下:int Paixu(ListNode &head) p = q = head-next; while(p != NULL) q = p-next;min = p-Date;while(q != NULL)if(q-Date.Danjia Date;q-Date = p-Date;p-Date = min;q = q-next;p = p-next;Display(head);return OK;其次,由链表读入信息到文件函数伪码算法如下:int ListTxt(ListNode &head)FILE *fp; p = head-next;if(p = NULL)exit(0);if(fp = fopen(e:a.txt,w) = NULL)exit(0);while(p != NULL)fprintf(fp,p-Date);p = p-next;if(fclose(fp)exit(0);return 1;初始化模块程序流程图图3-1数据初始化模块程序流程图3.2添加商品模块详细设计添加信息模块伪码算法int Insert(ListNode &head,Node &a)p = head-next;if(p = NULL)exit(0);while(p = p-next)p = p-next;q-Date = a.Date;q-next = p-next;p-next = q;ListTxt(head);return OK;在上面的算法中,首先要查看一下商品信息表示否为空,是则退出,否则 继续操作。在进入该模块之前,有关插入的商品的信息已经初始化完成,直接 通过引用就可以使用。本模块首先将要插入商品的有关信息映射到一个节点的 数据域,然后将该节点插入到商品信息表中,再排序即可。添加商品模块程序流程图图3-2添加商品信息模块程序流程图3.3删除货物模块详细设计删除模块伪码算法int Delete(ListNode &head,Node &a) if(p = NULL)exit(0); scanf(&choice); switch(choice)case 1: scanf(a.Species);while(p != NULL) if(strcmp(p-Date.Species,a.Species)=0)printf(p-Date);i+;p = p-next; if(i = 1)break;elsep = head;scanf(&number);while(count next-Date.Species,a.Species) = 0)count +;p = p-next;while(strcmp(p-next-Date.Species,a.Species) != 0)p = p-next;if(p-next-Date.Shulianga.Shuliang)p-next-Date.Shuliang-=a.Shuliang;else s = p-next; p-next = p-next-next; free(s);Display(head); break;case 2: scanf(a.XingHao); while(p !=NULL) if(strcmp(p-Date.XingHao,a.XingHao) = 0)printf(p-Date);i +;p = p-next; if(i = 1)break;else p = head;scanf(&number);while(count next-Date.XingHao,a.XingHao) = 0)count +;p = p-next;while(strcmp(p-Date.XingHao,a.XingHao) != 0) p = p-next; if(p-next-Date.Shuliang a.Shuliang) p-next-Date.Shuliang -= a.Shuliang;else s = p-next; p-next = p-next-next; Display(head);break; ListTxt(head);return OK;删除模块程序流程图由于本模块流程图中有类似的操作,所以只给出其中一种情况下的流程图, 其他两种情况下的流程图省略不写。另外,此图还省略了其他不重要的操作。图3-3删除模块流程图3.4查询模块详细设计查询模块伪码算法int Search(ListNode &head,Node &a) if(p = NULL) getch();system(cls);scanf(&choice); switch(choice) case 1:scanf(a.Species);while(p !=NULL) if(strcmp(p-Date.Species,a.Species) = 0)printf(p-Date);i+; p = p-next;if(i = 1)printf(*对不起,没有找到相关商品的信息! n);else scanf(&choice1);switch(choice1) case 1:p = head;scanf(&a.Shuliang);while(count next-Date.Species,a.Species) = 0) count +; p = p-next; while(strcmp(p-next-Date.Species,a.Species) != 0) p = p-next;if(p-next-Date.Shuliang a.Shuliang)p-next-Date.Shuliang -= a.Shuliang;elses = p-next;p-next = p-next-next; free(s); break;case 2:break;break;case 2:case 1:p = head;scanf(&a.Shuliang);while(count next-Date.XingHao,a.XingHao = 0)count +;p = p-next; while(strcmp(p-next-Date.XingHao,a.XingHao) != 0)p = p-next;if(p-next-Date.Shuliang a.Shuliang)p-next-Date.Shuliang -= a.Shuliang;elses = p-next;p-next = p-next-next; free(s); break;case 2:break;break;case 3:case 1:p = head;scanf(&a.Shuliang);while(count next-Date.Brand,a.Brand) = 0) count +;p = p-next; while(strcmp(p-next-Date.Brand,a.Brand) != 0)p = p-next;if(p-next-Date.Shuliang a.Shuliang)p-next-Date.Shuliang -= a.Shuliang;elses = p-next;p-next = p-next-next; free(s); break;case 2:break;break default:getch();exit(0);return 1;查询模块流程图由于本模块流程图比较复杂,因此省略了一些不是很重要的部分。图3-4查询模块流程图3.5从文件中读取商品信息伪码算法int TxtList(ListNode &head) q-next = NULL;FILE *fp;if(fp = fopen(e:a.txt,r) = NULL)exit(0);while(!feof(fp) p = (ListNode)malloc(sizeof(Node);fscanf(fp,p-Date);p-next = q-next;q-next = p; q-next = q-next-next;if(Getlenth(q) = 0) scanf(&choice); if(choice = 1) Inticial(q);ListTxt(q); s = q-next;while(s != NULL)printf(s-Date);s = s-next; fclose(fp);return 1;读取信息模块程序流程图3.6数据更新模块详细设计数据更新模块伪码算法int Gengxin(ListNode &head) char a40;char b20;double d;while(p != NULL)printf(p-Date);p = p-next;n +;while(choice1 != 2)scanf(&k);p = head;for(int count = 0;count next;printf(p-Date);scanf(&choice);switch(choice)case 1:scanf(fp);strcpy(p-Date.Species,fp);break;case 2:scanf(a);strcpy(p-Date.XingHao,a);break;case 3:scanf(b);strcpy(p-Date.Brand,b);break;case 4:scanf(&d);p-Date.Danjia = d;break;case5:scanf(&number);p-Date.Shuliang= umber;break;default:printf(p-Date);scanf(&choice1);ListTxt(head);return 1;更新数据模块程序流程图图3-6更新数据模块流程图3.6退出并保存商品清单退出并保存商品伪码算法int ListTxt(ListNode &head) FILE *fp; p = head-next; if(p = NULL)exit(0);if(fp = fopen(e:a.txt,w) = NULL)exit(0);while(p != NULL)fprintf(fp,p-Date);p = p-next; if(fclose(fp)exit(0); return 1;退出并保存商品程序流程图图3-7退出并保存商品程序流程图第四部分调试分析4.1问题回顾和分析编写完程序之后,调试过程中出现不少问题。主要包括以下几个。首先,刚开始发现了一些由于粗心而出现的小问题,包括数据的输入忘了 加取地址符,以及忘了晴空缓冲区等等。后来就发现了一些函数也存在问题。 最先发现的是排序模块。此模块采用的是冒泡排序法,但是由于有一段时间没 有编程,所以对以前学过的知识有点生疏,进而在内存空间的分配以及排序的 顺序上出现了一些问题。最后,通过调试发现了其中的问题,进而采取了相应 的措施改正了错误。其次,是删除模块。由于此模块“规模”比较宏大,所以出现的问题也最 多。首先是不能够选择通过哪种方式进行删除,然后在商品的时候,相应商品 的数量不会做出应该有的改变,甚至还出现一堆乱码。后来,通过单步调试找 出了问题的原因并作出了相应的修改,最后结果差强人意。再次,则是在从文件中往内存中读取信息的时候出现的一个问题,即因为 Feof函数的问题,从而在每次读取信息的时候都会多读出一个节点的信息,多 余信息通过乱码的形式显示出来,最后是通过向其他同学请教才解决的,因此 我又学到了一些知识。最后,则是内存空间的释放问题。当其他模块的问题都解决之后,本以为 已经没有错误了,没想到每当程序运行完之后都会出现一个错误提示,后来才 发现是释放空间的模块出现了问题,同样,在找到问题之后终于解决了问题, 最终才勉强能够运行。4.2经验和体会通过做这个程序,我认识到了要想做出一个好的程序,首先必须了解到它 必须能够实现的功能以及涉及到知识点。然后将整个程序分为几个模块分别编 写好,才能达到预期的效果。在编写完程序时要尽量避免一些低级错误的出现。第五部分用户使用说明本程序能够基本上实现包括初始化、插入及删除、查询及购买、链表与文 件之间的转换以及更新数据等一系列操作。本程序分为几个模块,分别是数据初始化,添加商品信息,删除商品信息, 查询及购买商品,将链表中的商品信息写入到文件,将文件中的商品信息读入 链表并输出以及数据的更新等等。1. 如果没有初始化数据的话,进入此模块就可以根据提示创建商品信息表。2. 进入此模块可以根据系统的提示添加商品信息,并自己决定添加商品的 种类和数量等信息。3. 进入此模块可以定量地删除你想要删除的商品,可以根据类型,型号和 品牌查询,然后删除。4. 进入此模块,可以输入你想要查找的商品的类型,型号和品牌进行查询, 如果有的话可以决定是否购特定数量的该商品。5. 进入此模块,可以将已经创建好的商品清单中的商品信息输出到屏幕。6. 进入此模块,系统会自动保存商品信息,然后安全推出。7. 进入此模块,你可以修改某一种产品的某项数据,比如某一件商品的类 型活着型号等等。每一个程序都不能说已经最好,只能不断改进,才能更好。本程序虽然基 本上实现了应该有的功能,但还有很多不足,限于当前水平问题,未能做出相 应的修改,望用户谅解并给予我们一定得支持,我们一定会将程序做的更好, 以回报广大客户对我们的厚爱,谢谢!第六部分测试结果6.1初始化模块测试图g D :我的文档 DebuQ、KeCheng01.exe购.息统 否简系 是品理管 决取清存 普品电ffl-信信信;家品品物品度据入商商货商品霎进建加腐商出新迎创添删查从退更依*1 .*2.0*4.5.6.*7.欢迎进入初始化模块请输入您的选择:1请输入该商品类型:D请输入该商品型号FD请输入该商品品牌FDD请输入该商品单价T3请输入该商品数量桨3: D 我的文档 Debug1., KeCheng01.exe11、这是第2条记录2退出欢迎进入初始化模块陷输入该商品类型泅 #输入该商品型号:BB 输入该商品品牌:BBE #输入该商品单价H3 输入该商品数量 扁选择&继续初始化 1忙输入该商品型号:DDDD 输入该商品品牌:DDDDD 输入该商品单价= 1654 肩输入该商品数量口6*输入该商品类型:D图6-2数据初始化模块测试图(2)为了方便,商品类型在此只输入一个特定字符代表一种商品类型。6.2添加商品模块测试图图6-3添加商品信息模块测试图(1)6.3删除商品模块测试图。D:我的文档Debug . KeCheng01.exe*345*6*7从退更是品 决戡清 普品 心息-94 g信 富度据 农商品靠 葡商出新购息否信请撤入您的选择:3请输入您要删用的商品信息; 请端入要删除高品而数量光请选择您要的删除方式通过类型删除2 .通过型号删除3 通过品牌删除1. d花请耗入SW 除商品的类型W共改下是矮笑型,型号,品牌,单价,数量输出DD DDD 1326.00000032漏输入您型删除的商邑序列号:1*输出删除痂商商品蓿怠表二DDDBBBBBBBDDDDDDDD以下是按照商品的类型,型号,品牌,单价,数量依次列出的13.000000 2313.000000 631321.000000 231326.000000 221654.000000 36DDBBBBDDDDDD请输入您的选择H 继续删除2 退出6-5图6-6删除商品信息模块测试图(2)因为删除数量没有超过库存量,因此只需要对库存量做一下修改即可。6.4查询模块测试图图6-7查询模块测试图(1)图6-8查询模块测试图(2)在以上两幅图中,图(1)表示按照型号查询到目标商品之后购买的操作,图(2)表示的是按照类型查询到目标商品之后没有购买的操作。6.5读取商品信息测试图g D:我的文6DebugKeCheng01.exe迎创添删查从退更塞商出新电渭信信信;家岛品物品食据 入商商货雷存管理系统育芾决定是否购买 嚣也品信息请输入您的选择:5依次读出商品类型, DDD BB BBB DDDD BBB型号,DDDBBB品牌,单价,数量如下:13.00000021132.000000 6S1324.0000001325.0000001347.00000020 314 请继续选择您想进行的操作:1-继续操作2 -结束操结ASDFDDDDDDBBBBB图6-9读取商品信息测试图在上图中,注意到读取的商品信息是按照价格由低到高排列的。价格是双精度浮 点型变量,数量为整型变量。成*1.*2.*3.*4.*5.*6.*?.迎创添删查从退更电清信信信; 家导品物品食据 入商商货商品霎 进建加膺商出新购息统 否信 系 是品 理 定量 管 决取清 存 震品心息息隋输入您的选搀:?*商品美型*1 .D*2 .B*3 .B*4 .D霎.BDDD BB BBB DDDD BBB型号 DDDBBBASDFDDDDDD BBBBB 司品=3 :类型B品牌 单价 13.00000021132.000000651324.0000001325.0000001347.000000数量*2031421型号 品牌 单价 数量BBB ASDFD 1324.0000002。请选择您要修改更新的项目T 类型2 ,型号3 .品牌4单价S ,数量1MD: 我的文若、Debug KeChengO 1 .exe113商品信息如下二ASDFD 单价 1324.000000 数量 20图6-10数据更新模块测试图在以上的图中,系统首先给出所有商品信息,然后让用户选择要更新的商品编 号。当选定需要更新的商品之后,系统会让用户选择需要更新的项目,包括类型, 型号,品牌,单价以及数量,图中选饿了类型,可以看到该商品的类型由B改成了 K,表示该模块运行正常。致谢在这几天程序的编写过程中,很多人给予了我真诚而又无私的帮助,在他们的帮助 下,我终于完成了任务,在此我谨对他们给予我最真挚的感谢!谢谢我的同学们,是他们耐心地解答我提出的各种问题并且给我提出建议;谢谢老 师,是他们给我程序的编写提出了一些宝贵的建议和设计思路,使我的程序更加完善, 谢谢你们!参考文献1. 严蔚敏 吴伟民 著,数据结构,清华大学出版社,2007.32. 李春葆 著,数据结构教程,清华大学出版社,2005.13. Richard F.Gilberg Behrouz A.Forouzan,数据结构的C+伪码实现(英文版),人民邮电出版社, 2002.14. 王立柱 著C/C+与数据结构,清华大学出版社,2008.5
展开阅读全文