//блок модулей
const prompt = require('prompt-sync')();
//блок переменных
let arrAllId=[]
begin=true
dumpsterCourse={}
dumpsterTeacher={}
//блок функций
function pause(){
return prompt('Нажмите Enter чтобы продолжить ...')
}
function generateId(length = 5) {
const alphabetId='0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'
let resultId=''
for(let i=0;i<length;i++){
resultId+=alphabetId[Math.floor(Math.random()*alphabetId.length)]
}
if (arrAllId.indexOf(resultId)==-1){
arrAllId.push(resultId)
return resultId
}
return generateId()
}
function checkingValidateEmail(){
let email=prompt('Введите свою электронную почту: ')
if (email.includes('@')){
return email
}
else{
console.log('Почта была введена некорректно\n')
return checkingValidateEmail()
}
}
function checkingValidateCode(code){
if (code.lengh>10){
console.log('Вы успешно добавили Секретный код')
return(code)
}
else{
return checkingValidateCode(prompt('Введите секретный код: '))
}
}
function checkingNameUniqueness(){
let name=prompt('Введите своё имя: ')
if (app.allUserNames.indexOf(name)==-1){
return name
}
else{
console.log('Это имя занято\n')
return checkingNameUniqueness()
}
}
function showFirstInterface(){
console.log(
'\n1.Войти в аккаунт\n',
'\n2.Регистрация\n',
'\n3.Выход\n\n',
)
return prompt('Выберете действие: ')
}
function showStudentInterface(){
console.log(
'\n1.Найти курс\n',
'\n2.Поддержка\n',
'\n3.Выход из аккаунта\n\n',
)
return prompt('Выберете действие: ')
}
function sentMessageAdmin(mess,sender){
app.baseAdmin[sender]=mess
let keys=Object.keys(app.admins)
for(let i=0;i<app.admins.length;i++)
app.admins[keys[i]]=mess
}
function userType(){
let type=prompt('1.Учитель\n2.Ученик\n3.Владелец Школы\n4.Владелец приложения\nВыберете роль входа: ')
switch(type){
case '1':
return 'teachers'
case '2':
return 'students'
case '3':
return 'schoolManager'
case '4':
return 'admin'
default:
console.log('Такой роли нет')
pause()
return userType()
}
}
function inputAccountStudorTeach(userType){
let userName=prompt('Введите имя пользователя: ')
let userPass=prompt('Введите свой пароль: ')
if (prompt('Введите yes если хотите вернуться назад: ')=='yes'){
return 'no'
}
if(app[userType][userName]!==undefined){
if(app[userType][userName].pass==userPass){
console.log(`Добро пожаловать ${userName} `)
pause()
return app[userType][userName]
}
}
else{
console.log('Вы ввели неправильное имя или пароль\n')
return inputAccount(userType)
}
}
function checkingValidatePass(){
let pass=prompt('Введите пароль: ')
if (pass.length>=8){
return pass
}
else{
console.log('Минимальная длинна пароля 8 символов\n')
return checkingValidatePass()
}
}
//блок классов
class User{
constructor(userType,name,email,pass){
this.pass=pass
this.name = name
this.email = email
this.userType=userType
this.createdAt = new Date()
this.isAcive=true
this.id=generateId()
}
getInfo() {
return `${this.name} (${this.email}) - ${this.role} (аккаунт был создан ${createdAt})`;
}
}
class Student extends User{
constructor(name,email,pass){
super('студент',name,email,pass)
this.balance=0
this.learnCourses=[]
this.sentComplaint={}
}
getInfo(){
return super.getInfo()+`|| Баланс: ${this.balance}`
}
addCourse(onlineSchoolName,nameCourse){
if (this.balance>=app[onlineSchoolName][nameCourse].price){
this.balance-=app[onlineSchoolName][nameCourse].price
app[onlineSchoolName][nameCourse].students[this.name]=app.students[this.name]
console.log('Вы успешно записались на курс')
pause()
}
else{
console.log('У вас недостаточно средств')
pause()
}
}
addComplaintForTeacher(nameTeacher,description){
if(this.sentComplaint[nameTeacher]!==undefined){
return 'Вы уже отправляли жалобу на этого учителя'
}
else{
this.sentComplaint[nameTeacher]=true
app.teachers[nameTeacher].complaint.push(this.name+': '+description,'жалоба')
if (app.teachers[nameTeacher].complaint.length>=10 & app.baseAdmin.message[nameTeacher]!==undefined & app.baseAdmin.viewedMessage[nameTeacher]!==undefined){
for(let i=0;i<10;i++){
sentMessageAdmin(app.teachers[nameTeacher][i])
}
}
return 'Жалоба успешно отправлена на рассмотрение администрации'
}
}
}
class Teacher extends User{
constructor(name,email,pass,specialty){
super('учитель',name,email,pass)
this.specialty=specialty
this.rating=0
this.complaint=[]
}
changeSpecialty(){
console.log(`Ваша специальность сейчас:\n${this.specialty}`)
this.specialty=prompt('Введите новую специальность:\n')
}
getInfo(){
return super.getInfo()+`|| Рейтинг ${this.rating}/5`
}
}
class Admin{
constructor(){
this.message={}
}
deleteTeacher(name){
}
}
class Course{
constructor(nameCourse,price,description,duration,id){
this.id=id
this.nameCourse=nameCourse
this.price=Number(price)
this.description=description
this.duration=Number(duration)
this.students={}
this.teacher=null
}
changeDescription(){
console.log(`Описание сейчас:\n${this.description}`)
this.description=prompt('Введите новое описание:\n')
}
changePrice(){
console.log(`Описание сейчас: ${this.price}`)
this.priсe=Number(prompt('Введите новую цену: '))
}
}
class OnlineSchool{
static CourselastId=0
constructor(name){
this.name=name
this.teachers=[]
this.students=[]
this.courses=[]
}
createCurse(nameCourse){
CourselastId+=1
let price=Number(prompt('Введите цену курса: '))
let description=prompt('Введите описание для курса:\n')
let duration=Number(prompt('Введите продолжительность курса в кол-вах уроков: '))
this.courses[nameCourse]=new Course(nameCourse,price,description,duration,CourselastId)
}
getStatistics(){
let rate=0
for (let i =0;i<this.teachers.length;i++){
rate+=this.teachers[i]
}
rate=rate/this.teachers.length
return `Средний рейтинг учителей ${rate} || Количество учеников записаных на курсы вашей школы ${this.students.length}`
}
}
//объект в котором будут храниться все данные
let app={
baseAdmin:{dewkins:{name: 'dewkins',
pass: '42',//для быстрых тестов кода
email: '42', //для быстрых тестов кода
message: {},
createSecretCodes(){
app.secretCodes.push(checkingValidateCode(prompt('Введите секретный код: ')))
},
}},
admins: {},
teachers: {},
students: {},
onlineSchools: {},
allUserNames:[],
secretCodes:[],
registerTeacher(){
let name=checkingNameUniqueness()
let email=checkingValidateEmail()
let specialty=prompt('Введите свою специальность: ')
this.teachers[name]=new Teacher(name,email,pass,specialty)
this.allUserNames.push(name)
},
registerStudent(){
let name=checkingNameUniqueness()
let email=checkingValidateEmail()
let pass=checkingValidatePass()
this.students[name]=new Student(name,email,pass)
},
}
//блок выполняемого кода
while(begin===true){
switch(showFirstInterface()){
case '1':
let type=userType()
if (type==='teachers' || type==='students'){
let userObj=inputAccountStudorTeach(type)
}
if(userObj==='no'){
continue
}
break
case '2':
break
case '3':
begin=false
break
default:
console.log('Такого действия нет')
pause()
break
}
switch(userObj.userType){
case 'студент':
showStudentInterface()
break
case 'учитель':
break
case 'schoolManager':
break
case 'admin':
break
}
}
//cd C:\Users\dewkinz\documents
//node prototype.js