登录和注册模块的设计与实现.docx
《登录和注册模块的设计与实现.docx》由会员分享,可在线阅读,更多相关《登录和注册模块的设计与实现.docx(11页珍藏版)》请在冰点文库上搜索。
登录和注册模块的设计与实现
1登录和注册模块的设计与实现(负责人:
***)
1.1登录和注册界面
1.1.1登录
用户在进行系统登录时,需要通过该界面输入帐号、密码和用户身份,然后点击“登录”按钮进行登录,登录界面设计如图1.1所示。
1.1登录界面
1.1.2注册
用户在进行注册时,需要通过该界面输入帐号、密码和用户身份,然后点击“点我注册”按钮进行注册,注册界面设计如图1.2所示。
1.2注册界面
1.3登录注册模块文件的组织
1.2该模块涉及到的文件和类
通过详细的分析,该模块涉及到的文件和类在工程中的组织如图1.3所示。
1.2.1持久层
用文件user.properties来持久存储用户的信息,文件中以key=value对的形式存储,并约定key为账号,value为密码+空格+用户身份;如一个账号为zhangsan,密码为123,用户身份为管理员,另一个帐号为lisi,密码为456,用户身份为普通用户。
那么在文件中将以下面的形式存储。
zhangsan=123管理员
lisi=456普通用户
1.2.2实体类User
该类主要用于封装用户的信息:
帐号、密码和用户身份,类图如图1.4所示。
User
-uName:
String
-uPwd:
String
-uRole:
String
提供了每个成员变量的getter和setter方法,还有全参构造方法
1.4User类图
1.2.3文件操作层(Dao层)
该层涉及到接口UserDao和实现该接口的类UserDaoImpl,主要用来完成对文件user.properties的读和写操作。
Ø读文件方法
publicStringreadByKey(Stringkey);
该方法根据关键字key读取信息value。
实现如下:
Ø写文件方法
publicbooleanupdateFile(Stringkey,Stringvalue);
该方法是写入配置信息,实现如下:
Ø类UserDaoImpl的实现代码如下:
publicclassUserDaoImplimplementsUserDao{
privatePropertiesconfig=null;
privateStringfullUserFile=null;
publicUserDaoImpl(StringfullUserFile){
//TODOAuto-generatedconstructorstub
this.fullUserFile=fullUserFile;
}
////根据关键字key读取信息value
publicStringreadByKey(Stringkey){
config=newProperties();
FileInputStreamfis=null;
try{
fis=newFileInputStream("D:
\\javaprogram\\shoppingSystem\\src\\"+fullUserFile);
config.load(fis);
System.out.println("成功加载配置文件:
"+fullUserFile);
}catch(FileNotFoundExceptione){
//TODOAuto-generatedcatchblock
System.out.println("配置文件不存在:
"+e.getMessage());
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
System.out.println("读取配置文件出错:
"+e.getMessage());
}
if(config!
=null){
returnconfig.getProperty(key);
}else{
returnnull;
}
}
//写入配置信息
publicbooleanupdateFile(Stringkey,Stringvalue){
Stringval=readByKey(key);
if(val==null){//键值不存在,添加新键值,即新用户信息
config.setProperty(key,value);
//回写到指定的文件
FileOutputStreamos=null;
try{
os=newFileOutputStream("D:
\\javaprogram\\shoppingSystem\\src\\"+fullUserFile);
config.store(os,"写入新的用户信息");
os.close();
}catch(FileNotFoundExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
returntrue;
}else{
returnfalse;
}
}
}
1.2.4业务逻辑层(Service层)
该层涉及到接口UserService和实现该接口的类UserServiceImpl,主要用来完成登录逻辑和注册逻辑。
Ø登录方法
publicbooleanlogin(Useru);
该方法判断u是否是一个合法用户,需要调用Dao层的对应方法读取文件信息,判断文件中是否存在该用户,存在返回true,否则返回false。
Ø注册方法
publicbooleanRegister(Useru);
该方法完成用户u的注册,如果该用户帐号已经注册过,不能重复注册;否则,调用Dao层的对应方法将用户信息写入文件。
Ø类UserServiceImpl的实现代码如下:
publicclassUserServiceImplimplementsUserService{
UserDaoud=null;
publicUserServiceImpl(){
ud=newUserDaoImpl("user.properties");
}
@Override
publicbooleanlogin(Useru){
//TODOAuto-generatedmethodstub
//判断是否存在该用户
StringpwdRole=ud.readByKey(u.getuName());
if(pwdRole!
=null){
//将从配置文件读出的密码和用户身份分离开
String[]pwdRoleArray=pwdRole.split("");if(pwdRoleArray[0].equals(u.getuPwd())&&pwdRoleArray[1].equals(u.getuRole())){
returntrue;
}else{
returnfalse;
}
}else{
returnfalse;
}
}
@Override
publicbooleanRegister(Useru){
//TODOAuto-generatedmethodstub
//将用户信息重新组装
StringuName=u.getuName();
StringpwdRole=u.getuPwd()+""+u.getuRole();
//调用Dao层的方法将用户信息写入文件
if(ud.updateFile(uName,pwdRole)){
returntrue;
}else{
returnfalse;
}
}
}
1.2.5界面层(frame层)
本层包括三个窗体类:
LoginRegFrame、AdminMainFrame和UserMainFrame,运行结果如图1.1,1.5,1.6。
Ø登录按钮的响应流程和核心代码
获取用户从界面输入的帐号、密码和用户身份,将信息用User封装,调用service层的登录方法,如果该方法返回true,说明该用户存在。
(1)若是管理员,则显示管理员对应的主窗体,管理员主窗体如图1.5所示;
(2)若是普通用户,显示普通用户对应的主窗体,普通用户主窗体如图1.5所示。
如果该方法返回false,说明该用户不存在,系统提示“用户名或密码不正确”。
1.5管理员主窗体
(2)该模块涉及到文件和
1.6普通用户主窗体
核心代码:
b_login.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEvente){
//TODOAuto-generatedmethodstub
//判断用户从窗体中输入的用户名和密码是否在数据库中存在
StringuName=t_id.getText();
StringuPwd=newString(t_pwd.getPassword());
StringuRole=c_role.getSelectedItem().toString();
UserServiceuService=newUserServiceImpl();
if(uName==null){
JOptonPane.showMessageDialog(b_login,"用户名不能为空!
!
!
");
}else{
Useru=newUser(uName,uPwd,uRole);
if(uService.login(u)){
if(u.getuRole().equals("管理员")){
newAdminMainFrame(u);//登录成显示主窗体
}else{
newUserMainFrame(u);//登录成功显示主窗体
}
}else{
JOptionPane.showMessageDialog(b_login,"用户名或密码不正确!
!
!
");
}
}
}
});
Ø注册按钮的响应流程
获取用户从界面输入的帐号、密码和用户身份,将信息用User封装,调用service层的注册方法。
(1)用户在“点击注册之前”必须输入用户名和密码,否则系统将会提示,提示信息如图1.7。
1.7用户名或密码不完整提示信息
(2)用户只能以"普通用户身份"注册,否则系统将会给出“只能以普通用户身份注册”的提示信息!
(3)用户名如果已经注册过,系统将会给出“注册失败,该用户已经存在!
!
!
”的提示信息!
(4)如果用户注册成功,系统将会将注册信息写入文件,并给出“注册成功,可以登录啦!
!
!
”的提示信息!
核心代码:
b_register.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEvente){
//TODOAuto-generatedmethodstub
StringuName=t_id.getText();
StringuPwd=newString(t_pwd.getPassword());
StringuRole=c_role.getSelectedItem().toString();
if(uName.equals("")||uPwd.equals("")){
JOptionPane.showMessageDialog(b_login,"请先输入完整的用户名和密码再点击注册!
!
!
");
return;
}
if(uRole.equals("管理员")){
JOptionPane.showMessageDialog(b_login,"只能以普通用户身份注册!
!
!
");
return;
}
Useru=newUser(uName,uPwd,uRole);
UserServiceuService=newUserServiceImpl();
if(uService.Register(u)){
JOptionPane.showMessageDialog(b_login,"注册成功,可以登陆啦!
!
!
");
}else{
JOptionPane.showMessageDialog(b_login,"注册失败,该用户已经存在!
!
!
");
}
}
});