(精品论文)论文_基于php5+mysql5的外贸单证管理系统 外贸单证管理系统_第1页
(精品论文)论文_基于php5+mysql5的外贸单证管理系统 外贸单证管理系统_第2页
(精品论文)论文_基于php5+mysql5的外贸单证管理系统 外贸单证管理系统_第3页
(精品论文)论文_基于php5+mysql5的外贸单证管理系统 外贸单证管理系统_第4页
(精品论文)论文_基于php5+mysql5的外贸单证管理系统 外贸单证管理系统_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

本科毕业论文 论文题目基于 PHP5+MySQL5 的外贸单证管理系统 作者姓名 学科专业 计算机及应用 准考证编号 编号 摘要摘要 本文讲述了利用 Apache2,PHP5,MySQL5 开源解决方案来实现 B/S 结构的外 贸单证管理系统。 外贸单证包括销售订单,采购合同,托单,装箱单,报关单,发票等单证, 将单证业务复杂的数据交由计算机系统来处理。工厂用户远程登录系统维护装 箱单,提高了数据的准确性和及时性,单证自动生成,减少了单证员的工作量, 提高了工作效率。 实践证明,此系统具有开发速度快,稳定性好,可扩展性强,维护部署方 便,总成本低廉的优点,提高了企业的工作效率,满足企业的需求。 关键字关键字: : B/SB/S ApacheApache PHPPHP MySQLMySQL 外贸单证外贸单证 装箱单装箱单 报关单报关单 发票发票 FPDFFPDF WriteExcelWriteExcel 报表报表 Abstract This article discusses how to develop a foreign trade documents management system based Brower/Server use Apache2, Php5 and MySQL5 open source software solution. Trade documents include Sales Contract ,Purchase Contract ,Delivery Sheet, Packing List, Customs declaration form ,Invoice ,etc. We can process complicated businesss data by computer. This software system can let remote factorys user login system and maintain packing list, base these data we can auto generate behind trade form, so all of data are accurate and quickly, we can reduce employees workload and improve work efficiency. The practice proves this software system can be developed quickly, stably, well expansibility and maintained conveniently. A excellent aspect is the cost is low , can improve companys work efficiency and solve immediate requirement. Keywords: B/S Apache PHP MySQL Foreign trade documents Packing list Customs declaration form Invoice FPDF WriteExcel Report 目录目录 1 引 言. 2 需求分析. 2.1 设计目标. 2.2 开发及运行环境. 2.3 APACHE、PHP、MYSQL 解决方案的优势. 3 总体设计. 3.1 方案图. 3.2 模块结构图. 3.3 流程图. 3.4 数据库设计. 4 详细设计. 4.1 数据访问类. 4.1.1BaseDB 类 . 4.1.2实体类. 4.1.3操作类. 4.2 基础资料 4.2.1维护产品. 4.3 贸易管理 4.4 船运管理 4.4.1维护装箱单. 4.4.2生成报关单. 4.5 系统管理 4.5.1用户权限控制. 4.6 报表设计 4.6.1PDF 报表 . 4.6.1EXCEL 报表 5 系统安装与维护. 5.1 安装数据库及应用程序. 6 开发总结. 6.1 总结. 6.2 致谢. 参考文献. 1 1 引引 言言 经济的全球化,给企业带来无限商机,同时也给企业的生产制造带来越来 越大的压力。一方面,客户个性化的要求越来越多,同时对质量、交货期的要 求也越来越严格。另一方面,跨地域的生产和经营活动又给管理带来了巨大的 挑战。 企业必须加强生产管理水平,加强供、产、销各环节的管理以及与供应商、 经销商、客户等资源的协同。这样才能拥有较高的客户满意度,维持竞争力。 苏州 ABC 贸易有限公司是一家针对欧美的服装外贸公司。主要客户为“H mysql_select_db(DB_DATABASE_NAME, $db_conn); $DB_CONNECTION = Connect(); $DB_CONNECTION 是一个全局的数据库连接,每次程序执行时,所有程 序的数据库连接都会用此连接,这样提高了效率,不需要每次执行数据库都要 重新连接一次,因为与数据库连接是比较耗时的动作。同时,用同一连接,在 事务操作时也比较方便,事务要求用同一数据库连接。 本系统的数据访问类是用 BaseDB 类,数据操作类是 BaseCollect,该类继 承于 BaseDB,数据实体类是 BaseSingle。系统上层的表的操作类都会继承于 BaseCollect,这样就间接继承了 BaseDB 类。对应的类图如下: +Error : string +Msg : string +ErrFile : string +ErrClass : string Error +Connect() : bool +Close() +BeginTrans() : bool +CommitTrans() : bool +Rollback() : bool +Open(in query : string) : bool +Exec(in strSQL : string) : bool +FetchArray() : array +GetRecords() : array +GetRecordsCount() : int +GetRow() : array +GetField(in Fieldname : string) +MoveFirst() : bool +MoveLast() : bool +MovePrevious() : bool +MoveNext() : bool +Move(in x : int) : bool +EOF() : bool +BOF() : bool +SetError(in Error : Error) +GetError() : Error +ShowErrors() +IS_PK() +GetInsertID(in table, in field) : int +GetSecuExt() +GetUserAllInfo(in userid : int) -db_connect_id : string -query_result : bool -RecordCount : int -RecordCursor : int -EOF : bool -BOF : bool -Error : Error -next_id : int -FieldsCount : int -Records : array -Page : array -Pageflag : bool BaseDB +SetValue(in field, in value) +GetValue(in field) +Set_tb_name(in tablename) +Get_tb_name() +Set_keyid(in field, in value) +Get_keyid() : array +GetRow() : array -properties : array -keyid : array -tablename : string BaseSingle +CreateObj(in tablename) +GetObj(in tablename) +AddSQL(in obj) +ModifySQL(in obj) +DeleteSQL(in obj) BaseCollect 上层的表的实体类都会继承于 BaseSingle。上层的表的操作类和实体类都是 与表结构相关的。所以可以用程序访问数据库自动生成,大大减少工作量,本 系统的表的操作类和实体类都是工具自动生成的。 4.1.1 BaseDB 类类 在 BaseDB 构造函数中,我们赋给已有的全局数据库连接。 global $DB_CONNECTION; $this-db_connect_id = $DB_CONNECTION; 最重要的方法是Open($query)执行数据库查询了。 Open函数实现了基本的查询功能,最主要用 mysql_query 函数,同时,考虑 了 Insert 和分页控制。对于 Insert,除了执行查询外,还能返回新增的 ID,这 样便于上层操作,如同时要插入主辅表信息时,在插入辅表记录时要知道刚刚 新增的主表记录的 ID。 对于 Select,如果需要分页,$this-pageflg 值为 true,程序会将 SQL 语句, 通过正则表达式,分成两条,一条是原先的 SQL 语句,里面有 LIMIT,MySQL 支持 LIMIT %d, %d 语句提高查询效率,返回从第几条记录开 始的多少条记录。另一条是,SELECT COUNT(*) ,执行返回出查询记录的 总数,便于页面上进行页面控制。 还有两个比较重要的函数是 FetchArray()和 GetRow(),前者用于将查询的 结果封装成一个二维数组,后者用于返回当前查询记录,以字段名作为数组 key 值。 FetchArray()主要运用 mysql_fetch_array, mysql_num_fields, mysql_field_name 函数,最终生成 Records$istrtolower($FieldName)二维数组。 GetRow 函数封装$resustrtolower(mysql_field_name($this-query_result,$i) 数组。 还有其它的一些操作函数。这些函数提供基本的数据访问,页面程序一般 不直接调用这些函数(考虑到效率,报表页面会调用) ,页面程序通过实体类和 操作类进行数据操作。 4.1.2 实体类实体类 实体基类 BaseSingle 的功能主要是封装表的一行记录,提供 Setter, Getter 功能。最主要的几个成员变量是 var $properties = array(); /存放数据值 var $keyid = array(); /key 值 var $tablename=null; /表名 key 值和数据值分别存记录的关键字和字段值。 最主要的函数是: function SetValue($field,$value) $field=strtolower($field); $this-properties$field=$value; function GetValue($field) $field=strtolower($field); return $this-properties$field; function GetRow() return $this-properties; 上层类都继承于 BaseSingle 类。 4.1.3 操作类操作类 操作类的基类是 BaseCollect,它继承于 BaseDB 类,这样它就能执行数据 操作,这个类最基本的操作就是通过访问实体类数据,生成 Insert,Update,Delete 的 SQL 语句。AddSQL 生成Insert 语句并执行,ModifySQL 生成 Update 语句并执行, DeleteSQL 生成 Delete 语句并执行。 上层操作类都继承于 BaseCollect,如 DProduct 类。 +Exec() +FetchArray() +GetRow() +GetField() +Move() -db_connect -records -page BaseDB +SetValue() +GetValue() BaseSingle +AddSQL() +ModifySQL() +DeleteSQL() BaseCollect +CreateItem() +GetItem() +AddNew(in obj) +Modify(in obj) +DeleObj(in obj) +Search(in id, in orderby, in sql) +GetProduct(in id) DProduct +SetKey() +Set_id(in value) +Get_id() +Set_style(in value) +Get_style() +Set_name(in value) +Get_name() +Set_material(in value) +Get_material() +Set_remark(in value) +Get_remark() Product 上面的程序中 AddNew($obj),其中变量$obj 是产品的实体类,这个类也可 以通过程序脚本自动生成,开发时根据需要再简单修改即可。这样我们在页面 程序中需要操作对象时就会很方便。 /新增 $SPROD-Set_style($style); $SPROD-Set_namecn($namecn); $SPROD-Set_nameen($nameen); $SPROD-Set_materialcn($materialcn); if(!$DPROD-AddNew($SPROD) $DPROD-ShowErrors(“新增产品出错!“); $productid=$DPROD-GetInsertId($SPROD-tablename,id); 对于其它修改和删除可查看源程序。 4.2 基础资料基础资料 基础资料包括产品、颜色、尺码、客户、工厂管理等,下面以产品为例说 明,其它部分请参考源程序,其实现基本一致。 4.2.1 维护产品维护产品 产品的编辑页面 页面的部分源程序。 if($productid 0) $itm_prod = $DPROD-Get_product($productid); $return_str1=$DPRODSIZE-GetProSizeStr($productid); $return_str3=$DPRODCOLOR-GetProColorStr($productid); else $itm_prod = $DPROD-CreateItem(); $itm_prod-Set_userid($user_id); $itm_prod-Set_lmdte(date(“Y-m-d“); 根据$productid 取得产品实体$itm_prod,如果$productid 不大于 0,就构造 一个实体对象,这样新增和修改就可用同一个页面实现。 产品款号 Get_style();?“ 产品简称 Get_namecn();?“ 设定产品的尺寸,颜色设置与此基本相同。 4.3 贸易管理贸易管理 包括销售合同和采购订单,下面主要说明采购订单。 生成采购订单,需要维护的数据不多,通过导入销售合同自动生成。 第一步 第二步,选中需要的销售合同行。因为一个销售合同存在多次出货的情况, 销售合同与采购订单的关系是 1:n,点生成就能完成采购订单的输入。 这里的源程序,其实也没什么特别的,就是注意使用事务,确保所有操作 数据库都能成功。 4.4 船运管理船运管理 4.4.1 维护装箱单维护装箱单 装箱单是外贸系统中的一个重要的单证,工厂要打印装箱单附于实际出运 货物,外贸公司要根据装箱单进行统计数量,体积,重量等数据,形成托单给 船运公司。外贸公司还要根据装箱单数据生成报关单进行报关,所以装箱单的 数据的准确性要求较高,如果原始数据不准确,就不能发挥软件系统的优势, 不能减轻公司单证员的工作。 但装箱单的数据往往量很大,一张装箱单要输入许多数量分配信息,想设 计一个很好的操作接口,在 B/S 结构下,不太容易,目前,本系统中主要采用 了 DHTMLJavaScript 的功能。 新增行是通过最主要是用了表对象的 insertRow(num),插入行功能,表中 行对象的 rows(num).insertCell(),在行中插入一个单元格,单元格对象赋值功能 cells(j).innerHTML = eval(“td“+j+“.innerHTML“); 1)界面程序定义一个表对象 2)在需要的行中放入“新增“,“删除“的控件 3)放入一个隐藏行,将所需要的控件放入其中,这一行用户是看不到的。用户 新增行操作,就会复制隐藏行的内容。 - align=center 下面的图是装箱单维护页面截图,蓝色为一些标注。 4)新增修改删除实际调用的 javascript function addRow() /当前第几行触发 num = event.srcElement.parentElement.parentElement.rowIndex; insertRow(num); /实际插入动作 function insertRow(num) window.tableObj.insertRow(num); for(j=0;jSetQuery($sql); $frm_Obj-FetchArray(); $tmpct_ary = $frm_Obj-GetRecords();/待处理数据数组 4)处理结果集 /海运 if($ship_mthd = S) for ($i=0; $i 基础资料 A1 客户信息 客户管理 A3 工厂管理 工厂管理 A4 产品信息 产品管理 我们新增一个权限也很方便,直接修改 XML 文件就行。 对于权限控制表现主要用工具条: 1)载入权限类 因为在系统全局包含文件 common.php 中已包含了权限类 include_once($path.“common/class/security.php“); 所以界面程序不用加载权限类。 2)初始化权限控制 /权限控制 $DSECU = new dSecurity(); $DSECU-initialize($user_id,C3,true); 上面“$user_id“表示登录者的用户 id,“C3“表示模块 id,通过这两个参数,就能 得到该用户在模块的权限情况。 在 initialize 函数中会将权限从数据库中查出来,如果没有任何权限页面会跳转 到出错页面,显示无任何权限。 3)加载需要的按钮 $bt_arynew=false; $bt_arycpy=false; $bt_arydel=false; $bt_arysrh=false; 一般先将所需要的按钮全部加载进来,并且全部置成 false,即全部屏蔽掉。如 果不建立变量,则按钮本身也不会显示。 4)根据查出的权限,设定按钮值为 true,即会激活按钮,开放功能。 if ($DSECU-get_Secu(N) $bt_arynew=true; if ($schid 0) $bt_arycpy=true; if ($DSECU-get_Secu(D) $this-SetX(210-$this-GetStringWidth($caption)/2); $this-write(10,$caption); $this-Ln(8); /Page footer function Footer() put_fpdf_foot( 5)初始化 pdf 对象,下面需要输出文件的地方都会调用该对象 $pdf=new PDF(); $pdf-Open(); $pdf-AliasNbPages(); $pdf-AddGBFont(); $pdf-AddPage(); $pdf-SetDisplayMode(fullwidth); $pdf-SetLeftMargin(8); $pdf-bMargin=5; $pdf-SetFont(Arial,10); $pdf-Ln(4); 6)调用相关输出函数,实现输出 $pdf-SetFont(Arial,B,12); $pdf-cell(90,$lh,“Solid Size /Solid colour“,0,1); $pdf-AddPage(); $pdf-Ln(4); 具体可参照其帮助文档,用户手册,根据需要可以实现一些复杂效果的功能。 7)输出 $pdf-Output(); 默认情况下会输出到浏览器,如果需要可带参数,输出,详见帮助文档。 4.6.1 EXCEL 报表报表 EXCEL 文件生成 1)初始变量设置 session_cache_limiter(private); set_time_limit(600); $path=/; 载入其它包含文件 2)载入 excel 类 include_once($path.“common/excel/class.writeexcel_workbook.inc.php“); include_once($path.“common/excel/class.writeexcel_worksheet.inc.php“); include_once($path.“common/excel/functions.writeexcel_utility.inc.php“);/工具函数 3)其它初始化数据 4)新增一个工作簿 workbook /new workbook mt_srand(double)microtime()*1000000); $randval = mt_rand(); if (strlen($randval) 8) $randval = substr($randval,0,7); $fname = tempnam($path.“tmp/“, $randval.“.xls“); $workbook = 5)新增一个工作表 worksheet /worksheet Name if(in_array($itm_ctry-Get_pkname(),$pkname) $name = ; else $name = $itm_ctry-Get_pkname(); /new worksheet $worksheet = $worksheet-hide_gridlines(1); /页边距 $worksheet-set_margin_left(15/25.4); # Set left margin $worksheet-set_margin_right(14/25.4); # Set right margin $worksheet-set_margin_top(25/25.4); # Set top margin $worksheet-set_margin_bottom(25/25.4); # Set bottom margin 6)调用相关输出函数,定义样式,调用输出 /边框格式 $border_format = array(); $format_ary = array( font = Arial, size = 10, color = black, ); $format = $format-set_top(1); $border_format=$format; $worksheet-write($line, 6, “Shipment to (final receiver):“, $border_format5); $worksheet-write_blank($line,$TotalCol-1, $border_format8); $tm_fmt3 = $worksheet-write($line, 1, $itm_dpkgm-Get_boxnum(), $tm_fmt3); 具体可参照其帮助文档,用户手册,根据需要可以实现一些复杂效果的功能。 7)输出 $workbook-close(); header(“Content-Type: application/x-msexcel“); $fh=fopen($fname, “rb“); fpassthru($fh); unlink($fname); exit(); 5 5 系统安装与维护系统安装与维护 5.1 安装数据库及应用程序安装数据库及应用程序 采用 PHP 开发的程序,安装非常方便,将开发目录全部复制到 Apache 主目 录(htdocs)下就行了,事实上因为 PHP 程序是解释型的,开发时就在主目录 下新建调试页面的。 本系统安装主要是 3 部分。 1安装安装 XAMPP 运行环境运行环境:本系统应用的版本是 1.5.5,主要包括 Apache 2.2.3 + MySQL 5.0.27 + PHP 5.2.0。 2创建数据库创建数据库:因为 MySQL 5.0 的字符集发生了变化,用 PHPMyAdmin 在原有配置有点麻烦,所以在这里我们用 EMS SQL Manager 2005 for MySQL。数据库建立可通过 SQL 语句在查询分析器中运行。更简单的 方法,先停止掉 MySQL 进程,将备份数据库文件夹(MySQL 会将每个 数据库放到以数据库名的文件夹下)直接复制到 MySQL 数据文件下 (一般是 mysql/data) ,再启动 MySQL 进程即可。 3安装安装 WEB 应用程序应用程序:直接将程序复制到 Apache 主目录下,为了提交效 率或安全性,我们也可以先将程序通过 Zendenc 编译加密,这样程序运 行速度会更快。 6 6 开发总结开发总结 6.1 总结总结 这篇论文主要讲述了我在项目开发中用到的一些关键技术,对业务流程只 是作了简要的描述,因为外贸单证流程是相对规范的。 通过开发实践,我也发现该解决方案存在以下两方面的不足: 一是“数据操作基类”存在一点缺限,就是不能兼容“Oracle”数据库, 我通过验证,在 SQL Server,PostgreSQL,MySQL 都是可以的。因为生成的 SQL 语句,对字段赋值是都强行加了引号,Oracle 对日期型数据要求 SQL 语句 中必须是显式转换,如使用当前日期要 TO_DATE(“.date(Y-m-d).“,YYYY-

温馨提示

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

评论

0/150

提交评论