欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java作业-控制台小商城(含源码)

程序员文章站 2022-04-25 09:58:19
...

前言

堂弟的作业,不会做,请教我,时间很短,我就写了一个demo。 用于小白学习用吧,加深对Java的应用和理解。没基础的可以试着自己先写一写。

需求(作业题目)

共包含个模块:
登录(Login)、
用户(User)、
VIP用户(继承自User )、
普通用户(继承自User )、
管理员(继承自User )、
购物模块(Shop)

  • 登录模块:用于用户登录及权限选择(是VIP还是普通用户)
  • 用户模块:共有属性(均设置为私有变量)及共有方法
  • VIP用户:拥有购物、充值、注销账户、抽奖、修改密码等权限(其中部分方法为对父类方法的重写)
  • 普通用户:拥有购物、注销账户、修改密码等权限(其中部分方法为对父类方法的重写)
  • 管理员:拥有修改商品价格、增加商品、注销账户、修改密码等权限(其中部分方法为对父类方法的重写)
  • 购物模块:用于用户购物选择
效果图

Java作业-控制台小商城(含源码)

Java作业-控制台小商城(含源码)
因为没有连接数据库,所以不是持久化存储,程序关闭即数据丢失

程序写完没有详细测试,估计会有一些校验错误

项目环境

jdk1.7以上

开发工具(IDE)

idea/eclipse

项目结构

Java作业-控制台小商城(含源码)

  • 用户
package cn.jason.login;
/**
 * 用户对象
 * Created by Administrator on 2019/3/30 0030.
 * 公共功能:
 *  1.登录
 *  2.注销
 *  3.修改密码
 *
 *
 * 约定:
 *  0 -- 普通用户
 *  1 -- vip 用户
 *  2 -- 管理员用户
 */
public class User {

    /**
     * 无参构造
     */
    public User() {
    }

    /**
     * 登录
     * @param username 用户名
     * @param password 密码
     * @return
     */
    public boolean login(String username, String password) {
        // nothing to do !
        // 用作父类, 什么都不做
        return false;
    }


    /**
     * 注销
     * @param username 用户名
     * @param password 密码
     * @return
     */
    public boolean cancel(String username , String password) {
        // nothing to do !
        return false;
    }


    /**
     * 修改密码
     * @param username 用户名
     * @param password 密码
     * @return
     */
    public boolean update(String username , String password) {
        // nothing to do !
        return false;
    }

}

  • Vip用户
package cn.jason.login;


import cn.jason.util.FileReaderUtil;

/**
 * vip 用户
 * Created by Jason on 2019/3/30 0030.
 */
public class VipUser extends User{

    // 幸运数字 1~6
    private static final Integer LUCK_NUMBER_ONE = 1;

    private static final Integer LUCK_NUMBER_TWO = 2;

    private static final Integer LUCK_NUMBER_THREE = 3;

    private static final Integer LUCK_NUMBER_FOUR = 4;

    private static final Integer LUCK_NUMBER_FVIE = 5;

    private static final Integer LUCK_NUMBER_SIX = 6;

    // 状态可用
    private static final String STATUS_ABLE = "able";
    // 状态不可用
    private static final String STATUS_DISABLE = "disable";

    /**
     * 购买商品操作
     * @param gname 商品名称
     * @return
     */
    public boolean buy(String gname,Integer num) {

        String name = FileReaderUtil.getContent("goods.name"); // 商品名称
        String priceStr = FileReaderUtil.getContent("goods.price"); // 商品单价
        // 转型
        // 单价
        int price = Integer.valueOf(priceStr);
        // 账户余额
        int money = Integer.valueOf(FileReaderUtil.getContent("vip.account.money"));
        if (gname.equals(name)) {
            if (money<(price*num)) {
                System.out.println("余额不足, 请充值!");
            }else {
                System.out.println("恭喜您,购买成功!");
               int coins = money-(price*num);
                Integer gnum = Integer.valueOf(FileReaderUtil.getContent("goods.num")); // 商品名称
                gnum = gnum - num;
                // 减少商品数量
                FileReaderUtil.updateContent("goods.num",gnum+"");
                // 更新余额
               return FileReaderUtil.updateContent("vip.account.money",coins+"");
            }
        }else
            System.out.println("对不起,没有该商品!");
        return false;
    }

    /**
     * 充值
     * @param password 密码
     * @param count 充值多少?
     * @return
     */
    public boolean recharge(String password , Integer count) {
        String pass = FileReaderUtil.getContent("vip.account.pass");
        if (pass.equals(password)) {
            // 获取余额
            String money = FileReaderUtil.getContent("vip.account.money");
            System.out.println("您原来的余额为:"+money);
            // 充值
            count = Integer.valueOf(money)+count;
            System.out.println("您现在的余额为:"+count);
            return FileReaderUtil.updateContent("vip.account.money",count+"");
        }else
            System.out.println("密码不正确, 无法充值!");
        return false;
    }


    /**
     * 抽奖
     * @param num 输入的幸运数字
     * @return
     */
    public void lotteryDraw(Integer num) {
        if (num == LUCK_NUMBER_ONE)
            System.out.println("很遗憾,您没有中奖-。-!");
        else if (num == LUCK_NUMBER_TWO)
            System.out.println("谢谢惠顾");
        else if(num == LUCK_NUMBER_THREE)
            System.out.println("谢谢惠顾");
        else if (num == LUCK_NUMBER_FOUR)
            System.out.println("谢谢惠顾");
        else if(num == LUCK_NUMBER_FVIE)
            System.out.println("谢谢惠顾");
        else if (num == LUCK_NUMBER_SIX)
            System.out.println("恭喜您获得一等奖:iPhone xs max 一台");
        else
            System.out.println("");
    }

    // 重写父类方法 - 登录
    @Override
    public boolean login(String username, String password) {
        if (username!=null&&password!=null) {
            String name = FileReaderUtil.getContent("vip.account");
            String pass = FileReaderUtil.getContent("vip.account.pass");
            // 校验账号是否被注销
            String status = FileReaderUtil.getContent("vip.account.status");
            if (!status.equals(STATUS_ABLE)) {
                System.out.println("很抱歉,您的账号已被注销,无法进行登陆!");
                return false;
            }
            // 验证登陆
            if (username.equals(name)&&password.equals(pass)) {
                return true;
            }else
                System.out.println("用户名或者密码不正确");
        }else
            System.out.println("用户名,密码不能为空!");
        return false;
    }

    // 重写父类方法 - 注销
    @Override
    public boolean cancel(String username, String password) {
        System.out.println("尊敬的VIP用户,正在为您注销账户!");
        // 校验账号是否被注销
        String status = FileReaderUtil.getContent("vip.account.status");
        if (!status.equals(STATUS_ABLE)) {
            System.out.println("您的账号已被注销,请勿重复操作!");
            return false;
        }
        // 注销
        String name = FileReaderUtil.getContent("vip.account");
        String pass = FileReaderUtil.getContent("vip.account.pass");
        if (username.equals(name)&&password.equals(pass)) {
            String statusKey = "vip.account.status";
            return FileReaderUtil.updateContent(statusKey,STATUS_DISABLE);
        }else
            System.out.println("账户密码不对,不能修改!");
        return false;
    }


    // 重写父类方法 - 修改密码
    @Override
    public boolean update(String username, String password) {
        System.out.println("【尊敬的vip, 正在为您修改密码!】");
        // 校验
        if (username == null||password == null) {
            System.out.println("用户名或者密码不能为空!");
            return false;
        }

        // 校验账号是否被注销
        String status = FileReaderUtil.getContent("vip.account.status");
        if (!status.equals(STATUS_ABLE)) {
            System.out.println("很抱歉,您的账号已被注销,无法进行修改!");
            return false;
        }

        // 读取账号
        String name = FileReaderUtil.getContent("vip.account");
        // 匹配账号
        if (username.equals(name)) {
            // 获取 vip密码对应的键
            String passKey = "vip.account.pass";
            // 开始修改密码 成功返回true
            return FileReaderUtil.updateContent(passKey,password);
        }else{
            // 匹配账号失败
            System.out.println("您输入的账户名称错误, 修改密码失败!");
            return false;
        }

    }
}

  • 管理员
package cn.jason.login;


import cn.jason.util.FileReaderUtil;

/**
 * 管理员用户
 * Created by Jason on 2019/3/31 0031.
 */
public class AdminUser extends User{

    // 状态可用
    private static final String STATUS_ABLE = "able";
    // 状态不可用
    private static final String STATUS_DISABLE = "disable";

    /**
     * 增加商品
     * @param gname  商品名称
     * @param number 商品数量
     * @return
     */
    public boolean addGoods(String gname,Integer number) {
        String goodsName = FileReaderUtil.getContent("goods.name");
        if (gname.equals(goodsName)) {
            Integer goodsNum = Integer.valueOf(FileReaderUtil.getContent("goods.num"));
            number = goodsNum+number;
            FileReaderUtil.updateContent("goods.num",number+"");
            System.out.println("剩余商品数量为:"+number);
            return true;
        }else
            System.out.println("没有该类商品,请选择正确的商品名称!");
        return false;
    }

    /**
     * 修改商品名称
     * @param gname 商品名称
     * @param money 商品单价
     * @return
     */
    public boolean updateGoodsPrice(String gname, Integer money) {
        String goodsName = FileReaderUtil.getContent("goods.name");
        if (gname.equals(goodsName)) {
            Integer goodsPrice = Integer.valueOf(FileReaderUtil.getContent("goods.price"));
            money = goodsPrice+money;
            FileReaderUtil.updateContent("goods.price",money+"");
            System.out.println("商品单价为:"+money);
            return true;
        }else
            System.out.println("没有该类商品,请选择正确的商品名称!");
        return false;
    }
    // 修改商品

    // 重写父类方法 - 登录
    @Override
    public boolean login(String username, String password) {
        if (username!=null&&password!=null) {
            String name = FileReaderUtil.getContent("admin.account");
            String pass = FileReaderUtil.getContent("admin.account.pass");
            // 校验账号是否被注销
            String status = FileReaderUtil.getContent("admin.account.status");
            if (!status.equals(STATUS_ABLE)) {
                System.out.println("很抱歉,您的账号已被注销,无法进行登陆!");
                return false;
            }
            // 验证登陆
            if (username.equals(name)&&password.equals(pass)) {
                return true;
            }else
                System.out.println("用户名或者密码不正确");
        }else
            System.out.println("用户名,密码不能为空!");
        return false;
    }

    // 重写父类方法 - 注销
    @Override
    public boolean cancel(String username, String password) {
        System.out.println("尊敬的管理员用户,正在为您注销账户!");
        // 校验账号是否被注销
        String status = FileReaderUtil.getContent("admin.account.status");
        if (!status.equals(STATUS_ABLE)) {
            System.out.println("您的账号已被注销,请勿重复操作!");
            return false;
        }
        // 注销
        String name = FileReaderUtil.getContent("admin.account");
        String pass = FileReaderUtil.getContent("admin.account.pass");
        if (username.equals(name)&&password.equals(pass)) {
            String statusKey = "admin.account.status";
            return FileReaderUtil.updateContent(statusKey,STATUS_DISABLE);
        }else
            System.out.println("账户密码不对,不能修改!");
        return false;
    }


    // 重写父类方法 - 修改密码
    @Override
    public boolean update(String username, String password) {
        System.out.println("【尊敬的管理员用户, 正在为您修改密码!】");
        // 校验
        if (username == null||password == null) {
            System.out.println("用户名或者密码不能为空!");
            return false;
        }

        // 校验账号是否被注销
        String status = FileReaderUtil.getContent("admin.account.status");
        if (!status.equals(STATUS_ABLE)) {
            System.out.println("很抱歉,您的账号已被注销,无法进行修改!");
            return false;
        }

        // 读取账号
        String name = FileReaderUtil.getContent("admin.account");
        // 匹配账号
        if (username.equals(name)) {
            // 获取 vip密码对应的键
            String passKey = "admin.account.pass";
            // 开始修改密码 成功返回true
            return FileReaderUtil.updateContent(passKey,password);
        }else{
            // 匹配账号失败
            System.out.println("您输入的账户名称错误, 修改密码失败!");
            return false;
        }

    }
}

代码下载:
百度云下载点这里
提取码:7s2y