软件工程课程设计报告.docx
《软件工程课程设计报告.docx》由会员分享,可在线阅读,更多相关《软件工程课程设计报告.docx(22页珍藏版)》请在冰点文库上搜索。
软件工程课程设计报告
(此文档为word格式,下载后您可任意编辑修改!
)
目录
1问题定义1
2可行性研究2
2.1系统流程图2
2.2高层数据流图3
2.3可行性分析3
2.3.1技术可行性3
2.3.2操作可行性3
2.3.3经济可行性3
2.4开发计划4
3需求分析4
3.1ER图4
3.2细化的数据流图5
3.3数据字典6
3.4状态转换图7
4概要设计8
4.1系统层次图8
4.2IPO表8
4.3数据库设计9
5详细设计10
5.1人机界面设计10
5.2过程设计11
5.2.1修改员工信息模块代码11
5.2.2显示员工信息模块代码15
6测试报告17
6.1修改员工信息模块17
6.2显示员工信息模块18
7总结18
参考文献19
1问题定义
关于系统规模和目标的报告书
项目名称:
人事档案管理系统
问题:
人事档案管理系统的设计
项目目标:
对单位的人事情况进行管理,完成新职工的登记、职工信息的维护、调离和退休情况的登记,并能按指定的要求完成查询、统计、排序等功能。
项目规模:
1000行代码左右
初步设想:
用Java语言编写一个简单的能达成项目目标的人事档案管理系统
可行性研究:
如下
2可行性研究
2.1系统流程图
图2-1人事档案管理系统流程图
2.2高层数据流图
图2-2人事档案管理系统数据流图
2.3可行性分析
2.3.1技术可行性
要求和目标:
本系统要求对单位的人事情况进行管理,完成新职工的登记、职工信息的维护、调离和退休情况的登记,并能按指定的要求完成查询、统计、排序等功能。
可能实现的方法:
本组准备采用java语言编写程序界面和数据处理部分,使用java链接数据库,用数据库完成人员信息的保存,修改。
用SQL语言完成对数据库中的内容进行查询排序等功能。
2.3.2操作可行性
本系统采用图形界面,有良好的中文提示和界面提示。
能保证用户能够正常使用该系统完成需求的功能。
2.3.3经济可行性
本系统为课程设计,不产生经济效益,故暂不考虑经济可行性
2.4开发计划
人事档案管理系统的粗略计划
阶段
要用的时间(天)
可行性研究
1
需求分析
3
概要设计
2
详细设计
2
实现
2
总计
10
3需求分析
3.1ER图
图3-1员工对象ER图
3.2细化的数据流图
图3-2细化的数据流图
3.3数据字典
名称:
员工信息
别名:
员工
描述:
员工的各项基本信息
定义:
员工信息=员工编号+姓名+所在部门+性别+年龄
+工资+是否退休+工龄
员工编号=4{数字}4
姓名=1{字符}4
所在部门=1{字符}10
性别=[男|女]
年龄=1{数字}2
工资=1{数字}10
是否退休=[是|否]
工龄=1{数字}2
数字=[0|1|2|3|4|5|6|7|8|9]
位置:
员工信息数据库,输出到程序界面
3.4状态转换图
图3-4人事档案管理系统状态转换图
4概要设计
4.1系统层次图
图4-1系统层次图
4.2IPO表
IPO表
系统:
人事档案管理系统
模块:
修改员工信息
编号:
1.2
作者:
任毅
日期:
2011.7.7
被调用:
信息维护1.0
调用:
输入:
员工编号X
新员工信息Y
输出:
新员工信息
处理:
IFX存在;
THEN{删除编号为X的员工信息;
添加新员工信息Y,该员工编号为X;}·
局部数据元素:
新员工信息Y
注释:
图4-2
(1)修改员工信息模块的IPO表
IPO表
系统:
人事档案管理系统
模块:
显示员工信息
编号:
2.1
作者:
任毅
日期:
2011.7.7
被调用:
信息查询2.0
调用:
输入:
输出:
员工信息表
处理:
显示全部员工信息
局部数据元素:
注释:
图4-2
(2)显示员工信息模块的IPO表
4.3数据库设计
此系统中为员工信息涉及一个名为person的数据库,数据库中包含一个名为person的表。
Person表含有8个字段,用来保存员工的各项信息。
分别为:
pID,员工编号
pname,姓名
psex,性别
pdept,所在部门
pwages,工资
pretire,是否退休
pworkyear,工龄
表设计如图:
图4-3数据库表设计
5详细设计
5.1人机界面设计
图5-1
(1)编辑员工信息模块界面图
图5-1
(2)显示员工信息模块界面图
5.2过程设计
图5-2
(1)修改员工信息模块的N-S图
图5-2
(2)显示员工信息模块的N-S图
5.2.1修改员工信息模块代码
importjava.awt.GridLayout;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.ResultSet;
importjava.sql.Statement;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JOptionPane;
importjavax.swing.JTextField;
publicclassEditpersonextendsJFrameimplementsActionListener{
**
*
*
privatestaticfinallongserialVersionUID=1L;
privateJLabelLID=newJLabel("员工编号");
privateJTextFieldTID=newJTextField();
privateJLabelLname=newJLabel("姓名");
privateJTextFieldTname=newJTextField();
privateJLabelLsex=newJLabel("性别");
privateJTextFieldTsex=newJTextField();
privateJLabelLage=newJLabel("年龄");
privateJTextFieldTage=newJTextField();
privateJLabelLdept=newJLabel("所在部门");
privateJTextFieldTdept=newJTextField();
privateJLabelLwages=newJLabel("工资");
privateJTextFieldTwages=newJTextField();
privateJLabelLretire=newJLabel("是否退休");
privateJTextFieldTretire=newJTextField();
privateJLabelLworkyears=newJLabel("工龄");
privateJTextFieldTworkyears=newJTextField();
privateJButtonBque=newJButton("查询");
privateJButtonBedi=newJButton("编辑");
Stringsql="";
publicEditperson(){
super("编辑员工信息");
this.setSize();
this.setDefaultCloseOperation(HIDE_ON_CLOSE);
this.setVisible(true);
this.setLayout(newGridLayout(9,2));
this.add(LID);
this.add(TID);
this.add(Lname);
this.add(Tname);
this.add(Lsex);
this.add(Tsex);
this.add(Lage);
this.add(Tage);
this.add(Ldept);
this.add(Tdept);
this.add(Lwages);
this.add(Twages);
this.add(Lretire);
this.add(Tretire);
this.add(Lworkyears);
this.add(Tworkyears);
this.add(Bque);
this.add(Bedi);
Bque.addActionListener(this);
Bedi.addActionListener(this);
}
@Override
publicvoidactionPerformed(ActionEvente){
TODOAuto-generatedmethodstub
if(e.getSource()==Bque)
{
StringID=TID.getText();
sql="SELECT*FROMpersonWHEREpID='"+ID+"'";
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}
catch(ClassNotFoundExceptiona){
JOptionPane.showMessageDialog(null,"lianjieshibai");
}
try{
Connectioncon;
con=DriverManager.getConnection("jdbc:
odbc:
person1","","");
Statementsta=con.createStatement();
ResultSetrs=sta.executeQuery(sql);
if(rs.next())
{
Stringname=rs.getString("pname");
Stringsex=rs.getString("psex");
Stringage=rs.getString("page");
Stringdept=rs.getString("pdept");
Stringwages=rs.getString("pwages");
Stringretire=rs.getString("pretire");
Stringworkyears=rs.getString("pworkyear");
Tname.setText(name);
Tsex.setText(sex);
Tage.setText(age);
Tdept.setText(dept);
Twages.setText(wages);
Tretire.setText(retire);
Tworkyears.setText(workyears);
}
else
JOptionPane.showMessageDialog(null,"失败");
}
catch(Exceptionee){JOptionPane.showMessageDialog(null,"jfkdalgj");};
}
if(e.getSource()==Bedi)
{
StringID=TID.getText();
Stringname=Tname.getText();
Stringsex=Tsex.getText();
Stringage=Tage.getText();
Stringdept=Tdept.getText();
Stringwages=Twages.getText();
Stringretire=Tretire.getText();
Stringworkyears=Tworkyears.getText();
sql="delete*frompersonwherepID='"+ID+"'";
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}
catch(ClassNotFoundExceptiona){
JOptionPane.showMessageDialog(null,"lianjieshibai");
}
try{
Connectioncon;
con=DriverManager.getConnection("jdbc:
odbc:
person1","","");
Statementsta=con.createStatement();
inti=sta.executeUpdate(sql);
if(i>0){
sql="INSERTINTOpersonVALUES('"+ID+"','"+name+"','"+sex+"','"+age+"','"+dept+"','"+wages+"','"+retire+"','"+workyears+"')";
sta.executeUpdate(sql);
JOptionPane.showMessageDialog(null,"更新成功");
}
else
JOptionPane.showMessageDialog(null,"更新失败");
}
catch(Exceptionee){JOptionPane.showMessageDialog(null,"jfkdalgj");};
}
}
publicstaticvoidmain(String[]args){
TODOAuto-generatedmethodstub
newEditperson();
}
}
5.2.2显示员工信息模块代码
importjava.awt.GridLayout;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.ResultSet;
importjava.sql.Statement;
importjavax.swing.JFrame;
importjavax.swing.JOptionPane;
importjavax.swing.JTextArea;
publicclassAllinfoextendsJFrame{
**
*
*
privatestaticfinallongserialVersionUID=1L;
privateJTextAreainfo=newJTextArea();
Stringsql="";
publicAllinfo(){
super("员工信息");
this.setSize();
this.setDefaultCloseOperation(HIDE_ON_CLOSE);
this.setVisible(true);
this.setLayout(newGridLayout(1,1));
this.add(info);
sql="select*fromperson";
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}
catch(ClassNotFoundExceptiona){
JOptionPane.showMessageDialog(null,"lianjieshibai");
}
try{
Connectioncon;
con=DriverManager.getConnection("jdbc:
odbc:
person1","","");
Statementsta=con.createStatement();
ResultSetrs=sta.executeQuery(sql);
Stringtext="ID\t姓名\t性别\t年龄\t所在部门\t工资\t是否退休\t工龄";
text+="\n";
info.append(text);
while(rs.next()){
info.append(rs.getString("pID")+"\t");
info.append(rs.getString("pname")+"\t");
info.append(rs.getString("psex")+"\t");
info.append(rs.getString("page")+"\t");
info.append(rs.getString("pdept")+"\t");
info.append(rs.getString("pwages")+"\t");
info.append(rs.getString("pretire")+"\t");
info.append(rs.getString("pworkyear")+"\n");
}
}
catch(Exceptionee){JOptionPane.showMessageDialog(null,"jfkdalgj");};
}
}
6测试报告
6.1修改员工信息模块
设定原数据库中含有如下图的员工信息:
图6-1
(1)数据库中原有信息
输入一个不存在的员工编号进行查询,显示查询失败:
图6-1
(2)输入错误员工号的结果
按下图所示修改存在的编号为0003的员工信息:
图6-1(3)修改员工信息
观察数据库,修改员工信息成功
图6-1(4)成功修改员工信息
6.2显示员工信息模块
能成功显示员工信息
图6-2显示员工信息
7总结
本系统基本能够完成需求分析中要求的各项功能,既能够对员工信息进行添加,编辑,、删除操作,能够查看员工信息,能够编号、年龄、工资、工龄四个条件对员工信息进行排序查看。
本系统还有很多能够改进之处。
比如本系统数据库中只设计了一个表用来存储员工信息,我设想还可以再设计一个部门信息的表,与员工信息表连接。
这样做能够更加完善系统结构,使系统更加实用。
而且,本系统还可以增加按性别,部门等条件查看员工信息的功能(比如查看开发部的所有员工)。
总之,虽然程序还有很多不足。
但是经过这次课程设计,我还是有很多收获。
在这次课程设计中,我第一次用java进行连接数据库操作,并且第一次设计比较复杂的程序界面。
使我对数据库的重要性和易用性有了更深的理解。
参考文献
[1]张海藩编著.软件工程导论(第5版).北京:
清华大学出版社,2008