数据结构课程设计-进销存货物管理系统_第1页
数据结构课程设计-进销存货物管理系统_第2页
数据结构课程设计-进销存货物管理系统_第3页
数据结构课程设计-进销存货物管理系统_第4页
数据结构课程设计-进销存货物管理系统_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

1、桂林电子科技大学综合设计说明书用纸 数据结构与算法数据结构与算法课程设计说明书课程设计说明书题题 目:目: 进销存货物管理系统进销存货物管理系统 学学 院:院: 计算机科学与工程学院计算机科学与工程学院 专专 业业: 姓姓 名名: 学学 号号: 指导教师:指导教师: 张瑞霞张瑞霞 2014 年年 10 月月 11 日日桂林电子科技大学综合设计说明书用纸目 录引言 .31 系统概述 .32 需求分析 .32.1 系统需求.32.2 开发环境.43 详细设计 .44 所遇到的问题和分析解决 .175 系统特色及关键技术 .206 结论 .21参考文献 .22桂林电子科技大学综合设计说明书用纸 第

2、1 页 引言 随着计算机技术的发展,经济大环境的变化使得规模经济的优势不再突出。固定的硬设备、人员数量、大量资金等资源投入占企业效益的比重变少,而软投入如管理、人力资源价值、服务、品牌附加值、渠道等要素资源的投入却能增加企业的效益。 “速度冲击规模”的速度经济概念已经向企业提出,计算机技术已经渗透到各个领域,成为各个行业必不可少的工具,特别是 internet 技术的推广和信息高速公路的建立,使 IT 产业在市场竞争中越发显示独特的优势,步入信息化的时代,有巨大的数据信息等待加工处理和传输,这使得对数据的进一步开发和利用显得尤为迫切。仓库作为一总货品资源的集散地,货品的种类繁多,包含很多的信息

3、数据管理。据调查得知,以前仓库进行信息管理的方式主要是基于文本、表格等纸介质的手工处理,对于货品的出入库情况的统计和核实等往往采用对账本的的人工检查,对管理者的管理权限的不受约束,任何人都可以查看,引起资料外泄。另外,数据信息处理工作量大,容易出错,不宜查找。而且,一般储存情况是记录在账本上的,仓库货物管理人员也只是当时记得比较清楚,时间长了进行查询会造成费事、费时、费力,如对很长时间的货物以及大量货物进行管理就更加困难了。因此我们很有必要建立一个仓库进销存货物管理系统,使货物管理工作更加规范化、系统化、程序化,提高信息处理的速度和准确性。1 系统概述 进销存货物管理系统主要运用了数据结构中线

4、性表的链式存储,链式存储空间的可扩展性大,将链表中的数据以文件的形式保存,程序功能包括初始化、创建表、插入、删除和查找等,以最少的内存使用和最高的效率为原则,实现客户的需求。进入主菜单,选择相应的功能按照提示即可进入相应的操作。本系统的主要功能如下:(1)用户自行注册登录,保证仓库货物信息的保密性。(2)仓库各种货物信息的输入,主要包括货物标号、名称、产地、入库价格、入库 时间、现存货物数量、已经销售数量、平均销售价格等。(3)仓库各种货物信息的查询、修改和维护。(4)对仓库中损坏货物信息的删除。(5)仓库货物信息列表的生成显示。(6)实现货物信息对文本中的保存。2 需求分析2.1 系统需求为

5、了能够提高内存的利用及各功能的实现,程序主要使用了:(1)线性表的链式存储,分配存储空间,空间可扩展性强,方便频繁的录入、插入、查桂林电子科技大学综合设计说明书用纸 第 2 页 找、删除和排序等而不占用多余的内存。 (主要应用)(2)文件文本的读取与写入,为了方便用户更加快速的执行管理操作。(3)结构体的定义,定义了货物结构体。(4)登录用户时的字符串读取及验证。进销存货物管理系统主要实现以下函数模块功能:(1)录入货物信息函数 LinkList CreateList(void) /运用链式存储 货物信息写入文件的函数 void file_write(ListNode *p) 文件中的信息读出

6、的函数 LinkList file_read()(2)查找货物函数 vvoid FindNode()(3)修改信息函数 void ModNode()(4)插入货物函数 void InsertNode()(5)删除货物函数 void DelNode()(6)货物信息排序函数 void goodsrank() (7)统计货物信息函数 void goods_count()(8)密码登陆系统函数 void apply();int load();void key() 系统能够实现初始化、创建表、插入、删除和查找等功能,使得货物管理更加规范化、系统化、程序化,方便货物管理员对仓库进行科学高效管理。2.2

7、开发环境 系统主要在 Microsoft Visual C+ 6.0 的环境下开发。Visual C+ 6.0,简称 VC 或者 VC6.0,是微软推出的一款 C+编译器,将“高级语言”翻译为“机器语言(低级语言) ”的程序。Visual C+是一个功能强大的可视化软件开发工具。自 1993 年 Microsoft 公司推出 Visual C+1.0 后,随着其新版本的不断问世,Visual C+已成为专业程序员进行软件开发的首选工具。虽然微软公司推出了 Visual C+.NET(Visual C+7.0),但它的应用的很大的局限性,只适用于 Windows 2000、Windows XP

8、和 Windows NT4.0。所以实际中,更多的是以 Visual C+6.0 为平台。Visual C+6.0 不仅是一个 C+ 编译器,而且是一个基于 Windows 操作系统的可视化集成开发环境(integrated development environment,IDE) 。Visual C+6.0 由许多组件组成,包括编辑器、调试器以及程序向导 AppWizard、类向导 Class Wizard 等开发工具。 3 详细设计3.1 设计框架设计框架桂林电子科技大学综合设计说明书用纸 第 3 页 图 3.1:设计框架图3.2 程序主要流程图程序主要流程图桂林电子科技大学综合设计说明书

9、用纸 第 4 页 图 3.2:程序主要流程图3.3 主要函数设计主要函数设计3.3.1 登陆函数登陆函数启动系统,进入界面,会有两个选项:1、新用户注册2、新用户登陆新用户注册: 执行此函数,程序会在工程目录下自动生成一个 key.txt 文件,用于保存新用户申请的账号和密码。void apply() /新用户注册int i,flag=1;FILE *fp;char name20,key20;flushall();printf(n*新用户注册*n);printf(ttt 用户名(不能为空):);scanf(%s,name);flushall();printf(ttt 密码(不能为空):);fo

10、r(i=0;i=20;i+) keyi=getch();if(keyi=13)keyi=0;break;printf(*);fp=fopen(key.txt,w);if(fp=NULL)printf(the file can not open!);flag=0;exit(1);fprintf(fp,%s %s,name,key);fclose(fp);新用户登陆: 函数通过读取 key.txt 文件获取新用户之前申请的账号和密码,以验证输入是否正确,从而是否允许用户进入系统。int load() /用户登录桂林电子科技大学综合设计说明书用纸 第 5 页 FILE *fp;int i;char

11、name20,key20;char name120,key120;fp=fopen(key.txt,r);fscanf(fp,%s %s,name,key); fclose(fp);printf(n*新用户登陆*n); printf(ttt 用户名(不能为空):); scanf(%s,name1);flushall();printf(ttt 密码(不能为空):); for(i=0;idata.NO);/输入货物标号scanf(%s,);/输入货物名称scanf(%s,p-data.area);/输入货物产地scanf(%f,&p-data.price);/输入货物入库价格

12、scanf(%s,p-data.time);/输入货物入库时间scanf(%d,&p-data.number1);/输入货物入库数量scanf(%d,&p-data.number2);/输入货物已经销售数量scanf(%f,&p-data.sellprice);/输入货物销售价格rear-next=p; /新结点连接到尾结点之后rear=p; /尾指针指向新结点rear-next=NULL; /终端结点指针置空file_write(head);/ 保存输入的货物信息建立货物信息界面:桂林电子科技大学综合设计说明书用纸 第 8 页 图 3.5:建立货物信息界面(1)图 3.5:建立货物信息界面(

13、2).4 货物信息的插入货物信息的插入 本系统设置了货物一共有八个属性,分别是货物的标号、货物名称、货物产地、入库价格、入库时间、现存货物数量、已经销售货物数量、销售平均单价。在进行货物信息的插入时应该按照上面的顺序依次插入,插入的位置也可以自由选择。插入完成后系桂林电子科技大学综合设计说明书用纸 第 9 页 统会提醒文件需要保存的位置。 在进行货物信息的插入前,系统会提示用户输入插入点。根据以下函数可以找到相应的插入点while(p2&knext;k=k+1; i 为货物插入的点。p1=(ListNode*)malloc(sizeof(ListNode);节点申请成功后输入货

14、物的信息,p1 节点将保存货物的信息。p1-next=p2-next;p2-next=p1;/将新节点插入货物信息插入的界面: 图 3.6:货物信息插入的界面(1)桂林电子科技大学综合设计说明书用纸 第 10 页 图 3.6:货物信息插入的界面(2).5 货物信息的查询货物信息的查询查找货物是信息管理的基本功能,当数据很多时怎么快速找到货物对管理员来说很重要,系统调用查找函数模块,显示查找菜单。根据提示输入需要查找的“货物标号”或者“货物名称”进行查找,查找成功,用户会看到查找货物的详细信息,如没有该货物,则查找失败,查找的主要函数设计:p=p0=file_read();/读取

15、文件p=p-next;scanf(%s,&pp);/输入查找的方式,a 为按照货物的标号查找,b 为按照货物的名称查找,设计两种方式查找货物的信息,更利于管理员对货物进行管理getchar(); if (pp=a|pp=A) printf(请输入要查找的货物标号:);scanf(%s,&num);while (p&strcmp(p-data.NO,num)!=0)p=p-next;else /按照货物的名称查找if (pp=b|pp=B) 桂林电子科技大学综合设计说明书用纸 第 11 页 printf( 请输入要查找的货物名称:);scanf(%s,&name);while(p&strcmp(

16、,name)!=0)p=p-next; 以上函数是找到货物的储存位置,而找到货物之后将货物打印出来,用户就可以看到所要查找的货物的相应信息了。 货物查询的界面:图 3.7:货物查询的界面.6 货物信息的删除货物信息的删除 删除是一项对数据管理的功能,将过期的货物信息删除,以免影响仓库管理,删除函数的原理和查找函数原理一样,只是在输入“货物标号”找到对应的货物后删除该结点,就会删除该货物的所有详细信息,并提示用户保存! p0=file_read();/调用此函数读取所要删除的文件信息 while(p!=NULL) if(strcmp(p-data.NO,no

17、)=0)/找到相应的结点p1-next=p-next;free(p);/删除链表中的结点flag=1;break; p1=p; p=p-next;flag=0;删除成功后,新的货物信息会打印出来,并提示用户保存。货物信息删除的界面:桂林电子科技大学综合设计说明书用纸 第 12 页 图 3.8:货物信息删除的界面.7 货物信息的输出货物信息的输出软件的此功能能够使用户获得货物的全部信息,利于管理员对货物的管理。p0=file_read();p0=p0-next;printf(货物标号 货物名称 货物产地 入库价格 入库时间 现存数量 已售数量 销售均价n);while(p0!=N

18、ULL)printf(%7s %10s %10s %8.2f %10s %10d %10d %8.2f, p0-data.NO,,p0-data.area,p0-data.price,p0-data.time, p0-data.number1,p0-data.number2,p0-data.sellprice);p0=p0-next;货物信息输出界面:图 3.9:货物信息输出界面桂林电子科技大学综合设计说明书用纸 第 13 页 .8 货物信息的修改货物信息的修改 软件的此项功能限制用户只能修改货物的标号,货物名称,货物产地,入库价格,入库时间,不能修改货

19、物的已售数量和销售平均单价两个属性,如需要修改此两项信息,需要进入“货物管理的销售更新”选项进行操作。对货物的信息修改,就是对链表的操作,首先需要找到所要修改的结点,根据函数:scanf(%s,snum);/系统提示用户输入所要修改货物的标号 while(p1!=NULL)if(strcmp(p1-data.NO,snum)=0) flag=1; break; p1=p1-next;货物信息的修改界面:图 3.10:货物信息修改界面.9 货物信息的销售更新货物信息的销售更新 对货物的销售更新,需要对其销售数量和销售均价进行更新。在输入的时候,系统会提示用户输入销售的数量和后面销

20、售的均价,完成这两个输入后,系统会自动更新货物的已经销售数量、现存数量和销售均价。p1-data.sellprice=(p1-data.number2*p1-data.sellprice+num1*price1)/(p1- data.number2+num1);/更新货物的销售均价p1-data.number1=p1-data.number1-num1;/更新货物的现存数量 p1-data.number2=p1-data.number2+num1;/更新货物的已经销售数量货物信息的更新界面:桂林电子科技大学综合设计说明书用纸 第 14 页 图 3.11:货物信息更新界面.10

21、 货物信息的排序货物信息的排序货物信息排序,为了可以更清楚的了解到货物库存量的多少,方便于管理者对仓库货物的销售政策和对即将过期货物的多少有所了解,使仓库管理员更直观的了解到仓库库存。该函数找到货物的记录信息按照货物数量从小到大重新排序,排序完后,返回主菜单并提示用户保存! 在对货物排序时,用户可以根据货物的现存数量、货物的入库价格、货物的已经销售价格、货物的销售均价进行排序。在对货物的现存数量进行排序时,应用了冒泡排序的方法,大体算法如下: while(p-next)/冒泡排序k=p;q=p-next;while(q)if(k-data.number1)(q-data.number1)k=q

22、;q=q-next; if(p!=k) t=*p; *p=*k; *k=t;t.next=p-next;p-next=k-next;k-next=t.next;flag=1; p=p-next; 对货物的入库价格进行排序时,应用了直接插入的排序方法,充分利用数据结构与算法的内容进行设计系统。ListNode *ptr1,*ptr2;桂林电子科技大学综合设计说明书用纸 第 15 页 q=L; ptr2=ptr1=p-next; /待排序链表 p-next=NULL; while(ptr1) while(p) if(p-data.priceptr1-data.price)ptr2=ptr1-nex

23、t; /记录无序链表下一个节点q-next=ptr1; ptr1-next=p;ptr1=ptr2;/ptr1 指向下一个节点break;else q=p;p=p-next; if(p=NULL) ptr2=ptr1-next; /从无序链表取出节点元素q-next=ptr1;ptr1-next=NULL; ptr1=ptr2;/无序链表节点后移 q=L;p=L-next; /有序链表货物信息的排序界面:桂林电子科技大学综合设计说明书用纸 第 16 页 图 3.12:货物信息排序界面.11 货物信息的统计货物信息的统计对货物的信息统计时,系统会自动计算出仓库里的剩余货物件数,

24、已经销售的件数,利润总数。当货物的总数量少于 200 件时,会提示:仓库里的货物偏少,请适当进货!当货物的总数量大于 1100 件时,会提示:仓库里积压的货物太多,请及时清仓!当货物的数量在 200 到 1100 件之间时,系统会提示:仓库里总件数大于 200 件,小于 1100 件,无需进货,清仓! 通过对链表的操作,可以实现上面的功能。货物信息的统计界面:桂林电子科技大学综合设计说明书用纸 第 17 页 图 3.13:货物信息统计界面4 所遇到的问题和分析解决 在进行系统设计开始时,我花了一段时间思索设计了系统的主体框架。本次课程设计,重要的是将已学的算法应用到自己的设计当中,因此在构建完

25、系统主体框架之后,我又花了很长的时间去思考系统的算法。整个系统应用了链表的内容,通过对链表的操作,可以对数据进行输入,修改,查询,和更新等。 软件的设计应用了流文件,在操作流文件时,程序出现了各式各样的问题,刚开始在建立文件的时候,文件不能写入,经过后面的调试,发现是文件的写入格式不对,将货物的入库价格和销售平均价格由 double 型改为 float 型,原来的问题就不会再出现了。 软件的货物信息录入、插入、更新、统计等功能都是在链表的基础上操作,在写系统之前就应该对这方面做足了功课,否则将无从下手。货物的信息录入,也就是链表的创建,在设计软件之初时,我利用尾插法进行创建。正确的算法大概为:

26、LinkList head=(ListNode *)malloc(sizeof(ListNode);rear=head;p=(ListNode *)malloc(sizeof(ListNode);rear-next=p; rear=p; 刚开始时在写创建链表的代码时可能因为粗心,忘记为节点申请新空间,导致后面的货物信息写入总是出现错误。 软件在对货物的信息进行更新时,用户只需要输入后面货物的销售数量和销售平均价格,而软件需要自动更新文件的现存数量、已经销售数量和销售平均价格。虽然这个算法不是太难,但如果不够细心去写的话,也可能会导致系统的更新失败。比如刚开始的时候我就把它们之间的代码顺序搞乱,

27、结果出现了更新错误。桂林电子科技大学综合设计说明书用纸 第 18 页 p1-data.sellprice=(p1-data.number2*p1-data.sellprice+num1*price1)/(p1-data.number2+num1);p1-data.number1=p1-data.number1-num1;p1-data.number2=p1-data.number2+num1; 上面的三行代码是正确的排列顺序,如果将第一行代码跟第二行代码或者第三行代码交换,就会出现更新错误! 在写货物的信息插入的代码时候也遇到过问题,软件刚开始的时候会提示用户输入插入的位置,但在调试软件的时候

28、老是出现插入位置不对的情况,经过检查发现是查找 i的位置不对!正确的算法为:while(p2&knext;k=k+1; 而开始写代码的时候居然写成了 knext) /冒泡排序算法 k=p;q=p-next; while(q) if(k-data.number1)(q-data.number1) k=q;q=q-next; if(p!=k) t=*p;*p=*k; *k=t;t.next=p-next; p-next=k-next; k-next=t.next;flag=1;桂林电子科技大学综合设计说明书用纸 第 19 页 p=p-next;直接插入的主要算法为:ListNode *ptr1,*ptr2;q=L; ptr2=ptr1=p-next; /待排序链表 p-next=NULL; while(ptr1) while(p) if(p-data.priceptr1-data.price)ptr2=ptr1-next; /记录无序链表下一个节点q-next=ptr1; ptr1-next=p;ptr1=ptr2;/ptr1 指向下一个节点break;elseq=p;p=p-next; if(p=NULL) ptr2=ptr1-next; /从无

温馨提示

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

评论

0/150

提交评论