📄 manager.cpp
字号:
#include "Manager.h"
CManager::CManager(void)
{
std::cout<<"构造了";
LoadData("data.sav");
m_log.ChangeFileName("log.txt");
system("cls");
}
CManager::~CManager(void)
{
}
void CManager::DrawLine()
{
std::cout<<"*****************************************************"<<std::endl;
}
void CManager::InputError()
{
std::cout<<"输入错误!"<<std::endl;
}
bool CManager::Run()
{
while (true)
{
DrawLine();
std::cout<<"a.查阅数据\nb.修改数据\nc.保存数据\nd.退出程序"<<std::endl;
DrawLine();
switch(InputCIndex())
{
case 'a':
case 'A':
LookData();
break;
case 'b':
case 'B':
SetData();
break;
case 'c':
case 'C':
SaveData("data.sav");
break;
case 'd':
case 'D':
exit(0);
break;
default:
InputError();
}
}
return true;
}
bool CManager::LookData()
{
std::cout<<"一共有 "<<m_AllDataBase.Size()<<" 个数据库"<<"\n";
DrawLine();
ShowAllData();
while (true)
{
DrawLine();
std::cout<<"(输入数据库的编号即可,输入0返回)\n";
int iIndex=InputIIndex();
if (iIndex==0)
{
break;
}
else if(iIndex<0||iIndex>m_AllDataBase.Size())
{
DrawLine();
InputError();
}
else
{
DrawLine();
ShowDateBase(iIndex-1);
}
}
return true;
}
bool CManager::MakeFormat(CRecordFormat &format)
{
while (true)
{
char sName[50];
DrawLine();
std::cout<<"a.增加单元\nb.完成返回\n";
DrawLine();
switch(InputCIndex())
{
case 'a':
case 'A':
DrawLine();
std::cout<<"输入单元名字:\n";
std::cin>>sName;
format.AddCell(sName);
break;
case 'b':
case 'B':
DrawLine();
std::cout<<"格式创建完毕!\n";
return true;
break;
default:
InputError();
}
}
return true;
}
void CManager::ShowAllData()
{
for (int i=0;i<m_AllDataBase.Size();i++)
{
std::cout<<i+1<<"."<<m_AllDataBase[i].GetName()<<"\n";
}
}
void CManager::ShowDateBase(int index)
{
DrawLine();
std::cout<<"数据库【"<<m_AllDataBase[index].GetName()<<"】一共有"<<m_AllDataBase[index].Size()<<"条记录,以下是全部记录!\n";
DrawLine();
std::cout<<"编号\t";
for (int j=0;j<m_AllDataBase[index].GetFormat().Size();j++)
{
std::cout<<m_AllDataBase[index].GetFormat()[j]<<"\t";
}
std::cout<<"\n";
for (int i=0;i<m_AllDataBase[index].Size();i++)
{
std::cout<<i+1<<"\t";
for (int j=0;j<m_AllDataBase[index].GetFormat().Size();j++)
{
std::cout<<m_AllDataBase[index][i][j]<<"\t";
}
std::cout<<"\n";
}
}
bool CManager::SetData()
{
while (true)
{
DrawLine();
std::cout<<"a.修改数据库\nb.增加数据库\nc.删除数据库\nd.返回\n";
DrawLine();
switch(InputCIndex())
{
case 'a':
case 'A':
changeDataBase();
break;
case 'b':
case 'B':
AddDataBase();
break;
case 'c':
case 'C':
DeleteDataBase();
break;
case 'd':
case 'D':
return true;
break;
default:
InputError();
}
}
return true;
}
void CManager::AddDataBase()
{
char sName[50];
DrawLine();
std::cout<<"数据库名字:\n";
std::cin>>(char *)sName;
CDataBase dataBase(sName);
DrawLine();
std::cout<<"生成数据库【"<<sName<<"】的格式……\n";
CRecordFormat formatTemp;
MakeFormat(formatTemp);
dataBase.SetFormat(formatTemp);
DrawLine();
std::cout<<"开始添加记录……\n";
AddRecord(dataBase);
m_AllDataBase.PushBack(dataBase);
}
void CManager::AddRecord(CDataBase &dataBase)
{
while (true)
{
DrawLine();
std::cout<<"a.增加记录\nb.完成返回\n";
DrawLine();
CDataRecord record(dataBase.GetFormat());
switch(InputCIndex())
{
case 'a':
case 'A':
DrawLine();
record.FillRecord();
DrawLine();
dataBase.AddRecord(record);
break;
case 'b':
case 'B':
return;
break;
default:
InputError();
}
}
}
void CManager::DeleteDataBase()
{
DrawLine();
std::cout<<"一共有 "<<m_AllDataBase.Size()<<" 个数据库"<<"\n";
DrawLine();
ShowAllData();
DrawLine();
int iIndex=InputIIndex();
if(iIndex<=0||iIndex>m_AllDataBase.Size())
{
InputError();
}
else
{
std::cout<<"删除成功!\n";
m_AllDataBase.Erase(m_AllDataBase[iIndex-1]);
}
}
void CManager::changeDataBase()
{
DrawLine();
std::cout<<"一共有 "<<m_AllDataBase.Size()<<" 个数据库"<<"\n";
DrawLine();
ShowAllData();
DrawLine();
std::cout<<"(按0返回):\n";
int iIndex=InputIIndex();
if(iIndex<=0||iIndex>m_AllDataBase.Size())
{
InputError();
}
else
{
ShowDateBase(iIndex-1);
DrawLine();
std::cout<<"a.修改记录\nb.增加记录\nc.删除记录\n";
DrawLine();
CDataRecord record(m_AllDataBase[iIndex-1].GetFormat());
switch(InputCIndex())
{
case 'a':
case 'A':
DrawLine();
std::cout<<"输入要修改的记录编号!\n";
DrawLine();
SetRecord(m_AllDataBase[iIndex-1][InputIIndex()-1]);
break;
case 'b':
case 'B':
DrawLine();
record.FillRecord();
m_AllDataBase[iIndex-1].AddRecord(record);
break;
case 'c':
case 'C':
DrawLine();
std::cout<<"输入要删除的记录编号!\n";
m_AllDataBase[iIndex-1].DeleteRecord(InputIIndex()-1);
break;
default:
InputError();
}
}
}
void CManager::SetRecord(CDataRecord &record)
{
DrawLine();
for (int i=0;i<record.Size();i++)
{
std::cout<<i<<"\t";
}
std::cout<<"\n";
for (int i=0;i<record.Size();i++)
{
std::cout<<record[i]<<"\t";
}
std::cout<<"\n";
DrawLine();
std::cout<<"输入要修改的单元(输入序号即可)!\n";
int iIndex=InputIIndex();
if(iIndex<0||iIndex>=record.Size())
{
InputError();
}
else
{
DrawLine();
std::cout<<"输入新的"<<record.GetFormat()[iIndex]<<"\n";
char cName[50];
std::cin>>cName;
DrawLine();
record.SetCell(iIndex,(GUtString)cName);
}
}
int CManager::InputIIndex()
{
std::cout<<"请选择:\n";
int iIndex;
std::cin>>iIndex;
return iIndex;
}
char CManager::InputCIndex()
{
std::cout<<"请选择:\n";
char cIndex;
std::cin>>cIndex;
return cIndex;
}
void CManager::LoadData(const char* ch)
{
m_outFileStream.LoadStream(ch,"r");
enum
{
dataBase,
format,
formatCell,
record,
recordCell
}state;
while (true)
{
GUtString tempString(ReadString());
std::cout<<tempString;
if(tempString=="[DataBaseName]")
{
std::cout<<"database\n";
state=dataBase;
continue;
}
else if (tempString=="[format]")
{
std::cout<<"format\n";
state=format;
continue;
}
else if (tempString=="[record]")
{
std::cout<<"record\n";
state=record;
continue;
}
else if (tempString=="Error")
{
std::cout<<"Error\n";
return;
}
switch(state)
{
case dataBase:
m_AllDataBase.PushBack(CDataBase(tempString));
break;
case format:
case formatCell:
m_AllDataBase[m_AllDataBase.Size()-1].AddFormatCell(tempString);
break;
case record:
m_AllDataBase[m_AllDataBase.Size()-1].AddRecord(CDataRecord(m_AllDataBase[m_AllDataBase.Size()-1].GetFormat()));
state=recordCell;
case recordCell:
m_AllDataBase[m_AllDataBase.Size()-1].AddRecordCell(tempString);
break;
}
}
}
char* CManager::ReadString()
{
char *temp=new char[255];
if (!m_outFileStream.ReadString(temp))
{
//std::cout<<"流空了\n";
temp="Error";
}
//int i;
//std::cin>>i;
return temp;
}
void CManager::SaveData(const char* ch)
{
m_inFileStream.LoadStream(ch,"w");
for (int i=0;i<m_AllDataBase.Size();i++)
{
m_inFileStream.WriteString("[DataBaseName]\n");
m_inFileStream.WriteString(m_AllDataBase[i].GetName());
m_inFileStream.WriteString("\n[format]\n");
for (int j=0;j<m_AllDataBase[i].GetFormat().Size();j++)
{
m_inFileStream.WriteString((m_AllDataBase[i].GetFormat())[j]);
m_inFileStream.WriteString(" ");
}
for (int j=0;j<m_AllDataBase[i].Size();j++)
{
m_inFileStream.WriteString("\n[record]\n");
for (int k=0;k<m_AllDataBase[i][j].Size();k++)
{
m_inFileStream.WriteString(m_AllDataBase[i][j][k]);
m_inFileStream.WriteString(" ");
}
}
m_inFileStream.WriteString("\n\n");
}
m_inFileStream.Close();
DrawLine();
std::cout<<"保存成功\n";
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -