基於java的外賣點餐系統部分模組設計(無介面版)

kai_Childe發表於2020-11-29

大家好,本次帶來的是基於java的外賣點餐系統部分模組設計(無介面版),也算是對這一個月所學的檢測吧,由於還沒學習前端,所有隻能在控制檯進行介面模擬,可能存在一些小bug,望大家指正。



一、建立實體類

本專案一個有4個實體類:Administrator(管理員類)、Client(客戶類)、Dishes(菜品類)、OrderForm(訂單類)。

Administrator(管理員類)

import java.util.ArrayList;
import java.util.List;

/**
 * 管理員類
 * 
 * @author Administrator
 *
 */

public class Administrator {
	/** 管理員ID */
	private int aid;
	/** 賬號 */
	private String azhangHao;
	/** 密碼 */
	private String amiMa;

	public Administrator() {
		this(1001, "sunkai", "sunkai001");
	}

	private Administrator(int aid, String azhangHao, String amiMa) {
		super();
		this.aid = aid;
		this.azhangHao = azhangHao;
		this.amiMa = amiMa;
	}
	
	public int getAid() {
		return aid;
	}

	public void setAid(int aid) {
		this.aid = aid;
	}

	public String getAzhangHao() {
		return azhangHao;
	}

	public void setAzhangHao(String azhangHao) {
		this.azhangHao = azhangHao;
	}

	public String getAmiMa() {
		return amiMa;
	}

	public void setAmiMa(String amiMa) {
		this.amiMa = amiMa;
	}

	@Override
	public String toString() {
		return "管理員id:" + aid + ", 賬號:" + azhangHao + ", 密碼:" + amiMa;
	}
}

Client(客戶類)

import java.text.DateFormat;
import java.text.FieldPosition;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Date;

/**
 * 客戶類
 * 
 * @author Administrator
 *
 */

public class Client {
	/** 客戶id */
	private int cid;
	/** 客戶名 */
	private String cname;
	/** 性別 */
	private String sex;
	/** 密碼 */
	private String cmiMa;
	/** 送餐地址 */
	private String songCanDiZhi;
	/** 手機號 */
	private String shouJiHao;
	/** 建立時間 */
	private LocalDate chuangJianShiJian;

	private Client() {
		// TODO Auto-generated constructor stub
	}

	public Client(int cid, String cname, String sex, String cmiMa, String songCanDiZhi, String shouJiHao) {
		super();
		this.cid = cid;
		this.cname = cname;
		this.sex = sex;
		this.cmiMa = cmiMa;
		this.songCanDiZhi = songCanDiZhi;
		this.shouJiHao = shouJiHao;
		chuangJianShiJian = LocalDate.now();
	}

	public Client(int cid, String cname, String sex, String cmiMa, String shouJiHao) {
		super();
		this.cid = cid;
		this.cname = cname;
		this.sex = sex;
		this.cmiMa = cmiMa;
		this.shouJiHao = shouJiHao;
		chuangJianShiJian = LocalDate.now();
	}

	public int getCid() {
		return cid;
	}

	public void setCid(int cid) {
		this.cid = cid;
	}

	public String getCname() {
		return cname;
	}

	public void setCname(String cname) {
		this.cname = cname;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public String getCmiMa() {
		return cmiMa;
	}

	public void setCmiMa(String cmiMa) {
		this.cmiMa = cmiMa;
	}

	public String getSongCanDiZhi() {
		return songCanDiZhi;
	}

	public void setSongCanDiZhi(String songCanDiZhi) {
		this.songCanDiZhi = songCanDiZhi;
	}

	public String getShouJiHao() {
		return shouJiHao;
	}

	public void setShouJiHao(String shouJiHao) {
		this.shouJiHao = shouJiHao;
	}

	public LocalDate getChuangJianShiJian() {
		return chuangJianShiJian;
	}
	@Override
	public String toString() {
		return "客戶id:" + cid + ", 客戶名:" + cname + ", 性別:" + sex + ", 密碼:" + cmiMa + ", 送餐地址:"
				+ songCanDiZhi + ", 手機號:" + shouJiHao + ", 建立時間:" + chuangJianShiJian;
	}
}

Dishes(菜品類)

import java.time.LocalDate;

/**
 * 菜品類
 * 
 * @author Administrator
 *
 */

public class Dishes {
	/** 菜品ID */
	private int dno;
	/** 菜品名 */
	private String dname;
	/** 菜品型別 */
	private String dleiXin;
	/** 上架時間 */
	private LocalDate dshangJiaShiJian;
	/** 單價 */
	private double dshouJia;
	/** 月銷售量 */
	private int dyueXiaoShouLiang;
	/** 總數量 */
	private int dzonShuLiang;

	private Dishes() {
		// TODO Auto-generated constructor stub
	}

	public Dishes(int dno, String dname, String dleiXin, double dshouJia,int dzonShuLiang) {
		super();
		this.dno = dno;
		this.dname = dname;
		this.dleiXin = dleiXin;
		this.dshangJiaShiJian = LocalDate.now();
		this.dshouJia = dshouJia;
		this.dzonShuLiang =  dzonShuLiang;
	}

	public int getDno() {
		return dno;
	}

	public void setDno(int dno) {
		this.dno = dno;
	}

	public String getDname() {
		return dname;
	}

	public void setDname(String dname) {
		this.dname = dname;
	}

	public String getDleiXin() {
		return dleiXin;
	}

	public void setDleiXin(String dleiXin) {
		this.dleiXin = dleiXin;
	}

	public LocalDate getDshangJiaShiJian() {
		return dshangJiaShiJian;
	}

	

	public double getDshouJia() {
		return dshouJia;
	}

	public void setDshouJia(double dshouJia) {
		this.dshouJia = dshouJia;
	}

	public int getDyueXiaoShouLiang() {
		return dyueXiaoShouLiang;
	}

	public void setDyueXiaoShouLiang(int dyueXiaoShouLiang) {
		this.dyueXiaoShouLiang = dyueXiaoShouLiang;
	}

	public int getDzonShuLiang() {
		return dzonShuLiang;
	}

	public void setDzonShuLiang(int dzonShuLiang) {
		this.dzonShuLiang = dzonShuLiang;
	}

	@Override
	public String toString() {
		return "菜品id:" + dno + ", 菜品名:" + dname + ", 菜品型別:" + dleiXin + ", 上架時間:"
				+ dshangJiaShiJian + ", 單價:" + dshouJia + ", 月銷售量:" + dyueXiaoShouLiang
				+ ", 總數量:" + dzonShuLiang;
	}
}

OrderForm(訂單類)

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Map;

public class OrderForm {
	/**訂單號*/
	private int oid;
	/**訂單建立時間*/
	private LocalDateTime datetime;
	/**菜品id及購買數*/
	private Map<Integer,Integer> dnoAndshuLian;
	/**客戶id*/
	private int cid;
	/**總價格*/
	private double zonJiaGe;
	/**訂單狀態*/
	private int dingDanZhuangTai;
	
	
	public OrderForm() {
		// TODO Auto-generated constructor stub
	}


	public OrderForm(int oid, Map<Integer, Integer> dnoAndshuLian, int cid, double zonJiaGe,
			int dingDanZhuangTai) {
		super();
		this.oid = oid;
		this.datetime = LocalDateTime.now();
		this.dnoAndshuLian = dnoAndshuLian;
		this.cid = cid;
		this.zonJiaGe = zonJiaGe;
		this.dingDanZhuangTai = dingDanZhuangTai;
	}
	
	
	
	public int getOid() {
		return oid;
	}


	public void setOid(int oid) {
		this.oid = oid;
	}


	public LocalDateTime getDatetime() {
		return datetime;
	}


	public void setDatetime(LocalDateTime datetime) {
		this.datetime = datetime;
	}


	public Map<Integer, Integer> getDnoAndshuLian() {
		return dnoAndshuLian;
	}


	public void setDnoAndshuLian(Map<Integer, Integer> dnoAndshuLian) {
		this.dnoAndshuLian = dnoAndshuLian;
	}


	public int getCid() {
		return cid;
	}


	public void setCid(int cid) {
		this.cid = cid;
	}


	public double getZonJiaGe() {
		return zonJiaGe;
	}


	public void setZonJiaGe(double zonJiaGe) {
		this.zonJiaGe = zonJiaGe;
	}


	public int getDingDanZhuangTai() {
		return dingDanZhuangTai;
	}


	public void setDingDanZhuangTai(int dingDanZhuangTai) {
		this.dingDanZhuangTai = dingDanZhuangTai;
	}


	//返回由菜品id和購買數拼接成的字串
	public StringBuffer sk() {
		StringBuffer s = new StringBuffer();
		dnoAndshuLian.entrySet().stream().forEach(e->{
			s.append("\n菜品id:"+e.getKey().toString()+"\t購買數:"+e.getValue().toString());
		});
		return s;
	}

	//將訂單建立的時間格式改為yyyy.MM.dd HH:mm:ss
	public String ks() {
		return datetime.format(DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss"));
	}

	@Override
	public String toString() {
		return "訂單號:" + oid + ", 訂單建立時間:" + ks() + ", 客戶id:" + cid+sk()
				+ "\n總價格:" + zonJiaGe + ", 訂單狀態:" + dingDanZhuangTai ;
		
	}
}

二、管理類

本系統共有1個介面加4個管理類:DAO(管理類介面)、AdminManagement(管理員管理類)、ClientManagement(客戶管理類)、DishesManagement(菜品管理類)、OrderManagement(訂單管理類)

DAO(管理類介面)

import java.util.List;

public interface DAO<T> {

	/** 新增T型別物件到Map中 */
	boolean insert(T t);

	/** 根據id獲取Map中的元素 */
	T findById(int id);

	/** 返回map中的所有元素值集 */
	List<T> findAll();

	/** 根據id刪除Map中的元素 */
	boolean delete(int id);

}

AdminManagement(管理員管理類)

* 管理員管理類
 * 採用單例模式(餓漢式)
 * @author Lenovo
 *
 */
import com.sunkai.chengyuanlei.Administrator;

public class AdminManagement {
	/**建立管理員物件 ,同時只允許一個管理員物件存在*/
	private static Administrator admin = new Administrator();
	/**建立管理員管理物件*/
	private static AdminManagement am = new AdminManagement();
	
	private AdminManagement() { }
	
	public static AdminManagement toAdmin() {
		return am;
	}
	
	/**管理員登入*/
	public boolean guanLiYuanDengLu(String s1,String s2) {
		boolean bl = false;
		if(admin.getAzhangHao().equals(s1)&&admin.getAmiMa().equals(s2)) {
			bl = true;
		}
		return bl;
		
	}
}

ClientManagement(客戶管理類)

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.sunkai.chengyuanlei.Client;
import com.sunkai.chengyuanlei.Dishes;

public class ClientManagement implements DAO<Client> {
	/**儲存客戶資訊的map集合,鍵為客戶id、值為客戶資訊*/
	private static Map<Integer, Client> map = new HashMap<>();
	/**儲存當前登入的客戶id*/
	private static int id;
	
	public static int getId() {
		return id;
	}
	
	@Override
	/** 將客戶資訊存到Map集合中 */
	public boolean insert(Client t) {
		boolean bl = true;
		if (map.containsKey(t.getCid())) {
			bl = false;
		} else {
			map.put(t.getCid(), t);
		}
		return bl;
	}

	@Override
	/** 根據客戶ID查詢客戶資訊 */
	public Client findById(int id) {
		Client d = null;
		if (map.containsKey(id)) {
			d = map.get(id);
		}
		return d;
	}

	@Override
	/** 返回所有客戶資訊所構成的集合 */
	public List<Client> findAll() {
		Collection<Client> values = map.values();
		return new ArrayList(values);
	}

	@Override
	/** 根據ID刪除客戶資訊 */
	public boolean delete(int id) {
		boolean bl = true;
		if (map.containsKey(id)) {
			map.remove(id);
		} else {
			bl = false;
		}
		return bl;
	}
	
	
	/** 將客戶資訊進行分頁顯示,每頁最多5條資訊 */
	public List<Client> fenYe(List<Client> list, int a) {
		int b = list.size() / 5;
		int c = list.size() % 5;
		if (a > b && c == 0 || a > (b + 1)) {
			
		} else if (a == (b + 1) && c != 0) {
			list = list.subList(5 * (a - 1), list.size());
		} else {
			list = list.subList(5 * (a - 1), 5 * a);
		}
		return list;
	}

	/** 檢視所有客戶資訊,以分頁的方式顯示,每頁最多顯示5條資訊 */
	public List<Client> fenYeXianShi(int a) {
		List<Client> list = findAll();
		//接收第a頁的菜品資訊的集合
		list = fenYe(list, a);
		return list;
	}
	
	/**使用者登入*/
	public boolean yonHuDengLu(String s1,String s2) {
		boolean bl = false;
		List<Client> list = findAll();
		for(Client c:list) {
			if(c.getShouJiHao().equals(s1)&&c.getCmiMa().equals(s2)) {
				id = c.getCid();
				bl = true;
			}
		}
		return bl;
	}
	
	/**修改密碼(當前登入使用者)*/
	public boolean xiuGaiMiMa(String s) {
		boolean bl = false;
		//密碼限制:只能是6-10位的數字或字母
		if(s.matches("^[1-9a-zA-Z]\\w{5,9}")) {
			map.get(id).setCmiMa(s);
			bl = true;
		}
		return bl;
		
	}
	
	/**顯示當前登入使用者的資訊*/
	public Client xianShiDangQianYonHu() {
		return map.get(id);
	}
	
	

}

DishesManagement(菜品管理類)

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.stream.Collector;
import java.util.stream.Collectors;

/**
 * 菜品管理類
 */

import com.sunkai.chengyuanlei.Dishes;

public class DishesManagement implements DAO<Dishes> {
	/** 儲存菜品資訊的Map集合,鍵為菜品ID,值為菜品類 */
	private static Map<Integer, Dishes> map = new HashMap<>();

	@Override
	/** 新增菜品資訊到Map集合 */
	public boolean insert(Dishes t) {
		boolean bl = true;
		if (map.containsKey(t.getDno())) {
			bl = false;
		} else {
			map.put(t.getDno(), t);
		}
		return bl;
	}

	@Override
	/** 根據id獲取菜品資訊 */
	public Dishes findById(int id) {
		Dishes d = null;
		if (map.containsKey(id)) {
			d = map.get(id);
		}
		return d;
	}

	@Override
	/** 返回所有菜品資訊所構成的集合 */
	public List<Dishes> findAll() {
		Collection<Dishes> values = map.values();
		return new ArrayList(values);
	}

	@Override
	/** 刪除指定ID的菜品 */
	public boolean delete(int id) {
		boolean bl = true;
		if (map.containsKey(id)) {
			map.remove(id);
		} else {
			bl = false;
		}
		return bl;
	}

	/** 將菜品資訊進行分頁顯示,每頁最多5條資訊 */
	public List<Dishes> fenYe(List<Dishes> list, int a) {
		int b = list.size() / 5;
		int c = list.size() % 5;
		if (a > b && c == 0 || a > (b + 1)) {
			
		} else if (a == (b + 1) && c != 0) {
			list = list.subList(5 * (a - 1), list.size());
		} else {
			list = list.subList(5 * (a - 1), 5 * a);
		}
		return list;
	}

	/** 檢視所有菜品資訊,以分頁的方式顯示,每頁最多顯示5條資訊 */
	public List<Dishes> fenYeXianShi(int a) {
		List<Dishes> list = findAll();
		//接收第a頁的菜品資訊的集合
		list = fenYe(list, a);
		return list;
	}

	/** 檢視指定類別的菜品資訊 */
	public List<Dishes> anLeiBie(String s) {
		List<Dishes> list = findAll();
		// 篩選符合要求的菜品,並返回新的集合
		list = list.stream().filter(d -> d.getDleiXin().equals(s)).collect(Collectors.toList());
		return list;
	}

	/** 根據菜品ID修改菜品價格 */
	public boolean xiuGaiJiaGe(int id, double b) {
		List<Dishes> list = findAll();
		Dishes d = findById(id);
		boolean bl = true;
		if (d != null) {
			d.setDshouJia(b);
		} else {
			bl = false;
		}
		return bl;
	}

	/** 顯示所有菜品(按菜品銷量從高到低排序輸出) */
	public List<Dishes> xianShiSuoYouCaiPin(int a) {
		List<Dishes> list = findAll();
		// 將所有菜品資訊按照銷售量從高到低排序
		list = list.stream().sorted((d1, d2) -> d2.getDyueXiaoShouLiang() - d1.getDyueXiaoShouLiang())
				.collect(Collectors.toList());
		//將排好序的菜品資訊進行分頁
		list = fenYe(list,a);
		return list;
	}

	/** 根據菜品類別顯示所有菜品 */
	public List<Dishes> genJuLeiBie(int a) {
		List<Dishes> list = findAll();
		//將類別一樣的菜品資訊放到一起
		list = list.stream().sorted((d1,d2)->d1.getDleiXin().compareTo(d2.getDleiXin())).collect(Collectors.toList());
		//然後將菜品資訊進行分頁
		list = fenYe(list, a);
		return list;

	}

}

OrderManagement(訂單管理類)

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.sunkai.chengyuanlei.Client;
import com.sunkai.chengyuanlei.OrderForm;

public class OrderManagement implements DAO<OrderForm> {
	/**儲存訂單資訊的map集合,鍵為訂單id、值為訂單資訊*/
	Map<Integer, OrderForm> map = new HashMap<>();
	
	@Override
	/**新增訂單資訊到集合中*/
	public boolean insert(OrderForm t) {
		boolean bl = true;
		if (map.containsKey(t.getCid())) {
			bl = false;
		} else {
			map.put(t.getCid(), t);
		}
		return bl;
	}

	@Override
	/**根據定訂單id獲取訂單資訊*/
	public OrderForm findById(int id) {
		OrderForm o = null;
		if (map.containsKey(id)) {
			o = map.get(id);
		}
		return o;
	}

	@Override
	/**返回所有訂單資訊構成的集合*/
	public List<OrderForm> findAll() {
		Collection<OrderForm> values = map.values();
		return new ArrayList(values);
	}

	@Override
	/**根據訂單id刪除訂單*/
	public boolean delete(int id) {
		boolean bl = true;
		if (map.containsKey(id)) {
			map.remove(id);
		} else {
			bl = false;
		}
		return bl;
	}
	
	/**顯示當前登入使用者的訂單*/
	public OrderForm yonHuDingDan() {
		List<OrderForm> list = findAll();
		OrderForm order = null;
		for(OrderForm o: list) {
			if(o.getCid()==ClientManagement.getId()) {
				order = o;
			}
		}
		return order;
	}
	
	/** 將訂單資訊進行分頁顯示,每頁最多5條資訊 */
	public List<OrderForm> fenYe(List<OrderForm> list, int a) {
		int b = list.size() / 5;
		int c = list.size() % 5;
		if (a > b && c == 0 || a > (b + 1)) {
	
		} else if (a == (b + 1) && c != 0) {
			list = list.subList(5 * (a - 1), list.size());
		} else {
			list = list.subList(5 * (a - 1), 5 * a);
		}
		return list;
	}

	/** 檢視所有訂單資訊,以分頁的方式顯示,每頁最多顯示5條資訊 */
	public List<OrderForm> fenYeXianShi(int a) {
		List<OrderForm> list = findAll();
		//接收第a頁的菜品資訊的集合
		list = fenYe(list, a);
		return list;
	}
	
	/**根據訂單ID修改訂單狀態
	 * (0:未支付 1:已支付 2:配送中 3:已完成)*/
	public boolean xiuGaiDinDanZhuangTai(int a,int b) {
		boolean bl = false;
		if(map.containsKey(a)) {
			map.get(a).setDingDanZhuangTai(b);
			bl = true;
		}
		return bl;		
	}
}

三、介面類

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Scanner;
import com.sunkai.chengyuanlei.Client;
import com.sunkai.chengyuanlei.Dishes;
import com.sunkai.chengyuanlei.OrderForm;
import com.sunkai.guanlilei.AdminManagement;
import com.sunkai.guanlilei.ClientManagement;
import com.sunkai.guanlilei.DishesManagement;
import com.sunkai.guanlilei.OrderManagement;

public class Main {
	/** 建立Scanner物件,用於從物件接收資料 */
	private static Scanner sc = new Scanner(System.in);
	/** 建立管理員管理物件 */
	private static AdminManagement am = AdminManagement.toAdmin();
	/** 建立使用者管理物件 */
	private static ClientManagement client = new ClientManagement();
	/** 建立菜品管理物件 */
	private static DishesManagement dm = new DishesManagement();
	/** 建立訂單管理物件 */
	private static OrderManagement om = new OrderManagement();
	/** 定義一個用於生成使用者id的變數,初始值為10001,每建立一個使用者就+1 */
	private static int cid = 10001;
	/** 定義一個用於生成菜品id的變數,初始值為10001,每新增就一條菜品資訊就+1 */
	private static int did = 10001;
	/** 定義一個用於生成訂單id的變數,初始值為10001,每生成一個訂單就+1 */
	private static int oid = 10001;

	/** 首頁介面,包含:登入、註冊、退出選項 */
	public void shouYeJieMian() {
		System.out.println("==========呆呆的餐廳=========");
		System.out.println("===========[1]登入==========");
		System.out.println("===========[2]註冊==========");
		System.out.println("===========[0]退出==========");
		String a = sc.next();
		switch (a) {
		case "1":
			// 登入
			dengLuJieMian();
			break;
		case "2":
			// 註冊
			zhuCeJieMian();
			break;
		default:
			// 退出
			return;
		}
	}

	/** 登入介面 */
	public void dengLuJieMian() {
		System.out.println("=========登入介面========");
		System.out.print("使用者名稱:");
		String s1 = sc.next();
		System.out.print("密碼:");
		String s2 = sc.next();
		// 先判斷登入物件是否為管理員
		if (am.guanLiYuanDengLu(s1, s2)) {
			// 登入成功進入管理員功能介面
			guanLiYuanGonNengJieMian();
			// 如果管理員驗證未通過,再進行客戶登入驗證
		} else if (client.yonHuDengLu(s1, s2)) {
			// 登入成功進入客戶功能介面
			yonHuGonNengJieMian();
		} else {
			System.out.println("=====登入失敗,請重新登入=====");
			dengLuJieMian();
		}
	}

	/** 使用者註冊介面 */
	public void zhuCeJieMian() {
		System.out.println("======註冊介面======");
		System.out.print("名稱:");
		String s1 = sc.next();
		System.out.print("性別:");
		String s2 = sc.next();
		System.out.print("送餐地址:");
		String s3 = sc.next();
		String s4;
		String s5;
		while (true) {
			System.out.print("手機號:");
			s4 = sc.next();
			System.out.print("密碼:");
			s5 = sc.next();
			if (s4.matches("^1[0-9]{10}") && s5.matches("^[1-9a-zA-Z]\\w{5,9}")) {
				break;
			} else {
				System.out.println("手機號或密碼錯誤");
			}
		}
		if (client.insert(new Client(cid, s1, s2, s5, s3, s4))) {
			// 使用者建立成功,cid加一,供下一位使用者建立時使用
			cid++;
			System.out.println("=======建立成功=======");
		} else {
			System.out.println("=======建立失敗=======");
		}
		System.out.println("請牢記手機號和密碼,這將是您登入本系統的憑證");
		System.out.println("=======[1]登入=======");
		System.out.println("=======[0]退出=======");
		String s = sc.next();
		switch (s) {
		case "1":
			// 登入介面
			dengLuJieMian();
			break;
		default:
			// 退出系統
			return;
		}
	}

	/** 管理員功能介面 */
	public void guanLiYuanGonNengJieMian() {
		System.out.println("================管理員===============");
		System.out.println("=============[1]新增菜品==============");
		System.out.println("=============[2]檢視所有菜品資訊========");
		System.out.println("=============[3]檢視指定類別的菜品資訊====");
		System.out.println("=============[4]根據菜品id修改菜品價格====");
		System.out.println("=============[5]刪除指定id的菜品=========");
		System.out.println("=============[6]新增客戶===============");
		System.out.println("=============[7]檢視客戶列表============");
		System.out.println("=============[8]刪除指定id的客戶=========");
		System.out.println("=============[9]訂單列表顯示=============");
		System.out.println("=============[10]根據訂單id修改訂單狀態====");
		System.out.println("=============[11]返回首頁介面=============");
		System.out.println("=============[0]退出系統================");
		String s1 = sc.next();
		switch (s1) {
		case "1":
			// 新增菜品
			tianJiaCaiPin();
			break;
		case "2":
			// 檢視所有菜品資訊
			chaKanSuoYoucaiPinXinXiJieMian();
			break;
		case "3":
			// 檢視指定類別的菜品資訊
			chaKanZhiDingLeiBieCaiPinXinXi();
			break;
		case "4":
			// 根據菜品id修改菜品價格
			genKJuCaiPinIdXiuGaiCaiPinJiage();
			break;
		case "5":
			// 刪除指定id的菜品
			shanChuZhiDingIdDeCaiPin();
			break;
		case "6":
			// 新增客戶
			tianJiaYonHuJieMian();
			break;
		case "7":
			// 檢視客戶列表
			chaKanKeHuLieBiaoJieMian();
			break;
		case "8":
			// 刪除指定id的客戶
			shanChuZhiDingIdDeKeHu();
			break;
		case "9":
			// 訂單列表顯示
			xianShiDingDanLieBiaoJieMian();
			break;
		case "10":
			// 根據訂單id修改訂單狀態
			genKJuDinDanIdXiuGaiDinDanZhuangTai();
			break;
		case "11":
			// 返回首頁介面
			shouYeJieMian();
		default:
			// 退出系統
			return;
		}
	}

	/** 使用者功能介面 */
	public void yonHuGonNengJieMian() {
		System.out.println("================使用者===============");
		System.out.println("=============[1]顯示所有菜品==============");
		System.out.println("=============[2]根據菜品類別顯示所有菜品========");
		System.out.println("=============[3]點餐========");
		System.out.println("=============[4]檢視訂單====");
		System.out.println("=============[5]修改密碼====");
		System.out.println("=============[6]個人資訊顯示=========");
		System.out.println("=============[7]返回首頁介面=============");
		System.out.println("=============[0]退出系統===============");
		String s1 = sc.next();
		switch (s1) {
		case "1":
			// 顯示所有菜品
			xianShiSuoYoucaiPinJieMian();
			break;
		case "2":
			// 根據菜品類別顯示所有菜品
			genJuCaiPinLeiBieXianShiSuoYouCaiPin();
			break;
		case "3":
			// 點餐
			dianCanJieMian();
			break;
		case "4":
			// 檢視訂單
			chaKanDingDan();
			break;
		case "5":
			// 修改密碼
			xiuGaiMiMa();
			break;
		case "6":
			// 個人資訊顯示
			geRenXinXiXianShi();
			break;
		case "7":
			// 返回首頁介面
			shouYeJieMian();
		default:
			// 退出系統
			return;
		}
	}

	/** 新增菜品 */
	public void tianJiaCaiPin() {
		System.out.println("============新增菜品=========");
		System.out.print("菜品名:");
		String s1 = sc.next();
		System.out.print("菜品型別:");
		String s2 = sc.next();
		System.out.print("單價:");
		double d1 = sc.nextDouble();
		System.out.print("總數量:");
		int i1 = sc.nextInt();
		if (dm.insert(new Dishes(did, s1, s2, d1, i1))) {
			// 菜品新增成功,did加一,供下一個菜品新增時使用
			did++;
			System.out.println("========新增成功=======");
		} else {
			System.out.println("=======新增失敗=====");
		}
		System.out.println("=======[1]繼續新增=====");
		System.out.println("=======[2]返回上一層=====");
		System.out.println("=======[0]退出系統======");
		String s3 = sc.next();
		switch (s3) {
		case "1":
			// 繼續新增
			tianJiaCaiPin();
			break;
		case "2":
			// 返回管理員功能介面
			guanLiYuanGonNengJieMian();
			break;
		default:
			// 退出系統
			return;
		}
	}

	/** 檢視所有菜品資訊介面 */
	public void chaKanSuoYoucaiPinXinXiJieMian() {
		System.out.println("======所有菜品資訊======");
		int a = 1;
		// 檢視所有菜品資訊(分頁顯示)
		chaKanSuoYoucaiPinXinXi(a);

	}

	/** 檢視所有菜品資訊 */
	public void chaKanSuoYoucaiPinXinXi(int a) {
		if (dm.fenYeXianShi(a).size() == 0) {
			System.out.println("暫無菜品資訊");
			System.out.println("=======[1]繼續檢視=====");
			System.out.println("=======[2]返回上一層=====");
			System.out.println("=======[0]退出系統======");
			String s3 = sc.next();
			switch (s3) {
			case "1":
				// 繼續檢視
				chaKanSuoYoucaiPinXinXiJieMian();
				break;
			case "2":
				// 返回管理員功能介面
				guanLiYuanGonNengJieMian();
				break;
			default:
				// 退出系統
				return;
			}

		} else if (dm.fenYeXianShi(a).size() == 5) {
			for (Dishes d : dm.fenYeXianShi(a)) {
				System.out.println(d);
			}
			System.out.println("=======[1]上一頁=====");
			System.out.println("=======[2]下一頁=====");
			System.out.println("=======[3]返回上一層=====");
			System.out.println("=======[0]退出系統======");
			String s3 = sc.next();
			switch (s3) {
			case "1":
				// 上一頁
				a--;
				chaKanSuoYoucaiPinXinXi(a);
				break;
			case "2":
				// 下一頁
				a++;
				chaKanSuoYoucaiPinXinXi(a);
				break;
			case "3":
				// 返回管理員功能介面
				guanLiYuanGonNengJieMian();
				break;
			default:
				// 退出系統
				return;
			}
		} else {
			for (Dishes d : dm.fenYeXianShi(a)) {
				System.out.println(d);
			}
			System.out.println("=======[1]上一頁=====");
			System.out.println("=======[2]返回上一層=====");
			System.out.println("=======[0]退出系統======");
			String s3 = sc.next();
			switch (s3) {
			case "1":
				// 上一頁
				a--;
				chaKanSuoYoucaiPinXinXi(a);
				break;
			case "2":
				// 返回管理員功能介面
				guanLiYuanGonNengJieMian();
				break;
			default:
				// 退出系統
				return;
			}
		}
	}

	/** 檢視指定類別菜品資訊 */
	public void chaKanZhiDingLeiBieCaiPinXinXi() {
		System.out.println("========檢視指定類別菜品資訊=======");
		System.out.print("菜品類別:");
		String s1 = sc.next();
		if (dm.anLeiBie(s1).size() == 0) {
			System.out.println("=======無該類別菜品======");
		} else {
			for (Dishes d : dm.anLeiBie(s1)) {
				System.out.println(d);
			}
		}
		System.out.println("=======[1]繼續檢視=====");
		System.out.println("=======[2]返回上一層=====");
		System.out.println("=======[0]退出系統======");
		String s2 = sc.next();
		switch (s2) {
		case "1":
			// 繼續檢視
			chaKanZhiDingLeiBieCaiPinXinXi();
			break;
		case "2":
			// 返回管理員功能介面
			guanLiYuanGonNengJieMian();
			break;
		default:
			// 退出系統
			return;
		}
	}

	/** 根據菜品id修改菜品價格 */
	public void genKJuCaiPinIdXiuGaiCaiPinJiage() {
		System.out.println("==========根據菜品id修改菜品價格=========");
		System.out.print("菜品ID:");
		int a = sc.nextInt();
		System.out.print("菜品價格:");
		double d = sc.nextDouble();
		if (dm.xiuGaiJiaGe(a, d)) {
			System.out.println("=======修改成功======");
		} else {
			System.out.println("======修改失敗,無對應菜品=====");
		}
		System.out.println("=======[1]繼續修改=====");
		System.out.println("=======[2]返回上一層=====");
		System.out.println("=======[0]退出系統======");
		String s2 = sc.next();
		switch (s2) {
		case "1":
			// 繼續修改
			genKJuCaiPinIdXiuGaiCaiPinJiage();
			break;
		case "2":
			// 返回管理員功能介面
			guanLiYuanGonNengJieMian();
			break;
		default:
			// 退出系統
			return;
		}
	}

	/** 刪除指定id的菜品 */
	public void shanChuZhiDingIdDeCaiPin() {
		System.out.println("==========刪除指定id的菜品=========");
		System.out.print("菜品ID:");
		int a = sc.nextInt();
		if (dm.delete(a)) {
			System.out.println("=======刪除成功======");
		} else {
			System.out.println("======刪除失敗,無對應菜品=====");
		}
		System.out.println("=======[1]繼續刪除=====");
		System.out.println("=======[2]返回上一層=====");
		System.out.println("=======[0]退出系統======");
		String s2 = sc.next();
		switch (s2) {
		case "1":
			// 繼續刪除
			shanChuZhiDingIdDeCaiPin();
			break;
		case "2":
			// 返回管理員功能介面
			guanLiYuanGonNengJieMian();
			break;
		default:
			// 退出系統
			return;
		}
	}

	/** 新增使用者介面 */
	public void tianJiaYonHuJieMian() {
		System.out.println("======新增使用者介面======");
		System.out.print("名稱:");
		String s1 = sc.next();
		System.out.print("性別:");
		String s2 = sc.next();
		System.out.print("送餐地址:");
		String s3 = sc.next();
		String s4;
		String s5;
		while (true) {
			System.out.print("手機號:");
			s4 = sc.next();
			System.out.print("密碼:");
			s5 = sc.next();
			if (s4.matches("^1[0-9]{10}") && s5.matches("^[1-9a-zA-Z]\\w{5,9}")) {
				break;
			} else {
				System.out.println("手機號或密碼錯誤");
			}
		}
		if (client.insert(new Client(cid, s1, s2, s5, s3, s4))) {
			// 使用者新增成功,cid加一,供下一位使用者建立時使用
			cid++;
			System.out.println("=======新增成功=======");
		} else {
			System.out.println("=======新增失敗=======");
		}
		System.out.println("=======[1]繼續新增====");
		System.out.println("=======[2]返回上一層====");
		System.out.println("=======[0]退出系統=======");
		String s = sc.next();
		switch (s) {
		case "1":
			// 繼續新增
			tianJiaYonHuJieMian();
			break;
		case "2":
			guanLiYuanGonNengJieMian();
			break;
		default:
			// 退出系統
			return;
		}
	}

	/** 檢視客戶列表介面 */
	public void chaKanKeHuLieBiaoJieMian() {
		System.out.println("======所有客戶資訊======");
		int a = 1;
		// 檢視所有客戶資訊(分頁顯示)
		chaKanKeHuLieBiao(a);

	}

	/** 檢視客戶列表 */
	public void chaKanKeHuLieBiao(int a) {
		if (client.fenYeXianShi(a).size() == 0) {
			System.out.println("暫無客戶資訊");
			System.out.println("=======[1]繼續檢視=====");
			System.out.println("=======[2]返回上一層=====");
			System.out.println("=======[0]退出系統======");
			String s3 = sc.next();
			switch (s3) {
			case "1":
				// 繼續檢視
				chaKanKeHuLieBiaoJieMian();
				break;
			case "2":
				// 返回管理員功能介面
				guanLiYuanGonNengJieMian();
				break;
			default:
				// 退出系統
				return;
			}
		} else if (client.fenYeXianShi(a).size() == 5) {
			for (Client d : client.fenYeXianShi(a)) {
				System.out.println(d);
			}
			System.out.println("=======[1]上一頁=====");
			System.out.println("=======[2]下一頁=====");
			System.out.println("=======[3]返回上一層=====");
			System.out.println("=======[0]退出系統======");
			String s3 = sc.next();
			switch (s3) {
			case "1":
				// 上一頁
				a--;
				chaKanKeHuLieBiao(a);
				break;
			case "2":
				// 下一頁
				a++;
				chaKanKeHuLieBiao(a);
				break;
			case "3":
				// 返回管理員功能介面
				guanLiYuanGonNengJieMian();
				break;
			default:
				// 退出系統
				return;
			}
		} else {
			for (Client d : client.fenYeXianShi(a)) {
				System.out.println(d);
			}
			System.out.println("=======[1]上一頁=====");
			System.out.println("=======[2]返回上一層=====");
			System.out.println("=======[0]退出系統======");
			String s3 = sc.next();
			switch (s3) {
			case "1":
				// 上一頁
				a--;
				chaKanKeHuLieBiao(a);
				break;
			case "2":
				// 返回管理員功能介面
				guanLiYuanGonNengJieMian();
				break;
			default:
				// 退出系統
				return;
			}
		}
	}

	/** 刪除指定id的客戶 */
	public void shanChuZhiDingIdDeKeHu() {
		System.out.println("==========刪除指定id的客戶=========");
		System.out.print("客戶ID:");
		int a = sc.nextInt();
		if (client.delete(a)) {
			System.out.println("=======刪除成功======");
		} else {
			System.out.println("======刪除失敗,無對應客戶=====");
		}
		System.out.println("=======[1]繼續刪除=====");
		System.out.println("=======[2]返回上一層=====");
		System.out.println("=======[0]退出系統======");
		String s2 = sc.next();
		switch (s2) {
		case "1":
			// 繼續刪除
			shanChuZhiDingIdDeKeHu();
			break;
		case "2":
			// 返回管理員功能介面
			guanLiYuanGonNengJieMian();
			break;
		default:
			// 退出系統
			return;
		}
	}

	/** 顯示訂單列表介面 */
	public void xianShiDingDanLieBiaoJieMian() {
		System.out.println("======所有訂單資訊======");
		int a = 1;
		// 檢視所有訂單資訊(分頁顯示)
		xianShiDingDanLieBiao(a);

	}

	/** 檢視訂單列表 */
	public void xianShiDingDanLieBiao(int a) {
		if (om.fenYeXianShi(a).size() == 0) {
			System.out.println("暫無訂單資訊");
			System.out.println("=======[1]繼續檢視=====");
			System.out.println("=======[2]返回上一層=====");
			System.out.println("=======[0]退出系統======");
			String s3 = sc.next();
			switch (s3) {
			case "1":
				// 繼續檢視
				xianShiDingDanLieBiaoJieMian();
				break;
			case "2":
				// 返回管理員功能介面
				guanLiYuanGonNengJieMian();
				break;
			default:
				// 退出系統
				return;
			}
		} else if (om.fenYeXianShi(a).size() == 5) {
			for (OrderForm d : om.fenYeXianShi(a)) {
				System.out.println(d);
			}
			System.out.println("=======[1]上一頁=====");
			System.out.println("=======[2]下一頁=====");
			System.out.println("=======[3]返回上一層=====");
			System.out.println("=======[0]退出系統======");
			String s3 = sc.next();
			switch (s3) {
			case "1":
				// 上一頁
				a--;
				xianShiDingDanLieBiao(a);
				break;
			case "2":
				// 下一頁
				a++;
				xianShiDingDanLieBiao(a);
				break;
			case "3":
				// 返回管理員功能介面
				guanLiYuanGonNengJieMian();
				break;
			default:
				// 退出系統
				return;
			}
		} else {
			for (OrderForm d : om.fenYeXianShi(a)) {
				System.out.println(d);
			}
			System.out.println("=======[1]上一頁=====");
			System.out.println("=======[2]返回上一層=====");
			System.out.println("=======[0]退出系統======");
			String s3 = sc.next();
			switch (s3) {
			case "1":
				// 上一頁
				a--;
				xianShiDingDanLieBiao(a);
				break;
			case "2":
				// 返回管理員功能介面
				guanLiYuanGonNengJieMian();
				break;
			default:
				// 退出系統
				return;
			}
		}
	}

	/** 根據訂單id修改訂單狀態 */
	public void genKJuDinDanIdXiuGaiDinDanZhuangTai() {
		System.out.println("==========根據訂單id修改訂單狀態=========");
		System.out.print("訂單ID:");
		int a = sc.nextInt();
		System.out.print("訂單狀態(0:未支付 1:已支付 2:配送中 3:已完成):");
		int d = sc.nextInt();
		if (om.xiuGaiDinDanZhuangTai(a, d)) {
			System.out.println("=======修改成功======");
		} else {
			System.out.println("======修改失敗,無對應訂單=====");
		}
		System.out.println("=======[1]繼續修改=====");
		System.out.println("=======[2]返回上一層=====");
		System.out.println("=======[0]退出系統======");
		String s2 = sc.next();
		switch (s2) {
		case "1":
			// 繼續修改
			genKJuDinDanIdXiuGaiDinDanZhuangTai();
			break;
		case "2":
			// 返回管理員功能介面
			guanLiYuanGonNengJieMian();
			break;
		default:
			// 退出系統
			return;
		}
	}

	/** 顯示所有菜品介面 */
	public void xianShiSuoYoucaiPinJieMian() {
		System.out.println("======所有菜品資訊======");
		int a = 1;
		// 檢視所有菜品資訊(分頁顯示)
		xianShiSuoYoucaiPin(a);

	}

	/** 檢視所有菜品資訊 */
	public void xianShiSuoYoucaiPin(int a) {
		if (dm.fenYeXianShi(a).size() == 0) {
			System.out.println("暫無菜品資訊");
			System.out.println("=======[1]繼續檢視=====");
			System.out.println("=======[2]返回上一層=====");
			System.out.println("=======[0]退出系統======");
			String s3 = sc.next();
			switch (s3) {
			case "1":
				// 繼續檢視
				xianShiSuoYoucaiPinJieMian();
				break;
			case "2":
				// 返回使用者功能介面
				yonHuGonNengJieMian();
				break;
			default:
				// 退出系統
				return;
			}

		} else if (dm.fenYeXianShi(a).size() == 5) {
			for (Dishes d : dm.fenYeXianShi(a)) {
				System.out.println(d);
			}
			System.out.println("=======[1]上一頁=====");
			System.out.println("=======[2]下一頁=====");
			System.out.println("=======[3]返回上一層=====");
			System.out.println("=======[0]退出系統======");
			String s3 = sc.next();
			switch (s3) {
			case "1":
				// 上一頁
				a--;
				xianShiSuoYoucaiPin(a);
				break;
			case "2":
				// 下一頁
				a++;
				xianShiSuoYoucaiPin(a);
				break;
			case "3":
				// 返回使用者功能介面
				yonHuGonNengJieMian();
				break;
			default:
				// 退出系統
				return;
			}
		} else {
			for (Dishes d : dm.fenYeXianShi(a)) {
				System.out.println(d);
			}
			System.out.println("=======[1]上一頁=====");
			System.out.println("=======[2]返回上一層=====");
			System.out.println("=======[0]退出系統======");
			String s3 = sc.next();
			switch (s3) {
			case "1":
				// 上一頁
				a--;
				xianShiSuoYoucaiPin(a);
				break;
			case "2":
				// 返回使用者功能介面
				yonHuGonNengJieMian();
				break;
			default:
				// 退出系統
				return;
			}
		}
	}

	/** 根據菜品類別顯示所有菜品 */
	public void genJuCaiPinLeiBieXianShiSuoYouCaiPin() {
		System.out.println("========檢視指定類別菜品資訊=======");
		System.out.print("菜品類別:");
		String s1 = sc.next();
		if (dm.anLeiBie(s1).size() == 0) {
			System.out.println("=======無該類別菜品======");
		} else {
			for (Dishes d : dm.anLeiBie(s1)) {
				System.out.println(d);
			}
		}
		System.out.println("=======[1]繼續檢視=====");
		System.out.println("=======[2]返回上一層=====");
		System.out.println("=======[0]退出系統======");
		String s2 = sc.next();
		switch (s2) {
		case "1":
			// 繼續檢視
			genJuCaiPinLeiBieXianShiSuoYouCaiPin();
			break;
		case "2":
			// 返回使用者功能介面
			yonHuGonNengJieMian();
			break;
		default:
			// 退出系統
			return;
		}
	}

	/** 點餐介面 */
	public void dianCanJieMian() {
		// 儲存使用者所點菜品的id和購買數
		Map<Integer, Integer> map = new LinkedHashMap<Integer, Integer>();
		// 儲存使用者所點菜品的總價格
		int sum = 0;
		System.out.println("============點餐介面===========");
		s: while (true) {
			System.out.println("菜品id及購買數:");
			// 菜品id
			int a = sc.nextInt();
			// 購買數量
			int b = sc.nextInt();
			if (dm.findById(a) != null) {
				if (dm.findById(a).getDzonShuLiang() < b) {
					b = dm.findById(a).getDzonShuLiang();
				}
				map.put(a, b);
				sum += (dm.findById(a).getDshouJia() * b);
				System.out.println("======[1]繼續點餐=====");
				if (sum != 0) {
					System.out.println("======[2]結算========");
				}
				System.out.println("======[3]返回上一介面========");
				System.out.println("======[0]退出系統========");
				String s1 = sc.next();
				switch (s1) {
				case "1":
					continue s;
				case "2":
					break;
				case "3":
					yonHuGonNengJieMian();
					break;
				default:
					return;
				}
				if (om.insert(new OrderForm(oid, map, ClientManagement.getId(), sum, 0))) {
					oid++;
					dm.findById(a).setDyueXiaoShouLiang(dm.findById(a).getDyueXiaoShouLiang() + b);
					dm.findById(a).setDzonShuLiang(dm.findById(a).getDzonShuLiang() - b);
					System.out.println("=======點餐成功,一共" + sum + "元,請付款=======");
					// 付款
					fuKuan(sum);
					System.out.println("======[1]返回上一介面========");
					System.out.println("======[0]退出系統========");
					String s2 = sc.next();
					switch (s2) {
					case "1":
						yonHuGonNengJieMian();
						break;
					default:
						return;
					}
				}
			} else {
				System.out.println("======[1]繼續點餐=====");
				System.out.println("======[2]返回上一介面========");
				System.out.println("======[0]退出系統========");
				String s1 = sc.next();
				switch (s1) {
				case "1":
					continue s;
				case "2":
					yonHuGonNengJieMian();
					break;
				default:
					return;
				}
			}
		}
	}

	/** 付款 */
	public void fuKuan(int sum) {
		System.out.print("付款:");
		sum -= sc.nextInt();
		if (sum == 0) {
			System.out.println("=======付款成功,請稍等,美食稍後就好=====");
		} else if (sum < 0) {
			System.out.println("==付款成功,找您" + (-sum) + "元===");
		} else {
			System.out.println("===還差" + sum + "元,請繼續付款===");
			fuKuan(sum);
		}
	}

	/** 使用者檢視訂單 */
	public void chaKanDingDan() {
		System.out.println("=====您的訂單如下=====");
		System.out.println(om.yonHuDingDan());
		System.out.println("======[1]繼續檢視========");
		System.out.println("======[2]返回上一介面========");
		System.out.println("======[0]退出系統========");
		String s1 = sc.next();
		switch (s1) {
		case "1":
			chaKanDingDan();
		case "2":
			yonHuGonNengJieMian();
			break;
		default:
			return;
		}
	}

	/** 使用者修改密碼 */
	public void xiuGaiMiMa() {
		System.out.println("=========修改密碼(密碼限制:只能是6-10位的數字或字母,不能0開頭)========");
		System.out.print("新密碼:");
		String s1 = sc.next();
		if (client.xiuGaiMiMa(s1)) {
			System.out.println("=====修改成功,請牢記密碼=====");
		} else {
			System.out.println("=====修改失敗,請注意密碼格式===");
		}
		System.out.println("======[1]繼續修改========");
		System.out.println("======[2]返回上一介面========");
		System.out.println("======[0]退出系統========");
		String s2 = sc.next();
		switch (s2) {
		case "1":
			xiuGaiMiMa();
			break;
		case "2":
			yonHuGonNengJieMian();
			break;
		default:
			return;
		}
	}

	/** 個人資訊顯示 */
	public void geRenXinXiXianShi() {
		System.out.println("=====以下是您的個人資訊=====");
		System.out.println(client.xianShiDangQianYonHu());
		System.out.println("======[1]繼續顯示========");
		System.out.println("======[2]返回上一介面========");
		System.out.println("======[0]退出系統========");
		String s2 = sc.next();
		switch (s2) {
		case "1":
			geRenXinXiXianShi();
			break;
		case "2":
			yonHuGonNengJieMian();
			break;
		default:
			return;
		}
	}
}

測試:

public class Test {

	public static void main(String[] args) {
		Main m = new Main();
		m.shouYeJieMian();
	}

}

相關文章