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

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

 内容与要求:

  • 完成需求分析,写出功能需求和数据需求描述;
  • 在需求分析的基础上,完成数据库概念结构设计、逻辑结构设计、物理结构设计和数据库创建;
  • 完成视图、存储过程设计,要求定义合理。
  • 在应用程序中合理运用存储过程,正确运用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增加不同角色的登录页面跳转 ( ⓛ ω ⓛ *)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

onlywishes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值