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

📄 delete.h

📁 C++实现简单数据库管理系统
💻 H
字号:
#ifndef _DELETE_H
#define _DELETE_H
#include "common.h"
static int del_num = 0;
int deal_del(string& table_name,string& column_name,string& column_value);
void Write_File(string& table_name,ofstream& out);
int delete_data(const char* cmd_path)
{
	ifstream in;
	in.open(cmd_path);
	if (!in.is_open())
	{
		cerr<<"can't open the file\n";
		return 0;//can't open the file
	}

	string create_cmd="",temp;
	bool right=false;// check the format

	while(getline(in,temp))create_cmd+=" "+temp;//get all the string in the create file
	//cout<<create_cmd;
	in.close();

	string::const_iterator beg = create_cmd.begin();
	string::const_iterator end = create_cmd.end();
	smatch result;
	const string total("\\s*delete\\s+from\\s+(\\w+)\\s*where\\s+(\\w+)\\s*=\\s*(\\d+)");
	regex reg(total);
	string del_table_name,del_column_name,del_column_value;
	string output_name = "0896170000_delete_"+To_String<int>(del_num) + ".txt";
	ofstream out(output_name.c_str() ,ios::out);
	del_num++;
	clock_t start,finish;
	start = clock();
	while(regex_search(beg, end, result, reg))
	{
		del_table_name = result[1].str();
		del_column_name = result[2].str();
		del_column_value=result[3].str();
		beg = result[0].second;
		right=true;
		cout<<del_column_value;
		cout<<del_column_name;
		cout<<del_table_name;
		int return_code = deal_del(del_table_name,del_column_name,del_column_value);// delete the data
		if (return_code == -1)
		{
			cerr<<"the Table wanted to be deleted is not exist!\n";
			out.close();
			return -1;
		}
		finish = clock();
		out<<"Execute time:  "<<double(finish - start) <<"ms\n";
		out<<"Execute results:\n";
		Write_File(del_table_name,out);// write the results to the file.
	}
	out.close();
	if(!right)
		return 1;
	return 2;
}
void Write_File(string& table_name,ofstream& out)
{
	map<string, list<column *> *  >::iterator map_ptr;
	map_ptr = SQL.find(table_name);
	list<column*>::iterator ptr = (*(map_ptr->second)).begin();
	for (;ptr!=(*(map_ptr->second)).end();++ptr)// get the table
	{
		list<string>::iterator vs_ptr =((*ptr)->data).begin();
			for (;vs_ptr!= ((*ptr)->data).end();++vs_ptr)// get the column data
			{
				out<<*vs_ptr<<" \n";
			}

	}


}
void Erase_List(list<string>& str , int i)
{
	list<string>::iterator str_ptr = str.begin();
	int count = 0;
	for (;str_ptr != str.end() ; ++str_ptr,++count)
		if(count==i)
		{
			cout<<*str_ptr<<" ";
			//log_out<<*str_ptr<<"  ";
			str.erase(str_ptr);
			break ;
		}
	
}
void Erase_Table(list<column*>& table_name,int i)
{
	list<column*>::iterator ptr = table_name.begin();

	for (;ptr!=table_name.end();++ptr)
	{
		//Erase_List((*ptr)->data , i,log_out);
		list<string>::iterator str_ptr = ((*ptr)->data).begin();
		int count = 0;
		for (;str_ptr != ((*ptr)->data).end() ; ++str_ptr,++count)
			if(count==i)
			{
				cout<<*str_ptr<<" ";
				((*ptr)->data).erase(str_ptr);
				break ;
			}

	}
	cout<<"\n";
}
int deal_del(string& table_name,string& name,string& column_value)
{
	map<string, list<column *> *  >::iterator map_ptr;
	map_ptr = SQL.find(table_name);
	if(map_ptr==SQL.end())
	{
		cerr<<"table don't exist\n";
		return -1;//table not exist
	}
	list<column*>::iterator ptr = (*(map_ptr->second)).begin();
	//for_each((*(map_ptr->second)).begin(),(*(map_ptr->second)).end(),print());

	for (;ptr!=(*(map_ptr->second)).end();++ptr)
	{
		if ((*ptr)->column_name==name)//find the column
		{
			list<string>::iterator vs_ptr =((*ptr)->data).begin();
			int i = 0;// data index

			for (;vs_ptr!= ((*ptr)->data).end();++vs_ptr,++i)// data list
				if (*vs_ptr==column_value)//find the i
				{
					++vs_ptr;
					Erase_Table(*(map_ptr->second),i);	
					--vs_ptr;//  the point should be useable
				}
					
		}

	}
	return 0;

}
#endif

⌨️ 快捷键说明

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