基于PHP+MySQL协同办公系统的设计与实现

news2024/11/24 18:45:19

随着全球经济一体化进程的加快和信息技术的飞速发展,Internet技术及其应用给人们的日常生活和工作等各个方面带来了深刻的影响。网络应用技术的不断提高,企业对于相互之间的通讯能力提出了更高的要求。许多企业都具有一定信息化基础,有一定数量的信息设备和信息源,有相互连通的接口,需要实现消息的无缝传递。因此,为了创造出一个集成化的办公环境,提高办公效率和办公质量,就提出了办公自动化(Office Automation),简称OA。
本设计尝试用PHP开发一个协同办公系统,能够最大化的方便办公的管理。论文首先较为详尽地介绍了面向对象分析与设计的有关概念与技术,特别深入介绍了在本系统中运用到的知识,如:面向对象的分析设计流程;系统中所用到的开发技术PHP的特点、结构框架以及使用方法。接着对协同办公系统的可行性进行了分析,然后对系统的设计思想、设计目标与系统的整体结构进行了明确的规划。最后对系统的主要页面、数据库、应用程序的设计与实现作了较为详细的讲解。

请添加图片描述
现代办公自动化系统被要求成为有效地信息采集和管理的平台,是以开放、先进的Intranet技术及消息传递和工作流管理技术为核心的新一代全方位办公信息服务系统,成为一个资源中心和通信中心。它需要改进企业内部的通讯水平,将传统的办公模式发展为一个具有跨地域通讯能力、能够协同工作,并保持一致的办公环境,消除传统办公方式下的信息存储、管理和分布的障碍,充分实现信息共享、资源共享。通过建立OA系统,可以提高人们协同工作的效率,减少人工操作的重复操作和复杂程度;消除在传统办公中信息存储、分发、管理和分布的障碍,提高日常办公管理水平;为各级领导进行宏观管理提供高效便利的服务,并为科学决策提供有效的参考依据;改善企业内部的办公环境,便于办公人员及时掌握、管理各方信息,改善办公条件,规范办公流程,使管理水平进一步科学化和现代化。
请添加图片描述
OA已是现代化企业发展的大势所趋,传统的手工办公方式已经无法满足现代办公的需要,OA管理系统为提高工作效率,规范办公制度,增强办公的透明性,实现信息、的统一管理。是为方便领导决策,逐步实现无纸化办公的重要工具,越来越受到人们的重视。
请添加图片描述
本协同办公OA系统分为管理员和员工两部分,具体功能描述如下
管理员部分

  1. 公告信息管理,管理员可以管理对应的公告信息,员工可以查看
  2. 文件流转,对公司内部的文件进行流转,以便公司内部的人员周知
  3. 会议通知,当公司要开会议的时候可以直接在办公系统内进行通知
  4. 人力资源管理,主要是管理公司内部的人力资源信息
  5. 雇员信息管理,管理公司内的雇员信息
  6. 行政管理,管理公司内部的行政信息
  7. 客户管理,管理公司内的所有客户信息
  8. 合同管理,管理公司内的所有的合同信息
  9. 修改密码,修改自己的个人密码

请添加图片描述
员工部分

  1. 查看公告信息,查看管理人员发布的公告信息
  2. 查看文件流转,查看公司内部的文件信息
  3. 查看会议通知,查看会议通知并参与
  4. 查看雇员信息,查看本公司内的雇员信息
  5. 在线申请,申请公司内部资源的使用
  6. 客户管理,管理自己的客户信息
  7. 合同管理,管理和自己业务相关的合同信息
  8. 修改密码,修改自己的个人密码
<?php
error_reporting(E_ALL ^ E_NOTICE);

$conn=@mysql_connect("localhost","root","root") or die("数据库链接失败".mysql_error());
mysql_select_db("daizu",$conn) or die("数据库链接失败".mysql_error());
mysql_query('set names utf8');
 
 
//设置时区
date_default_timezone_set('asia/shanghai');
define('SYS_ROOT', str_replace("\\", '/', dirname(__FILE__)));
define('File_ROOT', SYS_ROOT."/upload/");
define('IMG_ROOT', SYS_ROOT . "/upload/");

@extract($_POST);
@extract($_GET);

function getfirst($sql)
{
	$res=mysql_query($sql);
	$rows=mysql_fetch_array($res);
	return $rows;
}
//
function getcount($sql){
	$res=mysql_query($sql);

return mysql_num_rows($res);
}
function get_name($id,$table)
{

	$sql="select * from $table where id='$id'";
	$rows=getfirst($sql);
	return $rows[name];
}
//遍历创建目录
function Remkdir($path) {
	if (!file_exists($path)) {
		Remkdir(dirname($path));
		@mkdir($path, 0777);
	}
}
//上传图片
function upload_image($inputname, $image=null, $type='upimages', $width=440) {
	 $n = time().rand(1000,9999).'.jpg';
	$z = $_FILES[$inputname];
	if ($z && strpos($z['type'], 'image')===0 && $z['error']==0) {
		if (!$image) {
			Remkdir( IMG_ROOT . '/' . "{$type}/" );
			$image = "{$type}/{$n}";
			$path = IMG_ROOT . '/' . $image;

		} else {
			Remkdir( dirname(IMG_ROOT .'/' .$image) );
						$image = "{$type}/{$n}";

			$path = IMG_ROOT . '/' .$image;
		}
//echo $path ;


			move_uploaded_file($z['tmp_name'], $path);

		//echo $image;exit;
		return $image;
	}
	return $image;
}
//获取文件后缀名
function get_extend($file_name)
{
$extend = pathinfo($file_name);
$extend = strtolower($extend["extension"]);
return $extend;
}
//文件上传实现

function upload_file($inputname, $file=null)
{
	$year = date('Y'); $day = date('md');
	$z = $_FILES[$inputname];


	$file_ext=get_extend($z['name']);

	
	$n = time().rand(1000,9999).".".$file_ext;
	if ($z &&  $z['error']==0) {
		if (!$file) {
			Remkdir( File_ROOT . '/' . "{$day}" );
			$file = "{$day}/{$n}";
			$path = File_ROOT . '/' . $file;

		} else {
			Remkdir( File_ROOT . '/' . "{$day}" );
						$file = "{$day}/{$n}";

			$path = File_ROOT . '/' .$file;
		}
//echo $path ;


			move_uploaded_file($z['tmp_name'], $path);

		//echo $file;exit;
		return $file;
	}
	return $file;
}
//分页函数.
function get_pager($url, $param, $count, $page = 1, $size = 10)
{
    $size = intval($size);
    if($size < 1)$size = 10;
    $page = intval($page);
    if($page < 1)$page = 1;
    $count = intval($count);

    $page_count = $count > 0 ? intval(ceil($count / $size)) : 1;
    if ($page > $page_count)$page = $page_count;

    $page_prev  = ($page > 1) ? $page - 1 : 1;
    $page_next  = ($page < $page_count) ? $page + 1 : $page_count;

    $param_url = '?';
    foreach ($param as $key => $value)$param_url .= $key . '=' . $value . '&';

    $pager['url']        = $url;
    $pager['start']      = ($page-1) * $size;
    $pager['page']       = $page;
    $pager['size']       = $size;
    $pager['count']		 = $count;
    $pager['page_count'] = $page_count;

	if($page_count <= '1')
	{
	    $pager['first'] = $pager['prev']  = $pager['next']  = $pager['last']  = '';
	}
	else
	{
		if($page == $page_count)
		{
			$pager['first'] = $url . $param_url . 'page=1';
			$pager['prev']  = $url . $param_url . 'page=' . $page_prev;
			$pager['next']  = '';
			$pager['last']  = '';
		}
		elseif($page_prev == '1' && $page == '1')
		{
			$pager['first'] = '';
			$pager['prev']  = '';
			$pager['next']  = $url . $param_url . 'page=' . $page_next;
			$pager['last']  = $url . $param_url . 'page=' . $page_count;
		}
		else
		{
			$pager['first'] = $url . $param_url . 'page=1';
			$pager['prev']  = $url . $param_url . 'page=' . $page_prev;
			$pager['next']  = $url . $param_url . 'page=' . $page_next;
			$pager['last']  = $url . $param_url . 'page=' . $page_count;
		}
	}
    return $pager;
}
?>


目录
1 绪论 1
1.1课题背景 1
1.2课题研究现状 1
1.3初步设计方法与实施方案 2
1.4本文研究内容 2
2 系统开发环境 4
2.1 使用工具简介 4
2.2 环境配置 4
2.3 B/S结构简介 4
2.4 MySQL数据库 5
2.5 框架介绍 5
3 系统分析 6
3.1系统可行性分析 6
3.1.1经济可行性 6
3.1.2技术可行性 6
3.1.3运行可行性 6
3.2系统现状分析 6
3.3功能需求分析 7
3.4系统设计规则与运行环境 8
3.5系统流程分析 8
3.5.1操作流程 8
3.5.2添加信息流程 9
3.5.3删除信息流程 10
4 系统设计 11
4.1系统设计主要功能 11
4.2数据库设计 11
4.2.1数据库设计规范 11
4.2.2 E/R图 11
4.2.3数据表 12
5 系统实现 25
5.1系统功能模块 25
5.2后台模块 27
5.2.1管理员功能模块 27
5.2.2用户功能模块 30
6 系统测试 33
6.1功能测试 33
6.2可用性测试 33
6.3性能测试 34
6.4测试结果分析 34
7结 论 35
参考文献 36
致 谢 37

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/53371.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTML文本溢出处理

有时在做某些需求布局时,需要处理文本溢出时的情况,如果不处理可能会重新重叠的效果,关于设置文本溢出,主要就是多行/单行的处理,代码如下 1.处理单行文本溢出 /* 设置文本溢出时的处理模式 */text-overflow:ellipsis;overflow: hidden;white-space: nowrap; 2.处理多行文本溢出…

视频播放 (三) 视频列表

1. 配置信息 1.1 AndroidManifest.xml 添加网络权限 <uses-permission android:name"android.permission.INTERNET" /> 1.2 使用 Http 明文设置 android:usesCleartextTraffic"true" 1.3 使用竖屏设置 android:screenOrientation"portrait&q…

FCP第二题:数据库中有一张地区数据统计表,但是并不规则

【题目要求】 数据库中有一张地区数据统计表,但是并不规则 ,记录类似于,225100:02:3:20160725是一串代码,以:分割,第1位为地区代码,第2位为分类代码,第3位为数量,第4位为日期 地区代码含义225100-上海 225200-江苏 225300-浙江 为可能有某些位不存在,缺位时计算规…

很多up主都在使用的Editplus,强大的编辑器-并附有编译执行配置 java编译(新款发放)

趣味拓展 邻居老李家的屋顶为什么有时漏雨&#xff0c;有时不漏雨&#xff1f; (答案在文末) 引言 不晓得你们怎么认识Editplus的&#xff0c;小编最初认识Editplus是在老杜的javaSE视频中 杜老师SE视频中也分享的有Editplus&#xff0c;不过这款是新版本~ 软件介绍 1.EditPl…

【密码加密原则】

目录 1. 什么是密码加密 2. 典型的消息摘要算法 1. 什么是密码加密 用户在使用软件时所提交的密码&#xff0c;不应该被记录下来&#xff0c;如果将用户的密码记录&#xff0c;这是不安全的做法&#xff01; 当用户提交注册信息时&#xff0c;密码必须被记录下来&#xff0…

MYSQL中AS(取别名)

文章目录0 写在前面1 格式2 举例2.1 设置表别名2.2 设置字段别名3 写在末尾0 写在前面 在做业务&#xff0c;在mybatis中手写sql中再多表查询去映射实体时&#xff0c;总会用到AS这个关键字。 或者我们在数据库大量字段测试数据时&#xff0c;很多字段都有相同的前缀&#xff…

【虹科方案】虹科数字化仪——机械测量的最佳方案!(二)

前文回顾 【虹科方案】虹科数字化仪——机械测量的最佳方案&#xff01;&#xff08;一&#xff09; 前文介绍了在对机械设备和系统进行测量时如何选择数字化仪及传感器&#xff0c;并以小型三叶片冷却风扇的基本机械测量作为案例&#xff0c;说明传感器和数字化仪如何一起使…

如何走出自动化测试第一步?

1、我想问一下关于自动化测试工具Selenium和QTP的区别。假如一个系统现在需要一款自动化测试工具&#xff0c;要求可以重复提交表单进行功能性测试&#xff0c;不用纯手工去做&#xff08;因为工作量过大&#xff09;&#xff0c;现在有两个工具&#xff08;Selenium和QTP&…

为什么说“分布式架构”才是AR眼镜的未来

近两年消费级AR眼镜得到了快速发展&#xff0c;无论是基于BB的分体式&#xff0c;还是基于光波导方案的一体机都在加快迭代&#xff0c;不断地在产品形态和软件使用体验上带来创新。然而从长期来看&#xff0c;消费级AR/VR仍处于早期阶段&#xff0c;未来有非常多的可能性。 其…

【C++】并查集

并查集这个数据结构本身并不难&#xff0c;其主要是提供一个思路&#xff0c;方便我们编写图的代码&#xff0c;和一些OJ题 文章目录1.什么是并查集&#xff1f;2.思路2.1 合并集合2.2 压缩路径3.代码4.OJ题4.1 剑指 Offer II 116. 省份数量4.2 等式方程的可满足性1.什么是并查…

高精度工厂人员定位,打造数字化智慧工厂

工厂人员定位&#xff0c;通过对工业厂区人员、物资、车辆进行精准的定位&#xff0c;实现对人员、物资、车辆的智慧管控&#xff0c;从而实现工厂安全生产管理智能化。 人工智能的推广使得工厂的生产效率不断提升&#xff0c;企业对安全生产和降本增效的需求也越来越大。高精度…

跨境电商迎来销售旺季,APS计划排产帮助企业提升生产效率

根据报道称&#xff0c;我国跨境电商的进出口规模5年来增长了近10倍&#xff0c;为了商品能够顺利“出海”&#xff0c;不少物流企业开辟了新的物流专线。 据海关统计&#xff0c;我国跨境电商进出口规模5年增长近10倍。为了保障商品顺利“出海”&#xff0c;今年&#xff0c;不…

Tableau 入门系列之各种图形绘制

文章目录What熟悉Tableau绘制各种图形柱状图 &#x1f4ca;折线图&#x1f4c8;饼图文字云气泡图热图突出显示图筛选器参考线地图制作DashboardWhat Tableau 是一个可视化分析平台&#xff0c;它改变了我们使用数据解决问题的方式&#xff0c;使个人和组织能够充分利用自己的数…

虚拟内存系统【页面置换算法】

页面置换算法&#x1f4d6;1. 最优页面置换算法(OPT)&#x1f4d6;2. 先入先出置换算法(FIFO)&#x1f4d6;3. 随机(Random)&#x1f4d6;4. 最近最少使用的置换算法(LRU)&#x1f4d6;5. 近似LRU 时钟页面置换算法&#x1f4d6;6. 最不常用算法&#x1f4d6;7. 考虑脏页在虚拟…

CleanMyMac X2022苹果电脑专业清理Mac加速器软件

CleanMyMac X2023最新免费版苹果电脑专业清理软件&#xff0c;对于Mac电脑用户来说&#xff0c;Cleanmymac X是一款再熟悉不过的电脑清理软件&#xff0c;它是由苹果认证并对外承认的一款第三方清理软件&#xff0c;几乎有95%的Mac用户都会安装并使用&#xff0c;Cleanmymac X究…

代码随想录——栈与队列

232.用栈实现队列 力扣题目链接 使用栈实现队列的下列操作&#xff1a; push(x) – 将一个元素放入队列的尾部。 pop() – 从队列首部移除元素。 peek() – 返回队列首部的元素。 empty() – 返回队列是否为空。 示例: MyQueue queue new MyQueue(); queue.push(1); queu…

如何使用qemu调试内核

文件系统 调试内核需要一个基本的文件系统&#xff0c;我们可以使用简单的 ramdisk来作为这个文件系统&#xff0c;如果&#xff0c;需要测试一些其它应用程序&#xff0c;我们还需要创建一个大一点根文件系统。 Ramdisk 也就是内核启动时的initrd.img&#xff0c;可以使用b…

iOS创建苹果证书、制作p12证书流程

一、创建Certificates 1、在苹果开发者后台点击右上角【Account】进入以下界面&#xff0c;然后点击【Certificates, Identifiers & Profiles】 2、进入以下界面后点击【Create a certificate】 3、然后选择证书类型&#xff0c;Apple Development&#xff08;开发者证书…

Oracle中ALTER TABLE的五种用法(四、五)

首发微信公众号&#xff1a;SQL数据库运维 原文链接&#xff1a;https://mp.weixin.qq.com/s?__bizMzI1NTQyNzg3MQ&mid2247485212&idx1&sn450e9e94fa709b5eeff0de371c62072b&chksmea37536cdd40da7a94e165ce4b4c6e70fb1360d51bed4b3566eee438b587fa231315d0a5a…