No tengo tiempo para inventarlo, así que encontré uno ya preparado para ti. Baidu sabe lo que hay dentro.
#include
#include
#include "address.h"
#include "addressList. h"
#include "addressBook.h"
usando el espacio de nombres std;
int main()
{
nueva libreta de direcciones; //Abrir libreta de direcciones
return 0;
}
ostream& operador<<(ostream& os, const RecordList& c_rl) p>
p>
{
RecordList::const_iterator it
RecordList::const_iterator it_end =c_rl.end(); for (it=c_rl .begin();it!=it_end; it++)
{
os << (*it)->nombre << '\n' << (*it)- >tel << '\n';
}
volver sistema operativo
}
istream& operador> > (istream& is, RecordList& rl)
{
Registro* rec
nombre de cadena
mientras (verdadero)
p>
{
//Tenga en cuenta que aquí se utiliza la función getline() global, no la función miembro de istream
//Number. se eliminará de istream El último delimitador,
// la función miembro de istream getline no
getline(is,name
if (name =); = ")
break;
rec = nuevo registro;
rec->name=nombre;
getline(is,rec - >tel );
rl.push_back(rec);
}
el retorno es
}
#include
#include
#include "addressBook.h"
usando el espacio de nombres std
Libro de direcciones::Libro de direcciones()
{
isModified = false
start()
}
AddressBook::~AddressBook()
{
}
//Función: muestra la pantalla de bienvenida e inicia el procesamiento de la interacción del usuario
void Libreta de direcciones::start()
{
cout<<"\n"
<<"\
t******************************\n"
<<"\t* Este es un *\n"
<<"\t* Programa de libreta de direcciones sencillo*\n"
<<"\t* Gestión sencilla de la libreta de direcciones*\n"
<<"\t* Bienvenido a la libreta de direcciones*\n"
<<"\t********************* ***** *************\n"
<<"\n";
handleMenu();
}
//Función: Muestra el menú de la libreta de direcciones y devuelve la opción seleccionada por el usuario
//Retorno: La opción seleccionada por el usuario es un carácter entre 1 -9
char Libreta de direcciones::menuSelect()
{
cout<<"\n"
<<"1. Mostrar registros\n"
<<"2. Consultar registros\n"
<<"3 Agregar registros\n"
<<"4. . Eliminar registros\n"
<<"5. Guardar registro\n"
<<"6. 7. Crear nuevo registro\n "
<<"8. Finalizar la operación\n"
<<"\nLos números de la izquierda corresponden a selecciones de funciones, seleccione 1 -8:";
elección de caracteres[2];
mientras(verdadero)
{
cin.getline(elección, 2);
if (choice[0]<'1' || Choice[0]>'8')
cout<<"\nError de entrada, vuelva a seleccionar 1-8 :";
else
romper;
}
volver elección[0];
}
//Función: Llama a la función de procesamiento correspondiente según el elemento seleccionado por el usuario
void AddressBook::handleMenu()
{
mientras(verdadero)
{
cambiar(menuSelect())
{
caso '1':
displayRecords();
romper;
caso '2':
queryRecord(); /p>
......
//Función: Imprime el encabezado utilizado para mostrar la información del registro
void AddressBook::dispTable()
{
}
//Función: Mostrar todos los registros en la libreta de direcciones
void AddressBook::displayRecords()
{
}
//Función: primero verifique si la libreta de direcciones se ha guardado y luego borre todos los registros en la libreta de direcciones actual
// Nota: Esta función anula la función en la clase base
void AddressBook::clear()
{
}
// Función: consultar el registro especificado
void AddressBook ::queryRecord()
{
//Función: Agregar nuevos registros a la libreta de direcciones actual
//Nota: esta función sobrecarga la función en la clase base
void AddressBook: :addRecord()
{
}
/*
//Nota: Si usa la clase de cadena, el efecto ser mejor.
El siguiente es el código del programa para implementar esta función:
while(true)
{
//Ingrese nuevo registro
cadena nombre;
cout<<"Nombre:";
getline(cin,nombre);//Si el nombre ingresado es "0", finalice. agregando operaciones de grabación
if(name=="0")
break
Record* rec=new Record
rec; ->nombre=nombre;
cout<<"Teléfono:";
getline(cin,rec->tel
//Agregar nuevo registro; Agregar a la lista vinculada
AddressList::addRecord(rec);
}
//De manera similar, el juicio en la siguiente función miembro removeRecord() puede ser utilizado Las siguientes alternativas:
string str
getline(cin,str
while(true)
{ ); p >
if(str[0]!='1' && str[0]!='2')
{
cout<<"Error de entrada, volver a seleccionar 1-2: ";
getline(cin,str);
}
else
romper;
}
*/
//Función: eliminar el registro especificado de la libreta de direcciones actual
//Nota: esta función sobrecarga la clase base Funciones en
void AddressBook::removeRecord()
{
if(empty())
{
cout<<"La libreta de direcciones está vacía, ¡salga de la operación de eliminación!"< return } //Seleccione lo que desee; necesita Cómo eliminar registros cout<<"Puedes eliminar registros por nombre o número de teléfono\n" <<"1. Por nombre\n" <<"2. Por teléfono\n"; char elección[2]; cin.getline(choice,2); (verdadero) { if(elección[0]!='1' && elección[0]!='2') { p> cout<<"Error de entrada, vuelva a seleccionar 1-2:" cin.getline(choice,2 } ; else romper; } int type=static_cast if(type==1) cout<<"Ingrese su nombre:"< else cout<<"Ingrese el número de teléfono:"< char patrón[20] cin.getline(pattern,20); /p> int recuentoeliminado= 0; //Encontrar el registro coincidente Iterator it=findRecord(pattern,type,first()); while(it!=it_end) { cout<<"Se encontró un registro coincidente:\n" dispTable; (); cout<<(*it)->nombre<<"\t\t"<<(*it)->tel<<"\n"; >cout<<"¿Está seguro de que desea eliminar este registro? [Y/N]"; cin.getline(choice,2); //Eliminar este registro; if(elección[0]!='n' && elección[0]!='N') { it=AddressList::removeRecord (it); deletedCount++; } //Obtener un registro coincidente if(it!=it_end) deletedCount++; p> it=findRecord(pattern,type,++it); } cout<<"Un *** eliminado"< <<"Ahora hay"< if(deletedCount!=0) isModified=false; } //Función: guardar la libreta de direcciones en el archivo especificado //Nota: esta función sobrecarga las funciones en el clase base void AddressBook::saveRecords() { if(empty()) { cout<<"¡No hay registro para guardar!"< return; } //Por lo siguiente El programa usa member funciones de la clase de cadena, por lo que se requiere una conversión string fname; char name[16] cout<<"Por favor, ingrese el nombre del archivo para existir (presione Enter directamente para seleccionar el nombre del archivo): "; cin.getline(name,16); fname=name; if (fname.empty()) fname="sname"; ofstream of(fname.c_str(),ios_base::out if); (!of) { cout<<"¡No se puede guardar en el archivo! "< return; } AddressList::saveRecords(of); of.close(); cout< "< isModified=false; } //Función: leer registros del archivo especificado y agregarlos al final del archivo actual libreta de direcciones //Nota: esta función sobrecarga la función en la clase base void AddressBook::loadRecords() { } p> void AddressBook::quit() { } #ifndef H_ADDRESSBOOK_H_NNN # define H_ADDRESSBOOK_H_NNN p> #include "addressList.h" // Una clase orientada al usuario que maneja las operaciones de la libreta de direcciones, incluida la implementación de la interfaz de usuario y el usuario interacción para todas las funciones class AddressBook :public AddressList { protected: bool isModified //Si la libreta de direcciones tiene; ha sido modificado pero no guardado public: AddressBook(); virtual ~AddressBook() //Iniciar el usuario. operación de interfaz de la libreta de direcciones virtual void start(); //Función de procesamiento de menú virtual void handleMenu(); >//Mostrar registros virtual void displayRecords(); //Consultar registros virtual void queryRecord() / /Agregar registros virtual void addRecord() //Eliminar registros virtual void removeRecord() //Guardar registros virtual void saveRecords(); //Leer registros virtual void loadRecords() //Finalizar el programa. virtual void quit(); //Borrar la libreta de direcciones actual virtual void clear() protegido: //Función de selección de menú char menuSelect(); //Mostrar encabezado de tabla void dispTable(); > }; #endif //H_ADDRESSBOOK_HZ-NNN #include "addressList.h" AddressList::~AddressList() p> { recList.clear(); } //Función: Agregar un nuevo registro a la libreta de direcciones //Parámetro: rec, puntero al nuevo registro void AddressList::addRecord (Record* rec) { if (rec ! =NULL) { recList.push_back(rec) } } // Función: Eliminar un registro de la libreta de direcciones //Parámetro: apunta al iterador del registro que se va a eliminar //Nota: debe ser un iterador extraíble, que se puede obtener a través de findRecord() AddressList : :Iterator AddressList::removeRecord(AddressList::Iterator it) { return recList.erase(it); p >//Función: buscar un registro de la libreta de direcciones //Parámetro: patrón, el campo especificado del registro a encontrar es igual al patrón // tipo, 1 significa que desea El nombre del registro de búsqueda (nombre) es igual a patrón // 2 significa que el arco (tel) del registro a buscar es igual a (patrón) . // desde, busca registros coincidentes a partir de desde. //Retorno: si se encuentra, el iterador devuelto apunta al iterador del primer registro coincidente. //Si no se encuentra, el iterador devuelto es igual a pastEnd() return. valor. //Nota: from debe ser un iterador extraíble. // Puedes usar first() para la primera llamada y luego usar el valor de retorno del último findRecord() para aumentarlo en 1. // Hasta pastEnd( ) se devuelve, puede obtener todos los registros coincidentes. AddressList::Iterator AddressList::findRecord(patrón de cadena, tipo int,AddressList::Iterator from) { Iterator it; Iterador it_end=recList.end(); for (it=from; it!=it_end; it++) { if (( tipo==1 && (*it)->nombre==patrón)||(tipo==2 && (*it)->tel==patrón)) break } devolverlo } //Función: guardar la libreta de direcciones en el flujo de salida //Parámetros :os.El flujo de salida especificado void AddressList::saveRecords(ostream &os) { os << recList } //Función: leer datos del flujo de entrada y agregarlos al final de la libreta de direcciones actual //Parámetro: es, el flujo de entrada especificado //Retorno: el número de registros leídos int AddressList::loadRecords(istream &is) { int ori =size(); es >> recList tamaño de retorno()-ori } #ifndef H_ADDRESSLIST_H_AAA # define H_ADDRESSLIST_H_AAA #include #include #include "dirección.h" usando namespace std //La clase subyacente que maneja las operaciones de la libreta de direcciones, incluida la adición y eliminación de registros //Eliminación de registros, consulta de registros y almacenamiento y lectura de registros. //Esta clase no implica ninguna operación de interfaz de usuario clase AddressList { protegted: RecordList recList ;//Usar miembros de objeto como miembros de datos public: typedef RecordList::iterator Iterator //Agregar nuevos registros a la dirección; book virtual void addRecord(Record* rec); //Eliminar un registro de la libreta de direcciones virtual Iterator removeRecord(Iterator it); p> //Buscar un registro de la libreta de direcciones virtual Iterator findRecord(string patrón,int type,Iterator from //Guardar la libreta de direcciones en); flujo de salida virtual void saveRecords(ostream& os); //Leer datos del flujo de entrada y agregarlos; Ir al final de la libreta de direcciones actual virtual int loadRecords(istream& is virtual ~AddressList() //Obtener los registros almacenados. en la libreta de direcciones Número const int size() const {return (int)recList.size();} //Si la libreta de direcciones está vacía const bool vacío () const {return recList.empty();} //Borrar libreta de direcciones virtual void clear() {recList.clear();} //Obtener el primer registro de la libreta de direcciones Iterador primero(){return recList.begin();} //Obtener la iteración después de la libreta de direcciones excede el último registro Iterador pastEnd() {return recList.end();} } #endif //H_ADDRESSLIST_H_AAA