-2
#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 by Ezzaral: Fixed improper tags

4
Contributors
3
Replies
5
Views
6 Years
Discussion Span
Last Post by Ancient Dragon
1

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?

0

Thanks for posting 2300 lines of code without also posting errors or questions.

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.