0


网吧管理系统数据库设计

摘 要:网吧管理系统是为解决大型网吧面临的复杂电脑管理业务流程和繁琐的客户服务、信息处理业务而开发的管理系统。它主要包含系统管理、会员管理、日常管理、查询管理、统计报表五个模块。数据库设计过程中主要进行了分析网吧电脑使用业务方面的需求,进行概念结构、逻辑结构和物理结构的设计,并通过建立视图、存储过程和触发器实现了满足不同用户的不同需求,如针对会员的上机和服务,针对管理员的账单查看和收费时间计划管理以及针对不同等级的会员的不同服务。实现了较为自动化、人性化的网吧管理、会员服务、信息管理的管理功能。

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. 收费报表:查询所有用户的充值情况和消费情况

数据流程图

数据字典

1.数据项

表6-1 数据项

编号

属性名

含义

数据类型

长度

约束条件

DI-01

UserAccount

会员账号

Varchar2

40

DI-02

UserID

会员身份证号

Varchar2

40

DI-03

UserAge

会员年龄

Number

40

1-100

DI-04

UserPassword

会员密码

Varchar2

40

DI-05

UserBalance

会员余额

Number

40

DI-06

UserPhone

会员电话号

Varchar2

40

DI-07

UserQQ

会员QQ

Varchar2

40

DI-08

UserWechat

会员微信

Varchar2

40

DI-09

UserProfession

会员职业

Varchar2

40

DI-10

UserSex

会员性别

Number

40

0 or 1

DI-11

UserAddress

会员地址

Varchar2

40

DI-12

UserGrade

会员等级

Number

40

DI-13

AdministratorAccount

管理员账号

Varchar2

40

DI-14

AdministratorID

管理员身份证号

Varchar2

40

DI-15

AdministratorAge

管理员年龄

Number

40

1-100

DI-16

AdministratorPassword

管理员密码

Varchar2

40

DI-17

AdministratorPhone

管理员电话号

Varchar2

40

DI-18

AdministratorQQ

管理员QQ

Varchar2

40

DI-19

AdministratorWechat

管理员微信

Varchar2

40

DI-20

AdministratorProfession

管理员职业

Varchar2

40

DI-21

AdministratorSex

管理员性别

Number

40

0 or 1

DI-22

AdministratorAddress

管理员地址

Varchar2

40

DI-23

AdministratorRight

管理员权限

Number

40

0 or 1

DI-24

UserUP_time

会员上机时间

Date

40

DI-25

UserDown_time

会员下机时间

Date

40

DI-26

AdministratorUp_time

管理员上班时间

Date

40

DI-27

AdministratorDown_time

管理员下班时间

Date

40

DI-28

UserDuration

会员上机时长

Number

40

1-100

DI-29

AdministrationDuration

管理员工作时长

Number

40

0-24

DI-30

User_recharge_amount

会员充值金额

Number

40

DI-31

User_other_consume

会员其他消费金额

Number

40

DI-32

Bill_ID

账单编号

Number

40

DI-33

User_consume

会员消费金额

Varchar2

40

DI-34

PC_ID

电脑编号

Varchar2

40

DI-35

PC_Gpu

电脑显卡

Varchar2

40

DI-36

PC_CPU

电脑CPU

Varchar2

40

DI-37

PC_Display

电脑显示器

Varchar2

40

DI-38

PC_Keyboard

电脑键鼠

Varchar2

40

DI-39

PC_maintain_Money

电脑维修金额

Number

40

DI-40

PC_charge_grade

电脑收费等级

Date

40

DI-41

PC_charge_time

收费时间段

Date

40

DI-42

Charge_money

收费金额

Varchar2

40

DI-43

User_massage

会员消息

Varchar2

40

DI-44

PC_state

电脑使用状态

Number

40

0 or 1

DI-45

Rest_time

会员可用时间

Number

40

DI-46

Extend_time_length

延时启动时长

Number

40

DI-47

Extend_PC_ID

延时启动机号

Varchar2

40

DI-48

Restart

是否重新启动

Varchar2

40

DI-49

Network_State

电脑网络状态

Number

40

0 or 1

DI-50

Extend_time

延时启动时间点

Date

40

当前时间

DI-51

Administrator_work_ID

工作单编号

Varchar2

40

DI-52

PC_maintain_ID

维修单编号

Varchar2

40

DI-53

User_Recharge_time

会员充值时间

number

40

大于0

DI-54

User_name

会员姓名

Varchar2

40

DI-55

Administrator_Name

管理员姓名

Varchar2

40

DI-56

Maintain_Content

维修内容

Varchar2

40

2.数据结构

表6-2 数据结构

含义

组成

会员表

UserAccount,UserID,UserAge,UserName,UserPassword,UserBalance,UserPhone,UserQQ,UserWechat,UserProfession,UserSex,UserAddress,UserGrade

管理员表

AdministratorAccount,AdministratorID,AdministratorAge,AdministratorName,AdministratorPassword,AdministratorPhone,AdministratorQQ,AdministratorWechat,AdministratorProfession,AdministratorSex,AdministratorAddress,AdministratorRight

电脑表

PC_ID,PC_Gpu,PC_CPU,PC_Display,PC_Keyboard,PC_charge_grade

账单(下机)

UserUP_time,UserDown_time,UserDuration,User_consume,Bill_ID,User_other_consume,UserAccount,AdministratorAccount,PC_ID,User_name,Administrator_name

电脑使用记录

PC_ID,UserAccount,AdministratorAccount,UserUP_time,UserDown_time,UserDuration,PC_charge_grade,PC_charge_time,PC_state

电脑维修记录

AdministratorAccount,PC_maintain_ID,PC_maintain_Money,Maintain_Content

上机情况表

PC_ID,UserAccount,AdministratorAccount,UserUP_time,UserDown_time,UserDuration,PC_charge_grade,PC_charge_time,PC_state,Extend_time_length,Extend_PC_ID,Restart,Network_State,Extend_time

会员充值表

UserAccount,AdministratorAccount,User_recharge_amount,User_Recharge_time ,User_name,Administrator_Name

会员消息表

UserAccount,AdministratorAccount,User_name,Administrator_Name,User_massage,UserGrade

费率表

PC_ID,UserAccount,AdministratorAccount,PC_charge_grade,PC_charge_time,Charge_money

管理员工作表

AdministratorAccount,Administrator_Name,Administrator_work_ID,AdministratorPhone,AdministratorUp_time,AdministratorDown_time,AdministrationDuration

3.数据流

表6-3 数据流

编号

数据流名称

简述

数据流来源

数据流去向

数据流组成

数据流量

高峰流量

F1

机号信息

将电脑信息上传至电脑设置

管理员

客户端设置

DS-3

300次/月

500次/月

F2

机号信息

电脑的基本信息存入电脑表

客户端设置

电脑表

DS-20

300次/月

500次/月

F3

机号信息

电脑的基本信息传入费率设置

客户端设置

费率设置

DS-10

3次/月

6次/月

F4

时段信息

传输收费的时间段

管理员

时段设置

DS-17

30次/月

60次/月

F5

费率信息

传输收费的金额等信息

管理员

费率设置

DS-18

30次/月

60次/月

F6

管理员信息

传输管理员信息用于设置

管理员

管理员设置

DS-11

5次/月

10次/月

F7

管理员信息

存储管理员信息

管理员设置

管理员表

DS-15

5次/月

10次/月

F8

时段信息

存储收费时段信息

时段设置

时段表

DS-12

300次/月

500次/月

F9

时段信息

将时段信息传到费率设置

时段设置

费率设置

DS-10

3次/月

6次/月

F10

费率信息

存储费率信息

费率设置

费率表

DS-3

300次/月

500次/月

F11

会员ID

会员信息存储到会员表

会员添加

会员表

DS-13

300次/月

500次/月

F12

会员ID

传输会员信息用于添加

管理员

会员添加

DS-3

300次/月

500次/月

F13

会员详情信息

从会员表中提取信息

会员表

会员删除

DS-8

5次/月

10次/月

F14

会员ID

选择会员删除信息

管理员

会员删除

DS-7

5次/月

10次/月

F15

会员个人信息

将会员信息保存到会员表

会员修改

会员表

DS-8

5次/月

10次/月

F16

会员个人信息

会员修改个人信息

会员

会员修改

DS-7

5次/月

10次/月

F17

余额信息

用于会员查看余额

会员表

会员

DS-12

30次/月

30次/月

F18

余额信息

用于会员充值

会员表

账号充值

DS-13, DS-14

30次/月

50次/月

F19

充值金额

用于会员充值

会员

账号充值

DS-10

30次/月

50次/月

F20

充值信息

将充值信息保存

账号充值

充值表

DS-3

300次/月

500次/月

F21

检测信号

用于电脑的开机管理

管理员

开机管理

DS-2

300次/月

500次/月

F22

限时信息

限制电脑的使用时间

管理员

限时机制

DS-2

300次/月

500次/月

F23

机号信息

用于会员换机

管理员

换机机制

DS-9

3次/月

6次/月

F24

短信息

管理员接受消息

消息机制

管理员

DS-13

3次/月

6次/月

F25

连接信息

电脑的网络连接状态

开机管理

上机情况表

DS-14

3次/月

6次/月

F26

机号信息

将机号传到消息机制

电脑表

消息机制

DS-13

300次/月

500次/月

F27

机号信息

限时信息传到电脑表

限时机制

电脑表

DS-14

20次/月

10次/月

F28

延时信息

延长时间使用电脑

延时重启设置

上机情况表

DS-18

30次/月

60次/月

F29

重启信息

用于重新启动电脑

延时重启设置

上机情况表

DS-5

30次/月

60次/月

F30

费率信息

根据余额限制时间

费率表

限时机制

DS-18

25次/月

50次/月

F31

机号信息

设置延时重启的电脑

电脑表

延时重启设置

DS-5

25次/月

50次/月

F32

换机信息

换机信息存入上机情况表

换机机制

上机情况表

DS-18

20次/月

40次/月

F33

短消息

保存短消息

消息机制

短消息表

DS-6

20次/月

40次/月

F34

会员请求

会员对系统管理员的请求

会员

消息机制

DS-13, DS-14

300次/月

30次/月

F35

短消息

查看存储的短消息

段消息表

消息机制

DS-10

300次/月

50次/月

F36

会员消息

会员详细消息

会员表

账号查询

DS-3

300次/月

50次/月

F37

账号信息

管理员查看会员消息

账号查询

管理员

DS-2

3次/月

500次/月

F38

账单列表信息

账单发送给管理员

账单查询

管理员

DS-2

3次/月

500次/月

F39

上机情况

管理员查看上机情况

上机统计

管理员

DS-9

3次/月

500次/月

F40

充值账单信息

查看充值明细

充值明细

管理员

DS-13

300次/月

6次/月

F41

充值信息

充值表中查看明细

充值表

充值明细

DS-14

20次/月

6次/月

F42

个人充值信息

充值信息放入账单

充值表

账单查询

DS-13

30次/月

30次/月

F43

账单信息

账单表中提取账单信息

账单表

账单查询

DS-13, DS-14

30次/月

50次/月

F44

账单信息

会员查看账单信息

账单查询

会员

DS-10

300次/月

50次/月

F45

会员ID

查看特定会员账单

会员

账单查询

DS-3

300次/月

500次/月

F46

人数信息

查看上机人数

上机情况表

上机统计

DS-2

300次/月

500次/月

F47

管理员信息

查看管理员信息

管理员表

管理员统计

DS-2

3次/月

500次/月

F48

管理员值班信息

查看管理员值班信息

管理员统计

管理员

DS-9

3次/月

6次/月

F49

收费明细

查看会员的收费明细

收费报表

管理员

DS-13, DS-14

300次/月

30次/月

F50

管理员信息

哪个管理员收费

管理员表

收费报表

DS-10

300次/月

50次/月

F51

账单明细

具体的上机消费情况

上机情况表

收费报表

DS-3

300次/月

50次/月

F52

会员信息

用于会员统计

会员表

会员统计

DS-2

3次/月

500次/月

F53

会员信息

提供会员信息

会员统计

收费报表

DS-2

3次/月

500次/月

4.处理逻辑

表6-4 处理逻辑

编号

处理逻辑名称

简述

输入数据流

输出数据流

解释

处理频率

P1.1

管理员设置

对管理员的基本信息进行设计

F6 管理员信息

F7管理员信息

对管理员的基本信息进行设计

300次/月

P1.2

客户端设置

对电脑的基本信息进行设计

F2 机号信息

F1 机号信息 F3机号信息

对电脑的基本信息进行设计

300次/月

P1.3

时段设置

设置收费的时间段

F4 时段信息

F8 时段信息 F9 时段信息

设置收费的时间段

500次/月

P1.4

费率设置

设置电脑的收费情况

F3 机号信息 F5 费率信息 F9 时段信息

F10 费率信息

设置电脑的收费情况

5次/月

P2.1

会员添加

添加新的会员

F12 会员ID

F11 会员ID

添加新的会员

3次/月

P2.2

会员删除

会员删除自己信息

F14 会员ID F13 会员详情信息

会员删除自己信息

30次/月

P2.3

会员修改

会员修改信息

F16 会员个人信息

F15 会员个人信息

会员修改信息

25次/月

P2.4

账号充值

用户在账号充值

F18 余额信息 F19 充值余额

F20 充值信息

用户在账号充值

20次/月

P3.1

开机管理

处理电脑的开机

F21 检测信号

F25 连接信息

处理电脑的开机

300次/月

P3.2

限时机制

对会员的使用限时

F22 限时信息 F30 费率信息

F27 机号信息

对会员的使用限时

300次/月

P3.3

延时重启设置

在规定的时间重启电脑

F31 机号信息

F28 延时信息 F29 重启信息

在规定的时间重启电脑

500次/月

P3.4

换机机制

处理换机信息

F23 机号信息

F32 换机信息

处理换机信息

5次/月

P3.5

消息机制

处理会员的请求

F26 机号信息 F3 短消息 F34 会员请求

F24 短消息 F33 短消息

处理会员的请求

3次/月

P4.1

账号查询

对会员的账号查询

F36 会员信息

F37 账号信息

对会员的账号查询

30次/月

P4.2

账单查询

对会员的账单查询

F43 账单信息 F42 个人充值信息 F45 会员ID

F38 账单列表信息 F44 账单信息

对会员的账单查询

25次/月

P4.3

充值明细

处理会员的充值记录

F41 充值信息

F40 充值账单信息

处理会员的充值记录

300次/月

P4.4

上机统计

统计电脑使用情况

F46 人数信息

F39 上机情况

统计电脑使用情况

300次/月

P5.1

管理员统计

统计管理员信息

F47 管理员信息

F48 管理员值班信息

统计管理员信息

500次/月

P5.2

会员统计

统计会员信息

F52 会员信息

F53 会员信息

统计会员信息

5次/月

P5.3

收费报表

处理所有收费信息并统计

F50 管理员信息 F53 会员信息 F51 账单明细

F49 收费明细

处理所有收费信息并统计

3次/月

5.数据存储

表6-5 数据存储

编号

数据存储名称

简述

数据存储组成

相关联的处理

S1

管理员表

用于存放管理员的基本信息

DS-3

P1.1,P5.1,P5.3

S2

电脑表

用于存放电脑的基本信息

DS-8

P1.2,P3.2,P3.3,P3.5

S3

费率表

对不同电脑不同时间段的收费标准

DS-7

P1.4,P3.2

S4

会员表

用于存放会员的基本信息

DS-10

P2.1,P2.2,P2.3,P2.4,P4.1

S5

充值表

会员的充值记录

DS-12

P2.4,P4.2,P4.3

S6

上机情况表

会员的上机情况

DS-2

P3.1,P3.3,P3.4,P4.4,5.3

S7

短消息表

会员向管理员提出的请求

DS-9

P3.5

S8

时段表

不同时间的不同收费标准

DS-14

P1.3

S9

账单表

会员下机后的消费单

DS-15

P4.2

E-R图

关系模式

会员(会员账号,会员身份证号,会员年龄,会员密码,会员余额,会员电话号,会员QQ,会员微信,会员职业,会员性别,会员地址,会员等级)

电脑(电脑编号,电脑显卡,电脑CPU,电脑显示器,电脑键鼠,电脑收费等级)

管理员(管理员账号,管理员身份证号,管理员年龄,管理员密码,管理员电话号,管理员QQ,管理员微信,管理员职业,管理员性别,管理员地址,管理员权限)

时段表(时段编号,收费时间段,收费金额)

费率表(费率编号,电脑编号,会员账号,管理员账号,电脑收费等级)

上机情况表(上机情况编号,电脑编号,会员账号,管理员账号,用户上机时间,会员下机时间,会员上机时长,电脑收费等级,收费时间段,电脑状态,延长时间,换机机号,重启,网络状态,延时时刻)

使用记录表(使用记录编号,电脑编号,会员账号,管理员账号,用户上机时间,会员下机时间,会员上机时长,电脑收费等级,电脑收费时间段,电脑状态)

管理员工作表(工作编号,管理员账号,管理员姓名,工作表编号,管理员电话,上班时间,下班时间,工作时长)

维修记录表(维修编号,电脑编号,管理员账号,维修费用,维修内容)

账单表(账单编号,会员上机时间,会员下机时间,会员上机时长,会员消费,会员其他消费,用户账号,管理员账号,电脑编号,会员姓名,管理员姓名)

充值表(充值编号,会员账户,管理员账户,充值金额,充值时间,会员姓名,管理员姓名)

消息表(消息编号,会员账户,管理员账户,用户姓名,管理员姓名,会员消息,管理员消息,会员等级)

数据库实施

1. 用户表

create table User0
 (  
UserAccount         varchar2(10) not null,  
UserID       varchar2(10) not null,  
UserAge     int,  
UserName      varchar2(40),  
UserPassword            varchar2(10),  
UserBalance          float,  
UserPhone             varchar2(10),  
UserQQ          varchar2(10),  
UserWechat        varchar2(10),  
UserProfession    varchar2(30),  
UserSex           varchar2(10),  
UserAddress       varchar2(40),  
UserGrade         varchar2(20),  

constraint PK_UserAccount  primary key (UserAccount),  
constraint CK_UserAge check (UserAge>=0 and UserAge <= 100),  
constraint CK_UserBalance check (UserBalance>=0),
constraint CK_UserGrade check (UserGrade = '钻石' or UserGrade = '金卡' or UserGrade = '银卡' or UserGrade = '普通'), 
constraint CK_UserSex check (UserSex = '男' or  UserSex = '女')
);

2. 管理员表

create table Administrator
 (  
AdministratorAccount         varchar2(10) not null,  
AdministratorID       varchar2(10) not null,  
AdministratorAge     int,  
AdministratorName      varchar2(40),  
AdministratorPassword            varchar2(10),  
AdministratorQQ          varchar2(10),  
AdministratorWechat             varchar2(10),  
AdministratorProfession          varchar2(10),  
AdministratorPhone        varchar2(10),  
AdministratorSex           varchar2(10),  
AdministratorAddress       varchar2(40),  
AdministratorRight         varchar2(20),  

constraint PK_AdministratorAccount  primary key (AdministratorAccount),  
constraint CK_AdministratorAge check (AdministratorAge>=0 and AdministratorAge <= 100),  
constraint CK_AdministratorRight check (AdministratorRight = '普通' or AdministratorRight = '高级'), 
constraint CK_AdministratorSex check (AdministratorSex = '男' or  AdministratorSex = '女')
);

3. 电脑表

create table Computer
 (  
PC_ID         varchar2(10) not null,  
PC_Gpu       varchar2(40) ,  
PC_CPU     varchar2(40),  
PC_Display      varchar2(40),  
PC_Keyboard            varchar2(40),  
PC_charge_grade          int,  

constraint PK_PC_ID  primary key (PC_ID),  
constraint CK_PC_charge_grade check (PC_charge_grade = 1 or  PC_charge_grade =  2  or  PC_charge_grade =  3)
);

4. 时段表

create table Time_Frame
 (  
Time_Frame_ID         varchar2(10) not null,  
T_start       date,  
T_end        date,  
Charge_amount       float,  

constraint PK_Time_Frame_ID  primary key (Time_Frame_ID),  
constraint CK_Charge_amount check (Charge_amount >0)
);

5. 费率表

create table Charge_List
 (  
Rate_ID         varchar2(10) not null,  
PC_ID       varchar2(10),  
UserAccount        varchar2(10),  
AdministratorAccount       varchar2(10),  
PC_charge_grade       int ,

constraint PK_Rate_ID  primary key (Rate_ID),  
constraint FK_PC_ID foreign key (PC_ID)   references Computer(PC_ID),
constraint FK_UserAccount foreign key (UserAccount)   references User0(UserAccount),
constraint FK_AdministratorAccount foreign key (AdministratorAccount)   references Administrator(AdministratorAccount),
constraint CK_PC_charge_grade1 check (PC_charge_grade = 1 or  PC_charge_grade =  2  or  PC_charge_grade =  3)
);

6. 上机情况表

create table Up_Computer_List
 (  
Up_computer_ID         varchar2(10) not null,  
PC_ID       varchar2(10),  
UserAccount        varchar2(10),  
AdministratorAccount       varchar2(10),  
UserUP_time       date ,
UserDown_time      date,  
UserDuration        float,  
PC_charge_grade      int,  
T_start              date,  
T_end                  date,  
PC_state                varchar2(10),  
Extend_time_length       float,  
Extend_PC_ID              varchar2(10),  
Restart                    varchar2(10),  
Network_State               varchar2(10),  
Extend_time                 date,  
Charge_amount                 float,  

primary key (Up_computer_ID),  
foreign key (PC_ID)   references Computer(PC_ID),
foreign key (UserAccount)   references User0(UserAccount),
foreign key (AdministratorAccount)   references Administrator(AdministratorAccount),
foreign key (Extend_PC_ID)   references Computer(PC_ID),
check (PC_charge_grade = 1 or  PC_charge_grade =  2  or  PC_charge_grade =  3),
check(UserDuration>=0),
check(Extend_time_length>=0),
check(Charge_amount>=0),
check(PC_state='正常'or PC_state= '维修'),
check(Restart='是'or Restart= '否'),
check(Network_State='是'or Network_State= '否')
);

7. 使用记录表

create table Use_Computer_List
 (  
Use_Computer_ID         varchar2(10) not null,  
PC_ID       varchar2(10),  
UserAccount        varchar2(10),  
AdministratorAccount       varchar2(10),  
UserUP_time       date ,
UserDown_time      date,  
UserDuration        float,  
PC_charge_grade      int,  
T_start              date,  
T_end                  date,  
PC_state                varchar2(10),  
Charge_amount                 float,  

primary key (Use_Computer_ID),  
foreign key (PC_ID)   references Computer(PC_ID),
foreign key (UserAccount)   references User0(UserAccount),
foreign key (AdministratorAccount)   references Administrator(AdministratorAccount),
check (PC_charge_grade = 1 or  PC_charge_grade =  2  or  PC_charge_grade =  3),
check(UserDuration>=0),
check(Charge_amount>=0),
check(PC_state='正常'or PC_state= '维修')
);

8. 管理员工作表

create table Administrator_Work_List
 (  
Administrator_work_ID         varchar2(10) not null,  
AdministratorAccount       varchar2(10),  
Administrator_Name     varchar2(40), 
AdministratorPhone      varchar2(10), 
AdministratorUp_time       date ,
AdministratorDown_time      date,  
AdministrationDuration        float,  

primary key (Administrator_work_ID),  
foreign key (AdministratorAccount)   references Administrator(AdministratorAccount),
check(AdministrationDuration>=0)
);

9. 维修记录表

create table Maintain_List
 (  
PC_maintain_ID         varchar2(10) not null,  
PC_ID       varchar2(10),  
AdministratorAccount     varchar2(10), 
Maintain_Content      varchar2(80), 
PC_maintain_Money        float,  

primary key (PC_maintain_ID),  
foreign key (AdministratorAccount)   references Administrator(AdministratorAccount),
foreign key (PC_ID)   references Computer(PC_ID),
check(PC_maintain_Money>=0)
);

10. 账单表

create table Bill_List
 (  
Bill_ID         varchar2(10) not null,  
PC_ID       varchar2(10),  
UserAccount       varchar2(10),  
AdministratorAccount     varchar2(10), 
User_name                varchar2(40), 
Administrator_Name       varchar2(40), 
UserUP_time              date,
UserDown_time            date,
UserDuration             float,
User_consume             float,
User_other_consume       float,

primary key (Bill_ID),  
foreign key (AdministratorAccount)   references Administrator(AdministratorAccount),
foreign key (UserAccount)   references User0(UserAccount),
foreign key (PC_ID)   references Computer(PC_ID),
check(UserDuration>=0),
check(User_consume>=0),
check(User_other_consume>=0)
);

11. 充值表

create table User_recharge_List
 (  
Recharge_ID         varchar2(10) not null,  
UserAccount       varchar2(10),  
AdministratorAccount     varchar2(10), 
User_name                varchar2(40), 
Administrator_Name       varchar2(40), 
User_Recharge_time              date,
User_recharge_amount             float,

primary key (Recharge_ID),  
foreign key (AdministratorAccount)   references Administrator(AdministratorAccount),
foreign key (UserAccount)   references User0(UserAccount),
check(User_recharge_amount>=0)
);

12. 信息表

create table Maeeage_List
(  
Message_ID         varchar2(10) not null,  
UserAccount       varchar2(10),  
AdministratorAccount     varchar2(10), 
User_name                varchar2(40), 
Administrator_Name       varchar2(40), 
User_massage             varchar2(50),
UserGrade       varchar2(20),  
Administrator_massage    varchar2(50),

primary key (Message_ID),  
foreign key (AdministratorAccount)   references Administrator(AdministratorAccount),
foreign key (UserAccount)   references User0(UserAccount),
check (UserGrade = '钻石' or UserGrade = '金卡' or UserGrade = '银卡' or UserGrade = '普通')
);

存储过程

1. 结算账单

create or replace procedure PRO_BILL(  
    UserAccount_n      in  bill_list.useraccount%type,  
    User_other_consume_n       in   bill_list.user_other_consume%type
    ) is  
      
    Bill_ID_n         varchar2(10);
    PC_ID_n       bill_list.pc_id%type;  
    AdministratorAccount_n      bill_list.administratoraccount%type; 
    User_name_n                 bill_list.user_name%type;
    Administrator_Name_n        bill_list.administrator_name%type; 
    UserUP_time_n               bill_list.userup_time%type;
    UserDown_time_n             bill_list.userdown_time%type;
    UserDuration_n              bill_list.userduration%type;
    User_consume_n             bill_list.user_consume%type;
    userbalance_n              user0.userbalance%type;
  
begin    
       --获取会员余额信息
       select User0.Userbalance 
       into userbalance_n
       from User0
       where User0.Useraccount = UserAccount_n;
       
       --获取账单信息
       select PC_ID,AdministratorAccount,User_name,Administrator_Name,UserUP_time,UserDown_time,UserDuration,User_consume
       into PC_ID_n,AdministratorAccount_n,User_name_n,Administrator_Name_n,UserUP_time_n,UserDown_time_n,UserDuration_n,User_consume_n
       from up_computer_list
       where up_computer_list.useraccount = UserAccount_n;
       
       --设置账单编号
       Bill_ID_n :=  to_char(useraccount_n+UserUP_time_n);
 
        --添加账单信息  
        dbms_output.put_line(
             '这是您的账单:'||to_char(User_consume_n+User_other_consume_n));  
        insert into Bill_list  
        values(
            Bill_ID_n,
            PC_ID_n,
            UserAccount_n,
            AdministratorAccount_n,
            User_name_n,
            Administrator_Name_n,
            UserUP_time_n ,
            UserDown_time_n,
            UserDuration_n ,
            User_consume_n,
            User_other_consume_n
        );  
        commit;
          
        --修改会员的余额信息
        update user0 set user0.userbalance = userbalance_n - User_consume_n - User_other_consume_n
        where User0.Useraccount = UserAccount_n;
        dbms_output.put_line('账单已支付,欢迎下次光临!!!');  
    commit;  
end PRO_BILL;

2. 会员上机

create or replace procedure PRO_UP_PC(  
    PC_ID_n    in   up_computer_list.pc_id%type,  
    UserAccount_n    in    up_computer_list.useraccount%type,  
    AdministratorAccount_n    in   up_computer_list.administratoraccount%type,  
    UserUP_time_n    in   up_computer_list.userup_time%type ,
    Extend_time_length_n   in    up_computer_list.extend_time_length%type,  
    Extend_PC_ID_n          in   up_computer_list.extend_pc_id%type,  
    Restart_n       in         up_computer_list.restart%type,  
    Network_State_n       in       up_computer_list.network_state%type,  
    Extend_time_n        in         up_computer_list.extend_time%type, 
    ) is  
      
    Up_computer_ID_n         up_computer_list.pc_id%type;
    PC_state_n               up_computer_list.pc_id%type;
    User_consume_n                 up_computer_list.pc_id%type;
    UserGrade_n                    user0.usergrade%type;
    discount float;
    UserDown_time_n   date;
    UserDuration_n        float;
    PC_charge_grade_n      int;
    T_start_n              date;
    T_end_n                  date;
    Charge_amount_n      float;
  
begin    
       --获取电脑状态
        select computer.pc_state
       into PC_state_n
       from computer
       where computer.pc_id = PC_ID_n;
       --修改电脑使用状态
       update computer set computer.pc_state_1 = 1
       where computer.pc_id = PC_ID_n;
        commit;
       --设置上机编号
       Up_computer_ID_n  :=  to_char(UserUP_time_n + useraccount_n);
       
       --获取上机信息
       select PC_ID,AdministratorAccount,User_name,Administrator_Name,UserUP_time,UserDown_time,UserDuration_n,User_consume_n
       into PC_ID_n,AdministratorAccount_n,User_name_n,Administrator_Name_n,UserUP_time_n,UserDown_time_n,UserDuration_n,User_consume_n
       from up_computer_list
       where up_computer_list.useraccount = UserAccount_n;
       
       --设置上机编号
       Bill_ID_n :=  to_char(useraccount+UserUP_time_n);
 
        --添加上机信息  
        dbms_output.put_line(
             '这是您的上机情况');  
        insert into up_computer_list  
        values(
            Up_computer_ID_n,
            PC_ID_n,
            UserAccount_n,
            AdministratorAccount_n,
            UserUP_time_n,
            UserDown_time_n,
            UserDuration_n,
            PC_charge_grade_n,
            T_start_n,
            T_end_n,
            PC_state_n,
            Extend_time_length_n,
            Extend_PC_ID_n,
            Restart_n,
            Network_State_n,
            Extend_time_n,
            Charge_amount_n
            User_consume_n,
        );  
        commit;
end PRO_UP_PC;

3. 会员下机

create or replace procedure PRO_DOWN_PC(  
    PC_ID_n    in   up_computer_list.pc_id%type,  
    UserAccount_n    in    up_computer_list.useraccount%type,  
    AdministratorAccount_n    in   up_computer_list.administratoraccount%type,  
    UserDown_time_n    in   up_computer_list.userup_time%type ,
    UserDuration_n in up_computer_list.userduration%type
    ) is  
      
    User_consume_n                 up_computer_list.pc_id%type;
    UserGrade_n                    user0.usergrade%type;
    discount                        float;
    PC_charge_grade_n      int;
    T_start_n              date;
    T_end_n                  date;
    Charge_amount_n      float;
    UserUp_time_n        date;
  
begin    
       --修改电脑使用状态
       update computer set computer.pc_state_1 = 0
       where computer.pc_id = PC_ID_n;
        commit;
       --获取用户等级
       select UserGrade into UserGrade_n from user0 
         where user0.useraccount = UserAccount_n;
        if cuslevel='钻石' then discount:=0.9;  
            elsif cuslevel='金卡' then discount:=0.93;  
            elsif cuslevel='银卡' then discount:=0.96;  
            else discount:=1;  
        end if;  
       --获取上机时间
       select UserUp_time
       into UserUp_time_n
       from up_computer_list
       where up_computer_list.useraccount =  UserAccount_n  and  up_computer_list.administratoraccount = AdministratorAccount_n  and  up_computer_list.pc_id =  PC_ID_n;
      
        --获取收费等级 
       select PC_charge_grade
       into PC_charge_grade_n
       from computer
       where computer.PC_ID = PC_ID_n;
       
       --获取收费时间段
       select Charge_amount, t_start ,t_end
       into Charge_amount_n, T_start_n, T_end_n
       from time_frame
       where time_frame.t_start  <= UserUp_time_n and time_frame.t_end >= UserDown_time_n;
       
       --计算消费金额
       User_consume_n :=  (Charge_amount_n*PC_charge_grade_n*discount*UserDuration_n);
 
        --修改上机信息  
        dbms_output.put_line(
             '这是您的下机情况');  
        update up_computer_list  set 
        up_computer_list.userdown_time =  UserDown_time_n,
        up_computer_list.userduration =  UserDuration_n,
        up_computer_list.user_consume = User_consume_n,
        up_computer_list.pc_charge_grade = PC_charge_grade_n,
        up_computer_list.t_start =  T_start_n,
        up_computer_list.t_end = T_end_n,
        up_computer_list.charge_amount = Charge_amount_n;  
        commit;
end PRO_DOWN_PC;

4. 工作处理

create or replace procedure PRO_WORK(  
    AdministratorAccount_n    in   Administrator.AdministratorAccount%type,  
    AdministratorUp_time_n       in administrator_work_list.administratorup_time%type ,
    AdministratorDown_time_n      in administrator_work_list.administratordown_time%type,  
    AdministrationDuration_n        in administrator_work_list.administrationduration%type, 
    ) is  
    
    Administrator_work_ID_n         varchar2(10);  
    Administrator_Name_n     varchar2(40);
    AdministratorPhone_n      varchar2(10);

begin    
       --获取管理员信息
       select AdministratorName, AdministratorPhone
       into Administrator_Name_n, AdministratorPhone_n
       from Administrator
       where Administrator.AdministratorAccount = AdministratorAccount_n;

       --设置工作编号
       Administrator_work_ID_n  :=  to_char(AdministratorUp_time_n + AdministratorAccount_n);

        --添加上机信息  
        dbms_output.put_line( '这是您的工作情况');  
        insert into administrator_work_list  
        values(
            Administrator_work_ID_n,
            AdministratorAccount_n,
            Administrator_Name_n,
            AdministratorPhone_n,
            AdministratorUp_time_n,
            AdministratorDown_time_n,
            AdministrationDuration_n
        );  
        commit;
end PRO_WORK;

5. 会员充值

create or replace procedure PRO_RECHARGE(  
    AdministratorAccount_n    in   Administrator.AdministratorAccount%type,  
    UserAccount_n     in  user0.useraccount%type,
    User_Recharge_time_n        in      User_Recharge_List.User_Recharge_Time%type,
    User_recharge_amount_n       in      user_recharge_list.user_recharge_amount%type,
    ) is  
    
    Recharge_ID_n         varchar2(10);
    User_name_n                varchar2(40);
    Administrator_Name_n       varchar2(40);
    
begin    
       --获取管理员信息
       select AdministratorName
       into Administrator_Name_n
       from Administrator
       where Administrator.AdministratorAccount = AdministratorAccount_n;

       --获取会员信息
       select UserName
       into User_name_n
       from user0
       where user0.useraccount = UserAccount_n;
       
       --设置充值编号
       Recharge_ID_n  :=  to_char(UserAccount_n+ 'cz' + AdministratorAccount_n);

        --添加上机信息  
        dbms_output.put_line( '这是您的充值情况');  
        insert into User_Recharge_List  
        values(
            Recharge_ID_n,
            UserAccount_n,
            AdministratorAccount_n,
            User_name_n,
            Administrator_Name_n,
            User_Recharge_time_n,
            User_recharge_amount_n
        );  
        commit;
        
        --修改会员的余额信息
        update user0 set user0.userbalance = user0.userbalance_n + User_recharge_amount_n
        where User0.Useraccount = UserAccount_n;
        dbms_output.put_line('充值成功,欢迎下次充值!!!');  
    commit;  
end PRO_RECHARGE;

6. 维修电脑

create or replace procedure PRO_MAINATION(  
    AdministratorAccount_n    in   Administrator.AdministratorAccount%type,  
    PC_ID_n     in  computer.pc_id%type ,
    Maintain_Content_n      in   maintain_list.maintain_content%type,  
    PC_maintain_Money_n        in   maintain_list.pc_maintain_money%type, 
    Maintain_time_n            in  maintain_list.maintain_time%type
    ) is  
    
    PC_maintain_ID_n         varchar2(10);
    
begin    
       --设置维修编号
       PC_maintain_ID_n  :=  to_char('wx' + AdministratorAccount_n + Maintain_time_n);

        --添加维修信息  
        dbms_output.put_line( '这是您的工作情况');  
        insert into administrator_work_list  
        values(
            PC_maintain_ID_n,
            PC_ID_n,
            AdministratorAccount_n,
            Maintain_Content_n,
            PC_maintain_Money_n,
            Maintain_time_n
        );  
        commit;
end PRO_MAINATION;

7. 更新管理员

create or replace procedure PRO_ADMINISTRATER(  
    AdministratorAccount_n    in  administrator.administratoraccount%type, 
    AdministratorID_n       in  administrator.administratorid%type, 
    AdministratorAge_n     in  administrator.administratorage%type, 
    AdministratorName_n      in  administrator.administratorname%type, 
    AdministratorPassword_n     in  administrator.administratorpassword%type, 
    AdministratorQQ_n     in  administrator.administratorqq%type, 
    AdministratorWechat_n        in  administrator.administratorwechat%type, 
    AdministratorProfession_n      in  administrator.administratorprofession%type, 
    AdministratorPhone_n     in  administrator.administratorphone%type, 
    AdministratorSex_n      in  administrator.administratorsex%type, 
    AdministratorAddress_n    in  administrator.administratoraddress%type, 
    AdministratorRight_n     in  administrator.administratorright%type,
    is_change in int 
    ) is     
begin    
      --1 表示为插入,0 表示为修改
      if is_change = 1 then
      insert into administrator  
        values(
                AdministratorAccount_n,
                AdministratorID_n,
                AdministratorAge_n,
                AdministratorName_n,
                AdministratorPassword_n,
                AdministratorQQ_n,
                AdministratorWechat_n,
                AdministratorProfession_n,
                AdministratorPhone_n,
                AdministratorSex_n,
                AdministratorAddress_n,
                AdministratorRight_n,
        );  
      else
       update administrator set 
               AdministratorAccount = AdministratorAccount_n,
                AdministratorID = AdministratorID_n,
                AdministratorAge = AdministratorAge_n,
                AdministratorName = AdministratorName_n,
                AdministratorPassword = AdministratorPassword_n,
                AdministratorQQ = AdministratorQQ_n,
                AdministratorWechat = AdministratorWechat_n,
                AdministratorProfession = AdministratorProfession_n,
                AdministratorPhone = AdministratorPhone_n,
                AdministratorSex = AdministratorSex_n,
                AdministratorAddress = AdministratorAddress_n,
                AdministratorRight = AdministratorRight_n,
       where administrator.AdministratorAccount = AdministratorAccount_n;
      end if;
    commit;  
end PRO_ADMINISTRATER;

8. 更新电脑

create or replace procedure PRO_COMPUTER(  
    PC_ID_n        in computer.pc_id%type,
    PC_Gpu_n       in computer.pc_gpu%type,
    PC_CPU_n    in computer.pc_cpu%type,
    PC_Display_n    in computer.pc_display%type,
    PC_Keyboard_n      in computer.pc_keyboard%type,
    PC_charge_grade_n     in computer.pc_charge_grade%type,
    PC_STATE_n      in computer.pc_state%type,
    is_change in int
    ) is   
    
    PC_STATE_1_n   int;
      
begin    
      PC_STATE_1_n := 0;
      --1 表示为插入,0 表示为修改
      if is_change = 1 then
      insert into computer  
        values(
                PC_ID_n,
                PC_Gpu_n,
                PC_CPU_n,
                PC_Display_n,
                PC_Keyboard_n,
                PC_charge_grade_n,
                PC_STATE_1_n,
                PC_STATE_n
        );  
      else
       update computer set 
                PC_ID = PC_ID_n,
                PC_Gpu = PC_Gpu_n,
                PC_CPU = PC_CPU_n,
                PC_Display = PC_Display_n,
                PC_Keyboard = PC_Keyboard_n,
                PC_charge_grade = PC_charge_grade_n,
                PC_STATE_1 = PC_STATE_1_n,
                PC_STATE = PC_STATE_n
       where computer.pc_id = PC_ID_n;
      end if;
    commit;  
end PRO_COMPUTER;

9. 更新会员

create or replace procedure PRO_USERS(  
    UserAccount_n      in   user0.useraccount%type,  
    UserID_n      in   user0.userid%type,
    UserAge_n     in   user0.userage%type,
    UserName_n      in   user0.username%type,
    UserPassword_n      in   user0.userpassword%type,   
    UserBalance_n    in   user0.userbalance%type,
    UserPhone_n         in   user0.userphone%type,
    UserQQ_n     in   user0.userqq%type,
    UserWechat_n    in   user0.userwechat%type,
    UserProfession_n  in   user0.userprofession%type,
    UserSex_n    in   user0.usersex%type,
    UserAddress_n    in   user0.useraddress%type,
    UserGrade_n   in   user0.usergrade%type,
    is_change in int 
    ) is     
begin    
      --1 表示为插入,0 表示为修改
      if is_change = 1 then
      insert into user0  
        values(
                UserAccount_n,
                UserID_n,       
                UserAge_n,     
                UserName_n,      
                UserPassword_n,         
                UserBalance_n,       
                UserPhone_n,           
                UserQQ_n,        
                UserWechat_n,    
                UserProfession_n,  
                UserSex_n,    
                UserAddress_n,    
                UserGrade_n   
        );  
      else
       update user0 set 
                UserAccount = UserAccount_n,
                UserID = UserID_n,       
                UserAge =     UserAge_n,     
                UserName =   UserName_n,         
                UserPassword = UserPassword_n, 
                UserBalance =   UserBalance_n,   
                UserPhone =  UserPhone_n,        
                UserQQ =   UserQQ_n, 
                UserWechat = UserWechat_n,
                UserProfession =   UserProfession_n, 
                UserSex = UserSex_n, 
                UserAddress = UserAddress_n, 
                UserGrade = UserGrade_n
       where user0.UserAccount = UserAccount_n;
      end if;
    commit;  
end PRO_USERS;

触发器

会员等级变换

CREATE OR REPLACE TRIGGER TRI_POINTS  
  after insert  
  on Bill_List  
  for each row  
declare  
  pragma   autonomous_transaction;
  Grage_n user0.usergrade%type;  
  comsume_n bill_list.user_consume%type;  
begin  
  --获取会员等级  
  select user0.usergrade into Grage_n 
  from user0  
      where user0.useraccount=:new.useraccount;  
      
   --获取会员消费金额 
  select sum(bill_list.user_consume + bill_list.user_other_consume) into comsume_n 
  from bill_list  
  where bill_list.bill_id=:new.bill_id;  
    
  --计算等级   
  if comsume_n>600 and comsume_n<1400 then Grage_n:='银卡';  
      elsif comsume_n>1400 and comsume_n<2200 then Grage_n:='金卡';  
      elsif comsume_n>2200 then Grage_n:='钻石';  
      else Grage_n:='普通';  
  end if;  
    
  --更新会员等级  
  update user0   
      set user0.usergrade=Grage_n
      where useraccount =:new.useraccount;  
      commit;
end TRI_POINTS; 

余量不足提醒

CREATE OR REPLACE TRIGGER TRI_computer  
  after update  
  on computer  
  for each row  
declare  
  shu int;
begin  
  select count(computer.pc_id)
  into shu
  from  computer
  where computer.pc_state_1 = 0;
  if shu <5 then  
      dbms_output.put_line('当前空闲电脑仅有 '||to_char(shu)  || ' 台!!!'); 
  end if;  
end TRI_computer;
标签: sql 数据库开发

本文转载自: https://blog.csdn.net/qq_53436105/article/details/125774914
版权归原作者 花逝、浅笑 所有, 如有侵权,请联系我们删除。

“网吧管理系统数据库设计”的评论:

还没有评论