注册登录和商品管理的例子

在这里插入图片描述局部变量快捷键设置

在这里插入图片描述自动售货系统架构图

用户登录注册系统开发流程-思路

public interface UserDao{
   public User findUserByName(String name);
}

1/先定义service层的接口
思考: 看service层需要为上层提供什么样的功能(接什么参数,返回什么结果)

2/ 根据service层接口写实现类

在写service实现类的过程中,需要调dao层功能

3、根据service层的需求,定义dao层接口

4、根据dao层接口,写dao层实现类
(假设数据库是在UserDatabase类的静态HashMap中)

//静态数据的模拟
package cn.edu360.javase24.day07.interfacedemo2;

import java.util.HashMap;

import cn.edu360.javase24.day07.interfacedemo2.pojo.User;

public class UserDatabase {
	
	public static HashMap<String,User> userMap = new HashMap<>();
	
	/**
	 * 此类在被jvm加载时,静态代码块就会执行
	 */
	static {
		
		User u1 = new User();
		u1.set("aaa", "123");
		
		User u2 = new User();
		u2.set("bbb", "123");
		
		userMap.put(u1.getUserName(), u1);
		userMap.put(u2.getUserName(), u2);
	}
}

交互层-界面层

package cn.edu360.javase24.day07.interfacedemo2;

import java.util.Scanner;

import cn.edu360.javase24.day07.interfacedemo2.service.UserSerivce;
import cn.edu360.javase24.day07.interfacedemo2.service.UserServiceImpl;

public class UserMenu {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		// 定义一个业务组件变量,用它的接口类型来引用
		UserSerivce userManage = new UserServiceImpl();
		boolean flag = true;
		while (flag) {
			System.out.println("1.登录;  2.注册; quit.退出");
			String nextLine = sc.nextLine();
			switch (nextLine) {
			case "1":
				System.out.println("请输入账号:");
				String username = sc.nextLine();
				System.out.println("请输入密码:");
				String pwd = sc.nextLine();

				// 调用业务逻辑组件的登陆方法
				boolean login = userManage.login(username, pwd);
				if (login) {
					System.out.println("恭喜您,登陆成功");
				} else {
					System.out.println("抱歉,您的用户名或密码不正确");
				}
				break;
			case "2":
				System.out.println("请输入用户名:");
				String name = sc.nextLine();
				System.out.println("请输入密码:");
				String pwd1 = sc.nextLine();
				System.out.println("请再次确认密码:");
				String pwd2 = sc.nextLine();

				// 调用业务逻辑组件的注册方法
				String res = userManage.regist(name, pwd1, pwd2);
				switch (res) {
				case "1":
					System.out.println("亲爱的,你有可能两次密码输的不一致");
					break;
				case "2":
					System.out.println("亲爱的,你选的账号太抢手了,换一个吧");
					break;
				case "3":
					System.out.println("亲爱的,你今天开始算是我的人了");
					break;
				default:
					break;

				}
				break;

			case "quit":
				System.out.println("bye......");
				flag = false;
				break;

			}
		}
	}

}

pojo文件夹

package cn.edu360.javase24.day07.interfacedemo2.pojo;

public class User {
	
	private String userName;
	private String password;
	
	public void set(String userName,String password) {
		this.userName = userName;
		this.password =  password;
	}
	
	
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
}

dao层

package cn.edu360.javase24.day07.interfacedemo2.dao;

import cn.edu360.javase24.day07.interfacedemo2.pojo.User;

public interface UserDao {
	
	public User findUserByName(String userName);
	
	public boolean checkUserIfExsit(String userName);
	
	public void addUser(User user);
}

//dao接口实现
package cn.edu360.javase24.day07.interfacedemo2.dao;

import cn.edu360.javase24.day07.interfacedemo2.UserDatabase;
import cn.edu360.javase24.day07.interfacedemo2.pojo.User;

public class UserDaoImpl implements UserDao{

	/**
	 * 根据一个用户名到数据库中查找该用户
	 */
	@Override
	public User findUserByName(String userName) {
		
		User user = UserDatabase.userMap.get(userName);
		
		return user;
	}

	/**
	 * 检查数据库中是否已存在该用户名
	 */
	@Override
	public boolean checkUserIfExsit(String userName) {

		boolean containsKey = UserDatabase.userMap.containsKey(userName);
		
		return containsKey;
	}

	
	/**
	 * 将传入的user对象存入数据库
	 */
	@Override
	public void addUser(User user) {
		UserDatabase.userMap.put(user.getUserName(), user);
		
	}
package cn.edu360.javase24.day07.interfacedemo2.dao;

import org.junit.Test;

import cn.edu360.javase24.day07.interfacedemo2.UserDatabase;
import cn.edu360.javase24.day07.interfacedemo2.pojo.User;

/**
 * 有一个框架,叫做junit
 * 它可以帮我们调用各种测试方法
 * 那我们就可以不用写main方法来做测试了
 * @author ThinkPad
 *
 */
 //DAO层测试
public class UserDaoImplJunitTest {
	
	
	@Test   // 要运行哪个测试方法,就在这个方法上添加@Test注解,然后在方法名上点右键,选run as-->Junit
	public void testAdd() {
		UserDaoImpl userDaoImpl = new UserDaoImpl();
		User u2 = new User();
		u2.set("lisi", "123");
		
		userDaoImpl.addUser(u2);
		
		boolean ex = userDaoImpl.checkUserIfExsit("lisi");
		System.out.println(ex);
		
	}
	
	
	@Test
	public void testFind() {
		UserDaoImpl userDaoImpl = new UserDaoImpl();
		
		User xx = userDaoImpl.findUserByName("ccc");
		System.out.println(xx.getPassword());
		
	}
}

server层

package cn.edu360.javase24.day07.interfacedemo2.service;

/**
 * 业务层的接口
 * 定义了两个方法: login  、  regist
 * @author ThinkPad
 *
 */
public interface UserSerivce {
	
	
	public boolean login(String name,String pwd);
	
	
	
	/**
	 * 如果是密码不一致,则返回"1"
	 * 如果是用户名已存在,则返回"2"
	 * 如果注册成功,则返回"3"
	 * @param name
	 * @param pwd1
	 * @param pwd2
	 * @return
	 */
//server层接口实现	 
public String regist(String name,String pwd1,String pwd2);
package cn.edu360.javase24.day07.interfacedemo2.service;

import cn.edu360.javase24.day07.interfacedemo2.dao.UserDao;
import cn.edu360.javase24.day07.interfacedemo2.dao.UserDaoImpl;
import cn.edu360.javase24.day07.interfacedemo2.pojo.User;

public class UserServiceImpl implements UserSerivce{
	UserDao userDao = new UserDaoImpl();
	
	
	@Override
	public boolean login(String name, String pwd) {
		
		// 调DAO层的功能去查询该用户名是否存在  ——》 传一个用户名,它帮我返回一个用户对象
		
		User user = userDao.findUserByName(name);
		if(user==null) {
			return false;
		}

		if(user.getPassword().equals(pwd)) {
			return true;
		}
		
		return false;
	}

	
	
	
	@Override
	public String regist(String name, String pwd1, String pwd2) {
		// 检查两次密码是否一致,如果不一致,直接返回 1 
		if(!pwd1.equals(pwd2)) {
			return "1";
		}
		
		// 调dao层的功能去检查该用户名是否已存在
		boolean ifExist = userDao.checkUserIfExsit(name);	
		
		// 如果用户名已存在,则直接返回 2
		if(ifExist) {
			return "2";
		}
		
		// 将用户的信息存储到数据库中
		User u = new User();
		u.set(name, pwd1);
		userDao.addUser(u);
		
		return "3";
	}

}


}

/****** 复杂题 *************************************************/
模拟实现以下商品管理业务系统,商品管理系统的整体功能有:
注:商品数据存储在一个数据库中(用静态HashMap来模拟)

  • 1、用户可以通过输入商品信息来向库中添加商品,如:
    /** idname,price,库存数量 ***/
    p01,透明胶带,8.8,1000

  • 2、用户可以查看数据库中所有的商品

  • 3、用户可以通过输入一个id来查看一个商品

  • 4、用户可以通过输入一个name来查看一个商品

  • 5、用户可以通过输入一个价格范围(比如: 100->200)来查看符合条件的商品

  • 6、用户可以通过输入一个id来从数据库中删除一个商品

/** 讲解时额外添加的需求

  • 7、用户可以通过指定一个id来修改一个商品的名称

  • 8、用户可以通过制定一个id来修改一个商品的价格

  • 9、用户可以通过制定一个id来修改一个商品的库存数量
    ** /

    要求:
    a、整个程序要分成:交互层、 业务逻辑(service)层、 数据访问(dao)层
    b、交互层和service层之间要用“面向接口编程”的模式来写
    c、业务逻辑层和dao层之间要用“面向接口编程”的模式来写
    /** 注:交互层打印菜单的过程很麻烦,可以不写交互层,只要完成service层的接口及实现类, dao层的接口及实现类 即可 **/

//数据存放
public class ProductDatabase {
	
	public static HashMap<String, Product> pMap = new HashMap<>();

}
//server业务层
package cn.edu360.javase24.exam02.difficult;

import java.util.ArrayList;

public interface ProductService {
	
	// 添加商品
	public void addProduct(Product p);
	
	// 查询所有商品
	public ArrayList<Product> getAllProducts();
	
	// 根据id查商品
	public Product getProductById(String pId);
	
	//  根据name查商品
	public Product getProductByName(String pName);
	
	
	// 根据价格区间查商品
	public ArrayList<Product> getProductsByPriceRange(float minPrice,float maxPrice);
	
	// 删除商品
	public void removeProductById(String pId);
	
	
	// 修改商品名称
	public void updateName(String pId,String newName);
	
	
	// 修改商品价格
	public void updatePrice(String pId,float newPrice);
	
	
	// 修改商品库存数量
	public void updateStockNum(String pId,int newStockNum);
	

}
//业务层实现
package cn.edu360.javase24.exam02.difficult;

import java.util.ArrayList;
import java.util.Set;

public class ProductServiceImpl implements ProductService{

	ProductDao productDao = new ProductDaoImpl();
	
	@Override
	public void addProduct(Product p) {
		productDao.addProduct(p);
	}
	

	@Override
	public ArrayList<Product> getAllProducts() {
		ArrayList<Product> pList = new ArrayList<>();
		Set<Product> pSet = productDao.getAllProducts();
		for(Product p: pSet) {
			pList.add(p);
		}
		return pList;
	}
	

	@Override
	public Product getProductById(String pId) {
		
		return productDao.getProductById(pId);
	}

	@Override
	public Product getProductByName(String pName) {

		return productDao.getProductByName(pName);
	}

	@Override
	public ArrayList<Product> getProductsByPriceRange(float minPrice, float maxPrice) {
		
		return productDao.getProductsByPriceRange(minPrice, maxPrice);
	}

	@Override
	public void removeProductById(String pId) {
		productDao.removeProductById(pId);
		
	}

	@Override
	public void updateName(String pId, String newName) {
		Product productById = productDao.getProductById(pId);
		productById.setpName(newName);
		
		productDao.updateProduct(productById);
		
	}

	@Override
	public void updatePrice(String pId, float newPrice) {
		Product productById = productDao.getProductById(pId);
		productById.setPrice(newPrice);
		
		productDao.updateProduct(productById);
		
	}

	@Override
	public void updateStockNum(String pId, int newStockNum) {
		Product productById = productDao.getProductById(pId);
		productById.setStockNum(newStockNum);
		
		productDao.updateProduct(productById);
		
	}

}
//业务层测试
package cn.edu360.javase24.exam02.difficult;

import java.util.ArrayList;

import org.junit.Test;

public class ProductServiceImplTest {

	/**
	 * 测试添加商品功能
	 */
	@Test
	public void testAdd() {
		ProductServiceImpl service = new ProductServiceImpl();
		Product p = new Product("p1", "手环", 199.9f, 10000);

		// 测试添加商品的功能
		service.addProduct(p);
	}

	
	/**
	 * 测试根据id去商品的功能
	 */
	@Test
	public void testGetById() {

		ProductServiceImpl service = new ProductServiceImpl();
		Product p = new Product("p1", "手环", 199.9f, 10000);

		// 测试添加商品的功能
		service.addProduct(p);

		// 测试根据id去商品的功能
		Product productById = service.getProductById("p2");
		System.out.println(productById);

	}
	
	
	/**
	 * 测根据name取商品
	 */
	@Test
	public void testGetByName() {
		ProductServiceImpl service = new ProductServiceImpl();
		Product p = new Product("p1", "手环", 199.9f, 10000);

		// 测试添加商品的功能
		service.addProduct(p);
		
		Product productByName = service.getProductByName("手2环");
		System.out.println(productByName);
		
	}
	
	
	/**
	 *  测试价格范围查询商品
	 */
	@Test
	public void testGetByPriceRange() {
		
		ProductServiceImpl service = new ProductServiceImpl();
		Product p1 = new Product("p1", "手1环", 199.9f, 10000);
		Product p2 = new Product("p2", "手2环", 299.9f, 10000);
		Product p3 = new Product("p3", "手3环", 399.9f, 10000);
		Product p4 = new Product("p4", "手4环", 499.9f, 10000);

		// 测试添加商品的功能
		service.addProduct(p1);
		service.addProduct(p2);
		service.addProduct(p3);
		service.addProduct(p4);
		
		ArrayList<Product> pList = service.getProductsByPriceRange(200, 400);
		System.out.println(pList);
		
	}
	
	/**
	 * 修改商品名称功能的测试
	 */
	@Test
	public void testUpdateProductName() {
		ProductServiceImpl service = new ProductServiceImpl();
		Product p1 = new Product("p1", "手1环", 199.9f, 10000);
		service.addProduct(p1);
		
		service.updateName("p1", "魔戒");
		
		Product productById = service.getProductById("p1");
		System.out.println(productById);
		
	}
	
	/**
	 * 修改商品价格功能的测试
	 */
	@Test
	public void testUpdateProductPrice() {
		ProductServiceImpl service = new ProductServiceImpl();
		Product p1 = new Product("p1", "手1环", 199.9f, 10000);
		service.addProduct(p1);
		
		service.updatePrice("p1", 222.2f);
		
		Product productById = service.getProductById("p1");
		System.out.println(productById);
	}
	
	
	/**
	 * 修改商品库存功能的测试
	 */
	@Test
	public void testUpdateProductStock() {
		ProductServiceImpl service = new ProductServiceImpl();
		Product p1 = new Product("p1", "手1环", 199.9f, 10000);
		service.addProduct(p1);
		
		service.updateStockNum("p1", 9000);
		
		Product productById = service.getProductById("p1");
		System.out.println(productById);
	}
	

}

//数据访问层接口
package cn.edu360.javase24.exam02.difficult;

import java.util.ArrayList;
import java.util.Set;

public interface ProductDao {
	
	// 添加商品
	public void addProduct(Product p);
	
	// 查询所有商品
	public Set<Product> getAllProducts();
	
	// 根据id查商品
	public Product getProductById(String pId);
	
	//  根据name查商品
	public Product getProductByName(String pName);
	
	
	// 根据价格区间查商品
	public ArrayList<Product> getProductsByPriceRange(float minPrice,float maxPrice);
	
	// 删除商品
	public void removeProductById(String pId);
	
	
	// 修改商品
	public void updateProduct(Product p);
	

}
//数据访问层接口实现
package cn.edu360.javase24.exam02.difficult;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;

public class ProductDaoImpl implements ProductDao{

	/**
	 * 添加一个商品到数据库
	 */
	@Override
	public void addProduct(Product p) {
		
		ProductDatabase.pMap.put(p.getpId(), p);
		
	}

	@Override
	public Set<Product> getAllProducts() {
		Collection<Product> values = ProductDatabase.pMap.values();
		
		HashSet<Product> pSet = new HashSet<>();
		for(Product p:values) {
			pSet.add(p);
		}
		
		return pSet;
	}

	@Override
	public Product getProductById(String pId) {
		 
		Product product = ProductDatabase.pMap.get(pId);
		
		return product;
	}

	@Override
	public Product getProductByName(String pName) {
		
		Collection<Product> values = ProductDatabase.pMap.values();
		for(Product p: values) {
			if(p.getpName().equals(pName)) {
				return p;
			}
		}
		return null;
	}

	@Override
	public ArrayList<Product> getProductsByPriceRange(float minPrice, float maxPrice) {
		
		Collection<Product> values = ProductDatabase.pMap.values();
		ArrayList<Product> pList = new ArrayList<>();
		
		for(Product p: values) {
			if(p.getPrice()>=minPrice && p.getPrice() <= maxPrice) {
				pList.add(p);
			}
		}
		return pList;
	}

	@Override
	public void removeProductById(String pId) {
		
		ProductDatabase.pMap.remove(pId);
	}

	@Override
	public void updateProduct(Product p) {
		
		ProductDatabase.pMap.put(p.getpId(), p);
	}

}
//pojo文件
package cn.edu360.javase24.exam02.difficult;

public class Product {
	// p01,透明胶带,8.8,1000
	private String pId;
	private String pName;
	private float price;
	private int stockNum;
	
	public Product() {
		
	}

	public Product(String pId, String pName, float price, int stockNum) {
		this.pId = pId;
		this.pName = pName;
		this.price = price;
		this.stockNum = stockNum;
	}

	

	public void set(String pId, String pName, float price, int stockNum) {
		this.pId = pId;
		this.pName = pName;
		this.price = price;
		this.stockNum = stockNum;
	}

	public String getpId() {
		return pId;
	}

	public void setpId(String pId) {
		this.pId = pId;
	}

	public String getpName() {
		return pName;
	}

	public void setpName(String pName) {
		this.pName = pName;
	}

	public float getPrice() {
		return price;
	}

	public void setPrice(float price) {
		this.price = price;
	}

	public int getStockNum() {
		return stockNum;
	}

	public void setStockNum(int stockNum) {
		this.stockNum = stockNum;
	}

	@Override
	public String toString() {
		return "[pId=" + pId + ", pName=" + pName + ", price=" + price + ", stockNum=" + stockNum + "]";
	}
	
	
}

猜你喜欢

转载自blog.csdn.net/yaoyingting2009/article/details/83583385
今日推荐