网站后台系统实验报告Word下载.docx
《网站后台系统实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《网站后台系统实验报告Word下载.docx(40页珍藏版)》请在冰豆网上搜索。
开发的系统采用B/S结构,分为表示层,业务逻辑层和数据访问层。
其中用户表示层为客户端提供对应用程序的访问,业务逻辑层实现应用程序的业务功能,数据访问层为业务逻辑层或表示层提供数据服务。
2.需求分析
(1).系统管理员能对系统中所有的模块进行管理,包括查看模块信息,修改模块信息,删除不需要的模块。
(2).系统管理员能查看系统日志,包括登录日志和操作日志。
(3)系统管理员能进行权限管理,用户需要身份验证才能进入系统,用户进入系统后每一个操作都进行权限判断,禁止任何越权操作,有效地保护系统数据的安全性。
可以动态的对用户进行实时的权限修改。
(4).登录用户能随时更改自己的密码。
3.总体设计
(1)UML关系图
进入子模块时进行权限判断,若登录用户不具备该模块的最低操作权限,提示越权信息,禁止进入。
用户进入子模块时只能用对其开放的功能,发现越权行为时给出警告。
(2)功能设计
1.登录日志
记录所有用户的登录信息,包括帐号,时间,主机IP,登录是否成功,还可以让系统管理员删除过期日志信息。
2.操作日志
提供对用户重要操作行为的记录,系统管理员可通过其查看用户对数据库的关键操作,及时发现用户的非法操作,保证系统数据的安全。
还可以让系统管理员删除过期操作信息。
3.密码修改
提供登录用户修改自己密码的功能。
4.权限管理
包括模块管理,角色管理和用户管理。
模块管理:
提供对模块的添加,修改和删除,建立和角色的关系信息,定义基本权限,对每个模块的操作权限分5个级别:
浏览,查询,添加,修改和删除。
角色管理:
提供对角色的添加,修改和删除,建立和模块的关系信息,建立和用户的关系信息。
用户管理:
提供对用户基本信息的修改和删除功能,添加用户由系统管理员提供,建立和角色的关系信息。
(3)数据库设计与实现
1.登录日志信息表:
存放用户登录相关信息。
2.操作日志信息表:
存放用户关键操作的相关信息。
3.院系基本信息表:
存放院系的基本信息。
4.人员基本信息表:
存放用户的登录名,密码及用户的基本信息。
5.模块基本信息表:
存放模块的名称,描述等。
6.角色基本信息表:
存放角色的名称,描述等。
7.用户角色关系表:
存放用户和角色对应关系的信息。
8.模块角色关系表:
存放模块和角色的对应关系的信息。
四.详细设计
(1).数据库的逻辑设计
(2).数据库物理设计
1.登录日志信息表
2.操作日志信息表
3.院系基本信息表
4.人员基本信息表
5.模块基本信息表
6.角色基本信息表
7.用户角色关系表
8.模块角色关系表
注:
用整数表示权限,数字越大,权限越大,0浏览1查询2添加3修改4删除.
(3)系统主要流程图
五.具体实现
1.登录日志页面UserLog.aspx
这个页面主要部分运用了一个DataGridWeb服务控件,用于显示所有登录信息,一个CheckBoxWeb服务控件,用于选择当前页面的所有记录,一个ImageButton图像按钮Web服务控件,用于删除登录日志操作。
后台代码主要完成DataGrid控件数据的绑定,选取页面所有记录操作,以及删除选定的记录。
页面权限管理由基类直接提供,页面载入时,提供给基类页面模块名称,基类根据模块名称返回权限代码,页面根据权限代码控制用户的所有操作,如果用户对此模块不具备最低操作权限,则禁止用户进入页面,转到登录页面。
当用户进入模块后,用户的所有操作都要经过权限判断,不具备操作权限时则给出提示信息,禁止用户使用。
页面如下:
主要代码如下:
页面载入时,首先调用基类页面初始化函数,设置模块名称,并要求身份验证。
privatevoidPage_Load(objectsender,System.EventArgse)
{
this.PageBegin("
登录日志"
true);
if(Page.IsPostBack==false)
{
DataGridLogininfoband();
}
}
事件处理,包括页面载入,按钮点击事件,选择时间等。
privatevoidInitializeComponent()
{
this.Load+=newSystem.EventHandler(this.Page_Load);
this.DataGridLogininfo.PageIndexChanged+=newSystem.Web.UI.WebControls.DataGridPageChangedEventHandler(this.DataGridLogininfo_PageIndexChanged);
this.DataGridLogininfo.ItemDataBound+=newSystem.Web.UI.WebControls.DataGridItemEventHandler(this.DataGridLogininfo_ItemDataBound);
this.ImgBdel.Click+=newSystem.Web.UI.ImageClickEventHandler(this.ImgBdel_Click);
this.CheckBox2.CheckedChanged+=newSystem.EventHandler(this.CheckBox2_CheckedChanged);
数据绑定,并在DataGrid增加一序列号。
publicvoidMyBindData()
DbManagerLogininfomyclass=newDbManagerLogininfo();
DataTablemytable=myclass.Getalllogininfo();
DataColumnmycolumn=mytable.Columns.Add("
number"
System.Type.GetType("
System.String"
));
for(inti=0;
i<
mytable.Rows.Count;
i++)
mytable.Rows[i]["
]=(i+1).ToString();
DataGridLogininfo.DataSource=mytable;
DataGridLogininfo.DataBind();
实现删除登录日志功能
publicvoidDelLoginLog(stringstrLoginID)
DbManagerLogininfomyclass=newDbManagerLogininfo();
myclass.dellogininfo(strLoginID);
删除按钮单击事件,首先根据权限代码EmpRightCode进行权限判断,在本系统中权限共分为5级:
浏览,查询,添加,修改和删除,删除权限对应权限代码为4,为最高权限。
如果用户不具备删除权限,给出提示信息,不执行删除操作。
privatevoidImgBdel_Click(objectsender,System.Web.UI.ImageClickEventArgse)
if(this.EmpRightCode==4)
{
foreach(DataGridItemthisIteminDataGridLogininfo.Items)
{
if(((CheckBox)thisItem.Cells[0].Controls[1]).Checked)
{
stringstrLoginID=DataGridLogininfo.DataKeys[thisItem.ItemIndex].ToString();
DelLoginLog(strLoginID);
}
}
this.WriteOptLog("
删除登录日志信息"
);
JScript.Alert("
删除成功!
"
if(DataGridLogininfo.CurrentPageIndex==DataGridLogininfo.PageCount-1)
DataGridLogininfo.CurrentPageIndex=DataGridLogininfo.CurrentPageIndex-1;
MyBindData();
else
您没有权限进行此操作!
DataGrid控件页码改变事件处理方法
privatevoidDataGridLogininfo_PageIndexChanged(objectsource,System.Web.UI.WebControls.DataGridPageChangedEventArgse)
{DataGridLogininfo.CurrentPageIndex=e.NewPageIndex;
MyBindData();
}
CheckBox选择改变事件,使得选中此选择控件,DataGrid控件中的每一行中的选择控件均被选中。
privatevoidCheckBox2_CheckedChanged(objectsender,System.EventArgse)
foreach(DataGridItemthisIteminDataGridLogininfo.Items)
((CheckBox)thisItem.Cells[0].Controls[1]).Checked=CheckBox2.Checked;
数据访问层由DbManagerLogininfo.cs类文件实现,包括读取所有登录日志和删除登录日志。
publicclassDbManagerLogininfo
{
stringSTRCON=ConfigurationSettings.AppSettings["
ConnectionString"
];
SqlCommandmycm;
DataSetmyds;
SqlDataAdaptermyda;
publicDbManagerLogininfo()
mycm=newSqlCommand();
mycm.Connection=newSqlConnection(STRCON);
mycm.CommandType=CommandType.StoredProcedure;
mycm.Connection.Open();
myds=newDataSet();
myda=newSqlDataAdapter();
myda.SelectCommand=mycm;
publicDataTableGetalllogininfo()
mycm.CommandText="
GetLogInfo"
;
myda.Fill(myds,"
returnmyds.Tables["
publicvoiddellogininfo(stringLoginID)
delete_LogInfo"
mycm.Parameters.Add(newSqlParameter("
@LoginID_1"
SqlDbType.VarChar,50));
mycm.Parameters[0].Value=LoginID;
intj=mycm.ExecuteNonQuery();
2.操作日志页面
此页面和登录页面所用的控件相同,后台代码主要完成DataGrid控件数据的绑定,选取页面所有记录操作,以及删除选定的记录。
后台代码和登录日志的也很相似,这里就不列出具体的代码。
点击删除按钮后,显示页面:
如果没有权限的话则弹出一下对话框:
数据访问层主要完成操作日志的读取和删除操作,其他涉及到的功能和登录日志模块基本相同。
从数据库中读取所有操作日志信息:
publicDataTableReadOperationLog()
SqlConnectionmyConnection=newSqlConnection(ConfigurationSettings.AppSettings["
]);
SqlCommandmyCommand=newSqlCommand("
sysReadOptLog"
myConnection);
myCommand.CommandType=CommandType.StoredProcedure;
DataSetmyds=newDataSet();
SqlDataAdaptermyda=newSqlDataAdapter();
myda.SelectCommand=myCommand;
myConnection.Open();
myConnection.Close();
returnmyds.Tables["
根据日志ID号删除相应日志信息。
SqlCommandmyCommand=newSqlCommand("
myCommand.CommandType=CommandType.StoredProcedure;
myConnection.Open();
2.模块管理页面
模块管理分两个页面Moduleadmin.aspx和FuncRightSet.aspx,前者是主页面,提供模块的删除和添加功能,后者提供模块的编辑功能,可以修改模块的基本信息和修改此模块和角色的关联权限信息。
Moduleadmin.aspx页面包括两部分:
模块列表和模块添加。
模块列表是用DataList控件实现的,包括两个图像按钮,代表编辑和删除功能,模块名称用DataBinder.Eval进行绑定。
模块添加是由两个文本Web控件和一个LinkbuttonWeb控件实现。
其后台代码主要完成页面载入时的数据绑定和各个按钮事件的实现,每个操作均要根据权限代码进行权限判断。
页面载入和事件处理代码和登录日志及操作日志类似,这里不列出。
点击编辑按钮后,跳转到如下页面:
本页面的主要代码及功能如下:
从数据库中取得所有的模块信息数据,并显示在页面上。
privatevoidBindData()
AdminDBadmin=newAdminDB();
FuncList.DataSource=admin.GetAllFuncs();
FuncList.DataBind();
FuncList控件中的ItemCommand事件函数,用来完成个记录中的按钮事件。
privatevoidFuncList_ItemCommand(objectsender,DataListCommandEventArgse)
intFuncID=(int)FuncList.DataKeys[e.Item.ItemIndex];
if(e.CommandName=="
edit"
)
if(this.EmpRightCode>
=3)
Response.Redirect("
FuncRightSet.aspx?
funcid="
+FuncID,false);
else
JScript.Alert("
}
elseif(e.CommandName=="
delete"
if(this.EmpRightCode==4)
if(admin.DeleteFuncRoleUser(FuncID,"
func"
))
this.WriteOptLog("
删除模块信息"
JScript.Alert("
BindData();
else
删除失败!
添加模块信息按钮单击事件处理方法:
privatevoidAddFuncBtn_Click(objectsender,System.EventArgse)
if(this.EmpRightCode>
=2)
if(FuncName.Text.ToString()!
="
)
boolresult=(newAdminDB()).InsertFuncInfo(FuncName.Text.ToString(),FuncDescription.Text.ToString());
if(result==false)
添加失败!
添加模块角色关系信息"
添加成功!
BindData();
FuncName.Text="
FuncDescription.Text="
给删除按钮添加删除确认对话框:
privatevoidOnAttachScript(objectsender,System.Web.UI.WebControls.DataListItemEventArgse)
if(e.Item.ItemType==ListItemType.Item||
e.Item.ItemType==ListItemType.AlternatingItem)
ImageButtonbutton=(ImageButton)e.Item.FindControl(