web课程设计.docx
《web课程设计.docx》由会员分享,可在线阅读,更多相关《web课程设计.docx(25页珍藏版)》请在冰豆网上搜索。
web课程设计
《WEB技术》
课程设计报告
题目:
_________用户信息治理系统____________
学院运算机与信息工程学院
班级____商务1101______
学号___08___
姓名___张怀平_______
2021年6月
一、任务书
本系统是由我个人自己完成。
系统设计目标如下:
表1
设计目标
用户管理基本功能分为前台客户使用部分、后台管理员使用部分。
前台基本功能,包括客户注册、客户登录、客户基本资料修改,密码修改,客户信息查看等功能。
后台基本功能,包括用户查询、添加用户、用户资料修改、删除用户等功能。
开发环境
Mysql,Tomcat,MyEclipse,windows
运行环境
Windows,Tomcat,Mysql
二、设计报告
一、功能分析
功能概况
该系统要紧分为前台系统和后台系统。
前台系统功能包括用户注册,用户登岸,用户信息查看,用户密码修改等功能。
后台只有治理员才能够登岸,要紧功能有系统用户的添加,系统用户信息的修改,系统用户信息的查询,系统用户删除等。
治理员默许的的账户是yishaoku,密码是123。
若是想改变能够在数据库中的t_manager中进行修改。
一般用户系统中已经存在一些。
如:
账户:
azhang,姓名:
张怀平,密码:
yishaoku等。
系统功能流程图如下:
图1
系统角色设计
该用户治理系统的角色要紧由两类,一般用户角色和治理员角色。
其中一般用户又能够分为未注册用户,和已经注册用户。
两类用户各自的权限如下:
用户:
图2
治理员:
图3
要紧业务流程设计
用户注册
图4
用户登岸
图5
用户修改密码
图6
治理员添加用户
图7
治理员修改用户信息
图8
治理员删除用户
图9
二、数据库表设计
本系统主若是模拟用户的信息治理,要紧涉及两张表,一般用户信息表t_user,治理员信息表t_manager。
一般用户信息表如下:
表2
字段名
数据类型
长度
含义
备注
user_id
varchar
11
用户账号
主码
user_name
varchar
50
用户姓名
非空
password
varchar
50
用户密码
非空
contact_tel
varchar
20
联系电话
非空
email
varchar
50
电子邮箱
非空
create_date
datetime
无
申请日期
非空
一般用户信息表t_user的ER图如下:
图10
治理员信息表如下:
表3
字段名
数据类型
长度
含义
备注
name
varchar
50
用户账号
主码
password
varchar
50
用户姓名
非空
治理员信息表ER图如下:
图11
3、功能实现
一般用户信息表和治理员信息的表通过两个JavaBean来封装,代码如下:
一般用户:
packageclassUser{
privateStringuserId;
privateStringuserName;
privateStringpassword;
privateStringcontactTel;
privateStringemail;
privateDatecreateDate;
publicStringgetContactTel(){
returncontactTel;
}
publicvoidsetContactTel(StringcontactTel){
=contactTel;
}
publicDategetCreateDate(){
returncreateDate;
}
publicvoidsetCreateDate(DatecreateDate){
=createDate;
}
publicStringgetEmail(){
returnemail;
}
publicvoidsetEmail(Stringemail){
=email;
}
publicStringgetPassword(){
returnpassword;
}
publicvoidsetPassword(Stringpassword){
=password;
}
publicStringgetUserId(){
returnuserId;
}
publicvoidsetUserId(StringuserId){
=userId;
}
publicStringgetUserName(){
returnuserName;
}
publicvoidsetUserName(StringuserName){
=userName;
}
}
治理员如下:
packageclassManager{
privateStringname;
privateStringpassword;
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
=name;
}
publicStringgetPassword(){
returnpassword;
}
publicvoidsetPassword(Stringpassword){
=password;
}
}
整个系统对数据库的操作是一个重要的环节,因为对数据库的操作是一个耗资源的操作,因此连接数据库和操作数据库的代码要合理设计,本系统对数据库操作代码如下:
package.*;
publicclassDB{
publicstaticConnectiongetConn(){
Connectionconn=null;
try{
("");
conn=("jdbc:
");
}catch(ClassNotFoundExceptione){
();
}catch(SQLExceptione){
();
}
returnconn;
}
publicstaticvoidcloseConn(Connectionconn){
try{
if(conn!
=null){
();
conn=null;
}
}catch(SQLExceptione){
();
}
}
publicstaticvoidcloseStmt(Statementstmt){
try{
if(stmt!
=null){
();
stmt=null;
}
}catch(SQLExceptione){
();
}
}
publicstaticvoidcloseRs(ResultSetrs){
try{
if(rs!
=null){
();
rs=null;
}
}catch(SQLExceptione){
();
}
}
}
上面的代码是连接数据库效劳器,查询效劳,修改效劳和关闭数据库连接的代码。
接下来介绍该系统具体实现对用户表的CRUD(增删改查)的操作。
代码如下:
具体操作用户信息表的代码:
packageclassUserDao4MySqlImplimplementsUserDao{
publicvoidaddUser(Connectionconn,Useruser){
Stringsql="insertintot_user(user_id,user_name,password,contact_tel,email,create_date)"
+"values(?
?
?
?
?
?
)";
PreparedStatementpstmt=null;
try{
pstmt=(sql);
(1,());
(2,());
(3,());
(4,());
(5,());
(6,newTimestamp().getTime()));
();
}catch(SQLExceptione){
();
}finally{
(pstmt);
}
}
publicvoiddeleteUsers(Connectionconn,String[]userIdList){
StringBuffersbfSql=newStringBuffer();
for(inti=0;i<;i++){
("'").append(userIdList[i]).append("'").append(",");
}
Stringsql="deletefromt_userwhereuser_idin("
+(0,()-1)+")";
Statementstmt=null;
try{
stmt=();
(sql);
}catch(SQLExceptione){
();
}finally{
(stmt);
(conn);
}
}
publicListfindAllUserList(){
Stringsql="select*fromt_userorderbyuser_id";
Connectionconn=null;
Statementstmt=null;
ResultSetrs=null;
ListuserList=newArrayList();
try{
conn=();
stmt=();
rs=(sql);
while()){
Useruser=newUser();
("user_id"));
("user_name"));
("password"));
("contact_tel"));
("email"));
("create_date"));
(user);
}
}catch(SQLExceptione){
();
}finally{
(rs);
(stmt);
(conn);
}
returnuserList;
}
publicUserfindUserById(StringuserId){
Stringsql="select*fromt_userwhereuser_id=?
";
Useruser=null;
Connectionconn=null;
PreparedStatementpstmt=null;
ResultSetrs=null;
try{
conn=();
pstmt=(sql);
(1,userId);
rs=();
if()){
user=newUser();
("user_id"));
("user_name"));
("password"));
("contact_tel"));
("email"));
("create_date"));
}
}catch(SQLExceptione){
();
}finally{
(rs);
(pstmt);
(conn);
}
returnuser;
}
publicUseruserSearch(StringuserId,Stringpassword){
Stringsql="select*fromt_userwhereuser_id=?
andpassword=?
";
Useruser=null;
Connectionconn=null;
PreparedStatementpstmt=null;
ResultSetrs=null;
try{
conn=();
pstmt=(sql);
(1,userId);
(2,password);
rs=();
if()){
user=newUser();
("user_id"));
("user_name"));
("password"));
("contact_tel"));
("email"));
("create_date"));
}
}catch(SQLExceptione){
();
}finally{
(rs);
(pstmt);
(conn);
}
returnuser;
}
publicvoidmodifyUser(Connectionconn,Useruser){
Stringsql="updatet_usersetuser_name=?
password=?
contact_tel=?
email=?
whereuser_id=?
";
PreparedStatementpstmt=null;
try{
pstmt=(sql);
(1,());
(2,());
(3,());
(4,());
(5,());
();
}catch(SQLExceptione){
();
}finally{
(pstmt);
}
}
}
操作治理员的代码:
packageclassManagerDao4MySqlImplimplementsManagerDao{
publicManagerfindManager(Stringname,Stringpassword){
Stringsql="select*fromt_managerwherename=?
andpassword=?
";
Managermanager=null;
Connectionconn=null;
PreparedStatementpstmt=null;
ResultSetrs=null;
try{
conn=();
pstmt=(sql);
(1,name);
(2,password);
rs=();
if()){
manager=newManager();
("name"));
("password"));
}
}catch(SQLExceptione){
();
}finally{
(rs);
(pstmt);
(conn);
}
returnmanager;
}
}
在网页之间跳转和将数据写入数据库中等操作都会设计利用中文的问题,为了专门好的解决中文乱码问题,本系统利用了Filter(过滤器)来处置中文乱码。
代码如下:
packageclassAotoriFilterimplementsFilter{
publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,
FilterChainfilterChain)throwsIOException,ServletException{
HttpServletRequesthq=(HttpServletRequest)request;
HttpServletResponsehp=(HttpServletResponse)response;
("text/html;charset=GBK");
("GBK");
(request,response);
}
publicvoiddestroy(){
}
publicvoidinit(FilterConfigarg0)throwsServletException{
}
}
过滤器在中的配置如下:
filter
filter
/*
在用户注册的时候和治理员在添加用户修改用户信息的时候,都第一通过JavaScript验证数据格式正否正确,正确才向效劳器提交信息,关键验证代码如下:
functioncheckCount(Node){
varvalue=;
ontcolor("green");
returntrue;
}else{
ontcolor("red");
returnfalse;
}
}
functioncheckPassword(Node){
varvalue=;
varspanNode=("userPassword");
varreg=/^[\w]{6,}$/i;
if(reg)){
="密码格式正确".fontcolor("green");
returntrue;
}else{
="密码很多于6位".fontcolor("red");
returnfalse;
}
}
functioncheckRePassword(Node){
varvalue=;
varspanNode=("rePassword");
varpassValue=("pass").value;
if(passValue==value&&passValue!
=""){
="密码正确".fontcolor("green");
returntrue;
}else{
="两次密码不一致".fontcolor("red");
returnfalse;
}
}
functioncheckUserName(Node){
varvalue=;
varspanNode=("userName");
if(value!
=""){
="用户名格式正确".fontcolor("green");
returntrue;
}else{
="用户名不能为空".fontcolor("red");
returnfalse;
}
}
functioncheckTel(Node){
varvalue=;
varspanNode=("tel");
varreg=/^[0-9]{5,}/i;
if(reg)){
="电话号格式正确".fontcolor("green");
returntrue;
}else{
="电话号格式不正确".fontcolor("red");
returnfalse;
}
}
functioncheckEmail(Node){
varvalue=;
varspanNode=("email");
varreg=/^\w+@\w+(\.\w+)+$/;
if(reg)){
="邮箱格式正确".fontcolor("green");
returntrue;
}else{
="邮箱格式不正确".fontcolor("red");
returnfalse;
}
}
functioncheckAll(){
varformNode=[0];
with(formNode)
{
if(checkCount(userCount)&&checkEmail(email)&&checkPassword("userPassword")&&checkRePassword("rePassword")&&
checkTel("tel")&&checkUserName("userName"))
{
returntrue;
}else
{
returnfalse;
}
}
}
系统功能截图:
后台登岸界面:
图12
后台治理页面:
图13
前台用户登岸界面:
图13
后台治理员添加用户界面:
图14
用户注册界面:
图15
4、个人总结本系统尽管功能有限,但也是我依照一样软件的开发流程一步一步进行的,从需求分析,到数据库的设计,再到具体编码的实现,再到测试运行。
循序渐进的进行,让我再一次感受到了软件开发的严谨性和标准性。
在具体开发进程中也碰到了很多问题,可是借助于互联网络最终都取得了解决。
该系统功能不是很完善,可是我在设计的时候考虑到了可扩展行,能够很方便的在该系统上扩展新的功能,我提供了很多接口,便于以后扩展利用。
因为最近在看设计模式的书,因此在编写具体代码的利用,我也成心识的利用了一些设计模式,比如:
单例模式,工厂模式,接口模式等等。
利用这些设计模式能够让该系统具有更好的扩展性和可保护性。
固然本系统也还存在一些不足,比如权限问题,若是一个用户直接访问治理员登岸成功的页面的话,那么成功进入。
这时就需要实现权限治理,那个能够利用一个Filter来实现,在Filer中判定用户是不是有访问某一个页面的权限,有的话就许诺访问,没有的话就自动跳转到登岸页面。
总之,这次课设让我学到很多东西,有专门大的收成。