数据库课程设计(教室设备故障报修系统)

news2025/4/25 12:51:10

题目:教室设备故障报修系统

 内容与要求:

  • 完成需求分析,写出功能需求和数据需求描述;
  • 在需求分析的基础上,完成数据库概念结构设计、逻辑结构设计、物理结构设计和数据库创建;
  • 完成视图、存储过程设计,要求定义合理。
  • 在应用程序中合理运用存储过程,正确运用DML语句。

第1章 概述

1.1 设计的背景和意义

        随着社会的发展,教育事业的完善,全国范围内接受教育的人数在逐渐递增,教室的管理变得非常重要。教室是学生学习的主要场所,因其使用率居高不下,不可避免会造成教室设备的故障,后勤每天都有着大量的工作需要完成。

        但是目前大多学校只是针对宿舍的设备故障开发了报修系统,而对于教室设备故障往往还是传统的手工记录报修系统的方式,不仅使用不方便,而且影响时效性,结合目前市面上常见的家电安装的形式,我们特此开发一套大学教室设备故障报修系统,期望大大提升教室维修的效率。

 1.2 采用的数据库开发工具和应用程序开发工具

数据库开发工具:MySQL 8.0、SQLYOG。

应用程序开发工具:IntelliJ IDEA、JDK-8。


第2章 需求分析

2.1 功能需求分析

图 2.1

ps:此功能需求分析中,只是展示了相关的功能,并没有实现三个人员的分权机制。

2.2 数据需求分析

报修人员信息:报修者ID、报修者姓名、报修者电话

维修人员信息:维修者ID、维修者姓名、维修者电话

设备信息:设备ID、设备名、设备类型、设备位置

报修单信息:报修等级、上报日期、受理日期、报修原因


第3章 概念结构设计

数据库总体E-R图、如图3.1所示。

 图 3.1


第4章 逻辑结构设计

4.1 关系模型

 4.2 关系模式的优化

        报修人员的函数依赖为:报修人ID->报修人姓名,报修人ID->报修人电话.

        候选码为报修人ID.

        因其不存在任何非主属性对候选码的部分函数依赖和传递函数依赖所以达到了第三范式 。

        同理可得,设备、维修人员、报修单、报修的规范化程度均为第三范式


第5章 物理结构设计

5.1 创建数据库

-- 创建数据库repsys。
CREATE DATABASE repsys;

5.2 数据库表设计

        在数据库中创建5个表。

        1. 设备表

图5.2.1

DROP TABLE
IF EXISTS `device`;

CREATE TABLE `device` (
	`dvi_id` VARCHAR (5) NOT NULL COMMENT '设备ID',
	`dvi_name` VARCHAR (20) NOT NULL COMMENT '设备名',
	`dvi_type` VARCHAR (20) NOT NULL COMMENT '设备类型',
	`dvi_site` VARCHAR (30) NOT NULL COMMENT '设备位置',
	PRIMARY KEY (`dvi_id`) -- 索引为dvi_id
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;
-- ----------------------------
-- Records of device
-- ----------------------------
INSERT INTO `device` VALUES ('12345', '门锁', '锁具', '教学楼D202');
INSERT INTO `device` VALUES ('12378', '门锁', '锁', '教学楼D105');
INSERT INTO `device` VALUES ('13579', '电风扇', '风扇', '教学楼E210');
INSERT INTO `device` VALUES ('92130', '电灯', '灯具', '教学楼A105');
INSERT INTO `device` VALUES ('98376', '白板音响', '音响', '教学楼C404');

        2. 报修人员表   

图5.2.2

DROP TABLE
IF EXISTS `sub_person`;

CREATE TABLE `sub_person` (
	`sub_id` VARCHAR (6) NOT NULL COMMENT '报修者ID',
	`sub_name` VARCHAR (20) NOT NULL COMMENT '报修者姓名',
	`sub_tel` VARCHAR (15) NOT NULL COMMENT '报修者电话',
	PRIMARY KEY (`sub_id`) -- 索引为sub_id
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;
-- ----------------------------
-- Records of sub_person
-- ----------------------------
INSERT INTO `sub_person` VALUES ('204496', '羽浩', '13781697961');
INSERT INTO `sub_person` VALUES ('204536', '石银', '17839789345');
INSERT INTO `sub_person` VALUES ('205587', '逗逗', '17845692483');
INSERT INTO `sub_person` VALUES ('207834', '杰克', '15834983580');
INSERT INTO `sub_person` VALUES ('209637', '跳跳', '17839878124');

        3. 维修人员表

图5.2.3

DROP TABLE
IF EXISTS `rep_person`;

CREATE TABLE `rep_person` (
	`rep_id` VARCHAR (6) NOT NULL COMMENT '维修者ID',
	`rep_name` VARCHAR (20) NOT NULL COMMENT '维修者姓名',
	`rep_tel` VARCHAR (15) NOT NULL COMMENT '维修者电话',
	PRIMARY KEY (`rep_id`) -- 索引为rep_id
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;
-- ----------------------------
-- Records of rep_person
-- ----------------------------
INSERT INTO `rep_person` VALUES ('102401', '王强', '17839879132');
INSERT INTO `rep_person` VALUES ('102403', '王冬', '17849823501');
INSERT INTO `rep_person` VALUES ('102407', '千秋', '13781397920');
INSERT INTO `rep_person` VALUES ('102413', '小奔', '15678934578');
INSERT INTO `rep_person` VALUES ('102415', '大奔', '15678934587');
INSERT INTO `rep_person` VALUES ('102457', '莎莉', '15837642541');

        4. 报修单表

图5.2.4

DROP TABLE
IF EXISTS `sheet`;

CREATE TABLE `sheet` (
	`sheet_id` CHAR (9) NOT NULL COMMENT '报修单编号',
	`sheet_grade` INT (11) DEFAULT NULL COMMENT '报修等级',
	`up_date` date DEFAULT NULL COMMENT '上报日期',
	`down_date` date DEFAULT NULL COMMENT '受理日期',
	`ss_id` VARCHAR (6) DEFAULT NULL COMMENT '报修者ID',
	`sr_id` VARCHAR (6) DEFAULT NULL COMMENT '维修者ID',
	PRIMARY KEY (`sheet_id`),
	-- 索引为sheet_id
	KEY `ss_id` (`ss_id`),
	KEY `sr_id` (`sr_id`),
	INDEX updt_index (`up_date` date),
	-- 日期索引
	CONSTRAINT `sheet_ibfk_1` FOREIGN KEY (`ss_id`) REFERENCES `sub_person` (`sub_id`),
	CONSTRAINT `sheet_ibfk_2` FOREIGN KEY (`sr_id`) REFERENCES `rep_person` (`rep_id`)
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;
-- ----------------------------
-- Records of sheet
-- ----------------------------
INSERT INTO `sheet` VALUES ('102420481', '3', '2022-06-02', '2022-06-04', '204496', '102401');
INSERT INTO `sheet` VALUES ('102420483', '3', '2022-06-06', '2022-06-06', '207834', '102407');
INSERT INTO `sheet` VALUES ('123456789', '4', '2022-06-08', '2022-06-09', '204496', '102413');

        5. 报修表

图5.2.5

DROP TABLE
IF EXISTS `fix`;

CREATE TABLE `fix` (
	`f_dvi_id` VARCHAR (5) NOT NULL COMMENT '设备ID',
	`f_sheet_id` CHAR (9) NOT NULL COMMENT '报修单ID',
	`reason` VARCHAR (100) NOT NULL COMMENT '报修原因',
	PRIMARY KEY (`f_dvi_id`, `f_sheet_id`),
	-- 索引为f_dvi_id和f_sheet_id
	KEY `f_sheet_id` (`f_sheet_id`),
	CONSTRAINT `fix_ibfk_1` FOREIGN KEY (`f_dvi_id`) REFERENCES `device` (`dvi_id`),
	CONSTRAINT `fix_ibfk_2` FOREIGN KEY (`f_sheet_id`) REFERENCES `sheet` (`sheet_id`)
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;
-- ----------------------------
-- Records of fix
-- ----------------------------
INSERT INTO `fix` VALUES ('12345', '123456789', '门锁坏了,打不开>-<');
INSERT INTO `fix` VALUES ('92130', '102420481', '电灯被打碎了~');
INSERT INTO `fix` VALUES ('98376', '102420483', '白板音响总是卡顿');

第6章 数据库对象设计

6.1 视图设计

在数据库中创建3个视图。

  1.         1. 设备—报修—报修单
CREATE VIEW v_dvice_fix_sheet AS SELECT
	dvi_id,
	dvi_name,
	dvi_type,
	dvi_site,
	sheet_id,
	sheet_grade,
	reason,
	up_date,
	down_date
FROM
	device,
	fix,
	sheet
WHERE
	device.dvi_id = fix.f_dvi_id AND fix.f_sheet_id=sheet.sheet_id 
ORDER BY
	sheet.sheet_id; 

        2. 报修人员——报修单

CREATE VIEW v_sub_person_sheet AS SELECT
	sub_id,
	sub_name,
	sub_tel,
	sheet_id,
	sheet_grade,
	up_date,
	down_date
FROM
	sub_person,
	sheet
WHERE
	sub_person.sub_id = sheet.ss_id
ORDER BY
	sheet.ss_id;

        3. 维修人员——报修单

CREATE VIEW v_rep_person_sheet AS SELECT
	rep_id,
	rep_name,
	rep_tel,
	sheet_id,
	sheet_grade,
	up_date,
	down_date
FROM
	rep_person,
	sheet
WHERE
	rep_person.rep_id = sheet.sr_id
ORDER BY
	sheet.sr_id;

6.2 存储过程设计

在数据库中创建4个存储过程。

1. 功能:查询设备故障原因

DELIMITER $$
CREATE PROCEDURE selectReason(IN p_did VARCHAR(5),
IN p_sid CHAR(9))
BEGIN
SELECT reason 
FROM fix WHERE f_dvi_id=p_did AND f_sheet_id=p_sid;
END $$
DELIMITER ;

2. 功能:更新指定报修单的优先级

DELIMITER $$
CREATE PROCEDURE updateGrade(IN grade INT,
IN pid CHAR(9))
BEGIN
UPDATE sheet SET sheet_grade=sheet_grade+grade WHERE sheet_id=pid;
SELECT sheet_grade FROM sheet;
END $$
DELIMITER ;

3.功能:更新报修原因

DELIMITER $$
CREATE PROCEDURE mdfReason(IN f_did CHAR(5),
IN f_stid CHAR(9),IN Reason VARCHAR(200))
BEGIN
UPDATE `fix`
SET reason=Reason
WHERE f_dvi_id=f_did AND f_sheet_id=f_stid;
SELECT * FROM `v_dvice_fix_sheet`;
END $$
DELIMITER ;

4.功能:删除报修信息

DELIMITER $$
CREATE PROCEDURE delStInfo(IN did CHAR(5),
IN stid CHAR(9))
BEGIN
DELETE FROM  `fix` WHERE f_dvi_id=did AND f_sheet_id=stid;
DELETE FROM `sheet` WHERE sheet_id=stid ;
DELETE FROM `rep_person` WHERE rep_id=did;
SELECT * FROM `v_dvice_fix_sheet`;
END $$
DELIMITER ;

 全部SQL语句:

以下SQL语句中定义视图和存储过程的语句中导出时含有以下语句,可以删除精简。

  1. ALGORITHM=UNDEFINED:这表示MySQL将根据表的结构和查询优化器的最佳决策来选择视图的执行算法。这可以使MySQL自行选择最有效的算法。

  2. DEFINER='root'@'localhost':这指定了视图的定义者,即创建视图的用户。在这种情况下,视图的定义者是具有root权限的用户(用户名为root,主机名为localhost)。注意,这取决于实际需求和安全设置,确保只有授权的用户能够访问和修改视图。

  3. SQL SECURITY DEFINER:这表示视图的执行者将使用视图的定义者的权限来执行查询。这意味着执行视图时,用户将拥有视图定义者的权限。同样,这需要根据实际需求和安全性需要进行评估。


SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for device
-- ----------------------------
DROP TABLE
IF EXISTS `device`;

CREATE TABLE `device` (
	`dvi_id` VARCHAR (5) NOT NULL COMMENT '设备ID',
	`dvi_name` VARCHAR (20) NOT NULL COMMENT '设备名',
	`dvi_type` VARCHAR (20) NOT NULL COMMENT '设备类型',
	`dvi_site` VARCHAR (30) NOT NULL COMMENT '设备位置',
	PRIMARY KEY (`dvi_id`) -- 索引为dvi_id
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;

-- ----------------------------
-- Records of device
-- ----------------------------
INSERT INTO `device`
VALUES
	(
		'12345',
		'门锁',
		'锁具',
		'教学楼D202'
	);

INSERT INTO `device`
VALUES
	(
		'12378',
		'门锁',
		'锁',
		'教学楼D105'
	);

INSERT INTO `device`
VALUES
	(
		'13579',
		'电风扇',
		'风扇',
		'教学楼E210'
	);

INSERT INTO `device`
VALUES
	(
		'92130',
		'电灯',
		'灯具',
		'教学楼A105'
	);

INSERT INTO `device`
VALUES
	(
		'98376',
		'白板音响',
		'音响',
		'教学楼C404'
	);

-- ----------------------------
-- Table structure for fix
-- ----------------------------
DROP TABLE
IF EXISTS `fix`;

CREATE TABLE `fix` (
	`f_dvi_id` VARCHAR (5) NOT NULL COMMENT '设备ID',
	`f_sheet_id` CHAR (9) NOT NULL COMMENT '报修单ID',
	`reason` VARCHAR (100) NOT NULL COMMENT '报修原因',
	PRIMARY KEY (`f_dvi_id`, `f_sheet_id`),
	-- 索引为f_dvi_id和f_sheet_id
	KEY `f_sheet_id` (`f_sheet_id`),
	CONSTRAINT `fix_ibfk_1` FOREIGN KEY (`f_dvi_id`) REFERENCES `device` (`dvi_id`),
	CONSTRAINT `fix_ibfk_2` FOREIGN KEY (`f_sheet_id`) REFERENCES `sheet` (`sheet_id`)
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;

-- ----------------------------
-- Records of fix
-- ----------------------------
INSERT INTO `fix`
VALUES
	(
		'12345',
		'123456789',
		'门锁坏了,打不开>-<'
	);

INSERT INTO `fix`
VALUES
	(
		'92130',
		'102420481',
		'电灯被打碎了~'
	);

INSERT INTO `fix`
VALUES
	(
		'98376',
		'102420483',
		'白板音响总是卡顿'
	);

-- ----------------------------
-- Table structure for rep_person
-- ----------------------------
DROP TABLE
IF EXISTS `rep_person`;

CREATE TABLE `rep_person` (
	`rep_id` VARCHAR (6) NOT NULL COMMENT '维修者ID',
	`rep_name` VARCHAR (20) NOT NULL COMMENT '维修者姓名',
	`rep_tel` VARCHAR (15) NOT NULL COMMENT '维修者电话',
	PRIMARY KEY (`rep_id`) -- 索引为rep_id
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;

-- ----------------------------
-- Records of rep_person
-- ----------------------------
INSERT INTO `rep_person`
VALUES
	(
		'102401',
		'王强',
		'17839879132'
	);

INSERT INTO `rep_person`
VALUES
	(
		'102403',
		'王冬',
		'17849823501'
	);

INSERT INTO `rep_person`
VALUES
	(
		'102407',
		'千秋',
		'13781397920'
	);

INSERT INTO `rep_person`
VALUES
	(
		'102413',
		'小奔',
		'15678934578'
	);

INSERT INTO `rep_person`
VALUES
	(
		'102415',
		'大奔',
		'15678934587'
	);

INSERT INTO `rep_person`
VALUES
	(
		'102457',
		'莎莉',
		'15837642541'
	);

-- ----------------------------
-- Table structure for sheet
-- ----------------------------
DROP TABLE
IF EXISTS `sheet`;

CREATE TABLE `sheet` (
	`sheet_id` CHAR (9) NOT NULL COMMENT '报修单编号',
	`sheet_grade` INT (11) DEFAULT NULL COMMENT '报修等级',
	`up_date` date DEFAULT NULL COMMENT '上报日期',
	`down_date` date DEFAULT NULL COMMENT '受理日期',
	`ss_id` VARCHAR (6) DEFAULT NULL COMMENT '报修者ID',
	`sr_id` VARCHAR (6) DEFAULT NULL COMMENT '维修者ID',
	PRIMARY KEY (`sheet_id`),
	-- 索引为sheet_id
	KEY `ss_id` (`ss_id`),
	KEY `sr_id` (`sr_id`),
	INDEX updt_index (`up_date` date),
	-- 日期索引
	CONSTRAINT `sheet_ibfk_1` FOREIGN KEY (`ss_id`) REFERENCES `sub_person` (`sub_id`),
	CONSTRAINT `sheet_ibfk_2` FOREIGN KEY (`sr_id`) REFERENCES `rep_person` (`rep_id`)
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;

-- ----------------------------
-- Records of sheet
-- ----------------------------
INSERT INTO `sheet`
VALUES
	(
		'102420481',
		'3',
		'2022-06-02',
		'2022-06-04',
		'204496',
		'102401'
	);

INSERT INTO `sheet`
VALUES
	(
		'102420483',
		'3',
		'2022-06-06',
		'2022-06-06',
		'207834',
		'102407'
	);

INSERT INTO `sheet`
VALUES
	(
		'123456789',
		'4',
		'2022-06-08',
		'2022-06-09',
		'204496',
		'102413'
	);

-- ----------------------------
-- Table structure for sub_person
-- ----------------------------
DROP TABLE
IF EXISTS `sub_person`;

CREATE TABLE `sub_person` (
	`sub_id` VARCHAR (6) NOT NULL COMMENT '报修者ID',
	`sub_name` VARCHAR (20) NOT NULL COMMENT '报修者姓名',
	`sub_tel` VARCHAR (15) NOT NULL COMMENT '报修者电话',
	PRIMARY KEY (`sub_id`) -- 索引为sub_id
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;

-- ----------------------------
-- Records of sub_person
-- ----------------------------
INSERT INTO `sub_person`
VALUES
	(
		'204496',
		'羽浩',
		'13781697961'
	);

INSERT INTO `sub_person`
VALUES
	(
		'204536',
		'石银',
		'17839789345'
	);

INSERT INTO `sub_person`
VALUES
	(
		'205587',
		'逗逗',
		'17845692483'
	);

INSERT INTO `sub_person`
VALUES
	(
		'207834',
		'杰克',
		'15834983580'
	);

INSERT INTO `sub_person`
VALUES
	(
		'209637',
		'跳跳',
		'17839878124'
	);

-- ----------------------------
-- View structure for v_dvice_fix_sheet
-- ----------------------------
DROP VIEW
IF EXISTS `v_dvice_fix_sheet`;



CREATE ALGORITHM = UNDEFINED DEFINER = `root`@`localhost` SQL SECURITY DEFINER VIEW `v_dvice_fix_sheet` AS SELECT
	`device`.`dvi_id` AS `dvi_id`,
	`device`.`dvi_name` AS `dvi_name`,
	`device`.`dvi_type` AS `dvi_type`,
	`device`.`dvi_site` AS `dvi_site`,
	`sheet`.`sheet_id` AS `sheet_id`,
	`sheet`.`sheet_grade` AS `sheet_grade`,
	`fix`.`reason` AS `reason`,
	`sheet`.`up_date` AS `up_date`,
	`sheet`.`down_date` AS `down_date`
FROM
	(
		(`device` JOIN `fix`)
		JOIN `sheet`
	)
WHERE
	(
		(
			`device`.`dvi_id` = `fix`.`f_dvi_id`
		)
		AND (
			`fix`.`f_sheet_id` = `sheet`.`sheet_id`
		)
	)
ORDER BY
	`sheet`.`sheet_id`;

-- ----------------------------
-- View structure for v_rep_person_sheet
-- ----------------------------
DROP VIEW
IF EXISTS `v_rep_person_sheet`;

CREATE ALGORITHM = UNDEFINED DEFINER = `root`@`localhost` SQL SECURITY DEFINER VIEW `v_rep_person_sheet` AS SELECT
	`rep_person`.`rep_id` AS `rep_id`,
	`rep_person`.`rep_name` AS `rep_name`,
	`rep_person`.`rep_tel` AS `rep_tel`,
	`sheet`.`sheet_id` AS `sheet_id`,
	`sheet`.`sheet_grade` AS `sheet_grade`,
	`sheet`.`up_date` AS `up_date`,
	`sheet`.`down_date` AS `down_date`
FROM
	(`rep_person` JOIN `sheet`)
WHERE
	(
		`rep_person`.`rep_id` = `sheet`.`sr_id`
	)
ORDER BY
	`sheet`.`sr_id`;

-- ----------------------------
-- View structure for v_sub_person_sheet
-- ----------------------------
DROP VIEW
IF EXISTS `v_sub_person_sheet`;

CREATE ALGORITHM = UNDEFINED DEFINER = `root`@`localhost` SQL SECURITY DEFINER VIEW `v_sub_person_sheet` AS SELECT
	`sub_person`.`sub_id` AS `sub_id`,
	`sub_person`.`sub_name` AS `sub_name`,
	`sub_person`.`sub_tel` AS `sub_tel`,
	`sheet`.`sheet_id` AS `sheet_id`,
	`sheet`.`sheet_grade` AS `sheet_grade`,
	`sheet`.`up_date` AS `up_date`,
	`sheet`.`down_date` AS `down_date`
FROM
	(`sub_person` JOIN `sheet`)
WHERE
	(
		`sub_person`.`sub_id` = `sheet`.`ss_id`
	)
ORDER BY
	`sheet`.`ss_id`;

-- ----------------------------
-- Procedure structure for delStInfo
-- ----------------------------
DROP PROCEDURE
IF EXISTS `delStInfo`;
DELIMITER $$


CREATE DEFINER = `root`@`localhost` PROCEDURE `delStInfo` (IN did CHAR(5), IN stid CHAR(9))
BEGIN
	DELETE
FROM
	`fix`
WHERE
	f_dvi_id = did
AND f_sheet_id = stid ; DELETE
FROM
	`sheet`
WHERE
	sheet_id = stid ; DELETE
FROM
	`device`
WHERE
	dvi_id = did ; SELECT
		*
	FROM
		`v_dvice_fix_sheet` ;
	END$$
DELIMITER ;


-- ----------------------------
-- Procedure structure for mdfReason
-- ----------------------------
DROP PROCEDURE
IF EXISTS `mdfReason`;
DELIMITER $$


CREATE DEFINER = `root`@`localhost` PROCEDURE `mdfReason` (
	IN f_did CHAR (5),
	IN f_stid CHAR (9),
	IN Reason VARCHAR (200)
)
BEGIN
	UPDATE `fix`
SET reason = Reason
WHERE
	f_dvi_id = f_did
AND f_sheet_id = f_stid ; SELECT
	*
FROM
	`v_dvice_fix_sheet` ;
END$$
DELIMITER ;


-- ----------------------------
-- Procedure structure for selectReason
-- ----------------------------
DROP PROCEDURE
IF EXISTS `selectReason`;
DELIMITER $$


CREATE DEFINER = `root`@`localhost` PROCEDURE `selectReason` (
	IN p_did VARCHAR (5),
	IN p_sid CHAR (9)
)
BEGIN
	SELECT
		reason
	FROM
		fix
	WHERE
		f_dvi_id = p_did
	AND f_sheet_id = p_sid ;
	END$$
DELIMITER ;


-- ----------------------------
-- Procedure structure for updateGrade
-- ----------------------------
DROP PROCEDURE
IF EXISTS `updateGrade`;
DELIMITER $$


CREATE DEFINER = `root`@`localhost` PROCEDURE `updateGrade` (IN grade INT, IN pid CHAR(9))
BEGIN
	UPDATE sheet
SET sheet_grade = sheet_grade + grade
WHERE
	sheet_id = pid ; SELECT
		sheet_grade
	FROM
		sheet ;
	END$$
DELIMITER ;

第7章 应用程序设计

7.1 总体设计

创建的项目名为“教室设备故障报修系统”,其中共设计了7个程序,结构如图7.1所示。

图7.1

7.2 程序执行结果及主要代码

说明:程序执行都在Test类中执行,界面如图7.2所示

图7.2

1.程序1:类名SubPeo_Info

(1)执行结果截图如下

图7.2.1.1查询报修人员

图7.2.1.2 添加报修人员

图7.2.1.3 修改报修原因

ps:以上对齐因为idea缩进原因,可以根据具体情况调整。

(2)相关代码如下:

package top;

import util.DbUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;

public class SubPeo_Info {


    private DbUtil dbUtil = DbUtil.getDbUtil();

    public void ser_sub() {
        Connection con = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            con = dbUtil.getCon();
            String sql = "SELECT sub_id,sub_name,sub_tel FROM sub_person";
            // 获取执行sql语句对象
            pstmt = con.prepareStatement(sql);
            // 执行查询操作
            rs = pstmt.executeQuery();
            //处理结果集
            int flag = 1;
            while (rs.next()) {
                if (flag == 1) {
                    System.out.println("报修者ID" + "\t\t" + "报修者姓名" + "\t\t\t" + "报修者电话");
                    System.out.println(rs.getString(1) + "\t\t" + rs.getString(2) + "\t\t\t" + rs.getString(3));
                    flag = 0;
                } else {
                    System.out.println(rs.getString(1) + "\t\t" + rs.getString(2) + "\t\t\t" + rs.getString(3));
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                dbUtil.closeCon(con);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public void inser_sub() {
        Connection con = null;
        Scanner sc = new Scanner(System.in);
        System.out.println();
        System.out.println("请输入报修者ID(6位):");
        String sub_id = sc.nextLine();
        System.out.println("请输入报修者姓名:");
        String sub_name = sc.nextLine();
        System.out.println("请输入报修者电话:");
        String sub_tel = sc.nextLine();
        try {
            con = dbUtil.getCon();
            Statement stmt = con.createStatement();
            String sql = "insert into sub_person values ('" + sub_id + "','" + sub_name + "','" + sub_tel + "');";
            stmt.executeUpdate(sql);
            System.out.println("数据插入成功~");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                dbUtil.closeCon(con);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public void update_sub() {
        ser_sub();
        Connection con = null;
        Scanner sc = new Scanner(System.in);
        System.out.println();
        System.out.println("请输入要修改报修者ID(6位):");
        String sub_id = sc.nextLine();
        System.out.println("请输入修改后报修者姓名:");
        String sub_name = sc.nextLine();
        System.out.println("请输入修改后报修者电话:");
        String sub_tel = sc.nextLine();
        try {
            con = dbUtil.getCon();
            Statement stmt = con.createStatement();
            String sql = "update sub_person set sub_name = '" + sub_name + "', sub_tel = '" + sub_tel + "' where sub_id = " + sub_id + ";";
            stmt.executeUpdate(sql);
            System.out.println("报修人员信息更新成功~");
            ser_sub();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                dbUtil.closeCon(con);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public void mdfReason() {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入设备ID:");
        String f_did = sc.nextLine();
        System.out.println("请输入报修单编号:");
        String f_stid = sc.nextLine();
        System.out.println("请输入报修原因:");
        String Reason = sc.nextLine();
        Connection con = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            con = dbUtil.getCon();
            String sql = "call mdfReason(?,?,?)";
            // 获取执行sql语句对象
            pstmt = con.prepareStatement(sql);
            // 准备参数
            pstmt.setString(1, f_did);
            pstmt.setString(2, f_stid);
            pstmt.setString(3, Reason);
            // 执行查询操作
            rs = pstmt.executeQuery();

            //处理结果集
            int flag = 1;
            while (rs.next()) {
                if (flag == 1) {

                    System.out.println("修改后报修信息如下:");
                    System.out.println();

                    flag = 0;
                } else {

                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                dbUtil.closeCon(con);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

2.程序2:类名RepPeo_Info

(1)执行结果截图如下

图7.2.2.1 查询维修人员

图7.2.2.2 添加维修人员

(2)相关代码如下:

package top;

import util.DbUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;

public class RepPeo_Info {

    private final DbUtil dbUtil = DbUtil.getDbUtil();

    public void ser_rep() {
        Connection con = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            con = dbUtil.getCon();
            String sql = "SELECT rep_id,rep_name,rep_tel FROM rep_person";

            // 获取执行sql语句对象
            pstmt = con.prepareStatement(sql);
            // 执行查询操作
            rs = pstmt.executeQuery();
            //处理结果集
            int flag = 1;
            while (rs.next()) {
                if (flag == 1) {
                    System.out.println("维修者ID" + "\t\t" + "维修者姓名" + "\t" + "维修者电话");
                    System.out.println(rs.getString(1) + "\t\t" + rs.getString(2) + "\t\t\t" + rs.getString(3));
                    flag = 0;
                } else {
                    System.out.println(rs.getString(1) + "\t\t" + rs.getString(2) + "\t\t\t" + rs.getString(3));
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                dbUtil.closeCon(con);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public void inser_rep() {
        Connection con = null;
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入维修者ID(6位):");
        String rep_id = sc.nextLine();      //取得用户输入的字符串
        System.out.println("请输入维修者姓名:");
        String rep_name = sc.nextLine();    //取得用户输入的字符串
        System.out.println("请输入维修者电话:");
        String rep_tel = sc.nextLine();
        try {
            con = dbUtil.getCon();
            Statement stmt = con.createStatement();
            String sql = "insert into rep_person values ('" + rep_id + "','" + rep_name + "','" + rep_tel + "');";
            stmt.executeUpdate(sql);
            System.out.println("数据插入成功~");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                dbUtil.closeCon(con);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public void update_rep() {
        ser_rep();
        Connection con = null;
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要修改维修者ID(6位):");
        String rep_id = sc.nextLine();      //取得用户输入的字符串
        System.out.println("请输入修改后维修者姓名:");
        String rep_name = sc.nextLine();    //取得用户输入的字符串
        System.out.println("请输入修改后维修者电话:");
        String rep_tel = sc.nextLine();
        try {
            con = dbUtil.getCon();
            Statement stmt = con.createStatement();
            String sql = "update rep_person set rep_name = '" + rep_name + "', rep_tel = '" + rep_tel + "' where rep_id = " + rep_id + ";";
            stmt.executeUpdate(sql);
            System.out.println("维修人员信息更新成功~");
            ser_rep();
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("未正确输入数据!");
        } finally {
            try {
                dbUtil.closeCon(con);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

3.程序3:类名Dvice_Info

(1)执行结果截图如下

图7.2.3.1 查询设备信息

图7.2.3.2 添加设备信息

(2)相关代码如下:

package top;

import util.DbUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;

public class Dvice_Info {

    private DbUtil dbUtil = DbUtil.getDbUtil();

    public void ser_dvi() {
        Connection con = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            con = dbUtil.getCon();
            String sql = "SELECT dvi_id,dvi_name,dvi_type,dvi_site FROM device";
            // 获取执行sql语句对象
            pstmt = con.prepareStatement(sql);
            // 执行查询操作
            rs = pstmt.executeQuery();
            //处理结果集
            int flag = 1;
            while (rs.next()) {
                if (flag == 1) {
                    System.out.println("设备ID" + "\t\t" + "设备名" + "\t\t\t" + "设备类型" + "\t\t\t" + "设备位置");
                    System.out.println(rs.getString(1) + "\t\t" + rs.getString(2) + "\t\t\t" + rs.getString(3) + "\t\t\t" + rs.getString(4));
                    flag = 0;
                } else {
                    System.out.println(rs.getString(1) + "\t\t" + rs.getString(2) + "\t\t\t" + rs.getString(3) + "\t\t\t" + rs.getString(4));
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                dbUtil.closeCon(con);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public void inser_dvi() {
        Connection con = null;
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入设备ID(5位):");
        String dvi_id = sc.nextLine();
        System.out.println("请输入设备名:");
        String dvi_name = sc.nextLine();
        System.out.println("请输入设备类型:");
        String dvi_type = sc.nextLine();
        System.out.println("请输入设备位置:");
        String dvi_site = sc.nextLine();

        try {
            con = dbUtil.getCon();
            Statement stmt = con.createStatement();
            String sql = "insert into device values ('" + dvi_id + "','" + dvi_name + "','" + dvi_type + "','" + dvi_site + "');";
            stmt.executeUpdate(sql);
            System.out.println("数据插入成功~");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                dbUtil.closeCon(con);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

4.程序4:类名Sheet_Info

(1)执行结果截图如下

图7.2.4.1 显示报修单部分信息

图7.2.4.2 查询报修原因

图7.2.4.3 修改报修等级

图7.2.4.4 删除报修信息

(2)相关代码如下:

package top;

import util.DbUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Scanner;

public class Sheet_Info {


    private DbUtil dbUtil = DbUtil.getDbUtil();

    public void ser_sheet() {
        Connection con = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            con = dbUtil.getCon();
            String sql = "SELECT * FROM v_dvice_fix_sheet";
            // 获取执行sql语句对象
            pstmt = con.prepareStatement(sql);
            // 执行查询操作
            rs = pstmt.executeQuery();
            //处理结果集
            int flag = 1;
            while (rs.next()) {
                if (flag == 1) {
                    System.out.println("设备ID" + "\t\t" + "设备名" + "\t\t" + "设备类型" + "\t\t" + "设备位置" + "\t\t\t" + "报修单编号" + "\t\t" + "报修单等级"
                            + "\t\t\t" + "报修原因" + "\t\t\t\t" + "上报日期" + "\t\t" + "受理日期");
                    System.out.println(rs.getString(1) + "\t\t" + rs.getString(2) + "\t\t" + rs.getString(3) + "\t\t" + rs.getString(4) + "\t\t" + rs.getString(5)
                            + "\t\t" + rs.getString(6) + "\t\t\t\t" + rs.getString(7) + "\t\t\t" + rs.getString(8) + "\t\t" + rs.getString(9));
                    flag = 0;
                } else {
                    System.out.println(rs.getString(1) + "\t\t" + rs.getString(2) + "\t\t" + rs.getString(3) + "\t\t" + rs.getString(4) + "\t\t" + rs.getString(5)
                            + "\t\t" + rs.getString(6) + "\t\t\t\t" + rs.getString(7) + "\t\t\t" + rs.getString(8) + "\t\t" + rs.getString(9));
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                dbUtil.closeCon(con);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public void ser_reason() {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入设备ID:");
        String p_did = sc.nextLine();      //取得用户输入的字符串
        System.out.println("请输入表单ID:");
        String p_sid = sc.nextLine();
        Connection con = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            con = dbUtil.getCon();
            String sql = "call selectReason(?,?);";
            // 获取执行sql语句对象
            pstmt = con.prepareStatement(sql);
            // 准备参数
            pstmt.setString(1, p_did);
            pstmt.setString(2, p_sid);
            // 执行查询操作
            rs = pstmt.executeQuery();

            //处理结果集
            int flag = 1;
            while (rs.next()) {
                if (flag == 1) {
                    System.out.println("报修原因如下:");
                    System.out.println(rs.getString(1));

                    System.out.println();
                    System.out.println("原因查询完毕!");
                    flag = 0;
                } else {
                    System.out.println(rs.getString(1));
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                dbUtil.closeCon(con);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public void updateGrade() {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入表单ID(9位):");
        String p_stid = sc.nextLine();
        System.out.println("请输入修改报修单等级(正数增加,负数减小):");
        int grade = sc.nextInt();      //取得用户输入的字符串
        Connection con = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            con = dbUtil.getCon();
            String sql = "call updateGrade(?,?)";
            // 获取执行sql语句对象
            pstmt = con.prepareStatement(sql);
            // 准备参数
            pstmt.setInt(1, grade);
            pstmt.setString(2, p_stid);
            // 执行查询操作
            rs = pstmt.executeQuery();

            //处理结果集
            int flag = 1;
            while (rs.next()) {
                if (flag == 1) {
                    System.out.println("修改后报修等级如下:");
                    System.out.println(rs.getString(1));

                    System.out.println();
                    System.out.println("修改报修等级完毕!");
                    flag = 0;
                } else {

                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                dbUtil.closeCon(con);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public void delStInfo() {
        Scanner sc = new Scanner(System.in);
        System.out.println("输入以下信息进行删除~");
        System.out.println("请输入设备ID(5位):");
        String del_did = sc.nextLine();
        System.out.println("请输入报修单ID(9位):");
        String del_stid = sc.nextLine();
        Connection con = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            con = dbUtil.getCon();
            String sql = "call delStInfo(?,?)";
            // 获取执行sql语句对象
            pstmt = con.prepareStatement(sql);
            // 准备参数
            pstmt.setString(1, del_did);
            pstmt.setString(2, del_stid);
            // 执行查询操作
            rs = pstmt.executeQuery();

            //处理结果集
            int flag = 1;
            while (rs.next()) {
                if (flag == 1) {

                    System.out.println("删除后报修信息如下:");
                    System.out.println();

                    flag = 0;
                } else {

                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                dbUtil.closeCon(con);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

5.程序5:类名Load_Info

(1)执行结果截图如下

ps:登录成功后均为加入跳转页面,在控制台显示登录成功。

管理员用户名:apple,密码:123456

 图7.2.5.1 管理员登录

普通用户,姓名为用户名,密码为ID。

 图 7.2.5.2 普通用户登录

(2)相关代码如下:

package top;

import util.DbUtil;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class Load_Info extends JFrame implements SwingConstants {

    private String select = "管理员";
    String nameresult[] = new String[50];
    String passresult[] = new String[50];
    boolean Flag = false;
    private JLabel welcomela = null;
    private JLabel userla = null;
    private JLabel passwordla = null;
    private JLabel power = null;
    private JComboBox jcb = null;
    private JTextField userjt = null;
    private JPasswordField passwordjp = null;
    private JButton loadbtn = null;
    private JButton canclebtn = null;

    private JPanel inputJp = null;
    private JPanel btnJp = null;
    private JPanel panel = null;

    private JPanel imagePanel = null;
    private ImageIcon background = null;

    public Load_Info() {
        super("用户登陆");
        init();
    }

    @SuppressWarnings("removal")
    public void init() {
        this.setLayout(new FlowLayout());
        inputJp = new JPanel();
        btnJp = new JPanel();
        inputJp.setLayout(new GridLayout(3, 2));
        welcomela = new JLabel("欢迎使用教室设备故障报修系统");
        welcomela.setFont(new Font("欢迎使用教室设备故障报修系统", 1, 28));
        welcomela.setHorizontalAlignment(JLabel.CENTER);
        welcomela.setForeground(Color.RED);
        userla = new JLabel("用户名:");
        passwordla = new JLabel("密    码:");
        power = new JLabel("权限:");
        userjt = new JTextField(10);
        passwordjp = new JPasswordField(10);
        jcb = new JComboBox();
        jcb.addItem("管理员");
        jcb.addItem("普通用户");
        loadbtn = new JButton("登陆");
        canclebtn = new JButton("退出");
        inputJp.add(userla, 0);
        inputJp.add(userjt, 1);
        inputJp.add(passwordla, 2);
        inputJp.add(passwordjp, 3);
        inputJp.add(power, 4);
        inputJp.add(jcb, 5);
        btnJp.add(loadbtn);
        btnJp.add(canclebtn);
        panel = new JPanel(new FlowLayout());
        panel.add(inputJp);
        panel.add(btnJp);
        background = new ImageIcon("src/pic/logo.jpg");// 背景图片
        JLabel label = new JLabel(background);// 把背景图片显示在一个标签里面
        // 把标签的大小位置设置为图片刚好填充整个面板
        label.setBounds(0, 0, background.getIconWidth(), background.getIconHeight()); // 把内容窗格转化为JPanel,否则不能用方法setOpaque()来使内容窗格透明
        imagePanel = (JPanel) this.getContentPane();
        imagePanel.setOpaque(false);        // 内容窗格默认的布局管理器为BorderLayout
        imagePanel.setLayout(new BorderLayout());
        imagePanel.add(welcomela, BorderLayout.NORTH);
        imagePanel.add(panel, BorderLayout.SOUTH);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.getLayeredPane().setLayout(null);        // 把背景图片添加到分层窗格的最底层作为背景
        this.getLayeredPane().add(label, new Integer(Integer.MIN_VALUE));
        this.setSize(background.getIconWidth(), background.getIconHeight());
        this.setVisible(true);

        jcb.addItemListener(new ItemListener() {
            public void itemStateChanged(ItemEvent ite) {
                if (ite.getStateChange() == ItemEvent.SELECTED) {
                    try {
                        select = ite.getItem().toString();//选中的值
                    } catch (Exception e) {
                    }
                }
            }
        });
        loadbtn.addActionListener(new ActionListener() {

            private DbUtil dbUtil = DbUtil.getDbUtil();

            public void actionPerformed(ActionEvent e) {
                int i = 0;
                String userName = userjt.getText().trim();
                String passwordStr = passwordjp.getText().trim();
//                System.out.println(userName);
//                System.out.println(passwordStr);

                Connection con = null;
                PreparedStatement pstmt = null;
                ResultSet rs = null;
                try {
                    try {
                        con = dbUtil.getCon();
                    } catch (Exception ex) {
                        ex.printStackTrace();
                    }
                    // 普通用户加入维修人员
                    String sql = "select * from rep_person";
                    pstmt = con.prepareStatement(sql);
                    // 执行查询操作
                    rs = pstmt.executeQuery();
                    while (rs.next()) {
                        nameresult[i] = rs.getString("rep_name").trim();
                        passresult[i] = rs.getString("rep_id").trim();
                        i++;
                    }
                    // 普通用户加入报修人员
                    String sql1 = "select * from sub_person";
                    pstmt = con.prepareStatement(sql1);
                    // 执行查询操作
                    rs = pstmt.executeQuery();
                    while (rs.next()) {
                        nameresult[i] = rs.getString("sub_name").trim();
                        passresult[i] = rs.getString("sub_id").trim();
                        i++;
                    }
                } catch (SQLException e1) {
                    e1.printStackTrace();
                }
                // 管理员账号apple,密码123456
                if (select.equals("管理员")) {
                    if (("apple".equals(userName)) && ("123456".equals(passwordStr))) {
                        JOptionPane.showMessageDialog(null, "登录成功!");
                        System.out.println("登录成功!...");
                        dispose();
                    } else {
                        userjt.setText(null);
                        passwordjp.setText(null);
                        JOptionPane.showMessageDialog(null, "用户或密码输入错误,请重新输入");
                    }
                } else {
                    for (int j = 0; j < i; j++) {
                        if ((nameresult[j].equals(userName)) && (passresult[j].equals(passwordStr))) {
                            Flag = true;
                        }
                        if ((nameresult[j].equals(userName)) && (passresult[j].equals(passwordStr))) {
                            Flag = true;
                        }
                    }
                    if (Flag == true) {
                        JOptionPane.showMessageDialog(null, "登录成功!");
                        System.out.println("登录成功!...");
                        dispose();
                    } else {
                        userjt.setText(null);
                        passwordjp.setText(null);
                        JOptionPane.showMessageDialog(null, "用户或密码输入错误,请重新输入");
                    }
                }
            }
        });
        canclebtn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                dispose();
            }
        });
        this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    }
}

  6.程序6:类名Test_Info

(1)执行结果截图如下

(2)相关代码如下:

package top;

import java.util.Objects;
import java.util.Scanner;

import static java.lang.System.exit;

public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Test t = new Test();

        while (true) {
            t.info_print();
            System.out.println("请输入功能序号:");
            int user_num = sc.nextInt();
            switch (user_num) {
                case 1:
                    t.ser_sub_info();
                    break;
                case 2:
                    t.ser_rep_info();
                    break;
                case 3:
                    t.ser_dvi_info();
                    break;
                case 4:
                    t.ser_sheet_info();
                    break;
                case 5:
                    t.ser_reason();
                    break;
                case 6:
                    t.add_sub_info();
                    break;
                case 7:
                    t.add_rep_info();
                    break;
                case 8:
                    t.add_dvi_info();
                    break;
                case 9:
                    t.ser_sheet_info();
                    t.modify_info();
                    t.ser_sheet_info();
                    System.out.println("修改信息完毕!");
                    break;
                case 10:
                    t.updateGrade();
                    break;
                case 11:
                    t.del_stinfo();
                    break;
                case 12:
                    t.up_sub_info();
                    break;
                case 13:
                    t.up_rep_info();
                    break;
                case 14:
                    Load_Info view = new Load_Info();
                    break;
                case 15:
                    System.out.println("确定要退出么?yes or no");
                    String exit = sc.next();
                    if (Objects.equals(exit, "yes")) {
                        exit(0);
                    }
            }
        }
    }

    public void info_print() {
        System.out.println("---------------请选择功能--------------");
        System.out.println("\t\t\t1、查询报修人员");
        System.out.println("\t\t\t2、查询维修人员");
        System.out.println("\t\t\t3、查询设备信息");
        System.out.println("\t\t\t4、显示报修单部分信息");
        System.out.println("\t\t\t5、查询报修原因");
        System.out.println("\t\t\t6、添加报修人员");
        System.out.println("\t\t\t7、添加维修人员");
        System.out.println("\t\t\t8、添加设备信息");
        System.out.println("\t\t\t9、修改报修原因");
        System.out.println("\t\t\t10、修改报修等级");
        System.out.println("\t\t\t11、删除报修信息");
        System.out.println("\t\t\t12、修改报修人员信息");
        System.out.println("\t\t\t13、修改维修人员信息");
        System.out.println("\t\t\t14、显示登录界面");
        System.out.println("\t\t\t15、退出系统");
        System.out.println("-------------------------------------");
    }

    SubPeo_Info t = new SubPeo_Info();

    public void add_sub_info() {
        t.inser_sub();
    }

    public void ser_sub_info() {
        t.ser_sub();
    }

    public void up_sub_info() {
        t.update_sub();
    }

    public void modify_info() {

        t.mdfReason();
    }


    Dvice_Info d = new Dvice_Info();


    public void ser_dvi_info() {
        d.ser_dvi();
    }

    public void add_dvi_info() {
        d.inser_dvi();
    }

    RepPeo_Info r = new RepPeo_Info();

    public void add_rep_info() {
        r.inser_rep();
    }

    public void ser_rep_info() {
        r.ser_rep();
    }

    public void up_rep_info() {
        r.update_rep();
    }

    Sheet_Info s = new Sheet_Info();

    public void ser_sheet_info() {
        s.ser_sheet();
    }

    public void ser_reason() {
        s.ser_reason();
    }

    public void updateGrade() {
        s.updateGrade();
    }

    public void del_stinfo() {
        s.ser_sheet();
        s.delStInfo();
        s.ser_sheet();
        System.out.println("删除报修信息完毕!");
    }
}

7.程序7:类名DBUtil

(1)执行结果截图如下

(2)相关代码如下: 

package util;

import java.sql.Connection;
import java.sql.DriverManager;

public class DbUtil {
    private final String jdbcName = "com.mysql.cj.jdbc.Driver";//jdbc驱动程序
    private final String dbUrl = "jdbc:mysql://localhost:3306/repsys?serverTimezone=PRC&useSSL=false&characterEncoding=gbk";
    private final String dbUserName = "root";//用户名
    private final String dbPassword = "123456";//密码

    /*私有构造*/
    private DbUtil() {
    }

    private static DbUtil dbUtil = new DbUtil();

    public static DbUtil getDbUtil() {
        return dbUtil;
    }


    /*获得连接对象 */
    public Connection getCon() throws Exception {
        Class.forName(jdbcName);//加载驱动
        Connection con = DriverManager.getConnection(dbUrl, dbUserName, dbPassword);//创建连接对象
        return con;
    }

    /*断开连接	 */
    public void closeCon(Connection con) throws Exception {
        if (con != null) {
            con.close();
        }
    }

    /*主函数,测试连接数据库*/
    public static void main(String[] args) {
        DbUtil dbUtil = DbUtil.getDbUtil();
        try {
            dbUtil.getCon();
            System.out.println("连接成功啦~~");
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("连接失败>_<");
        }
    }
}

-------------------------------------------------------华丽的分割线--------------------------------------------------------

ps:本课设项目简单的实现了数据库课程要求的基本操作,可以在此基础上进行更多功能的添加或修改。有兴趣可以使用GUI增加不同角色的登录页面跳转 ( ⓛ ω ⓛ *)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/710674.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用阿里云实现短信验证码

首先去阿里云中开启短信服务 然后申请自己的签名&#xff0c;发送的短信模板&#xff0c;之后点击右上角的头像&#xff0c;点击AccessKey&#xff0c;选第一个就行&#xff0c;然后保存这两个对应的值。 在等待签名和发送模板通过审核之后就可以配置我们的发送方法&#xff0c…

Android Framework的重要性及其对行业前景的影响~

随着智能手机和移动应用的兴起&#xff0c;Android操作系统成为全球最大的移动操作系统&#xff0c;而Android Framework作为其核心组件之一&#xff0c;扮演着至关重要的角色。Android Framework提供了众多的API和工具&#xff0c;为开发者提供了构建功能丰富、高效稳定的Andr…

大厂月入3w+,失业焦虑折磨着我

大家好&#xff0c;这里是程序员晚枫&#xff0c;小红书也叫这个名字。 周末和一位老朋友聚会&#xff0c;聊了聊一个很现实的收入问题&#xff0c;巧合的是&#xff1a;他的焦虑&#xff0c;竟然和月薪5k的我一模一样。 今天给大家分享一下。 1、外人看来&#xff0c;让人羡…

Scrpay框架之MongoDB--Index

目录 MongoDB-Index 概念 索引类型 创建索引 注意 样例 索引的查看 删除索引 语法 样例 检测索引的速度优势 Mongo-Unique Index And Compound Index 唯一索引&#xff08;Unique Index&#xff09; 添加唯一索引的语法 利用唯一索引进行数据去重 复合索引&a…

zkSync的ZK Stack:Hyperchains和Hyperbridges

1. 引言 ZK Stack有2个关键特性&#xff1a; sovereignty 主权&#xff1a;作为创建者&#xff0c;可对自己的链有完全的自由和权利来定制链的每一个方面。 Hyperchains独立运行&#xff0c;依赖以太坊L1来提供安全性和活性。 seamless connectivity 无缝连接。 Hyperbridges…

SolidWorks全球认证报名简章

SolidWorks CSWP专业认证考试 一、CSWP的起源 CSWP全名为Certified SolidWorks Professional &#xff0c;为SolidWorks原厂认证&#xff1b;在全球非常具有公信力。是健全与完整的3D CAD认证&#xff0c;相较于一般宣称是3D CAD认证&#xff0c;但是却没有投入完整的团队与完…

Barplot | 平平无奇的环形Barplot你掌握了吗!?~(附完整代码)

1写在前面 最近天天下雨&#xff0c;真是下得我没脾气啊&#xff0c;动不动就淋成狗。&#x1f62d; 下雨也就算了&#xff0c;还特别热。&#x1f912; 不知道是不是人到中年了&#xff0c;事情也特别的多&#xff0c;能静下心来思考的时间越来越少了。&#x1f61e; 也越来越…

SparkSQL与Hive整合(Spark On Hive)

1. Hive的元数据服务 hive metastore元数据服务用来存储元数据&#xff0c;所谓元数据&#xff0c;即hive中库、表、字段、字段所属表、表所属库、表的数据所在目录及数据分区信息。元数据默认存储在hive自带的Derby数据库。在内嵌模式和本地模式下&#xff0c;metastore嵌入在…

安装一个新虚拟环境——就叫它newtorch吧!

文章目录 1 新建一个虚拟环境newtorch2 安装pytorch1.7.1依赖包3 安装matplotlib2.2.34 安装torchsummary5 现在开始测试一下代码6 安装pandas 1 新建一个虚拟环境newtorch 打开anaconda prompt&#xff0c;输入&#xff1a; conda create -n newtorch python3.7.4// newtorc…

idea多模块测试——暂时不启动某个有问题的模块,之后再加载回来

文章目录 遇到问题解决方案暂时卸载然后还原 遇到问题 某个模块出了问题&#xff0c;运行不了项目 解决方案 暂时卸载 然后还原

云原生之深入解析Dapr安全性之访问控制策略

一、服务调用范围访问策略 ① 跨命名空间的服务调用 Dapr 通过服务调用 API 提供端到端的安全性&#xff0c;能够使用 Dapr 对应用程序进行身份验证并设置端点访问策略&#xff1a; Dapr 应用程序可以被限定在特定的命名空间&#xff0c;以实现部署和安全&#xff0c;当然仍然…

计算机基础知识学习笔记

目录 1.计算机奠基人—冯•诺依曼1.冯诺依曼结构2.冯诺依曼结构的特点 2.计算机的发展 感觉自己的计算机基础知识还很薄弱&#xff0c;工作之余补习一下。1.计算机奠基人—冯•诺依曼 1.冯诺依曼结构 冯诺依曼结构也称作普林斯顿结构&#xff0c;是一种将程序&#xff08;指令…

【C语言】大小端介绍以及判断大小端的两种方式

前言 &#x1f388;大家好&#xff0c;我是何小侠&#x1f388; &#x1f343;大家可以叫我小何或者小侠&#x1f343; &#x1f490;希望能通过写博客加深自己对于学习内容的理解&#x1f490; &#x1f338;也能帮助更多人理解和学习&#x1f338; 花繁柳密处&#xff0c;拨…

【探索 Kubernetes|作业管理篇 系列 16】离线业务 Job、CronJob

前言 大家好&#xff0c;我是秋意零。 在上一篇中&#xff0c;我们讲解了 DaemonSet 控制器&#xff0c;相信你以及理解了其的工作过程&#xff0c;分为三部。一是&#xff0c;获取所有 Node 节点中的 Pod&#xff1b;二是&#xff0c;判断是否有符合 DaemonSet 管理的 Pod&a…

osg实现镜面成像、倒影效果

目录 1. 需求提出 2. 代码实现 3. 功能讲解 3.1. 设置地面半透明 3.2. 设置镜面倒影成像 3.3. 设置地面颜色 3.4. 设置相机初始位置 4. 总结 1. 需求提出 平时的业务需求&#xff0c;有时需要实现镜面成像、倒影效果&#xff0c;如下&#xff1a…

79、基于STM32单片机DHT11温湿度无线蓝牙手机APP监控报警系统(程序+原理图+PCB图+设计资料+参考论文+开题报告+元器件清单等)

摘 要 温湿度控制已成为当今社会研究的热门项目。是工农业生产过程中必须考虑的因素。作为最常见的被控参数。温度和湿度已经不再是相互独立的物理量&#xff0c;而应在系统中综合考虑。广泛应用于实验室、大棚、花圃、粮仓乃至土壤等各个领域。而传统的温湿度控制则利用湿度…

Qt QLineEdit篇

QLineEdit篇 【1】QLineEdit简介【2】QLineEdit常用方法【3】QLineEdit使用举例UI设计界面效果头文件源文件 PC饱和了&#xff0c;跟我学Qt比较实在&#xff0c;哈哈哈 【1】QLineEdit简介 QLineEdit是Qt框架中的一个类&#xff0c;用于创建一个文本输入框&#xff0c;允许用…

【WSN定位】基于蜣螂优化算法DBO的Dvhop定位算法 不同锚节点比例和不同通信半径情况下对比【Matlab代码#45】

文章目录 【可更换其他算法&#xff0c;获取资源请见文章第5节&#xff1a;资源获取】1. Dvhop定位算法2. 蜣螂优化算法3. 部分代码展示4. 仿真结果展示5. 资源获取 【可更换其他算法&#xff0c;获取资源请见文章第5节&#xff1a;资源获取】 1. Dvhop定位算法 根据距离矢量和…

#systemverilog# 关于随机约束之 约束块

随机变量的值通过由约束块声明的约束表达式来确定。像任务、函数和变量一样,随机块是类的成员。在一个类中,约束块的名字必须是唯一的。 一 语法定义 声明约束块的语法如下: (1)constraint_identifier是约束块的名字。使用constraint_mode()(参见12.8节)方法,这个名字…

初步认识Java垃圾回收算法

GCRoot指被栈上直接或间接引用的对象&#xff0c;或被本地方法栈直接或间接引用的对象&#xff0c;或被方法区引用的对象。 被引用的对象是不能被删除的。 如果对象跟GCRoot并没有直接或间接相连的关系&#xff0c;那么这些对象就可以被删除了。 标记-清理&#xff1a;将需要删…