文档库 最新最全的文档下载
当前位置:文档库 › Java自动售货机

Java自动售货机

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.Toolkit;

public class VendingMachine implements ActionListener {

/**********************************************容器变量的定义********************************************/
JFrame frame ;
JPanel panelMain; //自动售货机的最外面的容器
Box boxControl1;
JPanel panelChooseProduct,panelControl2;
JPanel panelIn[] = new JPanel[9];
JPanel panelInSouth[] = new JPanel[9];
JPanel panelAdvertisement,panelProductout,panelTakeButton,panelTips,panelNull;
JPanel panelInserCoin = new JPanel();

/************************************************Label的定义*********************************************/
JLabel labelPrice[] = new JLabel[9];
JLabel labelAdvertisement,labelProductOut,labelCoinout,labelNull;

/***********************************************按钮变量的定义*******************************************/
JButton buttonProduct[] = new JButton[9]; //buttonProduct[i]用于显示商品图片
JButton buttonTakeProduct,buttonHelp,buttonCopyright,buttonInsertCoin,buttonMoneyBack;
JButton buttonQuit;

/********************************************************************************************************/
JTextField textMoneyDisplay; //金额显示
int storage[] = {4,4,4,4,4,4,4,4,4}; //库存量定义,每个商品的初始库存量为4
int price[] = {1,4,3,2,3,4,2,2,2}; //商品价格定义
int amount,errorcount,occupy;
ImageIcon productImage[] = new ImageIcon[9]; //productImage[]为装商品图片对象的数组
ImageIcon imageBegin,imageCoinin,imageCoinout;
ImageIcon imageNull; //imageNull为售罄后显示的图片
ImageIcon adImage; //adImage[]为装广告图片对象的数组
Timer timer; //限时操作计时器
int ptr = 0;
int ptr2 = 0;

/********************************************************************************************************
初始化函数
构建图形用户界面
********************************************************************************************************/
public VendingMachine()
{
/***************************************************************************
商品选购区界面设计
panelChooseProduct为内置商品子容器panelIn[]的中间容器
panelIn[]内含商品图片,价格
****************************************************************************/
panelChooseProduct = new JPanel(new GridLayout(3,3,5,5));
productImage[0] = new ImageIcon("image/11.jpg");
productImage[1] = new ImageIcon("image/12.jpg");
productImage[2] = new ImageIcon("image/13.jpg");
productImage[3] = new ImageIcon("image/14.jpg");


productImage[4] = new ImageIcon("image/15.jpg");
productImage[5] = new ImageIcon("image/16.jpg");
productImage[6] = new ImageIcon("image/17.jpg");
productImage[7] = new ImageIcon("image/18.jpg");
productImage[8] = new ImageIcon("image/19.jpg");

for(int i = 0;i<9;i++)
{
labelPrice[i] = new JLabel("¥"+String.valueOf(price[i])+".0"); //labelPrice[i]用与标记商品价格
buttonProduct[i] = new JButton(productImage[i]); //buttonProduct[i]用于显示商品图片
buttonProduct[i].addActionListener(this);
buttonProduct[i].setBorder( BorderFactory.createLoweredBevelBorder());
panelInSouth[i] = new JPanel();
panelInSouth[i].add(labelPrice[i]);
panelInSouth[i].setBorder( BorderFactory.createRaisedBevelBorder());
panelIn[i] = new JPanel(new BorderLayout()); //panelIn[]为panelChooseProduct内部子panel
panelIn[i].add(buttonProduct[i],BorderLayout.CENTER);
panelIn[i].add(panelInSouth[i],BorderLayout.SOUTH);
panelChooseProduct.add(panelIn[i]);
panelInSouth[i].setBackground(Color.GRAY);
}
panelChooseProduct.setBorder( BorderFactory.createRaisedBevelBorder());
imageNull = new ImageIcon("image/null.JPG"); //imageNull为售罄后显示的图片

/*************************************************************************
控制区一界面设计
boxControl1内含图像区labelAdvertisement,金额显示框textMoneyDisplay,
取货口panelProductout以及声明帮助和退出按钮
**************************************************************************/
buttonHelp=new JButton("帮助");
buttonHelp.addActionListener(this);
buttonCopyright=new JButton("声明");
buttonCopyright.addActionListener(this);
buttonQuit = new JButton("退出");
buttonQuit.addActionListener(this);
panelTips=new JPanel();
panelTips.add(buttonHelp);
panelTips.add(buttonCopyright);
panelTips.add(buttonQuit);
imageBegin = new ImageIcon("image/begin.gif"); //imageBegin为初始图片
labelProductOut=new JLabel(imageBegin); //labelProductOut为取货口显示购买商品图片
labelProductOut.setBorder( BorderFactory.createLoweredBevelBorder());
buttonTakeProduct = new JButton("取货"); //buttonTakeProduct为取货按钮
buttonTakeProduct.addActionListener(this);
panelProductout=new JPanel();
panelProductout.add(labelProductOut);
panelTakeButton=new JPanel();
panelTakeButton.add(buttonTakeProduct);
textMoneyDisplay=new JTextField("欢迎使用!请投币");//textMoneyDisplay为显示剩余金额的文本框
textMoneyDisplay.setEditable(false);
Font mf=new Font("欢迎使用!请投币",Font.ITALIC,20);

textMoneyDisplay.setFont(mf);
textMoneyDisplay.setBackground(new Color(205,209,250));
textMoneyDisplay.setBorder( BorderFactory.createLoweredBevelBorder());
textMoneyDisplay.setHorizontalAlignment(SwingConstants.CENTER);
textMoneyDisplay.setColumns(10);

adImage = new ImageIcon("image/000.gif");
labelAdvertisement = new JLabel(adImage);//labelAdvertisement显示广告图片内容

panelAdvertisement = new JPanel();
panelAdvertisement.setBorder( BorderFactory.createLoweredBevelBorder());
panelAdvertisement.add(labelAdvertisement);
boxControl1=Box.createVerticalBox();//boxControl1为内置panelProductout,
boxControl1.add(panelAdvertisement);
boxControl1.add(Box.createVerticalStrut(10));
boxControl1.add(textMoneyDisplay);
boxControl1.add(Box.createVerticalStrut(30));
boxControl1.add(panelProductout);
boxControl1.add(panelTakeButton);
boxControl1.add(Box.createVerticalStrut(50));
boxControl1.add(panelTips);

/*************************************************************************
控制区二界面设计
panelControl2包含投币退币按钮 buttonInsertCoin,buttonMoneyBack
**************************************************************************/
imageCoinin=new ImageIcon("image/01.jpg"); //labelCoinout投币口图像对象
imageCoinout=new ImageIcon("image/1.jpg");
labelNull=new JLabel(" ");
labelCoinout=new JLabel(imageCoinout);
buttonInsertCoin = new JButton(imageCoinin);
buttonInsertCoin.addActionListener(this);
buttonMoneyBack=new JButton("退币");
buttonMoneyBack.addActionListener(this);
panelControl2=new JPanel();
BorderLayout bor= new BorderLayout(15,150);
panelControl2.setLayout(bor);
panelControl2.add(buttonInsertCoin,BorderLayout.NORTH);
panelControl2.add(buttonMoneyBack,BorderLayout.CENTER);
panelControl2.add(labelCoinout,BorderLayout.SOUTH);

/*****************************************
界面总体设计
******************************************/
frame = new JFrame("VENDINGMACHINE自动售货机");
panelMain = new JPanel();
panelNull=new JPanel(); //空 panel用于调整布局
panelNull.add(labelNull);
panelMain.add(panelChooseProduct);
panelMain.add(boxControl1);
panelMain.add(panelNull);
panelMain.add(panelControl2);
frame.add(panelMain);
frame.setBounds(50, 10,800,670); //设置边框
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
timer = new Timer(2000,this); //timer为超时提示计时器
}


/********************************************************
投币方法inserCoin(),点击投币按钮一次,表示投

入一元,
并且在金额显示屏上显示出当前投入的总金额
*********************************************************/
public void inserCoin(){
amount++;
textMoneyDisplay.setText("总金额:¥"+String.valueOf(amount)+".0");
}

/*************************************************************
退币方法returnCoin()
错误提示次数清零
时间计时清零
总金额清零,金额显示屏重新置为开始状态“欢迎使用 请投币”
**************************************************************/
public void returnCoin(){
errorcount = 0;
amount = 0;
ptr2 = 0; // 时间计时清零
timer.stop();
textMoneyDisplay.setText("欢迎使用!请投币");
Toolkit.getDefaultToolkit().beep(); //捕获系统声音,提示用户硬币已经退出
}

/*************************************************************
取货方法takeProduct()
标志位减1清零,表示此时窗口货物已取走
时间计时清零
*************************************************************/
public void takeProduct(){
occupy--; //标志位减1清零,表示此时窗口货物已取走
ptr2 = 0; //时间计时清零
labelProductOut.setIcon(imageBegin); //取货窗口为空,换为初始图片
}


/**************************************************************************
购买商品的方法purchase( int i),i为int型输入参数其为购买相应商品数组的下标
如果取货口已经满则提示用户取货后再购买
判断用户投放的金额是否大于商品价格并且库存量是否足够,是则购买成功
如果库存量不足,购买按钮变红,表示商品不足,同时窗口出现商品不足的标签提示
错误操作次数超过三次(包括三次),系统自动退币,对话框提示5
*************************************************************************/
public void purchase( int i){
if(occupy==1)//如果取货口已经满则提示用户取货后再购买
{
ptr2 = 0;//时间计时清零
String occupied="错误3";
Toolkit.getDefaultToolkit().beep();
dialog(occupied);

}
else if(amount >= price[i] && storage[i] > 0)
{
ptr2 = 0;
if(occupy==0)//在取货口出现用户购买的商品
{
labelProductOut.setIcon(productImage[i]);
occupy++;
}
amount -= price[i]; //金额减少
textMoneyDisplay.setText("总金额:¥"+String.valueOf(amount)+".0");
storage[i] --; //库存量减少
if(storage[i] == 0)
{
buttonProduct[i].setBackground(Color.red);
buttonProduct[i].setIcon(imageNull);
}
errorcount = 0; //错误操作次数

清零
}
else if(amount < price[i])
{ //金额不足的情况
errorcount ++;
if(errorcount >= 3){ //错误操作次数超过三次(包括三次),系统自动退币,对话框提示
returnCoin();
JOptionPane.showMessageDialog(null,"您连续错误操作三次,系统自动退币!注意取币","WARNING",JOptionPane.WARNING_MESSAGE);
}
else{ //提示金额不足
Toolkit.getDefaultToolkit().beep(); //发出系统声音提示
String moneyShortage= "错误1"; //对话框提示
dialog(moneyShortage);
}

}
else{ //连续错误操作三次,系统将自动退币
errorcount ++;
if(errorcount >= 3){
returnCoin();
JOptionPane.showMessageDialog(null,"您连续错误操作三次,系统自动退币!注意取币","WARNING",JOptionPane.WARNING_MESSAGE);
}
else{
String storageShortage = "错误2";
Toolkit.getDefaultToolkit().beep();
dialog(storageShortage);
}

}
}

/*********************************************************************
提示对话框方法dialog(String s1)
s1为输入参数,以弹出相对应的dialog
**********************************************************************/
public void dialog(String s1) //提示对话框方法
{
if(s1=="帮助") //用户点击“帮助”按钮,弹出帮助提示对话框
{ String help="欢迎使用本自动售货机!请您按照以下步骤购买您所需的商品:\n" +//帮助提示内容
" 1.在右上角投币口投入硬币;\n" +
" 2.选择好您购买的商品后,按下购买键;\n" +
" 3.您可以在金额充足的情况下连续购买商品,也可以在续投硬币后继续购买商品; \n" +
" 4.请及时取走窗口货物以免影响您的正常使用; \n" +
" 5.购买商品后,请取走余额。 \n" +
"【注意】 请按照系统提示进行操作。";
JOptionPane.showMessageDialog(null,help,"帮助",https://www.wendangku.net/doc/ab15153642.html,RMATION_MESSAGE);
}
if(s1=="声明") //用户点击“声明”按钮,弹出声明声明对话框
{
String copyright="如果你喜欢本程序,请加入QQ群进行经验交流!";//声明内容
JOptionPane.showMessageDialog(null,copyright,"声明",https://www.wendangku.net/doc/ab15153642.html,RMATION_MESSAGE);
}
if(s1=="错误1") //金额不足提示
{
String error1=" 您的余额不足,请续投币后再继续使用!";
JOptionPane.showMessageDialog(null,error1,"提示",JOptionPane.WARNING_MESSAGE);
}
if(s1=="错误2") //缺货提示
{
String error2=" 该商品已售罄,请您改天再来购买!";
JOptionPane.showMessageDialog(null,error2,"提示",JOptionPane.WARNING_MESSAGE);
}
if(s1=="错误3") //取货提示
{
String error3=" 请取走窗口内货物后再购买!";
JOp

tionPane.showMessageDialog(null,error3,"提示",JOptionPane.WARNING_MESSAGE);
}
}

/**********************************************************************************
接口实现的方法actionPerformed(ActionEvent e)监听用户动作
根据不同的事件触发源采取相对应的操作
**********************************************************************************/
public void actionPerformed(ActionEvent e) {
if(e.getSource() == timer ){ //对用户长时间未作出有效动作,作出警告提示
ptr2++;
if(ptr2 == 10){
Toolkit.getDefaultToolkit().beep();
JOptionPane.showMessageDialog(null, "操作超时,系统已退币", "警告", JOptionPane.WARNING_MESSAGE);
returnCoin();
}

}
if(e.getSource() == buttonInsertCoin){ //用户点击投币口投币操作
inserCoin();
timer.start(); //开始计时,
ptr2 = 0; //标志位清零
}
if(e.getSource() == buttonMoneyBack){ //用户退币操作
returnCoin();
JOptionPane.showMessageDialog(null," 请 取 币!","提示",JOptionPane.WARNING_MESSAGE);//提示用户取币
}
if(e.getSource() == buttonTakeProduct){ //用户取货操作
if(occupy==0){
Toolkit.getDefaultToolkit().beep();
JOptionPane.showMessageDialog(null," 没有商品可取!","提示",JOptionPane.WARNING_MESSAGE);//提示用户该窗口无货物
ptr2 = 0;
}
else
takeProduct();
}
if(e.getSource() == buttonHelp){ //帮助操作
String help = "帮助";
dialog(help);
}
if(e.getSource() == buttonCopyright){ //版权声明
String copyright = "声明";
dialog(copyright);
}
if(e.getSource() == buttonQuit){ //退出系统
JOptionPane.showMessageDialog(null, "欢迎下次使用!", "欢迎下次使用", https://www.wendangku.net/doc/ab15153642.html,RMATION_MESSAGE);
System.exit(0);
}

for(int i = 0;i<9;i++){ //判断用户购买哪个商品
if(e.getSource() == buttonProduct[i])
{
purchase(i); //用户购买第i个商品

}
}

}

/****************************************************************************************************************************
主函数运行
****************************************************************************************************************************/
public static void main (String[] args){
JOptionPane.showMessageDialog(null, "欢迎使用自动售货机, 第一次使用强烈建议您先阅读帮助!","欢迎光临" ,https://www.wendangku.net/doc/ab15153642.html,RMATION_MESSAGE);//弹出对话框提示欢迎用户进入界面
new VendingMachine();
}
}

相关文档
相关文档 最新文档