1、上篇回顾:

上篇我们实现了一个列表类,并添加了一些属性,实现了比较多的方法,本文章将与大家一起使用列表实现一个图书借阅查询系统。需要使用JavaScript数据结构与算法——列表详解(上)中写好的列表类List()。

如需查看List()类代码说明,请查阅本人列表上篇讲解,这里只给出List的源码,以供接下来写调用:

 function List() {this.listSize = 0this.pos = 0this.dataStore = [] // 初始化一个用于保存列表元素的空数组this.clear = clearthis.find = findthis.toString = toStringthis.insert = insertthis.append = appendthis.remove = removethis.front = frontthis.end = endthis.prev = prevthis.next = nextthis.hasNext = hasNextthis.hasPrev = hasPrevthis.length = lengththis.currPos = currPosthis.moveTo = moveTothis.getElement = getElementthis.contains = contains}function append(element) {this.dataStore[this.listSize++] = element}function find(element) {for (var i = 0; i < this.dataStore.length; i++) {if (this.dataStore[i] == element) {return i}}return -1}function remove(element) {var foundAt = this.find(element)if (foundAt > -1) {this.dataStore.splice(foundAt, 1)this.listSize--return true}return false}function length() {return this.listSize}function toString() {return this.dataStore.toString()}function insert(element, after) {var insertPos = this.find(after)if (insertPos > -1) {this.dataStore.splice(insertPos + 1, 0, element)this.liseSize++return true}return false}function clear() {delete this.dataStorethis.dataStore.length = 0this.listSize = 0this.pos = 0}function contains(element) {for (var i = 0; i < this.dataStore.length; i++) {return true}return false}// 遍历列表function front() {this.pos = 0}function end() {this.pos = this.listSize - 1}function prev() {this.pos--}function next() {if (this.pos < this.listSize) {this.pos++}}function currPos() {return this.pos}function moveTo(position) {this.pos = position}function hasNext() {return this.pos < this.listSize}function hasPrev() {return this.pos >= 0}function getElement() {return this.dataStore[this.pos]}

2、基于Nodejs使用列表实现一个图书借阅查询系统

新建一个List文件夹,里边包含一个book.txt(用于存放书本),一个book.js,用于编写js(请先载入上篇中实现的List()相关代码)。

2.1 读取书本文件

 // Created by xiaoqiang on 05/04/2018.
var fs = require('fs')
function readBooks('book.txt') {var data = fs.readFileSync(file)var dataArray = data.toString().split('\n')for (var i = 0; i < dataArray.length; i++) {dataArray[i] = dataArray[i].trim()}return dataArray
}

编写的过程可以在函数外添加console.log(readBooks('book.txt')),便于测试,进入当前文件夹,使用命令node book.js,看到以下结果证明node环境没问题&&函数编写没问题:

2.2 保存书本到列表

开头我们说过,上篇中我们写好了一个List()类,接下来我们通过此类创建一个书本列表对象,并往列表对象中的dataStore属性添加元素。

function saveBooksToList(file) {var booksArray = readBooks(file)for (var i = 0; i < booksArray.length; i++) {bookList.append(booksArray[i])}
}

2.3 展示列表信息

function displayList(list) {for (list.front(); list.currPos() < list.length(); list.next()) {console.log(list.getElement())}
}

测试:

 var bookList = new List()saveBooksToList('book.txt')displayList(bookList)

运行结果:

2.4 创建借阅人方法

此方法用于保存哪个人借阅了哪些书。

// 借阅人信息
function borrower(name, book) {this.name = namehis.book = book
}

2.5 实现借书方法

// 借书
function borrowBook(name, book, bookList, borrowerList) {if (bookList.contains(book)) {var b = new borrower(name, book)borrowerList.append(b)bookList.remove(book)console.log(name + '借阅书本' + book + '成功!!!')} else {console.log('书本已经被借走!!!')}
}

解释:四个参数意义分别为:借阅人名称,要借的书本,书本列表,借阅人列表;首先检查书本是否存在,存在的话将书本及借阅人信息保存到借阅人列表,信息如果不存在提示错误信息。

2.6 最终结果测试

 // 书本列表对象var bookList = new List()// 借阅人列表对象var borrowerList = new List()// 保存书本到列表saveBooksToList('book.txt')console.log('------------当前可借的书-------------------')// 显示书本信息displayList(bookList)console.log('-----------------开始借书------------------')// 借书borrowBook('xgq', 'Nodejs详解', bookList, borrowerList)console.log('-----------------借阅信息------------------')// 显示借阅人列表displayList(borrowerList)console.log('-----------------剩余可借的书---------------')
// 借阅后剩余的书本列表displayList(bookList)

结果:

2.7 book.js完整代码(整合上篇):

 // Created by xiaoqiang on 05/04/2018.var fs = require('fs')var readline = require('readline')
// JavaScript数据结构与算法——列表详解(上)function List() {this.listSize = 0this.pos = 0this.dataStore = [] // 初始化一个用于保存列表元素的空数组this.clear = clearthis.find = findthis.toString = toStringthis.insert = insertthis.append = appendthis.remove = removethis.front = frontthis.end = endthis.prev = prevthis.next = nextthis.hasNext = hasNextthis.hasPrev = hasPrevthis.length = lengththis.currPos = currPosthis.moveTo = moveTothis.getElement = getElementthis.contains = contains}function append(element) {this.dataStore[this.listSize++] = element}function find(element) {for (var i = 0; i < this.dataStore.length; i++) {if (this.dataStore[i] == element) {return i}}return -1}function remove(element) {var foundAt = this.find(element)if (foundAt > -1) {this.dataStore.splice(foundAt, 1)this.listSize--return true}return false}function length() {return this.listSize}function toString() {return this.dataStore.toString()}function insert(element, after) {var insertPos = this.find(after)if (insertPos > -1) {this.dataStore.splice(insertPos + 1, 0, element)this.liseSize++return true}return false}function clear() {delete this.dataStorethis.dataStore.length = 0this.listSize = 0this.pos = 0}function contains(element) {for (var i = 0; i < this.dataStore.length; i++) {return true}return false}// 遍历列表方法function front() {this.pos = 0}function end() {this.pos = this.listSize - 1}function prev() {this.pos--}function next() {if (this.pos < this.listSize) {this.pos++}}function currPos() {return this.pos}function moveTo(position) {this.pos = position}function hasNext() {return this.pos < this.listSize}function hasPrev() {return this.pos >= 0}function getElement() {return this.dataStore[this.pos]}// 读取书本文件function readBooks(file) {var data = fs.readFileSync(file)var dataArray = data.toString().split('\n')for (var i = 0; i < dataArray.length; i++) {dataArray[i] = dataArray[i].trim()}return dataArray
}
// 保存书本到列表
function saveBooksToList(file) {var booksArray = readBooks(file)for (var i = 0; i < booksArray.length; i++) {bookList.append(booksArray[i])}
}
// 展示列表信息
function displayList(list) {for (list.front(); list.currPos() < list.length(); list.next()) {console.log(list.getElement())}
}// 借阅人信息
function borrower(name, book) {this.name = namethis.book = book
}// 借书
function borrowBook(name, book, bookList, borrowerList) {if (bookList.contains(book)) {var b = new borrower(name, book)borrowerList.append(b)bookList.remove(book)console.log(name + '借阅书本' + book + '成功!!!')} else {console.log('书本已经被借走!!!')}
}
// 测试// 书本列表对象var bookList = new List()// 借阅人列表对象var borrowerList = new List()// 保存书本到列表saveBooksToList('book.txt')console.log('------------当前可借的书-------------------')// 显示书本信息displayList(bookList)console.log('-----------------开始借书------------------')// 借书borrowBook('xgq', 'Nodejs详解', bookList, borrowerList)console.log('-----------------借阅信息------------------')// 显示借阅人列表displayList(borrowerList)console.log('-----------------剩余可借的书---------------')
// 借阅后剩余的书本列表displayList(bookList)

有错误欢迎指出,谢谢。

完结~~

JavaScript数据结构与算法——列表详解(下),基于Nodejs实现一个列表应用相关推荐

  1. JavaScript数据结构与算法——链表详解(下)

    在JavaScript数据结构与算法--链表详解(上)中,我们探讨了一下链表的定义.实现原理以及单链表的实现.接下来我们进一步了解一下链表的其他内容. 1.双向链表 双向链表实现原理图: 与单向链表不 ...

  2. JavaScript数据结构与算法——队列详解(下)

    接下来会借助本人另一篇文章JavaScript数据结构与算法--队列详解(上)中实现的队列类及其方法实现一个应用. 配对问题 需求分析:在一个文件中保存着一份男女混合的数据,名称前以B开头表示男士,以 ...

  3. JavaScript数据结构与算法——数组详解(下)

    1.二维与多维数组 JavaScript只支持一维数组,但是通过在数组里保存数组元素的方式,可以轻松创建多维数组. 1.1 创建二维数组 二维数组类似一种由行和列构成的数组表格,在JavaScript ...

  4. JavaScript数据结构与算法——链表详解(上)

    注:与之前JavaScript数据结构与算法系列博客不同的是,从这篇开始,此系列博客采用es6语法编写,这样在学数据结构的同时还能对ECMAScript6有进一步的认识,如需先了解es6语法请浏览ht ...

  5. JavaScript数据结构与算法——栈详解

    1.栈基本知识 栈是一种特殊的列表,栈的元素只能通过列表的一端访问,这一端成为栈顶,栈具有先进后出的特点,要想访问栈底的元素,就必须将上边的元素先拿出来.对栈的操作主要是入栈和出栈,通过push()和 ...

  6. JavaScript数据结构与算法——队列详解(上)

    队列基本知识 队列是一种与列表很像的数据结构,只是队列只能在尾部插入元素,在队首删除元素.队列用于存放按顺序排列的元素,先进先出,就像食堂排队一样,后来的只能排在后面,先来的先拿饭,一种井然有序的感觉 ...

  7. JavaScript数据结构与算法——数组详解(上)

    1.JS中的数组 JS中的数组是一个特殊的对象,用来表示偏移量的索引是该对象的属性,索引可能是整数,但是这些数字索引会在内部转换成字符串类型(因为JS对象中的属性名必须是字符串).数组在JS中只是一种 ...

  8. c++数据结构中 顺序队列的队首队尾_数据结构与算法—队列详解

    前言 栈和队列是一对好兄弟,前面我们介绍过数据结构与算法-栈详解,那么栈的机制相对简单,后入先出,就像进入一个狭小的山洞,山洞只有一个出口,只能后进先出(在外面的先出去).而队列就好比是一个隧道,后面 ...

  9. 【数据结构与算法】详解什么是图结构,并用代码手动实现一个图结构

    本系列文章[数据结构与算法]所有完整代码已上传 github,想要完整代码的小伙伴可以直接去那获取,可以的话欢迎点个Star哦~下面放上跳转链接 https://github.com/Lpyexplo ...

  10. python从random生成列表_详解Python利用random生成一个列表内的随机数

    详解Python利用random生成一个列表内的随机数 首先,需要导入random模块: import random 随机取1-33之间的1个随机数,可能重复: random.choice(range ...

最新文章

  1. AngularJS-Basic(一)
  2. DATE_FORMAT(date,format)
  3. mix2s android p内测,历时一个月,MIX2S成小米首款Android P公测机型
  4. 将ArXiv中的Reference导入EndNote
  5. C/Cpp / STL / 模板全特化和偏特化
  6. 【活动报名】2021蚂蚁链开发者大会
  7. .net三层架构开发步骤
  8. Java设计流程执行器_Java进阶面试精选系列:SpringMVC+SpringBoot+Hibernate+Mybatis+设计模式...
  9. 如何监控Android电视桌面,androidTV 电视桌面的效果
  10. 如何使用Orchard搭建敏捷个人的网站(1)
  11. 吴恩达机器学习logistic回归作业(python实现)
  12. mysql bit类型_Mysql:bit类型的查询与插入
  13. Linux 修改环境变量
  14. iOS开发UI篇—程序启动原理和UIApplication
  15. 【vim编辑器的使用】
  16. Adapter模式简述
  17. 求职经历,三轮技术面 +HR 面,面试也不过如此
  18. Android 移动开发——第十三章——个人理财通(Android Studio 版)
  19. t.zijieimg.com/v.douyin.com短网址在线缩短工具
  20. 如何使用Google云端硬盘备份和还原WhatsApp消息

热门文章

  1. 如何用50行代码构建情感分类器
  2. 使用WebUploader实现文件批量上传,进度条显示功能
  3. mysql 分库分表架构与方案
  4. [SVN(ubuntu)] ubuntu使用svn
  5. SQL Server timeout分析和总结
  6. Hadoop-MapReduce 入门
  7. Xah Lee Web 李杀网
  8. ProgressBar控件在Listview下的多线程应用(转自johngeng)
  9. 17/100. Maximum Subarray
  10. PHP 入门 - 8.数据库