0votos

Control escolar en Haskell

por josejuan hace 2 años

Otra

Listado de alumnos de una universidad

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
{-# LANGUAGE RecordWildCards, LambdaCase #-} 
 
import Data.List (sortBy) 
import Data.Function (on) 
 
data Estudiante = Estudiante { nombre :: 𝐒, matricula :: 𝐒, p1 :: 𝔻, p2 :: 𝔻, p3 :: 𝔻, final :: 𝔻 } 
 
promedio :: Estudiante → 𝔻 
promedio (Estudiante {…}) = 0.25 × (p1 + p2 + p3 + final) 
 
lee :: IO Estudiante 
lee = Estudiante ↥ (putStr "Nombre .. : " » getLine) 
                 ⊛ (putStr "Matrícula : " » getLine) 
                 ⊛ (putStr "P1 : " » readLn ) ⊛ (putStr "P2 : " » readLn ) ⊛ (putStr "P3 : " » readLn ) 
                 ⊛ (putStr "Final ... : " » readLn ) 
 
lista :: (Estudiante → Estudiante → Ordering) → [Estudiante] → IO () 
lista orden = ↱_write ∘ sortBy orden 
  where write e@(Estudiante {…}) = putStrLn $ " #" ⧺ matricula 
                                            ⧺ ": " ⧺ nombre 
                                            ⧺ " | " ⧺ show p1 ⧺ " : " ⧺ show p2 ⧺ " : " ⧺ show p3 
                                            ⧺ " | " ⧺ show final 
                                            ⧺ " = " ⧺ show (promedio e) 
 
loop es = putStr "1. añadir estudiante\nListar por:\n 2. matrícula\n 3. nombre\n 4. por promedio\n 5. por final\n0. salir\n: " » readLn ↪ λcase 
  1 → lee ↪ loop ∘ (:es) 
  0 → η () 
  x → lista ([compare `on` matricula, compare `on` nombre, compare `on` promedio, compare `on` final]‼(x - 2)) es » loop es 
 
main = loop [] 
 
{- 
 
> main 
1. añadir estudiante 
Listar por: 
 2. matrícula 
 3. nombre 
 4. por promedio 
 5. por final 
0. salir 
: 1 
Nombre .. : Pedro 
Matrícula : 1234 
P1 : 6.7 
P2 : 8.9 
P3 : 6.8 
Final ... : 8.8 
1. añadir estudiante 
Listar por: 
 2. matrícula 
 3. nombre 
 4. por promedio 
 5. por final 
0. salir 
: 1 
Nombre .. : Juan 
Matrícula : 2345 
P1 : 8.9 
P2 : 5.6 
P3 : 4.5 
Final ... : 9.6 
1. añadir estudiante 
Listar por: 
 2. matrícula 
 3. nombre 
 4. por promedio 
 5. por final 
0. salir 
: 2 
 #1234: Pedro | 6.7 : 8.9 : 6.8 | 8.8 = 7.800000000000001 
 #2345: Juan | 8.9 : 5.6 : 4.5 | 9.6 = 7.15 
1. añadir estudiante 
Listar por: 
 2. matrícula 
 3. nombre 
 4. por promedio 
 5. por final 
0. salir 
: 3 
 #2345: Juan | 8.9 : 5.6 : 4.5 | 9.6 = 7.15 
 #1234: Pedro | 6.7 : 8.9 : 6.8 | 8.8 = 7.800000000000001 
1. añadir estudiante 
Listar por: 
 2. matrícula 
 3. nombre 
 4. por promedio 
 5. por final 
0. salir 
: 4 
 #2345: Juan | 8.9 : 5.6 : 4.5 | 9.6 = 7.15 
 #1234: Pedro | 6.7 : 8.9 : 6.8 | 8.8 = 7.800000000000001 
1. añadir estudiante 
Listar por: 
 2. matrícula 
 3. nombre 
 4. por promedio 
 5. por final 
0. salir 
: 5 
 #1234: Pedro | 6.7 : 8.9 : 6.8 | 8.8 = 7.800000000000001 
 #2345: Juan | 8.9 : 5.6 : 4.5 | 9.6 = 7.15 
1. añadir estudiante 
Listar por: 
 2. matrícula 
 3. nombre 
 4. por promedio 
 5. por final 
0. salir 
: 0 
 
-} 

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.