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;
}
}