OA 办公系统 模块设计

--连接主数据库
use Master
go --如果数据库simpleoa 存在,则先删除simpleoa。
if exists (select * from sysdatabases where name='simpleoa') 
drop database  simpleoa 
go--创建simpleoa数据库
create database simpleoa
go--
use simpleoa
go--创建用户表
create table [dbo].[User]
([UserID]		int		Identity(1,1) not null,--用户ID[UserLoginName]	nvarchar(20)	not null,		--用户登录名[UserName]	nvarchar(20)	not null,		--用户姓名[UserPassword]	nvarchar(20)	not null,		--用户密码[UserRegister]	nvarchar(20)	default getdate(),	--用户注册时间[UserUp]		bit		default 'true',	--是否需要上交[UserInfo]		nvarchar(200)	not null		--备注		--
)
alter table [dbo].[User] add constraint pk_user primary key(UserID);
go--创建部门表
create table [dbo].[Department]
([DepartmentID] 	[int] 		identity(1,1) 	not null,	--部门ID[DepartmentNum]	[nvarchar](20)	not null,		--部门编号[DepartmentName]	[nvarchar](20)	not null,		--部门名称[UserID]		[int]	             	not null,	--部门负责人ID[DepartmentInfo]	[nvarchar](200)	not null		--部门备注
)
alter table [dbo].[Department] add constraint pk_department primary key(DepartmentID);
go
--添加外键约束
--alter table Department add constraint dep_ref_use foreign key(UserID) references [dbo].[User](UserID)
--go--创建消息表
create table [dbo].[Message]
([MessageID]	[int]		identity(1,1) not null,	--消息ID[MessageSender]	[int]		not null,		--外键[MessageSubject]	[nvarchar](50)	default getdate(),	--消息主题[MessageBody]	[nvarchar](500)	not null,		--消息内容[MessageDataTime]	[datetime]		default getdate(),	--发送消息时间[MessageAttachment]	[bit]	default 'false'	--是否含有附件
)
alter table [dbo].[Message] add constraint pk_MessageID primary key (MessageID);
go
--消息接收人表:
create table [dbo].[Recipient]
([RecipientID]	[int]		identity(1,1) not null,	--接收人ID[MessageID]	[int]		not null,		--外键[RecipientRead]	[bit]		not null,		--是否读过[RecipientDel]	[bit]		not null,		--是否删除(显示在已删除消息栏)[RecipientReadTime]	[nvarchar](20)	default '尚未阅读',	--客户要求能看到接收人是否已经看过。[RecipientDelTime]	[nvarchar](20)	default '尚未删除',	--储存删除消息时间[RecipientAllDel]	[nvarchar](20)	default '尚未彻底删除'--不再显示在已删除消息栏
)
alter table [dbo].[Recipient] add constraint pk_recipient primary key(RecipientID);
go
--附件表
create table [dbo].[Attachment]
(AttachmentID	[int]		identity(1,1),	--附件IDAttachmentName	[nvarchar](50)	not null,		--附件名称AttachmentFilePath  [nvarchar](100)	not null,		--附件存放类型AttachmentType	[nvarchar](20)	not null,		--附件文件类型AttachmentDateTime	[datetime]		not null,	--附件上传时间AttachmentSource		[nvarchar](20)	not null,	--附件来源:消息、文章、上交?AttachmentSourceID	[int]		not null,	--附件来源ID
)
alter table [dbo].[Attachment] add constraint pk_Attachment primary key(AttachmentID)
go--每月上传时间表
create table [dbo].[Time]
(TimeID		[int]		identity(1,1),	--表时间IDTimeName	[nvarchar](20)	not null,		--时间变量名TimeContent	[datetime]		default getdate()	--时间变量值
)
alter table [dbo].[Time] add constraint pk_timeid primary key(TimeID)
go
代码
--连接主数据库
use Master
go

--如果数据库simpleoa 存在,则先删除simpleoa。
if exists (select * from sysdatabases where name='simpleoa')
drop database simpleoa
go

--创建simpleoa数据库
create database simpleoa
go

--
use simpleoa
go

--创建用户表
create table [dbo].[User]
(
[UserID] int Identity(1,1) not null,--用户ID
[UserLoginName] nvarchar(20) not null, --用户登录名
[UserName] nvarchar(20) not null, --用户姓名
[UserPassword] nvarchar(20) not null, --用户密码
[UserRegister] nvarchar(20) default getdate(), --用户注册时间
[UserUp] bit default 'true', --是否需要上交
[UserInfo] nvarchar(200) not null --备注 --
)
alter table [dbo].[User] add constraint pk_user primary key(UserID);
go


--创建部门表
create table [dbo].[Department]
(
[DepartmentID] [int] identity(1,1) not null, --部门ID
[DepartmentNum] [nvarchar](20) not null, --部门编号
[DepartmentName] [nvarchar](20) not null, --部门名称
[UserID] [int] not null, --部门负责人ID
[DepartmentInfo] [nvarchar](200) not null --部门备注
)
alter table [dbo].[Department] add constraint pk_department primary key(DepartmentID);
go
--添加外键约束
--
alter table Department add constraint dep_ref_use foreign key(UserID) references [dbo].[User](UserID)
--
go

--创建消息表
create table [dbo].[Message]
(
[MessageID] [int] identity(1,1) not null, --消息ID
[MessageSender] [int] not null, --外键
[MessageSubject] [nvarchar](50) default getdate(), --消息主题
[MessageBody] [nvarchar](500) not null, --消息内容
[MessageDataTime] [datetime] default getdate(), --发送消息时间
[MessageAttachment] [bit] default 'false' --是否含有附件
)
alter table [dbo].[Message] add constraint pk_MessageID primary key (MessageID);
go
--消息接收人表:
create table [dbo].[Recipient]
(
[RecipientID] [int] identity(1,1) not null, --接收人ID
[MessageID] [int] not null, --外键
[RecipientRead] [bit] not null, --是否读过
[RecipientDel] [bit] not null, --是否删除(显示在已删除消息栏)
[RecipientReadTime] [nvarchar](20) default '尚未阅读', --客户要求能看到接收人是否已经看过。
[RecipientDelTime] [nvarchar](20) default '尚未删除', --储存删除消息时间
[RecipientAllDel] [nvarchar](20) default '尚未彻底删除'--不再显示在已删除消息栏
)
alter table [dbo].[Recipient] add constraint pk_recipient primary key(RecipientID);
go
--附件表
create table [dbo].[Attachment]
(
AttachmentID
[int] identity(1,1), --附件ID
AttachmentName [nvarchar](50) not null, --附件名称
AttachmentFilePath [nvarchar](100) not null, --附件存放类型
AttachmentType [nvarchar](20) not null, --附件文件类型
AttachmentDateTime [datetime] not null, --附件上传时间
AttachmentSource [nvarchar](20) not null, --附件来源:消息、文章、上交?
AttachmentSourceID [int] not null, --附件来源ID
)
alter table [dbo].[Attachment] add constraint pk_Attachment primary key(AttachmentID)
go

--每月上传时间表
create table [dbo].[Time]
(
TimeID
[int] identity(1,1), --表时间ID
TimeName [nvarchar](20) not null, --时间变量名
TimeContent [datetime] default getdate() --时间变量值
)
alter table [dbo].[Time] add constraint pk_timeid primary key(TimeID)
go

 

最近偶然接到这样一个小项目,所以认真做一下。

1,消息模块设计:

 

     方案一:A给B,C,D发送信息,则在消息表中生成3条信息,接收人分别是B,C,D,并有Bool表示是否查看过。

     方案二:A给B,C,D发送信息,在表A中生成一条信息 ,表B中保存消息ID,和接收人分别是B,C,D的3条信息。(优点,当消息字数多时,能有效节省数据库空间)

     关于消息附件:设计表FuJianBiao ,每个附件记录引用消息表ID,可实现一条消息附带多条附件。

 

2,用户及权限模块设计:

    

 

用户角色表关联用户表和角色表,角色功能表关联角色表和功能表,都是多对多关系。每个用户有多个角色,每个角色也有多个用户;每个角色有多个功能,每个功能可以对应多个角色,由于该项目对权限要求明确而且很简单,所以不必这样设计用户权限系统。简单合适就好。

 

3,部门管理模块(管理员)设计

设计部门表

 

4,文档上传管理模块:

 

 

5,服务器文件管理模块:

 

 

 

转载于:https://www.cnblogs.com/netact/archive/2010/12/08/1900568.html

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

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

相关文章

通过java理解linux,Java继承的理解

继承:1)概念把多个类中相同的成员给提取出来定义到一个独立的类中。然后让这多个类和该独立的类产生一个关系,这多个类就具备了这些内容。这个关系叫继承。1.1)定义类时,通过“继承”一个现有的类,子类可以具有父类中的所有属性和…

LeetCode 373. 查找和最小的K对数字(自定义优先队列BFS)

1. 题目 给定两个以升序排列的整形数组 nums1 和 nums2, 以及一个整数 k。 定义一对值 (u,v),其中第一个元素来自 nums1,第二个元素来自 nums2。 找到和最小的 k 对数字 (u1,v1), (u2,v2) … (uk,vk)。 示例 1: 输入: nums1 [1,7,11], nums2 [2,4,…

Android中使用Thread线程出现的问题

很多初入Android或Java开发的新手对Thread、Looper、Handler和Message仍然比较迷惑,衍生的有HandlerThread、java.util.concurrent、Task、AsyncTask由于目前市面上的书籍等资料都没有谈到这些问题,今天Android123就这一问题做更系统性的总结.  Androi…

linux防火墙的复规则,Centos下iptables防火墙规则编辑方法 - YangJunwei

今天整理一下Centos下iptables防火墙规则的保存、清除等编辑方法。如已经安装,请跳过。$ yum install iptables二、查看 iptables 防火墙已有规则以下四种方法任选其一即可。$ service iptables status$ /etc/init.d/iptables status (此方法为上一方法的路径执行版…

Blend设计VSM

Silverlight中的ControlTemplate(1)-概念 Silverlight中的ControlTemplate(2)-概念 Silverlight中的ControlTemplate(3)-Blend设计ControlTemplate 上一篇我是通过Blend简单的演示如何修改ControlTemplate,这一篇关注VSM这个部分。 概念的东…

Pandas入门3(dtype+fillna+replace+rename+concat+join)

文章目录5. dtype 数据类型6. Missing data 缺失值6.1 查找缺失值 pd.isnull(),pd.notnull()6.2 填补缺失值 fillna(),replace()7. Renaming and Combining 重命名、合并7.1 Renaming 重命名7.2 Combining 合并数据learn from https://www.kaggle.com/l…

Linux连接状态为syn_recv,linux 服务器 syn*** 大量SYN_RECV状态处理

1、查看连接状态netstat -nat | awk /^tcp/{S[$NF]}END{for (a in S) print a,S[a]}SYN_RECV表示正在等待处理的请求数;ESTABLISHED表示正常数据传输状态;TIME_WAIT表示处理完毕,等待超时结束的请求数。状态:描述CLOSED&#xff1…

LeetCode 388. 文件的最长绝对路径(不用栈,前缀和)

1. 题目 假设我们以下述方式将我们的文件系统抽象成一个字符串: 字符串 "dir\n\tsubdir1\n\tsubdir2\n\t\tfile.ext" 表示: dirsubdir1subdir2file.ext目录 dir 包含一个空的子目录 subdir1 和一个包含一个文件 file.ext 的子目录 subdir2 。 字符串 "dir\n…

使用Delphi自带的TDockTabSet组件实现停靠功能(Jeremy North)

源地址:http://edn.embarcadero.com/article/33446 摘要: Instructions on how to use the TDockTabSet component to make advanced docking user interfaces. Introduction This article discusses the use of the TDockTabSet component that was originally int…

linux下面 r和 n的区别,【冷知识】关于/r与/n以及 /r/n 的区别总结

首先:\r就是"回到行首",\n就是"到下一行"即:\r是回车,\n是换行,前者使光标到行首,后者使光标下移一格。通常用的Enter是两个加起来的,即\r\n直接这么说你可能没啥感觉,但是真正到了编码…

LeetCode 417. 太平洋大西洋水流问题(BFS/DFS)

文章目录1. 题目2. 解题2.1 BFS 广度优先搜索2.2 DFS 深度优先搜索1. 题目 给定一个 m x n 的非负整数矩阵来表示一片大陆上各个单元格的高度。 “太平洋”处于大陆的左边界和上边界,而“大西洋”处于大陆的右边界和下边界。 规定水流只能按照上、下、左、右四个方…

用jdbc连接各数据库驱动

sql server 2000下的连接串:DRIVER"com.microsoft.jdbc.sqlserver.SQLServerDriver";URL"jdbc:microsoft:sqlserver://localhost:1433;databaseNamessoDemo;usersa;password1"; sql server 2005下的连接串:private static final Str…

安装linux出现基础系统出错,Linux系统出错提示信息详解

ERROR PCI: cannot allocate(无法指派)这样的错误有许多,他们主要在启动系统时出现。他们有一个共同的起因:错误的电源管理行为。罪魁祸首是一个叫做ACPI的东西,即高级配置与电源接口。尽管他是一种电源管理标准,但在十几年的时间…

vCard 格式

最近在做联系人的一些功能,当然是有必要了解一下vCard文件的格式,格式大致如下: vCard 2.1: 1: BEGIN:VCARD 2: VERSION:2.1 3: N:Gump;Forrest 4: FN:Forrest Gump 5: ORG:Bubba Gump Shrimp Co. 6: TITLE:Shrimp Man 7: TEL;WORK;V…

c语言基本数据类型常量,C语言基础学习基本数据类型-变量和常量

变量和常量什么是变量和常量?有些数据在程序运行前就预先设定,并在运行过程中不发生变化,称之为常量;有些数据在程序运行中可能发生变化或被赋值,称之为变量。使用变量前必须先声明一个变量。变量定义的语法是&#xf…

C++ 下一代标准库 tr1中默认的哈希 FNV hash

FNV是 Glenn Fowler, Landon Curt Noll, and Phong Vo 三人的缩写。 FNV-1 哈希算法的核心思想如下: hash offset_basisfor each octet_of_data to be hashed hash hash * FNV_prime hash hash xor octet_of_data return hash实现源码 uint32_t fnv_hash…

LeetCode 416. 分割等和子集(动态规划)

1. 题目 给定一个只包含正整数的非空数组。 是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200 示例 1: 输入: [1, 5, 11, 5] 输出: true 解释: 数组可以分割成 [1, 5, 5] 和 [11].示例 …

c语言格式错误pe,C语言PE文件filebuffer到imagebuffer的错误

// 代码节空白添加.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include #include int FileBuffers(PVOID* FileBuffer){//传入的FileBufferLPVOID PtempBuffer;FILE* f fopen("C:\\Users\\Administrator\\Desktop\\PET…

2011年影响3G手机发展四大因素

今晨闻讯,中电信明年3季度将推出iPhone。据称CDMA版本的iPhone推出,对中国电信意义重大,售价会高于WCDMA版。联通、移动、电信争夺“苹果血案”将继续上演。 截止2010年12月31日,中国3G用户不超过5000万。而工信部落实3G发展规划是…

c语言字符数组实参 形参,c语言基础(3) 数组和指针作为实参和形参的问题

字符串char a[]"abc";printf("%s",a);fgets(a,100, stdin) //安全的字符串输入函数printf("%s",a);scanf("%*[^\n]"); //两个scanf清空输入缓存scanf("%*c");int 值作为实参 指针作为形参void xchange1(int *n1,int *n2)…