Java实现CD出租销售商店

实现功能

  • 管理会员:增加、删除、查找、充值、输出
  • 管理CD:增加、删除、查找、输出
  • 主要功能:出租、归还、销售、统计收入

实现思路

  • Disk类:存储每个CD的信息,如ID、名字、价格、种类、库存等。
  • DiskBook类:作为一个CD仓库,实现CD的整体调度。
  • User类:存储每个会员的信息,如ID、名字、存款、VIP等级等。注意,每一个会员有一个DiskBook,用来存储会员借的CD。
  • UserBook类:作为一个会员登记本,实现与会员有关的功能的整体调度。
  • Owner类:作为商店的主人,拥有一个DiskBook和UserBook,来实现各种功能。用户使用该程序时,是通过Owner类来调用各种功能。
  • 注意:Disk和User类需要重载equals和toString方法。

Disk.java

import java.util.Objects;

public class Disk {
	private int id; 
	private String name;
	private double price;
	private int stock; //CD的库存
	private Genre genre; //CD的音乐种类
	public Disk(int i,String n,double p,int s,Genre g) {
		id=i;
		name=n;
		price=p;
		stock=s;
		genre=g;
	}
	public int getId() {
		return id;
	}
	public double getPrice() {
		return price;
	}
	public int getStock() {
		return stock;
	}
	public void setStock(int s) {
		stock+=s;
	}
	public Genre getGenre() {
		return genre;
	}
	@Override
	public int hashCode() {
		return Objects.hash(id,name,stock,price);
	}
	@Override
	public boolean equals(Object obj) { //判断两个CD是否相等
		if(this==obj) //如果就是自己
			return true;
		if(obj==null) //如果CD不存在
			return false;
		if(getClass()!=obj.getClass()) //如果CD和自己类不同
			return false;
		Disk d=(Disk) obj; //向下转型
		return id==d.id&&Objects.equals(name, d.name)&&price==d.price&&Objects.equals(genre, d.genre); //每个成员都分别相等才可以
	}
	@Override
	public String toString() {
		return "CD "+name+" "+id+" price: "+price+" stock: "+stock;
	}
}

DiskBook.java

import java.util.*;

public class DiskBook {
	private int maxSize=10000; //CD库最大存储量
	private Disk[] data=new Disk[maxSize];
	private int capacity=0; //CD库真实容量
	public void addDisk(Disk d) {
		for(int i=0;i<capacity;i++) { 
			if(data[i]==d) { //如果CD已经存在库存里
				data[i].setStock(d.getStock()); //增加该CD的库存量
				return;
			}
		}
		//如果CD没有在库存中
		if(capacity<maxSize) { //如果仓库还有容量
			data[capacity]=d; //增加新的CD
			capacity++;
		}
		else //如果仓库没有容量了
			System.out.println("Too many CDs!");
	}
	public Disk findDisk(int id) { //寻找CD
		for(int i=0;i<capacity;i++) {
			if(data[i].getId()==id&&data[i].getStock()!=0)
				return data[i];
		}
		return null;
	}
	public boolean removeDisk(int id) { //删除CD
		for(int i=0;i<capacity;i++) { //遍历所有用户
			if(findDisk(id)!=null) { //找到要删除的用户
				for(int j=i;j<capacity-1;j++) //将后面所有的用户往前移一格
					data[j]=data[j+1];
				data[capacity]=new Disk(0,null,0,0,Genre.JAZZ); 
				capacity--;
				return true;
			}		
		}
		//如果找不到该用户
		System.out.println("Disk doesn't exist!");
		return false;
	}
	public void rent(int id,int num) { //出租CD
		Disk d=findDisk(id);
		if(d==null) { //如果找不到该CD
			System.out.println("Can't find the disk!");
			return;
		}
		if(d.getStock()<num) { //如果该CD的库存量不够
			System.out.println("Only "+d.getStock()+" disk(s) left!");
			num=d.getStock(); //将该CD剩余的全部出租
		}
		d.setStock(-num); //更新库存
		if(d.getStock()==0)
			capacity--;
		System.out.println("User rent "+num+" disk(s)!");
	}
	public void returnBack(int id,int num) { //还CD
		Disk d=findDisk(id);
		if(d==null) { //如果找不到该CD
			System.out.println("Can't find the disk!");
			return;
		}
		if(d.getStock()==0) //这步判断一定要在更新库存之前
			capacity++;
		d.setStock(num); //更新库存
		System.out.println("User returned "+num+" disk(s)!");
	}
	public void buy(int id,int num) { //出售CD
		Disk d=findDisk(id);
		if(d==null) { //如果找不到该CD
			System.out.println("Can't find the disk!");
			return;
		}
		if(d.getStock()<num) { //如果该CD库存不够
			System.out.println("Only "+d.getStock()+" disk(s) left!");
			num=d.getStock(); //将该CD剩余的全部出售
		}
		d.setStock(-num); //更新库存
		if(d.getStock()==0)
			capacity--;
		System.out.println("User bought "+num+" disk(s)!");
	}
	public void searchDisk(Genre g) { //根据音乐种类寻找并输出CD
		for(int i=0;i<capacity;i++) {
			if(data[i].getGenre()==g)
				System.out.println(data[i]);
		}
	}
	public boolean isEmpty() { //判断CD库是否为空
		return capacity==0;
	}
	@Override
	public String toString() { //重载输出,打印CD库中的每一个CD信息
		String output="DiskBook"+'\n';
		for(int i=0;i<capacity;i++) {
			output+=data[i];
			output+='\n';
		}
		return output;
	}
}

User.java

import java.util.Objects;

public class User {
	private int id;
	private String name;
	private double deposit; //会员账户里的存款
	private VIPClass vipClass; //VIP等级
	private double[] discount={0.9,0.8,0.7,0.6}; //不同VIP等级有不同的折扣
	private final double rentDiscount=0.5; //租借CD是CD售价的五折
	private DiskBook rentRecord=new DiskBook(); //记录用户租借的CD
	User(int i,String n,double d){
		id=i;
		name=n;
		deposit=d;
		if(deposit>10000) //根据充值金额不同决定会员的等级
			vipClass=VIPClass.DIAMOND;
		else if(deposit>6000)
			vipClass=VIPClass.GOLD;
		else if(deposit>3000)
			vipClass=VIPClass.SILVER;
		else
			vipClass=VIPClass.BRONZE;
	}
	public int getId() {
		return id;
	}
	public double getDeposit() {
		return deposit;
	}
	public void setDeposit(double d) {
		deposit+=d;
	}
	public double rent(Disk d, int num) { //租借CD
		rentRecord.addDisk(d); //加到会员的租借本上
		double pay=d.getPrice()*num*rentDiscount; //计算应付的钱
		switch(vipClass) {
		case BRONZE:
			pay*=discount[0];
			break;
		case SILVER:
			pay*=discount[1];
			break;
		case GOLD:
			pay*=discount[2];
			break;
		case DIAMOND:
			pay*=discount[3];
			break;
		}
		if(deposit<pay) { //如果存款不够付钱
			System.out.println("RENT FAILURE: Not enough deposit! Please recharge!");
			return 0;
		}
		setDeposit(-pay); //付钱
		System.out.println("RENT SUCCESS: You have "+getDeposit()+" left in your account!");
		return pay; //返回收入
	}
	public void returnBack(Disk d, int num) { //还CD
		Disk temp=rentRecord.findDisk(d.getId());
		if(temp!=null&&num>0&&num<=temp.getStock())
			rentRecord.returnBack(d.getId(), num); //从会员的租借本上删除
	}
	public double buy(Disk d, int num) { //购买CD
		double pay=d.getPrice()*num; //计算应付的钱
		switch(vipClass) {
		case BRONZE:
			pay*=discount[0];
			break;
		case SILVER:
			pay*=discount[1];
			break;
		case GOLD:
			pay*=discount[2];
			break;
		case DIAMOND:
			pay*=discount[3];
			break;
		}
		if(deposit<pay) { //如果存款不够付钱
			System.out.println("BUY FAILURE: Not enough deposit! Please recharge!");
			return 0;
		}
		setDeposit(-pay); //付钱
		System.out.println("BUY SUCCESS: You have "+getDeposit()+" left in your account!");
		return pay;
	}
	public boolean rentRecordEmpty() { //返回是否将租借的CD全部还完
		return rentRecord.isEmpty();
	}
	public void printRentRecord() { //输出租借的CD的信息
		System.out.println("You haven't returned all the following CD(s)!");
		System.out.println(rentRecord);
	}
	@Override
	public String toString() {
		return "User "+id+" "+name+" VIP class: "+vipClass+" deposit: "+deposit;
	}
}

UserBook.java

public class UserBook {
	private int maxSize=10000; //会员库的最大存储量
	private User[] data=new User[maxSize];
	private int capacity=0; //会员库的真实容量
	public void addUser(User u) { //增加会员
		if(capacity<maxSize&&findUser(u.getId())==null) { //如果用户不事先存在且数组容量足够
			data[capacity]=u;
			capacity++;
		}
		else //如果容量不够
			System.out.println("Too many users!");
	}
	public User findUser(int id) { //寻找会员
		for(int i=0;i<capacity;i++) {
			if(data[i].getId()==id)
				return data[i];
		}
		return null;
	}
	public boolean removeUser(int id) { //删除会员
		for(int i=0;i<capacity;i++) { //遍历所有用户
			if(findUser(id)!=null) { //找到要删除的用户
				if(data[i].rentRecordEmpty()) { //如果租的CD都还完了
					for(int j=i;j<capacity-1;j++) //将后面所有的用户往前移一格
						data[j]=data[j+1];
					data[capacity]=new User(0,null,0); 
					capacity--;
					return true;
				}
				else { //如果租的CD还没还完
					data[i].printRentRecord();
					return false;
				}	
			}		
		}
		//如果找不到该用户
		System.out.println("User doesn't exist!");
		return false;
	}
	public double rent(int account,Disk d,int num) { //租借CD
		User u=findUser(account);
		if(u==null) {
			System.out.println("Can't find the user!");
			return 0;
		}
		return u.rent(d,num); //返回收入
	}
	public void returnBack(int account,Disk d,int num) { //还CD
		User u=findUser(account);
		if(u==null) {
			System.out.println("Can't find the user!");
			return;
		}
		u.returnBack(d,num);
	}
	public double buy(int account,Disk d,int num) { //购买CD
		User u=findUser(account);
		if(u==null) {
			System.out.println("Can't find the user!");
			return 0;
		}
		return u.buy(d,num); //返回收入
	}
	public void deposit(int id, int money) { //会员充值
		User u=findUser(id);
		if(u==null) {
			System.out.println("Can't find the user!");
			return;
		}
		u.setDeposit(money); //更新充值
	}
	@Override
	public String toString() { //重载输出,打印会员库中的每一个会员信息
		String output="UserBook"+'\n';
		for(int i=0;i<capacity;i++) {
			output+=data[i];
			output+='\n';
		}
		return output;
	}
}

Owner.java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Owner {
	private UserBook ub=new UserBook(); //记录会员的信息
	private DiskBook db=new DiskBook(); //记录CD的信息
	private double income=0; //记录总收入
	BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
	public void addIncome(double m) { //增加收入
		income+=m;
	}
	public void getIncome() { //输出总收入
		System.out.println("You have earned "+income+"yuan(s) in total!");
	}
	public void begin() throws IOException {
		while(true) {
			printMainMenu(); //输出主菜单
			int choice=readUserInput(); //获取用户操作
			switch(choice) {
			case 1:
				manageUser(); //管理会员
				break;
			case 2:
				manageDisk(); //管理CD
				break;
			case 3:
				rentDisk(); //出租CD
				break;
			case 4:
				returnDisk(); //还CD
				break;
			case 5:
				buyDisk(); //购买CD
				break;
			case 6:
				getIncome(); //输出收入
				break;
			case 7:
				return; //退出程序
			}
		}
	}
	private void printMainMenu() { //输出主菜单
		System.out.println("Welcome! Please input what you want to do!");
		System.out.println("1: Manage User");
		System.out.println("2: Manage Disk");
		System.out.println("3: Rent Disk");
		System.out.println("4: Return Disk");
		System.out.println("5: Buy Disk");
		System.out.println("6: Print Income");
		System.out.println("7: Quit");
	}
	private int readUserInput() { //获取用户的输入
		try {
			String line;
			line=in.readLine();
			return Integer.parseInt(line);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return 0;
	}
	private void manageUser() throws IOException { //管理会员
		while(true) {
			printUserMenu(); //输出会员菜单
			int choice=readUserInput(); //获取用户输入
			switch(choice) {
			case 1:
				addUser(); //增加会员
				break;
			case 2:
				removeUser(); //删除会员
				break;
			case 3:
				findUser(); //寻找会员
				break;
			case 4:
				deposit(); //会员充值
				break;
			case 5:
				printAllUsers(); //输出所有的会员信息
				break;
			case 6:
				return; //退出会员菜单
			}
		}
	}
	private void manageDisk() throws IOException { //管理CD
		while(true) {
			printDiskMenu(); //输出CD菜单
			int choice=readUserInput(); //获取用户输入
			switch(choice) {
			case 1:
				addDisk(); //增加CD
				break;
			case 2:
				removeDisk(); //删除CD
				break;
			case 3:
				findDisk(); //寻找CD
				break;
			case 4:
				searchDisk(); //根据音乐种类寻找CD
				break;
			case 5:
				printAllDisks(); //输出所有CD信息
				break;
			case 6:
				return; //退出CD菜单
			}
		}
	}
	public void printUserMenu() { //输出用户菜单
		System.out.println("Managing User: Please input what you want to do!");
		System.out.println("1: Add User");
		System.out.println("2: Remove User");
		System.out.println("3: Find User");
		System.out.println("4: Deposit");
		System.out.println("5: Print All Users");
		System.out.println("6: Quit");
	}
	public void addUser() { //增加会员
		try {
			System.out.println("Please input user's name!");
			String name=in.readLine();
			System.out.println("Please input user's id!");
			int id=Integer.parseInt(in.readLine());
			System.out.println("Please input user's deposit!");
			double deposit=Double.parseDouble(in.readLine());
			User u=new User(id,name,deposit);
			ub.addUser(u);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	public void removeUser() throws IOException { //删除会员
		System.out.println("Please input user's id!");
		try {
			int id=Integer.parseInt(in.readLine());
			ub.removeUser(id);
		} catch(NumberFormatException e) {
			e.printStackTrace();
		}
	}
	public void findUser() throws IOException { //寻找会员
		System.out.println("Please input user's id!");
		try {
			int id=Integer.parseInt(in.readLine());
			System.out.println(ub.findUser(id));
		} catch(NumberFormatException e) {
			e.printStackTrace();
		}
	}
	public void deposit() throws IOException { //用户充值
		try {
			System.out.println("Please input user's id!");
			int id=Integer.parseInt(in.readLine());
			System.out.println("Please input the money!");
			int money=Integer.parseInt(in.readLine());
			ub.deposit(id,money);
		} catch(NumberFormatException e) {
			e.printStackTrace();
		}
	}
	public void printAllUsers() { //输出所有的会员信息
		System.out.println(ub);
	}
	public void printDiskMenu() { //输出管理CD菜单
		System.out.println("Managing Disk: Please input what you want to do!");
		System.out.println("1: Add Disk");
		System.out.println("2: Remove Disk");
		System.out.println("3: Find Disk");
		System.out.println("4: Search Disk");
		System.out.println("5: Print All Disks");
		System.out.println("6: Quit");
	}
	public void addDisk() { //增加CD
		try {
			System.out.println("Please input disk's name!");
			String name=in.readLine();
			System.out.println("Please input disk's id!");
			int id=Integer.parseInt(in.readLine());
			System.out.println("Please input disk's price!");
			double price=Double.parseDouble(in.readLine());
			System.out.println("Please input disk's stock!");
			int stock=Integer.parseInt(in.readLine());
			System.out.println("Please input disk's genre!");
			System.out.println("1: Jazz");
			System.out.println("2: Hip-hop");
			System.out.println("3: Rock");
			System.out.println("4: Soft");
			System.out.println("5: Classic");
			int genre=Integer.parseInt(in.readLine());
			Genre g=Genre.JAZZ;
			switch(genre) {
			case 1:
				g=Genre.JAZZ;
				break;
			case 2:
				g=Genre.HIPHOP;
				break;
			case 3:
				g=Genre.ROCK;
				break;
			case 4:
				g=Genre.SOFT;
				break;
			case 5:
				g=Genre.CLASSIC;
				break;
			}
			db.addDisk(new Disk(id,name,price,stock,g));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	public void removeDisk() throws IOException { //删除CD
		try {
			System.out.println("Please input disk's id!");
			int id=Integer.parseInt(in.readLine());
			db.removeDisk(id);
		} catch(NumberFormatException e) {
			e.printStackTrace();
		}
	}
	public void findDisk() throws IOException { //寻找CD
		try {
			System.out.println("Please input disk's id!");
			int id=Integer.parseInt(in.readLine());
			System.out.println(db.findDisk(id));
		} catch(NumberFormatException e) {
			e.printStackTrace();
		}
	}
	public void searchDisk() throws IOException { //根据音乐种类寻找CD
		try {
			System.out.println("Please input disk's genre!");
			System.out.println("1: Jazz");
			System.out.println("2: Hip-hop");
			System.out.println("3: Rock");
			System.out.println("4: Soft");
			System.out.println("5: Classic");
			int genre=Integer.parseInt(in.readLine());
			Genre g=Genre.JAZZ;
			switch(genre) {
			case 1:
				g=Genre.JAZZ;
				break;
			case 2:
				g=Genre.HIPHOP;
				break;
			case 3:
				g=Genre.ROCK;
				break;
			case 4:
				g=Genre.SOFT;
				break;
			case 5:
				g=Genre.CLASSIC;
				break;
			}
			db.searchDisk(g);
		} catch(NumberFormatException e) {
			e.printStackTrace();
		}
	}
	public void printAllDisks() { //输出所有CD信息
		System.out.println(db);
	}
	public void rentDisk() { //出租CD
		try {
			System.out.println("Please input disk's id!");
			int cd=Integer.parseInt(in.readLine());
			System.out.println("Please input how many disks you want to rent!");
			int num=Integer.parseInt(in.readLine());
			Disk d=db.findDisk(cd);
			if(d==null)
				return;
			db.rent(cd,num); //从CD本中出租
			System.out.println("Please input user's id!");
			int account=Integer.parseInt(in.readLine());
			double money=ub.rent(account,d,num); //在会员本增加出租CD的信息,并返回收入
			addIncome(money); //增加收入
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	public void returnDisk() { //归还CD
		try {
			System.out.println("Please input disk's id!");
			int cd=Integer.parseInt(in.readLine());
			System.out.println("Please input how many disks you want to return!");
			int num=Integer.parseInt(in.readLine());
			db.returnBack(cd,num); //归还到CD本中
			Disk d=db.findDisk(cd);
			if(d==null)
				return;
			System.out.println("Please input user's id!");
			int account=Integer.parseInt(in.readLine());
			ub.returnBack(account,d,num); //把会员租借CD的信息勾掉
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	public void buyDisk() { //购买CD
		try {
			System.out.println("Please input disk's id!");
			int cd=Integer.parseInt(in.readLine());
			System.out.println("Please input how many disks you want to buy!");
			int num=Integer.parseInt(in.readLine());
			Disk d=db.findDisk(cd);
			if(d==null)
				return;
			db.buy(cd,num); //从CD本中删除
			System.out.println("Please input user's id!");
			int account=Integer.parseInt(in.readLine());
			double money=ub.buy(account,d,num); //会员购买CD,并返回收入
			addIncome(money); //增加收入
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	public static void main(String[] args) throws IOException {
		Owner o=new Owner();
		o.begin();
	}
}

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值