#include <iostream.h>
#include <fstream.h>
#include <process.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <conio.h>
#include <dos.h>
int pass();
void abt();
void start();
int pass()
{
 char a[750],b[500];
 clrscr();
 textcolor(BLUE);
 textbackground(LIGHTGREEN);
 clrscr();
 cout<<"\n\n\tENTER YOUR LIBRARIAN USER NAME\n\n\t";
 gets(a);
 if(strcmp(a,"LIBRARY001")!=0)
 {
  cout<<"\n\tSORRY FOR THE INCONVIENIENCE,YOU HAVE NO ACCESS TO THIS DATA\n\t";
  getch();
  return(0);
 }
 cout<<"\n\tENTER YOUR LIBRARIAN CODE\n\t";
 gets(b);
 if(strcmp(b,"C123")!=0)
 {
   cout<<"\n\tSORRY FOR THE INCONVENIENCE, YOU HAVE NO ACCESS TO THIS DATA\n\t";
   getch();
   return(0);
  }
 cout<<"\n\t*************  WELCOME  *************\n\n\t";
 getch();
 return(1);
}
void start()
{
 char a[50];
 int i;
 strcpy(a,"COMPUTER SCIENCE PROJECT");
 textcolor(RED);
 textbackground(GREEN);
 clrscr();
 gotoxy(10,20);
 cout<<"-------------------------------------------------------";
 gotoxy(9,21);
 cout<<"|";
 gotoxy(9,22);
 cout<<"|";
 gotoxy(9,23);
 cout<<"|";
 gotoxy(10,24);
 cout<<"-------------------------------------------------------";
 gotoxy(65,21);
 cout<<"|";
 gotoxy(65,22);
 cout<<"|";
 gotoxy(65,23);
 cout<<"|";
 gotoxy(24,22);
 for(i=0;i<=24;++i)
 {
   cout<<a[i];
   delay(150);
 }
 delay(150);
}
void abt()
{
 clrscr();
 textbackground(RED);
 textcolor(CYAN);
 gotoxy(1,5);
 clreol();
 textcolor(GREEN+BLINK);
 textbackground(BLUE);
 clreol();
 gotoxy(18,5);
 cout<<"******** LIBRARY MANAGEMENT SYSTEM ********";
 gotoxy(5,10);
 cout<<"THIS APPLICATION WAS PROGRAMMED AS A PROJECT DONE BY \n";
 gotoxy(5,12);
 cout<<"BATCH {IV}: OF STD:- XII.C SUBMITTED TO THE COMPUTER \n";
 gotoxy(5,14);
 cout<<"TEACHER Smt: SUJA MISS. \n";
 gotoxy(5,18);
 cout<<"MEMBERS OF BATCH 4 :- ";
 gotoxy(21,20);
 cout<<"1. THEJUS VARGHESE";
 gotoxy(21,22);
 cout<<"2. THOMAS G KAIALATH";
 gotoxy(21,24);
 cout<<"3. VISHNU C P";
 gotoxy(21,26);
 cout<<"4. VIVEK V S";
 getch();
}
class MENU
{
	public :
			void main_menu(void) ;
			void introduction(void) ;
	private :
			void edit_menu(void) ;
			void edit_book(void) ;
			void edit_member(void) ;
} ;
class BOOK
{
	public :
			void list(void) ;
			char *bookname(int) ;
	protected :
			void add_new_book(int, char tname[33], char tauthor[26], float, int, int) ;
			void update_copies(int, int, int) ;
			void modify(int, char[], char[], float) ;
			void deletion(void) ;
			int  book_found(int) ;
			int  bookname_found(char []) ;
			int  recordno(int) ;
			int  available(int) ;
			char *authorname(int) ;
			float bookprice(int) ;
			int  no_of_copies(int) ;
			int  bookcodeof(char[]) ;
			void display(int) ;
			int  reccount(void) ;
			void delete_rec(int) ;
			int book_code;
			int   avail ;
	private :
			int    copies ;
			char  name[33], author[26] ;
			float price ;

} ;
class MEMBER
{
	public :
			void listm(void) ;
	protected :

			void add_mem(int, int, char [], char [], char[], int, int, int,int);
			void modify(int, char[], char[], char[]) ;
			int  member_found(int) ;
			void update_book(int, int, int, int, int,int) ;
			char *membername(int) ;
			char *memberphone(int) ;
			char *memberaddress(int) ;
			int  recordno(int) ;
			int  lastcode(void) ;
			int  issued(int) ;
			int  fine(int) ;
			void display(int) ;
			void delete_reco(int) ;
			int memcode,bookcode,x;
	private :
			char name[26], phone[10], address[33] ;
			int  dd, mm, yy ;   // DATE OF RETURNING THE BOOK //
} ;
class WORKING : public BOOK, public MEMBER
{
	public :
			void issuebook(void) ;
			void returnbook(void) ;
			void add_book(void) ;
			void add_member(void) ;
			void modify_book(void) ;
			void modify_member(void) ;
			void delete_book(void) ;
			void delete_member(void) ;
};
class DATE
{
	public :
			void extend_date(int,int,int,int) ;
			int  diff(int, int, int, int, int, int) ;
			int  day, mon, year ;
} ;
void DATE :: extend_date(int d1, int m1, int y1, int days)
{
	static int month[] = {31,29,31,30,31,30,31,31,30,31,30,31} ;
	for (int i=1; i<=days; i++)
	{
		d1++ ;
		if ((d1 > month[m1-1]) || (y1%4 != 0 && m1 == 2 && d1 > 28))
		{
			d1 = 1 ;
			m1++ ;
		}
		if (m1 > 12)
		{
			m1 = 1 ;
			y1++ ;
		}
	}
	day  = d1 ;
	mon  = m1 ;
	year = y1 ;
}
int DATE :: diff(int d1, int m1, int y1, int d2, int m2, int y2)
{
	int days = 0 ;
	if ((y2<y1) || (y2==y1 && m2<m1) || (y2==y1 && m2==m1 && d2<d1))
		return days ;
	static int month[] = {31,29,31,30,31,30,31,31,30,31,30,31} ;
	while (d1 != d2 || m1 != m2 || y1 != y2)
	{
		days++ ;
		d1++ ;
		if ((d1 > month[m1-1]) || (y1%4 != 0 && m1 == 2 && d1 > 28))
		{
			d1 = 1 ;
			m1++ ;
		}
		if (m1 > 12)
		{
			m1 = 1 ;
			y1++ ;
		}
	}
	return days ;
}
void MENU :: main_menu()
{
	int w;
	char ch ;
	while (1)
	{
		clrscr() ;
		textcolor(LIGHTGREEN);
		textbackground(BLACK);
		clrscr();
		gotoxy(29,6) ;
		cout <<"B O O K  L I B R A R Y" ;
		gotoxy(29,7) ;
		cout <<"~~~~~~~~~~~~~~~~~~~~~~" ;
		gotoxy(30,10) ;
		cout <<"1. INTRODUCTION" ;
		gotoxy(30,12) ;
		cout <<"2. ADD NEW BOOK" ;
		gotoxy(30,14) ;
		cout <<"3. ADD NEW MEMBER" ;
		gotoxy(30,16) ;
		cout <<"4. ISSUE BOOK" ;
		gotoxy(30,18) ;
		cout <<"5. RETURN BOOK" ;
		gotoxy(30,20) ;
		cout <<"6. LIST OF BOOKS" ;
		gotoxy(30,22) ;
		cout <<"7. LIST OF MEMBERS" ;
		gotoxy(30,24) ;
		cout <<"8. EDIT" ;
		gotoxy(30,26);
		cout<<"9. ABOUT THE APPLICATION";
		gotoxy(30,28) ;
		cout <<"0. QUIT" ;
		gotoxy(30,32) ;
		cout <<"Enter your choice : " ;
		ch = getche() ;
		textcolor(RED);
		textbackground(CYAN);
		if (ch == 27)
			break ;
		else
		if (ch == '1')
			introduction() ;
		else
		if (ch == '2')
		{

			w=pass();
			if(!w)
			{
			 continue;
			}
			WORKING W ;
			W.add_book() ;
		}
		else
		if (ch == '3')
		{

			WORKING W ;
			W.add_member() ;
		}
		else
		if (ch == '4')
		{
			w=pass();
			if(!w)
			{
			 continue;
			}
			WORKING W ;
			W.issuebook() ;
		}
		else
		if (ch == '5')
		{
				w=pass();
			if(!w)
			{
			 continue;
			}
			WORKING W ;
			W.returnbook() ;
		}
		else
		if (ch == '6')
		{
			BOOK B ;
			B.list() ;
		}
		else
		if (ch == '7')
		{
			MEMBER M ;
			M.listm() ;
		}
		else if (ch == '8')
	       {
				w=pass();
			if(!w)
			{
			 continue;
			}
			edit_menu() ;
		}
		else  if(ch== '9')
		     abt();
		else  if (ch == '0')
			break ;
	}
}
void MENU :: edit_menu(void)
{
	char ch ;
	while (1)
	{
		clrscr() ;
		gotoxy(32,9) ;
		cout <<"E D I T  M E N U";
		gotoxy(32,10) ;
		cout <<"~~~~~~~~~~~~~~~~" ;
		gotoxy(34,13) ;
		cout <<"1. BOOKS" ;
		gotoxy(34,14) ;
		cout <<"2. MEMBERS" ;
		gotoxy(34,15) ;
		cout <<"0. EXIT" ;
		gotoxy(31,17) ;
		cout <<"Enter your choice : " ;
		ch = getche() ;
		if (ch == 27)
			break ;
		else
		if (ch =='1')
			edit_book() ;
		else
		if (ch == '2')
			edit_member() ;
		else
		if (ch == '0')
			break ;
	}
}
void MENU :: edit_book(void)
{
	char ch ;
	while (1)
	{
		clrscr() ;
		gotoxy(31,9) ;
		cout <<"E D I T  B O O K S";
		gotoxy(31,10) ;
		cout <<"~~~~~~~~~~~~~~~~~~" ;
		gotoxy(34,13) ;
		cout <<"1. MODIFY" ;
		gotoxy(34,14) ;
		cout <<"2. DELETE" ;
		gotoxy(34,15) ;
		cout <<"0. EXIT" ;
		gotoxy(31,17) ;
		cout <<"Enter your choice : " ;
		ch = getche() ;
		if (ch == 27)
			break ;
		else
		if (ch == '1')
		{
			WORKING W ;
			W.modify_book() ;
		}
		else
		if (ch == '2')
		{
			WORKING W ;
			W.delete_book() ;
		}
		else
		if (ch == '0')
			break ;
	}
}
void MENU :: edit_member(void)
{
	char ch ;
	while (1)
	{
		clrscr() ;
		gotoxy(29,9) ;
		cout <<"E D I T  M E M B E R S";
		gotoxy(29,10) ;
		cout <<"~~~~~~~~~~~~~~~~~~~~~~" ;
		gotoxy(34,13) ;
		cout <<"1. MODIFY" ;
		gotoxy(34,14) ;
		cout <<"2. DELETE" ;
		gotoxy(34,15) ;
		cout <<"0. EXIT" ;
		gotoxy(29,17) ;
		cout <<"Enter your choice : " ;
		ch = getche() ;
		if (ch == 27)
			break ;
		else
		if (ch == '1')
		{
			WORKING W ;
			W.modify_member() ;
		}
		else
		if (ch == '2')
		{
			WORKING W ;
			W.delete_member() ;
		}
		else
		if (ch == '0')
			break ;
	}
}
void MENU :: introduction(void)
{
	clrscr() ;
	textcolor(CYAN);
	textbackground(RED);
	clrscr();
	gotoxy(31,5) ;
	cout <<"Welcome to Project" ;
	textcolor(BLACK+BLINK) ; textbackground(WHITE) ;
	gotoxy(33,7) ;
	cprintf(" BOOK LIBRARY ") ;
	textcolor(LIGHTGRAY) ; textbackground(BLACK) ;
	gotoxy(15,10) ;
	cout <<"This  project has facility of maintaining  records" ;
	gotoxy(15,12) ;
	cout <<"of BOOKS and MEMBERS." ;
	gotoxy(15,14) ;
	cout <<"This  project  can  hold more  than  10,000  books" ;
	gotoxy(15,16) ;
	cout <<"records." ;
	gotoxy(15,18) ;
	cout <<"One member can issue one book at a time. If he/she" ;
	gotoxy(15,20) ;
	cout <<"does  not return book upto 15 days he/she have  to" ;
	gotoxy(15,22) ;
	cout <<"pay fine of Rs.2/- per day." ;
	textcolor(LIGHTBLUE+BLINK) ;
	gotoxy(27,24) ;
	cprintf("Press any key to continue") ;
	textcolor(LIGHTGRAY) ;
	getch() ;
}
int BOOK :: book_found(int tcode)
{
	fstream file ;
	file.open("BOOK.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	int found=0 ;
	while (file.read((char *) this, sizeof(BOOK)))
	{
		if (book_code == tcode)
		{
			found = 1 ;
			break ;
		}
	}
	file.close() ;
	return found ;
}
int BOOK :: bookname_found(char t1code[33])
{
	fstream file ;
	file.open("BOOK.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	int found=0 ;
	while (file.read((char *) this, sizeof(BOOK)))
	{
		if (!strcmpi(name,t1code))
		{
			found = 1 ;
			break ;
		}
	}
	file.close() ;
	return found ;
}
int BOOK :: recordno(int tcode)
{
	fstream file ;
	file.open("BOOK.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	int count=0 ;
	while (file.read((char *) this, sizeof(BOOK)))
	{
		count++ ;
		if (book_code == tcode)
			break ;
	}
	file.close() ;
	return count ;
}
int BOOK :: available(int tcode)
{
	fstream file ;
	file.open("BOOK.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	int tavail=0 ;
	while (file.read((char *) this, sizeof(BOOK)))
	{
		if (book_code == tcode)
		{
			tavail = avail ;
			break ;
		}
	}
	file.close() ;
	return tavail ;
}
int BOOK :: no_of_copies(int tcode)
{
	fstream file ;
	file.open("BOOK.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	int tcopies=0 ;
	while (file.read((char *) this, sizeof(BOOK)))
	{
		if (book_code == tcode)
		{
			tcopies = copies ;
			break ;
		}
	}
	file.close() ;
	return tcopies ;
}
char *BOOK :: bookname(int tcode)
{
	fstream file ;
	file.open("BOOK.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	char tname[33] ;
	while (file.read((char *) this, sizeof(BOOK)))
	{
		if (book_code == tcode)
		{
			strcpy(tname,name) ;
			break ;
		}
	}
	file.close() ;
	return tname ;
}
char *BOOK :: authorname(int tcode)
{
	fstream file ;
	file.open("BOOK.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	char tauthor[26] ;
	while (file.read((char *) this, sizeof(BOOK)))
	{
		if (book_code == tcode)
		{
			strcpy(tauthor,author) ;
			break ;
		}
	}
	file.close() ;
	return tauthor ;
}
float BOOK :: bookprice(int tcode)
{
	fstream file ;
	file.open("BOOK.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	float tprice=0.0 ;
	while (file.read((char *) this, sizeof(BOOK)))
	{
		if (book_code == tcode)
		{
			tprice = price ;
			break ;
		}
	}
	file.close() ;
	return tprice ;
}
int BOOK :: bookcodeof(char t1code[33])
{
	fstream file ;
	file.open("BOOK.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	int tcode=0 ;
	while (file.read((char *) this, sizeof(BOOK)))
	{
		if (!strcmpi(name,t1code))
		{
			tcode = book_code ;
			break ;
		}
	}
	file.close() ;
	return tcode ;
}
int BOOK :: reccount(void)
{
	fstream file ;
	file.open("BOOK.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	int count=0 ;
	while (file.read((char *) this, sizeof(BOOK)))
		count++ ;
	file.close() ;
	return count ;
}
void BOOK :: delete_rec(int tcode)
{
	fstream file ;
	file.open("BOOK.DAT", ios::in) ;
	fstream temp ;
	temp.open("temp.dat", ios::out) ;
	file.seekg(0,ios::beg) ;
	while ( !file.eof() )
	{
		file.read((char *) this, sizeof(BOOK)) ;
		if ( file.eof() )
			break ;
		if ( book_code != tcode )
			temp.write((char *) this, sizeof(BOOK)) ;
	}
	file.close() ;
	temp.close() ;
	file.open("BOOK.DAT", ios::out) ;
	temp.open("temp.dat", ios::in) ;
	temp.seekg(0,ios::beg) ;
	while ( !temp.eof() )
	{
		temp.read((char *) this, sizeof(BOOK)) ;
		if ( temp.eof() )
			break ;
		file.write((char *) this, sizeof(BOOK)) ;
	}
	file.close() ;
	temp.close() ;
}
void BOOK :: add_new_book(int tcode,char tname[33], char tauthor[26], float tprice, int tcopies, int tavail)
{
	fstream file ;
	file.open("BOOK.DAT", ios::app) ;
	book_code = tcode ;
	strcpy(name,tname) ;
	strcpy(author,tauthor) ;
	price = tprice ;
	copies = tcopies ;
	avail = tavail ;
	file.write((char *) this, sizeof(BOOK)) ;
	file.close() ;
}
void BOOK :: update_copies(int tcode, int tcopies, int tavail)
{
	fstream file ;
	file.open("BOOK.DAT", ios::in) ;
	fstream temp ;
	temp.open("temp.dat", ios::out) ;
	file.seekg(0,ios::beg) ;
	while ( !file.eof() )
	{
		file.read((char *) this, sizeof(BOOK)) ;
		if ( file.eof() )
			break ;
		if ( book_code == tcode )
		{
			copies = tcopies ;
			avail = tavail ;
			temp.write((char *) this, sizeof(BOOK)) ;
		}
		else
			temp.write((char *) this, sizeof(BOOK)) ;
	}
	file.close() ;
	temp.close() ;
	file.open("BOOK.DAT", ios::out) ;
	temp.open("temp.dat", ios::in) ;
	temp.seekg(0,ios::beg) ;
	while ( !temp.eof() )
	{
		temp.read((char *) this, sizeof(BOOK)) ;
		if ( temp.eof() )
			break ;
		file.write((char *) this, sizeof(BOOK)) ;
	}
	file.close() ;
	temp.close() ;
}
void BOOK :: modify(int tcode, char tname[33], char tauthor[26], float tprice)
{
	fstream file ;
	file.open("BOOK.DAT", ios::in) ;
	fstream temp ;
	temp.open("temp.dat", ios::out) ;
	file.seekg(0,ios::beg) ;
	while ( !file.eof() )
	{
		file.read((char *) this, sizeof(BOOK)) ;
		if ( file.eof() )
			break ;
		if ( book_code == tcode )
		{
			strcpy(name,tname) ;
			strcpy(author,tauthor) ;
			price = tprice ;
			temp.write((char *) this, sizeof(BOOK)) ;
		}
		else
			temp.write((char *) this, sizeof(BOOK)) ;
	}
	file.close() ;
	temp.close() ;
	file.open("BOOK.DAT", ios::out) ;
	temp.open("temp.dat", ios::in) ;
	temp.seekg(0,ios::beg) ;
	while ( !temp.eof() )
	{
		temp.read((char *) this, sizeof(BOOK)) ;
		if ( temp.eof() )
			break ;
		file.write((char *) this, sizeof(BOOK)) ;
	}
	file.close() ;
	temp.close() ;
}
void BOOK :: display(int tcode)
{
	fstream file ;
	file.open("BOOK.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	while (file.read((char *) this, sizeof(BOOK)))
	{
		if (book_code == tcode)
		{
			gotoxy(5,5) ;
			cout <<"Book Code   : " <<book_code ;
			gotoxy(5,7) ;
			cout <<"Book Name   : " <<name ;
			gotoxy(5,8) ;
			cout <<"Author Name : " <<author ;
			gotoxy(5,9) ;
			cout <<"Price       : Rs." <<price ;
			gotoxy(5,10) ;
			cout <<"Copies      : " <<price ;
			gotoxy(5,11) ;
			cout <<"Available   : " <<avail ;
			break ;
		}
	}
	file.close() ;
}
void BOOK :: list(void)
{
	clrscr() ;
	int row = 6 , found=0, flag=0 ;
	char ch ;
	gotoxy(33,2) ;
	cout <<"LIST OF BOOKS" ;
	gotoxy(32,3) ;
	cout <<"~~~~~~~~~~~~~~~" ;
	gotoxy(1,4) ;
	cout <<"CODE  BOOK NAME                        AUTHOR                    PRICE  COPIES" ;
	gotoxy(1,5) ;
	cout <<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" ;
	fstream file ;
	file.open("BOOK.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	while (file.read((char *) this, sizeof(BOOK)))
	{
		flag = 0 ;
		delay(20) ;
		found = 1 ;
		gotoxy(2,row) ;
		cout <<book_code ;
		gotoxy(7,row) ;
		cout<<name ;
		gotoxy(40,row) ;
		cout	<<author ;
		gotoxy(66,row) ;
		cout	<<price ;
		gotoxy(73,row) ;
		cout <<copies ;
		textbackground(WHITE) ; textcolor(BLACK) ;
		gotoxy(40,row+2) ;
		cprintf("STATUS: ") ;
		textcolor(BLACK+BLINK) ;
		cprintf("%d copies available",avail) ;
		textbackground(BLACK) ; textcolor(LIGHTGRAY) ;
		if ( row == 22 )
		{
			flag = 1 ;
			row = 6 ;
			gotoxy(1,25) ;
			cout <<"Press any key to continue or Press <ESC> to exit" ;
			ch = getch() ;
			if (ch == 27)
				break ;
			clrscr() ;
			gotoxy(33,2) ;
			cout <<"LIST OF BOOKS" ;
			gotoxy(32,3) ;
			cout <<"~~~~~~~~~~~~~~~" ;
			gotoxy(1,4) ;
			cout <<"CODE  BOOK NAME                        AUTHOR                    PRICE  COPIES" ;
			gotoxy(1,5) ;
			cout <<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" ;
		}
		else
			row = row + 5 ;
	}
	if (!found)
	{
		gotoxy(5,10) ;
		cout <<"\7Records not found" ;
	}
	if (!flag)
	{
		gotoxy(1,25) ;
		cout <<"Press any key to continue..." ;
		getche() ;
	}
	file.close ();
}

int MEMBER :: member_found(int mcode)
{
	fstream file ;
	file.open("MEMBER.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	int found=0 ,b;
	while (file.read((char *) this, sizeof(MEMBER)))
	{
		if (memcode == mcode)
		{
			found = 1 ;
			break ;
		}

	}
	file.close() ;
	return found;
}
int MEMBER :: issued(int mcode)
{
	fstream file ;
	file.open("MEMBER.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	int missue=0 ;
	while (file.read((char *) this, sizeof(MEMBER)))
	{
		if (memcode == mcode)
		{
			missue = bookcode ;
			break ;
		}
	}
	file.close() ;
	return missue ;
}


//**********************************************************
// THIS FUNCTION CALCULATE AND RETURN FINE FOR THE GIVEN
// MEMBER CODE.
//**********************************************************

int MEMBER :: fine(int mcode)
{
	DATE D ;
	int d1, m1, y1 ;
	struct date d;
	getdate(&d);
	d1 = d.da_day ;
	m1 = d.da_mon ;
	y1 = d.da_year ;
	fstream file ;
	file.open("MEMBER.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	int days, t_fine ;
	while (file.read((char *) this, sizeof(MEMBER)))
	{
		if (memcode == mcode)
		{
			days = D.diff(dd,mm,yy,d1,m1,y1) ;
			t_fine = days * 2 ;
			break ;
		}
	}
	file.close() ;
	return t_fine ;
}


//**********************************************************
// THIS FUNCTION RETURN THE LAST CODE OF THE MEMBER FILE.
//**********************************************************

int MEMBER :: lastcode(void)
{
	fstream file ;
	file.open("MEMBER.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	int mcode=0 ;
	while (file.read((char *) this, sizeof(MEMBER)))
		mcode = memcode;
	file.close() ;
	return mcode ;
}


//**********************************************************
// THIS FUNCTION RETURNS MEMBER NAME OF THE GIVEN MEMBER
// CODE.
//**********************************************************

char *MEMBER :: membername(int mcode)
{
	fstream file ;
	file.open("MEMBER.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	char mname[26] ;
	while (file.read((char *) this, sizeof(MEMBER)))
	{
		if (memcode == mcode)
		{
			strcpy(mname,name) ;
			break ;
		}
	}
	file.close() ;
	return mname ;
}


//**********************************************************
// THIS FUNCTION RETURNS MEMBER PHONE OF THE GIVEN MEMBER
// CODE.
//**********************************************************

char *MEMBER :: memberphone(int mcode)
{
	fstream file ;
	file.open("MEMBER.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	char mphone[10] ;
	while (file.read((char *) this, sizeof(MEMBER)))
	{
		if (memcode == mcode)
		{
			strcpy(mphone,phone) ;
			break ;
		}
	}
	file.close() ;
	return mphone ;
}


//**********************************************************
// THIS FUNCTION RETURNS MEMBER ADDRESS OF THE GIVEN MEMBER
// CODE.
//**********************************************************

char *MEMBER :: memberaddress(int mcode)
{
	fstream file ;
	file.open("MEMBER.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	char maddress[33] ;
	while (file.read((char *) this, sizeof(MEMBER)))
	{
		if (memcode == mcode)
		{
			strcpy(maddress,address) ;
			break ;
		}
	}
	file.close() ;
	return maddress ;
}


//**********************************************************
// THIS FUNCTION RETURNS RECORD NO. OF THE GIVEN MEMBER
// CODE.
//**********************************************************

int MEMBER :: recordno(int mcode)
{
	fstream file ;
	file.open("MEMBER.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	int count=0 ;
	while (file.read((char *) this, sizeof(MEMBER)))
	{
		count++ ;
		if (memcode == mcode)
			break ;
	}
	file.close() ;
	return count ;
}
void MEMBER :: delete_reco(int mcode)
{
	fstream file ;
	file.open("MEMBER.DAT", ios::in) ;
	fstream temp ;
	temp.open("temp.dat", ios::out) ;
	file.seekg(0,ios::beg) ;
	while ( !file.eof() )
	{
		file.read((char *) this, sizeof(MEMBER)) ;
		if ( file.eof() )
			break ;
		if ( memcode != mcode )
			temp.write((char *) this, sizeof(MEMBER)) ;
	}
	file.close() ;
	temp.close() ;
	file.open("MEMBER.DAT", ios::out) ;
	temp.open("temp.dat", ios::in) ;
	temp.seekg(0,ios::beg) ;
	while ( !temp.eof() )
	{
		temp.read((char *) this, sizeof(MEMBER)) ;
		if ( temp.eof() )
			break ;
		file.write((char *) this, sizeof(MEMBER)) ;
	}
	file.close() ;
	temp.close() ;
}

void MEMBER :: update_book(int mcode, int tcode, int d1, int m1, int y1,int y)
{
	fstream file ;
	file.open("MEMBER.DAT", ios::in) ;
	fstream temp ;
	temp.open("temp.dat", ios::out) ;
	file.seekg(0,ios::beg) ;
	while ( !file.eof() )
	{
		file.read((char *) this, sizeof(MEMBER)) ;
		if ( file.eof() )
			break ;
		if ( memcode == mcode )
		{
			bookcode = tcode ;
			dd = d1 ;
			mm = m1 ;
			yy = y1 ;
			x=y;
			temp.write((char *) this, sizeof(MEMBER)) ;
		}
		else
			temp.write((char *) this, sizeof(MEMBER)) ;
	}
	file.close() ;
	temp.close() ;
	file.open("MEMBER.DAT", ios::out) ;
	temp.open("temp.dat", ios::in) ;
	temp.seekg(0,ios::beg) ;
	while ( !temp.eof() )
	{
		temp.read((char *) this, sizeof(MEMBER)) ;
		if ( temp.eof() )
			break ;
		file.write((char *) this, sizeof(MEMBER)) ;
	}
	file.close() ;
	temp.close() ;
}

void MEMBER :: modify(int mcode, char mname[26], char mphone[10], char maddress[33])
{
	fstream file ;
	file.open("MEMBER.DAT", ios::in) ;
	fstream temp ;
	temp.open("temp.dat", ios::out) ;
	file.seekg(0,ios::beg) ;
	while ( !file.eof() )
	{
		file.read((char *) this, sizeof(MEMBER)) ;
		if ( file.eof() )
			break ;
		if ( memcode == mcode )
		{
			strcpy(name,mname) ;
			strcpy(phone,mphone) ;
			strcpy(address,maddress) ;
			temp.write((char *) this, sizeof(MEMBER)) ;
		}
		else
			temp.write((char *) this, sizeof(MEMBER)) ;
	}
	file.close() ;
	temp.close() ;
	file.open("MEMBER.DAT", ios::out) ;
	temp.open("temp.dat", ios::in) ;
	temp.seekg(0,ios::beg) ;
	while ( !temp.eof() )
	{
		temp.read((char *) this, sizeof(MEMBER)) ;
		if ( temp.eof() )
			break ;
		file.write((char *) this, sizeof(MEMBER)) ;
	}
	file.close() ;
	temp.close() ;
}
void MEMBER :: add_mem(int mcode, int bcode, char mname[36], char maddress[33], char mphone[20], int d1, int m1, int y1,int y)
{
	fstream file ;
	file.open("MEMBER.DAT", ios::app) ;
	memcode = mcode;
	bookcode = bcode ;
	strcpy(name,mname) ;
	strcpy(phone,mphone) ;
	strcpy(address,maddress) ;
	dd = d1 ;
	mm = m1 ;
	yy = y1 ;
	x=y;
	file.write((char *) this, sizeof(MEMBER)) ;
	file.close() ;
}


void MEMBER :: display(int mcode)
{
	fstream file ;
	file.open("MEMBER.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	while (file.read((char *) this, sizeof(MEMBER)))
	{
		if (memcode == mcode)
		{
			gotoxy(5,3) ;
			cout <<"Member Code # " <<mcode ;
			gotoxy(5,4) ;
			cout <<"~~~~~~~~~~~~~~~~~" ;
			gotoxy(5,6) ;
			cout <<"Name    : " <<name ;
			gotoxy(5,7) ;
			cout <<"Phone   : " <<phone ;
			gotoxy(25,7);
			cout<<"              ";
			gotoxy(5,8) ;
			cout <<"Address : " <<address ;
			break ;
		}
	}
	file.close() ;
}


//**********************************************************
// THIS FUNCTION DISPLAY THE LIST OF THE MEMBERS
//**********************************************************

void MEMBER :: listm(void)
{
	clrscr() ;
	BOOK B ;
	int row = 6 , found=0, flag=0 ;
	char ch ;
	gotoxy(32,2) ;
	cout <<"LIST OF MEMBERS" ;
	gotoxy(31,3) ;
	cout <<"~~~~~~~~~~~~~~~~~" ;
	gotoxy(1,4) ;
	cout <<"CODE  BOOK CODE        NAME                     PHONE           ADDRESS   " ;
	gotoxy(1,5) ;
	cout <<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" ;
	fstream file ;
	file.open("MEMBER.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	while (file.read((char *) this, sizeof(MEMBER)))
	{
		flag = 0 ;
		delay(20) ;
		found = 1 ;
		gotoxy(2,row) ;
		cout <<memcode ;
		gotoxy(10,row) ;
		cout <<bookcode ;
		gotoxy(19,row) ;
		cout<<name ;
		gotoxy(48,row) ;
		cout <<phone ;
		gotoxy(58,row);
		cout<<"     ";
		cout<<address;
		gotoxy(71,row);
		textbackground(WHITE) ;
		textcolor(BLACK) ;
		gotoxy(10,row+2) ;
		if (bookcode == 0)
		{
		cout<<"BOOK_NAME: ";
		gotoxy(25,row+2);
		cprintf(" (Not Issued)") ;
		}
		else
		{
			cprintf("BOOK NAME: %s",B.bookname(bookcode)) ;
			gotoxy(45,row+2) ;
			cprintf("Date of return: ") ;
			textcolor(BLACK+BLINK) ;
			cprintf("%d/%d/%d",dd,mm,yy) ;
		     }
			textbackground(BLACK) ;
			textcolor(LIGHTGRAY) ;
		if ( row == 22 )
		{
			flag = 1 ;
			row = 6 ;
			gotoxy(1,25) ;
			cout <<"Press any key to continue or Press <ESC> to exit" ;
			ch = getch() ;
			if (ch == 27)
			break ;
			clrscr() ;
			gotoxy(32,2) ;
			cout <<"LIST OF MEMBERS" ;
			gotoxy(31,3) ;
			cout <<"~~~~~~~~~~~~~~~~~" ;
			gotoxy(1,4) ;
			cout <<"CODE  BOOK CODE   NAME          PHONE           ADDRESS" ;
			gotoxy(1,5) ;
			cout <<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" ;
		}
		else
			row = row + 5 ;
	}
	if (!found)
	{
		gotoxy(5,10) ;
		cout <<"\nRecords not found" ;
	}
	if (!flag)
	{
		cout <<"\n\n\tPress any key to continue..." ;
		getche() ;
	}
	file.close () ;
	cout<<"\n";
}


//**********************************************************
// THIS FUNCTION GIVES DATA TO ADD RECORD IN THE BOOK FILE.
//**********************************************************

void WORKING :: add_book(void)
{
	if (!reccount())  // MEMBER FUNCTION OF BOOK
	{
		add_new_book(0,"null","null",0.0,0,0) ;
		BOOK::delete_rec(0) ;
	}
	char ch ;
	int tcode, tcopies, tavail ;
	char tname[33], tauthor[26] ;
	float tprice=0.0 ;
	do
	{
		int found=0, valid=0 ;
		int tc ;
		float t2=0.0 ;
		char t[10], t1[10] ;
		clrscr() ;
		gotoxy(29,3) ;
		cout <<"ADDITION OF THE BOOKS" ;
		gotoxy(29,4) ;
		cout <<"~~~~~~~~~~~~~~~~~~~~~" ;
		gotoxy(72,1) ;
		cout <<"<0>=Exit" ;
		gotoxy(5,25) ;
		cout <<"Enter code no. of the book" ;
		gotoxy(5,5) ;
		cout <<"Code no. " ;
		gets(t) ;
		tc = atoi(t) ;
		tcode = tc ;
		if (tcode == 0)
			return ;
		if (book_found(tcode))
		{
			found = 1 ;
			gotoxy(19,8) ;
			cout <<bookname(tcode) ;
			gotoxy(19,9) ;
			cout <<authorname(tcode) ;
			gotoxy(22,10) ;
			cout <<bookprice(tcode) ;
		}
		gotoxy(5,8) ;
		cout <<"Book Name   : " ;
		gotoxy(5,9) ;
		cout <<"Author Name : " ;
		gotoxy(5,10) ;
		cout <<"Price       : Rs." ;
		gotoxy(5,12) ;
		cout <<"Copies      : " ;
		valid = 0 ;
		while (!valid && !found)
		{
			valid = 1 ;
			gotoxy(5,25) ;
			clreol() ;
			cout<<"Enter the name of the book" ;
			gotoxy(19,8) ;
			clreol() ;
			gets(tname) ;
			strupr(tname) ;
			if (tname[0] == '0')
				return ;
			if (strlen(tname) < 1 || strlen(tname) > 32)
			{
				valid = 0 ;
				gotoxy(5,25) ; clreol() ;
				cout <<"\nEnter correctly (Range: 1..32)" ;
				getch() ;
			}
		}
		valid = 0 ;
		while (!valid && !found)
		{
			valid = 1 ;
			gotoxy(5,25) ; clreol() ;
			cout <<"Enter the author's name of the book" ;
			gotoxy(19,9) ; clreol() ;
			gets(tauthor) ;
			strupr(tauthor) ;
			if (tauthor[0] == '0')
				return ;
			if (strlen(tauthor) < 1 || strlen(tauthor) > 25)
			{
				valid = 0 ;
				gotoxy(5,25) ; clreol() ;
				cout <<"\7Enter correctly (Range: 1..25)" ;
				getch() ;
			}
		}
		valid = 0 ;
		while (!valid && !found)
		{
			valid = 1 ;
			gotoxy(5,25) ; clreol() ;
			cout <<"Enter the price of the book" ;
			gotoxy(22,10) ; clreol() ;
			gets(t1) ;
			t2 = atof(t1) ;
			tprice = t2 ;
			if (t1[0] == '0')
				return ;
			if (tprice < 1 || tprice > 9999)
			{
				valid = 0 ;
				gotoxy(5,25) ; clreol() ;
				cout <<"\7Enter correctly" ;
				getch() ;
			}
		}
		valid = 0 ;
		while (!valid)
		{
			valid = 1 ;
			gotoxy(5,25) ;
			clreol() ;
			cout <<"Enter no. of copies of book to be added" ;
			gotoxy(19,12) ; clreol() ;
			gets(t) ;
			tc = atoi(t) ;
			tcopies = tc ;
			if (t[0] == '0')
				return ;
			if (tcopies < 1 || tcopies > 50)
			{
				valid = 0 ;
				gotoxy(5,25) ; clreol() ;
				cout <<"\7Enter correctly" ;
				getch() ;
			}
		}
		tavail = available(tcode) + tcopies ;
		tcopies = no_of_copies(tcode) + tcopies ;
		gotoxy(5,25) ; clreol() ;
		do
		{
			gotoxy(5,15) ; clreol() ;
			cout <<"Do you want to save (y/n) : " ;
			ch = getche() ;
			ch = toupper(ch) ;
		} while (ch != 'Y' && ch != 'N') ;

		if (ch == 'Y')
		{
			if (found)
				update_copies(tcode,tcopies,tavail) ;
			else
				add_new_book(tcode,tname,tauthor,tprice,tcopies,tavail) ;
		}
		do
		{
			gotoxy(5,17) ; clreol() ;
			cout <<"Do you want to add more (y/n) : " ;
			ch = getche() ;
			ch = toupper(ch) ;
		} while (ch != 'Y' && ch != 'N') ;
	} while (ch == 'Y') ;
}


//**********************************************************
// THIS FUNCTION GIVES DATA TO ADD RECORD IN THE MEMBER FILE
//**********************************************************

void WORKING :: add_member(void)
{
	char ch ;
	int mcode, bcode ;
	char mname[26], mphone[10], maddress[33] ;
	int d1, m1, y1 ;
	mcode = lastcode() ;
	if (mcode == 0)
	{
		add_mem(mcode,0,"null","null","null",0,0,0,1) ;
		MEMBER::delete_reco(mcode) ;
	}
	mcode++ ;
	do
	{
		int valid=0 ;
		clrscr() ;
		gotoxy(28,3) ;
		cout <<"ADDITION OF THE MEMBERS" ;
		gotoxy(28,4) ;
		cout <<"~~~~~~~~~~~~~~~~~~~~~~~" ;
		gotoxy(72,1) ;
		cout <<"<0>=Exit" ;
		gotoxy(5,7) ;
		cout <<"Member Code # " <<mcode ;
		gotoxy(5,8) ;
		cout <<"~~~~~~~~~~~~~~~~~" ;
		gotoxy(5,10) ;
		cout <<"Name    : " ;
		gotoxy(5,12) ;
		cout <<"Phone   : " ;
		gotoxy(5,14) ;
		cout <<"Address : " ;
		do
		{
			valid = 1 ;
			gotoxy(5,25) ;
			clreol() ;
			cout <<"Enter the name of the New Member" ;
			gotoxy(15,10) ;
			clreol() ;
			gets(mname) ;
			strupr(mname) ;
			if (mname[0] == '0')
				return ;
			if (strlen(mname) < 1 || strlen(mname) > 25)
			{
				valid = 0 ;
				gotoxy(5,25) ; clreol() ;
				cout <<"\7Enter correctly (Range: 1..25)" ;
				getch() ;
			}
		} while (!valid) ;
		do
		{
			valid = 1 ;
			gotoxy(5,25) ; clreol() ;
			cout <<"Enter Phone no. of the Member or Press <ENTER> for none" ;
			gotoxy(15,12) ; clreol() ;
			gets(mphone) ;
			if (mphone[0] == '0'&&strlen(mphone)==1)
				return ;
			if (strlen(mphone) < 7 && strlen(mphone) > 0)
			{
				valid = 0 ;
				gotoxy(5,25) ; clreol() ;
				cout <<"\7Enter correctly" ;
				getch() ;
			}
		} while (!valid) ;
		if (strlen(mphone) == 0)
			strcpy(mphone,"-") ;
		do
		{
			valid = 1 ;
			gotoxy(5,25) ;
			clreol() ;
			cout <<"Enter the address of the New Member" ;
			gotoxy(15,14) ; clreol() ;
			gets(maddress) ;
			strupr(maddress) ;
			if (maddress[0] == '0')
				return ;
			if (strlen(maddress) < 1 || strlen(maddress)> 32)
			{
				valid = 0 ;
				gotoxy(5,25) ;
				clreol() ;
				cout <<"\7Enter correctly (Range: 1..32)" ;
				getch() ;
			}
		} while (!valid) ;
		gotoxy(5,25) ; clreol() ;
		do
		{
			gotoxy(5,17) ; clreol() ;
			cout <<"Do you want to save (y/n) : " ;
			ch = getche() ;
			ch = toupper(ch) ;
			if (ch == '0')
				return ;
		} while (ch != 'Y' && ch != 'N') ;
		if (ch == 'Y')
		{
			bcode = 0 ;
			d1 = 0 ;
			m1 = 0 ;
			y1 = 0 ;
			add_mem(mcode,bcode,mname,maddress,mphone,d1,m1,y1,1) ;
			mcode++ ;
		}
		do
		{
			gotoxy(5,19) ; clreol() ;
			cout <<"Do you want to add more (y/n) : " ;
			ch = getche() ;
			ch = toupper(ch) ;
			if (ch == '0')
				return ;
		} while (ch != 'Y' && ch != 'N') ;
	} while (ch == 'Y') ;

	getch();
}

void WORKING :: issuebook(void)
{
	BOOK B ;
	MEMBER M ;
	DATE D ;
	clrscr();
	textcolor(CYAN);
	textbackground(RED);
	clrscr();
	char t1code[33], ch,tode[56] ;
	int t2code=0,	tcode=0, mcode=0 ;
	int valid ;
	int d1, m1, y1 ;
	struct date d;
	getdate(&d);
	d1 = d.da_day ;
	m1 = d.da_mon ;
	y1 = d.da_year ;
	do
	{
		valid = 1 ;
		while (1)
		{
			clrscr() ;
			gotoxy(5,2) ;
			cout <<"Date : " <<d1 <<"/" <<m1 <<"/" <<y1 ;
			gotoxy(72,1) ;
			cout <<"<0>=Exit" ;
			gotoxy(5,5) ;
			cout <<"Enter Code or Name of the Book to be issued" ;
			gotoxy(5,6) ;
			cout <<"                  or                       " ;
			gotoxy(5,7) ;
			cout <<"Press <ENTER> for help  " ;
			gets(t1code) ;
			if (t1code[0] == '0')
				return ;
			if (strlen(t1code) == 0)
				B.list() ;
			else
				break ;
		}
		t2code = atoi(t1code) ;
		tcode = t2code ;
		if ((tcode == 0 && !bookname_found(t1code)) || ((tcode != 0) && (!book_found(tcode))))
		{
			valid = 0 ;
			gotoxy(5,10) ;
			cout <<"\7Record not found" ;
			gotoxy(5,11) ;
			cout <<"Press <ESC> to exit or any other key to continue..." ;
			ch = getch() ;
			if (ch == 27)
				return ;
		}
	} while (!valid) ;
	if (tcode == 0)
		tcode = bookcodeof(t1code) ;

	do
	{
		valid = 1 ;
		while (1)
		{
			clrscr() ;
			gotoxy(72,1) ;
			cout <<"<0>=Exit" ;
			gotoxy(5,2) ;
			cout <<"Date : " <<d1 <<"/" <<m1 <<"/" <<y1 ;
			gotoxy(5,5) ;
			cout <<"Book Name: " <<bookname(tcode) ;
			gotoxy(5,7) ;
			cout <<"Enter Code no. of the Member" ;
			gotoxy(5,8) ;
			cout <<"            or              " ;
			gotoxy(5,9) ;
			cout <<"Press <ENTER> for help  " ;
			gets(t1code) ;
			strcpy(tode,t1code);
			if (t1code[0] == '0')
				return ;
			if (strlen(t1code) == 0)
				M.listm() ;
			else
				break ;
		}
		t2code = atoi(t1code) ;
		mcode = t2code ;
		if (mcode == 0)
		{
			valid = 0 ;
			gotoxy(5,25) ;
			cout <<"\7Enter Correctly" ;
			getch() ;
		}
		if (!member_found(mcode) && valid)
		{
			valid = 0 ;
			gotoxy(5,13) ;
			cout <<"\7Record not found " ;
			gotoxy(5,16) ;
			cout <<"Press <ESC> to exit or any other key to continue..." ;
			ch = getch() ;
			if (ch == 27)
				return ;
		}
		if(issued(mcode))
		{
		 gotoxy(5,14);
		 cout<<"Member has a book with him.\n\tA Member can take only one book At a time" ;
		 gotoxy(5,18) ;
		 cout <<"Press <ESC> to exit or any other key to continue..." ;
			ch = getch() ;
			if (ch == 27)
				return ;
		}

	} while (!valid) ;
	if (!available(tcode))
	{
		gotoxy(5,10) ;
		cout <<"\7Sorry! Book (" <<bookname(tcode) <<") is not available" ;
		gotoxy(5,12) ;
		cout <<"Kindly issue any other Book" ;
		gotoxy(5,14) ;
		cout <<"See List of Books" ;
		getch() ;
		return ;
	}

	int tcopies, tavail ;
	tcopies = no_of_copies(tcode) ; // member function of BOOK
	tavail  = available(tcode) - 1 ; // member function of BOOK
	update_copies(tcode,tcopies,tavail) ;  // member function of BOOK
	D.extend_date(d1,m1,y1,15) ;
	d1 = D.day ;
	m1 = D.mon ;
	y1 = D.year ;
	update_book(mcode,tcode,d1,m1,y1,0) ;  // member function of MEMBER
	gotoxy(5,13) ;
	cout <<"\7Book is issued to " <<membername(mcode) ;
	gotoxy(5,15) ;
	cout <<"Date of Return : " <<d1 <<"/" <<m1 <<"/" <<y1 ;
	getch() ;
}


//**********************************************************
// THIS FUNCTION RETURNS THE BOOK FOR THE MEMBER
//**********************************************************

void WORKING :: returnbook(void)
{
	MEMBER M ;
	clrscr();
	textcolor(CYAN);
	textbackground(RED);
	clrscr();
	char t1code[5], ch ;
	int t2code=0, mcode=0, valid ;
	int d1, m1, y1 ;
	struct date d;
	getdate(&d);
	d1 = d.da_day ;
	m1 = d.da_mon ;
	y1 = d.da_year ;
	do
	{
		valid = 1 ;
		while (1)
		{
			clrscr() ;
			gotoxy(72,1) ;
			cout <<"<0>=Exit" ;
			gotoxy(5,2) ;
			cout <<"Date : " <<d1 <<"/" <<m1 <<"/" <<y1 ;
			gotoxy(5,7) ;
			cout <<"Enter Code no. of the Member who wants to return book" ;
			gotoxy(5,8) ;
			cout <<"                        or              " ;
			gotoxy(5,9) ;
			cout <<"Press <ENTER> for help  " ;
			gets(t1code) ;
			if (t1code[0] == '0')
				return ;
			if (strlen(t1code) == 0)
				M.listm() ;
			else
				break ;
		}
		t2code = atoi(t1code) ;
		mcode = t2code ;
		if (mcode == 0)
		{
			valid = 0 ;
			gotoxy(5,25) ;
			cout <<"\7Enter Correctly" ;
			getch() ;
		}
		if (!member_found(mcode) && valid)
		{
			valid = 0 ;
			gotoxy(5,13) ;
			cout <<"\7Record not found" ;
			gotoxy(5,14) ;
			cout <<"Press <ESC> to exit or any other key to continue..." ;
			ch = getch() ;
			if (ch == 27)
				return ;
		}
		if (!issued(mcode) && valid)
		{
			valid = 0 ;
			gotoxy(5,13) ;
			cout <<"\7Member have no book to return" ;
			gotoxy(5,14) ;
			cout <<"Press <ESC> to exit or any other key to continue..." ;
			ch = getch() ;
			if (ch == 27)
				return ;
		}
	} while (!valid) ;
	int bcode, tcopies, tavail ;
	bcode = issued(mcode) ;
	gotoxy(5,13) ;
	cout <<"Book Code : " <<bcode ;
	gotoxy(5,14) ;
	cout <<"Book Name : " <<bookname(bcode) ;
	tcopies = no_of_copies(bcode) ;
	tavail = available(bcode) + 1 ;
	int f ;
	f = fine(mcode);
	if (f!=0)
	{
		gotoxy(5,16) ;
		cout <<"You have to pay a fine of Rs." <<f ;
		gotoxy(5,17) ;
		cout <<"Please do not delay the Return of Book again" ;
	}
	update_copies(bcode,tcopies,tavail) ;
	update_book(mcode,0,0,0,0,1) ;
	gotoxy(5,19) ;
	cout <<"\7Book has been returned" ;
	getch() ;
}


//**********************************************************
// THIS FUNCTION GIVES DATA TO MODIFY THE BOOK RECORD
//**********************************************************

void WORKING :: modify_book(void)
{
	BOOK B ;
	char t1code[5], tname[33], tauthor[26], *t1, ch ;
	int t2code=0, tcode=0 ;
	float t2=0.0, tprice=0.0 ;
	int valid ;
	do
	{
		valid = 1 ;
		while (1)
		{
			clrscr() ;
			gotoxy(72,1) ;
			cout <<"<0>=Exit" ;
			gotoxy(5,5) ;
			cout <<"Enter Code or Name of the Book to be modified" ;
			gotoxy(5,6) ;
			cout <<"                  or                       " ;
			gotoxy(5,7) ;
			cout <<"Press <ENTER> for help  " ;
			gets(t1code) ;
			if (t1code[0] == '0')
				return ;
			if (strlen(t1code) == 0)
				B.list() ;
			else
				break ;
		}
		t2code = atoi(t1code) ;
		tcode = t2code ;
		if ((tcode == 0 && !bookname_found(t1code)) || (tcode != 0 && !book_found(tcode)))
		{
			valid = 0 ;
			gotoxy(5,10) ;
			cout <<"\7Record not found" ;
			gotoxy(5,11) ;
			cout <<"Press <ESC> to exit or any other key to continue..." ;
			ch = getch() ;
			if (ch == 27)
				return ;
		}
	} while (!valid) ;
	if (tcode == 0)
		tcode = bookcodeof(t1code) ;
	clrscr() ;
	gotoxy(72,1) ;
	cout <<"<0>=Exit" ;
	BOOK::display(tcode) ;
	do
	{
		gotoxy(5,13) ; clreol() ;
		cout <<"Do you want to modify this record (y/n) : " ;
		ch = getche() ;
		ch = toupper(ch) ;
		if (ch == '0')
			return ;
	} while (ch != 'Y' && ch != 'N') ;
	if (ch == 'N')
		return ;
	gotoxy(5,16) ;
	cout <<"Book Name   : " ;
	gotoxy(5,17) ;
	cout <<"Author Name : " ;
	gotoxy(5,18) ;
	cout <<"Price       : Rs." ;
	do
	{
		valid = 1 ;
		gotoxy(5,25) ; clreol() ;
		cout <<"Enter the name of the book or <ENTER> for no change" ;
		gotoxy(19,16) ; clreol() ;
		gets(tname) ;
		strupr(tname) ;
		if (tname[0] == '0')
			return ;
		if (strlen(tname) > 32)
		{
			valid = 0 ;
			gotoxy(5,25) ; clreol() ;
			cout <<"\7Enter correctly (Range: 1..32)" ;
			getch() ;
		}
	} while (!valid) ;
	if (strlen(tname) == 0)
		strcpy(tname,bookname(tcode)) ;
	do
	{
		valid = 1 ;
		gotoxy(5,25) ; clreol() ;
		cout <<"Enter the author's name or <ENTER> for no change" ;
		gotoxy(19,17) ; clreol() ;
		gets(tauthor) ;
		strupr(tauthor) ;
		if (tauthor[0] == '0')
			return ;
		if (strlen(tauthor) > 25)
		{
			valid = 0 ;
			gotoxy(5,25) ; clreol() ;
			cout <<"\nEnter correctly (Range: 1..25)" ;
			getch() ;
		}
	} while (!valid) ;
	if (strlen(tauthor) == 0)
		strcpy(tauthor,authorname(tcode)) ;
	do
	{
		valid = 1 ;
		gotoxy(5,25) ; clreol() ;
		cout <<"Enter price or <ENTER> for no change" ;
		gotoxy(22,18) ; clreol() ;
		gets(t1) ;
		t2 = atof(t1) ;
		tprice = t2 ;
		if (t1[0] == '0')
			return ;
		if (strlen(t1) == 0)
			break ;
		if (tprice < 1 || tprice > 9999)
		{
			valid = 0 ;
			gotoxy(5,25) ; clreol() ;
			cout <<"\nEnter correctly" ;
			getch() ;
		}
	} while (!valid) ;
	if (strlen(t1) == 0)
		tprice = bookprice(tcode) ;
	gotoxy(5,25) ; clreol() ;
	do
	{
		gotoxy(5,20) ; clreol() ;
		cout <<"Do you want to save changes (y/n) : " ;
		ch = getche() ;
		ch = toupper(ch) ;
		if (ch == '0')
			return ;
	} while (ch != 'Y' && ch != 'N') ;
	if (ch == 'N')
		return ;
	BOOK::modify(tcode,tname,tauthor,tprice) ;
	gotoxy(5,23) ;
	cout <<"\nRecord Modified" ;
	getch() ;
}


//**********************************************************
// THIS FUNCTION GIVES DATA TO MODIFY THE MEMBER RECORD
//**********************************************************

void WORKING :: modify_member(void)
{
	MEMBER M ;
	char m1code[10], mname[26], mphone[20], maddress[33], ch ;
	int m2code=0, mcode=0 ;
	int valid ;
	do
	{
		valid = 1 ;
		while (1)
		{
			clrscr() ;
			gotoxy(72,1) ;
			cout <<"<0>=Exit" ;
			gotoxy(5,7) ;
			cout <<"Enter Code no. of the Member to be Modify" ;
			gotoxy(5,8) ;
			cout <<"                        or              " ;
			gotoxy(5,9) ;
			cout <<"Press <ENTER> for help  " ;
			gets(m1code) ;
			m2code = atoi(m1code) ;
			mcode = m2code ;
			if (m1code[0] == '0')
				return ;
			if (strlen(m1code) == 0)
				M.listm() ;
			else
				break ;
		}
		if (mcode == 0)
		{
			valid = 0 ;
			gotoxy(5,25) ;
			cout <<"\7Enter Correctly" ;
			getch() ;
		}
		if (valid && !member_found(mcode))
		{
			valid = 0 ;
			gotoxy(5,13) ;
			cout <<"\7Record not found" ;
			gotoxy(5,14) ;
			cout <<"Press <ESC> to exit or any other key to continue..." ;
			ch = getch() ;
			if (ch == 27)
				return ;
		}
	} while (!valid) ;
	clrscr() ;
	gotoxy(72,1) ;
	cout <<"<0>=Exit" ;
	MEMBER::display(mcode) ;
	do
	{
		gotoxy(5,10) ; clreol() ;
		cout <<"Do you want to modify this record (y/n) : " ;
		ch = getche() ;
		ch = toupper(ch) ;
		if (ch == '0')
			return ;
	} while (ch != 'Y' && ch != 'N') ;
	if (ch == 'N')
		return ;
	gotoxy(5,13) ;
	cout <<"Name    : " ;
	gotoxy(5,14) ;
	cout <<"Phone   : " ;
	gotoxy(5,15) ;
	cout <<"Address : " ;
	do
	{
		valid = 1 ;
		gotoxy(5,25) ; clreol() ;
		cout <<"Enter the name of the member or <ENTER> for no change" ;
		gotoxy(19,13) ; clreol() ;
		gets(mname) ;
		strupr(mname) ;
		if (mname[0] == '0')
			return ;
		if (strlen(mname) > 25)
		{
			valid = 0 ;
			gotoxy(5,25) ; clreol() ;
			cout <<"\7Enter correctly (Range: 1..25)" ;
			getch() ;
		}
	}
	while (!valid) ;
	if (strlen(mname) == 0)
		strcpy(mname,membername(mcode)) ;
	do
	{
		valid = 1 ;
		gotoxy(5,25) ; clreol() ;
		cout <<"Enter the Phone no. of Member or <ENTER> for no change" ;
		gotoxy(19,14) ; clreol() ;
		gets(mphone) ;
		if (mphone[0] == '0'&&strlen(mphone)==1)
			return ;
		if (strlen(mphone)<=7)
		{
			valid = 0 ;
			gotoxy(5,25) ;
			clreol() ;
			cout <<"\7Enter correctly" ;
			getch() ;
		}
	} while (!valid) ;
	if (strlen(mphone) == 0)
		strcpy(mphone,memberphone(mcode)) ;
	do
	{
		valid = 1 ;
		gotoxy(5,25) ; clreol() ;
		cout <<"Enter the address of the member or <ENTER> for no change" ;
		gotoxy(19,15) ; clreol() ;
		gets(maddress) ;
		strupr(maddress);
		if(maddress[0]=='0')
			return ;
		if (strlen(maddress) > 32)
		{
			valid = 0 ;
			gotoxy(5,25) ; clreol() ;
			cout <<"\7Enter correctly (Range: 1..32)" ;
			getch() ;
		}
	} while (!valid) ;
	if (strlen(maddress) == 0)
		strcpy(maddress,memberaddress(mcode)) ;
	gotoxy(5,25) ; clreol() ;
	do
	{
		gotoxy(5,18) ; clreol() ;
		cout <<"Do you want to save changes (y/n) : " ;
		ch = getche() ;
		ch = toupper(ch) ;
		if (ch == '0')
			return ;
	} while (ch != 'Y' && ch != 'N') ;
	if (ch == 'N')
		return ;
	MEMBER::modify(mcode,mname,mphone,maddress) ;
	gotoxy(5,23) ;
	cout <<"\7Record Modified" ;
	getch() ;
}


//**********************************************************
// THIS FUNCTION GIVES BOOK CODE TO DELETE THE BOOK RECORD
//**********************************************************

void WORKING :: delete_book(void)
{
	BOOK B ;
	char t1code[5], tname[33], tauthor[26], ch ;
	int t2code=0, tcode=0 ;
	int valid ;
	do
	{
		valid = 1 ;
		while (1)
		{
			clrscr() ;
			gotoxy(72,1) ;
			cout <<"<0>=Exit" ;
			gotoxy(5,5) ;
			cout <<"Enter Code or Name of the Book to be Deleted" ;
			gotoxy(5,6) ;
			cout <<"                  or                       " ;
			gotoxy(5,7) ;
			cout <<"Press <ENTER> for help  " ;
			gets(t1code) ;
			if (t1code[0] == '0')
				return ;
			if (strlen(t1code) == 0)
				B.list() ;
			else
				break ;
		}
		t2code = atoi(t1code) ;
		tcode = t2code ;
		if ((tcode == 0 && !bookname_found(t1code)) || (tcode != 0 && !book_found(tcode)))
		{
			valid = 0 ;
			gotoxy(5,10) ;
			cout <<"\7Record not found" ;
			gotoxy(5,11) ;
			cout <<"Press <ESC> to exit or any other key to continue..." ;
			ch = getch() ;
			if (ch == 27)
				return ;
		}
	} while (!valid) ;
	if (tcode == 0)
		tcode = bookcodeof(t1code) ;
	clrscr() ;
	gotoxy(72,1) ;
	cout <<"<0>=Exit" ;
	BOOK::display(tcode) ;
	do
	{
		gotoxy(5,13) ; clreol() ;
		cout <<"Do you want to delete this record (y/n) : " ;
		ch = getche() ;
		ch = toupper(ch) ;
		if (ch == '0')
			return ;
	} while (ch != 'Y' && ch != 'N') ;
	if (ch == 'N')
		return ;
	int tavail, tcopies ;
	tavail = available(tcode) ;
	tcopies = no_of_copies(tcode) ;
	if (tavail != tcopies)
	{
		gotoxy(5,15) ;
		cout <<"\7Record cannot be deleted. This book is issued." ;
		getch() ;
		return ;
	}
	BOOK::delete_rec(tcode) ;
	gotoxy(5,23) ;
	cout <<"\7Record Deleted" ;
	getch() ;
}


//**********************************************************
// THIS FUNCTION GIVES MEMBER CODE TO DELETE THE MEMBER
// RECORD
//**********************************************************

void WORKING :: delete_member(void)
{
	MEMBER M ;
	char m1code[5], mname[26], mphone[10], maddress[33], ch ;
	int m2code=0, mcode=0 ;
	int valid ;
	do
	{
		valid = 1 ;
		while (1)
		{
			clrscr() ;
			gotoxy(72,1) ;
			cout <<"<0>=Exit" ;
			gotoxy(5,7) ;
			cout <<"Enter Code no. of the Member to be Deleted" ;
			gotoxy(5,8) ;
			cout <<"                        or              " ;
			gotoxy(5,9) ;
			cout <<"Press <ENTER> for help  " ;
			gets(m1code) ;
			m2code = atoi(m1code) ;
			mcode = m2code ;
			if (m1code[0] == '0')
				return ;
			if (strlen(m1code) == 0)
				M.listm() ;
			else
				break ;
		}
		if (mcode == 0)
		{
			valid = 0 ;
			gotoxy(5,25) ;
			cout <<"\7Enter Correctly" ;
			getch() ;
		}
		if (valid && !member_found(mcode))
		{
			valid = 0 ;
			gotoxy(5,13) ;
			cout <<"\7Record not found" ;
			gotoxy(5,14) ;
			cout <<"Press <ESC> to exit or any other key to continue..." ;
			ch = getch() ;
			if (ch == 27)
				return ;
		}
	} while (!valid) ;
	clrscr() ;
	gotoxy(72,1) ;
	cout <<"<0>=Exit" ;
	MEMBER::display(mcode) ;
	do
	{
		gotoxy(5,10) ; clreol() ;
		cout <<"Do you want to Delete this record (y/n) : " ;
		ch = getche() ;
		ch = toupper(ch) ;
		if (ch == '0')
			return ;
	} while (ch != 'Y' && ch != 'N') ;
	if (ch == 'N')
		return ;
	if (issued(mcode))
	{
		gotoxy(5,15) ;
		cout <<"\7Record cannot be delete. Member has a book" ;
		getch() ;
		return ;
	}
	MEMBER::delete_reco(mcode) ;
	gotoxy(5,23) ;
	cout <<"\7Record Modified" ;
	getch() ;
}



//**********************************************************
// MAIN FUNCTION CALLING INTRODUCTION AND MAIN MENU
//**********************************************************

void main(void)
{
	clrscr();
	start();
	MENU menu ;
	menu.introduction() ;
	menu.main_menu() ;
	clrscr();
	textbackground(RED);
	textcolor(GREEN+BLINK);
	clrscr();
	gotoxy(1,10);
	cout<<"\n\n\tTHANK YOU FOR USING THE LIBRARY MANAGEMENT SYSTEM\n";
	gotoxy(54,14);
	cout<<"FROM:-\n";
	gotoxy(51,16);
	cout<<"THE PROGRAMMERS,";
	gotoxy(51,18);
	cout<<"BATCH 4:";
	gotoxy(51,20);
	cout<<"1. THEJUS VARGHESE";
	gotoxy(51,22);
	cout<<"2. THOMAS G KAIALATH";
	gotoxy(51,24);
	cout<<"3. VISHNU C P";
	gotoxy(51,26);
	cout<<"4. VIVEK V S";
	delay(150);
}

Edited 5 Years Ago by Ezzaral: Fixed improper tags

Did you have some point in posting this other than demonstrating that you cannot properly use BB code tags?

Some question perhaps or an error message?

This article has been dead for over six months. Start a new discussion instead.