前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java基础-day08-超市购物系统总结

Java基础-day08-超市购物系统总结

作者头像
Java帮帮
发布2018-03-19 17:36:42
2.1K0
发布2018-03-19 17:36:42
举报
Java基础-day08-超市购物系统总结

超市购物小票——自定义类

1案例介绍与演示

将超市购物小票案例中零散数据(名称、货号、单价、计价单位等)封装为货物对象。

2案例分析

a)案例回顾

在超市购物小票案例中,我们封装了三个方法,在switch中为3个case执行用户选择的三个不同的操作:1输入购买数量 2打印购物小票 3退出系统

而所有的变量均”零散地”定义在成员位置。

b)重构内容分析

1:将原来的成员位置零散定义的变量,封装为商品项GoodsItem对象。

2:将所有使用变量值的地方全部改为使用GoodsItem对象

c)实现步骤

定义Person类

定义Person类,包含成员变量名称、年龄、地址

重构使用到变量的逻辑

将所有使用到成员位置商品属性的代码处,均由直接使用改为通过对象名访问对象属性的方式。

代码实现:

代码语言:javascript
复制
package StudentJavaSEday08;
/**
 * 
 * 自定义数据类型 商品项类
 *
 * 属性
 *
 * 商品名称 String 商品id String 商品单价 double 商品数量 int 商品金额 double
 */
public class GoodsItem {
 // 商品名称
 String name;
 // 商品id
 String id;
 // 商品单价
 double price;
 // 商品数量
 int number;
 // 商品金额
 double money;
}
package StudentJavaSEday08;
/*
使用switch语句完成三个分支的代码逻辑
当用户输入1时,让用户输入所要购买的商品数量
当用户输入2时,给用户打印出对应的购物小票
当用户输入3时,退出系统
1.定义商品数据
2.提示用户输入相对应的操作 1.输入商品数量  2.打印小票  3.退出系统
3.接收用户输入的选择
4.使用switch进行判断
5.整体是一个死循环
代码重构
 1.定义一个商品项类
 2.在成员位置创建两个商品对象
 3.给两个商品对象的属性赋值
 定义一个方法为商品对象初始化属性的方法  方法名 init   参数 无  返回值 无
 4.修改购买方法和打印小票方法  因为里边访问的变量都不存在了 需要改成商品对象去访问属性的方式
*/
//导入Scanner
import java.util.Scanner;
public class Supermarket {
 // 定义少林寺酥饼核桃商品对象
 static GoodsItem sls = new GoodsItem();
 // 定义然光Q移商品对象
 static GoodsItem rg = new GoodsItem();
 public static void main(String[] args) {
 // 调用init方法 用来初始化数据
 init();
 while (true) {
 // 提示用户输入相对应的操作 1.输入商品数量 2.打印小票 3.退出系统
 System.out.println("请输入您的操作:1.输入商品数量    2.打印购物小票    3.退出系统");
 // 接收用户输入的选择 使用Scanner完成
 // Scanner sc = new Scanner(System.in);
 // 调用nextInt方法 接收用户的选择
 // int choose = sc.nextInt();
 // 调用键盘录入整数方法enterNumber接收用户输入的选择
 int choose = enterNumber();
 // 使用switch进行判断用户的选择
 switch (choose) {
 case 1:
 // 调用buy方法 完成用户输入商品数量
 buy();
 break;
 case 2:
 // 调用printTicket方法 打印购物小票
 printTicket();
 break;
 case 3:
 System.out.println("优惠多多,期待下次光临!!");
 System.exit(0);
 break;
 default:
 System.out.println("请正确输入!");
 break;
 }
 }
 }
 // 定义一个方法为商品对象初始化属性的方法 方法名 init 参数 无 返回值 无
 public static void init() {
 // 给少林寺对象赋值
 sls.name = "少林寺酥饼核桃";
 sls.id = "090115";
 sls.price = 15.50;
 // 给然光对象赋值
 rg.name = "然光Q移";
 rg.id = "090028";
 rg.price = 16.00;
 }
 // 定义一个键盘录入整数的方法 方法名 enterNumber 需要的数据 无 返回的数据 一个用户输入的整数
 public static int enterNumber() {
 Scanner sc = new Scanner(System.in);
 int number = sc.nextInt();
 return number;
 }
 // 将用户输入商品数量封装成方法 方法名 buy 需要的数据 无 返回的数据 无
 public static void buy() {
 Scanner sc = new Scanner(System.in);
 // 依次让用户给每个商品的数量重新赋值
 System.out.println("请输入少林寺酥饼核桃的购买数量:");
 sls.number = sc.nextInt();
 sls.money = sls.number * sls.price;
 System.out.println("请输入然光Q移的购买数量:");
 rg.number = sc.nextInt();
 rg.money = rg.number * rg.price;
 }
 // 打印购物小票方法 方法名 printTicket 需要的数据 无 返回的数据 无
 public static void printTicket() {
 // ===============票头=========================
 System.out.println("            欢   迎    光   临");
 System.out.println("品名               售价    数量    金额");
 System.out.println("-------------------------------------");
 // ===============票体=========================
 System.out.println(sls.name + "(" + sls.id + ")" + "   " + sls.price + " * " + sls.number + " = " + sls.money);
 System.out
 .println(rg.name + "(" + rg.id + ")" + "          " + rg.price + " * " + rg.number + " = " + rg.money);
 System.out.println("-------------------------------------");
 // ===============票脚=========================
 // 项数
 int lineNumber = 2;
 // 总数量
 int totalNumber = sls.number + rg.number;
 // 总金额
 double totalMoney = sls.money + rg.money;
 System.out.println(lineNumber + " 项商品      共计:" + totalNumber + " 件");
 System.out.println("总计:" + totalMoney);
 }
}

运行结果:

超市购物小票——集合

1案例介绍与演示

将本日第二章内容所有的Person对象放置到集合中使用。

2案例分析

d)重构内容分析

1:将原来的成员位置的多个商品项GoodsItem对象封装到一个ArrayList集合中

2:将所有使用变量值的地方全部改为先从集合中后去对象,再使用GoodsItem对象获取属性值的方式。

e)实现步骤

成员位置定义ArrayList集合

定义方法,用于为集合赋值,准备要操作的数据。

重构使用到变量的逻辑

将所有使用到成员位置商品项的代码处,均由使用对象名访问对象属性的方式改为先从集合中获取对象,再获取属性值的方式。

3自定义类型与集合的使用优点分析

当使用自定义类型时,将数据与数据之间产生了合理必要的联系:一个商品的属性应都属于一个商品,则可以以一个商品作为数据操作的基本单位。

当使用集合时,由原来成员位置定义多个对象改为定义一个集合对象。所有使用数据的地方循环遍历即可,无论有再多新数据的产生,其代码不需要更改。

代码实现:

代码语言:javascript
复制
/*
 自定义数据类型 商品项类
 属性
 商品名称 String 
 商品id String
 商品单价 double
 商品数量  int
 商品金额  double  
*/
public class GoodsItem {
 // 商品名称
 String name;
 // 商品id
 String id;
 // 商品单价
 double price;
 // 商品数量
 int number;
 // 商品金额
 double money;
}
/*
 使用switch语句完成三个分支的代码逻辑
 当用户输入1时,让用户输入所要购买的商品数量
 当用户输入2时,给用户打印出对应的购物小票
 当用户输入3时,退出系统
 1.定义商品数据
 2.提示用户输入相对应的操作 1.输入商品数量  2.打印小票  3.退出系统
 3.接收用户输入的选择
 4.使用switch进行判断
 5.整体是一个死循环
 代码重构
 准备数据
 1.定义一个商品项类
 2.在成员位置定义一个集合 用来存储所有商品
 3.为成员位置的集合初始化商品   
 4.修改购买和打印小票方法 将商品对象从集合中取出来,访问商品对象的属性
*/
//导入Scanner
import java.util.Scanner;
//导入ArrayList
import java.util.ArrayList;
public class Supermarket2
{ 
 //在成员位置定义一个集合 用来存储所有商品
 static ArrayList<GoodsItem> list = new  ArrayList<GoodsItem>();
 public static void main(String[] args)
 {
 //调用init方法 用来初始化数据
 init();
 while(true){
 //提示用户输入相对应的操作 1.输入商品数量  2.打印小票  3.退出系统
 System.out.println("请输入您的操作:1.输入商品数量    2.打印购物小票    3.退出系统");
 //接收用户输入的选择 使用Scanner完成
 int choose  = enterNumber();
 //使用switch进行判断用户的选择
 switch(choose){
 case 1: 
 //调用buy方法 完成用户输入商品数量
 buy();
 break;
 case 2: 
 //调用printTicket方法 打印购物小票
 printTicket();
 break;
 case 3:
 System.out.println("爱买不买,下次带钱来!!");
 System.exit(0);
 break;
 default:
 System.out.println("你瞎啊!");
 break;
 }
 }
 }
 //定义一个方法为商品对象初始化属性的方法  方法名 init   参数 无  返回值 无
 public static void init(){
 //定义少林寺酥饼核桃商品对象
 GoodsItem sls = new GoodsItem();
 //给少林寺对象赋值
 sls.name =  "少林寺酥饼核桃";
 sls.id =  "090115";
 sls.price = 15.50;
 //定义然光Q移商品对象
 GoodsItem rg = new GoodsItem();
 //给然光对象赋值
 rg.name = "然光Q移";
 rg.id = "090028";
 rg.price = 16.00;
 //定义人参果商品对象
 GoodsItem rsg = new GoodsItem();
 //给然光对象赋值
 rsg.name = "人参果";
 rsg.id = "090001";
 rsg.price = 111111.00;
 //将商品对象添加到集合中
 list.add(sls);
 list.add(rg);
 list.add(rsg);
 }
 //定义一个键盘录入整数的方法   方法名 enterNumber  需要的数据  无 返回的数据 一个用户输入的整数
 public static int enterNumber(){
 Scanner sc = new Scanner(System.in);
 int number = sc.nextInt();
 return number;
 }
 //将用户输入商品数量封装成方法   方法名 buy  需要的数据 无  返回的数据 无
 public static void buy(){
 Scanner sc = new Scanner(System.in);
 /*
 遍历存储商品的集合list,依次获取每个商品
 让用户给每个商品的数量赋值
 计算每个商品的金额
 */
 for(int i = 0 ;i < list.size();i++){
 //依次获取每个商品
 GoodsItem thisItem = list.get(i);
 System.out.println("请输入"+thisItem.name+"商品的购买数量:");
 //让用户给每个商品的数量赋值
 thisItem.number = sc.nextInt();
 //计算每个商品的金额
 thisItem.money = thisItem.number * thisItem.price;
 }
 }
 //打印购物小票方法   方法名 printTicket  需要的数据 无  返回的数据 无
 public static void printTicket(){
 //===============票头=========================
 System.out.println("            欢   迎    光   临");
 System.out.println("品名               售价    数量    金额");
 System.out.println("-------------------------------------");
 //===============票体=========================
 /*
 遍历商品集合,依次获取每个商品,打印每个商品的属性
 */
 for(int i = 0 ;i<list.size();i++){
 //依次获取每个商品
 GoodsItem thisItem = list.get(i);
 //依次获取每个商品
 System.out.println(thisItem.name+"("+thisItem.id+")"+"   "+thisItem.price+" * "+thisItem.number+" = "+thisItem.money);
 }
 //System.out.println(sls.name+"("+sls.id+")"+"   "+sls.price+" * "+sls.number+" = "+sls.money);
 //System.out.println(rg.name+"("+rg.id+")"+"          "+rg.price+" * "+rg.number+" = "+rg.money);
 System.out.println("-------------------------------------");
 //===============票脚=========================
 //项数
  int lineNumber = list.size();
  //总数量
  int totalNumber = 0;
  //总金额
  double totalMoney = 0.0;
  /*
 遍历商品集合 ,依次获取每个商品 
 将每个商品的数量累加
 将每个商品的金额累加
  */
  //遍历商品集合
  for(int i = 0 ;i < list.size();i++){
  //依次获取每个商品 
 GoodsItem thisItem  = list.get(i);
 //总数量
 totalNumber += thisItem.number;
 //总金额
 totalMoney  += thisItem.money;
  }
  System.out.println(lineNumber+" 项商品      共计:"+totalNumber+" 件");
  System.out.println("总计:"+totalMoney);
 }
}

运行结果:

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

本文分享自 Java帮帮 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档