📄 cfile.cpp
字号:
#include "CFile.h"
#include "CAccManager.h"
#include <ctype.h>
#include <windows.h>
#include <stdio.h>
#include <string>
#include <iostream>
#include <fstream>
using namespace std;
extern CAccManager acc_admin;
bool CFile::saveToFile()
{
int acc_num = acc_admin.getCount();
int acc_useNum =acc_admin.getUseAbleCount();
ofstream outToFile;
//remove(m_strFileName.c_str());
outToFile.open(m_strFileName.c_str(),ios::out|ios::binary);
if(!outToFile)
{
cout<<"sorry! can not creat file"<<endl;
system("pause");
return false;
}
else
{
CAccount *p;
outToFile.write( (char*)&acc_num, sizeof(int) );
outToFile.write( (char*)&acc_useNum, sizeof(int) );
for(p=( acc_admin.getVeAcc().begin() );p!=( acc_admin.getVeAcc().end() );p++)
{
int len;
bool temp_flag=p->GetAccFlags();
double temp_balance=p->GetBalance();
len=p->GetName().size();
outToFile.write( (char*)(&len),sizeof(int) );
outToFile.write( p->GetName().c_str(), len);
len=p->GetSex().size();
outToFile.write( (char*)(&len), sizeof(int) );
outToFile.write( p->GetSex().c_str(),len);
len=p->GetPhone().size();
outToFile.write( (char*)(&len), sizeof(int) );
outToFile.write( p->GetPhone().c_str(),len);
len=p->GetBirthday().size();
outToFile.write( (char*)(&len), sizeof(int) );
outToFile.write( p->GetBirthday().c_str(),len);
outToFile.write( (char*)(&temp_flag) ,sizeof(bool) );
outToFile.write( (char*) (&temp_balance),sizeof(double) );
}
CAddMoneyInfo *p1;
int addinfo_num = acc_admin.getCount1();
outToFile.write( (char*)&addinfo_num, sizeof(int) );
for(p1=( acc_admin.getVeAddMoneyInfo().begin() );p1!=( acc_admin.getVeAddMoneyInfo().end() );p1++)
{
int len;
double temp_money=p1->getMoney();
len=p1->getName().size();
outToFile.write( (char*)(&len),sizeof(int) );
outToFile.write( p1->getName().c_str(), len);
len=p1->getDate().size();
outToFile.write( (char*)(&len), sizeof(int) );
outToFile.write( p1->getDate().c_str(),len);
len=p1->getExplain().size();
outToFile.write( (char*)(&len), sizeof(int) );
outToFile.write( p1->getExplain().c_str(),len);
outToFile.write( (char*) (&temp_money),sizeof(double) );
}
int consuminfo_num = acc_admin.getCount2();
CConsumInfo *p2;
outToFile.write( (char*)&consuminfo_num, sizeof(int) );
for(p2=( acc_admin.getVeConsumInfo().begin() );p2!=( acc_admin.getVeConsumInfo().end() );p2++)
{
int len;
int temp_consumNum = p2->getConsumTotalNum();
double temp_amount = p2->getAmount();
len=p2->getDate().size();
outToFile.write( (char*)(&len),sizeof(int) );
outToFile.write( p2->getDate().c_str(), len);
len=p2->getConsumId().size();
outToFile.write( (char*)(&len), sizeof(int) );
outToFile.write( p2->getConsumId().c_str(),len);
len=p2->getExplain().size();
outToFile.write( (char*)(&len), sizeof(int) );
outToFile.write( p2->getExplain().c_str(),len);
outToFile.write( (char*) &temp_amount,sizeof(double) );
outToFile.write( (char*) &temp_consumNum,sizeof(int) );
}
outToFile.close();
}
return true;
}
/////////////////////////////////////////////////////
bool CFile::loadFromFile()
{
ifstream inFile;
inFile.open(m_strFileName.c_str(),ios::in|ios::binary);
if(!inFile)
{
cout<<"can not open file"<<endl;
cout<<"please choose 7 from mainmenu to restore the data!"<<endl;
system("pause");
return false;
}
else
{
int acc_count = 0;
int acc_num = 0;
int acc_useNum = 0;
inFile.read( (char*)&acc_num, sizeof(int) );
inFile.read( (char*)&acc_useNum, sizeof(int) );
acc_admin.getVeAcc().clear();
acc_admin.setCount(acc_count);
for(int i = 0;i<acc_num;i++)
{
CAccount acc_temp;
int len = 0;
char temp_name[512];
char temp_sex[512];
char temp_birthday[512];
char temp_phone[512];
double temp_balance;
bool temp_flag;
inFile.read( (char*)&len, sizeof(int) );
inFile.read( temp_name , len );
temp_name[len]='\0';
inFile.read( (char*)&len,sizeof(int) );
inFile.read( temp_sex, len );
temp_sex[len]='\0';
inFile.read( (char*)&len,sizeof(int) );
inFile.read( temp_phone, len );
temp_phone[len]='\0';
inFile.read( (char*)&len,sizeof(int) );
inFile.read( temp_birthday, len );
temp_birthday[len]='\0';
inFile.read( (char*)&temp_flag, sizeof(bool) );
inFile.read( (char*)&temp_balance,sizeof(double));
acc_temp.SetName(temp_name);
acc_temp.SetSex(temp_sex);
acc_temp.SetPhone(temp_phone);
acc_temp.SetBirthday(temp_birthday);
acc_temp.SetAccFlags(temp_flag);
acc_temp.SetBalance(temp_balance);
acc_admin.addToVector(acc_temp);
}
acc_admin.setUseAbleCount(acc_useNum);
int add_count = 0;
int add_num =0;
inFile.read( (char*) &add_num, sizeof(int) );
acc_admin.getVeAddMoneyInfo().clear();
acc_admin.setCount1(add_count);
for( int i1 = 0;i1<add_num;i1++)
{
CAddMoneyInfo addMoney_temp;
int len = 0;
char temp_name[512];
char temp_date[512];
char temp_explain[512];
double temp_money;
inFile.read( (char*)&len, sizeof(int) );
inFile.read( temp_name , len );
temp_name[len]='\0';
inFile.read( (char*)&len,sizeof(int) );
inFile.read( temp_date, len );
temp_date[len]='\0';
inFile.read( (char*)&len,sizeof(int) );
inFile.read( temp_explain, len );
temp_explain[len]='\0';
inFile.read( (char*)&temp_money,sizeof(double));
addMoney_temp.setName(temp_name);
addMoney_temp.setDate(temp_date);
addMoney_temp.setExplain(temp_explain);
addMoney_temp.setMoney(temp_money);
acc_admin.addToInfoVector(addMoney_temp);
}
int consum_count = 0;
int consum_num = 0;
inFile.read( (char*) &consum_num, sizeof(int) );
acc_admin.getVeConsumInfo().clear();
acc_admin.setCount2(consum_count);
for(int i2 = 0;i2<consum_num;i2++)
{
CConsumInfo consum_temp;
int len = 0;
char temp_date[512];
char temp_consumid[512];
char temp_explain[512];
int temp_consumTotalNum = 0;
double temp_amount = 0.0;
inFile.read( (char*)&len, sizeof(int) );
inFile.read( temp_date , len );
temp_date[len]='\0';
inFile.read( (char*)&len,sizeof(int) );
inFile.read( temp_consumid, len );
temp_consumid[len]='\0';
inFile.read( (char*)&len,sizeof(int) );
inFile.read( temp_explain, len );
temp_explain[len]='\0';
inFile.read( (char*)&temp_amount,sizeof(double));
inFile.read( (char*)&temp_consumTotalNum,sizeof(int) );
consum_temp.setDate(temp_date);
consum_temp.setExplain(temp_explain);
consum_temp.setAmount(temp_amount);
consum_temp.setConsumTotalNum(temp_consumTotalNum);
consum_temp.setConsumId(temp_consumid);
acc_admin.addToConsumVectoor(consum_temp);
}
inFile.close();
}
return true;
}
//////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
CFile::CFile()
{
m_strFileName="default_data.dat";
}
/////////////////////////////////////////////////////
CFile::~CFile()
{
}
/////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
string & CFile::GetFileName()
{
return m_strFileName;
}
void CFile::setFileName(string _filename )
{
m_strFileName = _filename;
}
/////////////////////////////////////////////////////////////////////////////////
string &CFile::makeFileName()
{
SYSTEMTIME sys;
GetLocalTime( &sys );
static string fileName;
fileName="";
char temp_year[10];
char temp_month[10];
char temp_day[10];
char temp_hour[10];
char temp_min[10];
char temp_second[10];
itoa(sys.wYear,temp_year,10);
itoa(sys.wMonth,temp_month,10);
itoa(sys.wDay,temp_day,10);
itoa(sys.wHour,temp_hour,10);
itoa(sys.wMinute,temp_min,10);
itoa(sys.wSecond,temp_second,10);
fileName+=temp_year;
fileName+='-';
fileName+=temp_month;
fileName+='-';
fileName+=temp_day;
fileName+='_';
fileName+=temp_hour;
fileName+='-';
fileName+=temp_min;
fileName+='-';
fileName+=temp_second;
fileName+=".bak";
return fileName;
}
//////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
bool CFile::backUpData(string str_path)
{
string path_filename;
path_filename+=str_path;
path_filename+=makeFileName();
setFileName( path_filename );
if(saveToFile()==false)
{
return false;
}
return true;
}
//////////////////////////////////////////////////////////////////////////
bool CFile::restoreData(string str_path)
{
setFileName(str_path);
if(loadFromFile()==false )
{
return false;
}
return true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -