1
+ /*
2
+ * IMPORTANTE: Sólo debes subir el fichero de código como parte del ejercicio.
3
+ *
4
+ * EJERCICIO:
5
+ * Desarrolla un programa capaz de crear un archivo que se llame como
6
+ * tu usuario de GitHub y tenga la extensión .txt.
7
+ * Añade varias líneas en ese fichero:
8
+ * - Tu nombre.
9
+ * - Edad.
10
+ * - Lenguaje de programación favorito.
11
+ * Imprime el contenido.
12
+ * Borra el fichero.
13
+ *
14
+ * DIFICULTAD EXTRA (opcional):
15
+ * Desarrolla un programa de gestión de ventas que almacena sus datos en un
16
+ * archivo .txt.
17
+ * - Cada producto se guarda en una línea del archivo de la siguiente manera:
18
+ * [nombre_producto], [cantidad_vendida], [precio].
19
+ * - Siguiendo ese formato, y mediante terminal, debe permitir añadir, consultar,
20
+ * actualizar, eliminar productos y salir.
21
+ * - También debe poseer opciones para calcular la venta total y por producto.
22
+ * - La opción salir borra el .txt.
23
+ */
24
+
25
+ const fs = require ( 'fs' ) ;
26
+
27
+ const crearArchivoTexto = ( nombre , edad , lenguaje ) => {
28
+ const contenido = `Mi nombre es ${ nombre } , tengo ${ edad } años y mi lenguaje de programación favorito es ${ lenguaje } ` ;
29
+ fs . writeFile ( nombre + '.txt' , contenido , ( error ) => {
30
+ if ( error ) {
31
+ console . error ( 'Error al crear el archivo:' , error ) ;
32
+ }
33
+ } ) ;
34
+ }
35
+
36
+ const readline = require ( 'readline' ) ;
37
+ const rl = readline . createInterface ( process . stdin , process . stdout ) ;
38
+
39
+ let productos = [ ] ;
40
+
41
+ const gestionDeVentas = ( ) => {
42
+
43
+ console . log ( `
44
+
45
+ ----------------------------------------------
46
+ BIENVENIDO AL PROGRAMA DE GESTIÓN DE VENTAS:
47
+ 1. Añadir producto
48
+ 2. Eliminar producto
49
+ 3. Ver productos
50
+ 4. Actualizar producto` ) ;
51
+
52
+ rl . question ( 'Elija una opción -> ' , ( term ) => {
53
+ switch ( term ) {
54
+ case '1' :
55
+ addProduct ( ) ;
56
+ break ;
57
+ case '2' :
58
+ deleteProduct ( ) ;
59
+ break ;
60
+ case '3' :
61
+ listProducts ( ) ;
62
+ break ;
63
+ case '4' :
64
+ updateProduct ( ) ;
65
+ break ;
66
+ default :
67
+ gestionDeVentas ( ) ;
68
+ break ;
69
+ }
70
+ } )
71
+ }
72
+
73
+ const addProduct = ( ) => {
74
+ rl . question ( 'Nombre del producto -> ' , ( term ) => {
75
+ const nombre = term ;
76
+
77
+ rl . question ( 'Cantidad vendida -> ' , ( term ) => {
78
+ const cantidadVendida = term ;
79
+
80
+ rl . question ( 'Precio -> ' , ( term ) => {
81
+ const precio = term ;
82
+
83
+ const producto = {
84
+ nombre,
85
+ cantidadVendida,
86
+ precio
87
+ }
88
+
89
+ productos . push ( producto ) ;
90
+
91
+ updateFromProductos ( ) ;
92
+
93
+ console . log ( 'Producto añadido!' ) ;
94
+
95
+ gestionDeVentas ( ) ;
96
+ } )
97
+ } )
98
+ } )
99
+ }
100
+
101
+ const deleteProduct = ( ) => {
102
+ rl . question ( 'Nombre del producto que quiere eliminar -> ' , ( term ) => {
103
+ productos = productos . filter ( prod => prod . nombre !== term ) ;
104
+
105
+ updateFromProductos ( ) ;
106
+
107
+ console . log ( 'Producto eliminado!' ) ;
108
+
109
+ gestionDeVentas ( ) ;
110
+ } )
111
+ }
112
+
113
+ const listProducts = ( ) => {
114
+ productos . forEach ( prod =>
115
+ console . log ( `Nombre: ${ prod . nombre } , Cantidad Vendida: ${ prod . cantidadVendida } , Precio: ${ prod . precio } ` )
116
+ ) ;
117
+ rl . question ( 'Seguir? -> ' , ( term ) => {
118
+ if ( term === 'Si' ) {
119
+ gestionDeVentas ( ) ;
120
+ } else {
121
+ rl . close ( ) ;
122
+ }
123
+ } )
124
+ }
125
+
126
+ const updateProduct = ( ) => {
127
+ rl . question ( '¿Qué producto desea actualizar? -> ' , ( term ) => {
128
+ let prodToUpdate = productos . find ( prod => prod . nombre === term ) ;
129
+
130
+ if ( ! prodToUpdate ) {
131
+ console . log ( 'Producto no encontrado.' ) ;
132
+ return gestionDeVentas ( ) ;
133
+ }
134
+
135
+ let prodIndex = productos . indexOf ( prodToUpdate ) ;
136
+
137
+ rl . question ( '¿Qué desea actualizar? -> ' , ( term ) => {
138
+
139
+ switch ( term ) {
140
+ case 'nombre' :
141
+ rl . question ( '¿Qué nombre desea ponerle? -> ' , ( term ) => {
142
+ prodToUpdate . nombre = term ;
143
+ productos [ prodIndex ] = prodToUpdate ;
144
+
145
+ updateFromProductos ( ) ;
146
+ console . log ( 'Producto actualizado!' ) ;
147
+ gestionDeVentas ( ) ;
148
+ } ) ;
149
+ break ;
150
+ case 'cantidad vendida' :
151
+ rl . question ( '¿Qué cantidad se ha vendido? -> ' , ( term ) => {
152
+ prodToUpdate . cantidadVendida = term ;
153
+ productos [ prodIndex ] = prodToUpdate ;
154
+
155
+ updateFromProductos ( ) ;
156
+ console . log ( 'Producto actualizado!' ) ;
157
+ gestionDeVentas ( ) ;
158
+ } ) ;
159
+ break ;
160
+ case 'precio' :
161
+ rl . question ( '¿Qué precio tiene? -> ' , ( term ) => {
162
+ prodToUpdate . cantidadVendida = term ;
163
+ productos [ prodIndex ] = prodToUpdate ;
164
+
165
+ updateFromProductos ( ) ;
166
+ console . log ( 'Producto actualizado!' ) ;
167
+ gestionDeVentas ( ) ;
168
+ } ) ;
169
+ break ;
170
+ }
171
+ } )
172
+ } )
173
+ }
174
+
175
+ const updateFromProductos = ( ) => {
176
+ let content = '' ;
177
+ productos . forEach ( prod => content += `\n${ prod . nombre } , ${ prod . cantidadVendida } , ${ prod . precio } ` ) ;
178
+ fs . writeFile ( 'gestionProductos.txt' , content , ( error ) => {
179
+ if ( error ) {
180
+ console . error ( 'Error al crear el archivo:' , error ) ;
181
+ }
182
+ } ) ;
183
+ }
184
+
185
+ const crearArchivoTextoWithReadline = ( ) => {
186
+ rl . question ( 'Nombre -> ' , ( term ) => {
187
+ const nombre = term ;
188
+
189
+ rl . question ( 'Edad -> ' , ( term ) => {
190
+ const edad = term ;
191
+
192
+ rl . question ( 'Lenguaje de programación favorito -> ' , ( term ) => {
193
+ const lenguaje = term ;
194
+
195
+ crearArchivoTexto ( nombre , edad , lenguaje ) ;
196
+
197
+ console . log ( 'Archivo Creado :)' ) ;
198
+
199
+ entryPoint ( ) ;
200
+ } )
201
+ } )
202
+ } )
203
+ }
204
+
205
+ const entryPoint = ( ) => {
206
+
207
+ console . log ( ` PROGRAMAS
208
+ 1. Crea un archivo de texto
209
+ 2. Controla tus ventas` ) ;
210
+
211
+ rl . question ( '¿Qué programa quiere iniciar? -> ' , ( term ) => {
212
+ switch ( term ) {
213
+ case '1' :
214
+ crearArchivoTextoWithReadline ( ) ;
215
+ break ;
216
+ case '2' :
217
+ gestionDeVentas ( ) ;
218
+ break ;
219
+ default :
220
+ 'Por favor, elije un programa existente :,('
221
+ }
222
+ } )
223
+ }
224
+
225
+ entryPoint ( ) ;
0 commit comments