1
+ // 1º Ejercicio
2
+ import * as fs from 'fs/promises' ;
3
+ import { writeFile , readFile , unlink } from 'fs/promises' ; //Utilizamos esto para poder manejar ficheros.
4
+
5
+ let nickname : string = 'Igledev' ; //Ponemos nuestro nombre de GitHub
6
+
7
+ // Creamos el contenido de nuestro archivo
8
+ let msg : string = `
9
+ Nombre : Adrián
10
+ Edad : 19
11
+ Lenguaje de programación favorito : TypeScript
12
+ `
13
+
14
+ let nombre_archivo = `${ nickname } .txt` // Llamamos al archivo como nuestro nombre de Github
15
+
16
+ writeFile ( nombre_archivo , msg )
17
+ . then ( ( ) => {
18
+ // Leemos el contenido de nuestro archivo.
19
+ return readFile ( nombre_archivo , 'utf8' ) ;
20
+ } )
21
+ . then ( msg => {
22
+ // Mostramos el archivo
23
+ console . log ( `Contenido del archivo ${ msg } ` )
24
+
25
+ // Borramos el archivo
26
+ return unlink ( nombre_archivo ) ;
27
+ } )
28
+ . then ( ( ) => {
29
+ console . log ( `Archivo borrado ${ nombre_archivo } ` )
30
+ } )
31
+ . catch ( ( error ) => {
32
+ throw new Error ( `Fallo en el archivo: ${ error } ` ) ;
33
+ } ) ;
34
+
35
+ // Ejercicio Extra
36
+ let nombreArchivo = 'ventas.txt' ;
37
+
38
+ // Función para mostrar el menú
39
+ function mostrarMenu ( ) {
40
+ console . log ( '\n--- Menú ---' ) ;
41
+ console . log ( '1. Añadir producto' ) ;
42
+ console . log ( '2. Consultar producto' ) ;
43
+ console . log ( '3. Actualizar producto' ) ;
44
+ console . log ( '4. Eliminar producto' ) ;
45
+ console . log ( '5. Calcular venta total' ) ;
46
+ console . log ( '6. Calcular venta por producto' ) ;
47
+ console . log ( '7. Salir' ) ;
48
+ }
49
+
50
+ // Función para añadir un producto
51
+ async function agregarProducto ( ) {
52
+ let nombreProducto = await obtenerInput ( 'Nombre del producto:' ) ;
53
+ let cantidadVendida = parseFloat ( await obtenerInput ( 'Cantidad vendida:' ) ) ;
54
+ let precio = parseFloat ( await obtenerInput ( 'Precio:' ) ) ;
55
+ let linea = `${ nombreProducto } , ${ cantidadVendida } , ${ precio } \n` ;
56
+
57
+ await fs . appendFile ( nombreArchivo , linea ) ;
58
+ console . log ( 'Producto agregado correctamente.' ) ;
59
+ }
60
+
61
+ // Función para consultar un producto
62
+ async function consultarProducto ( ) {
63
+ let nombreProducto = await obtenerInput ( 'Nombre del producto:' ) ;
64
+ try {
65
+ let contenido = await fs . readFile ( nombreArchivo , 'utf-8' ) ;
66
+ let lineas = contenido . split ( '\n' ) ;
67
+ let producto = lineas . find ( linea => linea . startsWith ( nombreProducto ) ) ;
68
+ if ( producto ) {
69
+ console . log ( 'Datos del producto:' , producto ) ;
70
+ } else {
71
+ console . log ( 'Producto no encontrado.' ) ;
72
+ }
73
+ } catch ( error ) {
74
+ console . error ( 'Error al leer el archivo:' , error ) ;
75
+ }
76
+ }
77
+
78
+ // Función para actualizar un producto
79
+ async function actualizarProducto ( ) {
80
+ let nombreProducto = await obtenerInput ( 'Nombre del producto:' ) ;
81
+ let nuevaCantidad = parseFloat ( await obtenerInput ( 'Nueva cantidad vendida:' ) ) ;
82
+ let nuevoPrecio = parseFloat ( await obtenerInput ( 'Nuevo precio:' ) ) ;
83
+
84
+ try {
85
+ let contenido = await fs . readFile ( nombreArchivo , 'utf-8' ) ;
86
+ let lineas = contenido . split ( '\n' ) ;
87
+ let indice = lineas . findIndex ( linea => linea . startsWith ( nombreProducto ) ) ;
88
+ if ( indice !== - 1 ) {
89
+ lineas [ indice ] = `${ nombreProducto } , ${ nuevaCantidad } , ${ nuevoPrecio } ` ;
90
+ await fs . writeFile ( nombreArchivo , lineas . join ( '\n' ) ) ;
91
+ console . log ( 'Producto actualizado correctamente.' ) ;
92
+ } else {
93
+ console . log ( 'Producto no encontrado.' ) ;
94
+ }
95
+ } catch ( error ) {
96
+ console . error ( 'Error al leer/escribir el archivo:' , error ) ;
97
+ }
98
+ }
99
+
100
+ // Función para eliminar un producto
101
+ async function eliminarProducto ( ) {
102
+ let nombreProducto = await obtenerInput ( 'Nombre del producto a eliminar:' ) ;
103
+ try {
104
+ let contenido = await fs . readFile ( nombreArchivo , 'utf-8' ) ;
105
+ let lineas = contenido . split ( '\n' ) ;
106
+ let filtradas = lineas . filter ( linea => ! linea . startsWith ( nombreProducto ) ) ;
107
+ await fs . writeFile ( nombreArchivo , filtradas . join ( '\n' ) ) ;
108
+ console . log ( 'Producto eliminado correctamente.' ) ;
109
+ } catch ( error ) {
110
+ console . error ( 'Error al leer/escribir el archivo:' , error ) ;
111
+ }
112
+ }
113
+
114
+ // Función para calcular la venta total
115
+ async function calcularVentaTotal ( ) {
116
+ try {
117
+ let contenido = await fs . readFile ( nombreArchivo , 'utf-8' ) ;
118
+ let lineas = contenido . split ( '\n' ) ;
119
+ let ventaTotal = 0 ;
120
+ for ( let linea of lineas ) {
121
+ let [ , cantidadVendida , precio ] = linea . split ( ',' ) . map ( parseFloat ) ;
122
+ ventaTotal += cantidadVendida * precio ;
123
+ }
124
+ console . log ( 'Venta total:' , ventaTotal . toFixed ( 2 ) ) ;
125
+ } catch ( error ) {
126
+ console . error ( 'Error al leer el archivo:' , error ) ;
127
+ }
128
+ }
129
+
130
+ // Función para calcular la venta por producto
131
+ async function calcularVentaPorProducto ( ) {
132
+ let nombreProducto = await obtenerInput ( 'Nombre del producto:' ) ;
133
+ try {
134
+ let contenido = await fs . readFile ( nombreArchivo , 'utf-8' ) ;
135
+ let lineas = contenido . split ( '\n' ) ;
136
+ let producto = lineas . find ( linea => linea . startsWith ( nombreProducto ) ) ;
137
+ if ( producto ) {
138
+ let [ , cantidadVendida , precio ] = producto . split ( ',' ) . map ( parseFloat ) ;
139
+ console . log ( 'Venta por producto:' , ( cantidadVendida * precio ) . toFixed ( 2 ) ) ;
140
+ } else {
141
+ console . log ( 'Producto no encontrado.' ) ;
142
+ }
143
+ } catch ( error ) {
144
+ console . error ( 'Error al leer el archivo:' , error ) ;
145
+ }
146
+ }
147
+
148
+ // Función para obtener input del usuario
149
+ async function obtenerInput ( mensaje : string ) : Promise < string > {
150
+ process . stdout . write ( `${ mensaje } ` ) ;
151
+ return new Promise ( resolve => {
152
+ process . stdin . once ( 'data' , data => {
153
+ resolve ( data . toString ( ) . trim ( ) ) ;
154
+ } ) ;
155
+ } ) ;
156
+ }
157
+
158
+ // Función para salir y borrar el archivo
159
+ async function salir ( ) {
160
+ try {
161
+ await fs . unlink ( nombreArchivo ) ;
162
+ console . log ( 'Archivo borrado. Saliendo del programa.' ) ;
163
+ process . exit ( ) ;
164
+ } catch ( error ) {
165
+ console . error ( 'Error al borrar el archivo:' , error ) ;
166
+ }
167
+ }
168
+
169
+ // Función principal
170
+ async function main ( ) {
171
+ try {
172
+ // Mostrar el menú
173
+ mostrarMenu ( ) ;
174
+
175
+ // Esperar la selección del usuario
176
+ let opcion = parseInt ( await obtenerInput ( 'Selecciona una opción:' ) ) ;
177
+
178
+ // Realizar la operación correspondiente
179
+ switch ( opcion ) {
180
+ case 1 :
181
+ await agregarProducto ( ) ;
182
+ break ;
183
+ case 2 :
184
+ await consultarProducto ( ) ;
185
+ break ;
186
+ case 3 :
187
+ await actualizarProducto ( ) ;
188
+ break ;
189
+ case 4 :
190
+ await eliminarProducto ( ) ;
191
+ break ;
192
+ case 5 :
193
+ await calcularVentaTotal ( ) ;
194
+ break ;
195
+ case 6 :
196
+ await calcularVentaPorProducto ( ) ;
197
+ break ;
198
+ case 7 :
199
+ await salir ( ) ;
200
+ break ;
201
+ default :
202
+ console . log ( 'Opción inválida.' ) ;
203
+ }
204
+
205
+ // Volver a mostrar el menú
206
+ main ( ) ;
207
+ } catch ( error ) {
208
+ console . error ( 'Error en el programa:' , error ) ;
209
+ }
210
+ }
211
+
212
+ // Iniciar el programa
213
+ main ( ) ;
0 commit comments