当前位置:文档之家› 水电管理系统登陆子系统

水电管理系统登陆子系统

数据库课程实验周设计说明书水电管理系统学生姓名:施杰明学号: 40学院:计算机与控制工程专业:计算机科学与技术指导教师:熊风光2014年 6 月 27日1. 需求分析目标设计以宿舍水电费为背景,实现水电费管理。

本系统可以分为四个子系统:1.统计子系统:统计水电用量,水电费用计算,扣除水电费。

2.登陆子系统:实现密码验证,不同身份的用户具有不同的权限。

3.管理子系统:增加,删除,修改用户,设置水电价格。

4.缴费子系统:实现查询余额,缴费功能开发和运行环境Eclipse、SQL server 2008Window 7,window 8数据流分析图1 顶层数据流图图2 登陆子系统图功能模块设计图3 系统功能模块图本人主要工作登陆子系统2. 水电管理系统登陆子系统数据库概要设计概念结构设计图4登陆子系统ER图模式转换学生(学号,学生账号,姓名,性别,宿舍号)账号(账号,密码,权限)管理员(管理员编号,管理员账号,管理员身份)范式分析学生(学号,学生账号,姓名,性别,宿舍号)学号作为主码,学生账号,姓名,性别,宿舍号完全函数依赖于主码学生,满足2NF。

其他属性不存在对主码的传递依赖,满足3NF。

学生中除了学号没有其他决定因素,满足BCNF。

账号(账号,密码,权限)账号作为主码,密码,权限完全函数依赖于主码账号,满足2NF。

其他属性不存在对主码的传递依赖,满足3NF。

账号中除了账号没有其他决定因素,满足BCNF。

管理员(管理员编号,管理员账号,管理员身份)管理员编号作为主码,管理员账号,管理员身份完全函数依赖于主码管理员编号,满足2NF。

其他属性不存在对主码的传递依赖,满足3NF。

管理员中除了管理员编号没有其他决定因素,满足BCNF。

3.登陆子系统物理设计数据库中表的定义学生表的定义CREATE TABLE [dbo].[学生]([学号] [varchar](20) NOT NULL,[学生账号] [varchar](20) NOT NULL,[姓名] [varchar](20) NULL,[性别] [nchar](1) NULL,[宿舍号] [varchar](20) NOT NULL,CONSTRAINT [PK_学生_1] PRIMARY KEY CLUSTERED([学号] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],CONSTRAINT [IX_学生] UNIQUE NONCLUSTERED([学号] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]管理员表的定义CREATE TABLE [dbo].[管理员]([管理员编号] [varchar](20) NOT NULL,[账号] [varchar](20) NOT NULL,[身份] [varchar](20) NOT NULL,[姓名] [nchar](10) NULL,CONSTRAINT [PK_管理员] PRIMARY KEY NONCLUSTERED([管理员编号] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]账号表的定义CREATE TABLE [dbo].[账号]([账号] [varchar](20) NOT NULL,[密码] [varchar](20) NOT NULL,[权限] [varchar](20) NOT NULL,CONSTRAINT [PK_账号] PRIMARY KEY NONCLUSTERED([账号] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]视图、存储过程、触发器的结构和定义账号视图定义CREATE VIEW [dbo].[accont number]ASSELECT 账号, 密码, 权限FROM dbo.账号登陆存储器:实现登陆后权限控制ALTER procedure [dbo].[login] (@zhanghao varchar(20),@password varchar(20),@result varchar(20) = null output)AS DECLARE@密码 varchar(20),@权限 varchar(20) = null,@user varchar(20) = null,@pass varchar(20) = null;beginselect @密码 = 密码 from 账号 where 账号 = @zhanghao;if @密码 != @passwordbeginset @result = '0';end;elsebeginselect @权限 = 权限 from 账号 where 账号 = @zhanghao;if @权限 = '学生'beginset @user = @权限;set @pass = '40';endif @权限 = '管理'beginset @user = @权限;set @pass = '654321';endend安全性保密实施用户 CREATE USER [aa] FOR LOGIN [aa] WITH DEFAULT_SCHEMA=[dbo]应用程序角色 USE [水电管理系统]GO/****** Object: ApplicationRole [学生] Script Date: 06/27/2014 10:46:31 ******//* To avoid disclosure of passwords, the password is generated in script. */ declare @idx as intdeclare @randomPwd as nvarchar(64)declare @rnd as floatselect @idx = 0select @randomPwd = N''select @rnd = rand((@@CPU_BUSY % 100) + ((@@IDLE % 100) * 100) +(DATEPART(ss, GETDATE()) * 10000) + ((cast(DATEPART(ms, GETDATE()) as int) % 100) * 1000000))while @idx < 64beginselect @randomPwd = @randomPwd + char((cast((@rnd * 83) as int) + 43)) select @idx = @idx + 1select @rnd = rand()enddeclare @statement nvarchar(4000)select @statement = N'CREATE APPLICATION ROLE [学生] WITH DEFAULT_SCHEMA = [dbo], ' + N'PASSWORD = N' + QUOTENAME(@randomPwd,'''')EXEC @statementGO4.登陆子系统程序设计与实现登陆验证及获取返回参数CallableStatement c="{call login (,,)}");//给存储过程的第一个和第二个参数设置值(2, ;(1, ;(3,//注册存储过程的第三个参数//执行存储过程();b =(3);a = (0);= (1, 3);= (4);//获取返回参数并处理检测账号是否存在:=="select账号fromnumberwhere账号="+id); if{("");(null,"已存在该账号","提示",;}学生账号注册:CallableStatementc="{callzhanghao(,)}"); (1,());(2,());();c="{callstudent1(,,,,)}");(1,());(2,());(3,());(4,());(5,());();5.登陆子系统子系统测试登陆测试用例账号:40 密码:654321图 5 登陆界面图 6 登陆成功图 7 注册账号图 8 注册成功注册用例账号:6.个人体会这次实验,我学会了在数据库里面去使用触发器,存储过程,以及视图。

用触发器去进行复杂的约束条件,用存储过程和视图作为对外的接口,实现对数据库内部结构的保密。

存储过程可以进行增删改操作,视图进行查询操作。

外部程序访问数据库的时候,首先通过默认的用户访问的登陆的存储过程,在登陆的存储过程进行密码匹配。

通过匹配结果判断是否登陆成功,返回结果值。

如果是成功的,同时返回账号权限所对应的的应用程序角色的账号密码。

目前根据用户定义了三个应用程序角色,分别为学生,统计员,管理员,每个应用程序角色对应一定的权限。

通过用户的登录验证的应用程序将用返回的应用程序角色的账号密码个去激活应用程序与数据库之间的临时链接。

实现了不同的账号对数据库访问的不同权限,增加了数据库的安全性。

系统还有不足的地方,在对一些数据约束还做的不到位,在输入框的输入的值,也应该进行相应的检验,不能把所有数据都都给数据库处理。

相关主题