MVC设计模式:
V:View视图层,也就是表示层,负责用户界面UI(User Interface)
C:Controller控制层,负责流程控制。
M:Model模型层,负责数据封装,访问以及业务逻辑。
/**
*待管理的数据对象,抽象成实体层entity/领域层domain对象。
*/
package userms.model.domain;
public class User
{
private String username;
private String password;
public User()
{
}
public User(String username, String password)
{
this.username = username;
this.password = password;
}
public String getUsername()
{
return this.username;
}
public String getPassword()
{
return this.password;
}
public void setUsername(String username)
{
this.username = username;
}
public void setPassword(String password)
{
this.password = password;
}
public String toString()
{
return "用户名:" + username + ",密码:" + password + "\n";
}
}
/**
*用数组来模拟数据库对待管理的实体对象进行增删改查
*/
package userms.model.dao;
import userms.model.domain.User;
public class UserDB
{
private User[] userdb; //利用内存数组模拟用户数据库
private int nusers; //当前系统用户数
public UserDB()
{
userdb = new User[10];
//设置两个初始用户
userdb[0] = new User("root", "root");
userdb[1] = new User("bbc", "bbc");
nusers = 2;
}
//模拟注册过程(不允许同名用户)
public boolean addUser(User user)
{
//在已有的系统用户中,去查找是否有同名的,如果有,肯定注册失败,否则做注册。
for(int i = 0; i < nusers; i++)
{
if(user.getUsername().equals(userdb[i].getUsername())) //如果有同名,不允许注册
{
return false;
}
}
//注册新用户
//超过系统容量,则容量自动翻倍
if(nusers > userdb.length)
{
User[] userdbnew = new User[userdb.length * 2];
//拷贝到原来的系统中已有的用户到新数组中
for(int i = 0; i < nusers; i++)
{
userdbnew[i] = userdb[i];
}
userdb = userdbnew;
}
//将新用户加入到数组中
userdb[nusers] = user;
//当前用户人数加1
nusers++;
//注册成功
return true;
}
//模拟登录过程
public boolean findUser(User user)
{
for(int i = 0; i < nusers; i++)
{
if(user.getUsername().equals(userdb[i].getUsername())
&& user.getPassword().equals(userdb[i].getPassword()))
{
return true;
}
}
return false;
}
}
/**
*在数据访问对象进行增删改查的基础上构架的业务逻辑层.
*/
package userms.model.service;
import userms.model.domain.User;
import userms.model.dao.UserDB;
public class Service
{
private UserDB userdb;
public Service()
{
userdb = new UserDB();
}
//登录
public boolean login(User user)
{
return userdb.findUser(user);
}
//注册
public boolean register(User user)
{
return userdb.addUser(user);
}
package userms.view;
import java.util.Scanner;
import userms.model.domain.User;
public class UI
{
private Scanner sc;
public UI()
{
sc = new Scanner(System.in);
}
public int showMainMenu()
{
int choice = -1;
System.out.println("=================用户管理系统=================");
System.out.println("\t1.注册");
System.out.println("\t2.登录");
System.out.println("\t0.退出");
System.out.println("===============================================");
//接收用户输入
boolean succ = false;
while(!succ)
{
System.out.print("\n请输入你的选择(0-2):");
choice = sc.nextInt();
if(choice < 0 || choice > 2)
{
succ = false;
}
else
{
succ = true;
}
}
return choice;
}
//用户注册或登录输入用户名和密码的界面
public User showLoginOrRegisterInput()
{
String username = null;
String password = null;
boolean succ = false;
//输入用户名
while(!succ)
{
System.out.print("\n请输入用户名:");
username = sc.next();
if(!username.equals(""))
{
succ = true;
}
}
succ = false;
//输入密码
while(!succ)
{
System.out.print("\n请输入密 码:");
password = sc.next();
if(!password.equals(""))
{
succ = true;
}
}
return new User(username, password);
}
//输入待查找的用户名
public String showFindUserInput()
{
String username = null;
boolean succ = false;
//输入用户名
while(!succ)
{
System.out.print("\n请输入用户名:");
username = sc.next();
if(!username.equals(""))
{
succ = true;
}
}
return username;
}
//反馈操作结果
public void showMsg(User user, String action, boolean succ)
{
if(succ)
{
System.out.println("\n恭喜" + user.getUsername() + action + "成功!\n");
}
else
{
System.out.println("\n抱歉," + user.getUsername() + action + "失败!\n");
}
}
}
/**
*项目名称:MVC模式的用户管理系统(数组模拟版)
*项目说明:版本01:实现基本的注册登录功能。
*开发人员:tt
*开发日期:2023年8月6日
*/
package userms.controller;
import userms.view.UI;
import userms.model.domain.User;
import userms.model.service.Service;
public class UserMS
{
private UI ui;
private Service service;
public UserMS()
{
ui = new UI();
service = new Service();
}
public void start()
{
boolean succ = false;
int choice = -1;
User user = null;
while(choice != 0)
{
choice = ui.showMainMenu();
if(choice == 1 || choice == 2)
{
user = ui.showLoginOrRegisterInput();
}
if(choice == 1) //注册
{
succ = service.register(user);
ui.showMsg(user, "注册", succ);
}
else if(choice == 2) //登录
{
succ = service.login(user);
ui.showMsg(user, "登录", succ);
}
}
System.out.println("\n再见,欢迎下次使用本系统!");
}
public static void main(String[] args)
{
UserMS userms = new UserMS();
userms.start();
}
}
效果展示:
个人的心得体会仅供参考:一个项目的设计往往是水平分模块,垂直分层。而MVC设计模式能将任务分而治之,大大提高我们的开发效率,是一个不错的开发方式。
@1.我写得用户管理系统中实体对象在domain层中就一个User类,而往往较复杂的项目中可能含有多个实体对象,并且这些实体对象中还会存在某种联系。
@2.紧接着我们需要对实体对象进行数据的增删改查,因为自己的能力有限,没有掌握一些数据结构,就用的数组来模拟数据库(这里的数据存储不是持久化的,一旦把程序关闭,之前注册的用户名和密码都不会保留,只会保留最原始的2个用户)。这里面初始了2个用户分别是:root和bbc,密码也同时封装好了,在这里(DAO层:数据访问对象层)我们需要封装相应的方法:模拟注册,登录的过程方法需要写好。
@3.在增删改查的基础上我们还需要构架相应的业务逻辑service:登录,注册返回值类型设置为bool值。
@4.同时还需要渲染view(初始界面和最终的效果)。
@5.核心的Controller层必不可少,相当于我们的原料加工厂,处理过程,在此需要实现注册和登录的功能。把这些层处理好才能达到我们的预期效果。
这个项目不足的是:数据不能持久化存储。当我们学习了文件,数据库,Java的序列化等知识可以将数据持久化的存储到文件或者磁盘中,方便我们使用。同时这个项目的功能还可以进一步完善,比如查找用户,修改密码,删除用户,分页查找(一个用户管理系统用户多时,我们分页查看清晰明了)。对这些功能感兴趣的读者可以自己尝试编写。这只是设计的一个用户管理系统的注册登录版本,希望能帮到需要的小猿。最后感谢大家的阅读和支持!