优秀的毕业设计论文网
计算机 JAVA 电子信息 单片机 机械机电 模具 土木工程 建筑结构 论文
热门搜索词:网络 ASP.NET 汽车 电气 数控 PLC

库存管理系统的设计

以下是资料介绍,如需要完整的请充值下载.
1.无需注册登录,支付后按照提示操作即可获取该资料.
2.资料以网页介绍的为准,下载后不会有水印.资料仅供学习参考之用.
  
资料介绍:

摘要
本文详尽阐述了一个完整的库存管理信息系统,采用系统生命周期的结构化方法,完成软件开发的过程。 通过对库存管理的实际调查,明确其完整的业务流程,以进行系统分析、系统设计、系统实施。在分析库存管理的具体情况后,采用Microsoft Access型数据库系统作为材料(即商品,下同)库存管理系统的后台数据库。由于Microsoft公司的Visual C++工具面向对象可视化编程的特点,有利于系统的开发,所以决定用其作为主要开发工具。 系统具有数据录入、数据修改、记录查询、报表打印等功能。较全面满足了材料库存管理的各项工作。该系统采用模块化原理编程,做到了模块规模适中,本身相对独立。模块化使程序结构清晰,易于设计、易于理解,提高了系统的可靠性。
本文详细说明了一个库存管理的业务流程,分析了其数据流程,明确了数据表之间的联系,详细说明了主要的程序逻辑。并以图表的方式直观的说明,使程序易于理解。
关键词:库存管理,业务流程,软件工程,模块化原理 内容来自think58 [资料来源:http://think58.com]


目 录
摘 要
前言
1库存信息管理系统的基本问题
1.1库存信息管理系统的简介
1.2管理者对库存信息管理系统的需求
2开发环境的选择
2.1开发技术的选择
2.2关系型数据库的实现
2.3数据库访问技术的选择
3系统分析与概要设计
3.1系统分析
3.2系统设计
4 系统简介
5数据库设计
5.1数据设计概述
5.2系统数据库表
6程序设计
6.1系统主界面
6.2系统其它界面
7 结束语
致 谢
参考文献 think58

[资料来源:http://THINK58.com]

3系统分析与概要设计
3.1系统分析
系统分析的根本目的是,分析出合理的信息流动、处理存储的过程。系统分析的主要活动有,系统初步调查、可行性研究、系统详细调查、新系统逻辑方案的提出。下面就各个方面分别说明:
⑴系统初步调查
系统初步调查的主要目标就是,从系统分析人员的角度看新项目的开发有无必要和可能。初步调查的内容包括:
① 系统的基本情况,包括它的外部环境、规模、历史、管理目标、主要任务、当前面临的主要问题。
② 系统中信息处理情况,包括现有系统的组织机构、工作方式、工作效率、可靠性、人员素质和技术手段。
③ 系统的资源情况人、财、物等资源。
④ 系统各类人员对系统的态度,包括领导和有关管理人员对现有信息系统的看法、支持和关心程度等。
库存管理需要有:产品相关信息设置,产品入库信息和出库信息以及打印输出等功能。应有入库信息的输入窗口,出库信息输入窗口,产品相关信息设置的输入窗口。,并且当输入库存基本信息时,界面要自然、简便,要有充分的提示和帮助,以便于操作人员学习使用和掌握。对输入的错误又有好的措施,并随时掌握任务的进展情况,输出的形式要易于理解,结果要正确。当然了,对于用户来说,界面就是系统本身。用户特别关心能否有效地使用软件来解决问题,用户对软件功能的理解都在界面上表现出来。人机界面体现了系统的功能,以及操作的方便程度是否符合使用的要求与工作习惯。

think58好,好think58

[资料来源:http://THINK58.com]


总之,应使管理部门及时掌握产品库存全面情况,并通过这样的系统,做到信息的规范管理,科学统计和快速查询,从而减少管理方面的工作量。
根据用户提出的建议,为了开发出有效的库存管理系统,遵循以下原则:
① 满足用户需要。之所以开发新系统是因为旧系统存在问题,束缚着组织的发展,不能适应用户的需要。作威信系统必须其最终系统能被用户接受,实现用户的初衷。
② 功能更完善。功能是否完整,是指能否覆盖组织的主要业务管理范围。同时,还表现在各部分接口是否完备,数据采集和存储格式是否统一,各部分是否协调一致。管理信息系统的功能主要有:数据处理功能、控制功能、预测功能、决策功能、公用信息服务功能。
③ 技术更先进。正确认识各种先进技术的优劣长短,从而根据组织的实际情况和未来得发展将其合理的运用到管理信息系统的开发中去。要努力发挥其高速度、高精度、高密度的优点,也要避免其缺乏灵活性,不便于处理意外情况的缺点。同时,不要为了一味的先进,而忽视了技术本身的成熟性。
④ 实现辅助决策。许多组织的决策任务非常复杂、耗时,而决策关系到组织的兴衰。因此,所有的组织都需要能够帮助他们做出最佳的决策支持系统。
⑵ 可行性分析
可行性研究的主要任务是在系统初步调查的基础上,对新系统是否能够实现和值得实现等问题作出判断,避免在花费了大量的人力和物力之后才发现系统不能实现或新系统投入使用后没有实际意义,而引起的浪费,对新系统可行性分析,要求用最小的代价在尽量短的时间内确定系统是否可行。内容包括:技术可行性、经济可行性、营运可行性。 think58好,好think58

[资料来源:http://think58.com]


① 技术可行性
计算机管理信息系统的开发是一项复杂的系统工程,从70年代开始,人们逐渐认识到,为了保证MIS开发成功,必须采用工程化的系统开发方法,并研究出一些符合工程化标准的开发方法。
这些方法旨在指导开发者进行工程化的系统开发,从而加快MIS开发的速度,保证质量,以降低开发成本。工程的系统开发方法确实在开发软件中取得了一定的效果。此次开发的库存管理系统使用Visual Basic作为前台开发工具。
为了很好的实现系统的功能,后台选用了Microsoft Access开发学籍管理所需要得数据库。
② 经济可行性分析
公司有多台计算机和打印机,各台微机已通过局域网互联,因此新系统使用后,不需要购置新的硬件,硬件的升级费用也是非常低,系统完成后,一些报表可由系统自动处理,不再需要人工干预,提高公司管理的规范化、系统化、制度化、减轻了管理人员的工作量。公司有微机操作人员若干,对本系统的运行界面很容易熟练掌握,不需要进行特殊的培训工作。
③ 运行可行性分析
随着计算机知识的普及和推广,越来越多的人掌握了计算机的基本使用方法和基本。目前,公司的管理人员已经具备了一定的计算机基础知识和实际操作经验。对于局域网、WINDOWS等环境下的软件使用比较熟悉,对于新系统的开发,用户表现出极大的兴趣和热情,提出了各种很好的建议和要求。 [资料来源:http://think58.com]
通过以上的分析,开发库存管理系统是完全必要并且是完全可行的。
3.2系统设计
⑴系统设计原则
① 实用性:系统的设计从公司的需求出发,满足了公司管理活动的一系列要求和需要,而且力求操作员操作方便、简单易懂、界面友好。
② 安全性:系统采用了用户输入编号和密码的登录界面,从而防止了非法用户的入侵;通过对用户权限的设置实现了系统维护人员与操作员相分离,充分保证了系统的安全性。
③ 可维护性和可扩展性:系统具有良好的可扩展性和可维护性。系统中各个模块的独立性可以完全保证各个模块的适当扩展和修改不会影响到其他模块的运行。
④ 标准性:软件设计严格执行国家有关软件工程的标准,保证系统质量,提供完整、准确、详细的开发文档。
⑵ 系统设计方法
结构化方法是系统在设计时采用的主要方法。结构化方法的基本思路就是把整个系统开发过程分为若干阶段,每个阶段进行若干活动,每项活动应用一系列标准、规范、方法和技术,完成一个或多个任务,形成符合给定规范的产品。
结构化系统开发方法的特点是:
① 用“自上而下”的开发策略,进行系统分析和系统设计,然后,“自下而上”地开发和调试各个模块,最后实现模块联调和整个系统的联调。 think58.com
[资料来源:http://THINK58.com]

② 工作文件的标准化与文档化。即每一阶段、每一步骤都有详细的文档记录,并有完整的管理制度。
③ 强调面向用户的观点。即将用户的参与程度和满意与否作为系统开发能否成功的关键。
④ 结构化开发方法在大多数情况下是信息系统工程开发的有效方法。它首先用结构化分析(SA)对软件进行需求分析,然后用结构化设计(SD)方法进行总体设计,最后是结构化编程(SP)。
结构化方法又可以分为自顶向下和自底向上底开发方法。两者结合是实际开发过程中常用的方法。
结构化方法的主要原则是:
① 用户参与的原则;
②“先逻辑,后物理”的原则
③“自顶向下”的原则;
④ 工作成果描述标准化的原则。
⑶ 总体设计
公司库存管理信息系统功能设计目标如下:
① 实用性强:符合实际操作流程的习惯,易学易用的友好的用户界面,适合各层次工作人员的使用需求,实现计算机与多年积累起来的经验相结合科学化管理;
② 先进的程序结构:使用当代前卫的软件编程,能延长其生命周期,易于维护与管理;
③ 安全可靠性高:登录密码口令,实现系统的可靠性;
④ 使用模块化设计的方法:使系统具有良好的可扩充性,以适应其不同阶段的发展需要;
⑤ 操作简单,维护方便:每个系统都具有系统维护功能,对可变化的项目可自行维护; copyright think58 [资料来源:THINK58.com]
⑥打印功能强大:可以对当次产品入库信息、当次产品出库信息打印而且还可查询检索到哪一日入库及出库信息的打印。 本文来自think58 [资料来源:www.THINK58.com]

4系统功能模块设计
4.1公司库存管理功能模块设计目标
⑴ 实用性强:符合实际操作流程的习惯,易学易用的友好的用户界面,适合各层次工作人员的使用需求,实现计算机与多年积累起来的经验相结合科学化管理;
⑵ 先进的程序结构:使用当代前卫的软件编程,能延长其生命周期,易于维护与管理;
⑶ 安全可靠性高:登录密码口令,实现系统的可靠性;
⑷ 使用模块化设计的方法:使系统具有良好的可扩充性,以适应其不同阶段的发展需要;
⑸ 操作简单,维护方便:每个系统都具有系统维护功能,对可变化的项目可自行维护;
⑹ 查询功能强大:可以对文件按日期、部门、文件名和文件的编号等方式查询,使管理人员能及时准确地掌握公司库存的基本情况。
4.2公司库存管理信息系统功能模块划分
根据需求分析与系统功能设计目标,结合实际情况本系统功能模块设计分为如下几个模块:
①基础信息管理模块
②日常业务管理模块
③查询统计模块
④系统管理模块 think58好,好think58 [资料来源:http://www.THINK58.com]

系统简介
库存管理系统是针对企业库存的商品货物的经常出入库和查询统计等方面工作而开发的管理软件。库存管理系统是用于完成众多库存管理业务所面临的日常工作。
根据用户的要求,实现库存的商品管理、出入库管理、查询管理及用户管理等功能。用户通过相应的模块,对库存里的商品的基本情况进行更新、删除和查询,对商品的出库和入库进行管理,对出入库明细进行查询,对使用该系统的用户进行更新、删除和查询,对库存数量进行查询,用户通过简单的操作即可轻松的管理库存。
库存管理系统开发的总体任务是实现企业物资设备管理的系统化、规范化和自动化,从而达到提高库存管理效率的目的。
    简洁一致,操作便利
    图形化界面,完备的物资管理功能
    表格中的文字实时显示
    本系统基于好用、易用、美观的原则设计了统一的人机界面
    表格中的文字实时显示。
    Visual C++6.0提供了多种多样的数据库访问技术—ODBC API、MFC ODBC、DAO、OLE DB、ADO等。它们提供了简单、灵活、访问速度快、可扩展性强的开发技术。

copyright think58 [资料来源:http://www.THINK58.com]


本软件针对企业物资供应管理业务范围及工作特点,设计了设备代码、设备入库、出库、还库、入库信息、出库信息、还库信息、设备需求、查看日志、修改密码等几个模块,这几个子模块包括了企业管理的主要业务,可以全面实现对物资的采购、出库、还库、统计和流通等业务的计算机管理,应用本系统可以在计算机上灵活、方便地管理库存物资,从而大大的提高了处理效率,使管理更加现代化。本系统是根据实际情况和具体内容,按一定的要求、科学、合理进行系统分析,设计,具体包括、数据输入、、删除、修改等各种设计。从而使本系统完全能满足经济性、灵活性、系统性及可靠性的要求。系统考虑到设计与用户两方面,使其尽量具有好的兼容性,速度快,功能强的特点,可让程序运行相对变得简单而方便,可以简便地运行正确操作。
5数据库设计
5.1数据库设计概述
Microsoft Developer Studio为大多数标准的数据库格式提供了32位ODBC驱动器。这些标准数据格式包括有:SQL Server、Access、Paradox、dBase、FoxPro、Excel、Oracle以及Microsoft Text。如果用户希望使用其他数据格式,则需要安装相应的ODBC驱动器及DBMS。 copyright think58
[版权所有:http://think58.com]

  用户使用自己的DBMS数据库管理功能生成新的数据库模式后,就可以使用ODBC来登录数据源。对用户的应用程序来说,只要安装有驱动程序,就能注册很多不同的数据库。登录数据库的具体操作参见有关ODBC的联机帮助。

copyright think58

[资料来源:www.THINK58.com]

[资料来源:http://think58.com]

  一、MFC提供的ODBC数据库类 think58.com [资料来源:THINK58.com]

  Visual C++的MFC基类库定义了几个数据库类。在利用ODBC编程时,经常要使用到 CDatabase(数据库类)、CRecordSet(记录集类)和CRecordView(可视记录集类)。 think58 [版权所有:http://think58.com]

  CDatabase类对象提供了对数据源的连接,通过它可以对数据源进行操作。 think58好,好think58

[版权所有:http://think58.com]

  CRecordSet类对象提供了从数据源中提取出的记录集。CRecordSet对象通常用于两种形式:动态行集(dynasets)和快照集(snapshots)。动态行集能与其他用户所做的更改保持同步,快照集则是数据的一个静态视图。每种形式在记录集被打开时都提供一组记录,所不同的是,当在一个动态行集里滚动到一条记录时,由其他用户或应用程序中的其他记录集对该记录所做的更改会相应地显示出来。

内容来自think58

[版权所有:http://think58.com]

[版权所有:http://think58.com]

  CRecordView类对象能以控件的形式显示数据库记录,这个视图是直接连到一个CRecordSet对象的表视图。 think58好,好think58 [资料来源:http://THINK58.com]

  二、应用ODBC编程

copyright think58 [资料来源:www.THINK58.com]

[来源:http://think58.com]

  应用Visual C++的AppWizard可以自动生成一个ODBC应用程序框架,步骤是:打开File菜单的New选项,选取Projects,填入工程名,选择MFC AppWizard (exe),然后按AppWizard的提示进行操作。 [资料来源:THINK58.com]

  当AppWizard询问是否包含数据库支持时,如果想读写数据库,那么选定Database view with file support;如果想访问数据库的信息而不想写回所做的改变,那么选定Database view without file support。 本文来自think58

[版权所有:http://think58.com]

  选好数据库支持之后,Database Source 按钮会被激活,选中它去调用Data Options对话框。在Database Options对话框中会显示出已向ODBC注册的数据库资源,选定所要操作的数据库,如:Super_ES,单击OK后出现Select Database Tables对话框,其中列举了选中的数据库包含的全部表;选择要操作的表后,单击OK。在选定了数据库和数据表之后,就可以按照惯例继续进行AppWizard操作。

[版权所有:http://think58.com]

  特别需要指出的是:在生成的应用程序框架View类(如:CSuper_ESView)中,包含一个指向CSuper_ESSet对象的指针m_pSet,该指针由AppWizard建立,目的是在视表单和记录集之间建立联系,使得记录集中的查询结果能够很容易地在视表单上显示出来。 [来源:http://think58.com]

  要使程序与数据源建立联系,需用CDateBase::OpenEx()或CDatabase::Open()函数来进行初始化。数据库对象必须在使用它构造记录集对象之前初始化。
三、实例

think58好,好think58

[版权所有:http://think58.com]

[版权所有:http://think58.com]

  1.查询记录 内容来自think58

[来源:http://www.think58.com]

  查询记录使用CRecordSet::Open()和CRecordSet::Requery()成员函数。在使用CRecordSet类对象之前,必须使用CRecordSet::Open()函数来获得有效的记录集。一旦已经使用过CRecordSet::Open()函数,再次查询时就可以应用CRecordSet::Requery()函数。 think58.com

[资料来源:http://THINK58.com]

  在调用CRecordSet::Open()函数时,如果将一个已经打开的CDatabase对象指针传给CRecordSet类对象的m_pDatabase成员变量,则使用该数据库对象建立ODBC连接;否则如果m_pDatabase为空指针,就新建一个CDatabase类对象,并使其与缺省的数据源相连,然后进行CRecordSet类对象的初始化。缺省数据源由GetDefaultConnect()函数获得。也可以提供所需要的SQL语句,并以它来调用CRecordSet::Open()函数,例如:Super_ESSet.Open(AFX_DATABASE_USE_DEFAULT,strSQL); think58.com

[资料来源:http://THINK58.com]

  如果没有指定参数,程序则使用缺省的SQL语句,即对在GetDefaultSQL()函数中指定的SQL语句进行操作: copyright think58 [来源:http://think58.com]

  CString CSuper_ESSet::GetDefaultSQL()
  {return _T(″[BsicData],[MinSize]″);} 内容来自think58 [资料来源:http://www.THINK58.com]

  对于GetDefaultSQL()函数返回的表名,对应的缺省操作是SELECT语句,即: think58 [资料来源:http://think58.com]

  SELECT *FROM BasicData,MainSize 内容来自think58 [来源:http://think58.com]

  在查询过程中,也可以利用CRecordSet的成员变量m_strFilter和m_strSort来执行条件查询和结果排序。m_strFilter为过滤字符串,存放着SQL语句中WHERE后的条件串;m_strSort为排序字符串,存放着SQL语句中ORDER BY后的字符串。如:

think58好,好think58 [资料来源:http://www.THINK58.com]

[版权所有:http://think58.com]

  Super_ESSet.m_strFilter=″TYPE=‘电动机’″;
  Super_ESSet.m_strSort=″VOLTAGE″;
  Super_ESSet.Requery(); think58.com [资料来源:http://THINK58.com]

  对应的SQL语句为:

本文来自think58 [资料来源:http://www.THINK58.com]

[来源:http://www.think58.com]

  SELECT *FROM BasicData,MainSize
  WHERE TYPE=‘电动机’
  ORDER BY VOLTAGE think58 [资料来源:http://www.THINK58.com]

  除了直接赋值给m_strFilter以外,还可以使用参数化。利用参数化可以更直观、更方便地完成条件查询任务。使用参数化的步骤如下:

[来源:http://www.think58.com]

  S声明参变量: [资料来源:www.THINK58.com]

  CString p1;
  float p2; think58好,好think58

[来源:http://www.think58.com]

  S在构造函数中初始化参变量:

copyright think58

[资料来源:www.THINK58.com]

[资料来源:http://www.THINK58.com]

  p1=_T(″″);
  p2=0.0f;
  m_nParams=2;

think58 [资料来源:http://THINK58.com]

[版权所有:http://think58.com]

  S将参变量与对应列绑定: [资料来源:http://think58.com]

  pFX->SetFieldType(CFieldExchange::param)

think58好,好think58

[资料来源:http://THINK58.com]

[资料来源:http://think58.com]

  RFX_Text(pFX,_T(″P1″),p1);
  RFX_Single(pFX,_T(″P2″),p2); think58.com [来源:http://think58.com]

  完成以上步骤后就可以利用参变量进行条件查询:

[来源:http://www.think58.com]

  m_pSet->m_strFilter=″TYPE=? AND VOLTAGE=?″;m_pSet->p1=″电动机″;
  m_pSet->p2=60.0;
  m_pSet->Requery();

[版权所有:http://think58.com]

  参变量的值按绑定的顺序替换查询字串中的“?”通配符。 copyright think58 [来源:http://www.think58.com]

  如果查询的结果是多条记录,可以用CRecordSet类的函数Move()、MoveNext()、MovePrev()、MoveFirst()和MoveLast()来移动光标。 本文来自think58

[资料来源:www.THINK58.com]

  2.增加记录

内容来自think58

[资料来源:http://www.THINK58.com]

[来源:http://think58.com]

  增加记录使用AddNew()函数,要求数据库必须是以允许增加的方式打开:

think58

[资料来源:http://www.THINK58.com]

[资料来源:http://think58.com]

  m_pSet->AddNew(); //在表的末尾增加新记录
  m_pSet->SetFieldNull(&(m_pSet->m_type), FALSE);
  m_pSet->m_type=″电动机″;
  ……
  //输入新的字段值
  m_pSet->update();
  //将新记录存入数据库
  m_pSet->Requery();
  //重建记录集

[来源:http://www.think58.com]

  3.删除记录 内容来自think58

[资料来源:www.THINK58.com]

  可以直接使用delete()函数来删除记录,并且在调用delete()函数之后不需调用update()函数:

[来源:http://www.think58.com]

  m_pSet->delete();
  if (!m_pSet->IsEOF())
  m_pSet->MoveNext();
  else
  m_pSet->MoveLast();

[版权所有:http://think58.com]

  4.修改记录

copyright think58 [来源:http://think58.com]

[来源:http://www.think58.com]

  修改记录使用Edit()函数:

内容来自think58

[资料来源:http://THINK58.com]

[资料来源:http://THINK58.com]

  m_pSet->Edit();
  //修改当前记录
  m_pSet->m_type=″发电机″;
  //修改当前记录字段值
   ……
  m_pSet->update(); //将修改结果存入数据库
  m_pSet->Requery(); copyright think58

[资料来源:http://think58.com]

参考文献
1、编著:胡峪 刘静. VC++高级编程技巧与示例. 西安电子科技大学出版社
2、VC++ 深入详解 孙鑫等编著 电子工业出版社
3、编著:袁玫 林志英 刘劲松. 网络数据库应用教程 人民邮电出版社.

内容来自think58 [来源:http://think58.com]

[来源:http://www.think58.com]