网上报销系统以LAMP(Linux+Apache+MySQL+PHP)作为平台,涉及到PHP语言、MySQL数据库、JavaScript语言、HTML语言。
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源代码事实上都可以得到。 PHP是免费的。
基于服务器端:由于PHP是运行在服务器端的,即使再多的用户,再复杂的程序也不会影响运行的速度。
跨平台:PHP可以运行在UNIX、LINUX、WINDOWS下。
嵌入HTML:因为PHP可以嵌入HTML语言,所以学习起来并不困难。
简单的语言:PHP坚持脚本语言为主,与Java以C++不同。
效率高:PHP消耗相当少的系统资源。
PHP 是一种用来制作动态网页的服务器端脚本语言。你通过PHP和HTML创建页面。当访问者打开网页时,服务器端便会处理 PHP 指令,然后把其处理结果送到访问者的浏览器上面,就好像 ASP一样。 然而,PHP 跟 ASP 不一样的地方在于,它是跨平台的开放源代码。PHP 可以在 Windows NT 以及很多不同的 Unix 版本中执行,它也可以被编译为一个 Apache 模块,或者是一个CGI二进制文件。当被编译为 Apache 模快时,PHP 尤其轻巧方便。它没有任何繁琐程序所产生的负担,因此可以很快的返回结果,同时也不需为了保持较小的服务器内存映象,而去调整mod_perl。
除了能够用来产生你的网页的内容之外,PHP 也可以用来传送 HTTP头。你可以设定 cookies,授权管理,并将使用者重定向至新的页面。它也能很好的访问很多数据库及ODBC。另外还可与各式各样的外部库集成,由此可以让你做几乎任何事情,从创建 PDF 文件到解析XML。
PHP 代码就嵌在Web页面中,因此你不必为它建立一个特别的开发环境或IDE。你用<?php and end it with ?>标志PHP代码(也可以将PHP设定成使用ASP形式的<% %>标志甚至是用<SCRIPT LANGUAGE="php"></SCRIPT>)。PHP引擎会处理这些标志之间的任何东西。
PHP语言的语法跟C以及Perl很像。在使用前,你无须声明变量。要创建阵列以及散列(关联性阵列)也很快。PHP的初步面向对象特性还提供了组织及封装代码的简便方法。
你可以在其官方网站下载取得一份包括PHP所有函数和特性的用户手册。
MySQL是最受欢迎的开源SQL数据库管理系统,它由MySQL AB开发、发布和支持。MySQL AB是一家基于MySQL开发人员的商业公司,它是一家使用了一种成功的商业模式来结合开源价值和方法论的第二代开源公司。MySQL是MySQL AB的注册商标。
MySQL是一个快速的、多线程、多用户和健壮的SQL数据库服务器。MySQL服务器支持关键任务、重负载生产系统的使用,也可以将它嵌入到一个大配置(mass-deployed)的软件中去。
MySQL作为后台数据库工具,它功能远比Fox、Access强大,并提供了许多标准的关系数据库管理功能的支持。它各种关系数据库管理系统适应于各种硬件平台,包括Unix,PC和主机系统。
它的特点有以下几点:
(1)集成性
集成性即集多种应用数据于一体。集成性的主要表现为三个方面。首先采用统一的数据结构;其次它建立一个全局统一的数据模式,即不仅可以建立一个全局性的数据结构还可以建立数据间存在的语义联系,从而构成一个内在紧密联系的数据整体;最后它可以根据每个应用的数据需要构作局部模式,这种从局部到全局,再从全局到局部的过程是数据库系统数据集成性的主要特征。
(2)高共享性和低冗余性
数据共享性主要表现在数据多个应用程序使用,并可用于不同的目的;数据可以在已有数据库系统上开发新的应用程序;它可以向外界提供信息服务功能。数据冗余指同一个数据在不同的地方出现了重复储存。数据库系统所具有的高共享性和低冗余性不仅可以减少不必要的存储空间,更为重要的是可以避免数据的不一致性。
(3)数据独立性
数据独立性指数据库中的数据与使用这些数据的应用程序之间的互不依赖性,即数据或数据结构的改变不会导致对使用这些数据的应用程序的修改,反之亦然。数据独立性包括物理独立性和逻辑独立性。物理独立性是指数据的物理结构(包括存储结构和存取方式)的改变,不影响数据库的逻辑结构,从而不致引起应用程序的变化。逻辑独立性指数据库总体逻辑结构的改变,如修改数据模式,增加新的数据结构,改变数据间联系等不需要相应修改应用程序。
(4)数据的统一管理与控制
数据的统一管理与控制表现在四个方面:数据的完整性检查,即对数据库中数据正确性作检查以确保数据的正确;数据的安全性保护,它对数据库访问者作检查以防止非法访问;并发控制,它对多个应用并发访问所产生的相互干扰作控制以保证其正确性;数据库故障恢复,它对遭受破坏的数据具有恢复能力,使数据库具有抗破坏性。
JavaScript是一种解释性的,基于对象的脚本语言(an interpreted, object-based scripting language)。
JavaScript主要是基于客户端运行的,用户点击带有JavaScript的网页,网页里的JavaScript就传到浏览器,由浏览器对此作处理。前面提到的下拉菜单、验证表单有效性等大量互动性功能,都是在客户端完成的,不需要和Web Server发生任何数据交换, 因此,减轻了Web Server的负担。
一种脚本编写语言: JavaScript是一种脚本语言,它采取小程序段的方式实现编程。像其它脚本语言一样,JavaScript同样也是一种解释性语言,它提供了一个简易的开发过程。它的基本结构形式与C、C++、VB、Delphi十分相似。但它不需要先编译,而是在程序运行过程中被逐行地解释。它与html表示结合在一起,从而方便用户使用操作。
基于对象的语言 :JavaScript是一种基于对象的语言,同时也可以看作一种面向对象的语言。这意味着它能运用自己已经创建的对象。因此许多功能可以来自于脚本环境中对象的方法与脚本的相互作用。
简单性 :JavaScript的简单性主要表现在:首先它是一种基于Java基本语句和控制流之上的简单而紧凑的设计,从而对于学习Java是一种非常好的过渡。其次它的变量类型是采用弱类型,并未使用严格的数据类型。
安全性 :JavaScript是一种安全性语言,它不允许访问本地硬盘,并不能将数据存入到服务器上,不允许对网络文档进行修改和删除,只能通过浏览器实现信息浏览或动态交互。从而有效地防止数据的丢失。
动态性的 :JavaScript是动态的,它可以直接对用户或客户输入做出响应,无须经过Web服务程序。它对用户的反映响应,是采用以事件驱动的方式进行的。所谓事件驱动,就是指在主页(Home Page)中执行了某种操作所产生的动作,这称为"事件"。例如按下鼠标、移动窗口、选择菜单等都可以视为事件。当事件发生后,可能会引起相应的事件响应。
跨平台性 :JavaScript是依赖于浏览器本身,与操作环境无关,只要能运行浏览器的计算机,并支持JavaScript的浏览器就可正确执行。
HTML(Hyper Text Markup Language 超文本标记语言)是一种用来制作超文本文档的简单标记语言。用HTML编写的超文本文档称为HTML文档,它能独立于各种操作系统平台(如UNIX,WINDOWS等)。基于Web的信息处理,用得最多,最简单的,能够被广泛理解的语言就是HTML语言。通过HTML标记可以实现在浏览器进行文字、表格、声音、图像、动画、视频等多媒体信息的检索。
HTML语言不但可以在任何文本编辑器中编辑,还可以在可视化网页制作软件中制作网页时可以自动生成,不用自己在文本编辑器中编写;在文档中可以直接嵌入视频剪辑、音效片断和其他应用程序等。
简易性:HTML版本升级采用超集方式,从而更加灵活方便。
可扩展性:HTML语言的广泛应用带来了加强功能,增加标识符等要求,HTML采取子类元素的方式,为系统扩展带来保证。
平台无关性:虽然PC机大行其道,但使用MAC等其他机器的大有人在,HTML可以使用在广泛的平台上,这也是WWW盛行的另一个原因。
查询Apache信息通过以下命令查看(如图2-1)
图2-1 查看Apache版本信息图
测试可以在地址栏中输入127.0.0.1,会出现以下画面。(如图2-2)
图2-2 Apache 测试成功信息
Apache的主要配置文件为/etc/httpd/conf/httpd.conf
在配置文件中,如下几项配置较为重要。
Listen 80:Listen可以用来设置httpd监听客户端请求的IP地址和连接端口号,默认为80,可以修改端口号,例如可以修改81,则访问地址为192.168.1.100:81,一般不用修改。
DocumentRoot "/var/www/html" :DocumentRoot用于存放网页数据的根目录,所有来自客户端的请求,都会以此目录中的网页来相应,默认的目录为/var/www/html,自行设计网页文件以后应该保存在此目录中;当然此处可以进行修改,根目录修改后,网页文件应保存在修改后的目录中。
DirectoryIndex index.html :index.php:DirectoryIndex选项可用来指定用户连接到每个目录时默认打开的网页名称,系统默认为index.html,本机由于首页为index.php 故在后面加上index.php。
AddDefaultCharset UTF-8:配置文件中默认字符集为UTF-8,在此由于使用方便以及对汉字的支持,我们将其修改为AddDefaultCharset GB2312
输入命令 rpm- q php,得到PHP的版本信息,如图2-3
图2-3 查看PHP版本信息图
输入命令 rpm –q mysql,得到MySQL的版本信息,如图2-4
图 2-4 MySQL版本信息
若没有安装则使用rmp –ivh mysql软件包的全路径名。在终端中使用命令/etc/rc.d/init.d/mysqld start即可以启动mysql数据库,使用mysql –u root –p即可进入mysql数据库,如图2-5所示:
图 2-5 进入MySQL图
处于安全性考虑需要设置mysql密码 mysqladmin –u root password 即可。
本章首先介绍了PHP语言,MySQL数据库,JavaScript语言和HTML语言,最后给出了配置Apache+MySQL+PHP的方法。
第三章 系统分析与设计
3.1总体需求
财务信息化建设将与整个公司整体信息化建设的步伐相结合,逐步实现财务、业务流程一体化。
在总部财务管理信息化深入推进的过程中,将逐步实现预算管理、网上报销、财务核算的闭环管理。网上报销系统能够直接从全面预算系统取数,对经费预算部分进行控制,报销数据自动导入核算系统,对预算执行情况进行汇总和分析,实现整个预算工作的闭环管理。
此外,有效利用现有的高新技术和网络资源,建立快速有效、安全可靠的网上报销系统,支持费用支出的预算控制功能,实现个人、部门、项目的费用控制;依靠网络优势和合理的管理流程,实现财务管理的规范有序,监督有力,同时借助于强大的数据库资源为领导提供各类决策依据。
(1)使经费预算从业务发生时就得到控制,可以实时统计、分析数据,各部门能够及时了解预算执行情况,增进财务部门与业务部门之间的财务信息交流。
(2)利用预算与费用实施的对比控制,建立全程预警的预算管理模式,彻底改变重预算编制、轻预算执行的情况。
(3)通过完整的预算执行信息,提高预算编制水平。
(1)通过系统流程再造和完整的报销表格设计,协助和规范员工填写报销单据,提高报销信息采集的速度与质量。
(2)领导可以在任何时间进行单据的网上签批和数字签名,节约领导和员工的有效工作时间,提高工作效率。
(3)通过网上报销系统实现原始票据信息自动生成凭证,减少会计人员的重复劳动,能把更多的精力放到增值的工作上。
3.1.3完善内部控制
(1)网上报销系统不仅仅是财务流程的电子化,它可以渗透到总部日常管理的方方面面,以网上报销系统为契机,可以对总部日常管理制度及流程进行梳理,规范总部管理,把规章制度通过流程的方式固化在网上报销系统中。
(2)通过其内部的预设流程,使得单据按照正规的流程逐级审批,审核会计也不再需要将精力过多的投入在流程检查上,提高审批速度。
(1)网上报销系统将信息触发过程前移到业务人员和相关的业务系统,使会计信息系统能够收集到关于业务活动的所有信息特征,而不仅仅是价值或金额方面的信息,提高了信息的透明度。
(2)能够提供个人、领导及财务人员所需要的相关借款报销信息,为领导决策提供了信息支持,同时也提高了财务的服务水平。
根据网上报销系统的功能需求,进行系统分析设计。系统功能模块图如图3-1所示:
图3-1 系统功能模块图
登录用户模块:游客可以首先注册成为网上报销系统的会员,然后登录。登录用户可以申请差旅费报销,查看自己提交过的报销单。模块图如图3-2所示:
图3-3 登陆用户功能模块图
3.3 数据库设计与实现
数据库在系统中占有非常重要的地位,数据库结构设计的好坏将直接对应用系统的效率以及实现的效果产生影响。合理的数据库结构设计可以提高数据存储的效率,保证数据的完整和一致。另外,合理的数据库结构将非常有利于程序的实现。设计数据库系统时应该首先充分了解用户各个方面的需求,包括现有的以及将来可能增加的需求。
在动态网站的设计中,数据库设计的重要性不言而喻。如果设计不当,查询起来就非常吃力,程序的性能也会受到影响。无论你使用的是MySQL或者Oracle数据库,通过进行正规化的表格设计,可以令你的PHP代码更具可读性,更容易扩展,从而也会提升应用的性能。
1.合理使用索引
索引是数据库中重要的数据结构,它的根本目的就是提高查询效率。索引的使用要恰到好处,其使用原则如下:
在经常进行连接,但是没有指定为外键的列上建立索引,而不经常连接的字段则由优化器自动生成索引;在频繁进行排序或分组(即进行group by或order by操作)的列上建立索引;在条件表达式中经常用到的不同值较多的列上建立索引,在不同值少的列上不要建立索引。比如在文档表的“开支项目”列上只有“车、船票”,“机票”,“住宿费”和“其他”四个不同值,因此就无必要建立索引。如果建立索引不但不会提高查询效率,反而会严重降低更新速度。 如果待排序的列有多个,可以在这些列上建立复合索引。
2. 避免或简化排序
应当尽量简化或避免对大型表进行重复的排序。当能够利用索引自动以适当的次序产生输出时,优化器就避免了排序这个步骤。为了避免不必要的排序,就要正确地增建索引,合理地合并数据库表(尽管有时可能影响表的规范化,但相对于效率的提高是值得的)。如果排序不可避免,那么应当试图简化它,如缩小排序的列的范围等。
3.消除对大型表行数据的顺序存取
在嵌套查询中,表的顺序存取对查询效率可能产生致命的影响。我们有时可以使用并集来避免顺序存取。尽管也许在所有的检查列上都有索引,但某些形式的where子句会强迫优化器使用顺序存取,这一点也应注意。
4. 避免相关子查询
如果一个列同时在主查询和where子句中出现,很可能当主查询中的列值改变之后,子查询必须重新查询一次。而且查询嵌套层次越多,效率越低,因此应当尽量避免子查询。如果子查询不可避免,那么要在子查询中过滤掉尽可能多的行。
5.使用临时表加速查询
把表的一个子集进行排序并创建临时表,有时能加速查询。它有助于避免多重排序操作,而且在其他方面还能简化优化器的工作。临时表中的行要比主表中的行少,而且物理顺序就是所要求的顺序,减少了磁盘i/o,所以查询工作量可以得到大幅减少。但要注意,临时表创建后不会反映主表的修改。在主表中数据频繁修改的情况下,注意不要丢失数据。
3.3.2 数据库概念结构设计
数据库的E-R图反映了实体、实体的属性和实体之间的联系。
下面的图3-5至图3-7显示的是各个实体以及实体的属性。
图3-5 管理员实体及属性
图3-6 用户实体及属性
图3-7 开支项目实体及属性
3.3.3 数据库逻辑结构设计
本系统数据库为:cost,其中包含了五个MySQL数据表来实现对数据的存储、调用。以下为具体数据表模式:
⑴ 【申请表】(申请ID、用户名、申请原因、用户所属部门、所去的城市)
⑵ 【用户表】(用户ID、用户名、用户密码、邮箱、真实姓名、最后一次登录时间)
⑶ 【城市表】(城市ID、城市类型、城市名称)
⑷ 【部门表】(部门ID、用户名、用户所在部门)
⑸ 【费用表】(费用ID、城市类型、开支项目、部门类型)
其中,用下划线标出的属性为表的主键属性。各表的具体设计如表4-1~表4-7所示。
根据E-R图,设计每张表的变量名,变量的类型及主键。
1.admin 表
admin表存放管理员登录名和密码。
表4-1 admin表
变量 | 类型 | 备注(C) |
id | int(10) | 管理员ID |
UserName | varchar(50) | 管理员名 |
UserPwd | varchar(50) | 管理员密码 |
2.user表
用户所有的注册信息都存放在些表中。
表4-2 user 表
名称 | 类型 | 备注(C) |
Id | int(10) | 用户ID |
userName | varchar(32) | 用户名 |
password | varchar(32) | 用户密码 |
| varchar(100) | 邮箱 |
name | varchar(32) | 真实姓名 |
lastlogin | Smallint(10) | 注册时间 |
3. Apply 表
Apply表存放资源的信息,包括资源的编号、名称、类型、资源日期。
表4-3 Apply表
名称 | 类型 | 备注(C) |
id | int(10) | 申请ID |
name | varchar(50) | 申请人姓名 |
Reason | varchar(100) | 申请出差原因 |
departtype | int(10) | 部门类型 |
cs | varchar(50) | 出差城市 |
4.Depart表
Depart表存放论坛栏目的编号和名称。
表4-4 Depart表
名称 | 类型 | 备注(C) |
Id | int(10) | 部门ID |
name | varchar(50) | 用户姓名 |
Department | varchar(50) | 部门名称 |
5.fy表
fy表存放学习资料的编号,标题,内容和类型。
表4-5 fy表
名称 | 类型 | 备注(C) |
Id | int(10) | 费用报销ID |
citytype | int(10) | 城市类型 |
Hotel | int(100) | 住宿费 |
Traffic | int(100) | 交通费 |
其他的定制服务 下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 或者私信作者