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



推荐阅读
  • 分布式开源任务调度框架 TBSchedule 深度解析与应用实践
    本文深入解析了分布式开源任务调度框架 TBSchedule 的核心原理与应用场景,并通过实际案例详细介绍了其部署与使用方法。首先,从源码下载开始,详细阐述了 TBSchedule 的安装步骤和配置要点。接着,探讨了该框架在大规模分布式环境中的性能优化策略,以及如何通过灵活的任务调度机制提升系统效率。最后,结合具体实例,展示了 TBSchedule 在实际项目中的应用效果,为开发者提供了宝贵的实践经验。 ... [详细]
  • 在Ubuntu系统中配置Python环境变量是确保项目顺利运行的关键步骤。本文介绍了如何将Windows上的Django项目迁移到Ubuntu,并解决因虚拟环境导致的模块缺失问题。通过详细的操作指南,帮助读者正确配置虚拟环境,确保所有第三方库都能被正确识别和使用。此外,还提供了一些实用的技巧,如如何检查环境变量配置是否正确,以及如何在多个虚拟环境之间切换。 ... [详细]
  • Netty框架中运用Protobuf实现高效通信协议
    在Netty框架中,通过引入Protobuf来实现高效的通信协议。为了使用Protobuf,需要先准备好环境,包括下载并安装Protobuf的代码生成器`protoc`以及相应的源码包。具体资源可从官方下载页面获取,确保版本兼容性以充分发挥其性能优势。此外,配置好开发环境后,可以通过定义`.proto`文件来自动生成Java类,从而简化数据序列化和反序列化的操作,提高通信效率。 ... [详细]
  • 在C#中开发MP3播放器时,我正在考虑如何高效存储元数据以便快速检索。选择合适的数据结构,如字典或数组,对于优化性能至关重要。字典能够提供快速的键值对查找,而数组则在连续存储和遍历方面表现优异。根据具体需求,合理选择数据结构将显著提升应用的响应速度和用户体验。 ... [详细]
  • 利用树莓派畅享落网电台音乐体验
    最近重新拾起了闲置已久的树莓派,这台小巧的开发板已经沉寂了半年多。上个月闲暇时间较多,我决定将其重新启用。恰逢落网电台进行了改版,回忆起之前在树莓派论坛上看到有人用它来播放豆瓣音乐,便萌生了同样的想法。通过一番调试,终于实现了在树莓派上流畅播放落网电台音乐的功能,带来了全新的音乐享受体验。 ... [详细]
  • 利用Flask框架进行高效Web应用开发
    本文探讨了如何利用Flask框架高效开发Web应用,以满足特定业务需求。具体案例中,一家餐厅希望每天推出不同的特色菜,并通过网站向顾客展示当天的特色菜。此外,还增加了一个介绍页面,在bios路径下详细展示了餐厅主人、厨师和服务员的背景和简介。通过Flask框架的灵活配置和简洁代码,实现了这一功能,提升了用户体验和餐厅的管理水平。 ... [详细]
  • 在处理遗留数据库的映射时,反向工程是一个重要的初始步骤。由于实体模式已经在数据库系统中存在,Hibernate 提供了自动化工具来简化这一过程,帮助开发人员快速生成持久化类和映射文件。通过反向工程,可以显著提高开发效率并减少手动配置的错误。此外,该工具还支持对现有数据库结构进行分析,自动生成符合 Hibernate 规范的配置文件,从而加速项目的启动和开发周期。 ... [详细]
  • CentOS 7环境下Jenkins的安装与前后端应用部署详解
    CentOS 7环境下Jenkins的安装与前后端应用部署详解 ... [详细]
  • 本文探讨了利用Java实现WebSocket实时消息推送技术的方法。与传统的轮询、长连接或短连接等方案相比,WebSocket提供了一种更为高效和低延迟的双向通信机制。通过建立持久连接,服务器能够主动向客户端推送数据,从而实现真正的实时消息传递。此外,本文还介绍了WebSocket在实际应用中的优势和应用场景,并提供了详细的实现步骤和技术细节。 ... [详细]
  • Spring Boot 实战(一):基础的CRUD操作详解
    在《Spring Boot 实战(一)》中,详细介绍了基础的CRUD操作,涵盖创建、读取、更新和删除等核心功能,适合初学者快速掌握Spring Boot框架的应用开发技巧。 ... [详细]
  • 在腾讯云服务器上部署Nginx的详细指南中,首先需要确保安装必要的依赖包。如果这些依赖包已安装,可直接跳过此步骤。具体命令包括 `yum -y install gcc gcc-c++ wget net-tools pcre-devel zlib-devel`。接下来,本文将详细介绍如何下载、编译和配置Nginx,以确保其在腾讯云服务器上顺利运行。此外,还将提供一些优化建议,帮助用户提升Nginx的性能和安全性。 ... [详细]
  • 如何在IntelliJ IDEA中生成Maven项目的所有Jar包依赖关系图
    本文详细介绍了如何在IntelliJ IDEA中生成Maven项目的完整Jar包依赖关系图。通过具体步骤和示例,帮助开发者清晰地理解并掌握这一重要功能,适合希望深入了解Maven依赖管理的读者学习参考。 ... [详细]
  • Hadoop 2.6 主要由 HDFS 和 YARN 两大部分组成,其中 YARN 包含了运行在 ResourceManager 的 JVM 中的组件以及在 NodeManager 中运行的部分。本文深入探讨了 Hadoop 2.6 日志文件的解析方法,并详细介绍了 MapReduce 日志管理的最佳实践,旨在帮助用户更好地理解和优化日志处理流程,提高系统运维效率。 ... [详细]
  • 在进行网络编程时,准确获取本地主机的IP地址是一项基本但重要的任务。Winsock作为20世纪90年代初由Microsoft与多家公司共同制定的Windows平台网络编程接口,为开发者提供了一套高效且易用的工具。通过Winsock,开发者可以轻松实现网络通信功能,并准确获取本地主机的IP地址,从而确保应用程序在网络环境中的稳定运行。此外,了解Winsock的工作原理及其API函数的使用方法,有助于提高开发效率和代码质量。 ... [详细]
  • 结语 | 《探索二进制世界:软件安全与逆向分析》读书笔记:深入理解二进制代码的逆向工程方法
    结语 | 《探索二进制世界:软件安全与逆向分析》读书笔记:深入理解二进制代码的逆向工程方法 ... [详细]
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社区 版权所有