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

📄 filelibrary.cpp

📁 设计一个类库
💻 CPP
📖 第 1 页 / 共 4 页
字号:
#include"filelibrary.h"
#include<cstring>
#include<cstdlib>

#define Lenth_FileName 10    //文件名的长度
#define Lenth_TempData 1000  //临时数据内容的最大长度
#define Lenth_IsDelete 10    //删除标识的长度

FileFunction::FileFunction():NextNum(1){
}

void FileFunction::MenuProcess(){
	
	system("cls");

	while(1){
	char* filename = new char[Lenth_FileName]; //必须被初始化


	cout<<"****************************"<<endl;
	cout<<"*                          *"<<endl;
	cout<<"*     处  理  文  件       *"<<endl;
	cout<<"*                          *"<<endl;
	cout<<"****************************"<<endl;
	cout<<"*    1.创建文件            *"<<endl;
	cout<<"*    2.打开已有文件        *"<<endl;
	cout<<"*    3.关闭文件            *"<<endl;
	cout<<"*    0.返回主菜单          *"<<endl;
	cout<<"*                          *"<<endl;
	cout<<"****************************"<<endl;
	cout<<"请输入选项的号码:";

	int choice;

	cin>>choice;

	if(cin.fail()){
		cout<<"输入错误!返回主菜单。"<<endl;
		return;
	}

	switch(choice){
	case 1:{
			cout<<"请输入你要创建的文件名字:";
			cin>>filename;
			if(Create(filename))
				cout<<"创建文件"<<filename<<"成功"<<endl;
			else
				cerr<<"创建文件"<<filename<<"失败"<<endl;
			break;
			}

	case 2:{
			cout<<"请输入你要打开的文件名字:";
			cin>>filename;
			if(Open(filename))
				cerr <<"打开文件"<<filename<<"成功"<<endl;
			else
				cerr<<"打开文件"<<filename<<"失败"<<endl;
			break;
		   }
	
	case 3:{
			if(Close())
				cout<<"关闭文件成功"<<endl;
			else
				cout<<"没有文件被打开,关闭不成功"<<endl;
			break;
		   }
			
	case 0:	return;                      //返回主菜单
			

	default:  cout << "输入错误,请再次输入"<<endl; break;
	}
	cout<<endl;
	}
}

void FileFunction::MenuReadWrite(){

	system("cls");

	while(1){

	cout<<"****************************"<<endl;
	cout<<"*                          *"<<endl;
	cout<<"*     顺 序 读 写          *"<<endl;
	cout<<"*                          *"<<endl;
	cout<<"****************************"<<endl;
	cout<<"*    1.顺序读              *"<<endl;
	cout<<"*    2.顺序写              *"<<endl;
	cout<<"*    0.返回主菜单          *"<<endl;
	cout<<"*                          *"<<endl;
	cout<<"****************************"<<endl;
	cout<<"请输入选项的号码:";

	int choice;
	cin>>choice;

	if(cin.fail()){
		cout<<"输入错误!返回主菜单。"<<endl;
		return;
	}

	switch(choice){

	case 1:{
			if(!CheckFileOpen()){
				cout<<"文件尚未打开,无法读取"<<endl;
				break;
			}		
			if(!ReadByOrder() )
				cout<<"已经到达文件尾,读取记录未成功。"<<endl;
			break;
		   }

	case 2:{
				WriteByOrder();
				break;
		   }

	case 0:	return;                      //返回主菜单 

	default:  cout << "输入错误,请再次输入"<<endl; break;
	}
	cout<<endl;
	}
}
void FileFunction::MenuAddRec(){ //加入记录:加到尾部;插到指定的位置之前(按记录号或记录标识);插到当前记录之前;
	system("cls");

	while(1){

	cout<<"***************************************"<<endl;
	cout<<"*                                     *"<<endl;
	cout<<"*    添       加       记       录    *"<<endl;
	cout<<"*                                     *"<<endl;
	cout<<"***************************************"<<endl;
	cout<<"*                                     *"<<endl;
	cout<<"*    1.加到尾部                       *"<<endl;
	cout<<"*    2.按记录号插到指定的位置之前     *"<<endl;
	cout<<"*    3.按记录标识插到指定的位置之前   *"<<endl;	
	cout<<"*    4.插到当前记录之前               *"<<endl;	
	cout<<"*    0.返回主菜单                     *"<<endl;
	cout<<"*                                     *"<<endl;
	cout<<"***************************************"<<endl;
	cout<<"请输入选项的号码:";

	int choice;
	cin>>choice;

	if(cin.fail()){
		cout<<"输入错误!返回主菜单。"<<endl;
		return;
	}

	switch(choice){

	case 1:{
			AppendRec();
			break;
		   }

	case 2:{
			int seq;
			cout<<"请输入记录的序号:";
			cin>>seq;
			if(LocateBySeq(seq)){
				InsertCurrentRec();
			}		  
			else{
				cout<<"不存在序号为"<<seq<<"的记录"<<endl;
			}
			break;
		   }
		   
	case 3:{
			
			char* tag = new char[TagLenth+1];
			cout<<"请输入记录的标识:";
			cin>>tag;
			if(LocateByTag(tag)){	
				InsertCurrentRec();
			}		  
			else{
				cout<<"不存在以"<<tag<<"为标识的记录。"<<endl;
			}
			break;
		   }

	case 4:{
				InsertCurrentRec();
				break;
		   }
	case 0:	return;                      //返回主菜单 

	default:  cout << "输入错误,请再次输入"<<endl; break;
	}
	cout<<endl;
	}
}

void FileFunction::MenuLocateRec(){

	system("cls");
	while(1){

	cout<<"****************************"<<endl;
	cout<<"*                          *"<<endl;
	cout<<"*     定  位   记  录      *"<<endl;
	cout<<"*                          *"<<endl;
	cout<<"****************************"<<endl;
	cout<<"*    1.按记录号定位记录    *"<<endl;
	cout<<"*    2.按记录标识定位记录  *"<<endl;
	cout<<"*    0.返回主菜单          *"<<endl;
	cout<<"*                          *"<<endl;
	cout<<"****************************"<<endl;
	cout<<"请输入选项的号码:";

	int choice;

	cin>>choice;

	if(cin.fail()){
		cout<<"输入错误!返回主菜单。"<<endl;
		return;
	}

	switch(choice){
	case 1:	{
			int seq;
			cout<<"请输入记录的序号:";
			cin>>seq;
			if(LocateBySeq(seq)){	

				Record *temp = &RecList.getValue();

				//读取数据内容
				File.seekg(	temp->getOffset()+Lenth_RecSeq+TagLenth +1 +Lenth_Offset + Lenth_DataLenth ,ios::beg);  
				char* data = new char[ temp->getDataLenth()+1];      
				File.read(data,	temp->getDataLenth());  //存的时候是以write来存,所遇取的时候对应用read
				data[ temp->getDataLenth() ]='\0';      //设置最后一个字符为结束符号
				
				cout<<"定位成功!"<<endl;
				cout<<"当前记录的序号是"<<	temp->getRecSeq()<<endl;
				cout<<"标识:"<<	temp->getRecTag()<<endl;
				
				char* s = new char[10];
	
				s = strncpy( s, data,9);
	
				s[9]='\0';	
	
				if(strcmp(s,"filelink:")==0){
		
					int t = temp->getDataLenth()-9;
					char* newfilename = new char[t+1];
		
					for(int i=0; i < t; i++ ){
						newfilename[i] = data[9+i];
					}
					newfilename[t]='\0';
					cout<<"此记录为文件"<<newfilename<<"的链接"<<endl;
					system(newfilename);
		
				}
				else{				
					cout<<"数据内容:"<<endl<<data<<endl;
					}
				}		  
			else{
				cout<<"不存在序号为"<<seq<<"的记录"<<endl;
			}
			break;
			}

	case 2: {		
		
			char* tag = new char[TagLenth+1];
			cout<<"请输入记录的标识:";
			cin>>tag;
			if(LocateByTag(tag)){	

				Record *temp = &RecList.getValue();

				//读取数据内容
				File.seekg(	temp->getOffset()+Lenth_RecSeq+TagLenth +1 +Lenth_Offset + Lenth_DataLenth,ios::beg);  
				char* data = new char[ temp->getDataLenth()+1];      
				File.read(data,	temp->getDataLenth());  //存的时候是以write来存,所遇取的时候对应用read
				data[ temp->getDataLenth() ]='\0';      //设置最后一个字符为结束符号

				cout<<"定位成功!"<<endl;
				cout<<"当前记录的序号是"<<	temp->getRecSeq()<<endl;
				cout<<"标识:"<<	temp->getRecTag()<<endl;
				
				char* s = new char[10];
	
				s = strncpy( s, data,9);
	
				s[9]='\0';	
	
				if(strcmp(s,"filelink:")==0){
		
					int t = temp->getDataLenth()-9;
					char* newfilename = new char[t+1];
		
					for(int i=0; i < t; i++ ){
						newfilename[i] = data[9+i];
					}
					newfilename[t]='\0';
					cout<<"此记录为文件"<<newfilename<<"的链接"<<endl;
					system(newfilename);
		
				}
				else{				
					cout<<"数据内容:"<<endl<<data<<endl;
					}

			}		  
			else{
				cout<<"不存在以"<<tag<<"为标识的记录。"<<endl;
			}
			break;
			}
			
	case 0:	return;                      //返回主菜单 

	default:  cout << "输入错误,请再次输入"<<endl; break;
	}
	cout<<endl;
	}

}
void FileFunction::MenuRewriteRec(){


	system("cls");
	while(1){

	cout<<"**********************************"<<endl;
	cout<<"*                                *"<<endl;
	cout<<"*     重   写   记  录           *"<<endl;
	cout<<"*                                *"<<endl;
	cout<<"**********************************"<<endl;
	cout<<"*    1.按记录号重写记录内容      *"<<endl;
	cout<<"*    2.按记录标识重写记录内容    *"<<endl;
	cout<<"*                                *"<<endl;
	cout<<"*    3.按记录号重写记录标识      *"<<endl;
	cout<<"*    4.按记录标识重写记录标识    *"<<endl;
	cout<<"*                                *"<<endl;	
	cout<<"*    0.返回主菜单                *"<<endl;
	cout<<"*                                *"<<endl;
	cout<<"**********************************"<<endl;
	cout<<"请输入选项的号码:";

	int choice;

	cin>>choice;

	if(cin.fail()){
		cout<<"输入错误!返回主菜单。"<<endl;
		return;
	}

	switch(choice){
	case 1:	{
			int seq;
			cout<<"请输入要重写的记录的序号:";
			cin>>seq;
			getchar();
			if(LocateBySeq(seq)){	

				if(RewriteData())
					cout<<"重写记录成功!"<<endl;
				else
					cout<<"重写记录失败。"<<endl;

			}		  
			else{
				cout<<"不存在序号为"<<seq<<"的记录"<<endl;
			}
			break;
			}

	case 2: {		
		
			char* tag = new char[TagLenth+1];
			cout<<"请输入记录的标识:";
			cin>>tag;
			getchar();
			if(LocateByTag(tag)){	

				if(RewriteData())
					cout<<"重写记录成功!"<<endl;
				else
					cout<<"重写记录失败。"<<endl;

			}		  
			else{
				cout<<"不存在以"<<tag<<"为标识的记录。"<<endl;
			}
			break;
			}
	
	case 3:	{
			int seq;
			cout<<"请输入要重写的记录的序号:";
			cin>>seq;
			getchar();
			if(LocateBySeq(seq)){	

				if(RewriteTag())
					cout<<"重写记录标识成功!"<<endl;
				else
					cout<<"重写记录标识失败。"<<endl;

			}		  
			else{
				cout<<"不存在序号为"<<seq<<"的记录"<<endl;
			}
			break;
			}

	case 4: {		
		
			char* tag = new char[TagLenth+1];
			cout<<"请输入记录的标识:";
			cin>>tag;
			getchar();
			if(LocateByTag(tag)){	

				if(RewriteTag())
					cout<<"重写记录标识成功!"<<endl;
				else
					cout<<"重写记录标识失败。"<<endl;

			}		  
			else{
				cout<<"不存在以"<<tag<<"为标识的记录。"<<endl;
			}
			break;
			}
			
	case 0:	return;                      //返回主菜单 

	default:  cout << "输入错误,请再次输入"<<endl; break;
	}
	cout<<endl;
	}


}

void FileFunction::MenuDeleteRec(){//菜单6.删除记录
	system("cls");

	while(1){

	cout<<"***************************************"<<endl;
	cout<<"*                                     *"<<endl;
	cout<<"*    删       除       记       录    *"<<endl;
	cout<<"*                                     *"<<endl;

⌨️ 快捷键说明

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