hello
me and my friends were assigned to make a program that can add,delete,update and show information. we were able to make this code ( am sending u ) but we cannot solve some problem like the after adding or deleting or any other work the window does not goes back to front window. and if a court is booked its again became book by next information. like if student 1 books at 14:00 court A date 21/4/2011 . next person who wants the court at the same time just get the court ( needs this court to be booked for that time after it was booked by the 1st person).
hope we get help soon
#include <string>
#include <cstdlib> // system()
#include <conio.h> // getch()
#include <fstream>
#include <sys\stat.h> // stat(status of a file)
#include <iostream>
#include <iomanip>
using namespace std;
//Data types
struct Student_Record // Student record
{
string ID;
string time;
string program;
string age;
string date;
string court;
bool deleted;
};
//Variable Declarations & Constants
#define STUDENT_FILE_NAME "Student.txt" // name of the database file to store Students informations
Student_Record Student;
char choice; // for choice in menu
fstream *fs = NULL, *fs1 = NULL;// file streams for files : fs -> 'Student', fs1 -> 'temp'
bool deletion = false; // if any record has been deleted
//Functions
void closeFile(fstream *); // closes a file with its pointer, then deletes the file pointer
bool isFileExist(const char *); // check if a file exists
//Main
int main()
{
cout << "\n\n\n\n\n\n";
cout << " ******************************************************\n";
cout << " * PPPPp L A Y Y !! *\n";
cout << " * P P L A A Y Y !! *\n";
cout << " * PPPPP L A A Y Y !! *\n";
cout << " * P L AAAAAAA Y Y !! *\n";
cout << " * P L A A Y !! *\n";
cout << " * P LLLLLL A A Y OO *\n";
cout << " * *\n";
cout << " ******************************************************\n\n";
cout << " "; system("pause");
while (true)
{
do
{
system( "cls" );
cout << "\n < ##INTI International University ## >";
cout << "\n < ********Tennis Court Reservation System******** > \n\n\n";
cout << " 1. Add a new Record \n";
cout << " 2. Modify an existing Record\n";
cout << " 3. Delete an existing Record\n";
cout << " 4. Search an existing Record\n";
cout << " 5. Display Records\n";
cout << " 0. Exit \n\n";
cout << " Enter a choice (0-5) : " << flush;
choice = _getch();
} while ( choice < '0' || choice > '5'); // choice not between 1 and 5, show menu again
system( "cls" );
// to modify, delete or display records, database file should exist, then we have some records
if (choice == '2' || choice == '3' || choice == '4')
{
if (!isFileExist(STUDENT_FILE_NAME)) // if database file doesn't exist
{
cout << "\nDatabase file ('" << STUDENT_FILE_NAME << "') doesn't exist, then there are no records." << endl;
system("pause");
continue; // show the menu again
}
}
int recs_num; // number of records before the record for modifying(deletion)
string id;
switch ( choice )
{
case '1' : //Add Record
cout << "\n\t\t < Entering a new record > ";
cout << "\n Enter the following informations for the new record : ";
cout<<"Please Enter ID";
cout << "\nID - Only Numbers \n(Ex: 1001) : ";
getline(cin,Student.ID);
while (( Student.ID.size()<=3 ) || ( Student.ID.size()>4) || ( Student.ID.find_first_of( "0123456789" ) == string::npos))
{
cout << "Invalid ! Please Re-Enter ID Again !!" << endl;
cout << "Please Enter Your ID : " ;
getline (cin, Student.ID);
}
cout << "\n\nTIME(Ex: 1400 24Hrs System) : ";
getline(cin, Student.time);
while((Student.time.size() <4) || (Student.time.size() >4) || (Student.time.find_first_of ("0123456789")==string::npos ))
{
cout << "Invalid ! Please Re-Enter Your Time Again !!" << endl;
cout << "Please Enter Time : ";
getline(cin,Student.time);
}
cout << "\n" ;
cout << "\nPROGRAM \n(Ex: CFPI): ";
getline(cin, Student.program);
while ((Student.program.size()<=0 ) || ( Student.program.size()>6) || ( Student.program.find_first_of( "QWERTYUIOPLKJHGFDSAZXCVBNM" ) == string::npos))
{
cout << "Invalid ! Please Re-Enter Your Program Again !! " << endl;
cout << "Please Enter Your Program: " ;
getline (cin,Student.program);
}
cout<<"\n";
cout << "Enter Your Age\n (Ex.21) : ";
getline (cin,Student.age);
while ((Student.age.size()<=0 ) || ( Student.age.size()>2) || ( Student.age.find_first_of( "0123456789" ) == string::npos))
{
cout << "Invalid ! Please Re-Enter Your Age Again !! " << endl;
cout << "Please Enter Your Age : " ;
getline (cin, Student.age);
}
cout << "\n" ;
cout << "\nDATE \n(Ex: 10/2/2010):";
getline(cin,Student.date);
while ((Student.date.size()<6) || ( Student.date.size()>10) || ( Student.date.find_first_of( "/0123456789" ) == string::npos))
{
cout << "Invalid ! Please Re-Enter Your Date Again !! " << endl;
cout << "Please Enter Your Date : " ;
getline (cin, Student.date);
}
cout << "\n" ;
cout << "\nCOURT \n(Ex: A):";
getline(cin,Student.court);
while ((Student.court.size()==11) || (Student.court.find_first_of("ABCDEFG") == string::npos))
{
cout << "Invalid ! Please Re-Enter Your Court Again !! " << endl;
cout << "Please Enter Your Court : " ;
getline (cin, Student.court);
}
cout << "\n" ;
Student.deleted = 0;
fs = new fstream( STUDENT_FILE_NAME, ios::out | ios::app | ios::binary );
if (!fs)
{
cout << "\nCan't open or create '" << STUDENT_FILE_NAME << "' file" << endl;
system("pause");
break;
}
fs->write( (char *) &Student, sizeof(Student) );
closeFile(fs);
cout << "\nRecord added." << endl;
system("pause");
break;
case '2' : //Modify Record
cout << "\n Enter Student ID, that you want modify its information : ";
cin >> id;
cin.ignore();
fs = new fstream( STUDENT_FILE_NAME, ios::in | ios::out | ios::binary );
if (!fs)
{
cout << "\nCan't open or create '" << STUDENT_FILE_NAME << "' file" << endl;
system("pause");
break;
}
recs_num = -1;
while (fs->read( (char *) &Student, sizeof(Student) ))
{
recs_num++;
if ( Student.ID == id && !Student.deleted)
break;
}
if (fs->eof()) // if (the record is not in the file || it's there but it's deleted)
{
cout << "\nYour specified Customer doesn't exist in file." << endl;
closeFile(fs);
system("pause");
break;
}
cout << "\n Enter new informations for this record : ";
cout << "\nID - Only Numbers \n(Ex: 1001) : ";
cin >> Student.ID;
cin.ignore();
cout << "\n\nTIME(Ex: 14.00 24Hrs System) : ";
getline(cin, Student.time);
cout << "\nPROGRAM \n(Ex: CFPI): ";
getline(cin, Student.program);
cout << "\nAGE \n(Ex: 21):";
cin.ignore();
cout << "\nDATE \n(Ex: 10/2/2010):";
cin >> Student.date;
cin.ignore();
cout << "\nCOURT \n(Ex: A):";
cin >> Student.court;
cin.ignore();
fs->seekp ( sizeof(Student) * recs_num, ios::beg ); // go to the first of the record to be modified
fs->write( (char *) &Student, sizeof(Student) );
closeFile(fs);
cout << "\nRecord is modified." << endl;
system("pause");
break;
case '3' : //Delete Record
cout << "\n Enter Student's ID, for deletion : ";
cin >> id;
cin.ignore();
fs = new fstream( STUDENT_FILE_NAME, ios::in | ios::out | ios::binary );
if (!fs)
{
cout << "\nCan't open or create '" << STUDENT_FILE_NAME << "' file." << endl;
system("pause");
break;
}
recs_num = -1;
while (fs->read( (char *) &Student, sizeof(Student) ))
{
recs_num++;
if ( Student.ID == id && !Student.deleted ) // if user deleted an Student then added another one with the same ID in the same instance of program runs, deleted Student is still there, then we should go through all the file
break;
}
if (fs->eof()) // if (the record is not in the file || it's there but it's deleted)
{
cout << "\nYour specified Customer doesn't exist in database file." << endl;
closeFile(fs);
system("pause");
break;
}
case '4' : //Search Record
cout << "\n Enter Student.ID, that you want to search : ";
cin >> id;
cin.ignore();
fs = new fstream( STUDENT_FILE_NAME, ios::in | ios::binary );
if (!fs)
{
cout << "\nCan't open or create '" << STUDENT_FILE_NAME << "' file" << endl;
system("pause");
break;
}
recs_num = -1;
while (fs->read( (char *) &Student, sizeof(Student) ))
{
recs_num++;
if ( Student.ID == id && !Student.deleted ) // if user deleted an Customer then added another one with the same ID in the same instance of program runs, deleted Student is still there, then we should go through all the file
break;
}
if (fs->eof()) // if (the record is not in the file || it's there but it's deleted)
{
cout << "\nYour specified Student doesn't exist in file." << endl;
closeFile(fs);
system("pause");
break;
}
fs->seekp ( sizeof(Student) * recs_num, ios::beg ); // go to the searched record
fs->read( (char *) &Student, sizeof(Student) ); // display the searched record
if ( !Student.deleted)
{
Student.deleted = 1;
fs->seekp ( sizeof(Student) * recs_num, ios::beg );
fs->write( (char *) &Student, sizeof(Student) );
closeFile(fs);
deletion = true; // we have some deleted records
cout << "\nRecord is deleted." << endl;
system("pause");
break;
{
cout << "\n\n";
cout << "ID\t\t\t: " << Student.ID << '\n';
cout << "TIME\t\t\t: " << Student.time << '\n';
cout << "PROGRAM\t: " << Student.program << '\n';
cout << "AGE\t\t\t: " << Student.age<< '\n';
cout << "DATE\t\t\t: " << Student.date<< '\n';
cout << "COURT\t\t: " << Student.court << '\n';
}
cout << "\nTo return to menu, "; system("pause");
closeFile(fs);
break;
case '5' : // Display Records
fs = new fstream( STUDENT_FILE_NAME, ios::in | ios::binary );
if (!fs)
{
cout << "\nCan't open or create '" << STUDENT_FILE_NAME << "' file." << endl;
system("pause");
break;
}
cout << "\n\t\t\t < Student Records >\n\n";
cout << "ID\tTIME\t\tPROGRAM\t\tAGE\tDATE\tCOURT\n"
<< "------------------------------------------------------------------------------\n";
while (fs->read( (char *) &Student, sizeof(Student) )) // display records
{
if ( !Student.deleted )
{
cout << Student.ID << "\t";
cout << Student.time << '\t';
cout << Student.program<< '\t';
cout << Student.age << " ";
cout << Student.time<< " ";
cout <<Student.court << '\t';
}
}
cout << "\nTo return to menu, "; system("pause");
closeFile(fs);
break;
case '0' : // Exit
if (deletion) // if there is any deletion, then update database file (create a new temp file that doesn't have deleted records, then remove the old database file and rename temp file to database file name)
{
cout << "\nUpdating '" << STUDENT_FILE_NAME << "' File..." << endl;
fs = new fstream( STUDENT_FILE_NAME, ios::in | ios::binary );
if (!fs)
{
cout << "\nCan't open '" << STUDENT_FILE_NAME << "' file, then Updating is incomplete." << endl;
system("pause");
system( "cls" );
return 1;
}
fs1 = new fstream( "temp", ios::out | ios::binary);
if (!fs1)
{
cout << "\nCan't create temp file, then Updating is incomplete." << endl;
system("pause");
closeFile(fs);
system( "cls" );
return 1;
}
// write nondeleted records to the temp file
while (fs->read( (char *) &Student, sizeof(Student) ))
if ( !Student.deleted )
fs1->write( (char *) &Student, sizeof(Student) );
closeFile(fs);
closeFile(fs1);
if( remove( STUDENT_FILE_NAME ) == -1 ) // if there is an error
{
cout << "\nCan't delete '" <<STUDENT_FILE_NAME << "' file, then Updating is incomplete." << endl;
system("pause");
system( "cls" );
return 1;
}
struct stat st; // to check size of the temp file
int res = stat( "temp", &st );
if (st.st_size == 0) // if all of records are deleted then the temp file size is zero
remove( "temp" ); // we have no records, then no database file is needed, just delete the temp file
else
if ( rename ("temp", STUDENT_FILE_NAME) )
{
cout << "\nCan't rename temp file, then Updating is incomplete." << endl;
system("pause");
system( "cls" );
return 1;
}
cout << "\nUpdating database file completed." << endl;
system("pause");
}
system( "cls" );
//Exit Splash Screen
cout << "\n\n\n\n\n\n";
cout << " \n";
cout << " GGGGGG OOOOO OOOOO DDD BBBB Y Y EEEEE \n";
cout << " G O O O O D D B B Y Y E \n";
cout << " G O O O O D D B B Y Y E \n";
cout << " G GGG O O O O D D BBBB YY EEEE \n";
cout << " G G O O O O D D B B YY E \n";
cout << " G G O O O O D D B B YY E \n";
cout << " GGGGGG OOOOO OOOOO DDD BBBB YY EEEEE \n";
cout << " \n";
cout << " \n\n\n\n\n\n\nThank You,Sir.\n"; system("break");
return 0;
break;
} // end 'switch'
} // end 'while'
return 0;
} // end 'main()'
}
//Function Modules
void closeFile(fstream *fs)
{
fs->close(); // close the file
delete fs;
fs = NULL;
}
bool isFileExist(const char * file_name)
{
struct stat st; // to check status of file
int res = stat( file_name, &st );
return (res == 0); // if file exists
}
thnx in advance