网吧计费系统项目

基本类

1.电脑类

package com.xu.netbar.pojo;

import com.xu.netbar.util.DateUtil;

import java.util.Date;
import java.util.Random;

/**
 * 电脑类
 */

public class Computer {
    private Integer num;//机器号:随机
    private RoomType room;//所在房间类型
    private Date stime;//上机时间
    private Date etime;//下机时间
    private Zhuangtai zt;//目前电脑状态
    private Kehu kehu;//客户
    //生成get和set
    public Integer getNum() {
        return num;
    }

    public void setNum(Integer num) {
        this.num = num;
    }

    public RoomType getRoom() {
        return room;
    }

    public void setRoom(RoomType room) {
        this.room = room;
    }

    public Date getStime() {
        return stime;
    }

    public void setStime(Date stime) {
        this.stime = stime;
    }

    public Date getEtime() {
        return etime;
    }

    public void setEtime(Date etime) {
        this.etime = etime;
    }

    public Zhuangtai getZt() {
        return zt;
    }

    public void setZt(Zhuangtai zt) {
        this.zt = zt;
    }

    public Kehu getKehu() {
        return kehu;
    }

    public void setKehu(Kehu kehu) {
        this.kehu = kehu;
    }
    //随机生成机号的方法
    private Integer createId(){
        return new Random().nextInt(100)+1;
    }
    //默认构造

    public Computer() {
        this.num=this.createId();
    }
    //带参构造

    public Computer(RoomType room, Date stime, Date etime, Zhuangtai zt, Kehu kehu) {
        this();
        this.room = room;
        this.stime = stime;
        this.etime = etime;
        this.zt = zt;
        this.kehu = kehu;
    }

    @Override
    public String toString() {
        return "电脑{" +
                "机器号:" + num +
                ", 所在房间:" + room +
                ", 上机时间:" + (stime==null? "未开始":DateUtil.dateTostring(stime))+
                //使用三目运算符判断开始时间是否为空
                ", 下机时间:" + (etime==null? "未结束":DateUtil.dateTostring(etime))+
                //使用三目运算符判断结束时间是否为空
                ", 电脑状态:" + zt+
                ", 客户:" + (kehu==null? "无客户使用":kehu) +
                //使用三目运算符判断客户是否为空
                '}';
    }
}

2.客户类

package com.xu.netbar.pojo;

public class Kehu {
    private String id;//身份证

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public Kehu() {
    }

    public Kehu(String id) {
        this.id = id;
    }

    @Override
    public String toString() {
        return "{" +
                "身份证号:'" + id + '\'' +
                '}';
    }
}

3.两个枚举

        <1>电脑状态枚举

package com.xu.netbar.pojo;

public enum Zhuangtai {
    空闲,占用,自用,维修
}

        <2>房间类型枚举

package com.xu.netbar.pojo;

public enum RoomType {
    大厅,包间
}

服务类

1.网吧服务类接口

package com.xu.netbar.service;

import com.xu.netbar.pojo.Computer;
import com.xu.netbar.pojo.RoomType;

import java.util.HashMap;
import java.util.Map;

/**
 * 创建网吧服务接口
 */
public interface INetBarService {
    //创建一个HashMap对象。
    Map<Integer, Computer> MAP=new HashMap<>();
    //浏览电脑方法
    void fandAll();
//上机方法
    void begin(String id, RoomType type);
//下机方法
    void end(int num);
}

2.网吧服务类实现接口

package com.xu.netbar.service;

import com.xu.netbar.pojo.Computer;
import com.xu.netbar.pojo.Kehu;
import com.xu.netbar.pojo.RoomType;
import com.xu.netbar.pojo.Zhuangtai;
import com.xu.netbar.util.DateUtil;

import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.Date;

public class NetBarService implements INetBarService{
    static {
        //创建电脑对象
        Computer c1=new Computer(RoomType.包间,null,null, Zhuangtai.空闲,null);
        Computer c2=new Computer(RoomType.包间,null,null, Zhuangtai.维修,null);
        Computer c3=new Computer(RoomType.包间,null,null, Zhuangtai.空闲,null);
        Computer c4=new Computer(RoomType.大厅,null,null, Zhuangtai.空闲,null);
        Computer c5=new Computer(RoomType.大厅,null,null, Zhuangtai.自用,null);
        Computer c6=new Computer(RoomType.大厅,null,null, Zhuangtai.空闲,null);
        Computer c7=new Computer(RoomType.大厅,null,null, Zhuangtai.维修,null);
        //将电脑对象存入Map中
        INetBarService.MAP.put(c1.getNum(),c1);
        INetBarService.MAP.put(c2.getNum(),c2);
        INetBarService.MAP.put(c3.getNum(),c3);
        INetBarService.MAP.put(c4.getNum(),c4);
        INetBarService.MAP.put(c5.getNum(),c5);
        INetBarService.MAP.put(c6.getNum(),c6);
        INetBarService.MAP.put(c7.getNum(),c7);
    }
    //重写接口中的浏览电脑方法
    @Override
    public void fandAll() {
        //使用foreach循环遍历Map
        for (Computer c:MAP.values()){
            System.out.println(c);
        }

    }
//重写上机方法
    @Override
    public void begin(String id, RoomType type) {
        //根据身份证创建客户对象
        Kehu kehu=new Kehu(id);
        //选择房间类型
        Computer c1=null;
        for (Computer c:MAP.values()){
            //使用if判断房间类型是否与用户选择的一致
            //并且判断电脑状态是否为空闲
            if (c.getRoom().equals(type) && c.getZt()==Zhuangtai.空闲){
                //如果满足判断(将c赋值给c1)
                c1=c;
                break;
            }
        }
        if (c1==null){
            System.out.println("对不起,未找到空闲电脑");
        }else{
            //对电脑和用户进行绑定
            c1.setKehu(kehu);
            //设置上机时间为当前系统时间
            c1.setStime(new Date());
            //修改电脑状态为占用
            c1.setZt(Zhuangtai.占用);
            System.out.println("上机成功!");
        }
    }
//重写下机方法
    @Override
    public void end(int num) {
        Computer com=null;
        //根据机号找到对应的电脑
        for (Computer c:MAP.values()){
            if (num==c.getNum()){
                com=c;
                break;
            }
        }
        if (com==null){
            System.out.println("对不起,输入的机号有误!");
            return;
        }
        else
        {
            //生成结束时间
            com.setEtime(new Date());
            //计算产生费用

            float time=(com.getEtime().getTime()-com.getStime().getTime())/1000/60f;
            //使用switch判断,客户使用电脑的所在房间
            float money=0f;
            switch (com.getRoom()){
                case 包间:
                    money=time*0.8f;
                    break;
                case 大厅:
                     money=time*0.5f;
                    break;
            }
            System.out.println("您本次消费¥"+money+"元");
            //修改对应电脑的状态
            com.setZt(Zhuangtai.空闲);
            try {
                Writer w=new FileWriter("pay.txt");
                w.write("开始时间:"+ DateUtil.dateTostring(com.getStime())+"\n");
                w.write("结束时间:"+ DateUtil.dateTostring(com.getEtime())+"\n");
                w.write("消费金额:¥"+ money+"元");
                w.close();
            } catch (IOException e) {
                System.out.println(e.getMessage());
            }

            //解绑用户和电脑
            com.setKehu(null);
            //清空时间
            com.setStime(null);
            com.setEtime(null);
            System.out.println("下机成功,欢迎下次光临");
        }
    }
}

工具类

1.日期工具类

package com.xu.netbar.util;

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateUtil {
    private static final SimpleDateFormat SDF=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
    public static String dateTostring(Date date){
        if(date!=null)
            return SDF.format(date);
        return null;
    }
}

视图显示效果

package com.xu.netbar.view;

import com.xu.netbar.pojo.RoomType;
import com.xu.netbar.service.INetBarService;
import com.xu.netbar.service.NetBarService;

import java.util.Scanner;

public class NetBarView {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        int m=0;
        INetBarService ibs=new NetBarService();
        do {
            System.out.println("1.浏览电脑 2.上机 3.下机 4.退出");
            m=in.nextInt();
            switch(m){
                case 1://浏览电影
                    ibs.fandAll();
                    break;
                case 2://上机
                    while(true) {
                        System.out.println("请输入用户的身份证号:");
                        String id = in.next();
                        if (id.length() == 18) {
                            System.out.println("请选择房间类型:1.大厅 2.包间");
                            int a = in.nextInt();
                            RoomType type = (a == 1 ? RoomType.大厅 : RoomType.包间);
                            ibs.begin(id, type);
                            break;
                        } else {
                            System.out.println("身份证输入错误!请重新输入");
                        }
                    }break;
                case 3://下机
                    System.out.println("请输入要下机机号:");
                    int b=in.nextInt();
                    ibs.end(b);
                    break;
                case 4://退出
                    System.out.println("确定退出吗?y/n");
                    String n=in.next();
                    if (n.equalsIgnoreCase("y")){
                        System.out.println("再见,欢迎下次光临!");
                        System.exit(0);
                    }
                    else{
                        System.out.println("请继续操作!");
                    }
                    break;
            }
        }while(m<=4);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值