⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 userdb.cpp

📁 1. 系统概述: 图书馆管理系统是运行于Windows系统下的应用软件
💻 CPP
字号:
// UserDB.cpp: implementation of the CUserDB class.

#include "UserDB.h"
#include<cstdlib>
#include<string>
#include<iomanip.h>
#define FILE "Data//User.db"
#define FILE1 "Data//num.db"

CUserDB::CUserDB()		//??
{
	ifChange = false;

	//先读出iMemberNum,iTopID
	Fin.open( FILE1,ios::in );
	if ( !Fin.is_open() ){			//打开文件失败
		cout<<"Couldn't open file!\n";
		exit(0);
	}
	Fin>>iMemberNum>>iTopID;
	Fin.clear();
	Fin.close();

	if (iMemberNum!=0){
		Fin.open( FILE, ios::in | ios::binary );
		if ( !Fin.is_open() ){			//打开文件失败
			cout<<"Couldn't open file!\n";
			exit(0);
		}
	
	//读入用户数iMemberNum,动态分配
		reader = new CReader[iMemberNum + 1];
		for ( int i=0; i<iMemberNum; i++ ){
			Fin.read( (char*)&reader[i], SIZE );
		}
	}
	else reader = new CReader;
	Fin.clear();
	Fin.close();
}

bool CUserDB::WriteIntoFile(){		//将会员数据重写入文件
	if ( ifChange==false )return true;
	Fout.open( FILE, ios::out | ios::binary | ios::trunc );
	if ( !Fout.good() ){			//打开文件失败
		cout<<"Couldn't open file!\n";
		return false;
	}

	if ( iMemberNum != 0 ){
		for ( int i=0; i<iMemberNum; i++ ){
			Fout.write( (char*)&reader[i], SIZE);
		}
	}
	Fout.clear();
	Fout.close();
	ifChange = false;
	return true;
}

int CUserDB::CheckName( char name[] ){	//用户名重复return 位置, else return -1
	for ( int i=0; i<iMemberNum; i++){
		if ( strcmp( reader[i].sName, name )==0 ){
			return i;
		}
	}
	return -1;	
}

int CUserDB::Checkid( int id ){	//用户名重复return 位置, else return -1
	for ( int i=0; i<iMemberNum; i++){
		if ( reader[i].iID==id){
			return i;
		}
	}
	return -1;	
}

int CUserDB::Checkpassword( char pass[] ,char name[]){	//用户名重复return 位置, else return -1
	for ( int i=0; i<iMemberNum; i++){
		if (( strcmp( reader[i].sPassword, pass )==0 )&&( strcmp( reader[i].sName, name )==0 )){
			return i;
		}
	}
	return -1;	
}
void CUserDB::Get_reader(int i)     //取得读者个人资料
{
	
	cout<<reader[i];
}

bool reallocate(CReader* &p, int &size, int addsize);	//成功true,失败false

bool CUserDB::AddReader( CReader New ){		//增加会员??
	if ( reader[iMemberNum].iID == 0 ){		//预留注册空间(reader[iMemberNum])未用
		reader[iMemberNum] = New;
		reader[iMemberNum].iID = iTopID++;		//??iTopID未更新到文件
	
		Fout.open( FILE, ios::out | ios::binary | ios::app );
		if ( !Fout.is_open() ){			//打开文件失败
			cout<<"Couldn't open file!\n";
			return false;
		}
		Fout.write( (char*)&reader[iMemberNum++], SIZE);	//追加入文件
		Fout.clear();
		Fout.close();
	}
	else{												//预留注册空间(reader[iMemberNum])已用
		if ( !reallocate( reader, iMemberNum, 2) ){
			cout<<"分配空间失败!";
			return false;
		}
		iMemberNum -= 2;
		reader[iMemberNum] = New;
		reader[iMemberNum++].iID = iTopID++;		//iTopID未更新到文件

		Fout.open( FILE, ios::out | ios::binary | ios::app );
		if ( !Fout.good() ){			//打开文件失败
			cout<<"Couldn't open file!\n";
			return false;
		}
		Fout.write( (char*)&reader[iMemberNum], SIZE);		//追加入文件
		Fout.clear();
		Fout.close();
	}
	return true;
}

void CUserDB::DisplayAll(){		//打印所有会员信息
	cout<<"\n\t■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\n";
	cout<<setw(14)<< "ID" <<setw(20)<< "用户名" << setw(6) << "性别"
		 <<setw(20)<< "联系电话" <<setw(8)<< "已借数" ;

	for ( int i=0; i<iMemberNum; i++){
		cout<<endl<<reader[i];
	}
	cout<<"\n\t■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\n";
}

CUserDB::~CUserDB()
{
	//把iMemberNum,iTopID保存入文件
	Fout.open( FILE1, ios::out );			//写入文件
	if ( !Fout.is_open() ){			//打开文件失败
		cout<<"Couldn't open file!\n";
		exit(0);
	}
	Fout<<iMemberNum<<endl<<iTopID;
	Fout.clear();
	Fout.close();

	if ( ifChange == true )WriteIntoFile();

	delete []reader;
	//重写进文件
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -