-
Notifications
You must be signed in to change notification settings - Fork 0
/
bookLibrary.js
134 lines (118 loc) · 3.19 KB
/
bookLibrary.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
var readline = require('readline'),
rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
var favBook = {
author: {}
};
var state = '0';
//add book states
var AB_NAME = '1',
AB_GENRE = '2',
AB_NUM_OF_PAGES = '3',
AB_AUTHOR_NAME = '4',
AB_AUTHOR_COUNTRY = '5';
//main menu states
var MM_ADD_BOOK = '1',
MM_EDIT_BOOK = '2',
MM_DELETE_BOOK = '3',
MM_PRINT_LIBRARY = '4',
MM_EXIT = '5';
function mainMenu() {
//readMainMenu.resume();
console.log("\n===========================");
console.log("= WELCOME TO BOOK LIBRARY =");
console.log("===========================");
console.log("\nAvailable Options:");
console.log("\n1. Add new book");
console.log("2. Edit existing book");
console.log("3. Delete a book");
console.log("4. Take a look at library");
console.log("5. Exit");
rl.on('line', function (input) {
mainMenuProcess(input);
});
};
function mainMenuProcess(input) {
input = input.trim();
switch(input) {
case MM_ADD_BOOK:
console.log('\n===========================');
console.log('\nTo add a new book, please answer the following questions');
addBook();
break;
case MM_EXIT:
console.log('Have a lovely day!');
process.exit();
break;
default:
//console.log('[' + input + ']');
//console.log('input: [' + input + '] MM_ADD_BOOK ' + '[' + MM_ADD_BOOK + ']')
console.log('default');
}
};
function addBook() {
console.log('\nEnter a title of your favorite book');
rl.on('line', function (input) {
input = validateUserInputAddBook(input);
if (state == AB_NAME) {
if (input) {
favBook.name = input;
}
console.log('\nWhat\'s the genre of the book?');
} if (state == AB_GENRE) {
if (input) {
favBook.genre = input;
}
console.log('\nHow many pages does the book have?');
} if (state == AB_NUM_OF_PAGES) {
if (input && isNumber(input)) {
favBook.pages = input;
console.log('\nWho wrote the book?');
}
} if (state == AB_AUTHOR_NAME) {
if (input) {
favBook.author.name = input;
}
console.log('\nWhere did author live?');
} if (state == AB_AUTHOR_COUNTRY) {
if (input) {
favBook.author.country = input;
printBook(favBook);
console.log('\nType "q" to quit or "again" to enter the data again.');
}
}
});
};
function validateUserInputAddBook(input) {
input = input.trim();
if (input == 'q') {
console.log('Have a lovely day!');
process.exit();
} else if (input == '') {
console.log('Error, you did not enter anything!');
} else if (state == AB_AUTHOR_COUNTRY && input == 'again') {
state = '0';
addBook();
} else {
state++;
return input;
}
}
function isNumber(n) {
if (n == 0) {
console.log('Book with no pages? Come on!');
state--;
} else if (n < 0) {
console.log('Please, enter positive number');
state--;
} else if (!!isNaN(parseInt(n)) && !isFinite(n)) {
console.log('Error: [' + n + '] is not a number');
state--;
} else return parseInt(n);
}
function printBook(book) {
console.log('\nThank you!\nIt seems that you like reading ' + favBook.genre + ' and your favorite book is "' + favBook.name + '" by ' + favBook.author.name + ' (' + favBook.author.country + ').' + ' The book has ' + favBook.pages + ' pages.')
}
mainMenu();