练习2:宠物管理系统

<script>

        // 定义一个宠物类

        class Pet{

            constructor(name, type, gender, health, love, master = null){

                // 昵称

                this.name = name

                // 种类

                this.type = type

                // 性别

                this.gender = gender

                // 健康值

                this.health = health

                // 亲密度

                this.love = love

                // 主人(对象)

                this.master = master

            }

            // 介绍宠物方法

            sayHi(){

                console.log(`我是一只${this.type},我叫${this.name},我是${this.gender === 1? '男生':'女生'},我的主人是${this.master.username}。

健康值:${this.health}  亲密度:${this.love}`);

            }

            // 宠物吃方法

            eat(){

                if(this.health < 100){

                    console.log(`我正在吃东西~~`);

                    console.log(`健康值:${this.health} => ${this.health += 5}`);

                    console.log(`真不错,好好吃呀~~`);

                }else{

                    console.log(`芜湖,我已经吃饱了,主人,我们去玩吧~~`);

                    console.log(`健康值:${this.health}`);

                    console.log(`亲密度:${this.love}`)

                }

            }

            // 宠物玩方法

            play(){

                if(this.health > 30){

                    console.log(`我正在做游戏,做呀做游戏~~鬼刀一开看不见,走位走位~~`);

                    console.log(`亲密度:${this.love} => ${this.love += 3}`);

                    console.log(`健康值:${this.health} => ${this.health -= 5}`);

                    console.log(`真不错,我好开心啊~~`);

                }else{

                    console.log(`好累呀,我饿了,我要吃好吃的~~`);

                    console.log(`健康值:${this.health}`);

                    console.log(`亲密度:${this.love}`)

                }

            }

        }

        // 定义一个用户类

        class User{

            constructor(username, loginid, password, pet=null){

                // 昵称

                this.username = username

                // 登录id

                this.loginid = loginid

                // 密码

                this.password = password

                // 宠物

                this.pet = pet

            }

        }

        // 定义一个宠物管理对象

        let petManager = {

            // 创建一个宠物信息数组

            pets: [

                new Pet('油条', '英短', 0, 100, 100),

                new Pet('豆浆', '边牧', 1, 100, 100),

                new Pet('摩登', '拉布拉多犬', 1, 100, 100),

                new Pet('黑珍珠', '藏獒', 1, 100, 100),

                new Pet('佩奇', '宠物猪', 0, 100, 100)

            ],

            // 创建一个用户信息数组

            users: [

                new User('玥歆','153124','123456'),

                new User('阳仔','107625','123456'),

                new User('张三','112233','123456'),

                new User('李四','223344','123456')

            ],

            // 当前登录用户属性

            currentUser: null,

            // 查看宠物方法

            showPet(){

                console.log('*****************查看宠物*****************');

                console.log('昵称\t类型\t性别\t健康值\t亲密度\t主人');

                this.pets.forEach((p, index) => console.log(`${p.name}\t${p.type}\t${p.gender === 1 ? '男生' : '女生'}\t${p.health}\t    ${p.love}\t    ${p.master === null? '暂无' : p.master.username}`))

            },

            // 领养宠物方法

            adoptPet(){

                console.log(`*****************领养宠物*****************`);

                // 定义一个待领养的宠物对象

                let pet = null

                // some()方法,用于表示数组中是否有满足指定规则的元素,有返回true,一个都没有返回false

                // 先判断当前登录用户是否已经领养过宠物

                if(this.pets.some(p => p.master === this.currentUser)){

                    // 获取当前用户领养的那只宠物

                    pet = this.pets.find(p => p.master === this.currentUser)

                    alert(`您已经领养了${pet.name}!不可一心二用哦~~`)

                    console.log(`您已经领养了${pet.name}!`)

                }else{

                    while(true){

                        let petName = prompt('请输入需要领养的宠物昵称:')

                        // 根据昵称找到该宠物对象

                        pet = this.pets.find(p => p.name === petName)

                        if(!pet){

                            alert(`${petName}不存在!请重新输入`)

                            console.log(`${petName}不存在!`)

                        }else{

                            //

                            if(pet.master === null){

                                // 设置该宠物的主人是当前登录用户

                                pet.master = this.currentUser

                                this.currentUser.pet = pet

                                alert(`您已成功领养了${petName},宠物是人类的朋友,请君善待它!`)

                                console.log(`您已成功领养了${petName}`)

                                break

                            }else{

                                alert(`${petName}已经有主人了,请君切勿夺人所爱!`)

                                console.log(`${petName}已经有主人了`)

                            }

                        }

                    }

                }

                console.log(pet.name);

                // 调用宠物菜单方法,注意:该方法需要传一个宠物对象作为参数。

                this.petMenu()

            },

            // 宠物的菜单方法

            petMenu(pet=this.currentUser.pet){

                while(true){

                    console.log('*****************宠物菜单*****************');

                    let no = parseInt(prompt(`宠物技能:\n1.打个招呼  2.喂食  3.溜一圈  4.退出`))

                    switch (no) {

                        case 1:

                            pet.sayHi()

                            break;

                        case 2:

                            pet.eat()

                            break;

                        case 3:

                            pet.play()

                            break;

                        default:

                            alert(`期待下次您与宠物的快乐时光~~`)

                            return

                    }

                }

            },

            // 业务菜单

            menu(){

                console.log(`*****************欢迎使用宠物管理系统*****************`);

                let no = parseInt(prompt('1.查看宠物  2.领养宠物  3.培养宠物  4.退出系统'))

                switch (no) {

                    case 1:

                        this.showPet()

                        break;

                    case 2:

                        this.adoptPet()

                        break;

                    case 3:

                        this.petMenu()

                        break;

                    default:

                        alert(`您已成功退出!`)

                        return

                }

                arguments.callee.call(this)

            },

            // 注册方法

            register(){

                console.log(`*****************用户注册*****************`);

                while(true){

                    let username = prompt('请输入您的昵称:')

                    if(!username){

                        alert('昵称不能为空!')

                    }else{

                        let loginid = prompt('请输入登录ID:')

                        if(!loginid){

                            alert('登录ID不能为空!')

                        }else{

                            if(this.users.find(u => u.loginid === loginid)){

                                alert('登录ID重复!请重新输入!')

                            }else{

                                let password = prompt('请输入密码:')

                                // 创建一个新的用户对象

                                if(password.length < 5){

                                    alert('密码长度不得小于5位!')

                                }else{

                                    let user = new User(username, loginid, password)

                                    this.users.push(user)

                                    alert('恭喜您已注册成功!')

                                    console.log(`${loginid}注册成功!`)

                                    return

                                }

                            }

                        }

                    }

                }

                arguments.callee.call(this)

            },

            // 登录方法

            login(){

                console.log('*****************用户登录*****************');

                while(true){

                    let loginid = prompt('请输入登录ID:')

                    let password = prompt('请输入密码:')

                    // 根据登录名和密码,查询一个用户对象

                    let user = this.users.find(u => u.loginid === loginid && u.password === password)

                    // 判断是否登录成功

                    if(user){

                        // 当前用户的属性值变为user

                        this.currentUser = user

                        alert(`用户${user.username},登录成功!`)

                        if(user.pet !== null){

                            alert(`您家的${user.pet.name}表示强烈的欢迎`)

                        }

                        console.log(`当前用户:${this.currentUser.username}--${this.currentUser.loginid},宠物:${this.currentUser.pet === null? '暂无': this.currentUser.pet.name}`);

                        // 打开业务菜单

                        this.menu()

                        return

                    }else{

                        alert('登录失败!登录ID或者密码错误!')

                        console.log(`${loginid}登录失败!登录ID或者密码错误!`)

                    }

                }

                arguments.callee.call(this)

            },

            // 主菜单方法

            sysMenu(){

                let no = parseInt(prompt(`************************欢迎使用宠物管理系统************************

                                     1.登录  2.注册  3.退出`))

                switch (no) {

                    case 1:

                        this.login()

                        break;

                    case 2:

                        this.register()

                        break;

                    default:

                        alert(`您已成功退出,欢迎下次使用!`)

                        return

                }

                arguments.callee.call(this)

            }

        }

        // 调用系统菜单方法

        petManager.sysMenu()

</script>

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,001评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,210评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,874评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,001评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,022评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,005评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,929评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,742评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,193评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,427评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,583评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,305评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,911评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,564评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,731评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,581评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,478评论 2 352

推荐阅读更多精彩内容