📄 manage.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 + -