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

前言

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

需求(作业题目)

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

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

在这里插入图片描述

在这里插入图片描述
因为没有连接数据库,所以不是持久化存储,程序关闭即数据丢失

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

项目环境

jdk1.7以上

开发工具(IDE)

idea/eclipse

项目结构

在这里插入图片描述

  • 用户
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值