qlcyl110 发表于 2017-2-14 07:43

【笔记】学习java第十三天,水果超市

本帖最后由 qlcyl110 于 2017-2-14 08:01 编辑

其实很多不理解的地方,但是跟着视频,自己写的。感觉自己很努力。跟大家分享一下!
主要解决两个大方面问题;
1、顾客购买与结账;
2、管理员的查看流水、查询总价、打折实现、添加、修改、删除等操作;
原创笔记楼:http://www.52pojie.cn/thread-578655-1-1.html
先来一个自定义商品属性的类
//定义商品项
public class Fruits {
      String name;      //商品名称
      int id;                        //商品编号
      String unit;      //商品单位
      double price;      //商品单价
      int number;                //商品数量
      double money;      //商品金额
}

再主程main类
/
*      1、完成水果项的Fruits类的定义;
*         2、写出含有的工具方法;
*                         1、录入整数的方法;
*                         2、录入小数的方法;
*                         3、录入字符串的方法;
*         3、成员位置定义集合,存储所有水果项(用来模拟数据库)
*         4、在main方法中使用循环嵌套switch选择不同操作;
*         5、业务逻辑方法实现;
*                         初始化数据库;         init         方法                void      返回值
*                         购买水果 ;                buy                方法                void      返回值
*                         打印库存                kc                方法                void      返回值      查看库存一样
*                         结账/打印小票      jz                方法                void      返回值
*                         打折                        dz                方法                double      返回值
*                         数据重置                cz                方法                void      返回值
*                         打印超市流水      ls                方法                void      返回值
*                         总账查询                zz                方法                void      返回值
*                         删除水果                sc                方法                void      返回值
*                         添加水果                tj                方法                void      返回值
*                         修改水果项                xg                方法                void      返回值
*/      

import java.util.ArrayList;
import java.util.Scanner;
public class FruitsStore {
      //水果项集合
      static ArrayList<Fruits> list = new ArrayList<Fruits>();
      //创建流水集合,用于存放流水数据
      static ArrayList<Double> flowData = new ArrayList<Double>();
      //main方法;
      public static void main(String[] args) {
                init();
               
                //使用while(true)反复完成用户的操作,用户操作有多种,多种操作使用switch选择;
                while(true){
                        //打印提示语;
                        System.out.println();
                        System.out.println("      欢迎光临");
                        System.out.println("请输入的操作;");
                        System.out.println("1、购买水果;2、打印小票;");
                        System.out.println("3、流水查询;4、总账查询;");
                        System.out.println("5、添加新水果;6、删除水果;7、修改水果;8、查询库存;");
                        System.out.println("9、退出操作;");
                        System.out.println("");
                        
                        //用户录入
                        int choose = enterInt();
                        
                        switch(choose){
                        case 1://购买水果;
                              buy();
                              break;
                        case 2://结账及重置数据;
                              jz();
                              cz();
                              break;
                        case 3://查看流水;
                              ls();
                              break;
                        case 4://总账查询;
                              zz();
                              break;
                        case 5:
                              tj();
                              break;
                        case 6:
                              sc();
                              break;
                        case 7:
                              xg();
                              break;
                        case 8:
                              kc();
                              break;
                        case 9:
                              System.out.println("欢迎下次光临!");
                              cz();
                              break;
                        default:
                              System.out.println("您输入的数字有误,请重新输入!");
                              break;
                        }
                        
                }
      }
      //录入整数的方法
      public static int enterInt(){
                Scanner sc = new Scanner(System.in);
                return sc.nextInt();
      }
      //录入小数的方法;
      public static double enterDouble(){
                Scanner sc = new Scanner(System.in);
                return sc.nextDouble();
      }
      //录入字符串的方法;
      public static String enterString(){
                Scanner sc = new Scanner(System.in);
                return sc.next();
      }
      //初始化数据库
      public static void init(){
               
                Fruits a = new Fruits();
                a.name = "猕猴桃";
                a.id = 00321;
                a.price = 33.5;
                a.unit = "斤";
               
                Fruits b = new Fruits();
                b.name = "苹果";
                b.id = 00432;
                b.price = 20;
                b.unit = "斤";
               
                Fruits c = new Fruits();
                c.name = "火龙果";
                c.id = 10231;
                c.price = 28;
                c.unit = "斤";
               
                list.add(a);
                list.add(b);
                list.add(c);
      }
      //购买水果的方法
      public static void buy(){
                //打印库存
                kc();
                //提示打印信息
                System.out.println();
                System.out.println("---------------------------------------");
                System.out.println();
                System.out.println("      好消息年底大促销");
                System.out.println("---------------------------------------");
                System.out.println("      满300打9.5折");
                System.out.println("      满600打9折");
                System.out.println("      满1000打8折");
                System.out.println("      满1000且榴莲购买超过10个立减50元!!!!");
                System.out.println("      ...");
                System.out.println("---------------------------------------");
                //循环输入购买的编号及数量
                while(true){
                        //用户选择购买的水果编号
                        System.out.println("请输入您要购买的水果编号;如果输入0位退出!");
                        int aId = enterInt();
                        //判断是否有水果编号;如果输入0退出
                        //判断是否购买结束
                        if(      aId == 0){
                              return;
                        }
                        //判断是否有水果编号
                        //循环外定义一个变量,记录是否有数据;
                        boolean flag = false;
                        
                        //遍历集合一次对比
                        for (int i = 0; i < list.size(); i++) {
                              //获取当前水果项
                              Fruits a = list.get(i);
                              //对比水果id
                              if (aId == a.id){
                                        //提示输入数量
                                        System.out.println("请输入您要购买的数量;");
                                        int number = enterInt();
                                        //将用户输入的数量赋值给这个ID的水果项
                                        a.number = number;
                                        a.money = a.number*a.price;
                                        flag = true;
                              }
                        }
                        if (!flag){
                              System.out.println("您的输入有误;");
                        }
                }
      }
      //打印库存
      public static void kc(){
                System.out.println("      水果报价单");
                System.out.println("---------------------------------------");
                System.out.println("编号      名称                单价      单位");
                //遍历集合并打印
                for (int i = 0; i < list.size(); i++) {
                        //打印编号、名称、单价、单位
                        //获取当前水果项
                        Fruits a = list.get(i);
                        //打印当前水果数据
                        System.out.println(a.id+"      "+a.name+"                "+a.price+"      "+a.unit);
                }
                        
      }
      //结账/打印小票
      public static void jz(){
                //票头
                System.out.println("这是您的购物小票;");
                System.out.println("======================================================================");
                System.out.println("      欢迎光临");
                System.out.println();
                System.out.println("品名                              售价                数量                金额");
                System.out.println("----------------------------------------------------------------------");
                //票体
                //定义变量记录该用户购买的项数
                int totalNumber = 0;
                double totalMoney = 0 ;
                for (int i = 0; i < list.size(); i++) {
                        Fruits a = list.get(i);
                        
                        //数量不为0的打印;
                        if (a.number!=0){
                              System.out.println(a.name+"("+a.id+")                              "+a.price+"      *      "+a.number+"      "+a.money);
                              //叠加每个购买金额
                              totalMoney += a.money;
                              //购买项数
                              totalNumber++;
                        }
                }
                //票脚
                System.out.println("----------------------------------------------------------------------");
                System.out.println(totalNumber+"项水果");
                //打折
                System.out.println("总计;"+totalMoney+"元");
                double b = dz(totalMoney);
                System.out.println("打折后为您节省;"+(totalMoney-b)+"元");
                System.out.println("折后总价为;"+b);
                flowData.add(b);
               
      }
      //打折处理
      public static double dz(double totalMoney){
                if(totalMoney<300){
                        //System.out.println("<300");
                        return totalMoney;
                }else if(totalMoney>=300&&totalMoney<600){
                        //System.out.println("totalMoney>=300&&totalMoney<600");
                        return totalMoney*0.95;
                }else if(totalMoney>=600&&totalMoney<1000){
                        //System.out.println("totalMoney>=600&&totalMoney<1000");
                        return totalMoney*0.9;
                }else if(totalMoney>=1000){
                        //System.out.println("totalMoney>=1000");
                              if(list.get(0).number>10){
                                        System.out.println("list.get(0).number>10");
                                        return totalMoney*0.8-50;
                              }else {
                                        return totalMoney*0.8;
                              }
                }
                return totalMoney;
      }
      //数据重置
      public static void cz(){
                //遍历集合
                for (int i = 0; i < list.size(); i++) {
                        Fruits a = list.get(i);
                        a.number = 0;
                        a.money = 0;
                }
      }
      //流水方法
      public static void ls(){
                if (flowData.size()==0) {
                        System.out.println("今天没开张!");
                }else {
                        
                        //遍历集合 ,产看流水
                        for (int i = 0; i < flowData.size(); i++) {
                              //获取当前水果流水
                              double a = flowData.get(i);
                              System.out.println("第"+(i+1)+"笔交易金额为;"+a);
                        }
                }
      }
      //总账方法
      public static void zz(){
                //遍历流水
                double a =0;
                for (int j = 0; j < flowData.size(); j++) {
                        //将流水相加
                        double money =flowData.get(j);
                        //a = money +1
                        a+= money;
                }
                System.out.println("今天总收入为;"+a);
               
      }
      //删除方法
      public static void sc(){
                //删除水果;1、查看水果的编号;2、设置变量与水果编号一样;3、判断是否一样;4、删除该编号水果
                kc();
                System.out.println("请输入您删除水果的编号;");
                int a = enterInt();
                //遍历水果编号
                for (int i = 0; i < list.size(); i++) {
                        Fruits id = list.get(i);
                        if(a == id.id){
                              list.remove(i);
                              System.out.println("您选择的水果已删除!");
                        }
                }
                System.out.println("对不起,没有找到编号!");
      }
      //添加方法
      public static void tj(){
                //查看水果;
                kc();
                //添加输入信息
                System.out.println("请输入您要添加的水果编号");
                int aid = enterInt();
                //判断输入编号是否重复
                for (int i = 0; i < list.size(); i++) {
                        Fruits id = list.get(i);
                        //编号不重复直接向下运行;
                        if (aid==id.id){
                              System.out.println("您输入的id有误,请重新输入;");
                              return;//直接退出循环
                        }
                }
                System.out.println("请输入您要添加的水果名称");
                String aname = enterString();
                System.out.println("请输入您要添加的水果单价");
                double aprice = enterDouble();
                System.out.println("请输入您要添加的水果单位");
                String aunit = enterString();
                //将录入的内容放进集合里
                //需要一个变量接收数据
                Fruits b = new Fruits();
                b.id = aid;
                b.name = aname;
                b.price = aprice;
                b.unit = aunit;
                list.add(b);
                //提示用户输入成功
                System.out.println("添加水果成功!");
      }
      //修改方法
      public static void xg(){
                //产看水果项
                kc();
                //提示输入修改编号
                System.out.println("请输入您要改的水果编号;");
                //输入修改的编号
                int aid = enterInt();
                //判断修改的编号是否正确
                for (int i = 0; i < list.size(); i++) {
                        Fruits b = list.get(i);
                        if (aid == b.id){
                              System.out.println("请输入您要改的水果名称;");
                              String aname = enterString();
                              System.out.println("请输入您要改的水果单价;");
                              double aprice = enterDouble();
                              System.out.println("请输入您要改的水果单位;");
                              String aunit = enterString();
                              //存进集合内;
                              b.price = aprice;
                              b.name = aname;
                              b.unit = aunit;
                              return;
                        }
                }
                System.out.println("你修改的编号错误!");
                return;
      }
}

qlcyl110 发表于 2017-2-14 12:24

tmpsforjxp 发表于 2017-2-14 08:42
讲真,楼主这努力程度确实值得学习。当年我学C/C++的时候,第十三天还没到这水平。
再加吧劲儿。戒骄戒躁 ...

我没学过C/C++,非编程专业奔三人。入手Java就是没人告诉我学编程先学啥,就自己开始了!不后悔的选择。因为喜爱。准备用2年时间深入学习java在转别的学!
感谢您的支持!希望得到您的指点!再次说声谢谢!

奔跑的尖椒 发表于 2017-3-4 08:19

qlcyl110 发表于 2017-3-3 22:57
哦!是不是用个boolean类型的变量?随时可以退出购物?

比如说
boolean b=true;

while(b){
switch语句块
   3:
   
      b=false;退出购物
         

Quincy379 发表于 2017-2-14 08:08

{:301_993:}挺不错的

gosling 发表于 2017-2-14 08:13

{:301_998:}高手闪人。请问你们都是自学吗?

韩臭臭cc 发表于 2017-2-14 08:16

我也想学

rongzhongli 发表于 2017-2-14 08:26

怎么和c语言差不多

nddb 发表于 2017-2-14 08:34

感觉和C#代码一样的啊

tmpsforjxp 发表于 2017-2-14 08:39

nddb 发表于 2017-2-14 08:34
感觉和C#代码一样的啊

同属C语系

tmpsforjxp 发表于 2017-2-14 08:42

讲真,楼主这努力程度确实值得学习。当年我学C/C++的时候,第十三天还没到这水平。
再加吧劲儿。戒骄戒躁,认真学习。以后你再学新语言时,你会发现,这是你第1小时内就能搞定的事情。

真爱贤 发表于 2017-2-14 09:10

大概看了一下,写的不错。有以下2点建议:1.水果类不要把里面的成员直接暴露,应该私有化,然后用getter和setter来对成员进行操作。2. 方法名不要用没有意义的拼音或者缩写,要用英文。不然别人看着很费劲的!

鴿神 发表于 2017-2-14 09:20

加油加油!
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 【笔记】学习java第十三天,水果超市