基本类
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);
}
}