热门标签 | 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



推荐阅读
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • Java 中的 BigDecimal pow()方法,示例 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 使用C#开发SQL Server存储过程的指南
    本文介绍如何利用C#在SQL Server中创建存储过程,涵盖背景、步骤和应用场景,旨在帮助开发者更好地理解和应用这一技术。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 作为一名新手,您可能会在初次尝试使用Eclipse进行Struts开发时遇到一些挑战。本文将为您提供详细的指导和解决方案,帮助您克服常见的配置和操作难题。 ... [详细]
  • 深入解析JVM垃圾收集器
    本文基于《深入理解Java虚拟机:JVM高级特性与最佳实践》第二版,详细探讨了JVM中不同类型的垃圾收集器及其工作原理。通过介绍各种垃圾收集器的特性和应用场景,帮助读者更好地理解和优化JVM内存管理。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 构建基于BERT的中文NL2SQL模型:一个简明的基准
    本文探讨了将自然语言转换为SQL语句(NL2SQL)的任务,这是人工智能领域中一项非常实用的研究方向。文章介绍了笔者在公司举办的首届中文NL2SQL挑战赛中的实践,该比赛提供了金融和通用领域的表格数据,并标注了对应的自然语言与SQL语句对,旨在训练准确的NL2SQL模型。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
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社区 版权所有