Escribir un programa de gestión de libreta de direcciones en lenguaje C
/*Libreta de direcciones personal*/
# include & ltstdio.h & gt
# include & ltstdlib.h & gt< / p>
# include & ltstring.h & gt
Datos de estructura b{
nombre char[8];
Número de teléfono de peaje[16] ;
teléfono móvil char[16];
Dirección de carácter[16];
Unidad de carga[16];
struct dataWab * nextPtr
};/*Estructura de autorreferencia, utilizada como estructura de datos de la libreta de direcciones*/
typedef struct dataWab DATAWAB
typedef DATAWAB * DATAWABPTR
void insertWab(DATAWABPTR*, char[], char[], char[], char[], char[] /*insertar función*/
menú vacío); wab(void) ;/*Función de menú*/
void print wab(DATAWABPTR);/*Función para imprimir todos los registros*/
void seekWab(DATAWABPTR, char[]) ;/*Función de búsqueda */
void deleteWab(DATAWABPTR, char[]); /*Función de eliminación*/
void modificarWab(DATAWABPTR, char[]); function*/
int test (DATAWABPTR); /*Función de prueba, prueba si hay un registro en la libreta de direcciones*/
void printone(DATAWABPTR); función de registro único*/
int control wab(void);/*Función de control de rama del programa*/
int main()
{
DATAWABPTR startPtr = NULL
DATAWABPTR tempPtr
FILE * fileWab
menú char /*variable de control de operación del menú*/
inserción de caracteres; /*insertar variable de control de confirmación */
nombre de modificación de caracteres[8] /*Almacenamiento de nombre temporal durante la búsqueda*/
nombre de eliminación de caracteres[8]; *Almacenamiento temporal del nombre durante la eliminación */
char tempName[8];/*Almacenamiento temporal del nombre*/
char phone[16];/*Almacenamiento temporal del teléfono*/ p>
char temp mobile[16];/*Almacenamiento temporal del teléfono móvil*/
char tempAddress[16];/*Almacenamiento temporal de direcciones*/
char tempUnit[ 16];/*Unidad de almacenamiento temporal*/
char seek name[8]; /*Almacenamiento de nombre temporal durante la búsqueda*/
If (! (fileWab=fopen("wab.dat","rb"))
Devuelve 0;
tempPtr = (DATAWABPTR)malloc(sizeof(data wab));
while(fread(tempPtr, sizeof(DATAWAB), 1, fileWab)==1){
tempPtr-& gt; nextPtr = startPtr
startPtr = tempPtr
te
mpPtr =(DATAWABPTR)malloc(tamañode(datos wab));
}
fclose(fileWab);
puts(" \ n \ n \ t \tBienvenido a la Libreta personal de direcciones 1.0 \n ");
menu wab();
menu = getch();
Y (menu!= ' 6'){
Cambiar (menú){
Caso "1":
imprimir wab(iniciar ptr);
Pausa ;
Caso "2":
while(controlWab()){
printf("\nBuscar nombre:\n# >);
scanf("%s ", buscarNombre);
seekWab(startPtr, buscar nombre
}
Romper;
p>Caso "3":
while(controlWab()){
puts(" \ nIngrese información personal\ n ");
printf(" nombre:");
scanf("%s ", tempName);
printf(" \ n teléfono:");
scanf ("%s ",teléfono temporal);
printf("\nteléfono móvil:");
scanf("%s",tempMobile);
printf("\n dirección:");
scanf("%s ",dirección temporal);
Printf("\nunit:");
p >scanf("%s ", unidad temporal);
Printf("Presione 1 \ n # > " para ingresar correctamente
insert = getch()); ;
if(insert=='1 ')
insertar wab(& startPtr, tempName, tempTelephone, tempMobile,
tempAddress, temp unit) ;
}
Pausa;
Caso "4":
mientras(controlWab()){
printf (" \ n eliminar nombre \ n # > ");
scanf("%s ", eliminar nombre
deleteWab(startPtr, eliminar nombre
);p>
}
Interrupción;
Caso "5":
mientras(controlWab()){
printf( " \ nModificar nombre\ n # > ");
scanf("%s ", modificar nombre);
modifyWab(startPtr, modificar nombre);
}
Pausa;
Valor predeterminado:
puts("\n\nError en la opción de entrada, vuelva a ingresar\n");
p>Pausa;
}
menú wab();
menú = getch();
}
p>
if((fileWab=fopen("wab.dat "," wb"))==NULL)
Devuelve 0;
mientras(iniciarPtr! =NULO){
fwrite(startPtr, sizeof(DATAWAB), 1, archivo wab
startPtr = startPtr-& gt; p>puts(" \ n \ n \ t \ tGracias por usar la Libreta personal de direcciones 1.0, adiós\ n "
}
Void menuWab(void) /*Menu función */
{
Puts ("\ t \ tMenú principal");
puts(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *);
puts(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *);
puts(" * * \t<<-1->;>Todos los registros\t\t
puts( " * * \ t<<-3->>Agregar registro\t\t
puts(" * * \t<<-5 ->;& gtModificar registro\t\t
puts(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *);
puts(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *);
puts(" \ nPor favor seleccione 1-6 ");
printf(" # >;));
}
void insert wab(DATAWABPTR * tempPtr, char temp2Nombre[], char temp2Teléfono[],
char temp2Mobile[], char temp2Address[], char temp2Unit[])
/*Insertar función* /
{
DATAWABPTR newPtr
new ptr =(DATAWABPTR)malloc(sizeof(data wab));
strcpy(new ptr-& gt; nombre, nombre temporal 2);
strcpy(nuevo ptr-& gt; teléfono, teléfono temporal 2);
strcpy(nuevo ptr-& gt; móvil, teléfono temporal 2);
strcpy(nuevo ptr -& gt; dirección, dirección temporal 2);
strcpy(nueva unidad ptr-& gt;, unidad temporal 2
nueva ptr-& gt;
* tempPtr = newPtr
}
voidprintwab(datawabptr print ptr)/ *Función de impresión*/
{
si (! (test(printPtr))){
printf(" \ n % 8s % 16s % 16s % 16s % 16s \ n ", "nombre", "teléfono", "teléfono móvil", "dirección" , "Empresa");
mientras(printPtr!=NULL){
p
rintf(" % 8s % 16s % 16s % 16s % 16s \ n ", imprimir ptr-> nombre, imprimir ptr-> teléfono,
imprimir ptr-> mover, imprimir ptr -> Dirección, imprimir ptr->Unidad);
print ptr = imprimir ptr->nextPtr
}
} p>
}
void seekWab(DATAWABPTR seekPtr, char tempName[])
/*Función de búsqueda*/
{
if (!( test(seekPtr))){
while(seekPtr!=NULL){
if (!(strcmp(tempName, buscar ptr-> nombre ))){
printone(seek ptr);
seekPtr = seekPtr-& gt; nextPtr
}
Otros
p>seekPtr = seekPtr-& gt; nextPtr
}
}
}
void eliminar wab(DATAWABPTR eliminar ptr, char eliminarNombre[ ])
/*Función de eliminación*/
{
DATAWABPTR tempPtr, forePtr
forePtr = eliminarPtr
tempPtr = eliminar ptr->nextPtr
while(tempPtr!=NULL){
if (!(strcmp(tempPtr->nombre, eliminarNombre))){ p>
Párrafo anterior->nextPtr = tempPtr->nextPtr
Gratis(tempPtr);
Descanso;
}
En caso contrario {
forePtr = tempPtr
tempPtr = tempPtr-& gt; nextPtr
}
}
}
void modificar web(DATAWABPTR modificar ptr, char modificarNombre[])
/*Modificar función*/
{
Si (! (test(modifyPtr))){
while(modifyPtr!=NULL){
if (!(strcmp(modifyName, modificar ptr-& gt; nombre))){
Printf("Ingrese un nuevo nombre:");
scanf("%s ", modifique ptr-& gt; nombre);
printf( " \nIngrese un nuevo número de teléfono: ");
scanf("%s ", modifique ptr-& gt; número de teléfono);
printf(" \nIngrese un nuevo número de teléfono: ");
scanf("%s ", modifique ptr-& gt; número de teléfono); nuevo número de teléfono Teléfono móvil: ");
scanf("%s ", modificar ptr-> móvil);
printf("\nPor favor, introduzca una nueva dirección:") ;
p>
scanf("%s ", modificar ptr-& gt; dirección);
printf("\nPor favor ingrese una nueva unidad:");
scanf( "%s ", modificar ptr-& gt; unidad);
Pausa;
}
Otro
modificar ptr = modificar ptr-& gt; nextPtr
}
}
}
int test(DATAWABPTR testPtr)
{
if(testPtr==NULL )
Puts("No hay ningún registro en la libreta de direcciones");
Otros
Devuelve 0
Devuelve 1;
}
Pase de impresión no válido (pase de impresión DATAWABPTR)
{
printf("\n % 8s % 16s % 16s % 16s % 16s \n ","Nombre","Teléfono","Teléfono móvil","Dirección","Empresa");
printf("%8s ",printone->Nombre);
printf("%16s ",printone->teléfono);
printf("%16s",printone->móvil);
printf ( "%16s ", printone-& gt; dirección
printf ("%16s\n ", printone-& gt; unidad);
int controlWab(void)
{
Puts("Por favor presione 1 para continuar");
if(getch()=='1 ' )
devuelve 1;
devuelve 0
}
Respuesta: Piénselo: Asistente de nivel 2 2-19 11:36
Déjame comentar> & gt
Evaluación de la respuesta del autor de la pregunta: Gracias ~ ~ Los comentarios se han cerrado y actualmente hay 1 comentario.
Bueno
100% (1) Malo
0% (0)
Contenido relacionado
Ayuda ! ¿Qué experto puede ayudarme a escribir una gestión de libreta de direcciones en lenguaje C? ...
Problema con la libreta de direcciones del 3110c
¿Copia de seguridad de la libreta de teléfonos del Sony Ericsson 510c?
Las capacidades de telefonía del 6120C no se pueden transferir al 6500C de ninguna manera.
Acerca de la visualización de nombres en la libreta de direcciones del Nokia 7310c~ ~ ~
Más preguntas sobre cómo escribir programas de gestión de libretas de direcciones en lenguaje C> & gt
Ver la misma pregunta: Domine el plan de gestión de la libreta de direcciones en lenguaje que salva vidas
Otras respuestas*** 4
Con pocos puntos y sin motivación, ¿quién puede escribir?
Entrevistado: 229273121 - Mago Entrenador Nivel 3 2-19 10:16.
Código del programa de mi libreta de direcciones C++
# include & ltiostream & gt
# include & ltstring& gt
# include & ltiomanip & gt
# include & ltlist& gt
# include & ltfstream & gt
# include & ltalgorithm& gt
#Espacio de definición" \ t\t\t "
Usar espacio de nombres std
Registro de estructura {
Nombre de cadena;
Teléfono de cadena
Público:
Amigos y operadores de Oyster & lt(ostream & Operadores, registro const * registro) {
return os<<rec->Nombre<<SPACE<<rec->Teléfono<<endl
};
Equipo de amigos&Operador>& gt(istream & amp sí, grabar * grabar) {
is & gt& gtrec-& gt; & gt& gtrec-& gt; número de teléfono;
El retorno es;
}
comp. bool estático (patten de cadena, tipo int, Registro *rec) {
switch(type){ p>
Caso 0: { return rec-& gt; name == patten} roto
Caso 1: { return rec; -& gt; tel == patten} roto
}
Devuelve falso
}
Valor booleano estático isvan(Registro * rec){
return(rec-> ;name == " " && amprec-& gt;tel == " ");
}
} ;
Lista de registros de clase: lista pública <Record*>
{
Público:
Oyster Friends & Operadores <& lt(ostream &Operators , lista de registros constante y.
c_rl){
lista de registros::const _ iterator it = c _ rl begin();
Y (it! = c_rl.end()){
os & lt& lt* it
it++;
}
Volver a SO;
}
Equipo de amigos&operador>>(istream&recordlist&rl){
lista de registros::const_iterator it;
mientras (!is.eof( )){
Grabar * prec = nuevo registro;
is & gt& gtprec
if(Record::isvan(prec))continue;
rl.list<Record*>*Pushback; p>
}
El retorno es;
}
void clear();
Borrar iterador (posición del iterador);
~RecordList(){
Esto->clear()
}
};
void RecordList::clear(){
lista de registros::const _ iterator it = this- >begin();
And (it!= this->end ()){
Eliminar(* it);
it++ ;
}
Esta->lista<record*>* borrar ();
}
lista de registros ::lista de registros del iterador::borrar(posición del iterador){
eliminar(*pos);
lista de retorno <record*>*erase(pos) ;
}
Lista de direcciones de categoría {
Protegido:
Registro list recList
Público:
typedef RecordList::iterator iterator;
//Buscar registros de la libreta de direcciones
Iterador virtual findRecord (patrón de cadena, tipo int, Iterador de) ;
Virtual void add Record(Record * rec);
Virtual void removeRecord(Iterator it);
Virtual void editRecord(Record* rec, Iterator it);
Registros virtuales de guardado de void (ostream y ampOS);
Registros virtuales de carga de void (istream y ampOS);
Virtual void agregar registros( istream & amp;
virtual ~ lista de direcciones();
const int size()const { return(int)reclist . size(); }
const void clear(){ reclist . clear();}
Iterador comenzar(){ return reclist();}
Fin del iterador. (){ return reclist . end();}
};
lista de direcciones::Lista de direcciones del iterador::buscar registro(patrón de cadena
, tipo int, Iterador de){
Iterador;
it = de
Y (it!=recList.end()){ p >
if(Record::comp(patten, tipo, *it)){
Return;
}
it++;
p>
}
Regresar;
}
anular lista de direcciones::añadir registro(Registro * rec){
reclist . push _ back(rec);
}
anular lista de direcciones::eliminar registro(Iterator it){
erase(. it) ;
}
anular lista de direcciones::edit Record(Record * rec, Iterator it){
Eliminar (* it);
* it = rec
}
anular lista de direcciones::guardar registro(ostream & ampos){
os & lt& lthermit; p >
}
anular lista de direcciones::cargar registros(istream & is){
is & gt& gthermit;
} p>
anular lista de direcciones::add records(istream & amp; yes){
}
Lista de direcciones::~address list(){
reclist . clear();
}
Categoría libreta de direcciones: lista de direcciones públicas {
Protegido:
Modificación booleana // ¿Se ha modificado la libreta de direcciones y no se ha guardado?
Público:
Libreta de direcciones();
Virtual ~ libreta de direcciones();
//Iniciar la interfaz de usuario del la libreta de direcciones funciona.
Virtual void start();
//Operación de la interfaz de usuario del administrador de funciones de procesamiento de menú
menú virtual de manejo de void();
//Mostrar registros
Registros de visualización de anulación virtual();
//Registros de consulta
Registro de consulta de anulación virtual();
//Agregar registros
Virtual void addRecord();
//Guardar registros
Virtual void guardar registros();
//Leer registros
Registros de carga de vacío virtual();
//Finalizar programa
Salir de vacío virtual();
/ /Borrar la información del registro actual
Virtual void clear();
Protegido:
//Función de selección de menú
char menu lect ();
//Título mostrado
void dispTable();
};
Libreta de direcciones::Libreta de direcciones () {
}
libreta de direcciones::~ libreta de direcciones(){;}
char Libreta de direcciones::menuSelect(){
char a = 0;
CIN & gt;& gta;
if(a = = ' Y ' | | a = = ' Y '){ a = ' 1 '; }
if(a = = ' N ' | | a = = ' N '){ a = ' 2 ';}
Devuelve a;
}
void book de direcciones::start(){
cout & lt& lt" \ n \ t * * * *Bienvenido al programa de gestión de libreta de direcciones* * * * " ;
manejar menú();
}
void AddressBook::handleMenu(){
cout & lt& lt”\ n \ n\t\t\t-Administración de menús-\n\n";
cout & lt& lt" \taAgregar registro\n "
& lt& lt" \ TF - Buscar record\n "
& lt& lt" \ TD - Mostrar registro \ n "
& lt& lt" \ TL - Cargar registro)\n Desde texto o flujo de entrada estándar \ n "
& lt& lt" \ TC-Borrar información del registro actual\n "
& lt& lt" ts-Guardar registro\ n "
& lt<" \tq-exit\n";
switch(menuSelect()){
Caso "A":
Caso "a": agregar registro() ; romper;
Caso "F":
Caso "f": consultar registro();
Caso "D":
Caso "d": mostrar registros(); romper
Caso "L":
Caso "l": cargar registros();
Caso "C":
caso "c":clear(); romper;
Caso:
caso:guardar registros( ); ;
Caso "Q":
caso ' q ':salir();
andle menu();
}
anular libreta de direcciones::mostrar registros(){
cout & lt& lt"nombre"
lista de direcciones::guardar registros(cout);
cout & lt& lt"buscar un * * *"
cout & lt& lt" 1 " & lt;& ltSPACE & lt& lt"return"
cout & lt& lt" 2 " & lt& ltSPACE & lt& lt"modify"
cout & lt& lt" 3 " & lt& ltSPACE & lt& lt"delete"
Cambiar(menuSelect()){
Caso "1":break;
Caso '2':
Si (! size()){
cout & lt& lt"El registro es 0 y no se puede modificar."& lt& ltendl
Break
}
cout & lt& lt"¿Cuál deseas modificar?"& lt& lt" 1 ~ " & lt;& ltsize()& lt;& ltendl
int I;
cin>>i;
if (i<1 | | i>size()){
break;
} p>
Registro * prec = nuevo registro;
cout<<"name:"
CIN>>prec
Iterador it = reclist .begin();
Y (I!=1){
it++;
I-;
}
editRecord(prec, it );
}Roto;
Caso '3':
if (!size()){
cout & lt& lt "El registro es 0 y no se puede modificar.
"& lt& ltendl
break;
}
cout & lt& lt"¿Cuál quieres eliminar? "& lt& lt" 1 ~ " & lt; & ltsize()& lt; & ltendl
int I;
CIN & gt; p>if(i<1||I> size()){
break;
}
Iterador it = reclist.begin( );
Y (I!= 1){
it++;
I-;
}
eliminar registro(it);
}Roto;
}
}
void AddressBook::addRecord(){ p>
Nombre de cadena, número de teléfono;
cout & lt& lt" \nIngrese nombre: ";
CIN & gt;& gtName;
cout<<"Ingrese número de teléfono:";
CIN>>Phone;
Registro * temp = nuevo registro;
temp ->;nombre=nombre;
temp->;teléfono=teléfono;
lista de direcciones::añadir registro(temp);
cout & lt& lt "Si continuar (sí/no)"
switch(menuSelect()) {
caso "1": addRecord(); romper
caso" 2": romper;
}
}
libreta de direcciones vacía::queryRecord(){
cout & lt& lt" 1 " & lt;& ltSPACE & lt& lt"Buscar por nombre"
cout & lt& lt" 2 " & lt& ltSPACE & lt& lt"Buscar por teléfono"
int type =- 1;
Modo de cadena;
Cambiar(menúSeleccionar ()){
Caso '1':
tipo = 0
cout & lt& lt"Ingrese un nombre"
CIN & gt;& gtPatten;
}Roto;
Caso '2':
tipo = 1;
cout & lt& lt"Ingrese su número de teléfono"
CIN & gt;& gtPatten;
}Roto;
}
Iterarlo = comenzar();
Lista<Iterator>Li;
p>cout & lt& lt"nombre"
mientras((it=findRecord(patten, tipo, it) )! =end()){
cout & lt& lt* it
李. push _ back(it);
it++;
}
cout & lt& lt"Encontré un * * *"
cout & lt& lt" 1 " & lt;& ltSPACE & lt& lt"Regresar"
cout & lt& lt" 2 " & lt& ltSPACE & lt& lt"Modificar"
cout & lt& lt" 3 " & lt& ltSPACE & lt& lt"Eliminar"
Cambiar ( menú
Seleccionar()){
Caso "1":romper;
Caso '2':
Si (!li.size()){ p>
p>
cout & lt& lt"El registro es 0 y no se puede modificar."& lt& ltendl
Roto;
}
cout & lt& lt" ¿Cuál deseas modificar? "& lt& lt" 1 ~ " & lt;& ltLi size()& lt;& ltendl
int I;
CIN & gt;& gti;
Registro * prec = nuevo registro;
cout & lt& lt"Nombre:"
CIN>& gtprec
Lista<Iterator>* const _ iterator it = Li . p>I-;
}
editRecord(prec, *it);
}Roto;
Caso '3':
If (!li.size()){
cout & lt& lt"El registro es 0 y no se puede modificar."& lt& ltendl
Romper ;
}
cout & lt& lt"¿Cuál desea eliminar?"& lt& lt" 1 ~ " & lt;& ltLi tamaño()& lt;&. ltendl
int I;
CIN>>I;
Lista<Iterator>* const _ iterator it = Li comenzar();
p>it++;
I-;
}
eliminar registro( * it);
}Roto;
}
}
libreta de direcciones vacía::guardar registros(){
cout & lt& lt" 1 " & lt;& ltSPACE & lt& lt"Usar el nombre de archivo predeterminado."& lt& ltendl
cout & lt& lt" 2 " & lt& ltSPACE & lt& lt" Usar archivo personalizado nombres.
"& lt& ltendl
cout & lt& lt" 3 " & lt& ltSPACE & lt& lt"Return"
Switch(menuSelect()){
Caso' 1 ':
archivo ofstream ("predeterminado", IOs::app);
AddressList::saveRecords(archivo
archivo); ;
}Roto;
Caso '2':
cout & lt& lt"Ingrese el nombre del archivo que definió:"
String fname
CIN & gt;& gtfname
archivo de flujo (fname.c_str(), IOs::app);
AddressList::saveRecords ( Archivo);
archivo . close();
}Romper
Caso "3": romper
}
p>}
void book de direcciones::loadRecords(){
cout & lt& lt" 1 " & lt;& ltspace& lt& lt"Usar archivo predeterminado. "& lt& ltendl
cout & lt& lt" 2 "& lt& ltspace& lt& lt"Usar archivos personalizados.
"& lt& ltendl
cout & lt& lt" 3 " & lt& ltSPACE & lt& lt"Return"
Switch(menuSelect()){
Caso' 1 ':
cout & lt& lt" 1 " & lt;& ltSPACE & lt& lt"Sobrescribir contenido actual"
cout & lt& lt" 2 " & lt& ltSPACE & lt& lt "Agregar al archivo actual"
Switch(menuSelect()){
Caso "1":
lista de direcciones::clear();Break;
Caso "2":break;
}
archivo ifstream ("predeterminado");
AddressList::loadRecords(archivo) ;
archivo . close();
}Roto;
Caso '2':
cout & lt& lt"Por favor, ingrese Un nombre de archivo: "
String fname
CIN & gt; & gtfname
ifstream file(fname . c _ str());
AddressList::loadRecords(archivo);
archivo close();
}Break;
Caso "3":break;< / p>
}
}
void book de direcciones::clear(){
cout & lt& lt"Quieres borrar tu memoria Todo el contenido ? (S/N)" & lt;& ltendl
switch(menuSelect()){
case "1": lista de direcciones::clear(); break;
Caso "2":romper;
}
}
anular la libreta de direcciones::quit(){
cout & lt& lt"¿Quieres guardar el archivo? (Y/N)" & lt;& ltendl
switch(menuSelect()){
Caso "1": guardar registros(); romper;
Caso "2": romper;
}
Salir (0);
}
int main(int argc, char); *argv[])
{
Libreta de direcciones a;
a .start();
Sistema ("pausa"). ;
Regresar SALIDA _ ÉXITO
}