




已阅读5页,还剩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参考文献2728第一部分 设计题目、内容及要求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 总体程序框图 否结束输入i值决定下一步操作更新数据退出并保存商品信息查询并决定是否购买从商品清单中读取信息删除商品信息添加商品初始化商品信息选择进入的模块选择是否进入系统 是i = 1 i = 2图2-1总体程序框图 第三部分 详细设计3.1 初始化数据模块详细设计 3.1.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.2 初始化模块程序流程图scanf(%d,&i )p-next = pppp-next = p-next输入相应商品信息结束输出相应提示p -next = = NULLDisplay(p)Paixu(p)i = = 2NYY N ListTxt(p)图3-1 数据初始化模块程序流程图 3.2 添加商品模块详细设计 3.2.1 添加信息模块伪码算法 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; 在上面的算法中,首先要查看一下商品信息表示否为空,是则退出,否则继续操作。在进入该模块之前,有关插入的商品的信息已经初始化完成,直接通过引用就可以使用。本模块首先将要插入商品的有关信息映射到一个节点的数据域,然后将该节点插入到商品信息表中,再排序即可。 结束ListTxt(head)Paixu(head)p-next = q;q-next = p-next将a 中的数据映射到节点q 的数据域 3.2.2 添加商品模块程序流程图 p = NULLNY 图3-2 添加商品信息模块程序流程图 3.3 删除货物模块详细设计 3.3.1 删除模块伪码算法 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.2 删除模块程序流程图 由于本模块流程图中有类似的操作,所以只给出其中一种情况下的流程图,其他两种情况下的流程图省略不写。另外,此图还省略了其他不重要的操作。结束Display(head)p-next = p-next-nexts = p-next N Yp = NULLChoice = = 1NYChoice = = 2scanf(%d,&number)N以后商品数量是否大于删除数量Y YNp-next-Date.Shuliang -= a.Shuliang图3-3 删除模块流程图3.4 查询模块详细设计 3.4.1 查询模块伪码算法 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; else s = 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; else s = 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; else s = p-next;p-next = p-next-next; free(s); break; case 2:break; break default:getch();exit(0);return 1; 3.4.2 查询模块流程图 由于本模块流程图比较复杂,因此省略了一些不是很重要的部分。 Choice = = 1i = 1Choice = 2输入numberi = 2p-next-Date.Shuliang a.Shuliang输入numberp-next-Date.Shuliang a.Shuliangs = p-nextp-next-Date.Shuliang -= a.Shuliangp-next = p-next-nextp-next-Date.Shuliang -= a.Shuliangs = p-nextp-next = p-next-next tp-next-next结束图3-4 查询模块流程图3.5 从文件中读取商品信息 3.5.1 伪码算法 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.5.2读取信息模块程序流程图Getlenth(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 数据更新模块伪码算法 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.2 更新数据模块程序流程图结束输入choice 的值Choice = 3Choice = 4Choice = 2Choice = 1choice1 = 2 输出相应商品信息输入choice值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(%d,&number);p-Date.Shuliang = numberscanf(%lf,&d);p-Date.Danjia = d输出更新之后商品的信息图3-6 更新数据模块流程图 3.6 退出并保存商品清单 3.6.1 退出并保存商品伪码算法 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.6.2 退出并保存商品程序流程图P = NULL(fp = fopen(e:a.txt,w) = NULL结束p = p-next将相应信息读入文件p = NULL 图3-7 退出并保存商品程序流程图第四部分 调试分析 4.1 问题回顾和分析 编写完程序之后,调试过程中出现不少问题。主要包括以下几个。 首先,刚开始发现了一些由于粗心而出现的小问题,包括数据的输入忘了加取地址符,以及忘了晴空缓冲区等等。后来就发现了一些函数也存在问题。最先发现的是排序模块。此模块采用的是冒泡排序法,但是由于有一段时间没有编程,所以对以前学过的知识有点生疏,进而在内存空间的分配以及排序的顺序上出现了一些问题。最后,通过调试发现了其中的问题,进而采取了相应的措施改正了错误。 其次,是删除模块。由于此模块“规模”比较宏大,所以出现的问题也最多。首先是不能够选择通过哪种方式进行删除,然后在商品的时候,相应商品的数量不会做出应该有的改变,甚至还出现一堆乱码。后来,通过单步调试找出了问题的原因并作出了相应的修改,最后结果差强人意。 再次,则是在从文件中往内存中读取信息的时候出现的一个问题,即因为 Feof函数的问题,从而在每次读取信息的时候都会多读出一个节点的信息,多余信息通过乱码的形式显示出来,最后是通过向其他同学请教才解决的,因此我又学到了一些知识。 最后,则是内存空间的释放问题。当其他模块的问题都解决之后,本以为已经没有错误了,没想到每当程序运行完之后都会出现一个错误提示,后来才发现是释放空间的模块出现了问题,同样,在找到问题之后终于解决了问题,最终才勉强能够运行。 4.2 经验和体会 通过做这个程序,我认识到了要想做出一个好的程序,首先必须了解到它必须能够实现的功能以及涉及到知识点。然后将整个程序分为几个模块分别编写好,才能达到预期的效果。在编写完程序时要尽量避免一些低级错误的出现。第五部分 用户使用说明本程序能够基本上实现包括初始化、插入及删除、查询及购买、链表与文件之间的转换以及更新数据等一系列操作。本程序分为几个模块,分别是数据初始化,添加商品信息,删除商品信息,查询及购买商品,将链表中的商品信息写入到文件,将文件中的商品信息读入链表并输出以及数据的更新等等。1.如果没有初始化数据的话,进入此模块就可以根据提示创建商品信息表。 2.进入此模块可以根据系统的提示添加商品信息,并自己决定添加商品的种类和数量等信息。 3.进入此模块可以定量地删除你想要删除的商品,可以根据类型,型号和品牌查询,然后删除。 4.进入此模块,可以输入你想要查找的商品的类型,型号和品牌进行查询,如果有的话可以决定是否购
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 推动国际学术合作与教育科研交流新举措
- 人工智能全球治理战略与执行路径分析
- 企业能源管理系统优化方案研究与实施路径
- 2024年项目管理认证关键考察试题及答案
- 注册会计师考试学习效率提升工具试题及答案
- Salivaricin-B-生命科学试剂-MCE
- Org-274179-0-生命科学试剂-MCE
- Nectin-4-targeting-bicycle-peptide-59-生命科学试剂-MCE
- F1-RIBOTAC-生命科学试剂-MCE
- 行政管理师证书考试知识点清单制作试题及答案
- 北京市朝阳区2025届高三下学期一模试题 数学 含答案
- 运输公司安全管理制度
- 2025届吉林省长春市高三下学期4月三模政治试题(原卷版+解析版)
- 2025届江苏省扬州市中考一模语文试题(含答案)
- 2025年河北省唐山市中考一模道德与法治试题(含答案)
- 2025年一级注册计量师考试题库大全及答案
- 放疗皮肤反应分级护理
- 工程造价咨询服务投标方案(专家团队版-)
- 2024年广东省中考生物+地理试卷(含答案)
- 小小科学家《物理》模拟试卷A(附答案)
- 劳务派遣劳务外包服务方案(技术方案)
评论
0/150
提交评论