<script>
/* 功能需求:1.查看DVD 2.租售DVD 3.归还DVD 4.添加DVD 5.删除DVD 0.退出系统 */
// 定义一个DVD类
class DVD {
constructor(name, type, price=1, state=0, count=0){
this.name = name // 名称
this.type = type // 类型
this.price = price // 日租金
this.state = state // 状态0表示未借出,1表示借出
this.count = count // 借出次数
}
// 计算总租金方法
totalPrice(days){
// 租用天数超过10天,打八折
// 租用天数超过5天,打九折
// 定义一个总租金
let money = this.price * days
if(days >= 10){
money *= 0.8
}else if(days >= 5){
money *= 0.9
}
return money
}
}
// 定义一个DVD管理对象
let dvdManager = {
// 定义一个对象数组dvds,存放所有DVD对象
dvds: [
new DVD('金 刚', '爱情片'),
new DVD('超级战舰', '科幻片', 2),
new DVD('飓风营救', '动作片', 1.5, 1, 1),
new DVD('弱 点', '励志片'),
new DVD('利刃出鞘', '悬疑片'),
new DVD('捉鬼大师', '鬼怪片')
],
// 查看DVD方法
show(){
console.log('************************查看DVD************************');
console.log(`序号\t DVD名称\t DVD类型\t 状态\t人气\t日租金`);
/*
forEach()方法,用于循环遍历整个数组
该方法的参数是一个回调函数,回调函数可以传两个参数,
第一个参数是数组中的每一项【元素】,
第二个参数是每一项元素对应的【下标】。
注意:第二个参数可以省略。
*/
this.dvds.forEach((d, index) => {
console.log(`${index + 1001}\t《${d.name}》\t${d.type}\t${d.state === 0? '未借出':'已借出'}\t${d.count}\t ¥${d.price}`);
})
let str = `序号 DVD名称 DVD类型 状态 人气 日租金\n`
this.dvds.forEach((d, index) => {
str += `${index + 1000} 《${d.name}》 ${d.type} ${d.state === 0? '未借出':'已借出'} ${d.count} ¥${d.price}\n`
})
alert(str)
},
// 查询DVD方法:根据DVD的名称,返回DVD对象
getDVDByName: function (name) {
// 定义一个待借出的DVD对象
// 判断数组中是否存在指定名称的DVD对象
return this.dvds.find(d => d.name === name)
},
// 租借DVD方法
borrow(){
console.log('************************租借DVD************************');
let borrowName = prompt('请输入您想要租借的DVD的名称:')
// 根据输入的DVD名称,存在,则返回对应的DVD对象;不存在,则返回false。
let dvd = this.getDVDByName(borrowName)
if(dvd === undefined){
alert(`抱歉,没有找到与《${borrowName}》相关的DVD!`)
console.log(`没有找到与《${borrowName}》相关的DVD!`)
}else{
// 再判断状态是否可借出
if(dvd.state === 0){
alert(`《${dvd.name}》借出成功!`)
console.log(`《${dvd.name}》借出成功!`)
// 状态改为:已借出
dvd.state = 1
// 将该DVD的人气值加1
dvd.count++
}else{
alert(`抱歉,《${dvd.name}》已经借出,您可以换别的。`)
console.log(`《${dvd.name}》已经借出!`)
}
}
},
// 归还DVD
back(){
console.log('************************归还DVD************************')
let backName = prompt('请输入您想要归还的DVD的名称:')
let dvd = this.getDVDByName(backName)
if(dvd === undefined){
alert(`抱歉,没有找到您要归还的DVD!`)
console.log(`没有找到要归还的DVD:《${backName}》!`)
}else{
// 再判断状态是否可归还
if(dvd.state === 1){
let days = Math.ceil(prompt('请输入您借出的总天数:'))
console.log(`共计借出天数:${days}`);
alert(`您需要支付的租金共计:${dvd.totalPrice(days)}元`)
console.log(`租金共计:${dvd.totalPrice(days)}元`)
alert(`《${dvd.name}》归还成功!`)
console.log(`《${dvd.name}》归还成功!`)
// 状态改为:未借出
dvd.state = 0
}else{
alert(`抱歉,《${dvd.name}》已经归还!`)
console.log(`《${dvd.name}》已经归还!`)
}
}
},
// 添加DVD
add(){
console.log('************************新增DVD************************')
let name = prompt('请输入您想要添加的DVD的名称:')
if(!name){
alert('抱歉,名称不能为空!')
}else{
// let dvd = this.getDVDByName(name)
// if(dvd === undefined){
// if(this.getDVDByName(name) !== undefined){
if(this.getDVDByName(name)){
alert(`《${name}》已经存在!无需重复添加!`)
console.log(`《${name}》已经存在!无需重复添加!`)
}else{
let type = prompt('请输入该DVD的类型:')
if(!type){
alert('抱歉,DVD的类型不能为空!')
}else{
// 创建一个DVD对象
// let addDVD = new DVD(name, type)
// this.dvds.push(addDVD)
let price = parseFloat(prompt('请输入该DVD的日租金:'))
if(price >= 0){
this.dvds.push(new DVD(name, type, price))
alert(`《${name}》添加成功!`)
console.log(`《${name}》添加成功!`)
return // 跳出递归
}else{
alert('日租金输入错误!请重新输入!')
}
}
}
}
// 递归调用
// dvdManager.add()
arguments.callee.call(this)
},
// 删除DVD
delete(){
console.log('************************删除DVD************************')
let deleteName = prompt('请输入您想要删除的DVD的名称:')
let dvd = this.getDVDByName(deleteName)
if(!dvd){
alert(`抱歉,您要删除的DVD不存在!`)
}else{
// 判断该DVD是否是借出状态
if(dvd.state === 1){
alert(`《${deleteName}》已经借出,暂时无法删除!`)
console.log(`《${deleteName}》已经借出,暂时无法删除!`)
}else{
let index = this.dvds.findIndex(d => d.name === deleteName)
this.dvds.splice(index, 1)
alert(`《${dvd.name}》删除成功!`)
console.log(`《${dvd.name}》删除成功!`)
}
}
},
// 系统主菜单
sysMenu(){
let no = parseInt(prompt(`**************************迷你DVD管理系统**************************
1. 查看DVD
2. 租借DVD
3. 归还DVD
4. 新增DVD
5. 删除DVD
0. 退出系统`))
switch (no) {
case 1:
this.show()
break;
case 2:
this.borrow()
break;
case 3:
this.back()
break;
case 4:
this.add()
break;
case 5:
this.delete()
break;
default:
alert('成功退出系统,欢迎下次使用!')
return
}
arguments.callee.call(this)
}
}
// 调用主方法
dvdManager.sysMenu()
</script>