软件学院办公自动化系统.docx
- 文档编号:9297359
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:26
- 大小:230.99KB
软件学院办公自动化系统.docx
《软件学院办公自动化系统.docx》由会员分享,可在线阅读,更多相关《软件学院办公自动化系统.docx(26页珍藏版)》请在冰豆网上搜索。
软件学院办公自动化系统
目 录
1.设计内容1
2.概要设计10
3.详细设计12
4.程序源码15
5.程序运行与调试23
6.总结24
7.参考文献25
1.设计内容
1.1系统目标
通过办公自动化管理系统对软件学院日常办公进行管理,满足软件学院日常办公管理各方面的的需求,实现了教职员工之间消息的发送与接收功能。
本系统采用简单、方便、快捷的操作方式,使用户能够在短时间内熟练运用本系统。
系统中应具备相应的查询功能,能够使用户及时的查询到所需的基本信息。
系统流程图如下:
图1-1软件学院办公自动化系统系统流程图
1.2系统功能建模
1.2.1数据流图
数据流图简称DFD,它用来描述目标系统的逻辑结构,它是由实体部分,处理部分,数据存储部分和数据流四部分组成,为了使数据流图所描述逻辑结构更加清晰,容易阅读,将数据流图作如下说明:
本系统的数据流图如下所示:
图2-1软件学院办公自动化系统顶层数据流图
1.3.1数据字典
数据字典是对数据流图的解释和说明,包含的内容如下:
(1)数据元素
名字:
教工名
别名:
描述:
教工的唯一标识,是主键
数据类型:
Integer
长度:
4
(2)数据存储
名字:
公告信息
描述:
记录公告的基本信息
编号:
D1
组成:
公告编号,公告标题,公告发布时间,发布公告员工编号,公告内容
名字:
专业信息
描述:
记录专业的信息
编号:
D2
组成:
专业序号,专业名称,专业描述
名字:
职位信息
描述:
记录职位的信息
编号:
D3
组成:
职位序号,职位名称,工作描述
名字:
教工信息
描述:
记录教工的基本信息
编号:
D4
组成:
姓名,性别,出生日期,学历,职称,专业,职位,电话,地址,状态编号
名字:
在线信息
描述:
显示在线教工的信息
编号:
D5
组成:
教工序号,教工姓名,教工专业
(3)数据流
名字:
教工信息
描述:
收集教工信息
编号:
F4
组成:
姓名,性别,出生日期,学历,职称,专业,职位,电话,地址,状态编号
名字:
教工信息
描述:
处理教工信息
编号:
F8
组成:
姓名,性别,出生日期,学历,职称,专业,职位,电话,地址,状态编号
名字:
教工统计信息表
描述:
列出所有教工的信息
编号:
F12
组成:
姓名,性别,出生日期,学历,职称,专业,职位,电话,地址,状态编号
名字:
教工信息表
描述:
查询教工的相关信息信息
编号:
F13
组成:
姓名,性别,出生日期,学历,职称,专业,职位,电话,地址,状态编号,员工序号,员工姓名,员工专业
(4)数据处理
名字:
发布公告
描述:
对公告的发布
编号:
P1
输入/输出数据流:
公告信息
名字:
专业管理
描述:
对专业信息的处理
编号:
P2
输入/输出数据流:
专业信息
名字:
职位管理
描述:
对用户信息的查询
编号:
P3
输入/输出数据流:
职位信息
名字:
教工管理
描述:
对教工信息的管理
编号:
P4
组成:
教工基本信息
名字:
在线管理
描述:
对在线信息的管理
编号:
P5
组成:
在线信息
1.3.2E-R图
办公自动化系统综合E-R图如下:
图3-4软件学院办公自动化系统综合E-R图
2.概要设计
2.1体系结构设计
椐据对系统需求分析中的总体目标和具体目标部分的分析,得到办公自动化管理系统的层次图如下:
图4-1软件学院自动化管理系统的层次图
2.2代码设计的原则
代码设计是处理对象的代号或表示符号,其主要目的是方便计算机排序、检索、查找等处理。
代码设计的关键是方便用户,满足业务的要求。
(1)唯一确定性原则:
仅代表唯一的实体,分类时通常选取事物的最稳定的本质属性作为分类的基础和依据。
(2)最小长度与可扩充性原则。
(3)标准化原则:
代码的编制尽量标准化,尽量参照国家和行业标准。
(4)便于计算机处理与便于记忆的原则。
(5)合理性:
指代码结构要合理,尽量反映编码对象的特征,使代码具有分类标识作用。
(6)稳定性:
应预留足够的位置,以适应环境的变化,避免经常修改代码。
(7)可识别性:
短适宜、不用易混淆的字符,空格不能用于代码。
2.3库设计
数据库设计是管理信息系统的重要组成部分。
数据库设计是对于一个既定的环境,进行符合应用语义的逻辑设计,以及提供一个确定存贮结构和物理设计,建立实现系统目标,并能有效存取数据和数据模型。
数据库设计原则有:
(1)数据的共享性。
(2)数据独立性。
(3)数据的完整性,即保证数据库存中数据准确。
(4)灵活性。
(5)安全性与保密性,做到对数据指定保护级别和安全控制。
2.3安全保密设计
2.4.1数据安全性
数据保存在专门的数据库服务器上,这样可以避免在本地误操作或者由于硬件的故障造成数据的丢失。
2.4.2录用户的安全性
对用户采取用户名、密码、权限的三重方式进行验证,增加了系统的安全性和信息的保密。
2.4.3作安全性
对系统中的部分操作,只有具有相应角色的用户才能进行对后台数据的处理和报表的打印操作。
更加了操作的规范性。
3.详细设计
主要功能模块的程序流程图:
用户登录模块程序流程图
公告管理模块程序流程图
教工管理模块程序流程图
4.程序源码
部分代码如下:
packageoa.sys;
importjava.sql.*;
importjavax.sql.*;
importjavax.naming.*;
publicclassDb{
privateConnectioncon;
privateStatementstmt;
privateResultSetrs;
privatePreparedStatementpstmt;
publicstaticinterror=0;
publicstaticsynchronizedConnectiongetCon()throwsException{
Contextctx;//上下文
DataSourceds;
try{
ctx=newInitialContext();
ds=(DataSource)ctx.lookup("java:
comp/env/jdbc/OA");
System.err.println();
System.err.println("数据连接+"+(++error));
returnds.getConnection();
}catch(SQLExceptione){
System.out.print(e);
throwe;
}
catch(NamingExceptione){
System.out.print(e);
throwe;
}
}
publicStatementgetStmtread(){
try{
con=getCon();stmt=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
}catch(Exceptione){
System.out.println("getStmtread");
System.out.println(e.getMessage());
}
returnstmt;
}
publicintgetRowCount(Stringsql){
intcount=0;;
try{
stmt=this.getStmtread();
rs=stmt.executeQuery("SELECTCOUNT(*)FROM"+sql);
rs.getMetaData();
if(rs.next()){
count=rs.getInt
(1);
}else{
count=-1;
}
}catch(Exceptione){
System.out.println("getRowCount");
System.out.println(e.getMessage());
count=-2;
}finally{
this.close();
}
returncount;
}
分页显示的编写
在进行数据库查询操作时,往往会遇到数据量很大的情况,如果将所有数据在一个页面中显示是不现实的,因为这会给用户带来操作上的不方便,这是不愿意看到的,因此有必要将分页显示封装在一个类中,以提高这段代码的重用性。
本系统用做分页显示的代码如下:
packageoa.sys;
importoa.data.*;
importjava.util.*;
importjava.sql.*;
publicclassContact{
privateStringstate;//教工状态
privateStringjob;//教工职位
privateStringdep;//教工所在专业
privateResultSetrs1;
privateStatementstmt1;
privateintstateid;//教工状态序号
privateStringaddr;//教工住址
privateStringtel;//电话
privateintjobid;//教工职位序号
privateintdeid;//教工所在部门序号
privateStringpost;//教工职称
privateStringlearn;//学历
privateStringbirthday;//出生日期
privateintsex;//性别
privateStringname;//姓名
privateintid;//教工ID号
privateStatementstmt=null;
privateResultSetrs=null;
privateDbdb=newDb();
Collectioncoll;
publicContact()throwsException{
Calendardd;
stmt=db.getStmtread();
coll=newArrayList();
}
publicintgetCount()throwsException{
intret=0;
Stringsql="SELECTcount(*)FROMeminfo";
rs=stmt.executeQuery(sql);
if(rs.next()){
ret=rs.getInt
(1);
}
returnret;
}
publicPagelistData(Stringpage)throwsException{
try{
Pagepages=newPage(this);
intpageNum=Integer.parseInt(page);
stmt=db.getStmtread();
Strstr=newStr();
Stringsql="SELECTTOP"+pageNum*pages.rowsPerPage+"*FROMeminfo";
rs=stmt.executeQuery(sql);
inti=0;
while(rs.next()){
if(i>(pageNum-1)*pages.rowsPerPage-1){
id=rs.getInt
(1);
name=rs.getString
(2);
sex=rs.getInt(3);
birthday=rs.getString(4);
learn=rs.getString(5);
post=rs.getString(6);
deid=rs.getInt(7);
jobid=rs.getInt(8);
tel=rs.getString(9);
addr=rs.getString(10);
stateid=rs.getInt(11);
stmt1=db.getStmtread();
rs1=stmt1.executeQuery("SELECTNameFROMdepartmentWHEREdepartmentid="+deid);
if(rs1.next()){
dep=rs1.getString
(1);
rs1.close();
stmt1.close();
db.close();
}
stmt1=db.getStmtread();
rs1=stmt1.executeQuery("SELECTNameFROMjobWHEREjobid="+jobid);
if(rs1.next()){
job=rs1.getString
(1);
rs1.close();
stmt1.close();
db.close();
}
stmt1=db.getStmtread();
rs1=stmt1.executeQuery("SELECTNameFROMemstateWHEREstateid="+stateid);
if(rs1.next()){
state=rs1.getString
(1);
rs1.close();
stmt1.close();
db.close();
}
//字符转换
name=str.outStr(name);
birthday=birthday.substring(0,10);
dep=str.outStr(dep);
job=str.outStr(job);
state=str.outStr(state);
learn=str.outStr(learn);
post=str.outStr(post);
tel=str.outStr(tel);
addr=str.outStr(addr);
Eminfoeminfo=newEminfo();
eminfo.setId(id);
eminfo.setName(name);
eminfo.setSex(sex);
eminfo.setBirthday(birthday);
eminfo.setLearn(learn);
eminfo.setPost(post);
eminfo.setDepartment(dep);
eminfo.setJob(job);
eminfo.setTel(tel);
eminfo.setAddr(addr);
eminfo.setState(state);
coll.add(eminfo);
}//if
i++;
}//while
db.close();
pages.curPage=pageNum;
pages.coll=coll;
returnpages;
}catch(Exceptione){
e.printStackTrace();
throwe;
}
}
publicCollectiongetResult()throwsException{
returncoll;
}
}
5.程序运行与调试
5.1测试原则及测试方法概述
进行软件测试是为了发现错误而不断执行程序的过程。
或者说,软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例,并利用这些测试用例去运行程序,以发现程序错误的过程按顺序逐个对测试项目做出说明。
5.2软件测试结论
5.2.1软件能力
在测试过程中发现了许多问题,经过修改使其逐渐完善,当然还有很多隐藏的问题,由于某些原因没有暴露出来。
总而言之,该系统有一定的错误校验能力,可以运行。
5.2.2缺陷和限制
(1)首先,界面的设计不太美观。
(2)使用的数据库的安全性比较差。
(3)报表打印比较粗糙。
5.2.3建议
(1)报表的打印使用的是浏览器自带的打印功能,建议以后要计进一步完善打印功能。
(2)DBMS使用的是SQLServer,为了今后的发展可以升级为ORACL数据库。
(3)设计使用的技术是JSP技术,在网页中嵌入代码的形式,代码繁多,看起来比较乱,建议以后可以在STRUTS框架下开发,规范编程。
5.2.4测试结论
经过上面的综合测试以后,我将发现的问题和存在的错误进行了改正,本系统有一定的健壮性。
6.总结
通过此次课程设计,使得我对软件工程这门课程的学习有了更深刻的认识和理解,将课堂所学到的知识很好的应用于实践中,但同时也看到了自身存在的不足之处。
在软件工程中,我认识到了后期调试和维护永远重于开发阶段的任务,所以以后我会明确重心,好好努力。
软件工程课程设计对我而言是一次很好的锻炼自己,充实自己的契机,在短暂的课程设计过程中,我不仅学习了软件的初步的设计方法,更重要的是我明白了软件工程的总体设计理念,在课程设计过程中遇到的诸多困难和错误也在老师的帮助和自己的努力下,迎刃而解了,可谓是收获颇丰,课程设计的过程与平时课堂知识息息相关,很多的问题都是由于对细节性的知识点掌握不足而导致的,这也是我很好地认识到了自己积累知识的欠缺和不足,为我将来的努力指明了方向,我会积累这次软件工程课程设计的经验,吸取其中的精髓,用知识武装自己的头脑,期望将来的事业能硕果累累,步步为营。
在未来的学习和生活中,我会继续积累经验,勇于创新与实践,努力学习科学文化知识,大量阅读与本专业相关的课外书籍,争取为今后的毕业设计及工作都打下良好的基础。
7.参考文献
[1]赵池龙.实用软件工程[M].第1版.北京:
电子工业出版社,2003.
[2]贺平.软件测试教程[M].第1版.北京:
电子工业出版社,2005.
[3]王强,曹汉平.IT软件项目管理[M].第1版.北京:
清华大学出版社,2004.
[4]王行言.JAVA语言与面向对象程序设计[M].第1版:
北京:
清华大学出版社,2000.
[5]吴其庆.JSP动态网站设计教程[M].第1版.北京:
冶金工业出版社,2005.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 学院 办公自动化 系统