📄 userdb.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 + -