水电管理系统登陆子系统方案.docx

上传人:b****6 文档编号:8087358 上传时间:2023-01-28 格式:DOCX 页数:11 大小:281.99KB
下载 相关 举报
水电管理系统登陆子系统方案.docx_第1页
第1页 / 共11页
水电管理系统登陆子系统方案.docx_第2页
第2页 / 共11页
水电管理系统登陆子系统方案.docx_第3页
第3页 / 共11页
水电管理系统登陆子系统方案.docx_第4页
第4页 / 共11页
水电管理系统登陆子系统方案.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

水电管理系统登陆子系统方案.docx

《水电管理系统登陆子系统方案.docx》由会员分享,可在线阅读,更多相关《水电管理系统登陆子系统方案.docx(11页珍藏版)》请在冰豆网上搜索。

水电管理系统登陆子系统方案.docx

水电管理系统登陆子系统方案

 

数据库课程实验周设计说明书

水电管理系统

学生:

施杰明学号:

1206034240

学院:

计算机与控制工程

专业:

计算机科学与技术

指导教师:

熊风光

2014年6月27日

 

1.需求分析

1.1目标设计

以宿舍水电费为背景,实现水电费管理。

本系统可以分为四个子系统:

1.统计子系统:

统计水电用量,水电费用计算,扣除水电费。

2.登陆子系统:

实现密码验证,不同身份的用户具有不同的权限。

3.管理子系统:

增加,删除,修改用户,设置水电价格。

4.缴费子系统:

实现查询余额,缴费功能

1.2开发和运行环境

Eclipse、SQLserver2008

Window7,window8

1.3数据流分析

图1顶层数据流图

图2登陆子系统图

1.4功能模块设计

图3系统功能模块图

1.5本人主要工作

登陆子系统

2.水电管理系统登陆子系统数据库概要设计

2.1概念结构设计

图4登陆子系统ER图

2.2模式转换

学生(学号,学生账号,,性别,宿舍号)

账号(账号,密码,权限)

管理员(管理员编号,管理员账号,管理员身份)

2.3式分析

学生(学号,学生账号,,性别,宿舍号)

学号作为主码,学生账号,,性别,宿舍号完全函数依赖于主码学生,满足2NF。

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

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

账号(账号,密码,权限)

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

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

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

管理员(管理员编号,管理员账号,管理员身份)

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

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

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

3.登陆子系统物理设计

3.1数据库中表的定义

3.1.1学生表的定义

CREATETABLE[dbo].[学生](

[学号][varchar](20)NOTNULL,

[学生账号][varchar](20)NOTNULL,

[][varchar](20)NULL,

[性别][nchar]

(1)NULL,

[宿舍号][varchar](20)NOTNULL,

CONSTRAINT[PK_学生_1]PRIMARYKEYCLUSTERED

[学号]ASC

)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY],

CONSTRAINT[IX_学生]UNIQUENONCLUSTERED

[学号]ASC

)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY]

)ON[PRIMARY]

3.1.2管理员表的定义

CREATETABLE[dbo].[管理员](

[管理员编号][varchar](20)NOTNULL,

[账号][varchar](20)NOTNULL,

[身份][varchar](20)NOTNULL,

[][nchar](10)NULL,

CONSTRAINT[PK_管理员]PRIMARYKEYNONCLUSTERED

[管理员编号]ASC

)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY]

)ON[PRIMARY]

3.1.3账号表的定义

CREATETABLE[dbo].[账号](

[账号][varchar](20)NOTNULL,

[密码][varchar](20)NOTNULL,

[权限][varchar](20)NOTNULL,

CONSTRAINT[PK_账号]PRIMARYKEYNONCLUSTERED

[账号]ASC

)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY]

)ON[PRIMARY]

3.2视图、存储过程、触发器的结构和定义

3.2.1账号视图定义

CREATEVIEW[dbo].[accontnumber]

AS

SELECT账号,密码,权限

FROMdbo.账号

3.2.2登陆存储器:

实现登陆后权限控制

ALTERprocedure[dbo].[login](zhanghaovarchar(20),passwordvarchar(20),resultvarchar(20)=nulloutput)

ASDECLARE

密码varchar(20),权限varchar(20)=null,uservarchar(20)=null,passvarchar(20)=null;

begin

select密码=密码from账号where账号=zhanghao;

if密码!

=password

begin

setresult='0';

end;

else

begin

select权限=权限from账号where账号=zhanghao;

if权限='学生'

begin

setuser=权限;

setpass='1206034240';

end

if权限='管理'

begin

setuser=权限;

setpass='654321';

end

end

3.3安全性实施

用户CREATEUSER[aa]FORLOGIN[aa]WITHDEFAULT_SCHEMA=[dbo]

应用程序角色USE[水电管理系统]

GO

/******Object:

ApplicationRole[学生]ScriptDate:

06/27/201410:

46:

31******/

/*Toavoiddisclosureofpasswords,thepasswordisgeneratedinscript.*/

declareidxasint

declarerandomPwdasnvarchar(64)

declarerndasfloat

selectidx=0

selectrandomPwd=N''

selectrnd=rand((CPU_BUSY%100)+((IDLE%100)*100)+

(DATEPART(ss,GETDATE())*10000)+((cast(DATEPART(ms,GETDATE())asint)%100)*1000000))

whileidx<64

begin

selectrandomPwd=randomPwd+char((cast((rnd*83)asint)+43))

selectidx=idx+1

selectrnd=rand()

end

declarestatementnvarchar(4000)

selectstatement=N'CREATEAPPLICATIONROLE[学生]WITHDEFAULT_SCHEMA=[dbo],'+N'PASSWORD=N'+QUOTENAME(randomPwd,'''')

EXECdbo.sp_executesqlstatement

GO

4.登陆子系统程序设计与实现

4.1登陆验证及获取返回参数

CallableStatementc=Assist.conn.prepareCall("{calllogin(?

?

?

)}");

//给存储过程的第一个和第二个参数设置值

c.setString(2,Assist.passwrod);

c.setString(1,Assist.user);

c.registerOutParameter(3,java.sql.Types.VARCHAR);

//注册存储过程的第三个参数

//执行存储过程

c.execute();

b=c.getString(3);

a=b.charAt(0);

Assist.userName=b.substring(1,3);

Assist.passwrod=b.substring(4);//获取返回参数并处理

Assist.conn.close();

4.2检测账号是否存在:

Assist.smt=Assist.conn.createStatement();

Assist.rs = Assist.smt.executeQuery("select 账号 from number where 账号 = " + id);

if(Assist.rs.next())

{

Sno.setText("");

JOptionPane.showMessageDialog(null, "已存在该账号", "提示", JOptionPane.ERROR_MESSAGE);

}

4.3学生账号注册:

CallableStatement c=Assist.conn.prepareCall("{call zhanghao (?

?

)}");

c.setString(1,Sno.getText());

c.setString(2, Sname.getText());

c.execute();

c=Assist.conn.prepareCall("{call student1 (?

?

?

?

?

)}");

c.setString(1,Ssex.getText());

c.setString(2, Sno.getText());

c.setString(3, Sclas.getText());

c.setString(4, Sbirth.getText());

c.setString(5, Snation.getText());

c.execute();

5.登陆子系统子系统测试

登陆测试用例账号:

1206034240密码:

654321

图5登陆界面图6登陆成功

图7注册账号

图8注册成功

注册用例账号:

12060333

6.个人体会

这次实验,我学会了在数据库里面去使用触发器,存储过程,以及视图。

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

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

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

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

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

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

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

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

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1