前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >使用Java带你打造一款简单的外卖系统

使用Java带你打造一款简单的外卖系统

作者头像
用户7466307
发布于 2020-06-16 12:15:37
发布于 2020-06-16 12:15:37
94200
代码可运行
举报
运行总次数:0
代码可运行

【一、项目背景】

随着互联网时代的快速发展,便捷人民的生活,提高生活质量,外卖系统应运而生。

人们也喜欢享受着“足不出户,美食到家”的待遇,促使网上订餐行业快速发展。

【二、项目目标】

1. 设计一款应用程序-外卖系统,有文字和图片显示,通过选择一种或多种食物,每种食物可以选择一份或多份,点击结算后,进行总价的统计。

2. 实现标题文字滚动和颜色定时变化。

3. 实现消费多少钱免配送费以及消费多少钱满减。

【三、项目实施】

使用eclipse软件开发,先上效果图,如下图所示。

可以看到在界面上有文字和图片显示,通过选择一种或多种食物,每种食物可以选择一份或多份,结算功能,标题文字滚动加颜色变化的功能。

接下来,小编带大家进行具体的实现,具体的实现步骤如下。

【四、实现步骤】

一、首先实现外卖系统购物车的窗口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static void main(String[] args) {
    // TODO Auto-generated method stub
        Takeout t = new Takeout();
        t.setTitle("饶洋外卖");
        t.setSize(720,550);
        t.setVisible(true);
}

使用new关键字创建Takeout类;

setTitle表示设置界面的标题;

setSize(宽,高)表示窗体大小;

setVisible(true或false)表示窗体是否可见;

二、添加文字实现

1. 使用到组件有JPanel、JLabel;

2. 添加Takeout类的成员变量;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Takeout extends JFrame {
  //成员变量
      private JPanel panel01 = new JPanel();
private JLabel label01 = new JLabel("欢迎来到饶洋外卖系统!");

3. 添加文字说明;

Takeout类构造函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Takeout(){
      label01.setFont(new Font("黑体",Font.PLAIN,30));
      label01.setForeground(Color.BLUE);
       panel01.add(label01);
      panel01.setOpaque(false);//设置透明
      this.setLayout(new BorderLayout());
      this.add(panel01,BorderLayout.NORTH);
      this.getContentPane().setBackground(c);

4. 文字(label01)设置显示效果

1) setFont(newFont(String 字体,int 风格,int 字号));

字体:TimesRoman, Courier, Arial等; 风格:三个常量 lFont.PLAIN, Font.BOLD, Font.ITALIC; 字号:字的大小(磅数);

2) setForegound设置前景色;

3) setOpaque设置控件透明(ture或false);

4) 布局管理器之BorderLayout(边界布局);

边界布局管理器把容器的的布局分为五个位置:CENTER、EAST、WEST、NORTH、SOUTH。依次相应为:上北(NORTH)、下南(SOUTH)、左西(WEST)、右东(EAST),中(CENTER)。

5. 边界布局特征

1) 能够把组件放在这五个位置的随意一个,假设未指定位置,则缺省的位置是CENTER。

2) 南、北位置控件各占领一行,控件宽度将自己主动布满整行。东、西和中间位置占领一行;若东、西、南、北位置无控件,则中间控件将自己主动布满整个屏幕。若东、西、南、北位置中不管哪个位置没有控件,则中间位置控件将自己主动占领没有控件的位置。

3) 它是窗体、框架的内容窗格和对话框等的缺省布局。

6. getContentPane.setBackground(c)初始化一个容器,设置背景RGB颜色需要在成员变量定义

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private Color c = new Color(197,228,251);

三、添加食物文字、数量(按钮)和图片

需要添加JPanel、 JCheckBox、 JButton 、JLabel等。

1. 添加Takeout类的成员变量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private JPanel panel02 = new JPanel();
   private JCheckBox check[] = new JCheckBox[9];//文字(多选框)
   private JButton amount[] = new JButton[9];//数量(按钮)
   private JLabel food[] = new JLabel[9];//食物图片
   private int num[]=new int[9];//数量数组

2. 在Takeout类的构造函数设置组件的属性

参考代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Takeout(){
  ……
    check[0]=new JCheckBox("  雪糕    3.0元",false);
    check[1]=new JCheckBox("  薯条    6.0元",false);
    check[2]=new JCheckBox("爆米花  8.0元",false);
    check[3]=new JCheckBox("  热狗  10.0元",false);
    check[4]=new JCheckBox("汉堡包11.0元",false);
    check[5]=new JCheckBox("巨无霸16.0元",false);
    check[6]=new JCheckBox("  可乐    6.0元",false);
    check[7]=new JCheckBox("  果汁    8.0元",false);
check[8]=new JCheckBox("  啤酒    6.0元",false);
for(int i=0;i<9;i++){
      amount[i]=new JButton("1份");
      food[i]=new JLabel(new         ImageIcon("image//food"+(i+1)+".jpg"));
      check[i].setOpaque(false);
      panel02.add(check[i]);
      panel02.add(amount[i]);
      panel02.add(food[i]);
      num[i]=1;
      
      amount[i].addActionListener(my);
      
      }
      panel02.setOpaque(false);
    this.add(panel02,BorderLayout.CENTER);

四、添加状态信息:JTextArea等

1. 添加Takeout类的成员变量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private JTextArea list=new JTextArea(10,20);
private String str="";

2. 在Takeout类的构造函数设置组件的属性

参考代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Takeout(){
  ……
list.setText("状态:未选餐!");
      list.setBackground(c);
    panel02.add(list);

五、添加按钮和总价框:JPanel、 JButton、JLabel、JTextField等

1. 添加Takeout类的成员变量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private JPanel panel03=new JPanel();
     private JButton btn_ok = new JButton("结算");
     private JButton btn_cancel = new JButton("清空");
     private JLabel label02 = new JLabel("总价:");
     private JTextField text01 = new JTextField(10);
     private double a[]=new double[9];//食物单价
     private double total=0;//总价

2. 在Takeout类的构造函数设置组件的属性

参考代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Takeout(){
  ……
    panel03.add(btn_ok);
    panel03.add(btn_cancel);
    panel03.add(label02);
    panel03.add(text01);
    panel03.add(label03);
    this.add(panel03,BorderLayout.SOUTH);
    panel03.setOpaque(false);
    
    a[0]=3.0;
    a[1]=6.0;
    a[2]=8.0;
    a[3]=10.0;
    a[4]=11.0;
    a[5]=16.0;
    a[6]=6.0;
    a[7]=8.0;
    a[8]=6.0;

六、事件处理

定义事件处理类,实现事件监听器

1. 在成员变量添加

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private MyListener my = new MyListener();

2. 在Takeout()内添加

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 btn_ok.addActionListener(my);
 btn_cancel.addActionListener(my);

3. 添加事件监听器MyListener(自己命名)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

private class MyListener implements ActionListener{

    @Override
    public void actionPerformed(ActionEvent e) {
      // TODO Auto-generated method stub
      //添加事件处理代码
            for(int i=0;i<9;i++){
              if(e.getSource()==amount[i]){
                if(num[i]<9)
                  num[i]++;
                else
                  num[i]=0;
                amount[i].setText(num[i]+"份");
              }
            }
            if(e.getSource()==btn_ok){
              total=0;
              str="";
              for(int i=0;i<9;i++){
                if(check[i].isSelected()==true){
                  total=total+a[i]*num[i];
                  str=str+check[i].getText()+"    "+amount[i].getText()+"\n";
                }
              }              
              text01.setText(""+total);
              list.setText("状态:已选餐:\n"+str+"\n");
            }

以上e.getSource()==btn_ok代码完成结算功能。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if(e.getSource()==btn_cancel){
              for(int i=0;i<9;i++){
                check[i].setSelected(false);
                amount[i].setSelected(false);
                num[i]=1;
                amount[i].setText(num[i]+"份");
              }
              total=0;
              str="";
              text01.setText(""+total);
              list.setText("状态:未选餐!");
              
              label03.setText("满30免费配送,满100立减10");
            }

以上e.getSource()==btn_cancel代码完成清空功能。

【五、思考题1】

现在外卖系统商家因业务需求,每一订单需要配送费5元,在活动期间,购满30元免配送费,满100元立减10元,程序应如何修改?

1. 在成员变量添加以下代码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private final int FEE=5;//配送费
private JLabel label03 = new JLabel("满30免费配送,满100立减10");

2. 在Takeout()类构造函数中if(e.getSource()==btn_ok)添加以下的代码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if(total<0){
                label03.setText("还差"+(0-total)+"就免费配送,还差"+(100-total)+"就满100减10");
                total=total+FEE;
                str=str+"配送费   5元";
              }else if(total<100){//免费配送,不参与满100-10
                label03.setText("免费配送,还差"+(100-total)+"就满100减10");
              }else{
                label03.setText("免费配送,已参与满100减10,"+(total)+"-10");
                total=total-FEE-FEE;
              }

【六、思考题2】

实现“欢迎来到饶洋外卖系统!”文字滚动和颜色定时变化。程序应如何修改?

1. 在成员变量添加以下代码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private Color color[]=new Color[]{Color.BLACK,Color.RED,
         Color.BLUE,Color.LIGHT_GRAY,
             Color.YELLOW,Color.GREEN,
             Color.MAGENTA   
     };
     private Timer timer;//定时器
     private int colorIndex=0;//当前颜色的序号

2. 在Takeout()类构造函数中if(e.getSource()==btn_ok)添加以下的代码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Takeout(){
.....
添加timer=new Timer(500,new TimerListener());
    //定时的时间间隔(单位ms),定时器监听器(要做的事情)
    timer.start();//启动定时器

3. 实现这个TimerListener()函数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class TimerListener implements ActionListener{//定时器监听器

  @Override
  public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
    //定时时间到了,要做的事情:
    colorIndex++;// 0 1 2 3 4 5 6 7%7=0  8%7=1 9%7=2
    label01.setForeground(color[colorIndex/4 % color.length]);
    
      String temp=label01.getText();
      label01.setText( temp.substring(1,temp.length())+temp.substring(0,1));
      //substring(i,j)截取字符串从序号i(包含)到序号j(不包含) i ~ j-1
  }    
}

以上代码可以实现文字的滚动和颜色变化。

这个项目主要是用Java Swing图形界面开发,Swing包括图形用户界面器件,还有Java中为我们提供了Timer来实现定时任务,最主要涉及到了两个类:Timer和TimerTask。

【七、总结】

1. 主要介绍了JPanel、 JCheckBox、 JLabel、 JButton、 JTextField等组件的基本使用,背景颜色的添加,图片图标的设置,以及相应的事件处理。

2.事件处理函数的添加,难点是运用理解构造函数、内部类的创建。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试test 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用Java带你打造一款简单的英语学习系统
随着移动互联网的发展,英语学习系统能结构化的组织海量资料。针对用户个性需求,有的放矢地呈现给用户,从而为英语学习者提供便利,提升他们的学习效率。
前端皮皮
2020/11/26
8040
使用Java带你打造一款简单的英语学习系统
手把手教你用Java打造一款简单考试系统(下篇)
随着移动互联网的发展,网络给我们带来的是无穷的信息,也带来了便利。与传统考试模式相对比,在线考试具有很多优越性、它可以将传统考试过程中的试卷组织、传送、收集、评判等各环节缩小到一至两个环节,不仅可以节约大量的时间、人力、物力与财力,还可以大幅度提高考试的客观性和公正性。利用现有的计算机硬、软件和网络资源实现无纸质考试以避免传统考试的不足。
Python进阶者
2020/11/04
8151
手把手教你用Java打造一款简单考试系统(下篇)
手把手带你用Java打造一款对对碰游戏(上篇)
前面几篇文章用Java带大家一起了解了几个游戏小项目,感兴趣的小伙伴可以点击文章观摩下,手把手教你用Java打造一款简单故事书(上篇)、手把手教你用Java打造一款简单故事书(下篇)、手把手教你用Java打造一款简单考试系统(上篇)、手把手教你用Java打造一款简单考试系统(下篇),今天小编继续带大家做一个小项目,实现一个对对碰游戏。
Java进阶者
2021/01/22
1.1K0
手把手教你用Java打造一款简单故事书(下篇)
上篇文章,我们介绍了故事书的理论内容,这篇文章,我们一起来看具体的代码实现。,具体教程如下。
Java进阶者
2021/01/22
5670
手把手教你用Java打造一款简单考试系统(上篇)
随着移动互联网的发展,网络给我们带来的是无穷的信息,也带来了便利。与传统考试模式相对比,在线考试具有很多优越性、它可以将传统考试过程中的试卷组织、传送、收集、评判等各环节缩小到一至两个环节,不仅可以节约大量的时间、人力、物力与财力,还可以大幅度提高考试的客观性和公正性。利用现有的计算机硬、软件和网络资源实现无纸质考试以避免传统考试的不足。
Java进阶者
2021/02/07
1K0
Java 基于JFrame的一个简单学生成绩管理系统(内含详细注释)
/* * 若尘 */ package demo; import java.awt.BorderLayout; import java.awt.Container; import java.awt.FlowLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.a
ruochen
2021/05/15
1.4K0
Java 基于JFrame的一个简单学生成绩管理系统(内含详细注释)
手把手带你用Java实现点灯游戏(上篇)
前面几篇文章用Java带大家一起了解了几个游戏小项目,感兴趣的小伙伴可以点击文章观摩下,手把手教你用Java打造一款简单故事书(上篇)、手把手教你用Java打造一款简单故事书(下篇)、手把手教你用Java打造一款简单考试系统(上篇)、手把手教你用Java打造一款简单考试系统(下篇)、手把手带你用Java打造一款对对碰游戏(上篇)、手把手带你用Java打造一款对对碰游戏(下篇),今天小编继续带大家做一个小项目,实现一个点灯游戏。
Java进阶者
2021/01/22
9890
手把手带你用Java实现点灯游戏(下篇)
前面几篇文章用Java带大家一起了解了几个游戏小项目,感兴趣的小伙伴可以点击文章观摩下,手把手教你用Java打造一款简单故事书(上篇)、手把手教你用Java打造一款简单故事书(下篇)、手把手教你用Java打造一款简单考试系统(上篇)、手把手教你用Java打造一款简单考试系统(下篇)、手把手带你用Java实现点灯游戏(上篇)、手把手带你用Java打造一款对对碰游戏(下篇),今天小编继上篇文章,继续带大家完成这个游戏小项目,本文讲具体的实现。
Java进阶者
2021/01/22
7050
java swing一篇轻松学习(高考后可以自学)
是一种中间层容器,它能容纳组件并将组件组合在一起,但它本身必须添加到其他容器中使用。
红目香薰
2022/11/30
9.7K0
java swing一篇轻松学习(高考后可以自学)
Java制作一款扫雷游戏(含有源码)
GeekLiHua
2025/01/21
830
Java制作一款扫雷游戏(含有源码)
手把手教你用Java打造一款简单故事书(上篇)
随着移动互联网的发展,电子版的书成为现在主流,针对用户的需求,有的放矢地呈现给用户,阅读电子版书,提高他们的学习效率。
Java进阶者
2021/01/22
8530
基于Java实现图像浏览器的设计与实现
推荐一个网站给想要了解或者学习人工智能知识的读者,这个网站里内容讲解通俗易懂且风趣幽默,对我帮助很大。我想与大家分享这个宝藏网站,请点击下方链接查看。 https://www.captainbed.cn/f1
鲜于言悠
2024/07/03
1590
基于Java实现图像浏览器的设计与实现
文件切割合并器&nbsp;3&nbsp;合并类Merge
import java.awt.event.ActionListener;
明明如月学长
2021/08/27
5240
数据库课程设计-宿舍管理系统「建议收藏」
最近写完了数据库的课程设计,想把整个源码的编辑过程发出来。程序很简单,需要有很多完善的地方,在这里,我想和大家分享写这个程序的心路历程。
全栈程序员站长
2022/08/31
2.1K0
手把手带你用Java打造一款对对碰游戏(下篇)
上篇文章介绍了对对碰游戏的理论部分和介绍了JLabel、JButton、JPanel、ImageIcon、JTextField、JProgressBar等组件的基本使用,介绍了进度条(JProgressBar)常用的方法。今天小编继续带来进行具体的对对碰游戏功能实现。
Java进阶者
2021/01/22
5940
Java Swing客户端小项目
以上是第一个小工具,只是用了txt文件进行数据存储,第二个客户端按数据源分为以下两种:
JQ实验室
2022/02/11
2.1K0
Java实现扫雷小游戏三
注意:在雷区BombJPanel.java中之前是把行和列写成固定的,实现初级、中级、高级时要进行下述修改:
XG.孤梦
2022/05/27
3.4K0
Java实现扫雷小游戏三
java容器的概念
文章目录 java的容器 数组 Collection 实例 java的容器 容器中可以保含多个对象,每个对象称为容器的一个元素.容器是用对象封装的数据结构. 数组 数组是最常见的数据结构.数组是相同的类型元素的有序集合,并有固定的大小.数组可以根据下标(index)来随机存取元素. Collection 表(List)和集合(set)是java.util中定义的两个接口(interface); 集合(set)也是元素的集合。集合中不允许有等值的元素,集合的元素没有顺序 map是键值对结合.map中的每个元素
AI拉呱
2021/12/20
3650
java版本的学生管理系统
1 import java.awt.BorderLayout; 2 import java.awt.Color; 3 import java.awt.Frame; 4 import java.awt.event.ActionEvent; 5 import java.awt.event.ActionListener; 6 import java.io.UnsupportedEncodingException; 7 import java.sql.Connection; 8 im
Gxjun
2018/03/26
2.6K0
java设计之简单的JAVA计算器
       做这个东西主要是为了练习一下以前学习过的java Swing,所以那些复杂的算法就没有加载到里面去........        先展示一下效果....额,当然不是这个样子....  
Gxjun
2018/03/26
2.3K0
java设计之简单的JAVA计算器
推荐阅读
相关推荐
使用Java带你打造一款简单的英语学习系统
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文