酒店点单.

import java.awt.*;//布局管理器 字体 颜色
import java.awt.event.*;//事件监听模型
import javax.swing.*;//轻量级组件
import java.net.*;
import java.io.*;
public class LoginFrame{
	JFrame frame;
	JPanel top,center,bottom;

	JLabel lab1,lab2,pic;
	JTextField username,password;
	JButton register,submit,reset;
	JButton[] bts;

	public LoginFrame(){
		frame = new JFrame("易途盛世大酒店 只能点 餐系统 v1.0");
		top = new JPanel(new FlowLayout());//从左到右依次摆放组件
		center = new JPanel(new BorderLayout());//中央一大片 一个小胖子
		bottom = new JPanel(new GridLayout(4,9));

		lab1 = new JLabel("用户名:");
		lab2 = new JLabel("密码:");
		pic = new JLabel(new ImageIcon("img/enter.jpg"));
		username = new JTextField(12);
		password = new JPasswordField(12);
		register = new JButton("注册用户");
		register.addActionListener(new RegisterListener());
		submit = new JButton("提交登录");
		submit.addActionListener(new SubmitListener());

		reset = new JButton("全部重置");
		reset.addActionListener((ae) -> {
			username.setText("");
			password.setText("");
		});

		bts = new JButton[36];
		KeyboardListener kl = new KeyboardListener();
		for(int i = 0;i<bts.length;i++){
			bts[i] = new JButton(String.valueOf(i<10 ? (char)(i+48) : (char)(i+87)));
			bts[i].addActionListener(kl);
			bottom.add(bts[i]);
		}

		center.add(pic);

		top.add(lab1);
		top.add(username);
		top.add(lab2);
		top.add(password);
		top.add(register);
		top.add(submit);
		top.add(reset);

		frame.add(top,"North");
		frame.add(center,"Center");
		frame.add(bottom,"South");

		frame.setSize(800,600);
		frame.setVisible(true);
		frame.setDefaultCloseOperation(3);
	}
	public static void main(String[] args){
		new LoginFrame();
	}

	class RegisterListener implements ActionListener{
		@Override
		public void actionPerformed(ActionEvent ae){
			String name = username.getText();
			String pwd = password.getText();
			if(name.trim().length() == 0 || pwd.trim().length() == 0){
				JOptionPane.showMessageDialog(frame,"手呢?!");
				return;
			}
			Request req = new Request();
			req.setAskNo(1001);
			req.setParameter("username",name);
			req.setParameter("password",pwd);

			System.out.println("注册请求准备连接服务器");
			try{
				Socket skt = new Socket("127.0.0.1",17666);
				OutputStream os = skt.getOutputStream();
				ObjectOutputStream oos = new ObjectOutputStream(os);
				oos.writeObject(req);

				InputStream is = skt.getInputStream();
				ObjectInputStream ois = new ObjectInputStream(is);
				Response res = (Response) ois.readObject();

				ois.close();
				oos.close();
				skt.close();

				int result = res.getResult();
				if(result == 0){
					JOptionPane.showMessageDialog(frame,"注册成功 请尝试登录");
				}else if(result == 1){
					JOptionPane.showMessageDialog(frame,"用户名已经被占用 请更换后重试");
				}else if(result == 7777){
					JOptionPane.showMessageDialog(frame,"请联系ET2302班修复程序~");
				}

			}catch(Exception e){
				e.printStackTrace();
			}
		}
	}
	class SubmitListener implements ActionListener{
		@Override
		public void actionPerformed(ActionEvent ae){
			String name = username.getText();
			String pwd = password.getText();
			if(name.trim().length() == 0 || pwd.trim().length() == 0){
				JOptionPane.showMessageDialog(frame,"手呢?!");
				return;
			}
			Request req = new Request();
			req.setAskNo(1002);
			req.setParameter("username",name);
			req.setParameter("password",pwd);

			System.out.println("登录请求准备连接服务器");

			try{
				Socket skt = new Socket("127.0.0.1",17666);
				ObjectOutputStream oos = new ObjectOutputStream(skt.getOutputStream());
				oos.writeObject(req);
				ObjectInputStream ois = new ObjectInputStream(skt.getInputStream());
				Response res = (Response)ois.readObject();

				ois.close();
				oos.close();
				skt.close();

				int result = res.getResult();
				if(result == 0){
					JOptionPane.showMessageDialog(frame,"登录成功");
					frame.setVisible(false);
					new OrderFrame(name);
				}else if(result == 1){
					JOptionPane.showMessageDialog(frame,"用户名不存在");
				}else if(result == 2){
					JOptionPane.showMessageDialog(frame,"密码错误");
				}
			}catch(Exception e){
				e.printStackTrace();
			}
		}

	}

	class KeyboardListener implements ActionListener{
		@Override
		public void actionPerformed(ActionEvent ae){
			String cmd = ae.getActionCommand();
			String old = password.getText();
			password.setText(old + cmd);
		}
	}
}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.io.*;
import java.net.*;
public class OrderFrame{
	JFrame frame;
	JPanel center,south,east,cc,cs;

	JLabel pic,title,total;
	JButton enter,submit,reset;
	java.awt.List list;

	Map<String,Integer> nameAndPrice = new HashMap<>();

	String current = "大闸蟹";

	int sum;

	String name;

	public OrderFrame(String name)throws Exception{
		this.name = name;
		frame = new JFrame("点餐窗体");
		createMenu();
		center = new JPanel(new BorderLayout());
		south = new JPanel(new FlowLayout());
		east = new JPanel(new BorderLayout());
		cc = new JPanel(new BorderLayout());
		cs = new JPanel(new FlowLayout());

		pic = new JLabel(new ImageIcon("img/大闸蟹.jpg"));
		title = new JLabel("大闸蟹:88元");
		total = new JLabel("当前总共消费:0元");
		enter = new JButton("我要点这道菜");
		enter.addActionListener((ae) -> {
			list.add(current);
			int price = nameAndPrice.get(current);
			sum += price;
			total.setText("当前总共消费:"+sum+" 元");
		});
		submit = new JButton("提交菜单");
		submit.addActionListener((ae) -> {
			try{
				String[] data = list.getItems();
				if(data.length == 0){
					JOptionPane.showMessageDialog(frame,"手呢?");
					return;
				}else if(data.length < 4){
					JOptionPane.showMessageDialog(frame,"寒碜不?");
					return;
				}
				StringBuffer buff = new StringBuffer();
				for(String x : data){
					buff.append(x).append(",");
				}
				String foods = buff.toString();

				Request req = new Request();
				req.setAskNo(1003);
				req.setParameter("username",name);
				req.setParameter("foods",foods);

				Socket skt = new Socket("127.0.0.1",17666);
				ObjectOutputStream oos = new ObjectOutputStream(skt.getOutputStream());
				oos.writeObject(req);
				ObjectInputStream ois = new ObjectInputStream(skt.getInputStream());
				Response res = (Response)ois.readObject();
				ois.close();
				oos.close();
				skt.close();
				int result = res.getResult();
				if(result == 0){
					JOptionPane.showMessageDialog(frame,"点餐成功~再见");
					submit.setEnabled(false);
				}else{
					JOptionPane.showMessageDialog(frame,"点餐失败~再见");
				}


			}catch(Exception e){
				e.printStackTrace();
			}
		});
		reset = new JButton("全部重置");
		reset.addActionListener((ae) -> {
			list.removeAll();//清空列表
			sum = 0;
			total.setText("当前总共消费:0 元");
			submit.setEnabled(true);
		});
		list = new java.awt.List();
		list.setFont(new Font("宋体",1,18));

		cc.add(pic);
		cs.add(title);
		center.add(cc,"Center");
		center.add(cs,"South");

		east.add(list);

		south.add(enter);
		south.add(submit);
		south.add(reset);
		south.add(total);

		frame.add(center,"Center");
		frame.add(east,"East");
		frame.add(south,"South");

		frame.setSize(780,460);
		frame.setVisible(true);
		frame.setDefaultCloseOperation(3);

	}
	public void createMenu()throws Exception{
		FoodListener fl = new FoodListener();
		JMenuBar bar = new JMenuBar();
		//通过配置文件当中的内容 创建菜单和菜单项
		Properties menuPros = new Properties();
		menuPros.load(new FileReader("cfg/config.properties"));
		Set<String> menuNames = menuPros.stringPropertyNames();
		for(String menuName : menuNames){
			JMenu menu = new JMenu(menuName);
			String fileName = menuPros.getProperty(menuName);//lc.properties   yc.properties   cc.properties
			Properties itemPros = new Properties();
			itemPros.load(new FileReader("cfg/"+fileName));
			Set<String> itemNames = itemPros.stringPropertyNames();
			for(String itemName : itemNames){
				JMenuItem mi = new JMenuItem(itemName);
				String str = itemPros.getProperty(itemName);
				int price = Integer.parseInt(str);
				nameAndPrice.put(itemName,price);

				mi.addActionListener(fl);
				menu.add(mi);
			}
			bar.add(menu);
		}
		frame.setJMenuBar(bar);
	}
	public static void main(String[] args)throws Exception{
		new OrderFrame("测试用户");
	}
	class FoodListener implements ActionListener{
		@Override
		public void actionPerformed(ActionEvent ae){
			String cmd = ae.getActionCommand();
			//换图片
			pic.setIcon(new ImageIcon("img/"+cmd+".jpg"));
			int price = nameAndPrice.get(cmd);
			title.setText(cmd+ " : "+price +" 元");

			current = cmd;
		}
	}
}
import java.net.*;
import java.util.concurrent.*;
//大堂经理
public class EtoakServer{
	public static void main(String[] args)throws Exception{
		ExecutorService es = Executors.newFixedThreadPool(5);
		ServerSocket server = new ServerSocket(17666);
		boolean isRunning = true;
		while(isRunning){
			Socket skt = server.accept();
			EtoakThread et = new EtoakThread(skt);
			es.submit(et);
		}
		server.close();
		es.shutdown();
	}
}
import java.io.*;
import java.net.*;
//服务员
public class EtoakThread extends Thread{
	Socket skt;
	public EtoakThread(Socket skt){
		this.skt = skt;
	}
	@Override
	public void run(){
		try{
			InputStream is = skt.getInputStream();
			ObjectInputStream ois = new ObjectInputStream(is);
			Object obj = ois.readObject();
			Request req = (Request)obj;

			EtoakController ec = new EtoakController();
			Response res = ec.work(req);

			OutputStream os = skt.getOutputStream();
			ObjectOutputStream oos = new ObjectOutputStream(os);
			oos.writeObject(res);

			oos.close();
			ois.close();
			skt.close();

		}catch(Exception e){
			e.printStackTrace();
		}
	}
}
//大厨
public class EtoakController{
	EtoakService service = new EtoakService();

	public Response work(Request req){
		Response res = new Response();
		int askNo = req.getAskNo();//1001
		int result = -1;
		if(askNo == 1001){//注册
			String username = req.getParameter("username");
			String password = req.getParameter("password");
			result = service.register(username,password);

		}else if(askNo == 1002){//登录
			String username = req.getParameter("username");
			String password = req.getParameter("password");
			result = service.login(username,password);

		}else if(askNo == 1003){//点菜
			String username = req.getParameter("username");
			String str = req.getParameter("foods");
			String[] foods = str.split(",");
			result = service.createOrder(username,foods);
		}
		res.setResult(result);
		return res;
	}
}
//厨子弟弟 - 由大厨分配给他任务 它完成具体业务逻辑的核心
import java.util.*;
public class EtoakService{
	public int register(String username,String password){
		Map<String,String> map = EtoakFAO.load();
		if(map == null)
			return 7777;
		if(map.containsKey(username))
			return 1;
		map.put(username,password);
		EtoakFAO.save(map);
		return 0;//操作成功了~
	}
	public int login(String username,String password){
		Map<String,String> map = EtoakFAO.load();
		if(map == null)
			return 7777;
		if(!map.containsKey(username))
			return 1;
		String realPassword = map.get(username);
		return realPassword.equals(password.trim()) ? 0 : 2;
	}
	public int createOrder(String username,String[] foods){
		EtoakFAO.saveOrder(username,foods);
		return 0;
	}
}
//FAO = File Access Object = 文件访问对象
//DAO = Data Access Object = 数据访问对象
import java.io.*;
import java.util.*;
import java.text.*;
public class EtoakFAO{//File Access Object

	static File dataFile = new File("users.data");

	public static synchronized void save(Map<String,String> map){
		//将map集合存储到本地磁盘文件当中
		try(ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(dataFile))){
			oos.writeObject(map);
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	public static synchronized Map<String,String> load(){
		//从文件当中读取一个map对象回来
		if(!dataFile.exists())
			return new HashMap<>();

		try(ObjectInputStream ois = new ObjectInputStream(new FileInputStream(dataFile))){
			Object obj = ois.readObject();
			Map<String,String> map = (Map<String,String>)obj;
			return map;
		}catch(Exception e){
			e.printStackTrace();
			return null;
		}

	}


	static{
		File dir = new File("orders");
		if(!dir.exists()){
			dir.mkdirs();
		}
	}

	public static synchronized void saveOrder(String username,String[] foods){
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
		long time = System.currentTimeMillis();
		String fileName = sdf.format(time) + " "+username+".txt";

		File tar = new File("orders",fileName);
		try(PrintWriter pw = new PrintWriter(tar)){
			pw.println(username + " 下单内容如下: " );
			for(String food : foods){
				pw.println("\t" + food);
			}
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}
import java.util.*;
//Request => 请求 : 由前台传给后台的所有数据的载体...
public class Request implements java.io.Serializable{
	private int askNo; //1001=注册 1002=登录 1003=点菜
	public void setAskNo(int askNo){
		this.askNo = askNo;
	}
	public int getAskNo(){
		return askNo;
	}
	private Map<String,String> params = new LinkedHashMap<>();
	public void setParameter(String key,String value){
		params.put(key,value);
	}
	public String getParameter(String key){
		return params.get(key);
	}
}
//Response => 响应 响应代表的是后台返回给前台的所有数据的载体
public class Response implements java.io.Serializable{
	private int result = -1;
	public void setResult(int result){
		this.result = result;
	}
	public int getResult(){
		return result;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jerry鹿17

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值