1. 程式人生 > >註冊登入和商品管理的例子

註冊登入和商品管理的例子

在這裡插入圖片描述區域性變數快捷鍵設定

在這裡插入圖片描述自動售貨系統架構圖

使用者登入註冊系統開發流程-思路

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(