美文网首页计算机杂谈程序员大数据
【寒假学Java】微型项目--控制台商城逻辑实现

【寒假学Java】微型项目--控制台商城逻辑实现

作者: 张照博 | 来源:发表于2018-01-26 20:07 被阅读154次

    正文之前

    今天本来是准备学一天Java,为此我早上准备了一个7点半的《Fade》的超大闹钟,而且我没法停下(树莓派连接音响的定时任务)。醒倒是醒过来了,但是看着手机满满的电以及窗外的雪❄️,我总感觉太早起床不太好。所以,一直玩手机到10点半,总算把前面欠下的一些番给补完了。(没错,我说的就是以前推荐过的《一人之下》,我觉得还挺好看的。)中午去我妈打麻将的麻将馆里面蹭了一顿饭,下午回来把《蜘蛛侠.英雄归来.Spider-Man.Homecoming.2017.中英字幕.BDrip.AAC.720p.x264-人人影视》看完(前面就是磁力链接),小蜘蛛表现还是不错的。至于一些人老是批评用钢铁侠这个大ip来带小ip,我觉得好像不是这样吧,钢铁侠虽然也露了很多面,但是实际上来说,主线依旧是小蜘蛛。如果说从这就可以看衰漫威的话,那我还是很不赞同的。好了,回到正题,今天把《手把手教你学java》这本书看完了基础部分,后面有一点点的上机任务,虽然没有代码,但是大概思路给我理了一下,然后结合我自己的想法,才有了今天这个微型项目。

    正文

    我做的这个商城,页面类似于淘宝。首先是,有一个选项--是否登陆?

    如果不登陆的话,还有一个选项是退出系统。

    可以看下图,1、登录系统,2、退出系统。

    那么常规选项肯定就直接是进入系统了。我也没有弄密码和账户这些东西,因为还没有链接数据库吗。所以就只要选择1 就可以直接进入主目录。

    进去主目录之后呢,有四个选项,第一个选项是查看以及设置用户信息,第二个选项是购物,第三个选项是查看购物车,第四个选项是退出系统。

    在第一个选项里面有四个子项目,分别是设置用户名,设置用户id,查看购物车,以及返回上一级目录。

    如果用户不选择第四个选项的话,就会一直在这一个子页面里面打转。

    那么当我们回到主目录的时候,可以查看第二个选项,里面是购物,我一共只设置了七种商品,以及退出购物界面选项

    当然,这里的退出界面其实就等于是没有买什么东西,而买了任何一件商品之后,都会直接回到主页面。

    至于主界面第三个选项,就十分好理解了,其实这只是用户信息界面的一个子项,但是我模仿一下淘宝,在个人信息里面可以查看购物车,在主界面也可以查看购物车。

    第四个选项就毫无意外的先退出主界面,然后退出系统。

    PS:也许你看到前面是欢迎颜雨薇同学进店观看,后面又是goodbye张照博。前后不一是吧,但是这只是因为我没有设置用户名变量在欢迎语中,如果你设置一下的话其实就可以了。因为我写这个是写给我妹子的。至于输入用户名的时候,一不小心手贱了一下。见谅!~~

    代码如下所示,整体布局见下图。因为这个项目实在很简单,所以没有细讲具体的逻辑结构,只讲了一下商城的布局。如果有耐心想要看一下的朋友,想必可以几下就看完,如果没耐心的话,我也不浪费那么多时间来细细的讲解我自己的想法了。当然,同时还有很多在注释中已经说明了的。各位看官见谅啦!容我为你送上一顶原谅帽(just a joke)。

    (对我的工作环境,有兴趣的朋友可以看我前面这一篇文章之前两章,里面有写哦)

    ***************** LoginMenu.java *****************
    /*
    * 显示系统初始界面菜单
    */
    
    //package com.yywzzb.oop;
    
    //import java.rmi.server.ExportException;
    //输入输出
    import java.util.Scanner;
    import com.yywzzb.oop.MainMenu;
    import com.yywzzb.oop.Price;
    import com.yywzzb.oop.Customer;
    //其实也可以直接用import com.yywzzb.oop.*代替吧
    
    
    public class LoginMenu {
        public static  void main (String[] args){
            //显示初始登录界面
            System.out.println("\n\n\t\t\t 欢迎颜雨薇同学光临我们的Shop System"+"\n\n");
            System.out.println("\t\t\t\t 1. Login to The XNC Shopping System!\n\n");
            System.out.println("\t\t\t\t 2. Exit The System!\n\n");
            Scanner Login = new Scanner(System.in);
            System.out.println("\t\t Please Input: ");
            int in = Login.nextInt();
            //不管登陆没登陆,先定一个用户实例,用户实例的具体内容请见另外一个文件,也就是一开始导入的ustomor类
            Customer man=new Customer();
            if(in==1)
            {
                Price pr=new Price();
                Scanner Op = new Scanner(System.in);
                //当确定用户登录之后,进入主界面
                /*
                * 因为嫌麻烦,所以我直接定义一个主界面的类。
                * 而不是定义一个方法。
                * 好吧,我承认那会儿是我还才开始写,理不太新思路瞎写的。
                * 后来发现用着蛮方便就没改了。
                */
                MainMenu Menu=new MainMenu();
                //定义一个主界面的实例。然后当需要回到主界面的时候,直接调用实例的方法就可以了
                Menu.MainMenu();
                int op=0;
                //对输入的数据进行识别,然后去相对应的界面
                while (op!=4) {
    //                System.out.println("\t\t Please Input: ");
                    op=Op.nextInt();
                    switch (op) {
                        case 1:
                            //当对用户的管理界面结束的时候回到主界面
                            /*
                            * 进入用户设置界面的话。通过调用用户类实例的Mange方法,可以对用户信息进行管理
                            * 注意当进入这一个子页面的时候,就已经进入了用户实例的管理界面。
                            * 当然还是在主函数中,只不过是调用了Mange函数而已。
                             */
                            man.Mange();
                            Menu.MainMenu();
                            break;
                        case 2:
                            //另外我还专门定义了一个类Price
                            //来存放一些关于购物清单的信息以及如何从输入得到物品的价格。
                            //说自己是物品会不会不太好??
                            pr.showList();
                            int price = 0;
                            int x=Op.nextInt();
                            if(x!=8) {
                                //请注意虽然这里是在购物,但是最终的数据去向是用户信息实例里面去了
                                //具体的可以看下面的 man.AddGoods(price);这一操作
                                price = pr.SwitchToPrice(x);
                                man.AddGoods(price);
                            }
                            //回到主界面
                            Menu.MainMenu();
                            break;
                        case 3:
                            System.out.println("\t\t************* Show The Goods *************\n");
                            //其实我个人感觉好像用户信息类才是主体
                            /*
                            * 你看所有的选项都要用到它,当然这确实是废话
                            * 因为个性化的原因,所以必须对个人信息进行高度的集成化处理
                            * 所以才有了我们的用户类
                             */
                            man.ShowGoods();
                            //当用户的购物车信息展示四秒钟后。
                            // 再默认回到主界面。
                            // 后期可以改为手动回到主界面。
                            try {
                                Thread.sleep(4000);
                            }
                            catch (Exception e){
                                System.out.println(e);
                        }
                            Menu.MainMenu();
                            break;
                        case 4:
                            /*
                            * 因为我在while循环里面设置:
                            * 如果操作数!=4,就会一直无限循环
                            * 那么当操作数为4的时候,就会打破整个循环,从而运行到main的后面直至结束。
                             */
                            System.out.println("\t\tGoodBye!"+man.getName()+" Thanks for your Shopping!");
                            break;
                    }
                    if(op!=4){
                        System.out.println("Please Input the Next Action: ");
                    }
                }
            }
    //        else if (in==2)
    //        {
                System.out.println("\n\n\t\t 感谢光临我们的Shop System,期待与您下次相遇\n\n");
    //        }
        }
    }
    
    ***************** Customer.java *****************
    package com.yywzzb.oop;
    
    import java.util.Scanner;
    
    public class Customer{
        //用户默认设置五个属性:
        // 分别是名字,编号,商品清单,商品总数目以及商品花费总额,
        private String name="Somebody";
        private int ID=0;
        /*
        * 当然,我们的商品清单有点小瑕疵
        * 那就是只有编号以及价格,而没有具体的名字。
        * 我想如果在真正的数据库操作中那是肯定可以有的,
        * 在这里我就懒得用map一个一个键值对上了
         */
        private int[] Goods=new int[8];
        private int Sum=0;
        private int money=0;
        //下面是一些常见的封装以及获取内部信息的方法
        public void setName(String name){
            this.name=name;
        }
        public String getName(){
            return this.name;
        }
        public void setID(int id){
            this.ID=id;
        }
        public void ShowGoods(){
            System.out.println("\t\t\t\tNow you have "+this.Sum+" Goods\n\n");
            for(int i=1;i<=this.Sum;++i)
            {
                System.out.println("\t\t\t\tThe "+i+" good's price is "+this.Goods[i]+"\n");
            }
            System.out.println("\t\t\tYou have bought "+this.money+" Yuan 张照博\n");
    
    //        Scanner exe = new Scanner(System.in);
    //        System.out.println("Enter any Key to Continue");
    //        String s=exe.next();
        }
        //增加商品也就是主目录中第2个选项下的操作的主要方法。
        public void AddGoods(int price){
            this.Sum++;
            this.money = this.money + price;
            this.Goods[this.Sum]=price;
        }
    
        public void Mange(){
            //这里就是全篇最重要的  **用户信息设置界面**
            System.out.println("\n\n\t\t\t 欢迎颜雨薇同学光临我们的Shop System"+"\n\n");
            System.out.println("\t\t\t\t 1. 设置姓名\n\n");
            System.out.println("\t\t\t\t 2. 设置编号\n\n");
            System.out.println("\t\t\t\t 3. 查看购物车\n\n");
            System.out.println("\t\t\t\t 4. 返回上一级\n\n");
            Scanner exe = new Scanner(System.in);
            Scanner e = new Scanner(System.in);
            int In=0;
            //这里也是采用操作数的老套路,前面已经说过了。
            while(In!=4) {
                System.out.println("Please Input the User's Action: ");
                In = exe.nextInt();
                switch (In) {
                    case 1:
                        System.out.println("\t\t Please Input Name: ");
                        String name = e.nextLine();
                        setName(name);
                        break;
                    case 2:
                        System.out.println("\t\t Please Input ID: ");
                        int ID = e.nextInt();
                        setID(ID);
                        break;
                    case 3:
                        System.out.println("\t\t Show The Goods\n");
                        ShowGoods();
                        break;
                    case 4:
                        break;
                }
            }
        }
    }
    
    
    ***************** Price.java *****************
    package com.yywzzb.oop;
    
    public class Price {
        public void showList(){
            //这里真的只是一个商品的清单打印界面
            System.out.println("\n\n\t\t\t 欢迎颜雨薇同学光临我们的Shop System"+"\n\n");
            System.out.println("\t\t\t\t 1. 张照博10斤  ---  1000元\n");
            System.out.println("\t\t\t\t 2. 张照博20斤  ---  1800元\n");
            System.out.println("\t\t\t\t 3. 张照博40斤  ---  3500元\n");
            System.out.println("\t\t\t\t 4. 张照博50斤  ---  4000元\n");
            System.out.println("\t\t\t\t 5. 张照博100斤 ---  7000元\n");
            System.out.println("\t\t\t\t 6. 张照博150斤 ---  10000元\n");
            System.out.println("\t\t\t\t 7. 张照博整只  ---  88888元\n");
            System.out.println("\t\t\t\t 8. 退出购买页\n");
        }
        public int SwitchToPrice(int x){
            //这个是从商品的序号直接变成价格
            // 方便统计购买物品的重量以及总价
            int price=0;
            int weight=0;
            switch (x){
                case 1:
                    price = 1000;
                    weight=10;
                    break;
                case 2:
                    price = 1800;
                    weight=20;
                    break;
                case 3:
                    price = 3500;
                    weight=40;
                    break;
                case 4:
                    price = 4000;
                    weight=50;
                    break;
                case 5:
                    price = 7000;
                    weight=100;
                    break;
                case 6:
                    price =10000;
                    weight=150;
                    break;
                case 7:
                    price = 88888;
                    weight=170;
                    break;
                case 8:
                    break;
            }
            System.out.println("\t\t******恭喜你购得新鲜张照博"+weight+"斤,价格为"+price+"******\n\n\n\n");
            return price;
        }
    }
    
    ***************** MainMenu .java *****************
    package com.yywzzb.oop;
    //import java.util.Scanner;
    
    public class MainMenu {
        public void MainMenu() {
            //本次微型项目的最大败笔!!!!!!!!!
            System.out.println("\n\n\t\t\t 欢迎颜雨薇同学光临我们的Shop System" + "\n\n\n");
            System.out.println("\t\t\t\t 1. 客户管理\n\n");
            System.out.println("\t\t\t\t 2. 倾情购物\n\n");
            System.out.println("\t\t\t\t 3. 购物清单\n\n");
            System.out.println("\t\t\t\t 4. 退出系统\n\n");
            }
    }
    

    正文之后

    容我测试下,不用IDLE是如何操作?我预感是删除package那一句,然后把四个文件全部放在一个文件夹下,分别编译一次(顺序按照引用先后),记得在main类中import后删除 com.yywzzb.oop. 我去树莓派上试试!!

    经过测试:如果没有IDLE的话,只要删除掉package有关语句,以及import那几个com.yywzzb.oop的语句即可。效果如下:最终改动如下:

    其他类似

    相关文章

      网友评论

        本文标题:【寒假学Java】微型项目--控制台商城逻辑实现

        本文链接:https://www.haomeiwen.com/subject/onvwaxtx.html