家电库存管理系统的设计(附程序代码)和家电库存管理系统课程设计报告_第1页
家电库存管理系统的设计(附程序代码)和家电库存管理系统课程设计报告_第2页
家电库存管理系统的设计(附程序代码)和家电库存管理系统课程设计报告_第3页
家电库存管理系统的设计(附程序代码)和家电库存管理系统课程设计报告_第4页
家电库存管理系统的设计(附程序代码)和家电库存管理系统课程设计报告_第5页
已阅读5页,还剩86页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

重庆科技学院《数据结构》课程设计报告学院:_电气与信息工程学院_专业班级:计科学生姓名:学号:设计地点(单位)___计算机基础自主学习中心____

设计题目:________家电库存管理系统的设计___________完成日期:年1月13日指导教师评语:___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________成绩(五级记分制):________________

指导教师(签字):________________重庆科技学院课程设计任务书设计题目:家电库存管理系统的设计学生姓名课程名称数据结构课程设计专业班级计科地点计算机基础自主学习中心起止时间设计内容及要求以链表结构的有序表表示某商场家电部的库存模型。当有提货或进货时需要对该链表及时进行维护。每次退出程序时,将该链表中的数据以文件形式保存在磁盘上,每次启动程序时,需将以文件形式保存的数据恢复成链表结构的有序表。链表结点的数据域包括:类别、型号、品牌、重量、单价、数量、生产日期、厂家名称,默认按类别、品牌升序排好序。程序功能包括:创建链表、插入、删除、修改、查询、排序等。设计参数测试数据要求:家电类别(如:电视机,空调,冰箱等)不少于5种,记录数量不少于500。进度要求20**.12.31完成任务的讲解、并接受课程设计任务,选定课程设计的题目20**.01.04了解任务的算法、并画出算法的程序流程图,对任务的关键技术进行验证、并确定解决办法20**.01.05-20**.01.06编制程序20**.01.09对程序进行调试,设计测试用例进行测试20**.01.10整理课程设计的过程、并进行总结,完善程序功能20**.01.11编写课程设计报告初稿20**.01.12完善课程设计报告、并准备答辨20**.01.13提交课程设计报告和程序,进行答辨参考资料1.严蔚敏吴伟民,数据结构,清华大学出版社,2007.32.李春葆,数据结构教程,清华大学出版社,2005.13.(美)StephenPrata,CPrimerPlus中文版(第五版),人民邮电出版社,2005.2其它说明1.本表应在每次实施前一周由负责教师填写二份,学院审批后交学院教务办备案,一份由负责教师留用。2.若填写内容较多可另纸附后。3.一题多名学生共用的,在设计内容、参数、要求等方面应有所区别。系主任:指导教师:摘要随着信息技术的飞速发展,人们对信息管理技术要求也越来越高以适应飞速发展的经济。本次课程设计针对当前的需求,设计一个家电仓库信息的管理系统以方便商家更快捷更有效的对仓库货品的信息进行管理,给商家创造更多的价值!该系统整体运用了数据结构的知识,它是将货品信息按链表形式来储存的。将所有的货品分类储存在数据链表的每一个节点中,每个节点也包含了一种类型家电的所有信息。即是,建一个链表,链表中有许多个节点,节点中储存了不同类型的数据;这样我们就很容易的将货品信息管理起来了!该系统进行了精心的规划,有齐全的信息管理功能。方便用户使用,用户能够很快的找到自己所需要的信息并且有添加、删除、修改、查询、排序、保存等功能提高了用户对信息的管理效率!关键词:信息数据结构链表管理目录TOC\o"1-3"\h\u1系统需求分析说明书 重庆科技学院课程设计任务书设计题目:家电库存系统的设计学生姓名课程名称数据结构课程设计专业班级计科普地点计算机专业实验室起止时间设计内容及要求以链表结构的有序表表示某商场家电部的库存模型。当有提货或进货时需要对该链表及时进行维护。每个工作日结束之后,将该链表中的数据以文件形式保存,每日开始营业之前,需将以文件形式保存的数据恢复成链表结构的有序表。

链表结点的数据域包括:类别、型号、品牌、单价和数量,以单价的升序体现链表的有序性。程序功能包括:初始化、创建表、插入、删除、更新数据,查询及链表数据与文件之间的转换等。设计参数测试数据要求:家电类别(如:电视机,空调,冰箱等)不少于5种,记录数量不少于50。进度要求20**.8.31星期一完成任务的讲解、并接受课程设计任务,选定课程设计的题目20**.9.1星期二了解任务的算法、并画出算法的程序流程图20**.9.2星期三对任务的关键技术进行验证、并确定解决办法20**.9.3星期四编制程序20**.9.4星期五编制程序20**.9.7星期一调试程序,并试运行20**.9.8星期二整理课程设计过程中的各参数、进行总结并提出改进意见20**.9.9星期三对改进办法进行实现,并编写课程设计报告20**.9.10星期四编写课程设计报告并准备答辨20**.9.11星期五参加答辨,提交设计报告参考资料1.严蔚敏吴伟民著,数据结构,清华大学出版社,2007.32.李春葆著,数据结构教程,清华大学出版社,2005.13.RichardF.GilbergBehrouzA.Forouzan,数据结构的C++伪码实现(英文版),人民邮电出版社,2002.1其它说明1.本表应在每次实施前一周由负责教师填写二份,院系审批后交院系办备案,一份由负责教师留用。2.若填写内容较多可另纸附后。3.一题多名学生共用的,在设计内容、参数、要求等方面应有所区别。教研室主任:指导教师:20**年8月26日摘要本程序的作用是建立一个简单的家电库存管理系统。当库存信息发生变化时要求能对链表的信息进行更新并存入文件。每个工作日开始时,需要把磁盘中的商品信息读出并加入链表中,每个工作日结束之后,在将该链表中的数据以文件形式保存,链表结点的数据域包括:类别、型号、品牌、单价和数量,以单价的升序体现链表的有序性。程序功能包括:初始化、创建表、插入、删除、更新数据,查询及链表数据与文件之间的转换等。程序需要对链表进行初始化、插入、删除、更新数据,查询等操作,还要求对文件的操作。关键字:链表数据域插入删除

目录第一部分设计题目、内容及要求 11.1设计题目 11.2设计要求 1第二部分概要设计 22.1链表节点信息说明 22.2总体程序框图 3第三部分详细设计 43.1初始化数据模块详细设计 43.1.1初始化数据模块伪码算法 43.1.2初始化模块程序流程图 53.2添加商品模块详细设计 63.2.1添加信息模块伪码算法 63.2.2添加商品模块程序流程图 73.3删除货物模块详细设计 73.3.1删除模块伪码算法 73.3.2删除模块程序流程图 93.4查询模块详细设计 103.4.1查询模块伪码算法 103.4.2查询模块流程图 123.5从文件中读取商品信息 133.5.1伪码算法 133.5.2读取信息模块程序流程图 143.6数据更新模块详细设计 153.6.1数据更新模块伪码算法 153.6.2更新数据模块程序流程图 153.6退出并保存商品清单 173.6.1退出并保存商品伪码算法 173.6.2退出并保存商品程序流程图 17第四部分调试分析 184.1问题回顾和分析 184.2经验和体会 18第五部分用户使用说明 19第六部分测试结果 206.1初始化模块测试图 206.2添加商品模块测试图 216.3删除商品模块测试图 226.4查询模块测试图 236.5读取商品信息测试图 24致谢 26参考文献 27第一部分设计题目、内容及要求1.1设计题目以链表结构的有序表表示某商场家电部的库存模型。当有提货或进货时需要对该链表及时进行维护。每个工作日结束之后,将该链表中的数据以文件形式保存,每日开始营业之前,需将以文件形式保存的数据恢复成链表结构的有序表。

链表结点的数据域包括:类别、型号、品牌、单价和数量,以单价的升序体现链表的有序性。程序功能包括:初始化、创建表、插入、删除、更新数据,查询及链表数据与文件之间的转换等。1.2设计要求要求实现以下功能初始化并创建链表:能够初始化并创建商品信息表并按照单价的升序排列;插入及删除:能够添加新商品信息并且当商品由于某种原因(损坏,售出及其他原因)而不得不删除之时能够顺利地实现删除操作;更新数据:当商品的价格或者数量变动的时候能够作出相应的改变;查询:能够按照某种要求需求商品的信息,并决定是否购买该商品,然后作出相应的数据更新;链表与文件之间的转换:能够成功地将链表中的信息写入文件,并能根据需要读出文件中的信息。第二部分概要设计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总体程序框图 否结束输入i值决定下一步操作更新数据退出并保存商品信息查询并决定是否购买从商品清单中读取信息删除商品信息添加商品初始化商品信息选择进入的模块选择是否进入系统结束输入i值决定下一步操作更新数据退出并保存商品信息查询并决定是否购买从商品清单中读取信息删除商品信息添加商品初始化商品信息选择进入的模块选择是否进入系统 是 i=1 i=2图2-1总体程序框图第三部分详细设计3.1初始化数据模块详细设计3.1.1初始化数据模块伪码算法intInticial(ListNode&p){while(i!=2){scanf(&pp->Date);pp->next=p->next;p->next=pp;scanf(&i);}Paixu(p);Display(p);ListTxt(p);returnOK;}其中,排序函数伪码算法如下:intPaixu(ListNode&head){ p=q=head->next;while(p!=NULL) {q=p->next;min=p->Date; while(q!=NULL) {if(q->Date.Danjia<=min.Danjia) {min=q->Date;q->Date=p->Date;p->Date=min;}q=q->next; }p=p->next;}Display(head); returnOK;其次,由链表读入信息到文件函数伪码算法如下:intListTxt(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); return1;}3.1.2初始化模块程序流程图scanf("%d",&i)p->next=pppp->next=p->next输入相应商品信息结束输出相应提示p->next==NULLDisplay(p)Paixu(p)i==2scanf("%d",&i)p->next=pppp->next=p->next输入相应商品信息结束输出相应提示p->next==NULLDisplay(p)Paixu(p)i==2 N Y YNListTxt(p)ListTxt(p)图3-1数据初始化模块程序流程图3.2添加商品模块详细设计3.2.1添加信息模块伪码算法intInsert(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);returnOK;}在上面的算法中,首先要查看一下商品信息表示否为空,是则退出,否则继续操作。在进入该模块之前,有关插入的商品的信息已经初始化完成,直接通过引用就可以使用。本模块首先将要插入商品的有关信息映射到一个节点的数据域,然后将该节点插入到商品信息表中,再排序即可。结束ListTxt(head)Paixu(head)p->next=q;q->next=p->next将a中的数据映射到节点q的数据域3.2.2添加商品模块程序流程图结束ListTxt(head)Paixu(head)p->next=q;q->next=p->next将a中的数据映射到节点q的数据域p==NULL N Yp==NULL图3-2添加商品信息模块程序流程图3.3删除货物模块详细设计3.3.1删除模块伪码算法 intDelete(ListNode&head,Node&a){if(p==NULL)exit(0);scanf(&choice);switch(choice){case1: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;else{p=head;scanf(&number);while(count<number-1){if(strcmp(p->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; else{s=p->next;p->next=p->next->next;free(s);}Display(head); } break;case2: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<number-1) {if(strcmp(p->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);returnOK;}3.3.2删除模块程序流程图由于本模块流程图中有类似的操作,所以只给出其中一种情况下的流程图,其他两种情况下的流程图省略不写。另外,此图还省略了其他不重要的操作。结束Display(head)p->next=p->next->nexts=p->next结束Display(head)p->next=p->next->nexts=p->next NYp==NULLp==NULLCChoice==1 N YChoice==2Choice==2scanf("%d",&number) N以后商品数量是否大于删除数量 Y以后商品数量是否大于删除数量 Y Np->next->Date.Shuliang-=a.Shuliangp->next->Date.Shuliang-=a.Shuliang图3-3删除模块流程图3.4查询模块详细设计3.4.1查询模块伪码算法intSearch(ListNode&head,Node&a){ if(p==NULL){getch();system("cls");}scanf(&choice); switch(choice) {case1: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"); elsescanf(&choice1); switch(choice1) { case1:p=head;scanf(&a.Shuliang); while(count<number-1) {if(strcmp(p->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; else{ s=p->next;p->next=p->next->next;free(s);}break;case2:break;} }break; case2: case1:p=head;scanf(&a.Shuliang); while(count<number-1) {if(strcmp(p->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; else{ s=p->next;p->next=p->next->next;free(s);}break;case2:break;} }break; case3: case1:p=head;scanf(&a.Shuliang); while(count<number-1) {if(strcmp(p->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; else{ s=p->next;p->next=p->next->next;free(s);}break;case2:break;} }breakdefault:getch();exit(0);} return1;}3.4.2查询模块流程图由于本模块流程图比较复杂,因此省略了一些不是很重要的部分。Choice==1Choice==1i==1i==1Choice==2Choice==2输入numberi==2输入numberi==2p->next->Date.Shuliang>a.Shuliangp->next->Date.Shuliang>a.Shuliang输入number输入numberp->next->Date.Shuliang>a.Shuliangp->next->Date.Shuliang>a.Shuliangs=p->nextp->next->Date.Shuliang-=a.Shuliangs=p->nextp->next->Date.Shuliang-=a.Shuliangp->next=p->next->nextp->next->Date.Shuliang-=a.Shuliangp->next=p->next->nextp->next->Date.Shuliang-=a.Shuliangs=p->nexts=p->nextp->next=p->next->nexttp->next=p->next->nexttp->next->next结束结束图3-4查询模块流程图3.5从文件中读取商品信息3.5.1伪码算法intTxtList(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);return1;}3.5.2读取信息模块程序流程图Getlenth(q)==0输入choice的值q->next=q->next->next向节点中读入信息fp=open("e:\\a.txt","r"))==NULL结束s=s->next输出相应信息choice==1Getlenth(q)==0输入choice的值q->next=q->next->next向节点中读入信息fp=open("e:\\a.txt","r"))==NULL结束s=s->next输出相应信息choice==1信息是否读取完毕信息是否读取完毕图3-5读取信息模块程序流程图3.6数据更新模块详细设计3.6.1数据更新模块伪码算法intGengxin(ListNode&head){chara[40];charb[20];doubled;while(p!=NULL){printf(p->Date);p=p->next;n++;}while(choice1!=2){scanf(&k);p=head;for(intcount=0;count<k;count++)p=p->next;printf(p->Date);scanf(&choice);switch(choice){ case1:scanf(fp);strcpy(p->Date.Species,fp);break; case2:scanf(a);strcpy(p->Date.XingHao,a);break; case3:scanf(b);strcpy(p->Date.Brand,b);break; case4:scanf(&d);p->Date.Danjia=d;break; case5:scanf(&number);p->Date.Shuliang=umber;break; default:}printf(p->Date);scanf(&choice1); }ListTxt(head);return1;}3.6.2更新数据模块程序流程图结束输入choice的值Choice==3Choice==4Choice==2Choice==1choice1==2结束输入choice的值Choice==3Choice==4Choice==2Choice==1choice1==2输出相应商品信息输出相应商品信息输入choice值输入choice值scanf("%s",a);strcpy(p->Date.XingHao,a)scanf("%s",fp);strcpy(p->Date.Species,fp)scanf("%s",a);strcpy(p->Date.XingHao,a)scanf("%s",fp);strcpy(p->Date.Species,fp)scanf("%s",b);strcpy(p->Date.Brand,b)scanf("%s",b);strcpy(p->Date.Brand,b)scanf("%d",&number);p->Date.Shuliang=numberscanf("%lf",&d);p->Date.Danjia=dscanf("%d",&number);p->Date.Shuliang=numberscanf("%lf",&d);p->Date.Danjia=d输出更新之后商品的信息输出更新之后商品的信息图3-6更新数据模块流程图3.6退出并保存商品清单3.6.1退出并保存商品伪码算法intListTxt(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);return1;}3.6.2退出并保存商品程序流程图P==NULL(fp=fopen("e:\\a.txt","w"))==NULL结束p=p->next将相应信息读入文件p==NULLP==NULL(fp=fopen("e:\\a.txt","w"))==NULL结束p=p->next将相应信息读入文件p==NULL图3-7退出并保存商品程序流程图第四部分调试分析4.1问题回顾和分析编写完程序之后,调试过程中出现不少问题。主要包括以下几个。首先,刚开始发现了一些由于粗心而出现的小问题,包括数据的输入忘了加取地址符,以及忘了晴空缓冲区等等。后来就发现了一些函数也存在问题。最先发现的是排序模块。此模块采用的是冒泡排序法,但是由于有一段时间没有编程,所以对以前学过的知识有点生疏,进而在内存空间的分配以及排序的顺序上出现了一些问题。最后,通过调试发现了其中的问题,进而采取了相应的措施改正了错误。其次,是删除模块。由于此模块“规模”比较宏大,所以出现的问题也最多。首先是不能够选择通过哪种方式进行删除,然后在商品的时候,相应商品的数量不会做出应该有的改变,甚至还出现一堆乱码。后来,通过单步调试找出了问题的原因并作出了相应的修改,最后结果差强人意。再次,则是在从文件中往内存中读取信息的时候出现的一个问题,即因为Feof函数的问题,从而在每次读取信息的时候都会多读出一个节点的信息,多余信息通过乱码的形式显示出来,最后是通过向其他同学请教才解决的,因此我又学到了一些知识。最后,则是内存空间的释放问题。当其他模块的问题都解决之后,本以为已经没有错误了,没想到每当程序运行完之后都会出现一个错误提示,后来才发现是释放空间的模块出现了问题,同样,在找到问题之后终于解决了问题,最终才勉强能够运行。4.2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论