?? 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 + -