图书管理系统(JavaScript)

发布于:2023-07-04 ⋅ 阅读:(187) ⋅ 点赞:(0)

 一、看懂代码的必备知识

1、prompt()接收输入,可以暂停代码,等得到输入以后再执行下面代码。

2、alert()输出字符串,注意是字符串,同样会暂停下面代码,等到用户点击确认之后继续。

3、while循环,先判断后执行,在这里了我们用了死循环。

4、if-else判断语句,条件正确则执行 i f 后的语句,条件不正确则执行 else 后的语句。

5、forEach(function(item){}) 方法,这个方法是遍历数组,item为数组的元素值,在遍历中不能使用 break 终止。

6、some(function(item){return boolean}) 方法,这个方法也会遍历数组,如果在判断条件中有一个元素符合条件就返回 true,注意会返回一个boolean                                                                       如数组[1,3,5,4,7,9],在some()中 return item % 2 === 0 , 返回 true,因为4 % 2 === 0,为 true

二、原码以及注释

        var books = [] //存储图书的数组
       
        while (true) {
            //令判断条件为true,构造一个死循环,让程序一直运行,
            //因为咱们有alert()和prompt(),所以不用担心会出现无法控制的后果
            var type = +prompt('1-添加,2-借书,3-还书,4-查看图书列表,5-退出')
            if (type === 5) {
                //5为退出,直接利用break跳出这个死循环
                break
            } else if (type === 1) {
                var bookname = prompt('请输入图书名字')
                if (bookname) {
                    //将图书名字和状态以狭义的对象的形式存入数组中,注意是以对象是以狭义的对象
                    books.push({
                        name: bookname,
                        isOut: false  //如果为false则没有借出图书,在此程序中将用isOut表示图书状态
                    })
                }
            } else if (type === 4) {
                //alert()只能输出字符串,所以需要将books数组中的所有元素转为字符串
                var str = ''
                books.forEach(function (item) {
                    //var str = ''
                    //放在这里是局部变量,在forEach()方法外面输出的话是undefined
                    str += '书名:' + item.name + ',' +'  ' + '存在为true,不存在为false:' +item.isOut + '\n'
                })
                alert(str)
            } else if (type === 2) {
                var name = prompt('请输入图书名')
                if (books.some(function (item) {
                    //先判断是否有这个图书
                    if (name === item.name) {
                        //再判断图书状态
                        if (!item.isOut) {
                            //把这本图书的状态改为true,
                            item.isOut = true
                            alert('图书存在,借书成功')
                        } else {
                            alert('图书已借出')
                        }

                    }
                    return item.name === name
                })) {
                    // 在此什么都不用做,因为已经在条件的some()函数中,把该做的全做了
                    //如果不在some()函数中做,那么还要在此处多使用一个forEach()
                    //下面的还书部分就是没有在some()中做其他操作,而在条件成立后用了forEach()
                    //供大家比较参考
                } else {
                    alert('此书不存在')
                }

            } else if (type === 3) {
                var name = prompt('请输入图书名')
                if (books.some(function (item) { return item.name === name})) {
                    books.forEach(function (item) {
                        if (name === item.name) {
                            if (item.isOut) {
                                //把这本图书状态改为false
                                item.isOut = false
                                alert('还书成功')
                            } else {
                                alert('图书未借出')
                            }
                        }
                    })
                } else {
                    alert('此书不存在')
                }

            }
        }

此程序有一个缺点或者说是局限性,就是当添加同名的图书超过一本时将会出现bug,不能很好的完成借书和还书操作。

最后欢迎大家讨论或者批评!

 

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到