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

📄 phone.cpp

📁 用双向链表实现电话薄的所有功能
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			{
				DeleteNode();
				cout<<"\n记录已删除\n";
			}
			else
			{
				cout<<current_ptr->first_name<<","<<current_ptr->last_name<<"\t"<<current_ptr->phone_num<<"的记录已删除\n";
			}
		}
		current_ptr = current_ptr->next;
	}while((current_ptr != head_ptr || head_ptr == NULL));
	if(nFlag == 0)
		cout<<"\n没有找到相符的记录也没有删除记录.\n";
	cin.get();
	system("cls");
}
void record::Help()
{
help:
	int choice2;
	system("cls");
	cout<<"欢迎使用帮助文件,请输入帮助类型\n";
	cout<<"1:我的记录怎么了\n";
	cout<<"2:如何删除所有记录\n";
	cout<<"3:新的版本什么时候出来\n";
	cout<<"4:新的版本有什么新功能\n";
	cout<<"5:退出\n";
	cin>>choice2;
	switch(choice2)
	{
	case 1:
		cout<<"仔细检查一个叫Friends.dat文件夹及里面的文件\n";
		cout<<"如果没有文件,有可能已经丢失,如果文件名不符,应改名为Friend.dat\n";
		cout<<"按Enter键继续\n";
		cin>>pause;
		goto help;
		break;
	case 2:
		cout<<"删除Friends.dat文件\n";
		cout<<"按Enter键继续\n";
		cin>>pause;
		system("cls");
		goto help;
		break;
	case 3:
		cout<<"等我有时间的时候\n";
		cout<<"按Enter键继续\n";
		cin>>pause;
		system("cls");
		goto help;
		break;
	case 4:
		cout<<"我想加入以下内容\n";
		cout<<"多用户和密码\n";
		cout<<"百科全书\n";
		cout<<"清除所有记录命令\n";
		cout<<"修补错误\n";
		cout<<"按Enter键继续\n";
		cin>>pause;
		system("cls");
		goto help;
		break;
	default:
		cout<<"按Enter键退出";
		cout<<"按Enter键继续\n";
		break;
	}
}
int record::VerifyDelete()
{
	char YesNo;
	cout<<"\n确认?(Y/N)";
	cin>>YesNo;
	cin.ignore(20,'\n');
	if((YesNo == 'Y') || (YesNo == 'y'))
		return (1);
	else
		return (0);
}
void record::DeleteNode()
{
	if(current_ptr == head_ptr)
		DeleteNodeAtEnd();
	else
		if(current_ptr->next == head_ptr)
			DeleteNodeAtEnd();
		else
			DeleteNodeAtMiddle();
}
void record::DeleteNodeAtHead()
{
	if(head_ptr->next != head_ptr)
	{
		head_ptr = current_ptr->next;
		tail_ptr->next = head_ptr;
		head_ptr->prior = tail_ptr;
		delete current_ptr;
		current_ptr = head_ptr;
	}
	else
	{
		head_ptr = NULL;
		tail_ptr = NULL;
		delete current_ptr;
	}
}
void record::DeleteNodeAtEnd()
{
	friend_node *previous_ptr = current_ptr->prior;
	delete current_ptr;
	previous_ptr->next = head_ptr;
	head_ptr->prior = previous_ptr;
	tail_ptr = previous_ptr;
	current_ptr = tail_ptr;
}
void record::DeleteNodeAtMiddle()
{
	friend_node *previous_ptr = current_ptr->prior;
	previous_ptr->next = current_ptr->next;
	current_ptr->next->prior = previous_ptr;
	delete current_ptr;
	current_ptr = previous_ptr;
}
void record::DeleteList()
{
	friend_node *temp_ptr;
	current_ptr = head_ptr;
	do{
		temp_ptr = current_ptr->next;
		tail_ptr->next =temp_ptr;
		temp_ptr->prior = tail_ptr;
		delete current_ptr;
		current_ptr = temp_ptr;
	}while(temp_ptr != NULL && temp_ptr != tail_ptr);
	delete current_ptr;
}
void record::SaveFile()
{
	ofstream outfile;
	outfile.open("FRIENDS.dat",ios::out);
	if(outfile)
	{
		current_ptr = head_ptr;
		if(head_ptr != NULL)
		{
			do{
				outfile<<current_ptr->last_name<<endl;
				outfile<<current_ptr->first_name<<endl;
				outfile<<current_ptr->phone_num<<endl;
				current_ptr = current_ptr->next;
			}while(current_ptr != head_ptr);
		}
		outfile<<"文件结束"<<endl;
		outfile.close();
	}
	else
		cout<<"打开文件出错.\n";
}
void record::LoadFile()
{
	friend_node *new_ptr;
	ifstream infile;
	int end_loop = 0;
	infile.open("FRIENDS.dat",ios::in);
	if(infile)
	{
		do{
			new_ptr = new friend_node;
			if(new_ptr != NULL)
			{
				infile.get(new_ptr->last_name,20);
				infile.ignore(20,'\n');
				if((strcmp(new_ptr->last_name,"") != 0) && (strcmp(new_ptr->last_name,"文件结束") != 0))
				{
					infile.get(new_ptr->first_name,15);
					infile.ignore(20,'\n');
					infile.get(new_ptr->phone_num,15);
					infile.ignore(20,'\n');
					InsertNode(new_ptr);
				}
				else
				{
					delete new_ptr;
					end_loop = 1;
				}
			}
			else
			{
				cout<<"警告:没有成功地从磁盘导入文件.\n";
				end_loop = 1;
			}
		}while(end_loop == 0);
		infile.close();
	}
	else
		cout<<"没有可用的数据文件,记录表为空.\n";
}
void record::ModifyRecord()
{
	system("cls");
	char search_string[20];
	if(head_ptr == NULL)
	{
		cout<<"无记录可修改!\n";
		return;
	}
	int nFlag = 0;
	current_ptr = head_ptr;
	cin.ignore(20,'\n');
	cout<<"\n输入你想修改记录的姓氏:";
	cin.getline(search_string,20);
	friend_node *new_ptr;
	while( (strcmp(current_ptr->last_name,search_string) == 0) && head_ptr != NULL )
	{
		new_ptr = new friend_node;
		nFlag = 1;
		cout<<"\n找到记录\n";
		cout<<current_ptr->first_name<<' '<<current_ptr->last_name<<"\t\t";
		cout<<current_ptr->phone_num<<endl;
		if(VerifyDelete())
		{
			cout<<"请输入新记录的姓氏:";
			cin.getline(new_ptr->last_name,20);
			cout<<"请输入新记录的名字:";
			cin.getline(new_ptr->first_name,15);
			cout<<"请输入新记录的电话:";
			cin.getline(new_ptr->phone_num,12);
			if(VerifyDelete())
			{
				DeleteNode();
				InsertNode(new_ptr);
				cout<<"\n记录已修改\n";
				cout<<new_ptr->first_name<<' ';
				cout<<new_ptr->last_name<<endl;
				cout<<new_ptr->phone_num<<endl;
				current_ptr = head_ptr;
			}
		}
		else
		{
			cout<<current_ptr->first_name<<","<<current_ptr->last_name<<"\t"<<current_ptr->phone_num<<" 的记录没有被修改\n";
			current_ptr = current_ptr->next;
			delete new_ptr;
		}
	}
	do{
		if(strcmp(current_ptr->last_name,search_string) == 0)
		{
			nFlag = 1;
			new_ptr = new friend_node;
			cout<<"\n找到记录\n";
			cout<<current_ptr->first_name<<' '<<current_ptr->last_name<<"\t\t";
			cout<<current_ptr->phone_num<<endl;
			if(VerifyDelete())
			{
				cout<<"请输入新记录的姓氏:";
				cin.getline(new_ptr->last_name,20);
				cout<<"请输入新记录的名字:";
				cin.getline(new_ptr->first_name,15);
				cout<<"请输入新记录的电话:";
				cin.getline(new_ptr->phone_num,12);
				if(VerifyDelete())
				{
					friend_node *temp_ptr = current_ptr->prior;
					DeleteNode();
					InsertNode(new_ptr);
					current_ptr = temp_ptr;
					cout<<"\n记录已修改\n";
					cout<<new_ptr->first_name<<' ';
					cout<<new_ptr->last_name<<endl;
					cout<<new_ptr->phone_num<<endl;
					current_ptr = head_ptr;
				}
			}
			else
			{
				cout<<current_ptr->first_name<<","<<current_ptr->last_name<<"\t"<<current_ptr->phone_num<<" 的记录没有被修改\n";
				delete new_ptr;
			}
		}
		current_ptr = current_ptr->next;
	}while(current_ptr != head_ptr || head_ptr == NULL);
	
	
	
	if(nFlag == 0)
	{
		cout<<"找不到相符合的记录\n";
		UserInput();                    //是否重新寻找
	}
	system("cls");
}
void record::UserInput()                    //重试
{
	char answer_y_n;
	cout<<"再试一次? y/n:";
	cin.get(answer_y_n);
	if(answer_y_n == 'y' || answer_y_n == 'n') 
		if(answer_y_n == 'y')
			ModifyRecord();
		else
		{
			cout<<"无效输入";
			UserInput();
		}
}

⌨️ 快捷键说明

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