📄 haircutshopmanage.java
字号:
import java.io.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
import java.util.Date;
public class HaircutShopManage extends JFrame
{
private Action loadAction,//打开文件:打开以前某一天的经营资料。
saveAction,//保存文件:保存当天的经营情况(营业结束)
saveTempFileAcition,//保存临时文件:备份当前的工作状态(防止计算机忽然死机等突发事件)
saveAsTempFileAcition,//另存为:将临时文件另存
loadTempFileAction,//打开临时文件:恢复当前的工作状态
exitAction,//退出
newDayAction,//新的一天:初始化当天的理发店基本资料数据:每一种级别的收费标准
endWorkAction,//营业时间到:声明营业时间到
barbercCheckInAction,//理发师报到:输入理发师的编号及报到时间
barberLeaveAction,//理发师离开:输入理发师的编号及离开时间
newbuyerAction,//新顾客:输入顾客对理发师级别的选择,以及进来时间
buyerLeaveWithCheckOutAction,//顾客结帐离开:输入顾客结帐离开时间
buyerBeginHaitcutAction,//顾客开始理发:输入理发师编号
buyerAdvaceMoveAction,//顾客提前离去:输入顾客所选择的级别,及当前在队列中的位置
buyerChangeSelectAction,//顾客更改选择:输入顾客以往的选择及在队列中的位置,再输入顾客新的选择
averageStayTimeAction,//平均逗留时间
averageQueueLengthTimeAction,//队列长度平均值
endingWorkTimeAction,//收尾工作时间
incomeAction,//营业额
levelIncomeAction,//各级理发师创收
specialTimeSectAction,//特定时间段
inputBarberDataAction,//理发师资料输入
queryBarberDataAction,//理发师资料查询
amendBarberDataAction,//理发师资料修改
helpAction,//帮助
aboutAction;//关于
private JMenuBar menuBar;//菜单条
private double queueLength,//队列总长度
stayTime,//逗留时间
leaveNumber;//离开人数
private boolean isEndWork;//营业时间是否结束
private HaircutShop haircutShop;//理发店数据
private DateData dateData;//当天的经营数据
private CurBarber curBarber;
/**
*得到一个理发师的简短表述
*/
class CurBarber
{
int id;
int level;//从0开始
String name;
int index;//在级别向量中的下标
Barber barber;//当前理发师对象的引用
public CurBarber(int id,int level,String name,int index,Barber barber)
{
this.id=id;
this.level=level;
this.name=name;
this.index=index;
this.barber=barber;
}
}
/**
*主函数
*/
public static void main(String argx[])
{
HaircutShop h=new HaircutShop(3);
new HaircutShopManage(h);
}
/**
*构造方法
*/
public HaircutShopManage(HaircutShop h)
{
setTitle("理发店管理软件");
menuBar=new JMenuBar();
setJMenuBar(menuBar);
addMenuBar();
haircutShop=h;
dateData=new DateData(haircutShop);
isEndWork=false;
addInterface();
this.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
checkForSave();
c.stop();
setVisible(false);
dispose();
}
});
pack();
setResizable(false);
setVisible(true);
}
private BarberIcon barberIcon[][];
private JPanel b[],panel,pw,datePanel;
private LevelIcon levelButton[];//级别图标
private JLabel averageStayTimeLabel,//平均逗留时间
averageQueueLengthTimeLabel,//队列长度平均值
incomeLabel,//当前总营业额
fluxLabel,//当前客流总量
hoLabel,miLabel,aoLabel;//时分秒
private JTextField averageStayTimeText,//平均逗留时间
averageQueueLengthTimeText,//队列长度平均值
incomeText,//当前总营业额
fluxText,//当前客流总量
hoText,miText,aoText;//时分秒
private ColckThread c;
/**
*加界面组件
*/
public void addInterface()
{
int k=haircutShop.levelBarber.length;
datePanel=new JPanel(new GridLayout(6,1));
Date d=new Date();
hoLabel=new JLabel("时");
hoText=new JTextField(""+d.getHours());
miLabel=new JLabel("分");
miText=new JTextField(""+d.getHours());
aoLabel=new JLabel("秒");
aoText=new JTextField(""+d.getHours());
aoText.setEnabled(false);
hoText.setEnabled(false);
miText.setEnabled(false);
averageStayTimeLabel=new JLabel("平均逗留时间");
averageStayTimeText=new JTextField(""+dateData.averageStayTime);
averageStayTimeText.setEnabled(false);
averageQueueLengthTimeLabel=new JLabel("队列长度平均值");
averageQueueLengthTimeText=new JTextField(""+dateData.averageQueueLength);
averageQueueLengthTimeText.setEnabled(false);
incomeLabel=new JLabel("当前总营业额");
incomeText=new JTextField(""+dateData.income);
incomeText.setEnabled(false);
fluxLabel=new JLabel("当前客流总量");
fluxText=new JTextField(""+dateData.flux);
fluxText.setEnabled(false);
pw=new JPanel(new GridLayout(14,1));
pw.add(averageStayTimeLabel);
pw.add(averageStayTimeText);
pw.add(averageQueueLengthTimeLabel);
pw.add(averageQueueLengthTimeText);
pw.add(incomeLabel);
pw.add(incomeText);
pw.add(fluxLabel);
pw.add(fluxText);
pw.add(hoLabel);
pw.add(hoText);
pw.add(miLabel);
pw.add(miText);
pw.add(aoLabel);
pw.add(aoText);
panel=new JPanel(new GridLayout(k,1));
barberIcon=new BarberIcon[k][];
b=new JPanel[k];
levelButton=new LevelIcon[k];
for(int i=0;i<k;i++)
{
levelButton[i]=new LevelIcon(i);
b[i]=new JPanel(new FlowLayout(FlowLayout.LEFT));
b[i].add(levelButton[i]);
int j=haircutShop.levelLength[i];
barberIcon[i]=new BarberIcon[j];
for(int u=0;u<j;u++)
{
barberIcon[i][u]=new BarberIcon((Barber)(haircutShop.levelBarber[i].get(u)),i);
b[i].add(barberIcon[i][u]);
}
panel.add(b[i]);
}
c=new ColckThread();
c.start();
getContentPane().add(panel,BorderLayout.CENTER);
getContentPane().add(pw,BorderLayout.EAST);
}
/**
*实现界面上时钟的功能
*/
class ColckThread extends Thread
{
public void run()
{
for(;;)
{
Date d=new Date();
hoText.setText(""+d.getHours());
miText.setText(""+d.getMinutes());
aoText.setText(""+d.getSeconds());
setTitle("当前时间为"+d.toLocaleString());
try
{
sleep(1000);
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}
}
/**
*加菜单选项
*/
public void addMenuBar()
{
JMenu fileMenu=new JMenu("文件(F)");
fileMenu.add(setMnemonic('F');
JMenu workMenu=new JMenu("工作(W)");
workMenu.setMnemonic('W');
JMenu queryMenu=new JMenu("查询(Q)");
queryMenu.setMnemonic('Q');
JMenu barberManageMenu=new JMenu("理发师管理(B)");
barberManageMenu.setMnemonic('B');
JMenu helpMenu=new JMenu("帮助(H)");
helpMenu.setMnemonic('H');
JMenuItem item;
/**
*加文件菜单
*/
fileMenu.add(loadAction=new FileAction("打开文件","打开以前的经营状态"));
fileMenu.add(saveAction=new FileAction("保存文件","保存当天的经营情况"));
item=fileMenu.add(saveTempFileAcition=new FileAction("保存临时文件","备份当前的工作状态"));
saveTempFileAcition.setEnabled(false);
item.setAccelerator(KeyStroke.getKeyStroke('S',Event.CTRL_MASK));
fileMenu.add(saveAsTempFileAcition=new FileAction("另存为","另存临时文件"));
item=fileMenu.add(loadTempFileAction=new FileAction("打开临时文件","恢复当前的工作状态"));
item.setAccelerator(KeyStroke.getKeyStroke('O',Event.CTRL_MASK));
fileMenu.add(exitAction=new FileAction("退出",null));
menuBar.add(fileMenu);
/**
*加工作菜单
*/
item=workMenu.add(newDayAction=new WorkAction("新的一天","新的一天"));
item.setAccelerator(KeyStroke.getKeyStroke('N',Event.CTRL_MASK));
item=workMenu.add(endWorkAction=new WorkAction("营业时间到","营业时间到"));
item.setAccelerator(KeyStroke.getKeyStroke('Q',Event.CTRL_MASK));
item=workMenu.add(barbercCheckInAction=new WorkAction("理发师报到","理发师报到"));
item.setAccelerator(KeyStroke.getKeyStroke('I',Event.CTRL_MASK));
item=workMenu.add(barberLeaveAction=new WorkAction("理发师离开","理发师离开"));
item.setAccelerator(KeyStroke.getKeyStroke('L',Event.CTRL_MASK));
item=workMenu.add(newbuyerAction=new WorkAction("新顾客","新顾客"));
item.setAccelerator(KeyStroke.getKeyStroke('B',Event.CTRL_MASK));
item=workMenu.add(buyerLeaveWithCheckOutAction=new WorkAction("顾客结帐离开","顾客结帐离开"));
item.setAccelerator(KeyStroke.getKeyStroke('W',Event.CTRL_MASK));
item=workMenu.add(buyerBeginHaitcutAction=new WorkAction("顾客开始理发","顾客开始理发"));
item.setAccelerator(KeyStroke.getKeyStroke('E',Event.CTRL_MASK));
item=workMenu.add(buyerAdvaceMoveAction=new WorkAction("顾客提前离去","顾客提前离去"));
item.setAccelerator(KeyStroke.getKeyStroke('M',Event.CTRL_MASK));
item=workMenu.add(buyerChangeSelectAction=new WorkAction("顾客更改选择","顾客更改选择"));
item.setAccelerator(KeyStroke.getKeyStroke('H',Event.CTRL_MASK));
menuBar.add(workMenu);
/**
*加查询菜单
*/
queryMenu.add(averageStayTimeAction=new QueryAction("平均逗留时间","平均逗留时间"));
queryMenu.add(averageQueueLengthTimeAction=new QueryAction("队列长度平均值","队列长度平均值"));
queryMenu.add(endingWorkTimeAction=new QueryAction("收尾工作时间","收尾工作时间"));
queryMenu.add(incomeAction=new QueryAction("营业额","营业额"));
queryMenu.add(levelIncomeAction=new QueryAction("各级理发师创收","各级理发师创收")); queryMenu.add(specialTimeSectAction=new QueryAction("特定时间段","特定时间段"));
menuBar.add(queryMenu);
/**
*加理发师管理菜单
*/
barberManageMenu.add(inputBarberDataAction=new BarberManageAction("理发师资料输入","理发师资料输入"));
barberManageMenu.add(queryBarberDataAction=new BarberManageAction("理发师资料查询","理发师资料查询"));
barberManageMenu.add(amendBarberDataAction=new BarberManageAction("理发师资料修改","理发师资料修改"));
menuBar.add(barberManageMenu);
/**
*加帮助菜单
*/
helpMenu.add(helpAction=new HelpAction("帮助","帮助"));
helpMenu.add(aboutAction=new HelpAction("关于","关于"));
menuBar.add(helpMenu);
}
/**
*文件事件处理
*/
class FileAction extends AbstractAction
{
public FileAction(String name,String tooltip)
{
super(name);
if(tooltip!=null)
putValue(SHORT_DESCRIPTION,tooltip);
}
public void actionPerformed(ActionEvent e)
{
if("保存临时文件".equals(getValue(NAME)))
saveTempFile();
else if("另存为".equals(getValue(NAME)))
saveAsTempFile();
else if("打开临时文件".equals(getValue(NAME)))
loadTempFile();
else if("退出".equals(getValue(NAME)))
{
checkForSave();
c.stop();
HaircutShopManage.this.setVisible(false);
HaircutShopManage.this.dispose();
}
else if("打开文件".equals(getValue(NAME)))
{
new OpenFileDialog();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -