热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java(Eclipsejdk1.7)+SQLServer(2008r2)+JDBC4实现高校工资管理系统

##高效工资管理系统主要是实现教职工、部门、工资信息的管理一、环境搭建OS为WIN7,其余使用的平台及工具如下:1.Eclipsejdk1.7参考博客:官网下载JDK1.7的方法和



##高效工资管理系统主要是实现教职工、部门、工资信息的管理
一、环境搭建
OS为WIN7,其余使用的平台及工具如下:


1.Eclipse jdk1.7

参考博客:官网下载JDK1.7的方法和步骤(https://blog.csdn.net/liu59412/article/details/82353392)
注意:jdk的版本位数要与Eclipse的版本位数一致,我先前没注意这点,直接下载的64位的jdk(因为我的电脑OS是64位的),安装后报错才发现我的Eclipse是32位的,与安装的jdk位数不一致,后又卸载重新安装的32位的jdk1.7


2.SQL Server 2008R2

SQL Server的安装这里不详细介绍了,网上也有许多参考教程。不过有一个错误需要特别说明一下,本人在这折腾了好久
问题
无法将类型为“System.__ComObject”的 COM 对象强制转换为接口类型“Microsoft.VisualStudio.OLE.Interop.IServiceProvider”。此操作失败的原因是对 IID 为“{6D5140C1-7436-11CE-8034-00AA006009FA}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 不支持此接口 (异常来自 HRESULT:0x80004002 (E_NOINTERFACE))。 (Microsoft.VisualStudio.OLE.Interop)
解决:
错误原因应该和IE的ieproxy.dll文件有关,看了网上的解答,重装IE或许能解决,但我发现我卸载不了IE,最后从别人的电脑(同类型的机器)上拷贝了一份IE文件替换之后,问题解决了。
参考博客:
无法将类型为“System.__ComObject”的 COM 对象强制转换为接口类型“Microsoft.VisualStudio.OLE.Interop.IServiceProvider”。(https://blog.csdn.net/Shiney927/article/details/40535287)
由于上面的问题我把SQLServer重新安装了好几次,所以这里也附上卸载SQL Server的参考博客:卸载sqlserver2008,完全清除(https://blog.csdn.net/funi16/article/details/8687110)


3.sqljdbc4的安装

我安装的版本是jdbc4,下载之后直接把jdbc放在了Eclipse的项目文件夹里,之后在相应的文件夹下配置构建路径(JRE系统库右键选择即可),在添加外部JAR(X)…里打开jdbc即将其添加至引用的库里面了。
参考博客:配置eclipse通过JDBC连接SQl Server 2008R2数据库(https://blog.csdn.net/qinyf2015/article/details/54378070)
java连接sql server 2008和连接sql server 2008(完整版):https://wenku.baidu.com/view/714fb2e319e8b8f67c1cb9d4.html
最后可以进行相应的测试,我的测试代码如下:

import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
public class demo {
public static void main(String[] args) {
String user = "hhh";
String password = "hhhhhhhhhh";
Connection conn;
Statement stmt;
ResultSet rs;
String url = "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Test;";
String sql = "select * from Patient";
try {
// 连接数据库
cOnn= DriverManager.getConnection(url, user, password);
// 建立Statement对象
stmt = conn.createStatement();
// 执行数据库查询语句
rs = stmt.executeQuery(sql);
while (rs.next()) {
String id = rs.getString("PID");
String name = rs.getString("PName");
System.out.println("学号 "+id+"姓名 "+name);
}
if (rs != null) {
rs.close();
rs = null;
}
if (stmt != null) {
stmt.close();
stmt = null;
}
if (conn != null) {
conn.close();
cOnn= null;
}
} catch (SQLException e) {
e.printStackTrace();
System.out.println("数据库连接失败");
}
}
}

二、系统实现
本次实现的系统比较简单,具体的系统ER图如下所示:
学校工资管理系统ER图
根据E-R图向关系模型的转换原则,学校的工资管理系统的实体和联系可以转换为下列关系模式:

管理员(主码:用户号,密码)
教职工(主码:教工号,姓名,性别,年龄,教学背景,所属部门,职称,职务,外码:所属部门编号)
部门(主码:部门编号,部门名称,部门人数,部门负责人)
工资(主码(外码):教工号,基本工资,应加工资,应扣工资,应发工资,实发工资,工资日期,加扣标志)

1、首先需要创建关系模式:

(1)教职工表
create table Staff(--创建教职工表
Sno NCHAR(10) primary key NOT NULL,
Name VARCHAR(50) NOT NULL,
Gender CHAR(2)CHECK(Gender IN('男','女')),
Age INT NOT NULL,
Education VARCHAR(50),
Department VARCHAR(50) NOT NULL,
Zhicheng VARCHAR(50) not null,
Zhiwu VARCHAR(50) not null,
Dno NCHAR(10) foreign key references Depart(Dno) )
(2)部门表
create table Depart(--创建部门表
Dno NCHAR(10) primary key NOT NULL,
Department VARCHAR(50) NOT NULL,
Num INT NOT NULL,
Header VARCHAR(50) NOT NULL)
(3)工资表
CREATE TABLE Wage(--创建工资表
Sno nchar(10) not null primary key foreign key references Staff(Sno),
Basewage decimal,
Addwage decimal,
Reducewage decimal,
Shouldwage decimal,
Realwage decimal,
Datewage date,
Flag int )
alter table Wage add Taxwage decimal--修改工资表,添加一列个人所得税
alter table Wage add constraint c1 check(Shouldwage=Basewage+Addwage-Reducewage);
alter table Wage add constraint c2 check(Flag in(0,1));
alter table Wage add constraint c3 check(Realwage between 0 and Shouldwage);
alter table Wage add constraint c4 check(Realwage=Basewage+Addwage-Reducewage-Taxwage);
(4)用户登录表
create table UserPwd(--创建用户登录表
Sno NCHAR(10) primary key NOT NULL,
Pwd NCHAR(10) NOT NULL)
(5)管理员登录表
create table AdminPwd(--创建管理员登录表
Sno NCHAR(10) primary key NOT NULL,
Pwd NCHAR(10) NOT NULL)
**创建存储过程来统计某一个月应发的工资总和,这里以2019年12月份为例**
use [SalarySystem] --创建存储过程统计实发工资总和
go
create procedure Sum_Realwage
@Realsalary decimal output
as
select SUM(Realwage) as Sumrealwage from dbo.Wage where '2019-12-01'<=Datewage and Datewage<='2019-12-31'
go
declare @sum decimal--声明输出参数并执行存储过程
exec Sum_Realwage @sum output
print @sum
**创建触发器**
(1)工作表的插入、修改触发器(当往教职工工资项目表中插入记录或更新记录时,自动修改该职工的应发工资数和实发工资数)
create trigger wage_insert_update
on Wage for insert,update
as begin
update Wage set Shouldwage=Basewage+Addwage-Reducewage,Realwage=Basewage+Addwage-Reducewage-Taxwage where Sno in(select Sno from inserted)
end;
(2)教职工插入、删除触发器(当向教职工表里删除或增加一个员工时,部门表对应的部门人数相应变化)
create trigger delete_staff --从教职工表Staff里删除教职工,部门表Depart里的部门人数减1
on Staff after delete
as begin
update Depart set Num=Num-1 where Dno in(select Dno from deleted)
end;
create trigger insert_staff --向教职工表里增加教职工,部门表Depart里的部门人数加1
on Staff after insert
as begin
update Depart set Num=Num+1 where Dno in(select Dno from inserted)
end;

2、代码实现

(1). 登录 (增加两个JRadionButton按钮对象rbt1、rtb2和一个标志值flag,通过isSelected()方法判断登录的用户是管理员(令flag=1)还是教职工(flag=0),密码验证通过后根据flag值跳转到不同的功能主界面)

public void isLogin(int flag)//判断登录 {
getDataFromDatabase database=new getDataFromDatabase(); //新建数据库对象
String LoginID =text1.getText();//text1为教工号输入框;
String password=new String(text2.getText());
String pswdDatabase1=String.valueOf(database.getDatabySql("select Pwd from AdminPwd where Sno="+LoginID,"Pwd")); //从数据库导出管理员密码
String pswdDatabase0=String.valueOf(database.getDatabySql("select Pwd from UserPwd where Sno="+LoginID,"Pwd")); //从数据库导出教职工密码
if(flag==1&&password.equals(pswdDatabase1)){ //管理员登录
setVisible(false);
new MainWindow();//管理员的功能主界面
dispose();
}
else if(flag==0&password.equals(pswdDatabase0)){ //教职工登录
setVisible(false);
new LimitedWindow();//教职工登录的主界
dispose();
}
else if(LoginID.equals("0")&&password.equals("0")){
setVisible(false);
dispose();
}
else { //账号或密码错误,清空输入框的内容
JOptionPane.showMessageDialog(null,"用户名或密码错误","通知",JOptionPane.WARNING_MESSAGE);
g1.clearSelection();//g1是一个按钮组,包含了rbt1和rtb2,清空单击按钮 text1.setText(""); //清空输入框
text2.setText("");
}
}

(2) 数据库连接查询 (封装数据库的连接和查询方法,传入参数String sql是要执行的SQL语句、String item是从数据库返回的要查询的属性值,返回类型是String,若查询不到,返回的String为空值)

public String getDatabySql(String sql,String item){
String url = "jdbc:sqlserver://localhost:1433;DatabaseName=SalarySystem;";
try {
cOnn= DriverManager.getConnection(url, "zcf", "zhuchengfei"); 连接数据库
stmt = conn.createStatement(); // 建立Statement对象发送SQL语句
rs = stmt.executeQuery(sql); // 执行数据库查询语句
while (rs.next()) { //rs.next()返回布尔值,且光标跳转到下一行
return (rs.getString(item).trim());//返回一个具体的属性值
}
if (rs != null) { rs.close(); rs = null; }
if (stmt != null) {stmt.close();stmt = null;}
if (conn != null) { conn.close(); cOnn= null; }
return "";
}
catch (SQLException e) {
e.printStackTrace();System.out.println("数据库连接失败");
}
return "";//查询不到,返回空
}

三、参考博客

【1】官网下载JDK1.7的方法和步骤https://blog.csdn.net/liu59412/article/details/82353392
【2】无法将类型为“System.__ComObject”的 COM 对象强制转换为接口类型“Microsoft.VisualStudio.OLE.Interop.IServiceProvider”https://blog.csdn.net/Shiney927/article/details/40535287
【3】卸载sqlserver2008,完全清除https://blog.csdn.net/funi16/article/details/8687110
【4】配置eclipse通过JDBC连接SQl Server 2008R2数据库(https://blog.csdn.net/qinyf2015/article/details/54378070)
【5】java连接sql server 2008和连接sql server 2008(完整版):https://wenku.baidu.com/view/714fb2e319e8b8f67c1cb9d4.html



推荐阅读
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 使用Numpy实现无外部库依赖的双线性插值图像缩放
    本文介绍如何仅使用Numpy库,通过双线性插值方法实现图像的高效缩放,避免了对OpenCV等图像处理库的依赖。文中详细解释了算法原理,并提供了完整的代码示例。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • Java 中的 BigDecimal pow()方法,示例 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 本文介绍如何通过Windows批处理脚本定期检查并重启Java应用程序,确保其持续稳定运行。脚本每30分钟检查一次,并在需要时重启Java程序。同时,它会将任务结果发送到Redis。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 使用Python在SAE上开发新浪微博应用的初步探索
    最近重新审视了新浪云平台(SAE)提供的服务,发现其已支持Python开发。本文将详细介绍如何利用Django框架构建一个简单的新浪微博应用,并分享开发过程中的关键步骤。 ... [详细]
  • 解决JAX-WS动态客户端工厂弃用问题并迁移到XFire
    在处理Java项目中的JAR包冲突时,我们遇到了JaxWsDynamicClientFactory被弃用的问题,并成功将其迁移到org.codehaus.xfire.client。本文详细介绍了这一过程及解决方案。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
author-avatar
苦--但是依然love着你
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有