java实现KFC系统(java swing)

2023-10-07 19:30
文章标签 java 实现 系统 swing kfc

本文主要是介绍java实现KFC系统(java swing),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一.题目要求

同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用C++或Java或Python结合设计模式(2种以上)至少实现系统的以下功能:

1.正常餐品结算和找零。

2.基本套餐结算和找零。

3.使用优惠劵购买餐品结算和找零。

4.可在一定时间段参与店内活动(自行设计或参考官网信息)。

5.模拟打印小票的功能(写到文件中)。

基本要求:

  1. 程序设计风格良好,控制台界面友好,最多两人一组完成任务。
  2. 实现功能测试代码,确保程序的健壮性。
  3. 画出使用的设计模式图。

提高要求:

  1. 实现可视化界面(使用MFC)。
  2. 实现会员储值卡功能,完成储值卡消费。
  3. 实现当天营业额和餐品销量计算和统计,用数据库记录。

 

二.题目分析

此次题目要求为实现收银系统,且要求较多难度较大,我运用了Java swing页面设计来完成此次题目要求,我通过网上的一个例子进行了改变并且在他的基础上进行了创造。

预期想法:首先设计一个登录界面,用户通过注册办理会员信息来登录肯德基系统,可选择办理会员卡,也可选择不办理会员卡,(初始值为用户名:1,密码:1),登录成功后,用户可以选择需要的食物,可单点也可选择套餐,支付方式为三种,分别是现金支付、会员卡支付以及优惠券支付,选择会员卡支付,也可在点餐系统中选择充值来完成对会员卡内的充值过程;选择优惠券支付则必须满足消费满200元,则可使用优惠券来立减50元,并且每个用户只能有一张,此外还提供打印小票的功能,根据顾客意愿来选择是否打印小票,且打印小票必须是在支付成功后才可使用,每选择一项功能,则上个界面自动关闭,并开启新的界面。

 

三.整体代码设计

1、页面的布局设计

首先是在登录界面,我选择运用网格布局(GridLayout),通过这种方式可以将一个容器的区域被划分为矩形网络,每个矩形大小规格一致且各个组件可以放置在其中任意一个矩形内,很规整的一种布局方式。

其次是注册界面,我选择运用边界布局(BorderLayout),控件会按照区域来进行调整,直到完全充满该区域,同样也很规整。

但两种界面也存在了一些问题,对于控件较多的界面,两种布局就会显得太规整,且范围只有这么多,很难讲一个区域内的控件全部包括在内,于是其余的界面我选择自定义布局,通过改变控件的位置来对控件进行移动以及排列,这样对于较多控件的页面,可以随机安放需要的控件并进行调整。

2、组件的选择以及添加

在选择组件时涉及到的问题较多,因为每一个组件展示出来的效果不同,且作用也不一样。

像是按钮(JButton)通过鼠标控制,选择什么就是什么,只能执行一个命令,但执行命令很方便快捷,所以我选择通过按钮来进行页面的切换以及提示区域的显示。

复选框(JCheckBox)通过鼠标控制时,可以执行多个命令,所以我选择通过复选框来进行餐品的选择,因为可以多选,错选时也可以取消。   

文本框(JTextField)用来展示选择的结果以及总额的总数,也可以在注册时任意添加文字以及最后的支付金额。

像是在定义这些组件时都可使用数组将其保存,可以将相同属性的组件保存在同一个数组中,这样方便定义,但此次我没有用到这样的方法,所以显得代码有些太长,没有优化好。

3、每个组件相应的代码命令

当整个页面布局完成后最重要的就是代码的添加,因为对于各个组件来说,不同的组件添加不同的代码,不像平常使用c++,一整段代码过去后得出最后效果,swing里面即使是一个小复选框按钮,它所代表的意义也是它本身所特有的,就像是选择餐品时,我选择薯条的控制按钮就必须调用这个复选框中的代码,不能跳到其他的复选框中。整个代码的流程必须要保证流通性以及合法性,每一步都必须正确显示,但好处也在用,成功定义一个复选框或按钮的代码后,其余相同组件的代码也大致相似,同样页面和页面的相互转换也是一样的方法。

4、文件的保存、读入以及写入

此次写入、读入并保存的文件包括用户注册的信息,会员卡的钱数,以及小票的打印,我将三者分别保存在不同的文件中以方便观察以及调用。

首先是用户注册的信息,将会保存用户名、密码、身份证号以便于登录系统;其次是会员卡中钱数的保存,方便直接读取调用;最后是小票的打印,记录餐品,钱数,支付数,找零数以及交易时间,其中找零数包括现金、会员卡以及优惠券的使用情况。

文件保存至相应的文档中。

5、背景图片的添加

背景图片的添加是为了装饰,使得面板更有色彩,不显得太单一或太光滑。

 

四.流程图设计

 

五.调试以及测试结果

 

图一 登录界面

 

图二 信息注册

 

图三 点餐系统界面

图四 充值界面

 

 

图五 现金支付界面

 

图六 现金支付成功界面

 

图七 现金找零界面

 

图八 打印小票

 

图九 会员卡找零界面

 

图十 选择优惠券时满足的条件

 

图十一 使用优惠券界面

 

图十二 小票打印

 

图十三 用户名,密码,身份证号的保存

图十四 金额的保存

 

六、遇到的问题以及解决方法

 

1. 页面的切换问题

一开始在进行页面切换时,弹出新的页面后旧的页面没有消失,一两个页面还行,定义多个页面后显得太乱太杂,且如果不注意还会改变选择方式导致整个系统没有流畅性。

通过网上资料查到使用dispose()便可以改变这种情况,该语句的作用是使当前页面消失,新的页面在指定位置产生,该语句一般加在函数最后。

 

2、选择餐品以及显示总金额问题

通过复选框选择餐品,选择后直接将金额显示在下方,效果如下图

想要的效果就是选择一个餐品后在下方显示出金额,并且在不需要此餐品时总金额也会减去相应的餐品价格。

一开始在定义时完全没有头绪去计算金额以及显示总金额,通过资料以及一些代码的演示才找到了解决方法。

当选择餐品时,以“香辣鸡腿堡”为例,通过下面的语句来完成对餐品金额的显示

String.valueOf((Integer.parseInt(s.substring(1,s.length())))+12))

此语句的意义为string.valueof()是用于数据转换;Integer.parseInt输出一个十进制;s.substring()索引位置的长度,从1开始到字符长度结束

 

3、支付金额时显示的餐品列表以及总金额

此问题的难点在于要在另一个面板中显示上一个面板所选择的餐品内容以及总金额,一开始我使用继承的方式尝试解决此问题,但并没有达到预期的效果,相反还增加了许多没有选择的内容。

通过资料的查找此问题可以通过提前定义一个boolean frag,通过上个问题,当选择某一样餐品时,frag=true,撤销某一样餐品时frag=false;通过if语句将frag=true的餐品名通过append()将内容打印出来,输入到一个文本框中。

最后将这个文本框内的内容与之前定义过得总金额保存的文本框一起当参数付给一个新的函数,再重新定义这个新函数,这样就可以保证在新的函数页面上显示上一个页面所选择的餐品以及金额。

 

4、用户自己输入的金额与总金额的比较以及找零问题

所以定义过得金额全部都是以String形式定义,真正要去比较时,是比较二者的字符串内数字,所以我的想法是将他们两个先从String转换为int类型,之后再进行比较,发现有的数字在比较时差别较大,找零时也存在一些问题。

之后我想到先用两个字符串进行比较,当作减法运算时再将其转换为int类型,这样出错率明显降低了许多,但还是会存在一些小问题。

此外String转换为int的方法为 int i=Interger.parseInt(String);

Int转换为String的方法为 String s=String.valueof(int);

 

5、文件的读入问题

相比较c++而言java的写入也不是很难,且较为便捷,所以在写入文件并保存是还是比较容易完成的,可当读入一个文件并且将它保存到一个数组中时遇到了问题,原以为跟其余的编程方法一样通过fwrite写入,freader读出,也许是我的方法问题,我没有成功读出文件。

通过网上资料后Scanner读入了文件,且将它保存在一个String数组中方便调用,且解决了字符串与字符串之间的空格问题。

 

6、图片的加入

此次可惜之处在于没有成功的添加背景图片,只添加了几个图标,因为背景图片覆盖组件的问题我还没有完全搞明白。

加入图片时当时代码无误,却怎么也导入不进图片,通过查找资料才明白一个图片路径问题,调用图片的必须是在制定的哪个包哪张图才可用导入成功。

 

七.经验总结

此次是我首次使用java来编程,而且此题难度较大,虽然时间较为充裕但对我而言还是相当有难度,一开始我使用c++进行编程,发现使用c++较为容易,且实现的功能也很多,但为了挑战一下才放弃c++成功的代码转战java,也是通过java我才了解到其中java swing的用处,我也决定使用此功能编程。

正式编程前我通过教材以及各种资料,先对每个组件都了解以及编写了一遍,熟悉了各个组件(面板,复选框,按钮)的功能以及怎样去定义,接着将各个组件添加进面板中调整位置查看效果,一切试验成功后才开始正式进行编程。

首先将各个页面做好,每一个页面上拥有的组件全部进行位置调整好,保持各个界面的美观性,其次加入各个组件的代码,先定义注册系统功能,保证其良好性并且保存用户信息,其次加入其余各组件的代码,先保证页面切换的函数,保证整个系统的流通性和可用性,其次保证复选框中的代码成立,可以选择餐品,再保证文本框内可以显示所点餐品名称以及总额,接着保证三种支付方式的局限性以及可运用性,之后保证输入的金额数可以与总额比较进行找零,以及会员卡的充值功能,最后将小票进行打印出来,结束此次点餐。

开始编程前我对整个流程进行了全盘的分析以及考虑,考虑要达到什么样的效果以及满足什么样的功能条件,我对此次编程系统做了几组考虑,上述过程是其中实现的一组情况,还有另一种想法没有实现成功,就是通过组合框(JComboBox)来选择餐品,每选择一个餐品显示一张餐品图片,组合框的好处在于可以节省大量的空间,因为我定义的餐品较多,如果使用组合框则可以尽量少的考虑到位置的调整问题,由于技术问题没有成功的将其编写出来,一方面在于选错后的修改问题,一方面在于图片的刷新问题,有时间在尝试将其表示出来。

这段代码也耗费了相当大的时间以及精力,因为一方面要查找各式各样的资料,一方面还要考虑到所查找到的资料是否适合自身代码,所以在进行修改时考虑的的点太多,虽然困难很多但还是完成了代码,可惜还有些不足以及自己考虑到的功能暂未实现。

通过这段代码让我对Java swing有了认识,虽然定义起来相对来说费劲一点,但整体效果呈现的还是很不错的,至少很直观,就像MFC界面一样,一个一个的定义以及一步一步的操作,比起c++显示出来的cmd黑界面以及java下方的调试框显得美化了许多,而且总的看来swing要比MFC界面容易,因为代码量少,我曾在MFC界面中添加背景图片需要几十行代码,现在运用java至于要几行代码,而且可以根据不同的页面添加不同的图片,但这方面我还欠些火候还需要学习。

代码地址:https://download.csdn.net/download/qq_41890177/11839607

这篇关于java实现KFC系统(java swing)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/159950

相关文章

SpringBoot路径映射配置的实现步骤

《SpringBoot路径映射配置的实现步骤》本文介绍了如何在SpringBoot项目中配置路径映射,使得除static目录外的资源可被访问,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一... 目录SpringBoot路径映射补:springboot 配置虚拟路径映射 @RequestMapp

Java MCP 的鉴权深度解析

《JavaMCP的鉴权深度解析》文章介绍JavaMCP鉴权的实现方式,指出客户端可通过queryString、header或env传递鉴权信息,服务器端支持工具单独鉴权、过滤器集中鉴权及启动时鉴权... 目录一、MCP Client 侧(负责传递,比较简单)(1)常见的 mcpServers json 配置

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

Java Stream 并行流简介、使用与注意事项小结

《JavaStream并行流简介、使用与注意事项小结》Java8并行流基于StreamAPI,利用多核CPU提升计算密集型任务效率,但需注意线程安全、顺序不确定及线程池管理,可通过自定义线程池与C... 目录1. 并行流简介​特点:​2. 并行流的简单使用​示例:并行流的基本使用​3. 配合自定义线程池​示

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

基于C#实现PDF转图片的详细教程

《基于C#实现PDF转图片的详细教程》在数字化办公场景中,PDF文件的可视化处理需求日益增长,本文将围绕Spire.PDFfor.NET这一工具,详解如何通过C#将PDF转换为JPG、PNG等主流图片... 目录引言一、组件部署二、快速入门:PDF 转图片的核心 C# 代码三、分辨率设置 - 清晰度的决定因

Java Kafka消费者实现过程

《JavaKafka消费者实现过程》Kafka消费者通过KafkaConsumer类实现,核心机制包括偏移量管理、消费者组协调、批量拉取消息及多线程处理,手动提交offset确保数据可靠性,自动提交... 目录基础KafkaConsumer类分析关键代码与核心算法2.1 订阅与分区分配2.2 拉取消息2.3