@rehan-warsi/sms
Version:
This project is a simple console based Student Management System. In this project you will be learning how to add new students, how to generate a 5 digit unique studentID for each student, how to enroll students in the given courses. Also, you will be imp
146 lines (116 loc) • 4.3 kB
text/typescript
import inquirer from "inquirer";
import chalk from 'chalk';
import { createSpinner } from 'nanospinner';
import { Teacher } from "./classes.js";
import { Student } from "./classes.js";
import { Course } from "./classes.js";
let teacher = Teacher.teacher
let student = Student.student
let course = Course.course
let sleep = () => new Promise((r) => setTimeout(r, 1000))
export async function teacherOptions() {
const result: any = await inquirer.prompt([
{
type: 'rawlist',
name: 'teacherMenu',
message: 'Teacher Menu : ',
choices: [
'Add New Teacher',
'View Teacher',
'Assign Course',
'Back'
],
}
]);
if (result.teacherMenu == "Add New Teacher") {
await teacherAdd()
}
if (result.teacherMenu == "View Teacher") {
await ViewTeacher(teacher)
}
if (result.teacherMenu == "Assign Course") {
await assignTeacher(teacher,student,course)
}
}
async function teacherAdd() {
const result = await inquirer.prompt([
{
type: "input",
name: "name",
message: "Enter Teacher Name : "
},
{
type: "number",
name: "age",
message: "Enter Teacher Age : "
}
]);
let newTeachers = new Teacher(result.name, result.age)
const spinner = createSpinner('Adding Teacher').start()
await sleep()
Teacher.addTeacher(newTeachers)
spinner.success({ text: chalk.greenBright("Teacher Added Successfully") })
}
// View Teacher Function
async function ViewTeacher(teacher:Teacher[]) {
if (!teacher.length) {
console.log(chalk.redBright('############ No Teacher Available ############'))
return
}
console.table(teacher.map((val) => {
return {
Name: val.name,
Age: val.age,
Assigned_Course : val.courseEnroll.length? val.courseEnroll: "No Course Assigned"
}
}))
}
async function assignTeacher(teachers:Teacher[],students: Student[], courses: Course[]) {
if (!teacher.length) {
console.log(chalk.redBright('############ No Teacher Available ############'))
return
}
ViewTeacher(teacher)
const input = await inquirer.prompt([
{
name: 'index',
message: 'Enter Index to Register In Course OR Any key to Exit : ',
type: 'number'
}
]);
const index: number = input['index'];
if (index <= teacher.length - 1 && index >= 0) {
if (!courses.length) {
console.log(chalk.redBright('############ No Course Available ############'));
return;
}
const courseChoices = courses.map(val => {
return { name: `${val.courseName}` };
});
const courseInput = await inquirer.prompt([
{
name: 'course',
message: 'Select Course: ',
type: 'list',
choices: courseChoices
}
]);
const selectedCourseName = courseInput.course;
const selectedCourse = courses.find((course) => course.courseName === selectedCourseName);
let teacher_Name = teachers[index].name
let teacher = teachers.at(index) as Teacher
if (teacher?.courseEnroll.includes(selectedCourseName)) {
console.log(chalk.redBright("############ TEACHER ALREADY ASSIGNED IN THIS COURSE ############") )
return
}
if (selectedCourse) {
teachers[index].courseEnroll.push(courseInput.course);
selectedCourse.teacherName.push(teacher_Name);
console.log(chalk.yellowBright(`Course ${selectedCourseName} assign for teacher ${teachers[index].name}.`));
} else {
console.log('Course not found or not selected. Assignment failed.');
}
} else{
console.log(chalk.redBright('############ Teacher Not Found ############'))
}
}