摘要
计算机作为一种高效能的管理工具,在现代的企业管理中发挥了极其重要的作用。进销存是当前重要的商业经营形式之一。本系统基于N/S架构,前台应用程序界面采用Eclipse开发,系统的后台数据库则是采用PHP结合MYSQL作为开发工具。采用本系统使企业通过局域网来管理业务,企业内部的经营能获得是实时,准确的管理信息。改变了以往人工管理的灵活性差,误差多,信息前后不一致等很多方面的不足,并且为企业的准确决策提供了依据.
本文首先介绍了一些理论知识,其次,比较详细地介绍了对系统的功能分析和模块设计及相关基于数据库的访问方法,将数据库技术与 PHP技术结合起来;然后,介绍系统的详细设计:包括各个模块的主要功能、使用方法和设计中的一些非常重要的代码;最后阐述了系统存在的问题和不足,以便于将来更好地进行改进。
本文的目的是通过调研、分析、设计和实施,完成的开发;通过对往来数据高效、自动的处理,运用WEB技术将系统的各个部分有机地结合在一起,实现数据共享,提高往来管理的效率。
关键字: 进销存;数据库;系统分析 ;系统设计
目录
前言----------------------------------------------------------------1
第一章 技术和平台的介绍---------------------------------------------2
1. B/S技术--------------------------------------------------------2
1.1 B/S 的历史-----------------------------------------------------2
1.2 B/S 的特点-----------------------------------------------------2
2. MYSQL技术------------------------------------------------------3
3. ECLIPSE 技术平台------------------------------------------------3
3.1 ECLIPSE的历史--------------------------------------------------3
3.2 ECLIPSE的基本概念----------------------------------------------3
第二章 系统需求分析------------------------------------------------4
1. 需求背景--------------------------------------------------------4
2. 目标分析--------------------------------------------------------6
3.用户工作流程----------------------------------------------------6
4.用户业务流程分析------------------------------------------------6
5.系统的功能结构图-------------------------------------------------7
6.系统用例图设计---------------------------------------------------7
第三章数据库设计----------------------------------------------------9
1. 系统E-R模型图---------------------------------------------------9
2. 系统数据字典----------------------------------------------------10
第四章系统设计与实现-----------------------------------------------12
1.系统设计思想-----------------------------------------------------12
2.系统设计原则-----------------------------------------------------12
3.业务流程分析-----------------------------------------------------12
4.模块功能界面设计-------------------------------------------------13
4.1 系统登录模块---------------------------------------------------13
4.2 管理菜单-------------------------------------------------------14
4.3 进出货模块-----------------------------------------------------15
4.4 库存信息查询---------------------------------------------------16
4.5 库存余量报警---------------------------------------------------17
第五章数据库分析---------------------------------------------------20
1.MYSQL简单介绍---------------------------------------------------20
结论---------------------------------------------------------------19
参考文献-----------------------------------------------------------21
附录(程序代码)---------------------------------------------------22
前言
随着中国市场经济的日趋成熟,中国企业面对的竞争压力也越来越大,企业要想生存、发展,要想在激烈的市场竞争中立于不败之地,没有现代化的管理是万万不行的,进销存系统的全面自动化则是其中极其重要的部分。为了加快企业管理自动化的步伐,提高企业的管理业务处理效率,建立企业进销存管理系统已变得十分心要。
进销存(PSS-Purchase Sale Stock)软件是一款通用性极强的商业企业进销存管理系统,软件囊括了商业企业日常经营管理的全过程。软件覆盖商业企业商品的采购、销售、库存、管理决策支持等各个环节,软件的各个模块操作界面简单,实用,让用户可以在最短的时间内掌握软件的使用方法,以及短时间内喜欢上友好的人机交互界面。初步解决了当前进销存系统的操作过程过于复杂,人机交互不友好等诸多问题。软件的采购管理、销售管理、库存管理功能强大,灵活,同时为用户提供方便实用的模糊查询功能,用户可以在最短时间内找到自己所需要的信息。软件采用模块级安全管理,系统安全性高,另外通过集中式的信息数据库,将企业进,销,存,赚等企业经营业务有机结合起来。达到数据共享,降低成本,提高效率,改进服务的目的。
系统软件采用PHP进行开发并实现,PHP语言的各种特点:灵活简单的语法、跨平台、可移植性高、效率高、完善的技术体系等等使得它在企业应用、网络的应用程序的开发等诸多领域都占据了主导的地位。因此,PHP是一项非常具有吸引力的先进的技术。
第一章 技术和平台的介绍
1. PHP技术
1.1PHP 的历史
PHP,一个嵌套的缩写名称,是英文超级文本预处理语言(PHP:Hypertext Preprocessor)的缩写。PHP 是一种HTML内嵌式的语言,PHP与微软的ASP颇有几分相似,都是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,现在被很多的网站编程人员广泛的运用。PHP 独特的语法混合了 C、Java、Perl 以及 PHP 自创新的语法。它可以比 CGI 或者 Perl 更快速的执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;与同样是嵌入HTML文档的脚本语言JavaScript相比,PHP在服务器端执行,充分利用了服务器的性能;PHP执行引擎还会将用户经常访问的PHP程序驻留在内存中,其他用户在一次访问这个程序时就不需要重新编译程序了,只要直接执行内存中的代码就可以了,这也是PHP高效率的体现之一。PHP具有非常强大的功能,所有的CGI或者JavaScript的功能PHP都能实现,而且支持几乎所有流行的数据库以及操作系统。
PHP最初是1994年Rasmus Lerdorf创建的,刚刚开始只是一个简单的用Perl语言编写的程序,用来统计他自己网站的访问者。后来又用C语言重新编写,包括可以访问数据库。在1995年以Personal Home Page Tools (PHP Tools) 开始对外发表第一个版本,Lerdorf写了一些介绍此程序的文档,并且发布了PHP1.0。在这早期的版本中,提供了访客留言本、访客计数器等简单的功能。以后越来越多的网站使用了PHP,并且强烈要且增加一些特性,比如循环语句和数组变量等等,在新的成员加入开发行列之后,在1995年中,PHP2.0发布了。第二版定名为PHP/FI(Form Interpreter)。PHP/FI加入了对mSQL的支持,从此建立了PHP在动态网页开发上的地位。到了1996年底,有15000个网站使用 PHP/FI;时间到了1997年中,使用PHP/FI的网站数字超过五万个。而在1997年中,开始了第三版的开发计划,开发小组加入了 Zeev Suraski 及 Andi Gutmans,而第三版就定名为PHP3。20##年,PHP4.0又问世了,其中增加了许多新的特性。
1.2 PHP 的特点
开放的源代码:所有的PHP源代码事实上都可以得到。
PHP是免费的。
基于服务器端:由于PHP是运行在服务器端的脚本,可以运行在UNIX、LINUX、WINDOWS下。
嵌入HTML:因为PHP可以嵌入HTML语言,所以学习起来并不困难。
简单的语言:PHP坚持脚本语言为主,与Java以C++不同。
效率高:PHP消耗相当少的系统资源。
图像处理:用PHP动态创建图像
PHP 3与PHP 4的比较
PHP3跟Apache服务器紧密结合的特性;加上它不断的更新及加入新的功能;而且几乎支持所有主流与非主流数据库;再以它能高速的执行效率,使得PHP在1999年中的使用站点已经超过了150000万。加上它的源代码完全公开,在 Open Source意识抬头的今天,它更是这方面的中流砥柱。不断地有新的函数库加入,以及不停地更新的活力,使得PHP无论在UNIX、LINUX或是Windows的平台上都可以有更多新的功能。它提供丰富的函数,使得在程序设计方面有着更好的支持。
PHP4.0整个脚本程序的核心大幅更动,让程序的执行速度,满足更快的要求。在最佳化之后的效率,已较传统CGI或者ASP等程序有更好的表现。而且还有更强的新功能、更丰富的函数库。无论您接不接受,PHP 都将在 Web CGI 的领域上,掀起巅覆性的革命。对于一位专业的Web Master 而言,它将也是必修课程之一。
PHP 4.0是更有效的,更可靠的动态Web页开发工具,在大多数情况运行比 PHP 3.0要快,其脚本描述更强大并且更复杂, 最显著的特征是速率比的增加。PHP4.0这些优异的性能是PHP 脚本引擎重新设计产生的结果:引擎由 AndiGutmans 和 Zeev Suraski从底层全面重写。PHP4.0 脚本引擎 ——Zend 引擎,使用了一种更有效的编译——执行方式, 而不是PHP 3.0 采用的执行 ——当解析时模型。
2. MYSQL技术
MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。在20##年1月16号被Sun公司收购。而20##年,SUN又被Oracle收购。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内。这样就增加了速度并提高了灵活性。MySQL的SQL“结构化查询语言”。SQL是用于访问数据库的最常用标准化语言。MySQL软件采用了GPL(GNU通用公共许可证)。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
3. Eclipse 技术平台
3.1 Eclipse的历史
目前,在java开发领域,各种集成的开发环境(IDE)呈现百花齐放的局面。例如Borland的JBuilder。
IBM的Visual Age for Java,Oracle的JDeveloper,Sun的Forte for Java,还有开放源代码的Eclipse、NetBean等。这么多的IDE繁荣了Java的开发工具家族,但也为开发人员的选择提出了难题。这些IDE的开发环境有很大差别,这就要求我们慎重的选择适合项目的开发工具。
在目前所有的IDE中,Eclipse可以说是最有发展前途的产品之一。Eclipse最初由OTI和IBM两家公司的IDE产品开发组创建,起始于1999年4月。IBM提供了最初的Eclipse代码基础,包括Platform、JDT和PDE。
3.2 Eclipse的基本概念
Eclipse是一个开放源代码的软件开发项目,为高度集成的工具开发提供一个全功能的、具有商品品质的工业平台。它由Eclipse项目、Eclipse工具项目和Eclipse技术项目三个项目组成。每一个项目由其自身的子项目组成。
Eclipse Platfrom 是一个开放的可扩展的IDE。Eclipse Platfrom提供建造块和构造并运行集成软件开发工具的基础。Eclipse Platfrom 允许工具建造者独立开发与他人工具无缝集成的工具,你无需辨认一个工具功能在哪里结束,而另一个工具功能在哪里开始。
Eclipse SDK(软件开发者包)是三个Eclipse项目的子项目所产生的组建合并,它们可以一次下载。这些部分在一起提供了一个具有丰富特性的开发环境。Eclipse SDK由Eclipse项目生产的工具和来自其它开放源代码的第三方软件组合而成。
第三章 数据库设计
系统E-R模型图
系统E-R图设计
2.系统数据字典
用户角色:用户的角色及相应的权限。
商品入库表:确定如可商品的基本信息。
商品出库表:已经确定发货的的基本信息。
第四章 系统设计与实现
1.系统设计思想
(1)系统分成几个相对独立的模块,但这些模块都进行集中式管理。
(2)分层的模块化程序设计思想,整个系统采用模块化结构设计。作为应用程序有较强的可操作性和扩展性。
(3)合理的数据流设计,在应用系统设计中,相对独立的模块间以数据流相互连接,使各模块间的耦合性较低,方便系统运行,提高系统安全性。
2.系统设计原则
为了使本系统功能齐全完备,操作简便,最大限度的提高软件的质量,从而满足用户的实际需要,在设计开发过程中遵循了如下原则:
(1)合法性原则:依据产品核算系统的工作规定以及要求,参照核算实际的工作情况,进行诸如产品进货(采购)、销售、库存、退货等工作。
(2)实用性原则:适合产品信息管理工作的实际需求,并能够处理一些特殊情况的要求,此外,尽可能预留空间,以便扩充功能。
(3)准确性原则:对输入的相关资料建立检错机制,及时报错,使用户能够及时准确的输入合法资料(如:类型匹配、长度不超限、模糊查询等)。
(4)易操作原则:要求设计的系统功能齐全,界面友好,操作方便,必要的地方进行提示。
(5)源程序可读性原则:为了便于其他设计,维护人员读懂代码或以后的代码修改,软件升级维护,即可能做好代码注释工作。
(6)优化原则:为了达到优化的目的,合理的运用窗口,菜单,对象等的继承,自定义用户对象,事件,函数,减少不必要的重复性代码,使程序简介明了,也方便了将来的维护。
(7)安全性原则:可以为该系统的用户设置相应的用户权限。
3. 业务流程分析
库存管理系统主要包括系统登录、进货业务、出货业务、货物查询、以及库存余量报警。
具体业务分析如下:
(1) 进货业务:
进货管理是企业生产经营活动中及其重要的一环,它关系到产品质量能否得到保证,生产是否能够顺利进行,采购成本能否得到有效控制等问题。
在本系统中,进货业务重点放在进货信息的全面有效性,通过进货的录入,使得货物信息全面,易于查询。
(2) 货物查询:
本系统中,对于货物查询着重点在查询的方式全面,可以通过货号查询,货物分类查询,按供货商查询。这样能够使得货物查询精确度更加高。
(3) 出货业务:
本系统对于出货业务的着重点在出货信息的全面性,可靠性,使得出货过程更加清晰与完整。
(4) 库存余量报警
库存系统的功能不仅仅做到进货出货就够了,还要有余量报警,余量报警的作用就是能够是仓库管理员及时更新库存,使得货物能够及时供应,减少供不应求的情况,使货物能够周转良好。
4.模块功能界面设计
1 系统登录页面:
2 管理菜单:
3进出货页面:
4 库存信息查询:
5 库存余量报警页面:
第五章 数据库分析
MYSQL介绍
MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。在20##年1月16号被Sun公司收购。而20##年,SUN又被Oracle收购。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内。这样就增加了速度并提高了灵活性。MySQL的SQL“结构化查询语言”。SQL是用于访问数据库的最常用标准化语言。MySQL软件采用了GPL(GNU通用公共许可证)。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
应用环境
与其他的大型数据库例如Oracle、DB2、SQL Server等相比,MySQL自有它的不足之处,如规模小、功能有限(MySQL Cluster的功能和效率都相对比较差)等,但是这丝毫也没有减少它受欢迎的程度。对于一般的个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,而且由于MySQL是开放源码软件,因此可以大大降低总体拥有成本。
目前Internet上流行的网站构架方式是LAMP(Linux+Apache+MySQL+PHP/Perl/Python)和LNMP(Linux+Nginx+MySQL+php/perl/Python),即使用Linux作为操作系统,Apache和Nginx作为Web服务器,MySQL作为数据库,PHP/Perl/Python作为服务器端脚本解释器。由于这四个软件都是免费或开放源码软件(FLOSS),因此使用这种方式不用花一分钱(除开人工成本)就可以建立起一个稳定、免费的网站系统。
结论
本次开发对于我来说是很好的一次锻炼,这是一次理论与实际的相结合的锻炼,通过卡发,不仅是对ERP知识的巩固,同时加深了我对PHP语言,MYSQL数据库的理解以及加强了我对他们的应用能力。
当然,这个作品还谈不上成功,因为首先的作用很简单,功能也很有限,远远达不到ERP的要求,只能说是实现了一些简单的功能,并且在整个开发过程中的前期规划与后期编程也出现了一些问题,比如计划不够全面,系统目录结构分类不够合理,以及代码书写不够灵活等等。总之,这次开发只能说是一次简单的尝试,但是我相信在总结这些不足之后我会在以后的开发中做得更好。
参考文献:
【1】 谭贞军 深入PHP项目开发 清华大学出版社 20##年7月
【2】 马费成 赖茂生 信息资源管理 高等教育出版社 20##年8月
【3】 郑称德 陈曦 ERP实训教程 清华大学出版社 20##年8月
【4】 Mary Pyefinch. SQL数据库从入门到精通[M],希望图书创作室译,北京:北京希望电子出版社,2003:67-78.
【5】 张海藩 软件工程 人民邮电出版社 20##年6月
【6】 牛川军 网页设计与美化 人民邮电出版社 20##年4月
附录
1. 数据库连接
<?php
//=====================================Step1 启动SESSION=========================================
SESSION_START();
//=====================================Step2 数据库连接===========================================
class mysql{
private $host;
private $name;
private $password;
private $db;
function __construct($host,$name,$password,$db){
$this->host=$host;
$this->name=$name;
$this->password=$password;
$this->db=$db;
$this->connect();
}
function connect(){
$link = mysql_connect($this->host,$this->name,$this->password) ordie(mysql_error());
mysql_select_db($this->db,$link)ordie("没有该数据库".$this->db);
mysql_query("SET NAMES 'GBK'");
}
}
$db = new mysql('localhost','root','','StockControl');
//=========================Step3 定义加密用的常量=====================================
DEFINE('ALL_PS',"HANZHEN");
//=========================判断用户权限的方法========================================
function user_shell($u_id,$shell,$class){
$sql = "select * from `user_list` where `u_id` = '$u_id'";
$query = mysql_query($sql);
$us = is_array($row = mysql_fetch_array($query));
$shell = $us ? $shell == MD5($row['u_name'].$row['pwd'].ALL_PS) : FALSE;
if($shell){
if($row['a_id']<=$class){
return $row;
}else{
echo "<script language=\"javascript\">alert('您的权限不足!');history.go(-2);</script>";
exit();
}
}else{
echo "<script language=\"javascript\">alert('您无权访问该页!');history.go(-2);</script>";
exit();
}
}
//======================超时重新登录======================================
function user_time($log_time){
$current_time = time();
if($current_time - $log_time >= '10'){
echo "<script language=\"javascript\">alert('登录超时!请重新登录');location.href='./logon.php'</script>";
SESSION_DESTROY();
}else{
$_SESSION['times'] = time();
}
}
?>
2. 系统登录
<?php
include('config.php');
if(isset($_POST['submit'])){
$sql = "select * from `user_list` where `u_name` = '{$_POST['u_name']}'";
$query = mysql_query($sql);
//==============判断是否存在输入用户名所在的数组=========================
$us = is_array($row = mysql_fetch_array($query));
//==============判断输入的密码是否与数据库中的一致=======================
$ps = $us ? MD5($_POST['pwd'].ALL_PS) == $row['pwd'] : FALSE;
if($ps){
$_SESSION['u_id'] = $row['u_id'];
$_SESSION['shell'] = MD5($row['u_name'].$row['pwd'].ALL_PS);
$_SESSION['times'] = time();
echo "<script language=\"javascript\">alert('登陆成功');location.href='../../frame/frame_index.php';</script>";
}else{
echo "<script language=\"javascript\">alert('用户名或者密码错误!');</script>";
SESSION_DESTROY();
}
}
?>
<HEAD>
<style type='text/css'>
#mid{
text-align:center;
font-family:verdana;
}
</style>
</HEAD>
<BODY ID=mid>
<BR><BR>
<FORM action='./logon.php' method = POST>
请输入<B>用户名:</B><input type='text' name='u_name' />
请输入<B>密码:</B><input type='password' name='pwd' />
<input type='submit' name='submit' value='登 录'/>
<input type='reset' name='reset' value='重 置'/>
<BR><BR>还没注册?点击此处进行注册
<input type='button' name='button' onClick="location.href='../reg/reg.php'" value='注 册' />
</FORM>
</BODY>
3. 信息查询
<?php
include('config.php');
?>
<style>
#bodySty{
text-align:center;
}
.tabSty{
text-align:center;
font-family:"宋体";
font-size:22px;
border:1px solid black;
background:#ADD8E6;
width=450px;
}
.tdSty{
text-align:center;
font-family:"宋体";
font-size:18px;
}
.iSty{
text-align:center;
font-family:"宋体";
font-size:14px;
}
.selSty{
text-align:center;
font-family:"宋体";
font-size:16px;
}
</style>
<BR><BR><BR><BR><BR>
<body ID='bodySty'>
<form action='./query_class_result.php' method='POST'>
<table class=tabSty cellspacing='8'>
<caption>按货物分类查询</caption>
<tr>
<td class=tdSty>请选择产品类别</td>
<td>
<select name='c_class' class='selSty'>
<option>--请选择类别--</option>
<?
$sql = "select * from `stock` group by `c_class`";
$query = mysql_query($sql);
while($row = mysql_fetch_array($query)){
?>
<option><?echo $row['c_class'] ?></option>
<?
}
?>
</select>
</td>
</tr>
<tr>
<td colspan='2'>
<input type='submit' name='submit' value='提 交' class='iSty' />
<input type='reset' name='reset' value='重 置' class='iSty' />
</td>
</tr>
</table>
</body>
</form>