完整word版企业内部行文管理系统.docx
《完整word版企业内部行文管理系统.docx》由会员分享,可在线阅读,更多相关《完整word版企业内部行文管理系统.docx(17页珍藏版)》请在冰豆网上搜索。
完整word版企业内部行文管理系统
《数据库系统》
课程设计
课题企业内部行文管理系统
班级信息安全2班
学号1305030212
姓名蔡永龙
指导教师张黎
时间:
2015.6.15—2015.6.26
一、引言
在竞争越来越激烈的今天,企业如何提高办公效率显得越来越重要。
尤其是对于大型企业,企业内部机构复杂,条文众多,横向和纵向间经常需要沟通信息,发送行文。
如果没有—套可靠的企业内部行文管理系统,单凭文件发放,不仅效率低下,而且浪费纸张。
二、系统需求分析
内部行文管理模块的主要目标是实现对企业内部行文的编写、审核、发送、领导审批、办取结果等全过程的有效跟踪和控制,并对需要永久性记录的文件实现归档管理等,实现内部行文管理的电子化、自动化,提高部门之间的办公效率,减少纸张浪费和时间浪费,以达到快速、可靠的信息交互目的。
2.1系统功能分析
内部行文管理系统需要完成功能主要有以下几点:
●员工基本信息的输入,由后台的数据库管理员完成输入,包括员工号、姓名、部门、性别、电话号码等。
●行文管理信息系统使用人员的用户名和密码信息,每个部门有—位行文工程师,具体负责行文管理信息系统的使用,该工程师的用户名和密码后台的数据库管理预先设定。
●文稿的撰写,包括行文号、拟稿人、行文标题、时间、正文信息的输入,输入后选样要发送的部门(行文工程师)。
●所保存的未发送文稿的修改、发送。
●对方部门、行文工程师所发文的接收、查看以及评论回复。
●行文查询,可以查询本部门所发送的行文、末发送的行文以及别的部门所发送过来的行文。
●行文管理系统的使用帮助。
2.2系统功能模块设计(划分)
根据系统功能要求,可以将系统分解成几个模块来分别设计应用程序界面,如图1所示。
图3、内部行文管理系统的E—R图
2.3与其它系统的关系
图2、行文管理系统数据流程图
2.4数据流程图
内部行文管理系统的数据流程如图2所示。
三、数据库设计
3.1数据库需求分析
通过对企业内部行文管理的内容和数据流程分析,设计的数据祥和数据结构如下:
●员工基本状况。
包括的数据项有员工号、员工姓名、性别、所在部门、联系电话、联系email等
●用户口令信息。
包括的数据项有用户名和口令。
●企业部门信息:
包括的数据项有部门代码、部门名称、部门经理、部门副经理等。
●内部行文信息。
包括的数据项有文件号、撰写人、标题、正文、日期、发送标志
●内部行文处理信息。
包括的数据项有文件号、撰写人、接收人、标题、正文、日期、审核意见等。
有了上面的数据结构、数据项和数据流程,就能进行下面的数据库设计根据上面的数据流程图,可以列出以下系统所需的数据项和数据结构:
3.2数据库概念结构设计
本系统所需的数据E-R图有用户实体、员工实体、部门实体、内部行文消息实体、内部行文处理信息实体。
其中用户实体的E-R图是:
员工实体和部门实体的E-R图:
内部行文信息实体E-R图:
内部行文处理实体E-R图
系统关系图:
3.3数据库逻辑结构设计
在上面实体以及实体之间关系的基础上,形成数据库中的表格以及各个表格之间的关系。
内部行文管理系统数据库中各个表格的设计结果如下面的几个图所示。
表1用户口令表login
表2PERSONNEL员工基本状况表
表3内部行文信息表XW
表4内部行文处理信息表XWCL
表5部门信息表DEPT
表6发送标志代码表XW_FLAG
3.4数据库的建立
3.4.1数据库的建立
数据库是通过sqlserver2014创建的,打开对象资源管理器,连接到启动的数据库服务器。
新建一个数据库Enterprise。
在创建数据库表,如上图的几个表。
3.4.2初始数据的输入
初始数据包括行文是否已经发送的标志。
表7发送标志
代码
说明
0
未发送
1
已经发送
四、各功能模块的设计与实现
4.1功能说明
首先我把企业内部行文管理系统分为了登录、拟文功能、选择接收部门、行文修改、行文接收、行文查询、文件的上传和下载、员工信息的添加和查询、帮助等模块。
用户可以通过登录模块登录,也可以修改口令。
登录进去之后,有一个包含菜单的主界面,包含有拟文、行文修改、行文接收、行文查询、文件上传、文件下载。
用户可以选择不同的模块进行不同的操作。
拟文功能中系统自动获取系统的时间作为行文编号,和拟文日期。
点击发送回调转的选择发送部门的选择界面,也可以暂时保存,以后在行文修改界面再发送。
修改模块只能修改未发送的行文,只可以修改行文的内容,查询模块可以查询到所有行文,未发送和已发送行文以及输入文件号模糊匹配查询行文反馈的意见。
行文接收是按所在部门进行接收行文,文件的上传是通过选择本机内的一个文件发送到另外多个文件夹中实现模拟上传功能。
可以发送文档等多种格式的文件,文件接收可以接收到文件,还可以读取文件中的内容。
4.2用户界面设计
完成数据库创建和功能说明以后,我们可以进行下一步工作,既设计用户界面。
内部行文管理系统的窗体主要有
1、登录窗口的设计
2、口令修改窗口的设计
3、建立程序主窗口和菜单的设计
4、拟文窗口和发送对象选择窗口的设计
6、选择木发送的行文窗口、编辑行文窗口以及选择发送对象窗口的设计
7、行文接收选择窗口和行文接收处理窗口的设计
行文接收窗口
8、未发送行文查询、已发送行文查询和行文反馈查询窗口的设计
未发送行文查询
已发送行文查询
行文反馈查询
9、文件上传、文件下载窗口设计
4.3各功能模块的实现
1、登录模块的实现
登录模块由两个窗口组成,一个是登录界面,用于用户登陆使用,二是修改口令窗口,用于用户更改用户密码。
程序实现登录功能的主要代码如下:
StringdriverName="com.microsoft.sqlserver.jdbc.SQLServerDriver";
StringdbURL="jdbc:
sqlserver:
//localhost:
1433;DatabaseName=Enterprise";
StringuserName="sa";
StringuserPwd="hello";
Stringzh=l2.getText();
Stringmima=l4.getText();
Stringsql="select*fromloginwhereusers='"+zh+"'andpassword='"+mima+"'";//select语句
try{
Class.forName(driverName);
ConnectiondbConn=DriverManager.getConnection(dbURL,userName,userPwd);//连接数据库
java.sql.Statements=dbConn.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
ResultSetr=s.executeQuery(sql);
r.last();
if(r.getRow()==1){
r.beforeFirst();
this.setVisible(false);
maintt=newmain();//登录成功后跳转主界面
tt.Main(zh);}
else{JOptionPane.showMessageDialog(null,"账号或密码错误,请重新输入!
");}
}
catch(Exceptione1){
e1.printStackTrace();}
2、拟文功能模块的实现
Stringh1=t1.getText();//行文编号
Stringh2=t2.getText();//日期
Stringh3=t3.getText();//作者
Stringh4=t4.getText();//标题
Stringh5=t5.getText();//内容
Stringh6="1";//标记是否发送
ResultSetr=s.executeQuery("select*fromXWwhereXW_ID='"+h1+"'andXW_FLA=0");
r.last();if(r.getRow()==1){r.beforeFirst();//判断是否存在已有的行文编号
JOptionPane.showMessageDialog(null,"该行文编号已存在,请重新输入行文编号!
");}else{
s.executeUpdate("INSERTINTOXW(XW_ID,XW_NAME,XW_AUTHER,XW_CONTEXT,
XW_DATE,XW_FLA)VALUES('"+h1+"','"+h3+"','"+h4+"','"+h5+"','"+h2+"','"+h6+"');");//更新数据库
choosedeptdd=newchoosedept();//声明选择窗口的实体类型
dd.choose(h1,h3,h4,h5,h2);//跳转到选择部门界面
this.setVisible(false);}}
3、行文修改模块的实现
Stringid=t1.getText();
Stringcontext=t2.getText();
try
{ResultSetr=s.executeQuery("select*fromXWwhereXW_ID='"+id+"'");//查询操作r.last();if(r.getRow()==1){
r.beforeFirst();
while(r.next()){
if("0".equals(r.getString("XW_FLA"))){
JOptionPane.showMessageDialog(null,"行文修改成功!
");
s.executeUpdate("updateXWsetXW_CONTEXT='"+context+"'whereXW_ID='"+id+"'");
}else{JOptionPane.showMessageDialog(null,"不能修改已发送的行文!
","警告",JOptionPane.WARNING_MESSAGE);}
}r.close();}
else{JOptionPane.showMessageDialog(null,"账号或旧口令错误,请重新输入!
");}
}
catch(Exceptione1)
{e1.printStackTrace();}
4、行文接收模块的实现
接收模块设置了一个组合框,代
Stringstr=null;
if(user.equals("001"))str="生产部";
elseif(user.equals("002"))str="销售部";
elseif(user.equals("003"))str="财务部";
elseif(user.equals("004"))str="人事部";
elseif(user.equals("005"))str="采购部";
elseif(user.equals("006"))str="行政部";
T.setModel(newjavax.swing.table.DefaultTableModel(newObject[][]
{
{null,null,null,null,null,null,null},
{null,null,null,null,null,null,null},
{null,null,null,null,null,null,null},
{null,null,null,null,null,null,null},
{null,null,null,null,null,null,null},
},
newString[]
{
"行文编号","行文标题","行文作者","行文接受者","行文正文","日期","意见"
}
));
try
{
Class.forName(driverName);
ConnectiondbConn=DriverManager.getConnection(dbURL,userName,userPwd);
java.sql.Statements=dbConn.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
Stringsql="select*fromXWCLwhereXW_RECEIVER='"+str+"'";
ResultSetr=s.executeQuery(sql);
r.beforeFirst();
inti=0,j=0;
while(r.next())
{
T.setValueAt(r.getString("XW_ID"),i,j);
T.setValueAt(r.getString("XW_NAME"),i,j+1);
T.setValueAt(r.getString("XW_AUTHER"),i,j+2);
T.setValueAt(r.getString("XW_RECEIVER"),i,j+3);
T.setValueAt(r.getString("XW_CONTEXT"),i,j+4);
T.setValueAt(r.getString("XW_DATE"),i,j+5);
T.setValueAt(r.getString("XW_REMARK"),i,j+6);
j=0;
i++;
}
r.close();
}
catch(SQLException|HeadlessExceptione)
{
System.out.print("连接失败");
}
5、查询模块的实现
主要代码:
try
{//连接数据库代码和登陆模块一样。
ResultSetr=s.executeQuery("select*fromXWCLwhereXW_IDlike'%"+t+"%'");
r.beforeFirst();
System.out.println(r.getRow());
inti=0,j=0;
while(r.next())
{
T3.setValueAt(r.getString("XW_ID"),i,j);
T3.setValueAt(r.getString("XW_NAME"),i,j+1);
T3.setValueAt(r.getString("XW_AUTHER"),i,j+2);
T3.setValueAt(r.getString("XW_RECEIVER"),i,j+3);
T3.setValueAt(r.getString("XW_CONTEXT"),i,j+4);
T3.setValueAt(r.getString("XW_DATE"),i,j+5);
T3.setValueAt(r.getString("XW_REMARK"),i,j+6);
j=0;
i++;
}
}
catch(SQLException|HeadlessExceptione)
{System.out.print("连接失败");}
6、文件上传和下载模块
文件上传的主要代码:
publicvoidcopyFile(StringoldPath,StringnewPath){
try{
intbytesum=0;
intbyteread=0;
Fileoldfile=newFile(oldPath);
if(oldfile.exists()){//文件存在时
InputStreaminStream=newFileInputStream(oldPath);//读入原文件
FileOutputStreamfs=newFileOutputStream(newPath);
byte[]buffer=newbyte[1444];
intlength;
while((byteread=inStream.read(buffer))!
=-1){
bytesum+=byteread;//字节数文件大小
System.out.println(bytesum);
fs.write(buffer,0,byteread);
}
inStream.close();
}
}
catch(Exceptione){
System.out.println("复制单个文件操作出错");
e.printStackTrace();
}}
文件下载的主要代码:
Stringdept=(String)C1.getSelectedItem();
Stringurl2="F:
\\\\企业部门\\\\"+dept;
System.out.println(url2);
JFileChooserjFileChooser1=newJFileChooser(newFile(url2));
if(jFileChooser1.showOpenDialog(this)==0){//如果选择了文件并点击“打开”按钮
Filefile=jFileChooser1.getSelectedFile();//获取所选文件
Stringpath_name=file.toString().toLowerCase();//存放所选文件的绝对路径和文件名(转换成小写)
if(file.exists()){//如果文件存在
try{
System.out.println(path_name);
System.out.println(path_name);//打印下文件路径加文件名
if(path_name.endsWith(".txt")||path_name.endsWith(".inf")||path_name.endsWith(".ini")){//根据扩展名选择打开方式需要其他软件打开的文件这个根据需要自己写
Runtime.getRuntime().exec("NOTEPAD"+path_name);//用记事本打开因为记事本是windows自带的小工具在“开始-运行里输入notepad”就能直接打开记事本所以这里也可以直接用,不用加绝对路径
}elseif(path_name.endsWith(".mp3")||path_name.endsWith(".wma")){//需要其他软件打开的文件
Runtime.getRuntime().exec("E:
\\英雄联盟\\网易云音乐PC版\\cloudmusic.exe\""+path_name+"\"");//非系统自带的这些软件需要绝对路径加引号是为了防止文件名中带空格
}elseif(path_name.endsWith(".doc")){//可自执行的软件(部分扩展名是exe的flash文件也无法打开因为实际上还是用flash播放器打开的)
Runtime.getRuntime().exec("C:
\\Users\\永龙\\AppData\\Local\\Kingsoft\\WPSOffice\\9.1.0.5060\\office6\\wps.exe\""+path_name+"\"");
}else{
JOptionPane.showMessageDialog(this,"无法打开的文件:
"+path_name,"消息",JOptionPane.INFORMATION_MESSAGE);
}
}catch(IOExceptionex){
ex.printStackTrace();
}
}
}
5、系统实现
本系统是在基于java的Netbeans开发环境下结合sqlserver2014设计的一个企业内部行文管理系统,对企业的内部行文进行的有效管理和控制,,提高企业内部的业务水平。
软件平台:
●操作系统:
windows8.1
●数据库:
sqlserver2014
●开发工具包:
JDK1.7
●开发软件:
netbeans
●编程语言:
Java
6、结束语
本次数据库课程设计,是运用netbeans软件,通过java编程语言去实现一个企业内部行文管理系统前端,结合sqlserver数据库实现了管理系统的各个功能,这次课程设计,我感觉真的听充实的,两周时间每次都是早出晚归,当中遇到了很多在以往编程中未出现的错误和困难,还有各种奇葩问题,有时候真的感觉这课设实在是有点难啊。
最后通过不断的在网上查阅各种博客,我终于找到了解决的办法,解决了一个又一个问题。
在课程设计的过程中,我发现总是仿照指导书上的要求写,工作效率非常慢,而且总是没有思路的编程,感觉既浪费时间又浪费精力,当冷静下来后,我仔细想了想指导书上的系统需求分析,终于理清了自己的思路,明白了这个系统要实现怎么样的功能,怎样满足用户的使用,最后编程的过程少了很多思路上的疑惑。
所以我明白了只有自己认真阅读了指导书上的实验要求,还有系统的需求分析,再结合自己的理解,才能更快地更好地完成一个数据库系统。
一开始的时候,我选择的是学生信息管理系统,想着学生管理系统是和我们学生息息相关的,也是为了熟悉数据库操作,但是最后还是选择了行文管理系统,因为这样更能锻炼自己。
而且我用的前端界面开发环境并不是指导书上的那个VC的MFC环境,而是用java实现我的系统界面设计。
在设计的过程中有很多问题,很多的不明白,虽然思路清晰了,但是编程上的自以为是却阻挠了我的脚步,在编写系统的过程中,总是碰到感觉非常正确的代码,却总是编译不通过,或者是运行后没有相应的结果显示。
通过不断的修正和查阅资料,终于解决了各种不同的问题,实现了各功能模块。
还增加了一个文件操作,通过java自有的一些文件流操作,实现了将一个文件上传和下载的功能。
在这次课程设计中,真心感觉不错,在设计过程中不仅学习了一些新知识,更加巩固了一些学过的知识点。
从理论到实践,通过运用程序语言去操作数据库,提升了自己运用知识去解决实际问题的能力。