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

📄 manager.cpp

📁 用VC写的一个数据库
💻 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 + -