收藏 分销(赏)

数据结构课程设计—进销存货物管理系统论文.doc

上传人:精*** 文档编号:2169163 上传时间:2024-05-21 格式:DOC 页数:22 大小:712.50KB
下载 相关 举报
数据结构课程设计—进销存货物管理系统论文.doc_第1页
第1页 / 共22页
数据结构课程设计—进销存货物管理系统论文.doc_第2页
第2页 / 共22页
数据结构课程设计—进销存货物管理系统论文.doc_第3页
第3页 / 共22页
数据结构课程设计—进销存货物管理系统论文.doc_第4页
第4页 / 共22页
数据结构课程设计—进销存货物管理系统论文.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

1、桂林电子科技大学课程设计(论文)说明书用纸 课程设计(论文)说明书题 目: 进销存货物管理系统 学 院: 计算机与信息安全学院 专 业: 物联网工程 姓 名: 张小婷 学 号: 1400370206 指导教师: 王代君 2106年 9 月 30 日摘 要本论文主要描述了 “进销存货物管理系统”的设计与实现。此系统是运用数据结构的相关知识来实现的,采用C+编程语言进行编写。系统界面简洁美观,系统包含商品的进货、销售、退货以及商品管理等模块功能,可以使人们方便、快速、有效地管理商品的信息。论文首先对此系统进行简单的阐述,然后对系统需求进行详细的分析,接着对系统中所有的设计简单清晰的展现出来,并把设

2、计中遇到的问题以及解决方法一一作分析,还对系统特色和关键技术进行详细解说,最后对此设计的总结以及收获与经验的分享。关键字:数据结构;C+;进货;销售;退货;管理系统; 目 录引言11 系统概述22 需求分析22.1 系统需求22.2 开发环境33 详细设计33.1 设计框架33.1 主要函数设计43.1.1主函数43.1.3商品管理函数53.1.4进货函数63.1.5销售货物函数63.1.6 退货函数73.1.7查找函数83.1.8修改函数83.1.9插入函数93.1.10删除函数93.1.11排序函数103.1.12统计函数103.1.13查看所有商品函数:113.1.14查看销售记录函数1

3、14 所遇到的问题和分析解决124.1文件存储问题124.2 删除问题134.3 退货问题135 系统特色及关键技术145.1 系统特色145.2 关键技术156 总结16参考文献17桂林电子科技大学课程设计(论文)说明书用纸 第 19 页 引言随着计算机技术以及信息产业的飞速发展,经济大环境的变化使得规模经营的优势不再突出。固定的硬设备、人员的数量、大量资金等资源投入占企业效益的比重变少,而软投入如管理、人力资源价值、服务、品牌附加值等要素资源的投入却能增加企业的效益。“速度冲击规模”的速度经济观念已向企业提出,计算机技术已经渗透到各个领域,成为各个行业必不可少的工具,特别是internet

4、计算推广和信息高速公路的建立,使IT产业在市场竞争中越发显示独特的优势。仓库作为总货品资源的集散地,货品的种类繁多,包含很多的信息数据管理。据调查得知,以前的仓库进行信息管理的方式主要是基于文本、表格等资质的手工处理,对于货品的出入库情况的统计和核实往往采用对账本的人工检查,对管理者的管理权限不受约束,任何人都可以查看,引起资料外泄。另外数据信息处理工作量大,容易出错,不宜查找,而且,记录在账本上的信息,时间长了进行查询会造成费时、费力,若对很长时间的货物以及大量货物管理就更加困难。二十一世纪是信息时代,信息管理已经引入并应用到各行业管理领域,各种形式的百货商场、大型仓储超市、便利店、连锁超市

5、等形式的零售、批发业鳞次栉比,不断改变、影响着人们的价值观和生活方式。要提升企业的竞争力,就要大力推进企业信息化的建设,利用先进的办公自动化系统来实现企业内部信息管理、共享及交流。才能使企业在竞争激烈的21世纪取得先机。本课程设计主要解决一个小型仓库中,商品从进货、存储到销售、退货以及商品的各种管理的进销存信息管理系统。使货物管理工作更加规范化、系统化,提高信息处理的速度和准确性。1 系统概述 进销存货物管理系统主要运用数据结构中线性表的链式存储,将链表中的数据以文本的形式保存,程序功能包括创建表、插入、删除、修改、统计查找等。进入主菜单,选择相应的功能按照提示即可进入相应的操作。 本系统的主

6、要功能如下:(1) 各种商品信息的输入,即进货功能,主要包括商品编号、商品名称、产地、入库价格等。(2) 各种商品信息的查询、修改和维护。(3) 对过期或损坏的商品进行删除。(4) 进行货物的销售以及退货操作。(5) 查看仓库中所有商品信息和查看所有销售记录,以及查看某种商品的销售记录。(6) 统计现存商品种数,每种商品的盈利亏损情况,以及统计总盈利等。(7) 按照各种情况排序,如按编号、入库价格、现存数量、销售数量、平均售价排序等。(8) 实现货物信息以及销售信息对文本中的保存。2 需求分析2.1 系统需求为了提高内存的利用率及各功能的实现,程序主要使用了如下内容:(1) 线性表的链式存储,

7、分配存储空间,空间可扩展性强,方便信息的录入、查询、修改、删除、排序等功能。(2) 文件文本的读取和写入,以及文件文本的重写,方便用户执行操作。(3) 定义商品的和销售商品两个结构体,区分销售模块与其他模块,减少编写程序时的混淆。 进销存货物管理系统主要实现以下函数模块功能:(1) 进货函数 linklist creat_good()/运用链式存储商品信息写入文件函数 linklist file_write(node *p1) 读取文件信息函数 linklist file_read()(2) 查找商品函数 int find_good()(3) 查看所有商品函数int all_good()(4)

8、 修改商品信息函数 linklist xiugai_good()商品信息重新写入文件函数 linklist file_write1(node *p1)(5) 删除函数 linklist delete_good()(6) 插入函数linklist insert_good()(7) 排序函数 linklist sort_good()(8) 统计函数 int tongji_good()(9) 销售函数linklist sale_good()售出商品信息存入文本文件函数salelist Sale_out(snode *p1)售出商品文本文件读取函数salelist read_sale()(10) 查看

9、销售情况函数salelist visit()(11) 退货函数 int return_good()售出商品信息重写入文本文件函数 salelist Sale_out1(snode *p1)(12) 商品管理函数 int admin()(13) 主页面函数 int zhuyemian()(14) 主函数 int main() 这些函数功能使货物管理更加规范化、系统化、程序化,页面简洁美化,方便管理员对仓库进行科学管理。2.2 开发环境此系统主要在code:blocks 13.12 C+的环境下开发。Code:Blocks 是一个开放源码的全功能的跨平台C/C+集成开发环境。Code:Blocks

10、是开放源码软件。Code:Blocks由纯粹的C+语言开发完成,它使用了著名的图形界面库wxWidgets(2.6.2 unicode)版。Code:Blocks优点有很多方面,比如编译时,有错误的地方它会帮你自动跳转到错误行,关键字输入一半就可以显示出来等,它可以减少很多不必要的麻烦。而且对于追求完美的C+程序员,再也不必忍受Eclipse的缓慢,再也不必忍受VS.NET的庞大和高昂的价格。C+是在C语言的基础上开发的一种面向对象编程语言,属于编译型语言,应用广泛,C+支持多种编程范式面向对象、泛型编程和过程化编程,C+编程领域众广,常用于系统开发,引擎开发等应用领域等。3 详细设计3.1

11、设计框架该系统从整体结构看,主要分为四大模块:进货模块、销售模块、管理模块、退货模块。管理模块下又有几个小模块,小模块下又有小模块,这样把各模块细化,目的是使系统结构清晰、功能齐全,让用户更加方便的使用系统。系统各个模块之间相对独立,使用其一个中模块之后,只有返回上一级才能使用另外的模块。设计框架如下图:(图2.1设计框架)3.1 主要函数设计3.1.1主函数启动系统,进入界面,会动态输出“欢迎进入进销存货物管理系统”这些字样。然后弹出“按任意键进入主页面”,此时按下任意键便可进入主页面。动态输出主要运用延时程序Sleep(50),每输出一个字就用一次Sleep(50),便可动态输出。3.1.

12、2主页面函数主页面函数包括有如下选项:1-货物管理2-进货3-销售货物4-退货0-退出系统这几个选项,用户需要进行哪些操作便可一目了然。用户选择04就可以进入相应的页面,当然要是输入不是这一范围,便有提示输入错误,让用户重新输入。截图如下:(图2.2主页面)3.1.3商品管理函数在主页面中选择“1”时,便进入商品管理页面,此页面有十个选项分别是:1-查找商品信息2-修改商品信息3-插入商品信息4-删除商品信息5-排序商品信息6-统计商品信息7-查看所有商品信息8-查看商品销售信息9-返回上一级0-退出系统。用户可以直接明了的清楚此模块的功能。选择其中的选项会执行相应的函数,截图如下: (图2.

13、3商品管理页面)3.1.4进货函数进货函数是整个系统的关键,这里的“进货”其实就是数据的建立,此系统运用链表来建立货物信息,利用尾插法带头结点的货物信息链表。用户进入到“进货”页面时,会有提示需要输入的内容,并且提示时间的年月日用空格隔开,编号为0时结束进货。在此页面中,用户需要输入货物的编号、货物名称、产地、入库价格、保质期、进货数量,这几个信息,因为新进货,所以销售数量和平均售价都设置为“0”,入库时间则用获取系统时间的方法使其自动生成。当输入的货物编号为“0”时,按回车键,便结束“进货”,然后提示“是否保存?”选择“1”时便进货成功,货物的相应信息便存入文本文件,而要是选择“0”时便进货

14、失败,不对文本文件进行编写。接着提示“按任意键返回上一级”,按下任意键后,就会返回到主页面。3.1.5销售货物函数 用户进入此页面时,系统需要读取商品信息的文本文件,然后系统会显示仓库中现存商品的必要信息,即:货物编号、名称、产地、入库价格、保质期、销售数量、现存数量、平均售价等信息。然后提示输入销售的商品编号,输如相应的编号后,系统会判断商品是否过期(保质期和系统时间进行对比,保质期时间小于系统时间,便是过期商品),若是过期商品,就有提示“此商品已过期!是否销售?是-1,否-0:”,按下“0”时就取消销售,按下“1”时,提示输入销售的数量,当输入的数量大于现存数量,提示“此货物数量不足。重新

15、输入数量按1,结束按0。” 按下“0”时就取消此商品的销售,接着提示“结束销售按0,继续销售按1:”,若按下“1”又可以销售其他商品,如此循环着,直到结束销售按0为止。当输入的数量小于等于现存数量时,便有提示输入销售的价格,输入完后,销售的信息便存入销售的文本文件中(尾插法带头结点的销售的货物信息链表),销售的时间,便是系统当时的时间,接着提示销售成功,然后显示此次销售共得的人名币。接着提示“结束销售按0,继续销售按1:”此信息。当输入的货物编号与显示的所有货物信息的货物编号没有相对应时,系统便提示“此商品不存在! 结束销售按0,继续销售按1:”,然后就和以上情况相同。当结束销售时,系统就对商

16、品信息文本文件进行重写,换一种说法就是:对销售掉的货物的销售数量、现存数量、平均售价,进行修改,为保存的信息与实际信息相同,系统就需要进行相应的运算,即:某商品的销售数量为此次销售此商品的总数量加上之前的销售数量。现存数量为,当前的现存数量减去此次销售此商品的总数量。而平均售价为,修改前的销售数量乘上修改前的平均售价加上每次销售时的销售数量乘上每次销售的价格,再除于总的销售数量。然后,系统将会提示按任意键返回上一级。按下任意键,便返回到主页面。相应截图如下:(图2.4销售页面)3.1.6 退货函数退货模块是整个系统的最难点,因为一种商品有不同的消费者购买,所以就有多条销售记录,销售的时间不同,

17、售出的价格也有可能不同(比如节假日打折等,比平时价格少),退货时,就需要退掉购买的相应记录,才能准确的退货。因此,在显示销售记录,让用户选择退货时,就有必要给每条销售记录记上编号,以便准确退掉货物。每退掉一次,便刷新销售信息,如再次退货,则显示执行过退货的销售信息。货物退掉之后,还需要对商品信息文本和销售文本进行重写,重写方式差不多同理于上文的销售商品使对商品信息文本的重写。有区别地方在于,当商品信息文本中已经不存在将要被退货的商品时(信息已被删除),就需要在商品信息文本的后面加上此商品的信息(尾插法插入此商品),而当退货的商品件数等于销售的商品件数时,就需要在销售的文本文件中把相应的销售记录

18、给删除掉。用户进入退货页面时,系统需要读取销售信息的文本文件,如果没有销售记录,就会提示“没有销售记录!”,再让用户输入任意键返回主页面。如果有销售记录,就会显示销售的所有记录,并且给每条记录标上编号。然后提示“请输入选择退货的序号”,用户输入相应序号后,接着提示输入退掉的个数,如果退掉的个数大于销售的个数,系统就会提示“输入的个数大于销售的商品个数,不合理,请重新输入!”,直到输入个数小于等于销售个数时。如果等于销售数量,就需要把销售的文本文件中此条销售信息给删除,小于就不需要删除,只进行修改。完成输入后,系统便读取商品的文本文件,从而判断文件中是否存在被退货的商品,如果不存在,就在商品信息

19、的文本文件后面加上此商品信息,如果存在,只进行修改。每次退货,都显示退掉多少的人民币,然后对销售的文本文件进行修改。接着提示“继续退货按1,结束退货按0!”按下“1”,则再次选择退货,按下“0”,则结束退货。结束退货后,便对商品的文本文件进行重写。然后提示“按任意键返回上一级!”,按下任意键,返回到主页面。相应截图如下:(图2.5退货页面)3.1.7查找函数 用户进入查找页面时,系统会读取商品文本文件,然后提示“输入查找的商品编号”,如果此商品存在,便输出此商品的信息,要是不存在,则提示“此商品不存在!”。然后提示“结束查找按0,继续查找按1”,按下“1”则继续查找,按下“0”,则提示“按任意

20、键返回上一级!”按下任意键后,便返回到商品管理页面。3.1.8修改函数用户进入此页面时,系统会读取商品文本文件,然后输出仓库现存所有商品的信息。然后提示“输入修改的商品编号”,如果输入的编号与现存商品编号有对应,则显示此商品的所有信息。接着有如下提示:1:货物编号2:货物名称3:货物产地4:入库价格5:销售数量6:现存数量7:平均销售价格8:保质期输入修改的类型18:选择修改类型的序号后,系统将会提示输入修改后的内容(货物编号/货物名称/货物产地等)。修改后便显示出修改后的商品所有信息。接着提示“重新修改按1,结束修改按0;”按下“1”,则再次修改,按下“0”则结束修改。如果输入的编号与现存商

21、品编号没有对应,则提示“次商品号不存在,修改失败”。接着提示“重新修改按1,结束修改按0;”按下“1”,则再次修改,按下“0”则结束修改。结束修改后,系统会提示“是否保存?是-按1;否-按0。”,按下“1”则对商品文本文件进行重写,保存所有的修改,按下“0”,则不会对本次修改保存。然后提示“按任意键返回上一级!”按下任意键后,便返回到商品管理页面。3.1.9插入函数用户进入此页面时,系统会读取商品文本文件,然后提示“输入插入的位置”,如果插入位置小于等于商品总的种类数时,系统会提示输入商品的信息,即“货物编号 货物名称 货物产地 入库价格 保质期 销售数量 现存数量 平均售价”,按回车,就提示

22、“插入成功!”,此时便成功插入,接着提示“继续插入按1,结束插入按0。”按下“1”,再次插入商品,按下“0”,结束插入。如果插入位置大于商品总的种类数时,便提示“插入位置不合理。” 接着提示“继续插入按1,结束插入按0。”按下“1”,再次插入商品,按下“0”,结束插入。结束插入时,系统将提示“按任意键返回上一级!”按下任意键后,便返回到商品管理页面。3.1.10删除函数用户进入此页面时,系统会读取商品文本文件,然后显示如下选项: 1:删除过期商品。 2: 删除某编号的商品。当用户选择1时,系统会将所有的商品的保质期与系统的时间进行比较,要是有比系统时间小的商品保质期,则输出此商品,直到输出所有

23、过期商品。然后提示“输入想要删除的过期商品编号:”,再输出此商品信息,并且提示“确定删除?是-1;否-0:”按下“1”,此时就要在链表中对此商品进行删除,显示“删除成功!”按下“0”,则显示“删除失败!”。要是没有比系统时间小的商品保质期,则显示无过期商品!当用户选择2时,提示“输入删除的商品编号”,当输入编号存在时,便输出此商品信息,再提示“确定删除?是-1;否-0:”同上理。接着提示“是否保存?是-按1;否-按0。”按下“1”,则对商品文本文件进行重写,并且保存删除之后的信息。接着显示“按任意键返回上一级!”。按下任意键,返回商品管理页面。3.1.11排序函数用户进入此页面时,系统会读取商

24、品文本文件,然后显示如下选项:1:按商品编号排序 2:按入库价格排序 3:按销售数量排序 4:按现存数量排序 5:按平均销售价格排序 :请输入排序类型:输入以上类型序号后,便显示出按此类型排好的次序。然后提示“是否保存?是-按1;否-按0:”按下“1”,则将排好的次序存入商品文本文件,此时需要对文本文件进行重写。按下“0”,则不保存。接着提示“按任意键返回上一级!”按下任意键后,便返回到商品管理页面。3.1.12统计函数用户进入此页面时,系统会读取商品文本文件,然后显示如下选项:-1:统计现存商品总类。-2:统计每种货物盈利(亏损)情况。 -3:统计总盈利或总亏损。当用户选择1时,便统计出仓库

25、商品现存种类。然后提示“继续统计按1,结束统计按0”。当用户选择2时,系统会计算每一件除去卖出的所有商品成本共盈利或亏损的人民币,即:盈利或亏损=(销售均价-入库价格)*销售数量,然后显示出来。然后提示“继续统计按1,结束统计按0”。当用户选择3时,系统会统计卖出去的所有商品销售均价减去入库价格后的盈亏情况,若等于“0”则,显示“收支相抵”,若小于“0”则,显示共亏损的人民币,若大于“0”则,显示共盈利的人民币。然后提示“继续统计按1,结束统计按0”。按下“1”,再次选择统计,按下“0”时,结束统计。结束时,系统将提示“按任意键返回上一级!”按下任意键后,便返回到商品管理页面。相应截图如下:(

26、图2.6统计页面)3.1.13查看所有商品函数:用户进入此页面时,系统会读取商品文本文件,要是文本文件为空,则提示“还没有任何一件商品!”要是不为空,则显示所有商品信息。然后系统将提示“按任意键返回上一级!”按下任意键后,便返回到商品管理页面。3.1.14查看销售记录函数用户进入此页面时,系统会读取销售文本文件,然后显示如下选项:-1: 查看所有的销售记录-2: 查看某商品的销售记录当用户选择1时,将会显示出所有销售记录;当选择2时,会有提示“请输入查找的商品编号:”如果输入的商品编号在销售文本中存在时,就会显示出此商品的所有销售记录,当不存在时,会提示“此编号商品不存在!”然后提示“”,按下

27、“1”,继续查看,按下“0”,结束查看。结束时,系统将提示“按任意键返回上一级!”按下任意键后,便返回到商品管理页面。4 所遇到的问题和分析解决4.1文件存储问题 “进销存货物管理系统”的一个主要特点是“进货”,而每一次新进的货物存入文本时应是追加到文本后。刚开始编写文件存储时,使用C语言进行编写,并且没有使用追加的方法,因此,每新进一次货物,文件就被覆盖掉,只保留新进货物信息。这与现实极大不符。 因此查阅了很多书籍,根据书籍介绍,C语言文件读写的方法有两种一种是文本文件的读写,另外一种是二进制文件的读写。读写文件需要使用一个fopen函数打开一个特定的文件,并把一个流和这个文件相关联。它的原

28、型如下:FILE* open(const char* name, const char* mode); name参数是你希望打开的文件或设备的名字。mode参数标识流用于只读、只写还是既读又写,以及它是文本流还是二进制流。下面表格里列出了一些常用的模式:读取写入添加文本“r”“w”“a”二进制“rb”“wb”“ab”刚开始编写程序时写入文件只用“w”的方式,如下:FILE *fp; fp = fopen(f:/Good.txt,w+);所以每次进货原文件中的内容都会被覆盖掉,因此使用了添加“a”的方式。为了能学到更多知识,又尝试 用C+的方式来存储文件。查阅书籍介绍使用C+存储数据时,打开某一

29、文件使用ofstream fout.open()函数,然后在fout.open()里面写上需要打开的文件名或位置如ofstream fout.open(f:/ Good.txt);然后在以“fout(存储的内容)”,进行文件存储。因此使用这种方法进行尝试。编写完成后,进行测试,发现跟之前用c语言书写时一样,没有追加到文件尾部,而是将原来的内容给覆盖掉。又经过大量翻阅资料,以及上网查询资料,才了解到C+对于格式化数据的影响,加上ios:app即可解决这问题,然后又以如下方式进行修改,ofstream fout.open(f:/ Good.txt,ios:app);然而几次测试,依然没有解决问题。

30、询问其他同学才得知:ofstream类里的函数open()原型为:void open(const char* filename,int mode,int access);filename表示要打开的文件名,mode表示要打开文件的方式,access表示打开文件的属性。mode有很多值:以追加的方式打开ios:app,文件打开后定位到文件尾ios:ate,以二进制方式打开ios:binary,以输出方式打开ios:out,以输入方式打开ios:in;对于格式化数据的影响,加上ios:app即可解决这问题,但数据存储按常理是每次在原来基础的最后继续添加数据,以文本的信息存储最好,因为后台打开就可以

31、看到数据对与错,所以打开方式使用ios:ate | ios:in | ios:out条件值是最优的,每次以文本形式打开文件并定位到文件尾,数据存储也是以文本的形式存储,而access打开文件的属性选择默认就可以。根据他的观点,便在原来的基础上进行如下修改ofstream fout.open(f:/ Good.txt,ios:ate | ios:in | ios:out);几次测试后结果正确,所以源代码中文件的存储方式都用C+的方式进行存储。4.2 删除问题根据要求,已经过时陈旧的商品应该能够及时处理掉,这里就需要能在第一时间知道商品有无过期,一一查看每种商品的保质期,这种方法工作量大,并且不符

32、合实际。所以需要系统能够根据系统时间来与保质期进行对比,保质期小于系统时间便是过期商品。到这里又遇到如何获取系统时间的问题。上网查了资料,有多种读取系统时间的方法,本系统用如下方法获取系统时间:GetLocalTime(&now_time);/获取系统时间函数,头文件为#include p1-data.y_date=now_time.wYear;/系统年 p1-data.m_date=now_time.wMonth;/系统月 p1-data.d_date=now_time.wDay;/系统日还需要在外部定义now_time为SYSTEMTIME类型。这样便可获取系统时间。系统经过比较之后,就可

33、以快速查询过期商品,并将其删除了。4.3 退货问题刚开始的编写的退货模块,没有解决退货到具体的哪一条销售记录,只能“强行退货”。这里的“强行退货”是指只在商品的文本文件中进行修改,没有修改销售的文本文件,并且退回的价钱也不能根据销售时的价钱进行退款,只能按照销售均价或者是键盘输入退款。这样就不太现实。经过几番思考之后,想出用标记销售商品的方法,通过标号可以确定到退货的第几条销售记录。根据这条思路,便对销售的商品进行标记,然后存入文本文件。然而在测试退货时,读取到的文件却是乱码。想到可能是标号在结构体中没有定义,所以读取文件时,标号不能正常读取,因此出现乱码。到这里时,想过在结构体中添加标号这一

34、内容,但一经添加,整个程序就有极多处需要进行修改,工作量极大。顺着标号这一思路,最终在退货模块进行标号,即:在显示所有销售信息时给每条记录标上编号,然后选择退货时就可以选择标号来进行退货了。这样不仅不用把标号存入文本文件,而且还能具体到第几条记录。5 系统特色及关键技术5.1 系统特色系统整体都是在对链表进行操作,链表贯穿着整个系统的设计。本系统的亮点有多处: (1)为了避免编写程序与阅读程序时混淆,此系统定义了两个相似结构体,即商品信息结构体和销售信息结构体。 使用延时程序Sleep(50);使其动态输出“欢迎进入进销存货物管理系统”,给用户带来视觉上的享受。(2)商品管理功能多样化,有查找

35、、修改、插入、删除、排序、统计、查看所有商品信息、查看商品销售信息等大类功能,其中删除功能下还有按过期商品删除和按商品编号删除两种功能;排序功能下有按商品编号、按入库价格、按销售数量、按现存数量、按平均销售价格等排序功能;统计功能下有统计现存商品总类、统计每种货物盈利(亏损)情况、统计总盈利或总亏损等统计功能;查看商品销售信息功能下有查看所有销售记录和查看某商品销售记录等查看功能。这些功能使用户能较全面的管理商品信息。(3)删除时可以按过期商品删除,也可以按商品编号删除,这样可以减少用户删除商品时的错误率,又方便管理商品。(4) 销售商品时,如果商品已过期,会提示用户“此商品已过期!是否销售?

36、是-1,否-0:”可以让用户选择是否继续销售,以免对消费者或者是用户造成损失。相应的代码片段如下(源代码的销售函数中,第850-864行): if(p1-data.exp_ynow_time.wYear)/保质期年小于系统时间年时提示过期 coutg;if(g=0)break; if(p1-data.exp_y=now_time.wYear)&p1-data.exp_mnow_time.wMonth) /保质期年等于系统时间年、月份小于系统时间月份时提示过期 coutg;if(g=0)break; if(p1-data.exp_y=now_time.wYear)&(p1-data.exp_m=

37、now_time.wMonth)&(p1-data.exp_dnow_time.wDay) /保质期年等于系统时间年、月份等于系统时间月份、日小于系统时间日时提示过期 coutg;if(g=0)break; (5) 退货时,可以具体到哪一条销售记录,因为一种商品有不同的消费者购买,所以就有多条销售记录,销售的时间不同,售出的价格也有可能不同(比如节假日打折等,比平时价格少),退货时,就需要退掉购买的相应记录,才能准确的退货。此系统已解决好这一问题,可以减少不必要的损失。5.2 关键技术此系统的关键技术在于文件存储、获取系统时间、销售模块和退货模块,其中退货模块为难点。文件存储和获取系统时间上文

38、提到比较详细,这里就不在提及,只大概讲解销售模块和退货模块;(1)销售模块关键技术解说:首先根据用户输入将要销售的商品编号来判断仓库中是否有次商品,若存在,在根据保质期与系统时间的比较来判断商品是否过期,若已过期,则提示用户此商品已过期,让用户选择是否继续销售,如果用户选择继续,则系统继续此次销售,反之结束此次销售。以上如选择继续,则接着让用户输入销售的数量,系统再判断输入的数量是否大于库存量,若大于,则让用户选择重新输入或结束输入,若结束输入,则结束此次销售,若重新输入,并且输入的数量不大于库存量,则继续此销售。以上如继续销售,则让用户接着输入销售价格。然后系统再根据运算公式(p1-data

39、.now_num=p1-data.now_num-t;/t为销售个数,p1-data.now_num为现存个数,即商品的现存个数等于销售前的现存个数减去销售个数 p1-data.ave_price=p1-data.sale_num*p1-data.ave_price+t*s;/销售后的平均售价等于售前的均价乘上销售数量加上销售个数乘上销售价格 p1-data.sale_num=p1-data.sale_num+t;/销售数量等于此次售前的销售数量加销售个数 p1-data.ave_price=p1-data.ave_price/p1-data.sale_num;/新总的销售均价等于总的销售均价

40、除总销售数量(在源代码的第883-886行)对商品链表的销售数量、现存数量、销售均价等信息进行修改。并且将销售信息存入销售文本文件中。如此,便结束此次销售。每次销售结束之后,系统将提示是否继续销售,如果选择继续,则又进行销售。如果选择结束,则结束所有销售。然后对商品的文本文件进行修改。(2)退货模块关键技术解说:用户输入退货个数之后,系统判断输入退货的个数与此条销售记录的销售个数的大小,如果退货个数大于销售个数,则让用户重新输入。如果不大于,则系统查看商品文本中此商品是否存在,如果存在,则按公式(q1-data.now_num=q1-data.now_num+g;/g为退掉的个数,q1-dat

41、a.now_num为现存数量q1-data.ave_price=q1-data.ave_price*q1-data.sale_num-g*p1-data.sale_price;/ /销售后的平均售价等于售前的均价乘上销售数量减去销售个数乘上销售价格q1-data.sale_num=q1-data.sale_num-g; /销售数量q1-data.ave_price=q1-data.ave_price/float(q1-data.sale_num); /销售均价(在源代码的第1101-1104行)对商品链表中的销售数量、现存数量、销售均价进行修改;如果不存在,则用尾插法插入退货商品。如果退货个数

42、小于商品个数,则在销售链表中只对销售数量修改。如果退货个数等于商品个数,则在销售链表中把这条销售记录给删除掉。然后对商品文本进行重写。结束所有退货之后,又对销售文本文件进行重写。6 总结经过长时间的思考与编写,本系统初步完成了,基本上实现了所要求的所有功能,另外还添加了插入功能以及查询特定商品销售记录等功能。实现了仓库管理的信息化,满足了用户对仓库的基本要求。这次课程设计中,各个功能模块的执行主要运用上学期学习的数据结构知识中的线性表的链式存储、节点的插入、删除以及十个算法排序中的选择排序等。这让我对数据结构的应用有所提高,并深刻认识到算法知识与实际应用的联系。而由于时间上的限制以及能力上的不

43、足,还有符合实际的想法没有实现,比如统计时应该有按月份统计、按季度统计、售出商品的时间应该精确到秒等等,这些问题在日后的时间里还有待解决。在这次课程设计中,我收获了很多,它不仅加强了我的动手、思考和解决问题的能力,巩固和加深我带数据结构的理解,还让我学习到一些新的知识,比如:学会如何使用延时程序,学会用C+存储文件,懂得如何获取系统时间等知识。它还培养选用参考书,查阅资料的能力。认识来源于实践,实践是认识的动力和最终目的,实践是检验真理的唯一标准。所以这次课程设计对我们的作用是很大的。在这次课程设计中收获的点滴,都会是我们以后的程序之路坚硬的基石。参考文献(1) 谭浩强.C程序设计.清华大学出

44、版社,2010,331353(2) 张乃孝.算法与数据结构:C语言描述.高等教育出版社,2011,102109(3)谭浩强.C+程序设计.清华大学出版社,2011,415447目 录第一章 总 论1一、项目概况1二、项目所在区域简介1三、报告编制依据2四、编制内容3五、简要结论3第二章 项目建设背景及必要性5一、项目建设背景5二、项目建设必要性5第三章 服务对象与需求分析8第四章 建设内容及规模9一、建设内容9二、建设规模9第五章 项目选址及建设条件10一、项目选址10二、什邡市概况10三、建设条件11第六章 项目建设规划和工程方案设计15一、项目建设规划的指导思想、基本原则和重建目标15二、项目建设规划实施的保障措施16三、工程方案设计原则16四、总平面布局17五、建筑设计17六、结构设计19七、电气设计21八、给排水设计21九、通风及空调系统22十、建筑装修和防护23第七章 节能方案25一、用能标准和节能规范25二、主要节能措施25第八章 环境保护与消防设计28一

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服