#include<fstream>
#include<string>
#include<iostream>
#include<iomanip>
#include <conio.h>
#include<string.h>
using namespace std;
class course{
public:
string CRN;
string title;
string department;
string room;
}; //course
class student{
public:
string fname, lname, major;
double gpa;
int courses[3];// course ids *primary key
}; //student
student e[100];
course c[100];
int n=0;
int z=0;
// student functions
void load(){
ifstream studentFile("students.txt", ios::in);
ifstream courseFile("courses.txt", ios::in);
while(studentFile>>e[n].fname>>e[n].lname>>e[n].major>>e[n].gpa>>e[n].courses[0]>>e[n].courses[1]>>e[n].courses[2]){
n++;}//WHILE
while(courseFile>>c[z].CRN>>c[z].title>>c[z].department>>c[z].room){
z++;}//WHILE
}//LOAD the student
void store(){
ofstream studentFile("students.txt",ios::out);
for(int i=0; i<n; i++){
if(e[i].fname!=" ")
studentFile<<e[i].fname<<" "<<e[i].lname<<" "<<e[i].major<<" "<<e[i].gpa<<" "<<e[i].courses[0]<<"
"<<e[i].courses[1]<<" "<<e[i].courses[2]<<endl;
//" "insert space between the words
}//FOR
ofstream courseFile("courses.txt", ios::out);
for(int j=0; j<z; j++){
if(c[j].CRN!=" ")
courseFile<<c[j].CRN <<" "<<c[j].title<<" "<<c[j].department<<" "<<c[j].room<<endl;
}//FOR
}//STORE
void insert(){
cout<<"Enter student's first name: "; cin>>e[n].fname;
cout<<"Enter student's last name: "; cin>>e[n].lname;
cout<<"Enter student's major: "; cin>>e[n].major;
if(cin.fail()){
cout<<"Error\n"; exit(1);}
cout<<"Enter studen's gpa: "; cin>>e[n].gpa;
cout<<"Enter the first course ID: "; cin>>e[n].courses[0];
cout<<"Enter the second course ID: "; cin>>e[n].courses[1];
cout<<"Enter the third course ID: "; cin>>e[n].courses[2];
n++;
}//INSERTS THE RECORD TO ARRAY
void display(){
cout<<setiosflags(ios::left)<<setw(15)<<"First Name"<<setw(15)<<"Last Name";
cout<<setw(10)<<"Major"<<setw(10)<<"GPA";
cout<<setw(10)<<"course 1"<<setw(10)<<"course 2"<<setw(10)<<"course 3";
cout<<endl<<endl;
cout<<setiosflags(ios::fixed|ios::showpoint|ios::left);
for(int i=0;i<n;i++){
if(e[i].fname!=" "){
cout<<setiosflags(ios::left)<<setw(15)<<e[i].fname<<setw(15)<<e[i].lname;
cout<<setprecision(2)<<setiosflags(ios::left)<<setw(10)<<e[i].major;
cout<<setw(10)<<e[i].gpa;
cout<<setw(10)<<c[e[i].courses[0]].title<<setw(10)<<c[e[i].courses[1]].title<<setw(10)<<c[e[i].courses[2]].title;
cout<<resetiosflags(ios::left)<<endl;
cout<<endl;}//IF
}//FOR
}//THIS FUNCTION DISPLAYS ALL RECORDS IN ARRAY
int search(string s){
for(int i=0;i<n;i++) if(s==e[i].lname) return i;//FOR
return -1;
}//SEARCH BY NAME,-1 NOT FOUND
void update(){
string searchn;
cout<<"Enter the Last Name of the Student to be modified: "; cin>>searchn;
int i=search(searchn);
if(i==-1) cout<<"STUDENT NOT LISTED"<<endl;
else{
cout<<endl<<"Please enter the updated information."<<endl;
cout<<"Enter student's first name: "; cin>>e[i].fname;
cout<<"Enter student's last name: "; cin>>e[i].lname;
cout<<"Enter major: "; cin>>e[i].major;
cout<<"Enter gpa: "; cin>>e[i].gpa;
cout<<"Enter the 1st class ID:"; cin>>e[i].courses[0];
cout<<"Enter the 2nd class ID:"; cin>>e[i].courses[1];
cout<<"Enter the 3rd class ID:"; cin>>e[i].courses[2];
cout<<endl<<endl;
}//ELSE
}//UPDATE
// Course functions
void addcourse(){
cout<<"Enter course CRN: "; cin>>c[z].CRN;
cout<<"Enter course title: "; cin>>c[z].title;
cout<<"Enter course department: "; cin>>c[z].department;
if(cin.fail()){
cout<<"Error\n"; exit(1);}
cout<<"Enter course room: "; cin>>c[z].room;
z++;
}//addCourse
void displaycourse(){
cout<<setiosflags(ios::left)<<setw(15)<<"CRN"<<setw(15)<<"title";
cout<<setw(15)<<"department"<<setw(15)<<"room";
cout<<endl<<endl;
cout<<setiosflags(ios::fixed|ios::showpoint|ios::left);
for(int i=0;i<n;i++){
if(c[i].CRN!=" "){
cout<<setiosflags(ios::left)<<setw(15)<<c[i].CRN<<setw(15)<<c[i].title;
cout<<setprecision(2)<<setiosflags(ios::left)<<setw(15)<<c[i].department;
cout<<setw(15)<<c[i].room;
cout<<resetiosflags(ios::left)<<endl;
}//IF
}//FOR
string departmentname;
cout<<"enter department to view courses:";
cin>>departmentname;
for( i=0;i<n;i++){
if(c[i].department==departmentname){
cout<<setiosflags(ios::left)<<setw(15)<<c[i].CRN<<setw(15)<<c[i].title;
cout<<setprecision(2)<<setiosflags(ios::left)<<setw(15)<<c[i].department;
cout<<setw(15)<<c[i].room;
cout<<resetiosflags(ios::left)<<endl;
}//IF
}//FOR
}//THIS FUNCTION DISPLAYS ALL courses
int searchcourse(string crn){
for(int i=0;i<z;i++) if(crn==c[i].CRN) return i;//FOR
return -1;
}//SEARCH BY CRN,-1 NOT FOUND
void updatecourse(){
string searchc;
cout<<"Enter the CRN of the course to be modified: "; cin>>searchc;
int i=searchcourse(searchc);
if(i==-1) cout<<"COURSE NOT LISTED"<<endl;
else{
cout<<endl<<"Please enter the updated information."<<endl;
cout<<"Enter course's CRN: "; cin>>c[i].CRN;
cout<<"Enter course's title: "; cin>>c[i].title;
cout<<"Enter course's department: "; cin>>c[i].department;
cout<<"Enter course's room: "; cin>>c[i].room;
cout<<endl<<endl;
}//ELSE
}//UPDATE the course
/*
void deleterec()
{
string searchn;
cout<<"Enter the Last Name of the student to delete: "; cin>>searchn;
int k=-1;
for(int j=0; j<n;j++)
{
if(searchn==e[j].lname)
k=j;
}
if(k!=-1)
{
cout<<" Name: "<<e[k].fname<<" "<<e[k].lname<<endl;
cout<<" Major: "<<e[k].major<<endl;
cout<<" GPA: "<<e[k].gpa<<endl;
}
char ans;
cout<<endl<<"Do you want to delete this record? (Y/N): ";
cin>>ans;
if(ans=='Y'||ans=='y')
{
e[k].fname=" ";
}//IF
else cout<<"STUDENT NOT FOUND";
}//DELETE
*/
void report(){
string lname;
int i;
int j;
cout<<"Enter the student's last name:"<<endl; cin>>lname;
for(i=0;i<n;i++){
if(e[i].lname==lname) {
for(j=0;j<3;j++){
cout<<setiosflags(ios::left)<<setw(15)<<c[e[i].courses[j]].CRN<<setw(15)<<c[e[i].courses[j]].title;
cout<<setprecision(2)<<setiosflags(ios::left)<<setw(15)<<c[e[i].courses[j]].department;
cout<<setw(15)<<c[e[i].courses[j]].room;
cout<<resetiosflags(ios::left)<<endl;}//FOR
} //if
} // for
}//REPORT
/*
void deletefile()
{
int pword;
cout<<"Enter your administrative password: "; cin>>pword;
if(pword==5438)
{
ofstream record("student.txt", ios::out);
record<<endl;
load();
record.close();
}
else cout<<"Wrong password entered."<<endl;
}//DELETE FILE
void backupfile()
{
system("copy student.txt backup.txt");
cout<<endl<<"Back-up file has been made."<<endl;
}//BACKUPFILE use cp command for UNIX
*/
void studentmenu()
{
char choice='z';
system("cls");
cout<<"Student Menu"<<endl<<endl;
cout<<"1. Insert Student Record"<<endl;
cout<<"2. Display All Records"<<endl;
cout<<"3. Search by Last Name"<<endl;
cout<<"4. Search by Student ID"<<endl;
cout<<"5. Update Record"<<endl;
cout<<"8. Delete Database File"<<endl;
cout<<"9. Back-up Database File"<<endl;
cin>>choice;
switch (choice)
{
case '1': insert(); break;
case '2': display(); break;
case '3':
char s[100];
int index;
cout<<"Enter the last name of the student you want: ";
cin>>s;
index=search(s);
if(index!=-1)
{
cout<<"Name: "<<e[index].fname<<" "<<e[index].lname<<endl;
cout<<"Major: "<<e[index].major<<endl;
cout<<"GPA: "<<e[index].gpa<<endl;
}//IF
else cout<<"EMPLOYEE NOT FOUND"<<endl;
break;
case '4':
int id;
cout<<"Enter Student ID: " ;
cin>>id;
if(id < n)
{
cout<<"Name: "<<e[id].fname<<" "<<e[id].lname<<endl;
cout<<"Major: "<<e[id].major<<endl;
cout<<"GPA: "<<e[id].gpa;
}
else cout<<"Student not found"<<endl;
break;
case '5': update(); break;
case 'e': store(); break; //EXIT
default: cout<<"Invalid Choice"<<endl; break;
}//SWITCH
}//studentmenu
void coursemenu()
{
char choice='z';
system("cls");
cout<<"Course Menu"<<endl;
cout<<"Add Course (a)"<<endl;
cout<<"Search for Course (s)"<<endl;
cin>>choice;
switch(choice)
{
case 'a':
addcourse();
break;
case 's':
char crn[100];
int index;
cout<<"Enter the CRN of the course: ";
cin>>crn;
index=searchcourse(crn);
if(index!=-1)
{
cout<<"CRN: "<<c[index].CRN<<endl;
cout<<"Title: "<<c[index].title<<endl;
cout<<"Room: "<<c[index].room<<endl;
cout<<"Department: "<<c[index].department<<endl;
}//IF
else cout<<"COURSE NOT FOUND"<<endl;
break;
default: cout<<"Invalid Choice"<<endl;
break;
}//SWITCH
}//coursemenu
int login(){
char username[15], password[7];
int limit=0;
ifstream fin("login.txt");
int correct=0;//use as a flag
while(limit<3){
cout<<"\nPlease Enter your name: "<<endl;
cin>>username;
cout<<"\nPlease Enter your password (6 char) :"<<endl;
for(int i=0;i<6;i++){password[i] = getch(); cout<<'*';cout.flush();}//FOR
password[i]='\0';//last character to 0
char u[15], p[7]; //read from the login.txt
while(fin >> u >> p){
if(strcmp(username,u)==0 && strcmp(password,p)==0){
cout<<"\nYour Password is ACCEPTED"<<endl;
correct=1;
return 1;
}//IF
} //while
if(correct==0){cout<<"\nYour Password is incorrect. Please try again."<<endl;
limit++;}//IF
}//WHILE
cout<<"\nSorry, you've used all your chances."<<endl;
return 0;
}//login
void main()
{
if(login()){cout<<"\nWelcome to the SUNY OW Database!"<<endl;
load();
char choice='z';
while (choice!='e'&&choice!='E')
{
cout<<endl<<"SUNY OW Database"<<endl;
cout<<"Student Menu(s)"<<endl;
cout<<"Course Menu(c)"<<endl;
cout<<"Save Database(x)"<<endl;
cout<<endl<<"Type e To Exit"<<endl;
cin>>choice;
switch (choice)
{
case 's': studentmenu();
break;
case 'c':
coursemenu();
break;
case 'x':store();
break;
case 'e':store();
break;//Exit
default: cout<<"Invalid Choice"<<endl;
break;
}//SWITCH
cout<<endl<<endl;
cout<<"1. Insert Student Record and Compute Gpa"<<endl;
cout<<"2. Display All Records"<<endl;
cout<<"3. Search by Last Name"<<endl;
cout<<"4. Serch by Student ID"<<endl;
cout<<"5. Update Record"<<endl;
cout<<"6. Delete Record"<<endl;
cout<<"7. Generate Report"<<endl;
cout<<"8. Delete Database File"<<endl;
cout<<"9. Back-up Database File"<<endl<<endl;
cout<<endl<<"Type e to exit"<<endl;
cout<<"Enter the number of your choice:";
cin>>choice;
cout<<endl;
switch (choice)
{
case '1': insert();
break;
case '2': display();
break;
case '3': char s[100];
int index;
cout<<"Enter the last name of the student you want: ";
cin>>s;
index=search(s);
if(index!=-1)
{
cout<<"Name: "<<e[index].fname<<" "<<e[index].lname<<endl;
cout<<"Major: "<<e[index].major<<endl;
cout<<"Gpa: "<<e[index].gpa<<endl;
}//IF
else cout<<"STUDENT NOT FOUND"<<endl;
break;
case '4':
int id;
cout<<"Enter Student ID:";
cin>>id;
if(id<n)
{
cout<<"Name:"<<e[id].fname<<""<<e[id].lname<<endl;
cout<<"Major:"<<e[id].major<<endl;
cout<<"GPA:"<<e[id].gpa<<endl;
}
else
cout<<"Student not found"<<endl;
break;
case '5': update(); break;
//case '6': deleterec(); break;
case '7': report(); break;
//case '8': deletefile(); break;
//case '9': backupfile(); break;
case 'e': store(); break; //EXIT
default: cout<<"Invalid Choice"<<endl; break;
}//SWITCH
}//WHILE
}//if
else {cout<<"Sorry!You don't have the chance!"<<endl;
}//else
}//MAIN
กก