Visual C++ .NET - Me pueden ayudar con este programa?

 
Vista:

Me pueden ayudar con este programa?

Publicado por jorge (1 intervención) el 09/11/2012 06:41:43
Un programa en C++ que permita registrar a los contactos de una agenda electrónica
Se debe:
• Crear y cargar a los contactos en una estructura
• Mostrar los detalles de todos los contactos

Consideraciones
• Debe desarrollar la aplicación haciendo uso de funciones, estructuras, arreglos, archivos
• No se conoce la cantidad de contactos a registrar, cada uno de ellos incluye al menos:
o Un ID consecutivo y autogenerado
o Nombre completo
o Fecha de alta como contacto
o Organización
o Puesto
o No teléfono
o Cuenta de correo


• El ID no se pide por teclado, debe ser un número único, un consecutivo generado por el mismo programa o por medio de algún algoritmo que desarrollen de manera que no debe de existir mas de 1 contacto con el mismo ID.

Desarrollo
• La empresa X requiere llevar el control de clientes a los que se le vende mercancía, para ello se requiere un programa en C++ donde se registre cada uno de ellos con sus datos generales así como

• El programa debe permitir registrar un contacto nuevo en cualquier momento de manera que es necesario el manejo de archivos para almacenar los contactos ya registrados previamente así como agregar los nuevos

• Cada vez que se ejecute el sistema debe cargarse la información (agenda) ya almacenados en disco de manera que puedan agregarse contactos nuevos a la empresa además de permitir la modificación de datos de alguno de ellos que haya sido registrado previamente

• Permitir eliminar un contacto

• Permitir a la administración generar un listado de contactos registrados mostrándolos ordenadamente de acuerdo a la necesidad del usuario ya sea por
o ID (clave)
o Nombre
o Apellido
o No teléfono
o Lugar de nacimiento
o Cuenta de correo
o (agregar las que consideres necesarias)

• Realizar una búsqueda directa de algún contacto en especial y sea mostrado en la pantalla ya sea que se busque por
o ID (clave)
o Nombre
o Apellido
o Cuenta de Correo
o No de teléfono
o (agregar las que consideres necesarias)

• Generar un reporte que muestre en pantalla la información de contactos, este reporte debe hacer cortes por el Organización; Ej.


Organización: Empresa X
ID Nombre completo Fecha Alta Teléfono Cuenta de correo


Organización: Empresa Y
ID Nombre completo Fecha Alta Teléfono Cuenta de correo


Organización: Empresa Z
ID Nombre completo Fecha Alta Teléfono Cuenta de correo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Programa de agenda electrónica con funcionalidades de registro, búsqueda y generación de informes

Publicado por Alejandro (265 intervenciones) el 13/02/2024 17:36:29
Claro, Jorge, puedo ayudarte a estructurar el programa en C++ para la agenda electrónica con las funcionalidades que has mencionado. Aquí tienes un ejemplo de cómo podrías implementarlo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
 
using namespace std;
 
struct Contacto {
    int id;
    string nombreCompleto;
    string fechaAlta;
    string organizacion;
    string puesto;
    string telefono;
    string correo;
};
 
// Funciones prototipo
void agregarContacto(vector<Contacto>& agenda);
void mostrarContactos(const vector<Contacto>& agenda);
void ordenarContactos(vector<Contacto>& agenda, char opcion);
void buscarContacto(const vector<Contacto>& agenda, char opcion);
void eliminarContacto(vector<Contacto>& agenda, int id);
void generarReporte(const vector<Contacto>& agenda);
 
int main() {
    vector<Contacto> agenda;
 
    // Cargar contactos existentes desde el archivo
    ifstream archivo("agenda.dat", ios::binary);
    if (archivo) {
        while (true) {
            Contacto contacto;
            archivo.read(reinterpret_cast<char*>(&contacto), sizeof(Contacto));
            if (archivo.eof()) {
                break;
            }
            agenda.push_back(contacto);
        }
        archivo.close();
    }
 
    char opcion;
    do {
        cout << "\n===== Agenda electrónica =====\n";
        cout << "1. Agregar contacto\n";
        cout << "2. Mostrar contactos\n";
        cout << "3. Ordenar contactos\n";
        cout << "4. Buscar contacto\n";
        cout << "5. Eliminar contacto\n";
        cout << "6. Generar reporte\n";
        cout << "0. Salir\n";
        cout << "Ingrese su opción: ";
        cin >> opcion;
 
        switch (opcion) {
            case '1':
                agregarContacto(agenda);
                break;
            case '2':
                mostrarContactos(agenda);
                break;
            case '3':
                cout << "Ordenar por:\n";
                cout << "a. ID\n";
                cout << "b. Nombre\n";
                cout << "c. Teléfono\n";
                cout << "Seleccione una opción: ";
                cin >> opcion;
                ordenarContactos(agenda, opcion);
                break;
            case '4':
                cout << "Buscar por:\n";
                cout << "a. ID\n";
                cout << "b. Nombre\n";
                cout << "c. Teléfono\n";
                cout << "Seleccione una opción: ";
                cin >> opcion;
                buscarContacto(agenda, opcion);
                break;
            case '5':
                int idEliminar;
                cout << "Ingrese el ID del contacto a eliminar: ";
                cin >> idEliminar;
                eliminarContacto(agenda, idEliminar);
                break;
            case '6':
                generarReporte(agenda);
                break;
            case '0':
                break;
            default:
                cout << "Opción no válida. Intente de nuevo.\n";
        }
    } while (opcion != '0');
 
    // Guardar contactos en el archivo antes de salir
    ofstream archivoSalida("agenda.dat", ios::binary);
    for (const auto& contacto : agenda) {
        archivoSalida.write(reinterpret_cast<const char*>(&contacto), sizeof(Contacto));
    }
    archivoSalida.close();
 
    return 0;
}
 
void agregarContacto(vector<Contacto>& agenda) {
    Contacto nuevoContacto;
    nuevoContacto.id = agenda.empty() ? 1 : agenda.back().id + 1;
 
    cout << "Nombre completo: ";
    cin.ignore();
    getline(cin, nuevoContacto.nombreCompleto);
    cout << "Fecha de alta: ";
    getline(cin, nuevoContacto.fechaAlta);
    cout << "Organización: ";
    getline(cin, nuevoContacto.organizacion);
    cout << "Puesto: ";
    getline(cin, nuevoContacto.puesto);
    cout << "Teléfono: ";
    getline(cin, nuevoContacto.telefono);
    cout << "Correo: ";
    getline(cin, nuevoContacto.correo);
 
    agenda.push_back(nuevoContacto);
    cout << "Contacto agregado exitosamente.\n";
}
 
void mostrarContactos(const vector<Contacto>& agenda) {
    cout << "\n===== Contactos registrados =====\n";
    for (const auto& contacto : agenda) {
        cout << "ID: " << contacto.id << "\n";
        cout << "Nombre: " << contacto.nombreCompleto << "\n";
        cout << "Fecha de alta: " << contacto.fechaAlta << "\n";
        cout << "Organización: " << contacto.organizacion << "\n";
        cout << "Puesto: " << contacto.puesto << "\n";
        cout << "Teléfono: " << contacto.telefono << "\n";
        cout << "Correo: " << contacto.correo << "\n";
        cout << "--------------------------------\n";
    }
}
 
void ordenarContactos(vector<Contacto>& agenda, char opcion) {
    switch (opcion) {
        case 'a':
            sort(agenda.begin(), agenda.end(), [](const Contacto& a, const Contacto& b) {
                return a.id < b.id;
            });
            break;
        case 'b':
            sort(agenda.begin(), agenda.end(), [](const Contacto& a, const Contacto& b) {
                return a.nombreCompleto < b.nombreCompleto;
            });
            break;
        case 'c':
            sort(agenda.begin(), agenda.end(), [](const Contacto& a, const Contacto& b) {
                return a.telefono < b.telefono;
            });
            break;
        default:
            cout << "Opción no válida.\n";
            return;
    }
    cout << "Contactos ordenados correctamente.\n";
}
 
void buscarContacto(const vector<Contacto>& agenda, char opcion) {
    string criterio;
    cout << "Ingrese el criterio de búsqueda: ";
    cin.ignore();
    getline(cin, criterio);
 
    cout << "\n===== Resultados de búsqueda =====\n";
    for (const auto& contacto : agenda) {
        switch (opcion) {
            case 'a':
                if (to_string(contacto.id) == criterio) {
                    cout << "ID: " << contacto.id << "\n";
                    cout << "Nombre: " << contacto.nombreCompleto << "\n";
                    cout << "Fecha de alta: " << contacto.fechaAlta << "\n";
                    cout << "Organización: " << contacto.organizacion << "\n";
                    cout << "Puesto: " << contacto.puesto << "\n";
                    cout << "Teléfono: " << contacto.telefono << "\n";
                    cout << "Correo: " << contacto.correo << "\n";
                    cout << "--------------------------------\n";
                }
                break;
            case 'b':
                if (contacto.nombreCompleto.find(criterio) != string::npos) {
                    cout << "ID: " << contacto.id << "\n";
                    cout << "Nombre: " << contacto.nombreCompleto << "\n";
                    cout << "Fecha de alta: " << contacto.fechaAlta << "\n";
                    cout << "Organización: " << contacto.organizacion << "\n";
                    cout << "Puesto: " << contacto.puesto << "\n";
                    cout << "Teléfono: " << contacto.telefono << "\n";
                    cout << "Correo: " << contacto.correo << "\n";
                    cout << "--------------------------------\n";
                }
                break;
            case 'c':
                if (contacto.telefono.find(criterio) != string::npos) {
                    cout << "ID: " << contacto.id << "\n";
                    cout << "Nombre: " << contacto.nombreCompleto << "\n";
                    cout << "Fecha de alta: " << contacto.fechaAlta << "\n";
                    cout << "Organización: " << contacto.organizacion << "\n";
                    cout << "Puesto: " << contacto.puesto << "\n";
                    cout << "Teléfono: " << contacto.telefono << "\n";
                    cout << "Correo: " << contacto.correo << "\n";
                    cout << "--------------------------------\n";
                }
                break;
            default:
                cout << "Opción no válida.\n";
                return;
        }
    }
}
 
void eliminarContacto(vector<Contacto>& agenda, int id) {
    auto it = remove_if(agenda.begin(), agenda.end(), [id](const Contacto& contacto) {
        return contacto.id == id;
    });
 
    if (it != agenda.end()) {
        agenda.erase(it, agenda.end());
        cout << "Contacto eliminado correctamente.\n";
    } else {
        cout << "No se encontró ningún contacto con el ID proporcionado.\n";
    }
}
 
void generarReporte(const vector<Contacto>& agenda) {
    if (agenda.empty()) {
        cout << "No hay contactos para generar un reporte.\n";
        return;
    }
 
    // Ordenar la agenda por organización
    vector<string> organizaciones;
    for (const auto& contacto : agenda) {
        if (find(organizaciones.begin(), organizaciones.end(), contacto.organizacion) == organizaciones.end()) {
            organizaciones.push_back(contacto.organizacion);
        }
    }
 
    sort(organizaciones.begin(), organizaciones.end());
 
    // Imprimir reporte por organización
    for (const auto& org : organizaciones) {
        cout << "\nOrganización: " << org << "\n";
        cout << "ID\tNombre\tFecha alta\tTeléfono\tCorreo\n";
        for (const auto& contacto : agenda) {
            if (contacto.organizacion == org) {
                cout << contacto.id << "\t" << contacto.nombreCompleto << "\t" << contacto.fechaAlta << "\t"
                     << contacto.telefono << "\t" << contacto.correo << "\n";
            }
        }
    }
}

Este código crea una aplicación de agenda electrónica en C++ que permite agregar, mostrar, ordenar, buscar y eliminar contactos, así como generar un informe organizado por organización. Los contactos se almacenan en un archivo binario llamado "agenda.dat" para que persistan entre ejecuciones.

Ten en cuenta que este es un ejemplo básico y podría necesitar adaptarse según tus necesidades específicas y requerimientos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar