Pídale ayuda a un experto en lenguaje C con algunas preguntas sobre programación en C

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>

{

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)

{

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')

{

cout<<"Error de entrada, vuelva a seleccionar 1-2:"

cin.getline(choice,2

}

; else

romper;

}

int type=static_cast(choice[0])-48; Cadena de entrada que debe coincidir

if(type==1)

cout<<"Ingrese su nombre:"<

else

p >

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()

{

}

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()

{

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();

p>

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