网络设备管理系统

教学目的与要求

“数据库与信息管理课程设计” 是网络工程、软件工程和计算机科学与技术专业集中实践性环节之一;是计算机学科基础的一门重要的实践教学课程;是学习完“数据库概论” 课程后进行的一次全面的综合练习。其目的在于加深对数据库基础理论和基本知识的理解,掌握使用数据库进行软件设计的基本方法,提高运用数据库解决实际问题的能力,最终实现对于给定的应用要求,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息要求和处理要求)。同时,此次设计对于同学将来的毕业设计和具体工作实践将有重要的意义。

要求有清晰的数据库设计思路(概念结构设计、逻辑结构设计、物理设计);关系模式规范到3NF以上,至少有三种完整性约束。

数据库管理系统的选择:鉴于这次课程设计是在线上进行,每位同学的上机条件有限,可以选择方便使用的关系数据库管理系统, 比如Oracle , MY SQL,SQL Server, ……
开发工具的选择:Python,Java,.net,PHP等

  • 优秀标准:较好的实现了所有功能;数据库设计思路清晰,有比较完善的触发器或者存储过程。
  • 良好标准:完成了大部分功能;数据库设计思路比较清晰。
  • 中等标准:完成了大部分功能;数据库设计思路基本清晰。
  • 及格标准:完成了基本功能;数据库设计思路基本清晰。
  • 不及格标准:未完成了基本功能;数据库设计思路不清晰。

系统概述:

网络设备管理系统面向公司管理、维护人员开放,系统具有以下功能

  • 设备检索
  • 设备位置检索
  • 设备登录
  • 我管理的设备
  • 故障提醒
  • 故障报修
  • 故障维修记录
  • 用户登录
  • 用户退出
  • 查看用户信息(管理员)
  • 按设备类型检索
  • 录入设备信息
  • 设备信息移交
  • 临时禁用用户
  • 修改自己的密码
  • 填写设备报修信息
  • 根据用户种类调整面板

主要信息

主要管理路由器、服务器、交换机三种设备,描述信息如下:

  • 设备信息 设备号 ID 名称 类型{路由器,交换机,服务器,…}
  • 设备类型 {属性:属性值}
  1. 路由器

    出厂号 描述 位置 型号 操作系统 管理人 管理 管理IP 账号 密码 配置文件 故障维修记录 各端口的属性与连接信息 厂家 报修电话 维保日期 购买时间 录入人

  2. 服务器

    出厂号 描述 位置 型号 CPU 内存 硬盘 操作系统 管理人 管理IP 账号 密码 故障维修记录 支持的服务与端口 厂家 报修电话 维保日期 购买时间 录入人 IP地址

  3. 交换机

    出厂号 描述 位置 型号 管理人 IP 故障维修记录 厂家 报修电话 购买时间 录入人 网段 VLAN 维保日期

  • 位置信息包括 楼 房间 机架 机架中位置
  1. 管理员

    姓名 性别 工号 电话 用户名 密码 部门

  2. 录入员

    姓名 性别 工号 电话 用户名 密码 部门

  3. 报修人员

    姓名 性别 工号 电话 用户名 密码 部门

  4. 故障维修记录

    故障级别(轻,重) 维修结果 维修记录 。级别轻:管理员重启、修改配置可修正的问题。级别重:需要更换硬件、维修硬件修改问题。 维修结果:已解决,暂时解决需要进一步维护,未解决。

  1. 服务信息

    服务名称 服务类型 服务描述 协议 端口号

设备检索功能

  • 检索所有设备,按设备号、设备名称厂家等信息查找设备
  • 检索我的设备,管理员查找自己管理的设备
  • 设备位置检索,按设备位置检索设备
  • 设备分类检索,按设备类型检索设备
  • 按服务检索 ,按服务类型、端口号、协议检索信息

查看设备信息,按设备类型显示设备详细信息

信息管理

  • 设备信息管理
    设备录入,管理员、录入员可以录入设备信息、
    管理员可以维护设备信息、服务信息、管理信息、故障维修记录
    设备移交,管理员可以将设备移交给其他管理员
  • 用户信息管理
    用户管理员,管理录入员、管理员、报修员信息,重置用户密码,审核信息修改。
    用户注册,报修员、录入员、管理员可在系统中注册
    用户信息修改,用户可修改自己的密码,个人信息。个人信息修改需要用户管理员审核
    临时禁用用户
    查看管理员管理设备数量

设备维修管理

报修员填写设备报修信息
管理员维护设备后,填写设备维修记录
设备维修记录会反馈给报修员

思路整理

E-R图

ER 图

数据库三范式3NF

确保每列保持原子性-

  • 不符合

    -学号- -家庭信息-
    2020083419 3人,山东
  • 符合

    -学号- -家庭人数- -家庭住址-
    2020083419 3 山东

确保表中的每列都和主键相关
也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中

  • 不符合
    2NF1
    同一个订单中可能包含不同的产品,因此主键必须是“订单号”和“产品号”联合组成,但可以发现,产品数量、产品折扣、产品价格与“订单号”和“产品号”都相关,但是订单金额和订单时间仅与“订单号”相关,与“产品号”无关,
    这样就不满足第二范式的要求,调整如下,需分成两个表:
  • 符合
    2NF2
    2NF3

确保每列都和主键列直接相关,而不是间接相关
在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)

  • 不符合
    3NF1
    上表中,所有属性都完全依赖于学号,所以满足第二范式,但是“班主任性别”和“班主任年龄”直接依赖的是“班主任姓名”,
    而不是主键“学号”,所以需做如下调整:
  • 符合
    3NF2
    3NF3

数据库设计简易版

库设计

表名 描述
eqpt 设备表
employee 员工表
trb_record 故障维修记录表
service_info 服务信息表
router 路由器表
server 服务器表
switch 交换机表
administrator 管理员表
operator 录入员表
repairer 保修人员表
trb_level 故障级别表
trb_res 维修结果表
eqpt_loca 位置信息表

表设计

员工表

字段名 描述 类型
eno 工号 主键 int
empl_type 工作类型 enum
password 密码 varchar
tele 手机号 int
username 用户名 varchar
gender 性别 enum
name 姓名 varchar
status 状态 varchar

故障维修记录表

字段名 描述 类型
trbno 唯一标识 主键 int
level 故障级别 int
res 维修结果 int
eqpt_record 维修记录 设备id int

服务信息表

字段名 描述 类型
service_id 唯一标识 主键 int
name 服务名称 varchar
type 服务类型 char
description 服务描述 varcahr
agreement 协议 carcahr
port 端口号 int

设备表

字段名 描述 类型
eqpt_id 唯一标识 主键 int
eqpt_type 设备类型 enum
factory_no 出厂号 char
description 描述 varchar
loca_id 位置 外键 int
model 型号 varchar
manager 管理人工号 外键 int
factory 厂家 varchar
trb_tele 报修电话 char
maintenance_date 维保日期 datetime
purchase_date 购买时间 datetime
enterone 录入员 外键 int

路由器表

字段名 描述 类型
eqpt_id 唯一标识 外键 int
system 操作系统 char
manage 管理 varchar
manage_ip 管理IP 以分号分隔 varchar
server_account 账号 varchar
server_password 密码 varchar
config 配置文件 路径 varchar
p_c_info 端口属性连接信息 varchar

服务器表

字段名 描述 类型
eqpt_id 唯一标识 外键 int
manage 管理 varchar
manage_ip 管理IP 以分号分隔 varchar
router_account 账号 varchar
router_password 密码 varchar
cpu cpu varchar
ram 内存(单位MB) int
rom 硬盘 容量(单位GB) int
ipaddress ip地址 char
sup_p_s 支持的端口和服务 int

交换机表

字段名 描述 类型
eqpt_id 唯一标识 外键 int
ipaddress ip地址 char

故障级别表

字段名 描述 类型
trblevel 故障等级 int
description 描述 varchar

位置信息表

位置信息包括 楼 房间 机架 机架中位置
|字段名|描述|类型|
|—|—|—|
|loca_id|位置信息id|int|
|building|楼号|int|
|room|房间号|varchar|
|rack|机架号|varchar|
|layer|机架中的层|int|

数据库语句

建表

用户表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for employee
-- ----------------------------
DROP TABLE IF EXISTS `employee`;
CREATE TABLE `employee` (
`eno` int NOT NULL AUTO_INCREMENT,
`password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`empl_type` enum('administrator','operator','repairer','root') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`tele` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`gender` enum('男','女') CHARACTER SET ucs2 COLLATE ucs2_general_ci NOT NULL,
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`status` enum('online','offline','banned') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`eno`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1091 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

设备表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for eqpt
-- ----------------------------
DROP TABLE IF EXISTS `eqpt`;
CREATE TABLE `eqpt` (
`eqpt_id` int NOT NULL,
`eqpt_type` enum('router','switch','server') CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
`factory_no` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
`description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
`local_id` int NOT NULL,
`model` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
`manager` int NOT NULL,
`factory` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
`trb_tele` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
`maintenance_date` datetime NOT NULL,
`purchase_date` datetime NOT NULL,
`enterone` int NOT NULL,
PRIMARY KEY (`eqpt_id`) USING BTREE,
INDEX `fk_loca`(`local_id`) USING BTREE,
INDEX `fk_manager`(`manager`) USING BTREE,
INDEX `fk_enter`(`enterone`) USING BTREE,
CONSTRAINT `fk_enter` FOREIGN KEY (`enterone`) REFERENCES `employee` (`eno`) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT `fk_loca` FOREIGN KEY (`local_id`) REFERENCES `eqpt_location` (`loca_id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT `fk_manager` FOREIGN KEY (`manager`) REFERENCES `employee` (`eno`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

设备位置表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for eqpt_location
-- ----------------------------
DROP TABLE IF EXISTS `eqpt_location`;
CREATE TABLE `eqpt_location` (
`local_id` int NOT NULL,
`building` int NOT NULL,
`room` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
`rack` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
`layer` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
PRIMARY KEY (`loca_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

维修记录表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for maintenance_record
-- ----------------------------
DROP TABLE IF EXISTS `maintenance_record`;
CREATE TABLE `maintenance_record` (
`trb_id` int NOT NULL,
`level` int NOT NULL,
`eqpt_record` int NOT NULL,
`desciption` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
PRIMARY KEY (`trb_id`) USING BTREE,
INDEX `fk_level`(`level`) USING BTREE,
INDEX `fk_record_eqpt`(`eqpt_record`) USING BTREE,
CONSTRAINT `fk_level` FOREIGN KEY (`level`) REFERENCES `trb_level` (`trblevel`) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT `fk_record_eqpt` FOREIGN KEY (`eqpt_record`) REFERENCES `eqpt` (`eqpt_id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;


路由器表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for router
-- ----------------------------
DROP TABLE IF EXISTS `router`;
CREATE TABLE `router` (
`eqpt_id` int NOT NULL,
`system` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
`manage` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
`manage_ip` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
`router_account` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
`router_password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
`config` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
`p_c_info` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
PRIMARY KEY (`eqpt_id`) USING BTREE,
CONSTRAINT `fk_eqptrouter` FOREIGN KEY (`eqpt_id`) REFERENCES `eqpt` (`eqpt_id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

服务器表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for server
-- ----------------------------
DROP TABLE IF EXISTS `server`;
CREATE TABLE `server` (
`eqpt_id` int NOT NULL,
`manage` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
`manage_ip` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
`server_account` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
`server_password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
`cpu` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
`ram` int NOT NULL,
`rom` int NOT NULL,
`ipaddress` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
`sup_p_s` int NULL DEFAULT NULL,
PRIMARY KEY (`eqpt_id`) USING BTREE,
INDEX `fk_service`(`sup_p_s`) USING BTREE,
CONSTRAINT `fk_eqptserver` FOREIGN KEY (`eqpt_id`) REFERENCES `eqpt` (`eqpt_id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT `fk_service` FOREIGN KEY (`sup_p_s`) REFERENCES `service_info` (`service_id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;


交换机表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for switch
-- ----------------------------
DROP TABLE IF EXISTS `switch`;
CREATE TABLE `switch` (
`eqpt_id` int NOT NULL,
`ipaddress` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
PRIMARY KEY (`eqpt_id`) USING BTREE,
CONSTRAINT `fk_eqptswitch` FOREIGN KEY (`eqpt_id`) REFERENCES `eqpt` (`eqpt_id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

故障等级表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for trb_level
-- ----------------------------
DROP TABLE IF EXISTS `trb_level`;
CREATE TABLE `trb_level` (
`trblevel` int NOT NULL,
`trb_description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
PRIMARY KEY (`trblevel`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

服务信息表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for service_info
-- ----------------------------
DROP TABLE IF EXISTS `service_info`;
CREATE TABLE `service_info` (
`service_id` int NOT NULL,
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
`type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
`description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
`agreement` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
`port` int NULL DEFAULT NULL,
PRIMARY KEY (`service_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

  • 其中故障等级表内容固定如下
1
2
3
4
5
6
+----------+-----------------------------------------------------+
| trblevel | description |
+----------+-----------------------------------------------------+
| 0 | 管理员重启、修改配置可修正的问题。 |
| 1 | 需要更换硬件、维修硬件修改问题 |
+----------+-----------------------------------------------------+

测试数据准备

测试数据使用python faker库生成

emoloyee表

  • 密码统一为md5加密后的123456
1
2
3
4
sqli = "INSERT INTO employee VALUES (null,'%s',%d,'%s','%s',%d,'%s')"\
%(passwd,random.randint(2,4),fake.phone_number(),fake.email(),random.randint(1,2),fake.name())


eqpt_location表

  • 一共6号楼
  • 每栋楼6楼
  • 每层楼20个房间
  • 每个房间8个机架
  • 每个机架上中下三层
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

cur = conn.cursor()
sqli = "SELECT MAX(loca_id) FROM `eqpt_location`"
cur.execute(sqli)
nowId = cur.fetchone()[0] + 1

layers = {
1:'上',
2:'中',
3:'下'
}

try:
for i in range(19):
localId = nowId + i
building = random.randint(1,6)
room = str(random.randint(1,6)) + '{:0>2}'.format(str(random.randint(1,20)))
rack = random.randint(1,8)
layer = layers[random.randint(1,3)]
sqli = "INSERT INTO `eqpt_location` VALUES ( %d, %d, '%s', '%s', '%s')"\
%(localId, building, room, rack, layer)
print(sqli)
cur.execute(sqli)
except Exception as e:
print('插入失败:',e)
else:
conn.commit()

eqpt表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71

models = {
1:{
1:'CISCO ISR4221/K9',
2:'TP-LINK TL-R473G',
3:'H3C ER5200G3'
},
2:{
1:'华为 S5735S-L24T4S-A',
2:'H3C S5024PV5-EI',
3:'锐捷网络 RG-NBS3100-24GT4SFP'
},
3:{
1:'H3C R4900 G3',
2:'华为 FusionServer Pro 5885H V5',
3:'浪潮 NF5280M5'
}

}

# 找到ID
sqli = "SELECT MAX(eqpt_id) FROM `eqpt`"
cur.execute(sqli)
data = cur.fetchone()
nowId = data[0] + 1
# print(nowId)

# 找到管理员

sqli = "SELECT eno FROM employee WHERE empl_type = 'administrator'"
cur.execute(sqli)
data = cur.fetchall()
managers = list()
for i in data:
managers.append(i[0])

# 找到录入员

sqli = "SELECT eno FROM employee WHERE empl_type = 'operator'"
cur.execute(sqli)
data = cur.fetchall()
operators = list()
for i in data:
operators.append(i[0])

try:
for i in range(20):
randType = random.randint(1,3)
randModel = random.randint(1,3)
eqptId = nowId + i
eqptType = randType
factoryNo = '{:0>9}'.format(str(random.randint(1,1000000000)))
description = fake.sentence(nb_words=6, variable_nb_words=True, ext_word_list=None)[:20]
localId = eqptId - 1000
model = models[eqptType][randModel]
manager = int(random.choice(managers))
factory = model.split(' ')[0]
trbTele = fake.phone_number()
maintenanceDate = fake.date(pattern="%Y-%m-%d %H-%M-%S", end_datetime=None)
purchaseDate = fake.date(pattern="%Y-%m-%d %H-%M-%S", end_datetime=None)
enterOne = int(random.choice(operators))

sqli = "INSERT INTO eqpt VALUES (%d,%d,'%s','%s',%d,'%s',%d,'%s','%s','%s','%s',%d)"\
%(eqptId,eqptType,factoryNo,description,localId,model,manager,factory,trbTele,maintenanceDate,purchaseDate,enterOne)

# print(sqli)
cur.execute(sqli)
except Exception as e:
print('插入失败:',e)
else:
conn.commit()

router表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

# 路由器操作系统
systems=('openwrt','linux','Vyatta','ClearOS','Endian')

# 数据库操作游标
cur = conn.cursor()
sqli = "select eqpt_id from eqpt where eqpt_type = 'router'"
cur.execute(sqli)
data = cur.fetchall()
# 确定id
eqptIdList = list()
for i in data:
eqptIdList.append(i[0])

try:
for id in eqptIdList:
eqpt_id = id
system = random.choice(systems)
manage="root"
manage_ip = fake.ipv4(network=False, address_class=None, private=None)
router_account = fake.user_name()
router_password = "123456"
config = fake.image_url(width=None, height=None)
p_c_info = str(random.randint(10000,50000)) +" "+ str(fake.ipv4_private(network=False, address_class=None) )
sqli="insert into router values(%d,'%s','%s','%s','%s','%s','%s','%s')"\
%(eqpt_id,system,manage,manage_ip,router_account,router_password,config,p_c_info)
# print(sqli)
cur.execute(sqli)
except Exception as e:
print("插入失败:",e)
else:
conn.commit()

server表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# 数据库操作游标
cur = conn.cursor()

# cpu
cpus = ['Intel Xeon E5-2678 v3','AMD 霄龙 7763','Intel Xeon Silver 4210R']

# 路由器操作系统
systems=('openwrt','linux','Vyatta','ClearOS','Endian')

# 服务信息
sup_p_ss=list()
sqli = "select service_id from service_info"
cur.execute(sqli)
data = cur.fetchall()
for i in data :
sup_p_ss.append(i[0])

sqli = "select eqpt_id from eqpt where eqpt_type = 'server'"
cur.execute(sqli)
data = cur.fetchall()
# 确定id
eqptIdList = list()
for i in data:
eqptIdList.append(i[0])

try:
for id in eqptIdList:
eqpt_id = id
manage = 'root'
manage_ip = fake.ipv4(network=False, address_class=None, private=None)
server_account = fake.user_name()
server_password = "123456"
cpu = random.choice(cpus)
ram = random.randint(1,4) * 4 * 1024
rom = random.randint(2,6) * 40
ipaddress = fake.ipv4(network=False, address_class=None, private=None)
sup_p_s = random.choice(sup_p_ss)
sqli = "insert into server values(%d,'%s','%s','%s','%s','%s',%d,%d,'%s',%d)"\
%(eqpt_id, manage, manage_ip, server_account, server_password,cpu, ram, rom, ipaddress, sup_p_s)
# print(sqli)
cur.execute(sqli)
except Exception as e:
print("插入失败",e)
else:
conn.commit()

cur.close()
conn.close()


service_info表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

# 服务类型
types = ['DHCP','DNS','FTP','Telnet','WINS','SMTP']
# 协议名
agreements = ['IP' , 'ICMP', 'ICMPv6','IGMP' ,'IS-IS' , 'IPsec' , 'ARP' , 'RARP' , 'RIP']

# 数据库操作游标
cur = conn.cursor()
sqli = "select max(service_id) from service_info"
cur.execute(sqli)
nowId = cur.fetchone()[0] + 1

try:
for i in range(10):
service_id = nowId + i
name = fake.user_name()
type = random.choice(types)
description = fake.sentence(nb_words=6, variable_nb_words=True, ext_word_list=None)[:10]
agreement = random.choice(agreements)
port = random.randint(10000,60000)
sqli = "insert into service_info values(%d,'%s','%s','%s','%s',%d)"\
%(service_id, name, type, description, agreement, port)
# print(sqli)
cur.execute(sqli)
except Exception as e:
print("插入失败",e)
else:
conn.commit()

switch表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

# 数据库连接信息
conn = pymysql.connect(
host='localhost',
user='root',
password='123456',
db='neteqpt',
charset='utf8',
)

# 数据库操作游标
cur = conn.cursor()

sqli = "select eqpt_id from eqpt where eqpt_type = 'switch'"
cur.execute(sqli)
data = cur.fetchall()
eqpt_ids = list()
for i in data:
eqpt_ids.append(i[0])

try:
for eqpt_id in eqpt_ids:
ipaddress = fake.ipv4(network=False, address_class=None, private=None)
sqli = "insert into switch values(%d,'%s')"\
%(eqpt_id,ipaddress)
print(sqli)
cur.execute(sqli)
except Exception as e:
print('插入失败',e)
else:
conn.commit()
cur.close()
conn.close()

maintenance_record

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 数据库操作游标
cur = conn.cursor()

def addMaintenanceRecord():
print('addMaintenanceRecord')
# 获取主键
sqli = "select MAX(trb_id) from maintenance_record"
cur.execute(sqli)
nowId = cur.fetchone()[0] + 1

# 获取设备号
sqli = "select eqpt_id from eqpt"
cur.execute(sqli)
eqpt_records = list()
for i in cur.fetchall():
eqpt_records.append(i[0])
try:
for i in range(10):
trb_id = nowId + i
level = random.randint(0,1)
desciption = fake.sentence(nb_words=3, variable_nb_words=True, ext_word_list=None)[:10]
eqpt_record = random.choice(eqpt_records)
sqli = "insert into maintenance_record values(%d,%d,%d,'%s')"\
%(trb_id, level, eqpt_record, desciption)
# print(sqli)
cur.execute(sqli)
except Exception as e:
print("插入失败:",e)
else:
conn.commit()
cur.close()
conn.close()

if __name__ == '__main__':
addMaintenanceRecord()

进展

  • 31/05/2022 16:45 完成用户登录、用户信息查询
  • 31/05/2022 19:43 其余表设计
  • 04/06/2022 10:57 完成员工表、设备表、位置信息表测试数据
  • 04/06/2022 20:41 完成根据eno查询设备
  • 05/06/2022 21:22 完成设备查询登录
  • 05/06/2022 23:58 完成根据位置查询
  • 06/06/2022 00:44 报修记录测试数据
  • 06/06/2022 17:35 设备类型查询
  • 06/06/2022 22:01 退出 调整员工表
  • 08/06/2022 21:38 添加设备完成
  • 08/06/2022 23:46 添加保修信息
  • 09/06/2022 01:13 封禁账号
  • 09/06/2022 02:17 大体完成