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

📄 12346.cpp

📁 用户信息管理, 用户信息管理
💻 CPP
字号:
// 12346.cpp : Defines the entry point for the application.
//


#include <iostream> 
#include <string> 
#include "address.h" 
#include "addressList.h" 
#include "addressBook.h" 
using namespace std; 
int main() 
{ 
new AddressBook; //开启通信录 
return 0; 
} 
ostream& operator<<(ostream& os, const RecordList& c_rl) 
{ 
RecordList::const_iterator it; 
RecordList::const_iterator it_end =c_rl.end(); 
for (it=c_rl.begin();it!=it_end; it++) 
{ 
os << (*it)->name << '\n' << (*it)->tel << '\n'; 
} 
return os; 
} 
istream& operator>> (istream& is, RecordList& rl) 
{ 
Record* rec; 
string name; 
while (true) 
{ 

//注意这里使用的是全局的getline()函数,而不是istream的成员函 
//数.全局的getling()函数将从istream中取出最后一个分隔符, 
//而istream的成员函数getline则不会 
getline(is,name); 
if (name =="") 
break; 
rec = new Record; 
rec->name=name; 
getline(is,rec->tel ); 
rl.push_back(rec); 
} 
return is; 
} 



#include<stdlib.h> 
#include<fstream> 
#include "addressBook.h" 

using namespace std; 

AddressBook::AddressBook() 
{ 
isModified = false; 
start(); 
} 

AddressBook::~AddressBook() 
{ 
} 

//功能:显示欢迎画面,并开始进行用户交互处理 
void AddressBook::start() 
{ 
cout<<"\n" 
<<"\t******************************\n" 
<<"\t* 这是一个 *\n" 
<<"\t* 简单的通信录程序 *\n" 
<<"\t* 可以对通信录进行简单管理 *\n" 
<<"\t* 欢迎使用通信录 *\n" 
<<"\t******************************\n" 
<<"\n"; 
handleMenu(); 
} 

//功能:显示通信录菜单,返回用户选择的选项 
//返回:用户选择的选项,是1-9之间的一个字符 

char AddressBook::menuSelect() 
{ 
cout<<"\n" 
<<"1.显示记录\n" 
<<"2.查询记录\n" 
<<"3.增加记录\n" 
<<"4.删除记录\n" 
<<"5.保存记录\n" 
<<"6.读取记录\n" 
<<"7.新建记录\n" 
<<"8.结束运行\n" 
<<"\n左边数字对应功能选择,请选1-8:"; 
char choice[2]; 
while(true) 
{ 
cin.getline(choice,2); 
if(choice[0]<'1' || choice[0]>'8') 
cout<<"\n输入错误,重选1-8:"; 
else 
break; 
} 
return choice[0]; 
} 

//功能:根据用户选择的项目调用相应的处理函数 
void AddressBook::handleMenu() 
{ 
while(true) 
{ 
switch(menuSelect()) 
{ 
case '1': 
displayRecords(); 
break; 
case '2': 
queryRecord(); 
break; 
....... 


//功能:打印用于显示记录信息时的表头 
void AddressBook::dispTable() 
{ 

} 

//功能:显示通信录中的所有记录 
void AddressBook::displayRecords() 
{ 

} 

//功能:首先检查通信录是否已保存,然后清空当前通信录中所有记录 
//注意:该函数覆盖了基类中的函数 
void AddressBook::clear() 
{ 

} 
//功能:查询指定记录 
void AddressBook::queryRecord() 
{ 


//功能:向当前通信录追加新的记录 
//注意:该函数重载了基类中的函数 
void AddressBook::addRecord() 
{ 

} 

/* 

//说明:如果使用string 类,效果更好。下面是实现本功能的程序代码: 
while(true) 
{ 
//输入新记录 
string name; 
cout<<"姓名:"; 
getline(cin,name); 
//如果输入的姓名为“0”,则结束添加记录的操作 
if(name=="0") 
break; 
Record* rec=new Record; 
rec->name=name; 
cout<<"电话:"; 
getline(cin,rec->tel); 
//将新记录加入链表 
AddressList::addRecord(rec); 
} 

//同理,下面的成员函数removeRecord()中的判断,可以使用如下替代方法: 
string str; 
getline(cin,str); 
while(true) 
{ 
if(str[0]!='1' && str[0]!='2') 
{ 
cout<<"输入错误,重选1-2:"; 
getline(cin,str); 
} 
else 
break; 
} 



*/ 

//功能:从当前通信录移除指定的记录 
//注意:该函数重载了基类中的函数 
void AddressBook::removeRecord() 
{ 
if(empty()) 
{ 
cout<<"通信录已空,退出删除操作!"<<endl; 
return; 
} 
//选择获取需要删除的记录的方式 
cout<<"可以通过姓名或电话删除记录\n" 
<<"1.通过姓名\n" 
<<"2.通过电话\n"; 
char choice[2]; 
cin.getline(choice,2); 
while(true) 
{ 
if(choice[0]!='1' && choice[0]!='2') 
{ 
cout<<"输入错误,重选1-2:"; 
cin.getline(choice,2); 
} 
else 
break; 
} 
int type=static_cast<int>(choice[0])-48; 
//输入需要匹配的字符串 
if(type==1) 
cout<<"请输入姓名:"<<flush; 
else 
cout<<"请输入电话:"<<flush; 
char pattern[20]; 
cin.getline(pattern,20); 
int deletedCount=0; 
//找到匹配的记录 
Iterator it=findRecord(pattern,type,first()); 
Iterator it_end=pastEnd(); 
while(it!=it_end) 
{ 
cout<<"找到一条匹配的记录:\n"; 
dispTable(); 
cout<<(*it)->name<<"\t\t"<<(*it)->tel<<"\n"; 
cout<<"确定要删除这条记录吗?[Y/N]"; 
cin.getline(choice,2); 
//删除这条记录 
if(choice[0]!='n' && choice[0]!='N') 
{ 
it=AddressList::removeRecord(it); 
deletedCount++; 
} 
//取下一条匹配的记录 
if(it!=it_end) 
it=findRecord(pattern,type,++it); 
} 
cout<<"一共删除了"<<deletedCount<<"条记录\n" 
<<"现在还有"<<size()<<"条记录"<<endl; 
if(deletedCount!=0) 
isModified=false; 
} 

//功能:将通信录保存至指定文件 
//注意:该函数重载了基类中的函数 
void AddressBook::saveRecords() 
{ 
if(empty()) 
{ 
cout<<"没有记录可存!"<<endl; 
return; 
} 
//因为下面的程序中使用string类的成员函数,所以需要进行一次转换 
string fname; 
char name[16]; 
cout<<"请输入要存在的文件名(直接回车选择文件sname):"; 
cin.getline(name,16); 
fname=name; 
if(fname.empty()) 
fname="sname"; 
ofstream of(fname.c_str(),ios_base::out); 
if(!of) 
{ 
cout<<"不能存入文件!"<<endl; 
return; 
} 
AddressList::saveRecords(of); 
of.close(); 
cout<<size()<<"条记录已经存入文件,请继续操作。"<<endl; 
isModified=false; 
} 
//功能:从指定文件读取记录追加到当前通信录末尾 
//注意:该函数重载了基类中的函数 
void AddressBook::loadRecords() 
{ 

}


⌨️ 快捷键说明

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