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



推荐阅读
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 怀疑是每次都在新建文件,具体代码如下 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
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社区 版权所有