毕业设计-小型超市进存销管理系统论文.doc_第1页
毕业设计-小型超市进存销管理系统论文.doc_第2页
毕业设计-小型超市进存销管理系统论文.doc_第3页
毕业设计-小型超市进存销管理系统论文.doc_第4页
毕业设计-小型超市进存销管理系统论文.doc_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

基于基于 delphidelphi 的小型超市进存销管理系统的小型超市进存销管理系统 摘摘 要要 在市场经济中,销售是企业运作的重要环节,为了更好地推动销售,不少 企业建立分公司代理,通过分公司或代理把产品推向最终用户。这些分公司或 代理商大多分布在全国各地,甚至是在国外,远距离频繁的业务信息交流构成 了这些企业业务活动的主要特点。在传统方式上,公司之间通常采用电传、电 报、电话等方式传递发货、到货、压货、换货、退货等信息,并且对进货、销 售、库存等信息进行手工存档,工作效率极其低下。 本毕业设计针对传统的进存销系统的一些弊端,根据进存销系统的基本流程, 实现了一个小型超市的进存销管理系统。本系统主要包含有资料管理、进货管 理、销售管理、库存查询、系统管理、历史查询、账目查询等进存销管理的基 本功能。其中,资料管理包括有商品资料、供货商资料、客户资料的添加、删 除、修改、查询等操作。本系统采用 c/s 模式,由 delphi 7.0 开发,数据库 设计使用 ms sql server2000。 关键词关键词:c/s 模式;delphi;sql server 2000;进存销管理系统 the stocking selling and storing management system of small supermarket based on delphi abstract salesmanship is an important part of operation of enterprises in the market economy. in order to promote the sales of the produces, many enterprises establish the agencies of branch, push products to the terminal customers through these agencies. many agencies or branches are distributed all over the country, even abroad, so that the main feature of these business activities is remote frequent exchange of operational information. in the traditional way, the company usually exchange messages about the transmission, arrival, storage, change, return of goods by telex, telegraph, telephone and store the data of purchase, sale, storage by manual. the working efficiency is extremely low. according to the basic process of the stocking selling and storing management , the author realized a stocking selling and storing management system of small supermarket. the basic functions of this system include data management, inventory management, sales management, storage inquiry, system management, history inquiry, account inquiry. the data management which include add, delete, modify and inquire the data about goods, data about supplier and data about customer. the system uses c/s model and has been developed by delphi 7.0. database design use sql server 2000. key words: c/s model; delphi; sql server 2000; stocking selling and storing 目目 录录 1 引言 1 1.1 课题背景与开发目的1 1.2 开发环境1 1.3 硬件需求1 系统总体设计2 2.1 功能概述2 2.2 数据库设计3 2.2.1 数据库概念模型3 2.2.2 数据库各表设计4 2.2.3 进货单与销售单存储过程7 3 超市进存销系统的实现8 3.1 用户登录8 3.2 进存销系统主界面 8 3.3 资料管理9 3.4 进货管理.10 3.5 销售管理.13 3.6 库存管理.14 3.7 系统管理.14 3.8 历史查询.18 3.9 帐目查询.19 结 论.22 参考文献.22 致 谢.23 声 明.24 1 1 引言引言 1.11.1 课题背景与开发目的课题背景与开发目的 电子商务的发展和市场竞争的加剧将企业推上了风口浪尖,中小企业除了 积极迎接挑战之外,别无选择,网络的兴起与电子商务的发展带来了时空界限 的突破、贸易方式的变革和经济活动的革命,从某种意义上讲,这些变化为中 小企业创造了与大型企业、国外企业平等竞争的有利条件。然而,管理水平的 差异会弱化这种平等的实际意义。具体而言,中小企业在进、存、销等环节的 管理上都存在着一定程度的不足,而这些不足无疑将使其在市场竞争中陷入被 动的境地。在网络经济的时代背景下,进行有效的进存销管理已经成为中小企 业存身立业的头等要事。然而对于一贯疏于管理的中小企业而言,实现有效的 进存销管理必然存在着一定的难度,因此必须借助现代化的管理方法和管理技 术计算机进存销管理系统。 超市最主要的任务是商品进货存货及销售管理,即商品进存销管理,由于 商品种类繁多且数据量大,传统手工操作任务繁重、工作效率低下,不适应现 代化信息社会发展需要,所以急需使用商品进存销管理软件进行现代化管理: 超市运作中批发及零售企业基本上都属于中小型规模、而且单位数量特别多, 因此商品进销存管理软件有很大的需求市场。本文作者选择 delphi 来开发一个 小型超市的进存销管理系统,得到快速完美的开发效果。本文对商业进销存管 理系统进行系统分析,给出了管理系统用到的数据结构及开发过程中的关键技 术。 本系统采用 c/s 模式设计,把超市工作人员从繁杂的数据管理以及处理中 解放出来,避免了手工数据统计的种种弊端,大大地提高了工作效率。将超市进 存销的各种信息存储于数据库中,再通过前台友好的用户界面来对数据库中的 数据进行插入、删除、修改与更新等操作,由于本系统设计的界面友好,操作 方便,用户能轻而易举地学会使用,有利于企业创造更大的经济效益。 1.21.2 开发环境开发环境 delphi 是 inprise 公司的可视化软件开发工具,是目前创建 windows 应用 程序最强大的开发工具之一,它具有 c+的强大功能和 visual basic 的易用性, delphi 具有友好的开发环境、真正面向对象的程序设置、组件化的编程方式、 快速 pascal 编译器,是软件开发人员不可多得的好工具。 本系统是在 windows xp 操作系统下,使用 borland delphi 7.0 作为开发 工具,数据库使用的是 sql server 2000 开发。 1.31.3 硬件需求硬件需求 在运行本系统前,请检查一下计算机是否满足以下要求: 1.服务器要求的配置为: (1) cpu:intel 赛扬以上,建议 intel pentium以上 (2) 内存:128m 以上,建议 256m 以上 (3) 硬盘:1g 以上的可用硬盘安装空间 (4) microsoft sql server 7.0 以上 2.客户机硬件配置要求为: (1) cpu:intel 赛扬 以上,建议 intel pentium 以上 (2) 内存:128m 以上,建议 256m 以上 系统总体设计系统总体设计 2.12.1 功能概述功能概述 根据进存销管理系统的逻辑划分,本系统一共分为七个功能,分别是资料 维护、进货管理、销售管理、库存查询、系统管理、历史查询、帐目查询。其 功能结构图如图 2-1 所示。 超市进存销管理系统 资 料 维 护 进 货 管 理 销 售 管 理 库 存 查 询 系 统 管 理 帐 目 查 询 历 史 查 询 权 限 设 置 用 户 管 理 图 2-1 系统功能结构图 (1) 资料管理 主要包括商品资料、供货商资料和客户资料的维护,可以进行添加、删除、 修改与查询等一系列操作。商品资料、供货商资料、客户资料是进销存管理系 统基本资料。 (2) 进货管理 主要功能是进货的过程中,对数据库数据进行实时更新,入库的时候,将 供货商、商品等基本信息读入数据库的表格中,主要是读入进货单历史和进货 单明细历史中;对库存库中对应的商品信息,诸如,库存数量、仓库、库存金 额等数据进行更新操作;对应于进货单中供货商,产生应付款金额;同时打印 进货单。 (3) 销售管理 主要功能是销售的过程中,对数据库中的数据进行实时更新,出库的时候, 将客户、商品等基本信息读入数据库表格中,主要是读入销售单历史和销售单 明细历史中;对库存库中对应的商品信息进行修改,主要是减去销售的商品数 量;对应于销售单中的客户,产生应收款金额;同时打印销售单。 (4) 库存查询 主要功能是对库存库中的商品信息进行查询,输入货号、商品拼音或是仓 库,便可以方便快捷地查询到库存库中对应的商品信息。 (5) 系统管理 系统管理中包含系统用户的权限修改功能,同时还包含有只有管理员 admin 才拥有的用户管理功能,包括对用户信息的添加、删除、修改等操作, 同时考虑到安全问题,本系统对用户对应的密码进行了 md5 加密处理。 (6) 历史查询 主要功能是对进货单历史、进货单明细历史、销售单历史、销售单明细历 中的数据进行查询操作。 (7) 帐目查询 主要功能是对进货过程中产生的应付款及销售过程中产生的应收款进行操 作,输入对应的供货商号或客户编号就能查询到对应的应付款或应收款金额汇 总,结算后,将对应的记录从应付款或应收款表中删除,同时对已付款或已收 款中的数据进行更新。 2.22.2 数据库设计数据库设计 .1 数据库概念模型数据库概念模型 数据库主要涉及到三个实体:商品、供货商、客户。进货时,一张进货单 对应一个供货商,可以向供货商进多种货物。销售时,一张销售单对应一个客 户,可以向客户销售多种商品。因此,一个商品可以向多个供货商进货,也可 以销售给多个客户,只是对应着不同的进货单或销售单。 e-r(eneity-relationship approach)图是最常用的概念模型表示方法, 也是数据库的核心和基础,它是按用户的观点来对数据和信息建模,依据概念 模型设计应具的特点:真实性、易理解性、易修改性、易转换性。下面画出商 品、供货商、客户三个之间的实体关系图(e-r 图): 商 品 货号 条码 拼音编码 销售 进货 供货商 客户 客户编号 名 称 名 称 拼音编码 拼音编码 供货商号 n m pq 图 2-2 商品、供货商和客户 e-r 图 .2 数据库各表设计数据库各表设计 对于本超市进存销系统所用到的数据库表有: 供货商清单:保存关于供货商的资料信息,如供货商号、名称等。 商品清单:保存超市所经营商品的资料信息,如货号、品名、进货价和销 售价等。 客户清单:保存超市客户的资料信息。 库存库:保存超市商品库存的数量、金额等信息。 应付款:保存进货过程中产生的应付款信息。 应收款:保存销售过程中产生的应收款信息。 权限清单:保存本系统所有使用者的权限信息。 用户清单:保存本系统所有使用者的信息。 进货单:进货单主表,保存一次进货中的所有商品的概括信息。 进货单历史:保存进货单历史。 进货单明细:进货单从表,保存每一商品的进货信息,如进价、税额和仓 库等。 进货单明细历史:保存进货单明细历史。 销售单:销售单主表,保存一次销售中的所有商品的概括信息。 销售单历史:保存销售单历史。 销售单明细:销售单从表,保存每一商品的销售信息,如销售数量和销售 价等。 销售单明细历史:保存销售单明细历史。 仓库清单:保存超市的仓库信息,可以用于生成数据字典。 已收款:保存超市结算“应收款”的情况。 已付款:保存超市结算“应付款”的情况。 下面给出几个主要表的具体信息: 表 2-1 供货商清单 字段名数据类型长度是否允许为空字段描述 供货商号char10否主键 拼音编码char40否以便查询 名称varchar80是 地址varchar80是 邮编char6是 传真varchar20是 电话varchar20是 电报varchar20是 银行帐号varchar20是 库房地址varchar40是 库房电话varchar20是 表 2-2 库存库 字段名数据类型长度是否允许为空字段描述 货号char14否商品货号 仓库varchar20否 库存数量decimal(28,6)否 库存金额decimal(28,6)否 库存单价decimal(28,6)否 最新进价decimal(28,6)是 表 2-3 应付款 字段名数据类型长度是否允许为空字段描述 编号char14否主键 进货单号char14是外键 货号char14否外键 供货商号char10否外键 数量decimal(28,6)否 进货单价decimal(28,6)是 金额decimal(28,6)是 进货日期datetime8是 状态char6是应付 表 2-4 权限清单 字段名数据类型长度是否允许为空字段描述 权限序号int4否自增字段 用户编号char6是外键 部门char20是 权限名称char30否 表 2-5 用户清单 字段名数据类型长度是否允许为空字段描述 用户编号char20否主键 部门char20是 姓名char10否 性别char2是 密码varchar32否md5 加密 表 2-6 进货单 字段名数据类型长度是否允许为空字段描述 编号char14否主键 供货商号char10否外键 进货日期datetime8是 业务员char10是 制单人char10是 税价合计decimal(28,6)是 不含税价decimal(28,6)是 税额decimal(28,6)是 表 2-7 进货单明细 字段名数据类型长度是否允许为空字段描述 编号char14否主键 进货单号char14否外键 货号char14否外键 进货数量decimal(28,6)否 进价decimal(28,6)是 税价合计decimal(28,6)是 税率decimal(28,6)是 不含税价decimal(28,6)是 税额decimal(28,6)是 仓库char20是 表 2-8 已付款 字段名数据类型长度是否允许为空字段描述 供货商号char10否主键 供货商名称varchar80是 已付金额decimal(28,6)否 最近结算datetime8是 最近的结算日期 以上便是数据库中的主要表单,商品清单、客户清单与表 2-1(供货商清单)类 似,应收款与表 2-3(应付款)类似,销售单与进货单的对应表单类似,已收 款与表 2-10(已付款)类似。 .3 进货单与销售单存储过程进货单与销售单存储过程 数据库中还设计了两个存储过程,分别是 sf_进货单和 sf_销售单,分别用 于进货和销售时,对数据库中各表的数据更新操作。 进货的时候,库存库中的仓库和货号要与进货单明细中的仓库和货号相匹 配,若不匹配,证明是新的记录,进货单明细中所对应的货号与仓库记录添加 到库存库中,若匹配,证明同一商品入的是同一仓库,便将库存库中的库存数 量累加新入库的数量;将进货单明细中所对应的供货商号、税价合计、进货数 量、货号等信息插入到应付款中,以产生应付款金额;将进货单和进货单明细 中的记录添加到对应的历史表格中;清除进货单和进货单明细表格。 销售的时候,将销售单明细中销售的对应货号数量从库存库对应的记录中 减去;将销售单明细中对应的客户编号、销售价、金额等信息插入到应收款中, 以产生应收款金额;将销售单和销售单明细中的记录添加于应的历史表格中; 清除销售单和销售单明细表格中的记录。 3 3 超市进存销系统的实现超市进存销系统的实现 3.13.1 用户登录用户登录 用户登录是一个系统安全性能的重要体现,本系统用到的所有密码均通过 md5 加密。登录界面上放置了一个 adoquery1 控件,并设置它的 connetionstring 属性指向的数据库 my_jxc,用以完成数据库的连接。登录过程 是:首先在用户清单中查找输入的用户名和密码所对应的用户编号。若没有找 到,说明输入的用户名或密码有误,并给出提示。若找到这样的用户编号,说 明是合法用户,再在权限清单中,查找对应的权限,找到什么权限,便将对应 的功能按钮所对应的 enabled 值置为 true。特别指出,在用户清单中查找用户 名和密码所对应的用户编号的时候,由于界面上输入的是明文,而用户清单中 的密码字段是 32 位的密文,且 md5 是单向加密的密码算法,所以在查找之前, 先引用 md5 单元,再调用 md5string( )函数对密码框中的明文进行加密,再用 md5print( )函数将加密后的密文显示出来,赋值给 encrypt_num 变量,实际在 用户清单中找查密码是以密文为准,而非输入的明文,其查找用户编号主要代 码如下: /保存用户输入的帐号和密码 user:=edit1.text; pass:=edit2.text; encrypt_num:=md5.md5print(md5string(pass);/加密明文 /将原来的 sql 语句清除后再添加新的 sql 语句 adoquery1.sql.text:=select 用户编号 from 用户清单 where 姓名= +user+and 密码=+encrypt_num+; temp:=adoquery1.fieldbyname(用户编号).asstring; 之后便以用户编号和权限名称在权限清单中查找对应的权限序号,若找到 对应的权限序号,说明该用户拥有该权限,若没有找到权限序号,说明该用户 没有该权限,找到什么权限,便将 manage 和 info 窗体上对应的按钮 enabled 值置为 true。 3.23.2 进存销系统主界面进存销系统主界面 超市进销存系统主界面上放置七个按钮,分别对应七个功能模块:资料管 理、进货管理、销售管理、库存管理、系统管理、历史查询、帐目查询。点击 对应的按钮,便跳转到对应的功能窗体上。 图 3-1 系统主界面 在主界面的左下方会显示当前登录的用户名字。因为当前登录的用户为系 统管理员 admin,所以图 3-1 中显示的登录用户名为 ad。 3.33.3 资料管理资料管理 资料管理窗体上放置的几个主要控件是 dbnavigator1 控件、dbgrid1 控件、 adoquery1 控件和 datasource1 控件。首先是设置 adoquery1 的 connection string 属性指向 my_jxc,再设置 datasource1 的 dataset 属性为 adoquery1, 设置 dbnavigator1 和 dbgrid1 的 datasource 属性为 datasource1,资料管理 分为商品资料维护、供货商资料维护和客户资料维护,以 dbnavigator1 来控制 删除、插入或修改等功能。分别点击 mainmenu 菜单上不同的菜单项,来更新数 据集,以显示不同表格中的数据。例如,点击了商品资料维护,便在 adoquery1 的 sql 中添加这样的语句: adoquery1.sql.text:=select * from 商品清单; 使 dbgrid1 显示出由数据集返回的结果,同时 dbnavigator1 控制的商品清 单中的数据。同理,点击了供货商资料维护或是客户资料维护菜单时,便向 adoquery1 的 sql 中添加新的 sql 语句,以使控制不同的数据集。 同时,窗体上还能对商品资料、供货商资料、客户资料进行查询,输入对 应的拼音编码部分或全部便能进行查询。查询按钮所响应的事件:首先是根据 label1 的 caption 内容来判断是对那一张表格进行操作的,而 label1.caption 是由点击 mainmenu 上不同的菜单项而改变的。例如,点击了 mainmenu 上的商 品资料维护,label1.caption 便为“商品拼音” ,点击了“查询”按钮时,先 判断 label1.caption=商品拼音,于是对商品清单进行查询。 同时,dbgrid1 还有一个鼠标双击的响应事件,因为在进货管理或销售管 理时,选择供货商、商品或是客户信息时,需要跳转到资料管理窗体上,双击 dbgrid1 上的记录,以把数据传递到进货单或销售单窗体上。这样也大大地提 高了系统使用的方便性,简单易用的图形化操作界面,使用户能更方便快捷学 会使用。这部分代码将在进货管理和销售管是部分详细阐述。 3.43.4 进货管理进货管理 这部分实现对进货单的管理,主要提供保存进货单、显示进货单报表和打 印进货单并记帐的功能。进货单 input 窗体上,放置 adoquery1 和 adocommand1 控件,并且设置它们的 connectionstring 属性指向 my_jxc,以完 成数据库的连接。进货日期默认为当前系统日期,制单人为前当登录用户,在 下拉菜单中选择业务员,这几项都可以为空,但为了使数据更加详尽,最好不 要为空。进货单窗体如图所示: 图 3-2 进货单窗体 首先选择供货商,鼠标点击 combobox2 时,对应的 dropdown 事件响应,跳 转到资料管理中去,同时将 input 窗体置为不可用。 然后在 info 窗体中,dbgrid1 的双击事件响应,判断 input.enabled=false 且 label1.caption=供货商拼音,于是执行相应代码, 设置了两个 string 类型的变量:num,name,分别接收 dbgrid1.fields0和 dbgrid1.fields2中的内容,传递给 input 窗体上的 combobox2.text 和 edit3.text。将供货商号和供货商名称返回到进货单窗体上,以此完成了供货 商的选择。其代码如下: if (input.enabled=false)and(label1.caption=供货商拼音) then begin /将供货商的标号和名称传回进货单窗体 num:=dbgrid1.fields0.asstring; name:=dbgrid1.fields2.asstring; input.combobox2.text:=num; input.edit3.text:=name; /成功后返回进货单 input.enabled:=true; info.close; manage.hide; end; 接着,选择需要进货的商品。在 stringgrid1 中双击单元格,以跳转到资 料管理的窗体上。在 dbgrid1 的双击事件里响应,判断 input.enabled 属性为 false 且 label1.caption=商品拼音,双击对应纪录,将商品清单中的货号、 品名和销售价 1 的信息传递到进货单窗体中,代码如下: if (input.enabled=false)and(label1.caption=商品拼音) then begin /将货号和商品名称传回进货单窗体 num:=dbgrid1.fields0.asstring; name:=dbgrid1.fields3.asstring; price:=dbgrid1.fields7.asstring; if input.currentrow=0 then input.currentrow:=1; input.stringgrid1.cells1,input.currentrow:=num; input.stringgrid1.cells2,input.currentrow:=name; input.stringgrid1.cells6,input.currentrow:=price; /成功后返回进货单 input.enabled:=true; info.close; manage.hide; end; 特别指出,num,name,price 分别对应着货号、品名和价格。cells 1,input.currentrow指的是 stringgrid1 中当前行第 1 列所对应的单元格。 在 forminput 单元文件中的接口部分的 public 处声明了 currentrow 和 currentcol 两个整型变量,在 implementation 部分中,由 stringgrid1 selectcell 事件激发,以 currentrow 和 currentcol 来接收 arow 和 acol 两个 变量。这样便达到了,在 input 窗体上激发的变量,被两个 public 变量接收, 可以被 info 窗体引用的目的。 在商品入库之前,要对所进商品进货到哪个仓库进行选择。添加仓库的下 拉菜单与添加业务员的过程相似,只有当选择了商品信息且点击了“仓库”所 对应的列,才能进行仓库选择。另外,当点击某条记录的“金额”单元格时, 自动算出对应进货记录的金额、税价与税价合计。 点击“保存进货单”按钮时,将把进货信息插入到进货单和进货单明细两 个表格中去,进货单中的一条记录保存的是一次进货中向某个供货商所有进货 商品的总税价合计 、 总不含税额和总税额 ;进货单明细则保存的是向 某个供货商进货的每一商品所对应的税价合计,不含税价和税额等信息。首先 是编号的插入,如果是插入的第一条记录,编号为00000,如果不是插入第一 条记录,则分别是从进货单历史和进货单明细历史中查找出最大编号,将其加 1,再插入到进货单和进货单明细表格中。例如进货单记录的插入过程: 获取最大编号: adoquery1.sql.add(select max(编号) 最大编号 from 进货单历史); maxnum:=adoquery1.fieldbyname(最大编号).asstring; 如果是第一条记录,插入编号00000: if (maxnum=)or(maxnum= ) then temp:=00000 向进货单中插入对应记录: adocommand1.commandtext:=insert into 进货单(编号,供货商号, 进货日期,业务员,制单人,税价合计,不含税价,税额) values (+inputnum+,+combobox2.text+,+edit1.text+,+combo box1.text+,+edit2.text+,+edit4.text+,+edit5.text+ ,+edit6.text+); adocommand1.execute; 然后点击“显示进货单报表” ,是对进货单报表进行预览。点击“打印进货 单并记帐” ,便可将进货单报表打印成(.mdi)格式的文档,同时执行了“sf_进 货单”存储过程,以对数据库中数据进行实时地更新。 下面介绍一下,报表的制作: 本毕业设计所使用到的报表是用 quickreport 控件制作的,由于 delphi 7.0 默认情况下没有安装此控件,因此需要手动添加。在 delphi 的 packages 里, 点击“add”按钮,找到安装目录下borlanddelphi7bindclqrt70.bpl 添加 quickreport 控件组。 进货单报表 report 上,放置 quickrep1 控件、adoquery1 控件、若干 qrlabel 控件以标签文字说明,若干 qrdbtext 控件,设置其 dataset 属性为 adoquery1,datafield 属性为欲读取的字段名。qucikrep1 的 dataset 属性为 adoquery1。adoquery1 控件的 connectionstring 指向 my_jxc 数据库,以完成 数据库的连接。其 sql 属性中添加查询语句,以对数据库中数据进行查询返回 数据集以供报表上显示。 3.53.5 销售管理销售管理 销售过程与进货过程类似,这部分实现对销售的管理,提供的主要功能有 “保存销售单” 、 “打印销售单报表”和“记帐销售单” 三个功能。其界面如图 所示: 图 3-3 销售单窗体 首先需要向 combobox1 的下拉菜单上添加项目,其代码与在进货管理中添 加业务员菜单项目是一样的。 鼠标点击客户下拉框,跳转到资料管理窗体上,以选择客户。同时将 output 的 enabled 值置为 false。 然后在 info 窗体上,双击相应的记录,由 dbgrid1 的双击事件响应,通过 判断,执行相关代码,将客户编号和客户名称传递至 output 窗体上。此过程代 码与进货管理中选择供货商过程的代码类似。 至此,完成了客户选择操作。然后双击 output 中 stringgrid1 的单元格, 跳转到库存库 store 窗体上。双击库存库 store 窗体上的 stringgrid1 单元, 便将货号、仓库、销售价等信息传递至 store 窗体上。stringgrid1 的双击事 件中,首先由 adoquery2 在商品清单里查得销售价 1 字段,由 price 变量接收。 货号、品名等信息与进货单中执行的过程类似,在此不再赘述。 当点击保存销售单后,第一条记录编号为00000,如果不是第一条记录, 从销售单历史和销售单明细历史表格中把最大编号读取出来,将其加 1,再插入 到销售单和销售单明细表格中去。这个过程与进货管理中插入到进货单历史和 进货单明细历史中相类似。点击“打印销售报表”按钮,以打印出销售单对应 报表。点击“记帐销售单”按钮,执行“sf_销售单”存储过程,以更新数据库 中数据。销售报表与进货报表的制作大同小异,只是对应的数据集不同,执行 的 sql 语句当然也不同。 3.63.6 库存管理库存管理 这部分主要是提供对库存商品信息的查询,输入货号、商品拼音和仓库中 的任意一项便可对库存中商品的信息进行查询。设置 adoquery1 控件、 adoquery2 控件的 connectionstring 指向 my_jxc,以完成数据库的连接。 然后向“查询”按钮里添加事件,以使输入“货号” 、 “商品拼音” 和 “仓库”中的任意一项,便可进行查询。由于可以对商品拼音模糊查询,如果 不输入商品拼音的话,系统会将商品拼音看成一个空字符串,便得不到查询的 真实结果。所以先对其进行判断,如果为空,便不追加对应查询语句。其对应 的代码如下: adoquery1.sql.add(select 库存库.货号,商品清单.品名,商品清单.单位,库 存库.仓库,库存库.库存数量,库存库.库存单价,库存库.库存金额 from 库存库,商 品清单); adoquery1.sql.add(where 库存库.货号=商品清单.货号 and ); adoquery1.sql.add(商品清单.货号=+edit1.text+)or); if edit2.text then checkbox2.checked:=true else checkbox2.checked:=false; 另外,对于“确认修改”按钮响应的事件,首先获取用户编号,以用户姓 名在用户清单里查找对应的用户编号赋值给临时变量 username;在权限清单里 查找到最大的权限序号赋值给 maxnumber;删除该用户在权限清单里拥有的所 有权限。判断下方的 checkbox 的 checked 属性是否为 true,同时将先前查找 到的最大权限序号增加,以新的权限序号插入到权限清单里,以免跟以前的权限 序号冲突。例如对“商品资料维护”权限的修改,对应代码如下: if checkbox1.checked then begin order:=strtoint(maxnumber)+1; str:=inttostr(order); adocommand1.commandtext:=insert into 权限清单(权限序号,用户 编号,权限名称) values(+str+,+usernumber+,+ checkbox1.caption+); adocommand1.execute; end; 如果当前用户为管理员的话,会看到系统管理窗体上出现一个“用户管理” 按钮,点击它会跳转到用户管理 users 的窗体,如图所示: 图 3-5 用户管理窗体 在用户管理窗体上,可以完成对用户资料的修改,删除和添加用户的功能。 双击上方的 dbgrid 中的记录,便把对应的字段读取出来(密码字段除外),显示 在下方的若干 edit 文本框里,修改对应的记录后,点击“确认修改”按钮便完 成了用户资料的修改。特别指出,由于本系统所有用户的密码字段,均使用了 md5 加密。当提交时,如果提交的密码字段为空,默认情况下不修改密码;如 果提交的密码字段不为空,便调用 md5 单元中的 md5string()函数将密码加密 成为 32 位的密文,以 md5print()函数将加密的字段显示出来。这样很好的避 免了当提交空密码的时候,对空字符串也进行加密。 如果提交的密码字段不为空,将该字段加密后更新记录: encrypt_num:=md5.md5print(md5string(edit5.text); adocommand1.commandtext:=update 用户清单 set 用户编号=+ edit1. text+,部门=+edit2.text+,姓名=+edit3.text+,性别= + edit4.text+,密码=+encrypt_num+ where 用户编号=+ edit1. text+; 鼠标点击 dbgrid 里的某一条记录后,再点击“删除”按钮,即可将该用户 删除。 在下方的 edit 方本框中输入新添加的用户信息后,点击添加按钮,将新用 户的记录插入到用户清单里。插入之前,先做判断,如果用户清单里已经有相 同的用户编号,给出提示。同时插入新用户记录前,也对输入的密码(明文)调 用 md5 加密算法加密成为 32 位密文再插入: encrypt_num:=md5.md5print(md5string(edit5.text); adocommand1.commandtext:=insert 用户清单 values(+edit1.text +,+edit2.text+,+edit3.text+,+edit4.text+,+enc rypt_num+); 以上便是“系统管理”中的全部功能的实现过程。 3.83.8 历史查询历史查询 历史查询主要是对以往进货记录和销售纪录进行查询。主要是对进货单历 史、进货单明细历史、销售单历史或销售单明细历史进行查询。输入对应的记 录编号或拼音编码便可进行查询。历史查询窗体 history 上的 adoquery1 控件 的 connectionstring 指向 my_jxc,以此做为数据集返回结果。通过点击主菜 单上的按钮来动态的改变 adoquery1 所指向的数据集。 图 3-6 历史查询窗体 例如,点击了“进出货历史”主菜单中的“进货单历史” ,便把 adoquery1 中的 sql 查询语句指向进货单历史中,同时改变 label1 和 label2 的 caption 值以提示用户输入进货单编号或供货商拼音进行查询。 点击“查询”按钮,首先判断 label1 的 caption 值,来决定当前是对哪一 个表进行操作,输入“进货单编号”或是“供货商拼音”中的任何一项,便可进 行查询,同时“供货商拼音”可以进行模糊查询,所以在查询之前,应该先判 断,如果拼音编码输入框不为空时才追加对应的 sql 语句。 if edit2.text then adoquery1.sql.add( or 进货单号 in (select 编号 from 进货单历史 where 供货商号 in (select 供货商号 from 供货商清单 where 拼音编码 like %+edit2.text+%); 点击“销售单明细历史”,所执行的过程与之类似。 3.93.9 帐目查询帐目查询 帐目查询功能中,可以对应收款和应付款进行汇总,汇总结算后,首先将 该记录从应收款或应付款中删除,再将结算的信息添加到已付款或已收款中去。 帐目查询窗体 account 上,adoquery1、adoquery2、adocommand 控件的 connection string 属性设置为指向 my_jxc,用以连接数据库。 图 3-7 帐目查询窗体 点击上面的“未结算”主菜单中的“应付款”或“应收款”,动态的改变窗 体上 label 的 caption 值,同时将更新数据集 adoquery1 返回不同的查询结果。 例如点击了“应收款”,响应对应的执行代码: adoquery1.sql.text:=select * from 应收款; /提示用户输入客户拼音编码 label1.caption:=客户编号; label5.caption:=应收款查询; 然后,输入客户编号进行查询,将查询出来该客户未结算的帐目汇总以显 示在窗体上。如果不存在这样的客户编号,系统给出提示信息。 图 3-8 汇总结果 由 label5.caption=应收款查询判断是对应收款进行操作,在 adoquey1 的 sql 属性中添加: adoquery1.sql.text:=select * from 应收款 where 客户编号= + edit1.text+; 以数据集 adoquery1 返回查询所得结果,显示在窗体上。在 adoquery2 的 sql 属性中添加语句以汇总该用户编号所对应的应收款总金额: adoquery2.sql.text:=select total=sum(金额) from 应收款 where 客户编号=+edit1.text+; edit2.text:=adoquery2.fieldbyname(total).asstring; 汇总结束后,再点击“结算”按钮,便将汇总的帐目结算,先将帐目从应 收款中删除记录,然后对已收款中的数据进行更新,更新过程是这样的:判断 新添加的应收款记录所对应的客户编号是否在已收款中已经存在记录,如果存 在,便将对应的已收金额累加进去,并将最近结算日期更新为当前的日期。如 果不存在,说明是新的记录,直接将新的结算记录插入到已收款表格中去。 图 3-9 结算成功 删除结算记录: adocommand1.commandtext:=delete from 应收款 where 客户编号= + edit1.text+; adocommand1.execute; 以输入的客户编号在客户清单中查找到对应的客户名称,于是在数据集的 sql 属性中添加如下查询语句,以获取客户名称: adoquery2.sql.text:=select 名称 from 客户清单 where 客户编号= +edit1.text+; adoquery2.open; name:=adoquery2.fieldbyname(名称).asstring; 获取到“客户名称”后,再以客户名称查找已收款记录: adoquery2.sql.text:=select * from 已收款 where 客户名称=+ name+; 未找到该客户对应记录,说明是新记录,将新记录插入: adocommand1.commandtext:=insert into 已收款(客户编号,客户名称, 已收金额,最近结算) values(+edit1.text +,+name +, +edit2.text+,+label4.caption+); adocommand1.execute; 如果找到该用户,证明已经存在对应记录,更新相应记录: adocommand1.commandtext:=update 已收款 set 已收金额=已收金额+ +edit2.text+,最近结算=+label4.caption+ where 客户编号= + edit1.text+; adocommand1.execute; 结算成功后,可以看到最新结算的客户编号为 116 的记录已经添加到已收 款中去了。 图 3-10 已收款结果 以上便是“应收款”中进行帐目结算的全过程, “应付款”的过程与之类似。 在“已结算”菜单中包含“已付款”和“已收款”两项子菜单。提供已付款和 已收款的查询,点击“查询”按钮后,以 label5 的 caption 值判断是对哪个表 进行操作,以“客户编号”或“供货商号”在“已收款”或“已付款”中查询 相关记录并显示出来。 至此,本超市进存销管理系统的全部功能的实现过程介绍完毕。 结结 论论 通过几个月的学习和工作,完成了此小型超市进存销管理系统的设计,满 足了超市进存销的基本功能。考虑到安全性能,此系统用 md5 加密算法对密码 字段进行了加密,这样存储在数据库中的密码字段将以密文的形式出现,而登录 验证的时候,是对明文进行了 md5 加密后再进行验证,因此具有一定的安全性。 在设计之初,选择了 ado 连接,而没有选择 bde 连接,因为 bde 连接的效率虽 然高,但移植系统时,必须要将所需要的 borland 提

温馨提示

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

评论

0/150

提交评论