人事管理系统(数据库课程设计)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据库》实习报告
课题:人事管理系统
课程名称:数据库原理及应用
学生XX:
学生学号:
所在专业:计算机科学与技术
所在班级:
指导老师:徐龙琴
成绩:
目录设计总说明3
1.人事管理系统概述4
1.1研究背景4
1.2意义及目的开发4
2.系统需求分析5
2.1开发环境和软件5
2.2系统设计与功能分析5
3.数据库设计6
3.1 系统概念结构设计6
3.1.1系统功能模块图6
3.1.2数据流程图7
3.2 系统逻辑结构设计8
3.3 物理结构设计10
3.4 数据库关系图11
4.系统模块设计概述14
4.1用户登录模块14
4.2系统管理模块14
4.3信息管理模块14
4.4信息查询模块15
4.5其他模块15
5.系统运行与测试16
5.1用户登录16
5.2系统管理16
5.3信息管理17
5.4信息查询19
5.5其他模块20
5.5.1关于20
5.5.2计算器20
5.5.3退出20
5.6优缺点自我评价20
6.课程设计总结21
7.附录(代码)22
参考文献35
设计总说明
1.设计概况
名称:人事管理系统
用途:学校等机构
功能:实现对员工信息的管理与维护等功能
2.设计说明
学生学籍管理系统,可用于学校等机构的学生信息管理,查询,更新与维护,使用方便,易用性强,图形界面清晰明了。
该软件用java语言编写,用SQLServer2005数据库作为后台的数据库进行信息的存储,用SQL语句完成添加,查询,修改,删除的操作。
用ODBC驱动实现前台Java与后台SQL 数据库的连接。
Java语言跨平台性强,可以在windows,linux,ubuntu等系统下使用,方便简单,安全性好。
SQLServer2005数据库高效安全,两者结合可相互利用各自的优势。
该系统实现的大致功能:
系统功能的基本要求:
➢员工各种信息的输入,包括员工的基本信息、学历信息、婚姻状况信息、职称等。
➢员工各种信息的修改;
➢对于转出、辞职、辞退、退休员工信息的删除;
➢按照一定的条件,查询、统计符合条件的员工信息;至少应该包括每个员工详细信息的查询、按婚姻状况查询、按学历查询、按工作岗位查询等,至少应该包括按学历、婚姻状况、岗位、参加工作时间等统计各自的员工信息;
➢对查询、统计的结果打印输出。
3.本系统只实现了基本操作功能,对于一些更大型、属性更多、关系更复杂的企业,便利性和安全性仍有不足,使用过程中造成的不便还请谅解!
1.人事管理系统概述
1.1研究背景
人事管理系统是企业管理系统中不可缺少的重要组成部分,它的内容对于企业的决策者和管理者来说都至关重要,所以人事档案管理系统应该能够为用户提供充足的信息和快捷的查询手段。
但一直以来人们使用传统人工的方式管理文件档案,这种管理方式存在着许多缺点,如:效率低、XX性差,另外时间一长,将产生大量的文件何数据,这对于查找、更新和维护都带来了不少的困难。
随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
1.2意义及目的开发
作为计算机应用的一部分,使用计算机对人事档案信息进行管理,具有着手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、XX性好、寿命长、成本低等。
这些优点能够极大地提高人事档案管理的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。
因此,开发这样一套管理软件成为很有必要的事情。
本系统针对以上缺点能够极大地提高学生信息管理的效率,也是科学化、正规化的管理,与世界接轨的重要条件。
所以如何自动高效地管理信息是这些年来许多人所研究的。
一个健全的人事管理系统是一个学校或某个集体单位正常运作的必要条件,使人事管理方便快捷而又清晰,面对各种不同种类的信息,需要合理的数据库结构来保存数据信息以及有效地程序结构来支持各种数据的操作的执行。
实现集体单位管理系统化,规X化和自动化,从而达到提高人事管理的工作效率和工作质量的目的。
2.系统需求分析
2.1开发环境和软件
本学籍采用Java语言编写前台程序,后台采用SQL Server2005软件管理数据库,调试和运行皆由Eclipse SDK v3.5.0完成。
2.2系统设计与功能分析
系统设计的基本思想:
1.用户登录模块
2.系统管理模块
1)密码修改
2)重新登录
3)添加/删除用户
4)退出系统
3.信息管理模块
1)对学校里所有员工和院系进行统一标号,将每一位员工的信息保存在员工档案记录中
2)对新聘的员工,将其信息加入到员工档案记录中;对于转出、退休、辞职、辞退的员工,将其信息从员工档案记录中删除
3)当员工信息发生变动时,修改员工档案记录中相应的属性
4.信息查询模块
查询员工信息及院系信息
5.其他模块
1)计算器
2)关于系统的说明
3)退出
系统功能的基本要求:
➢员工各种信息的输入,包括员工的基本信息、学历信息、婚姻状况信息、职称等。
➢员工各种信息的修改;
➢对于转出、辞职、辞退、退休员工信息的删除;
➢按照一定的条件,查询、统计符合条件的员工信息;至少应该包括每个员工详细信息的查询、按婚姻状况查询、按学历查询、按工作岗位查询等,至少应该包括按学历、婚姻状况、岗位、参加工作时间等统计各自的员工信息;
➢对查询、统计的结果打印输出。
3.数据库设计3.1 系统概念结构设计
3.1.1系统功能模块图
3.1.2数据流程图
3.2 系统逻辑结构设计
画出系统E-R 图
图 4 员工实体图
员工
XX 院系编号 工资
编号 岗位编号
名族
学历
婚姻状况
性别 职称编号
XX 号
联系方式
住址
图 5 院系实体图
图 6 管理员实体图
员工
图7 各实体之间联系图(总体E-R图)
3.3 物理结构设计
数据库物理设计阶段的任务是根据具体计算机系统的特点,给给定的数据库系统确定合理的存储结构和存取方法。
所谓的“合理”主要有两个含义:一个是要使设计出的物理数据库占用较少的存储空间,另一个对数据库的操作具有尽可能高的速度。
主要体现在索引和存储结构的设置。
(1)建立索引
1.对员工信息表在属性列:员工编号上建立聚集索引,在属性列:XX号建立唯一索引;
2.对院系信息表在属性列:院系编号上建立聚集索引;
(2)存储过程
1.创建不带参数的存储过程:
查询在信息学院的员工的编号和XX
createprocedure s2
as
select员工编号,员工XX
from员工信息
where院系编号=(select院系编号
from院系信息
where院系名称='信息学院')
go
exec s2
2.创建带参数的存储过程:
根据用户输入的员工编号,输出其XX和学历
createprocedure s1
(员工编号int,员工XX nchar(10)output,学历nchar(10)output)
as
select学历=学历,员工XX=员工XX
from员工信息
where员工编号=员工编号
go
declare员工XX nchar(10),
学历nchar(10)
exec s1'2',员工XX output,学历output
select'员工XX'=员工XX,
'学历'=学历
(3)存储结构
确定数据库的存储结构主要指确定数据的存放位置和存储结构,包括确定关系,索引,日志,备份等的存储安排及存储结构,以及确定系统存储参数的配置。
将日志文件和数据库(表,索引等)分别放在不同的磁盘,可以改进系统的性能,提高系统的安全性,所以,系统应将日志文件存放在不同的磁盘上。
3.4 数据库关系图
关系模型
(1)岗位信息表(岗位编号,岗位名称):其中岗位编号为主键;
(2)用户表(管理员ID,密码):管理员ID为主键;
(3)员工信息表(员工编号,员工XX,性别,院系编号,岗位编号,职称编号,
婚姻状况,民族,学历,联系方式,住址,XX号,工资):其中员工编号为主键,院系编号、岗位编号、职称编号均为外键;
(4)院系信息表(院系编号,院系名称):其中院系编号为主键;
(5) 职称信息表(职称编号,职称名称):其中职称编号为主键。
数据库表
(1)岗位信息表:
(2)用户表:
(3)员工信息表:
(4)院系信息表:
(5)职称信息表:
4.系统模块设计概述
4.1用户登录模块
该模块用于管理员的登录,后台数据库的用户表中给出了三个管理员ID和相对应的密码,只有输入正确方可进入系统。
4.2系统管理模块
功能如下图所示:(具体见系统运行与测试此模块)
4.3信息管理模块
功能如下图所示:1)对学校里所有员工和院系进行统一标号,将每一位员工的信息保存在员工档案记录中
2)对新聘的员工,将其信息加入到员工档案记录中;对于转出、退休、辞职、辞退的员工,将其信息从员工档案记录中删除
3)当员工信息发生变动时,修改员工档案记录中相应的属性
(见系统运行与测试此模块)
4.4信息查询模块
功能如下图所示:(具体见系统运行与测试此模块)
4.5其他模块
此模块主要用于显示此系统的运行环境、开发环境等信息,考虑到管理员可能要用到数值、统计等计算等,我们还提供了计算器。
5.系统运行与测试5.1用户登录
5.2系统管理
5.3信息管理
5.4信息查询
5.5其他模块
5.5.1关于
5.5.2计算器
5.5.3退出
主界面左边一列最下一个即为退出按钮。
5.6优缺点自我评价
优点:
(1)Java语言跨平台性强,可以在windows,linux,ubuntu等系统下使用,方便简单,安全性好。
SQLServer2005数据库高效安全,两者结合可相互利用各自的优势;(2)此系统界面整洁大方,功能较强大,根据界面的布局提示,用户可快速方便地操作,考虑到用户可能要进行统计和数值运算,更加体现了人性化的设计构思;
(3)后台的数据库设计基本符合3NF的要求,表格设计了五X,每X表的属性都根据实
际情况定义类型和相应的约束,基本涵盖了一个小型企业需要的信息,表和表之间的关系(外键与主键的建立)也基本符合实际要求,为了便于快速查询信息,建立了聚集索引和唯一索引,也建立了有参数和无参数的存储过程;
(4)此系统只能供有权限的管理员登录与操作,提高了安全性。
缺点:
(1)对于员工信息表,当时忘了加“出生日期”这一重要属性,接近尾声时才发现,可是由于时间紧迫,没有修改;
(2)五X表之间,岗位信息表和职称信息表与其他表的联系不是太密切,应当直接加入属性,也是由于时间紧迫,没有修改,照成了数据冗余;
(3)建立的存储过程在界面代码中未调用,用户只是管理员类型,没有设置具体的权限,使得其他人员无法操作;
(4)功能强大的同时,代码相应比较多,虽然注释了不少,可对于普通用户来说,看起来还是比较不方便,这些代码也照成了一定程度上的资源浪费;
(5)对于员工信息的查询,只能直接显示院系、职称、岗位编号,无法显示相应的信息。
6.课程设计总结
在我看来,数据库课程设计主要的目标是利用课程中学到的数据库知识和技术较好的开发设计出数据库应用系统,去解决各行各业信息化处理的要求。
通过这次课程设计,可以巩固我们对数据库基本原理和基础理论的理解,掌握数据库应用系统开发的基本方法,进一步提高我们综合运用所学知识的能力。
当我们先确定下来要做的题目时,并不是急着着手写程序。
而是大家一起商量这个系统概述、系统目标、系统需求、业务流程分析、数据流程分析和数据词典,做好这些工作以后,我们各个组员作了一些分工。
在主要功能方面我主要负责实现添加和删除用户、用户密码修改的功能的实现,相对于而言,我的工作比较轻松,其中加入了一个计算器类,主要负责计数,这是一个人性化的考虑在里面。
我们的分工不同,遇到的困难自然也就不一样了,我们平时都是独立做自己的那一部分,但是会及时将自己的进展告知组员,以便一个的系统的完美完成。
当然我们也会集中起来探讨一下各自遇到的问题,大家共同想办法解决,搜索资料、
借阅大量书本、向其他同学请教等等都是我们解决问题的方式,最终在大家的努力下,不太完美却是很认真完成的系统诞生了!辛苦在这时显得是那么苍白无力,兴奋的尽头淹没了所有的辛苦。
以前也做过课程设计,但是这次的课程设计涉及到的开发工具不一样了,最主要的不一样体现在我们要用到两个开发平台,我们不仅要做出前台数据库,还要与后台开发的数据库进行连接,这是一个全新的认识:我们不可能将大量的数据直接放在代码之中。
对于SQL 2005可以熟练的应用,主要得益于老师要求我们平时做的一些实验,所以在后台的设计和操作没有花费太多的时间,虽然平时抱怨实验太多,这个时候还是不会忘记感谢老师平时的严格要求。
后台的开发对我来说真的是空前的挑战,首先涉及到的Java语言是在老师的要求下,自己在图书馆借书学得,绝对的半桶水,困难很大也很多,在组员的帮助下也算成功的克服了那些困难,得到一个圆满的结局!当我遇到错误的时候,感到很受打击;值得欣慰的是,在组员的帮助和大量参考书的查阅下,最终成功了!
这次课程设计让我懂得遇到困难永不放弃的重要性,我知道了团队合作的重要性,我领悟了只有坚持不懈才会取得胜利.
7.附录(代码)
关于类:
主要功能:显示人事管理系统的一些相关信息
源代码:
package a;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
public class About extends JInternalFrame {
JLabel label = new JLabel("运行环境:Windows");
JLabel labe2 = new JLabel("开发环境:JAVA,SQL Server"); JLabel labe3 = new JLabel("制作人员:郝中奎、马家权、童孟丹"); JLabel labe4 = new JLabel("对应学号:7;1;2");
public About(){
setTitle("关于");
Container con=getContentPane();
con.setLayout(new GridLayout(4,1));
con.add(label);
con.add(labe2);
con.add(labe3);
con.add(labe4);
con.setBackground(Color.white);
setResizable(false);
setSize(380,220);
setVisible(true);
setClosable(true);
}
}
添加和删除用户类:
主要功能:用于添加和删除管理员的XX信息
源代码:package a;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjavax.swing.utton;
importjavax.swing.oBox;
importjavax.swing.JLabel;
importjavax.swing.JOptionPane;
importjavax.swing.JPasswordField;
importjavax.swing.JTextField;
public class AddDeleteUser extends javax.swing.JInternalFrame {
privateuttonbutACancel,butDCancel,butDelete,butOk; privateoBoxcbUserName;
privateJLabel jLabel1,jLabel2,jLabel3,jLabel4,jLabel5; privateJPasswordField pas1,pas2,pas3; privateJTextFieldtxtname;
publicAddDeleteUser() {
initponents();
this.setVisible(true);
this.setClosable(true);
this.setSize(268,350);
}
private void initponents() {
jLabel1 = new JLabel();
jLabel2 = new JLabel();
jLabel3 = new JLabel();
txtname = new JTextField();
pas1 = new JPasswordField();
pas2 = new JPasswordField();
butOk = new utton();
butACancel = new utton();
jLabel4 = new JLabel();
cbUserName = new oBox();
jLabel5 = new JLabel();
pas3 = new JPasswordField();
butDelete = new utton();
butDCancel = new utton();
getContentPane().setLayout(null);
jLabel1.setText("新用户名:");
getContentPane().add(jLabel1);
jLabel1.setBounds(30, 30, 70, 20);
jLabel2.setText("输入密码:");
getContentPane().add(jLabel2);
jLabel2.setBounds(30, 60, 70, 18);
jLabel3.setText("确认密码:");
getContentPane().add(jLabel3);
jLabel3.setBounds(30, 90, 60, 18);
getContentPane().add(txtname); txtname.setBounds(100, 30, 130, 24);
getContentPane().add(pas1);
pas1.setBounds(100, 60, 130, 24);
getContentPane().add(pas2);
pas2.setBounds(100, 90, 130, 24); butOk.setText("添加");
getContentPane().add(butOk);
butOk.setBounds(80, 130, 70, 27);
butACancel.setText("清空"); getContentPane().add(butACancel); butACancel.setBounds(160, 130, 70, 27);
jLabel4.setText("已有用户名:"); getContentPane().add(jLabel4);
jLabel4.setBounds(30, 180, 80, 18);
getContentPane().add(cbUserName); cbUserName.setBounds(100, 180, 130, 24);
jLabel5.setText("密码:"); getContentPane().add(jLabel5);
jLabel5.setBounds(30, 210, 60, 18);
getContentPane().add(pas3);
pas3.setBounds(100, 216, 130, 24);
butDelete.setText("删除"); getContentPane().add(butDelete); butDelete.setBounds(79, 260, 70, 27);
butDCancel.setText("清空"); getContentPane().add(butDCancel); butDCancel.setBounds(160, 260, 70, 27);
//将所有用用户名读出来
Database.joinDB();
String sql="select * from 用户";
try{
if(Database.query(sql)){
while(Database.rs.next()){
String name=Database.rs.getString("管理员ID");
cbUserName.addItem(name);
}
}
}
catch(Exception e){}
//为添加和取消按钮加事件-----------------------------------------
butOk.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(txtname.getText().equals("")){
new JOptionPane().showMessageDialog(null,"用户名不能为空!");
}
else if(pas1.getText().equals("")){
new JOptionPane().showMessageDialog(null,"密码不能为空!");
}
else if(pas1.getText().equals(pas2.getText())){
String sql="insert 用户values('"+ txtname.getText() +"','"+ pas1.getText() +"')"; try{
if(Database.executeSQL(sql)){
new JOptionPane().showMessageDialog(null,"添加成功!"); cbUserName.addItem(txtname.getText());
}
}
catch(Exception ea){}
}
}
});
butACancel.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
txtname.setText("");
pas1.setText("");
pas2.setText("");
}
});
//为删除和取消按钮加事件---------------------------------------
butDelete.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
String name="" + cbUserName.getSelectedItem();
String sql="select * from 用户where 管理员ID='"+ name +"'";
try{
if(Database.query(sql)){
Database.rs.next();
String pas=pas3.getText();
String password=Database.rs.getString("密码");
System.out.println(password);
if(pas.equals(password)){
String sdelete="delete from 用户where 管理员ID='"+ name +"'";
if(Database.executeSQL(sdelete)){
new JOptionPane().showMessageDialog(null,"删除成功!");
pas3.setText("");
cbUserName.removeAllItems();
String sql1="select * from 用户"; if(Database.query(sql1)){
while(Database.rs.next()){
String name1=Database.rs.getString("管理员ID");
cbUserName.addItem(name1);
}
}
}
}
else{
new JOptionPane().showMessageDialog(null,"密码不正确!");
}
}
}
catch(Exception el){
System.out.println(el);
}
}
});
butDCancel.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
pas3.setText("");
}
});
}
}
用户修改密码类:
主要功能:用于修改相应管理员XX的密码
源代码:
package a;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjava.sql.*;
public class AmendPassword extends JInternalFrame {
JLabel lbe1=new JLabel("修改密码");
JPanel p=new JPanel(); publicAmendPassword()
{
setTitle("修改密码");
p.add(lbe1);
AmendPanel panel=new AmendPanel();
Container contentPane=getContentPane(); contentPane.add(p,"North");
contentPane.add(panel,"Center");
setBounds(100, 100, 280, 260);
this.setClosable(true);
setVisible(true);
}
}
classAmendPanel extends JPanel
{
utton b1,b2;
JLabel lbe2,lbe3,lbe4,lbe5;
JPasswordField pas1,pas2,pas3;
oBoxtf;
publicAmendPanel()
{
lbe2=new JLabel("用户名:");
lbe3=new JLabel("输入旧密码:");
lbe4=new JLabel("输入新密码:");
lbe5=new JLabel("确定新密码:");
tf=new oBox();
pas1=new JPasswordField();
pas2=new JPasswordField();
pas3=new JPasswordField();
b1=new utton("确定");
b2=new utton("清空");
add(lbe2);
lbe2.setBounds(16,10,90,25);
this.add(tf);
tf.setBounds(100,10,120,25);
add(lbe3);
lbe3.setBounds(16,45,90,25);
add(pas1);
pas1.setBounds(100,45,120,25);
add(lbe4);
lbe4.setBounds(16,80,80,25);
add(pas2);
pas2.setBounds(100,80,120,25);
add(lbe5);
lbe5.setBounds(16,115,80,25);
add(pas3);
pas3.setBounds(100,115,120,25);
add(b1);
b1.setBounds(100,160,60,30);
add(b2);
b2.setBounds(160,160,60,30);
setLayout(null);
//将所有用用户名读出来
Database.joinDB();
String sql="select * from 用户";
try{
if(Database.query(sql)){
while(Database.rs.next()){
String name=Database.rs.getString("管理员ID"); tf.addItem(name);
}
}
}
catch(Exception e){}
//为确定取消按钮加事件
b1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
String name="" + tf.getSelectedItem();
System.out.println(name);
String sql="select * from 用户where 管理员ID='"+ name +"'";
System.out.println(sql);
try{
if(Database.query(sql)){
Database.rs.next();
String ps1=pas1.getText();
String password=Database.rs.getString("密码");
if(ps1.equals(password)){
if(pas2.getText().equals(pas3.getText())){
String supdate="update 用户set 密码='"+ pas3.getText()+"' where 管理员ID='"+ name +"'"; Database.executeSQL(supdate);
new JOptionPane().showMessageDialog(null,"密码更改成功!");
}
else{
new JOptionPane().showMessageDialog(null,"两次密码不同!");
}
}
else{
new JOptionPane().showMessageDialog(null,"旧密码不正确!");
}
}
}
catch(Exception el){
System.out.println(el);
}
}
});
b2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
pas1.setText("");
pas2.setText("");
pas3.setText("");
}
});
}
}
计算器类
主要功能:计算功能
源代码:package a;
importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.*;
import java.io.*;
importjava.sql.*;
public class Calculator extends JInternalFrame implements ActionListener {
privateJTextFielddisplayText=new JTextField(); privateuttonbuttonTag=new utton(); privateuttonbuttonBackspace=new utton("Backspace"); privateuttonbuttonCe=new utton("CE");
privateuttonbuttonc=new utton("C");
privateutton[] button=new utton[24];
private String[] keys={"MC","7","8","9","/","sqrt","MR","4","5","6","*","%", "MS","1","2","3","-","1/x","M+","0","+/-",".","+","="};
private String numStr1="";
private String numStr2="";
private String numsave="";
private char op;
privatebooleanfirstInput=true;
privateboolean operatorTag1=true;
privateboolean operatorTag2=true;
public Calculator(){
setTitle("计算器");
setSize(345,265);
Container pane=getContentPane();
pane.setLayout(null);
displayText.setHorizontalAlignment(JTextField.RIGHT);
displayText.setSize(320,30);
displayText.setLocation(10,10);
pane.add(displayText);
buttonTag.setSize(60,30);
buttonTag.setLocation(10,50);
pane.add(buttonTag);
buttonBackspace.setSize(110,30); buttonBackspace.setLocation(90,50); buttonBackspace.setForeground(Color.red); buttonBackspace.addActionListener(this); pane.add(buttonBackspace);
buttonCe.setSize(65,30);
buttonCe.setLocation(200,50); buttonCe.setForeground(Color.red); pane.add(buttonCe);
buttonc.setSize(65,30);
buttonc.setLocation(265,50);
buttonc.setForeground(Color.red); buttonc.addActionListener(this);
pane.add(buttonc);
intx,y;
x=10;
y=85;
for(intind=0;ind<24;ind++){
button[ind]=new utton(keys[ind]);
button[ind].addActionListener(this); button[ind].setLocation(x,y);
if(ind%6==0 || ind%6==5)
{button[ind].setSize(60,30);
x=x+60;}
else
{button[ind].setSize(50,30);
x=x+50;}
if(ind%6==0 || ind%6==4 ||ind%24==23) button[ind].setForeground(Color.red); else
button[ind].setForeground(Color.blue); pane.add(button[ind]);
if((ind+1)%6==0)
{
x=10;
y=y+30;
}
}
setVisible(true);
this.setClosable(true);
}
public void actionPerformed(ActionEvent e){
String resultStr="";
String str=String.valueOf(e.getActionmand());
charch=str.charAt(0);
if(str.equals("0")||str.equals("1")||str.equals("2")||str.equals("3")||str.equals("4")|| str.equals("5")||str.equals("6")||str.equals("7")||str.equals("8")||
str.equals("9")||str.equals(".")){
if(firstInput){
numStr1=numStr1+ch;
displayText.setText(numStr1);
}
else{
numStr2=numStr2+ch;
displayText.setText(numStr2);
}
}
else if(str.equals("+")||str.equals("-")||str.equals("*")
||str.equals("/") & operatorTag2){
if(numStr2.equals(""))
op=ch;
else{
resultStr=evaluate();
displayText.setText(resultStr);
numStr1=resultStr;
numStr2="";
op=ch;
}
firstInput=false;
//operatorTag1=false;
}
else if(str.equals("=")){
resultStr=evaluate();
displayText.setText(resultStr);
numStr1="";
numStr2="";
firstInput=true;
}
else if(str.equals("C")){
displayText.setText("");
numStr1="";
numStr2="";
firstInput=true;
}
else if((str.equals("sqrt")|str.equals("1/x")) & !numStr1.equals("")& operatorTag1){ float A=Float.parseFloat(numStr1);
float result=0;
if(str.equals("sqrt"))
result=(float)Math.sqrt(A);
if(str.equals("1/x"))
result=1/A;
numStr1=Float.toString(result);
displayText.setText(numStr1);
firstInput=false;
}
else if (str.equals("Backspace")){
String str1=displayText.getText();
if(!str1.equals("")){
displayText.setText(str1.substring(0,str1.length()-1));
if(!numStr1.equals(""))
numStr1=displayText.getText();
else
numStr2=displayText.getText();
}
}
else if(str.equals("MS")){
numsave=displayText.getText();
buttonTag.setText("M");
numStr1="";
}
else if(str.equals("MC")){
numsave="";
buttonTag.setText("");
}
else if (str.equals("MR")){
displayText.setText(numsave);
}
else if(str.equals("M+")){
}
}
private String evaluate(){
if(!numStr1.equals("") & !numStr2.equals("")){
float A=Float.parseFloat(numStr1);
float B=Float.parseFloat(numStr2);
float result=0;
switch(op){
case '+':result=A+B;break;
case '-':result=A-B;break;
case '*':result=A*B;break;
case '/':result=A/B;break;
}
returnString.valueOf(result);
}
else
return numStr1;
}
}
参考文献
【1】《数据库系统概论》(第四版)王珊萨师煊编著:高等教育2006.5
【2】《Java2实用教程》(第三版)耿祥义X跃平编著:清华大学2006.8
【3】《软件工程》(第三版)X海藩倪宁编著:人民邮电2010.2
【4】《SQL Server 2005 实用教程》国防科技大学
【5】《Java2实用教程实验指导与习题解答》(第三版)耿祥义X跃平编著:清华大学2006.10。