C++ Project on CD Cafe

Submitted by Editor

CD CAFE

This is the project where you can maintain records of CDS and MEMBERS. One member can issue one cd at a time. If he/she does not return cd within 15 days he/she have to pay fine of Rs.20/- per day.

//**********************************************************
//	PROJECT CD CAFE
//**********************************************************

# include 
# include 
# include 
# include 
# include 
# include 
# include 
# include 
# include 
void edit_cd(void) ;
void edit_member(void) ;
void edit_menu(void);
void entry_menu(void) ;
void list_menu(void) ;
void cd_records(void) ;
void introduction(void) ;
void introduction(void)
{
	clrscr() ;
	gotoxy(31,5) ;cout < <"Welcome to Project" ;
	textcolor(RED+BLINK) ; textbackground(WHITE) ;
	gotoxy(33,7) ;cprintf(" CD CAFE") ;
	textcolor(LIGHTGRAY) ; textbackground(BLACK) ;
	gotoxy(15,10) ;cout <<"This is the project where you can maintain records" ;
	gotoxy(15,11) ;cout <<"of CDS and MEMBERS." ;
	gotoxy(15,13) ;cout <<"One member can issue one cd at a time. If he/she" ;
	gotoxy(15,14) ;cout <<"does  not return cd within 15 days he/she have  to" ;
	gotoxy(15,15) ;cout <<"pay fine of Rs.20/- per day." ;
	//textcolor(LIGHTGRAY+BLINK) ;
	gotoxy(27,24) ;cprintf("Press any key to continue") ;
       //	textcolor(RED) ;
	getch() ;
}
//**********************************************************
// THIS CLASS CONTROL ALL THE FUNCTIONS IN THE MENU
//**********************************************************

class MENU
{
	public :
			void main_menu(void) ;


} ;
class CD
{
	public :
			void list(void) ;
			char *cdname(int) ;
	protected :void add_new_cd(int, char tname[33], char tcatagory[6], float, int, int);
			void update_copies(int, int, int) ;
			void modify(int, char[], char[], float) ;
			void deletion(void) ;
			int  cd_found(int) ;
			int  cdname_found(char []) ;
			int  recordno(int) ;
			int  available(int) ;
			char *cat_class(int) ;
			float cdprice(int) ;
			int  no_of_copies(int) ;
			int  cdcodeof(char[]) ;
			void display(int) ;
			int  reccount(void) ;
			void delete_rec(int) ;
	private :
			int   cdcode, copies ;
			char  name[33], catagory[6] ;
			float price ;
			int   avail ;
} ;
class MEMBER
{
	public :
			void list(void) ;
	protected :
	void add_mem(int, int, char [], char [], char[], int, int, int) ;
			void modify(int, char[], char[], char[]) ;
			void deletion(void) ;
			int  member_found(int) ;
			void update_cd(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_rec(int) ;
	private :
			int  memcode, cdcode ;
			char name[26], phone[10], address[33] ;
			int  dd, mm, yy ;// DATE OF RETURNING THE CD //
} ;
class WORKING : public CD, public MEMBER
{

	public :
			void issuecd(void) ;
			void returncd(void) ;
			void add_cd(void) ;
			void add_member(void) ;
			void modify_cd(void) ;
			void modify_member(void) ;
			void delete_cd(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 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(void)
{
	char ch ;
	while (1)
	{
		clrscr() ;
		gotoxy(29,6) ;cout < <"C D    C A F E " ;
		gotoxy(29,7) ;cout <<"~~~~~~~~~~~~~~~~~~~~~~" ;
		gotoxy(30,10) ;cout <<"1. ADD NEW ENTRY" ;
		gotoxy(30,12) ;cout <<"2. LIST      " ;
		gotoxy(30,14) ;cout <<"3. EDIT      " ;
		gotoxy(30,16) ;cout <<"4. CD RECORDS" ;
		gotoxy(30,18) ;cout <<"5. HELP      " ;
		gotoxy(30,20) ;cout <<"0. QUIT      " ;
		gotoxy(30,22) ;cout <<"Enter your choice : " ;
		ch = getche() ;
		if (ch == 27)
			break ;
		else
		if (ch == '1')
			entry_menu();
		else
		if (ch == '2')
		     {
			list_menu();
		      }
		else
		if (ch == '3')
		    {
			edit_menu();
		     }
		else
		if (ch == '4')
		    {

			cd_records() ;
		    }
		else
		if (ch == '5')
		    {
			introduction() ;
		    }
		else
		if (ch == '0')
		      {
			clrscr();
			cout<<"\n \n \n \n \n \n \n \t \t \t \t" ;
			cout<<"Thanks for"<<"\n \t\t\t\t  working"<<"\n \t\t\t\t  with US!";
			cout<<"\n \n \t \t \t*****HAVE A VERY NICE DAY*****";
			break ;
		      }
	}
}
void 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. CDS" ;
		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_cd() ;
		else
		if (ch == '2')

			edit_member() ;
		else
		if (ch == '0')
			break ;
	}


}
void entry_menu(void)
{
	char ch ;
	while (1)
	{
		clrscr() ;
		gotoxy(32,9) ;cout <<"E N T R Y   M E N U";
		gotoxy(32,10) ;cout <<"~~~~~~~~~~~~~~~~" ;
		gotoxy(34,13) ;cout <<"1. MEMBERS"  ;
		gotoxy(34,14) ;cout <<"2. CDS";
		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.add_member();
		      }
		if (ch == '2')
		    {
		    WORKING W;
		    W.add_cd() ;
		   }
		if (ch == '0')
			break ;
	}
}
void list_menu(void)
{
	char ch ;
	while (1)
	{
		clrscr() ;
		gotoxy(32,9) ;cout <<" L I S T   M E N U";
		gotoxy(32,10) ;cout <<"~~~~~~~~~~~~~~~~" ;
		gotoxy(34,13) ;cout <<"1. CDS" ;
		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')
		 {	CD C;
		       C.list() ;
		}
		else
		if (ch == '2')
		    {
			MEMBER M;
			M.list() ;
		    }
		if (ch == '0')
			break ;
	}
}
void cd_records(void)
{
	char ch ;
	while (1)
	{
		clrscr() ;
		gotoxy(32,9) ;cout <<"CD R E C O R D S  M E N U";
		gotoxy(32,10) ;cout <<"~~~~~~~~~~~~~~~~" ;
		gotoxy(34,13) ;cout <<"1. ISSUE CDS" ;
		gotoxy(34,14) ;cout <<"2. RETURNS CDS" ;
		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.issuecd() ;
		    }
		if (ch == '2')
		     {
			WORKING W;
			W.returncd() ;
		     }
		if (ch == '0')
			break ;
	}
}
void edit_cd(void)
{
	char ch ;
	while (1)
	{
		clrscr() ;
		gotoxy(31,9) ;cout <<"E D I T  C D 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_cd() ;
		}
		else
		if (ch == '2')
		{
			WORKING W ;
			W.delete_cd() ;
		}
		else
		if (ch == '0')
			break ;
	}
}
void 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 ;
	}
}
int CD :: cd_found(int tcode)
{
	fstream file ;
	file.open("CD.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	int found=0 ;
	while (file.read((char *) this, sizeof(CD)))
	{
		if (cdcode == tcode)
		{
			found = 1 ;
			break ;
		}
	}
	file.close() ;
	return found ;
}
int CD :: cdname_found(char t1code[33])
{
	fstream file ;
	file.open("CD.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	int found=0 ;
	while (file.read((char *) this, sizeof(CD)))
	{
		if (!strcmpi(name,t1code))
		{
			found = 1 ;
			break ;
		}
	}
	file.close() ;
	return found ;
}
int CD :: recordno(int tcode)
{
	fstream file ;
	file.open("CD.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	int count=0 ;
	while (file.read((char *) this, sizeof(CD)))
	{
		count++ ;
		if (cdcode == tcode)
			break ;
	}
	file.close() ;
	return count ;
}
int CD :: available(int tcode)
{
	fstream file ;
	file.open("CD.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	int tavail=0 ;
	while (file.read((char *) this, sizeof(CD)))
	{
		if (cdcode == tcode)
		{
			tavail = avail ;
			break ;
		}
	}
	file.close() ;
	return tavail ;
}
int CD :: no_of_copies(int tcode)
{
	fstream file ;
	file.open("CD.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	int tcopies=0 ;
	while (file.read((char *) this, sizeof(CD)))
	{
		if (cdcode == tcode)
		{
			tcopies = copies ;
			break ;
		}
	}
	file.close() ;
	return tcopies ;
}
char *CD :: cdname(int tcode)
{
	fstream file ;
	file.open("CD.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	char tname[33] ;
	while (file.read((char *) this, sizeof(CD)))
	{
		if (cdcode == tcode)
		{
			strcpy(tname,name) ;
			break ;
		}
	}
	file.close() ;
	return tname ;
}
char *CD :: cat_class(int tcode)
{
	fstream file ;
	file.open("CD.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	char tcatagory[6] ;
	while (file.read((char *) this, sizeof(CD)))
	{
		if (cdcode == tcode)
		{
			strcpy(tcatagory,catagory) ;
			break ;
		}
	}
	file.close() ;
	return tcatagory ;
}
float CD :: cdprice(int tcode)
{
	fstream file ;
	file.open("CD.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	float tprice=0.0 ;
	while (file.read((char *) this, sizeof(CD)))
	{
		if (cdcode == tcode)
		{
			tprice = price ;
			break ;
		}
	}
	file.close() ;
	return tprice ;
}

int CD :: cdcodeof(char t1code[33])
{
	fstream file ;
	file.open("CD.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	int tcode=0 ;
	while (file.read((char *) this, sizeof(CD)))
	{
		if (!strcmpi(name,t1code))
		{
			tcode = cdcode ;
			break ;
		}
	}
	file.close() ;
	return tcode ;
}
int CD :: reccount(void)
{
	fstream file ;
	file.open("CD.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	int count=0 ;
	while (file.read((char *) this, sizeof(CD)))
		count++ ;
	file.close() ;
	return count ;
}
void CD :: delete_rec(int tcode)
{
	fstream file ;
	file.open("CD.DAT", ios::in) ;
	fstream temp ;
	temp.open("temp.dat", ios::out) ;
	file.seekg(0,ios::beg) ;
	while ( !file.eof() )
	{
		file.read((char *) this, sizeof(CD)) ;
		if ( file.eof() )
			break ;
		if ( cdcode != tcode )
			temp.write((char *) this, sizeof(CD)) ;
	}
	file.close() ;
	temp.close() ;
	file.open("CD.DAT", ios::out) ;
	temp.open("temp.dat", ios::in) ;
	temp.seekg(0,ios::beg) ;
	while ( !temp.eof() )
	{
		temp.read((char *) this, sizeof(CD)) ;
		if ( temp.eof() )
			break ;
		file.write((char *) this, sizeof(CD)) ;
	}
	file.close() ;
	temp.close() ;
}
void CD :: add_new_cd(int tcode,char tname[33], char tcatagory[6],
 float tprice, int tcopies, int tavail)
{
	fstream file ;
	file.open("CD.DAT", ios::app) ;
	cdcode = tcode ;
	strcpy(name,tname) ;
	strcpy(catagory,tcatagory) ;
	price = tprice ;
	copies = tcopies ;
	avail = tavail ;
	file.write((char *) this, sizeof(CD)) ;
	file.close() ;
}
void CD :: update_copies(int tcode, int tcopies, int tavail)
{
	int recno ;
	recno = recordno(tcode) ;
	fstream file ;
	file.open("CD.DAT", ios::out | ios::ate) ;
	copies = tcopies ;
	avail = tavail ;
	int location ;
	location = (recno-1) * sizeof(CD) ;
	file.seekp(location) ;
	file.write((char *) this, sizeof(CD)) ;
	file.close() ;
}
//*************************************************************************
// THIS FUNCTION MODIFY THE RECORD IN THE CD FILE FOR THE GIVEN CD CODE
//**************************************************************************
void CD :: modify(int tcode, char tname[33],
 char tcatagory[6], float tprice)
{
	int recno ;
	recno = recordno(tcode) ;
	fstream file ;
	file.open("CD.DAT", ios::out | ios::ate) ;
	strcpy(name,tname) ;
	strcpy(catagory,tcatagory) ;
	price = tprice ;
	int location ;
	location = (recno-1) * sizeof(CD) ;
	file.seekp(location) ;
	file.write((char *) this, sizeof(CD)) ;
	file.close() ;
}
void CD :: display(int tcode)
{
	fstream file ;
	file.open("CD.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	while (file.read((char *) this, sizeof(CD)))
	{
		if (cdcode == tcode)
		{
			gotoxy(5,5) ;cout <<"cd Code   : " < to exit" ;
			ch = getch() ;
			if (ch == 27)
				break ;
			clrscr() ;
			gotoxy(33,2) ;cout < <"LIST OF CDS" ;
			gotoxy(32,3) ;cout <<"~~~~~~~~~~~~~~~" ;
			gotoxy(1,4) ;cout <<"CODE  CD NAME    CATAGORY   PRICE  COPIES" ;
			gotoxy(1,5) ;cout <<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" ;
		}
		else
			row = row + 2 ;
	}
	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 ;
	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 = cdcode ;
			break ;
		}
	}
	file.close() ;
	return missue ;
}
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 * 20 ;
			break ;
		}
	}
	file.close() ;
	return t_fine ;
}
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 ;
}
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 ;
}
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 ;
}
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 ;
}
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_rec(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_cd(int mcode, int tcode, int d1, int m1, int y1)
{
	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 )
		{
			cdcode = tcode ;
			dd = d1 ;
			mm = m1 ;
			yy = y1 ;
			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])
{
	int recno ;
	recno = recordno(mcode) ;
	fstream file ;
	file.open("MEMBER.DAT", ios::out | ios::ate) ;
	strcpy(name,mname) ;
	strcpy(phone,mphone) ;
	strcpy(address,maddress) ;
	int location ;
	location = (recno-1) * sizeof(MEMBER) ;
	file.seekp(location) ;
	file.write((char *) this, sizeof(MEMBER)) ;
	file.close() ;
}
void MEMBER :: add_mem(int mcode, int ccode,
char mname[26], char maddress[33], char mphone[10],
 int d1, int m1, int y1)
{
	fstream file ;
	file.open("MEMBER.DAT", ios::app) ;
	memcode = mcode ;
	cdcode = ccode ;
	strcpy(name,mname) ;
	strcpy(address,maddress) ;
	strcpy(phone,mphone) ;
	dd = d1 ;
	mm = m1 ;
	yy = y1 ;
	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 # " <"< <"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  CD CODE   NAME                         PHONE" ;
			gotoxy(1,5) ;cout <<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" ;
		}
		else
			row = row + 2 ;
	}
	if (!found)
	{
		gotoxy(5,10) ;cout <<"\7Records not found" ;
	}
	if (!flag)
	{
		gotoxy(1,25) ;cout <<"Press any key to continue..." ;
		getche() ;
	}
	file.close () ;
}
void WORKING :: add_cd(void)
{
	if (!reccount())  // MEMBER FUNCTION OF CD
	{
		add_new_cd(0,"null","null",0.0,0,0) ;
		CD::delete_rec(0) ;
	}
	char ch ;
	int tcode, tcopies, tavail ;
	char tname[33], tcatagory[6] ;
	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 CDS" ;
		gotoxy(29,4) ;cout <<"~~~~~~~~~~~~~~~~~~~~~" ;
		gotoxy(72,1) ;cout <<"<0>=Exit" ;
		gotoxy(5,25) ;cout < <"Enter code no. of the cd" ;
		gotoxy(5,5) ;cout <<"Code no. " ;
		gets(t) ;
		tc = atoi(t) ;
		tcode = tc ;
		if (tcode == 0)
			return ;
		if (cd_found(tcode))
		{
			found = 1 ;
			gotoxy(19,8) ;cout < 32)
			{
				valid = 0 ;
				gotoxy(5,25) ; clreol() ;
				cout < <"\7Enter correctly (Range: 1..32)" ;
				getch() ;
			}
		}
		valid = 0 ;
		while (!valid && !found)
		{
			valid = 1 ;
			gotoxy(5,25) ; clreol() ;
			cout <<"Enter the type of the cd" ;
			gotoxy(19,9) ; clreol() ;
			gets(tcatagory) ;
			strupr(tcatagory) ;
			if (tcatagory[0] == '0')
				return ;
			if (strlen(tcatagory) < 1 || strlen(tcatagory) > 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 cd" ;
			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 cd 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_cd(tcode,tname,tcatagory,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') ;
}
void WORKING :: add_member(void)
{
	char ch ;
	int mcode, ccode ;
	char mname[26], mphone[10], maddress[33] ;
	int d1, m1, y1 ;
	mcode = lastcode() ;
	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 # " < 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  for none" ;
			gotoxy(15,12) ; clreol() ;
			gets(mphone) ;
			if (mphone[0] == '0')
				return ;
			if ((strlen(mphone) < 7 && strlen(mphone) > 0) || (strlen(mphone) > 9))
			{
				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')
		{
			ccode = 0 ;
			d1 = 0 ;
			m1 = 0 ;
			y1 = 0 ;
			add_mem(mcode,ccode,mname,maddress,mphone,d1,m1,y1) ;
			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') ;
}
void WORKING :: issuecd(void)
{
	CD C ;
	MEMBER M ;
	DATE D ;
	char t1code[33], ch ;
	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 : " <=Exit" ;
			gotoxy(5,5) ;cout < <"Enter Code or Name of the cd to be issued" ;
			gotoxy(5,6) ;cout <<"                  or                       " ;
			gotoxy(5,7) ;cout <<"Press  for help  " ;
			gets(t1code) ;
			if (t1code[0] == '0')
				return ;
			if (strlen(t1code) == 0)
				C.list() ;
			else
				break ;
		}
		t2code = atoi(t1code) ;
		tcode = t2code ;
		if((tcode==0&&!cdname_found(t1code))||(tcode!=0&&!cd_found(tcode)))
		{
			valid = 0 ;
			gotoxy(5,10) ;cout < <"\7Record not found" ;
			gotoxy(5,11) ;cout <<"Press  to exit or any other key to continue..." ;
			ch = getch() ;
			if (ch == 27)
				return ;
		}
	} while (!valid) ;
	if (tcode == 0)
		tcode = cdcodeof(t1code) ;
	if (!available(tcode))
	{
		gotoxy(5,10) ;cout < <"\7Sorry! cd (" <=Exit" ;
			gotoxy(5,2) ;cout < <"Date : " < for help  " ;
			gets(t1code) ;
			if (t1code[0] == '0')
				return ;
			if (strlen(t1code) == 0)
				M.list() ;
			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  to exit or any other key to continue..." ;
			ch = getch() ;
			if (ch == 27)
				return ;
		}
	} while (!valid) ;
	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_cd(mcode,tcode,d1,m1,y1) ;  // member function of MEMBER
	gotoxy(5,13) ;cout < <"\7cd is issued to " <=Exit" ;
			gotoxy(5,2) ;cout < <"Date : " < for help  " ;
			gets(t1code) ;
			if (t1code[0] == '0')
				return ;
			if (strlen(t1code) == 0)
				M.list() ;
			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  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 cd to return" ;
			gotoxy(5,14) ;cout <<"Press  to exit or any other key to continue..." ;
			ch = getch() ;
			if (ch == 27)
				return ;
		}
	} while (!valid) ;
	int ccode, tcopies, tavail ;
	ccode = issued(mcode) ;
	gotoxy(5,13) ;cout < <"cd Code : " <=Exit" ;
			gotoxy(5,5) ;cout < <"Enter Code or Name of the cd to be modified" ;
			gotoxy(5,6) ;cout <<"                  or                       " ;
			gotoxy(5,7) ;cout <<"Press  for help  " ;
			gets(t1code) ;
			if (t1code[0] == '0')
				return ;
			if (strlen(t1code) == 0)
				C.list() ;
			else
				break ;
		}
		t2code = atoi(t1code) ;
		tcode = t2code ;
		if((tcode==0&&!cdname_found(t1code))||(tcode!=0&&!cd_found(tcode)))
		{
			valid = 0 ;
			gotoxy(5,10) ;cout < <"\7Record not found" ;
			gotoxy(5,11) ;cout <<"Press  to exit or any other key to continue..." ;
			ch = getch() ;
			if (ch == 27)
				return ;
		}
	} while (!valid) ;
	if (tcode == 0)
		tcode = cdcodeof(t1code) ;
	clrscr() ;
	gotoxy(72,1) ;cout < <"<0>=Exit" ;
	CD::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 <<"CD Name   : " ;
	gotoxy(5,17) ;cout <<"type : " ;
	gotoxy(5,18) ;cout <<"Price       : Rs." ;
	do
	{
		valid = 1 ;
		gotoxy(5,25) ; clreol() ;
		cout <<"Enter the name of the cd or  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,cdname(tcode)) ;
	do
	{
		valid = 1 ;
		gotoxy(5,25) ; clreol() ;
		cout <<"Enter the type or  for no change" ;
		gotoxy(19,17) ; clreol() ;
		gets(tcatagory) ;
		strupr(tcatagory) ;
		if (tcatagory[0] == '0')
			return ;
		if (strlen(tcatagory) > 25)
		{
			valid = 0 ;
			gotoxy(5,25) ; clreol() ;
			cout < <"\7Enter correctly (Range: 1..25)" ;
			getch() ;
		}
	} while (!valid) ;
	if (strlen(tcatagory) == 0)
		strcpy(tcatagory,cat_class(tcode)) ;
	do
	{
		valid = 1 ;
		gotoxy(5,25) ; clreol() ;
		cout <<"Enter price or  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 < <"\7Enter correctly" ;
			getch() ;
		}
	} while (!valid) ;
	if (strlen(t1) == 0)
		tprice = cdprice(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 ;
	CD::modify(tcode,tname,tcatagory,tprice) ;
	gotoxy(5,23) ;cout <<"\7Record Modified" ;
	getch() ;
}
void WORKING :: modify_member(void)
{
	MEMBER M ;
	char m1code[10], 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 Modify" ;
			gotoxy(5,8) ;cout <<"                        or              " ;
			gotoxy(5,9) ;cout <<"Press  for help  " ;
			gets(m1code) ;
			m2code = atoi(m1code) ;
			mcode = m2code ;
			if (m1code[0] == '0')
				return ;
			if (strlen(m1code) == 0)
				M.list() ;
			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  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  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  for no change" ;
		gotoxy(19,14) ; clreol() ;
		gets(mphone) ;
		if (mphone[0] == '0')
			return ;
		if((strlen(mphone)<7&&strlen(mphone)>0)||(strlen(mphone)>9))
		{
			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  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() ;
}
void WORKING :: delete_cd(void)
{
	CD C ;
	char t1code[5], tname[33], tcatagory[6], 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 cd to be Deleted" ;
			gotoxy(5,6) ;cout <<"                  or                       " ;
			gotoxy(5,7) ;cout <<"Press  for help  " ;
			gets(t1code) ;
			if (t1code[0] == '0')
				return ;
			if (strlen(t1code) == 0)
				C.list() ;
			else
				break ;
		}
		t2code = atoi(t1code) ;
		tcode = t2code ;
		if((tcode==0&&!cdname_found(t1code))||(tcode!=0&&!cd_found(tcode)))
		{
			valid = 0 ;
			gotoxy(5,10) ;cout < <"\7Record not found" ;
			gotoxy(5,11) ;cout <<"Press  to exit or any other key to continue..." ;
			ch = getch() ;
			if (ch == 27)
				return ;
		}
	} while (!valid) ;
	if (tcode == 0)
		tcode = cdcodeof(t1code) ;
	clrscr() ;
	gotoxy(72,1) ;cout < <"<0>=Exit" ;
	CD::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 cd is issued." ;
		getch() ;
		return ;
	}
	CD::delete_rec(tcode) ;
	gotoxy(5,23) ;cout <<"\7Record Deleted" ;
	getch() ;
}
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  for help  " ;
			gets(m1code) ;
			m2code = atoi(m1code) ;
			mcode = m2code ;
			if (m1code[0] == '0')
				return ;
			if (strlen(m1code) == 0)
				M.list() ;
			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  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 cd" ;
		getch() ;
		return ;
	}
	MEMBER::delete_rec(mcode) ;
	gotoxy(5,23) ;cout <<"\7Record Modified" ;
	getch() ;
}
void main()
{
	introduction() ;
	MENU menu ;
	menu.main_menu() ;
	getch();
}

Add Your Comment - Guidelines
You can express your opinion or reaction in the form below!

100 characters required

0 Comments:

Be the first one to comment!

You may also want to see:
QUOTE OF THE DAY
Love is composed of a single soul inhabiting two bodies. - Aristotle
April 25th, 2024 - Thursday
background

Sign in to continue