Files
2024-07-04 22:38:39 +08:00

192 lines
3.7 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

function List() {
this.listSize = 0;
this.pos = 0;
this.dataStore = [];
this.clear = clear;
this.find = find;
this.toString = toString;
this.insert = insert;
this.append = append;
this.remove = remove;
this.front = front;
this.end = end;
this.prev = prev;
this.next = next;
this.hasNext = hasNext;
this.hasPrev = hasPrev;
this.length = length;
this.currPos = currPos;
this.moveTo = moveTo;
this.getElement = getElement;
this.contains = contains;
this.appendWhenBig = appendWhenBig;
this.appendWhenSmall = appendWhenSmall;
}
function append(element) {
// 元素追加后listSize 自增
this.dataStore[this.listSize++] = element;
}
function find(element) {
for (let i = 0; i < this.dataStore.length; i++) {
if (this.dataStore[i] === element) {
return i;
}
}
return -1;
}
function remove(element) {
const 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;
}
function insert(element, after) {
const insertPos = this.find(after);
if (insertPos > -1) {
this.dataStore.splice(after, 0, element);
++this.listSize;
return true;
}
return false;
}
function clear() {
delete this.dataStore;
this.dataStore.length = 0;
this.listSize = this.pos = 0;
}
function contains(element) {
for (let i = 0; i < this.dataStore.length; i++) {
if (this.dataStore[i] === element) {
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 getElement() {
return this.dataStore[this.pos];
}
function hasNext() {
return this.pos < this.listSize;
}
function hasPrev() {
return this.pos >= 0;
}
function appendWhenBig(element) {
let flag = true;
for (this.front(); this.hasNext(); this.next()) {
if (this.getElement() > element) {
flag = false;
}
}
if (flag) {
this.append(element);
}
}
function appendWhenSmall(element) {
let flag = true;
for (this.front(); this.hasNext(); this.next()) {
if (this.getElement() < element) {
flag = false;
}
}
if (flag) {
this.append(element);
}
}
function displayList(list) {
for (list.front(); list.currPos() < list.length(); list.next()) {
console.log(list.getElement());
}
}
function Customer(name, movie) {
this.name = name;
this.movie = movie;
}
function checkout(name, movie, movieList, customerList) {
if (movieList.contains(movie)) {
const c = new Customer(name, movie);
customerList.append(c);
movieList.remove(movie);
} else {
console.log(movie + ' is not available.');
}
}
const movies = ['大室家 亲爱的姐妹们', '紫罗兰永恒花园', '牵牛花与加濑同学。', '利兹与青鸟', '摇曳百合 夏日时光!'];
const movieList = new List();
const customers = new List();
for (let i = 0; i < movies.length; i++) {
movieList.append(movies[i]);
}
console.log('Available moviews: \n');
displayList(movieList);
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question('Enter your name: ', (name) => {
rl.question('What movie would you like?', (movie) => {
checkout(name, movie, movieList, customers);
console.log('Customer Rentals: ');
displayList(customers);
console.log('Movies Now Available');
displayList(movieList);
rl.close();
})
})