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

📄 manage.cpp

📁 通讯录系统
💻 CPP
字号:
#include "Manage.h"
#include <fstream>
#include <iostream>
#include <stdlib.h>
#include <windows.h>
using namespace std;
//是否有未保存的变更
bool changed = false;
//是否追加
bool app = false;
//退出通讯录
void Manage::exitProgram() {
	if(changed) {
		char input[80];
		cout << "通讯录已改变,是否保存?Y(保存) / N(不保存):" << "\t";
		cin.getline(input, 80);
		//错误处理
		while(strcmp(input,"Y") != 0 && strcmp(input,"N") != 0 && strcmp(input,"y") != 0 && strcmp(input,"n") != 0 ) {
			cout << "输入错误!" << endl;
			cout << "通讯录已改变,是否保存?Y(保存) / N(不保存):" << "\t";
			cin.getline(input, 80);
		}
		//保存
		if(strcmp(input,"Y") == 0 || strcmp(input,"y") == 0) {
			char filename[80];
			cout << "请输入要保存的文件名:(默认为sname)" << endl;
			cin.getline(filename,80,'\n');
			save(filename);
		}
	}
	//退出
	cout << "\t" << "\t" << "\t" <<"***********************" << endl;
	cout << "\t" << "\t" << "\t"<< "  * 感谢使用通讯录!*" << endl;
	cout << "\t" << "\t" << "\t" <<"***********************" << endl;
	exit(0);
}
//添加记录
void Manage::addRecord() {
	if(catalogs.size() == 0) {
		newCatalog();
	}
	cout << "输入数据,姓名为0时结束:" << endl;
	char name[80];
	char tel[80];
	while(1){
		cout << "请输入姓名: ";
		cin.getline(name, 80);
		if(name[0] == '0')
			break;
		cout << "请输入电话: ";
		cin.getline(tel, 80);
		current().addItem(Item(name, tel));
		cout << "添加成功!" << endl;
	}	
	cout << "添加结束!" << endl;
	changed = true;
}
//查找记录
void Manage::Find() {
	cout <<"1.通过姓名" << endl;
	cout <<"2.通过电话" << endl;
	char input[80];
	cin.getline(input, 80);
	//错误处理
	while(strcmp(input,"1") != 0 && strcmp(input,"2") != 0) {
		cout << "输入错误,重选1-2: " << endl;
		cin.getline(input, 80);
	}
	vector<Item> find;	//找到的记录
	switch(input[0]) {
		case '1': cout << "请输入姓名: ";
				cin.getline(input, 80);
				find = current().FindName(input);
				cout << "共找到" << find.size() << "条记录:" << endl;
				current().display(find);
				break;
		case '2':cout << "请输入电话: ";
				cin.getline(input, 80);
				find = current().FindTel(input);
				cout << "共找到" << find.size() << "条记录:" << endl;
				current().display(find);
				break;
	}

} 
//新建Catalog
void Manage::newCatalog() {
	catalogs.push_back(Catalog());
	app = true;
	if(changed) {
		char input[80];
		cout << "通讯录已改变,是否保存?Y(保存) / N(不保存):" << "\t";
		cin.getline(input, 80);
		//错误处理
		while(strcmp(input,"Y") != 0 && strcmp(input,"N") != 0 && strcmp(input,"y") != 0 && strcmp(input,"n") != 0 ) {
			cout << "输入错误!" << endl;
			cout << "通讯录已改变,是否保存?Y(保存) / N(不保存):" << "\t";
			cin.getline(input, 80);
		}
		//保存
		if(strcmp(input,"Y") == 0 || strcmp(input,"y") == 0) {
			char filename[80];
			cout << "请输入要保存的文件名:(默认为sname)" << endl;
			cin.getline(filename,80,'\n');
			save(filename);
		}
	}
}
//删除记录
void Manage::deleteRecord() {
	if(current().getItemNum() == 0){
		cout << "通讯录为空!" << endl;
	}else{
		cout <<"1.通过姓名" << endl;
		cout <<"2.通过电话" << endl;
		char input[80];
		cin.getline(input, 80);
		//错误处理
		while(strcmp(input,"1") != 0 && strcmp(input,"2") != 0) {
			cout << "输入错误,重选1-2: " << endl;
			cin.getline(input, 80);
		}
		vector<Item> find;
		switch(input[0]) {
			case '1': cout << "请输入姓名: ";
					cin.getline(input, 80);
					current().removeItemName(input);
					break;
			case '2':cout << "请输入电话: ";
					cin.getline(input, 80);
					current().removeItemName(input);
					break;
		}
	}
	changed = true;
}
//读取记录
void Manage::read(std::string name) {
	if(name.length() == 0)
		name = "sname";	//默认文件
	newCatalog();
	ifstream in(name.c_str());
	if(in != 0){
		char buf[80];
		string Bname;
		string Btel;
		while(in.getline(buf,80)){
			Bname = buf;
			in.getline(buf,80);
			Btel = buf;
			current().addItem(Item(Bname, Btel));	
		}
		in.close();
		cout << "共有" << current().getItemNum() << "条记录读入。" << endl << endl;
		app = false;
	}else
		cout << "文件不存在!" << endl;
}
//保存记录
void Manage::save(string name) {
	if(name.length() == 0)
		name = "sname";	//默认文件 
	ofstream out(name.c_str(),ios::app);	//追加
	//覆盖
	if(!app) {
		ofstream out1(name.c_str());
		out1 << "";
		out1.close();
	}
	for(int i = 0; i < current().getItemNum(); i++) {
		if(catalogs.size() > 1){
			out << old().getItem(i).getName() << endl;
			out << old().getItem(i).getTelNum() << endl;
		}else{
			out << current().getItem(i).getName() << endl;
			out << current().getItem(i).getTelNum() << endl;
		}
		
	}
	out.close();
	cout << "保存成功!" << endl;
	changed = false;
}
//
Catalog& Manage::old() {
	vector<Catalog>::iterator ci;
	ci = catalogs.end();
	ci--;
	ci--;
	return *ci;
}

//当前正在处理的Catalog
Catalog& Manage::current() {
	return catalogs.back();
}	
//通讯录开始
void Manage::start() {
	cout << "\t" << "\t" << "\t" <<"***********************" << endl;
	cout << "\t" << "\t" <<"\t" << "*  欢迎使用通讯录  *"   << endl;
	cout << "\t" << "\t" <<"\t" << "***********************" << endl;
}
//界面处理
void Manage::Interface() {
	//打印界面
	cout << endl << endl;
	cout << "1. 显示记录" << endl;
	cout << "2. 查询记录" << endl;
	cout << "3. 增加记录" << endl;
	cout << "4. 删除记录" << endl;
	cout << "5. 保存记录" << endl;
	cout << "6. 读取记录" << endl;
	cout << "7. 新建通讯录" << endl;
	cout << "8. 结束运行" << endl;
	cout << endl << "左边数字对应功能选择,请输入1-8: " << "\t";

	char input[80];
	cin.getline(input, 80);
	//错误处理
	while(strcmp(input,"1") != 0 && strcmp(input,"2") != 0 && strcmp(input,"3") != 0 && strcmp(input,"4") != 0 && strcmp(input,"5") != 0 && strcmp(input,"6") != 0 && strcmp(input,"7") != 0 && strcmp(input,"8") != 0) {
		cout << "输入错误,重选1-8: " << endl;
		cin.getline(input, 80);
	}
	char filename[80];
	//处理输入
	switch(input[0]) {
		//打印通讯录
		case '1': if(catalogs.size() == 0) {
						cout << "通讯录为空!" << endl << endl;
						Interface();
				  }
				  current().display();
				  Interface();
				  break;
		//查找
		case '2': if(catalogs.size() == 0) {
						cout << "通讯录为空!" << endl << endl;
						Interface();
				  }
				 Find(); 
				 Interface();
				 break;
		//添加
		case '3': addRecord() ; Interface(); break;
		//删除
		case '4': deleteRecord(); Interface(); break;
		//保存
		case '5': cout << "请输入要保存的文件名:(默认为sname)" << endl;
				  cin.getline(filename,80,'\n');
				  save(filename);
				  Interface(); 
				  break;
		//读取
		case '6':   cout << "请输入要读取的文件名:(默认为sname)" << endl;
					cin.getline(filename,80,'\n');
					read(filename); 
					Interface(); 
					break;
		//新建通讯录
		case '7': newCatalog(); Interface(); break;
		//退出
		case '8': exitProgram(); break;
	}
}
//主函数
int main() { 
	system("color 0A");		//设置字体颜色
	SetConsoleTitle("通讯录");	//设置标题
	Manage manage;
	manage.start();		//开始
	manage.Interface();	//界面
	return 0;
}

⌨️ 快捷键说明

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