计算机杂谈程序员大数据

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

2018-01-26  本文已影响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的语句即可。效果如下:最终改动如下:

其他类似
上一篇下一篇

猜你喜欢

热点阅读