Dev - C++ - Ayuda con c++

 
Vista:

Ayuda con c++

Publicado por yohan (1 intervención) el 17/05/2022 17:49:54
Alguien me puede ayudar, no soy muy bueno c++ y este es un trabajo de la universidad


Crear programa en C++ que permita registrar un catálogo de cuentas contables, dicho programa deberá
permitir:
1. Adicionar
2. Modificar
3. Listar
4. Consulta
Cuentas contables, las mismas se deberán registrar en un archivo binario, la estructura que representa
una cuenta contable es como sigue:
Estructura Cuenta
Cta_codigo char[20]
Cta_nombre cahr[80]
Cta_origen unsigned short int ( 1-Debito, 2-Credito)
Cta_es_control char (S-Si, N-No)
Cta_permite_saldo_negativo char (S-Si, N-No)
Cta_padre_codigo char[20]
Cta_saldo double
Requisitos que debe cumplir antes de registrar o modificar una cuenta.
1) El campo código solo puede estar compuesto de dígitos [0..9] y el carácter punto[.], el
carácter punto nunca debe estar al inicio ni al final, tampoco se permite más de un carácter
punto consecutivo.
Ejemplo
Cta_codigo correcta: 1.1.1.112 incorrecta: .1..1111
2) El dominio de valore del campo cta_origen es: [1, 2] donde 1->Debito, 2->crédito.
3) El campo cta_es_control solo admite un carácter S o N, donde S-Es cuenta Control, N-No es
cuenta control.
4) El campo Cta_permite_saldo_negativo solo admite un carácter S o N, donde S-Si, N-No
5) El campo Cta_padre_cogido puede admitir valores nulos, pero si coloca un valor diferente
de nulo entonces el programa debe verificar que exista una cuenta activa previamente
registrada y dicha cuenta debe ser tipo control.
6) El campo Cta_permite_saldo_negativo solo admite un carácter S o N, donde S-Si, N-No
7) El campo cta_saldo solo admite valores negativos si el valor del campo
Cta_permite_saldo_negativo es igual a S.
Formato Pantalla para la
Adicionar Cuenta
---------------------------------
Cuenta: 1.1.2.3
Nombre: Cuenta ahorro banco XXXX
Origen (1-Debito, 2-Credito) : 1
Es Cuenta Control: S
Permite Saldo negativo: N
Cuenta Padre: 1.1.2
Saldo: 0 ( Si esta adicionando una cuenta el valor del saldo es cero y no debe ser introducido )
Modificar
Cuenta: 1.1.2.3
Luego de pulsar enter debe verificar si la cuenta introducida esta registrada,
Si NO está registrada el programa mostrara el mensaje:
“Cuenta no registrada”, la operación de modificar filiara.
Si la cuenta se encuentra registrada el programa desplegara los datos de la cuenta y luego procede a
aceptar los nuevos valores
Datos Actuales:
----------------------
Nombre: Cuenta ahorro banco XXXX
Origen (1-Debito, 2-Credito) : 1
Es Cuenta Control: S
Permite Saldo negativo: N
Cuenta Padre: 1.1.2
Saldo: 0

Nuevos Datos
Nombre: Cuenta ahorro banco XXXX
Origen (1-Debito, 2-Credito) : 1
Es Cuenta Control: S
Permite Saldo negativo: N
Cuenta Padre: 1.1.2
Saldo: 0 ( Si esta adicionando una cuenta el valor del saldo es cero y no debe ser introducido )
Luego de introducir los datos el sistema debe actualizar el registro con los datos nuevos.
Listar
Relación de Cuetantas
Codigo nombre saldo
------------------------------------------------------
X XXXXXXXX 99999999999
X.X XXXXXXXX 99999999999
X.X.X XXXXXXXX 99999999999
X.X.X.XX XXXXXXXX 99999999999
------------------------------------------------------
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
-1
Responder
Imágen de perfil de Alfil
Val: 4.344
Oro
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Ayuda con c++

Publicado por Alfil (1444 intervenciones) el 19/05/2022 19:59:55
Te pongo un poco la parte más compleja y la estructura del programa, basándote en esto, no deberías tener problemas para completas el resto del programa.


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
#include <iostream>
#include <fstream>
#include <string.h>
#include <cctype>
 
struct Cuenta
{
    char codigo[20];
    char nombre[80];
    unsigned short int origen;  //1.- Debito / 2.- Credito
    char EsControl;             // S/N
    char SaldoNegativo;         // S/N
    char codigoPadre[20];
    double saldo;
};
 
void menu();
 
void adicionar(const char* file);
void listar(const char* file);
 
bool verificarCuenta(const char* cuenta);
bool buscarPadre(const char* file, const char* cuenta);
 
int main()
{
    char file[] = "Cuentas.dat";
    std::ofstream fs(file, std::ios::out | std::ios::app | std::ios::binary);
 
    if (fs.fail())
        std::cout << std::endl << "ARCHIVO " << file << " NO ENCONTRADO" << std::endl;
 
    fs.close();
 
    char opcion;
 
    do {
        menu();
        std::cin >> opcion;
        std::cout << std::endl;
 
        switch (opcion)
        {
            case '1':
                adicionar(file);
                break;
 
            case '2':
                break;
 
            case '3':
                listar(file);
                break;
 
            case '4':
                break;
 
            case '5':
                std::cout << "FIN DEL PROGRAMA" << std::endl << std::endl;
                break;
 
            default:
                std::cout << "OPCION NO VALIDA" << std::endl << std::endl;
                break;
        }
 
    } while (opcion != '5');
 
    return 0;
}
 
void menu()
{
    std::cout << std::endl;
    std::cout << " MENU PRINCIPAL " << std::endl;
    std::cout << "================" << std::endl;
    std::cout << "1.- Adicionar" << std::endl;
    std::cout << "2.- Modificar" << std::endl;
    std::cout << "3.- Listar" << std::endl;
    std::cout << "4.- Consultar" << std::endl;
    std::cout << "5.- Salir" << std::endl;
    std::cout << "===============" << std::endl;
    std::cout << "OPCION ( 1-5): ";
}
 
void adicionar(const char* file)
{
    std::ofstream out(file, std::ios::app | std::ios::binary);
 
    if (out.fail())
        std::cout << std::endl << "ARCHIVO " << file << " NO ENCONTRADO" << std::endl;
 
    Cuenta registro;
    int size = sizeof(Cuenta);
 
    std::cout << std::endl;
    std::cout << " ADICIONAR " <<std::endl;
    std::cout << "===========" << std::endl;
    std::cout << std::endl;
 
    do {
        std::cout << "Cuenta: "; std::cin >> registro.codigo;
 
    } while (!verificarCuenta(registro.codigo));
 
    std::cin.ignore(80, '\n');
    std::cout << "Nombre: "; std::cin.getline(registro.nombre, 80);
 
    do {
        std::cout << "Origen (1 Debito / 2 Credito): "; std::cin >> registro.origen;
 
        if (registro.origen != 1 && registro.origen != 2)
            std::cout << std::endl << std::endl << "DATO NO VALIDO" << std::endl << std::endl;
 
    } while (registro.origen != 1 && registro.origen != 2);
 
    do {
        std::cout << "Es Cuenta Control (S/n): "; std::cin >> registro.EsControl;
        registro.EsControl = toupper(registro.EsControl);
 
        if (registro.EsControl != 'S' && registro.EsControl != 'N')
            std::cout << std::endl << std::endl << "DATO NO VALIDO" << std::endl << std::endl;
 
    } while (registro.EsControl != 'S' && registro.EsControl != 'N');
 
    do {
        std::cout << "Permite Saldo Negativo (S/n): "; std::cin >> registro.SaldoNegativo;
        registro.SaldoNegativo = toupper(registro.SaldoNegativo);
 
        if (registro.SaldoNegativo != 'S' && registro.SaldoNegativo != 'N')
            std::cout << std::endl << std::endl << "DATO NO VALIDO" << std::endl << std::endl;
 
    } while (registro.SaldoNegativo != 'S' && registro.SaldoNegativo != 'N');
 
    do {
        std::cout << "Cuenta Padre: "; std::cin >> registro.codigoPadre;
 
        char resp;
        if (!buscarPadre(file, registro.codigo))
        {
            std::cout << std::endl << "CUENTA PADRE NO ENCONTRADA" << std::endl << std::endl;
            std::cout << std::endl << "Introducir de Nuevo (S/n): "; std::cin >> resp;
            resp = toupper(resp);
 
            if (resp == 'N')
            {
                registro.codigoPadre[0] = '\0';
                break;
            }
        }
 
    } while (!verificarCuenta(registro.codigoPadre));
 
    std::cout << "Saldo: 0.0"; registro.saldo = 0.0f;
    std::cout << std::endl;
 
    out.write((char *)&registro, size);
 
    out.close();
}
 
bool verificarCuenta(const char* cuenta)
{
    char c = '.';
 
    if (cuenta[0] == c)
    {
        std::cout << std::endl << "CUENTA NO VALIDA" << std::endl << std::endl;
        return false;
    }
 
    int i = 1;
    while (cuenta[i] != '\0')
    {
        if (cuenta[i] == c && cuenta[i-1] == c)
        {
            std::cout << std::endl << "CUENTA NO VALIDA" << std::endl << std::endl;
            return false;
        }
        i++;
    }
    if (cuenta[i-1] == c)
    {
        std::cout << std::endl << "CUENTA NO VALIDA" << std::endl << std::endl;
        return false;
    }
    return true;
}
 
bool buscarPadre(const char* file, const char* cuenta)
{
    std::ifstream in(file, std::ios::in | std::ios::binary);
 
    if (in.fail())
        std::cout << std::endl << "ARCHIVO " << file << " NO ENCONTRADO" << std::endl;
 
    Cuenta registro;
    int size = sizeof(Cuenta);
 
    in.read((char *)&registro, size);
 
    while (!in.eof())
    {
        if (registro.EsControl == 'S' && strcmp(registro.codigo, cuenta) != 0)
            return true;
 
        in.read((char *)&registro, size);
    }
    in.close();
 
    return false;
}
 
void listar(const char* file)
{
    std::ifstream in(file, std::ios::in | std::ios::binary);
 
    if (in.fail())
        std::cout << std::endl << "ARCHIVO " << file << " NO ENCONTRADO" << std::endl;
 
    Cuenta registro;
    int size = sizeof(Cuenta);
 
    std::cout << std::endl << "  LISTADO DE CUENTAS " << std::endl;
    std::cout << "=======================" << std::endl;
    std::cout << "Codigo  Nombre  Saldo" << std::endl;
    std::cout << "=======================" << std::endl;
 
    in.read((char *)&registro, size);
 
    while (!in.eof())
    {
        std::cout << registro.codigo << " " << registro.nombre << " " << registro.saldo << std::endl;
 
        in.read((char *)&registro, size);
    }
    in.close();
}
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