Pascal/Turbo Pascal - ayuuuuuda

 
Vista:

ayuuuuuda

Publicado por nykroy (1 intervención) el 19/04/2007 14:35:54
hola estoy haciendo un programa en pascal para que me guarde los datos de alumnos de un colegio o instituto y tiene las opciones de dar de alta dar de baja ,introducir calificaciones , modificar calificaciones y mostrar resultados.
la cosa esta en que en el modulo de introducir calificaciones no se porque pero no me guarda las calificaciones, y no me da ningun error, os pongo el codigo fuente aver si vosotros veis que he hecho mal, os lo agradezco en el alma porque si no lo resuelvo me va a tocar pagar mas por el curso.

program alumnos_clase(input,output);
uses crt;
type
Tejerciciospre=record
numero:integer;
calificacion:boolean
end;
Tcalificaciones=record
ex_pract:real;
ex_teor:real;
ejerciciospre:Tejerciciospre;
ejerciciosnopre:integer
end;
Talumnos=record
nombre:string;
alumno:boolean;
apellidos:string;
dni:string;
correo:string;
calificaciones:Tcalificaciones
end;
(*le he dado 30 valores al array como limite, lo cual no implica que
valla a utilizar las treinta posiciones*)
Tclase=array[1..30] of Talumnos;
Tfichero=file of Talumnos;
(*Esta función pide al usuario los datos personales de los alumnos que quiera
introducir*)
procedure grabar_fichero(var clase:Tclase;x:integer;nombre:string);
var
fichero:Tfichero;

begin
assign(fichero,nombre);
reset(fichero);
seek(fichero,x);
write(fichero,clase[x]);
close(fichero)
end;
procedure lee_clase(var clase:Tclase;x:integer);
begin
writeln('Alumno ',x,':');
write('Nombre del alumno: ');
readln(clase[x].nombre);
clase[x].alumno:=false;
write('Apellidos del alumno: ');
readln(clase[x].apellidos);
write('D.N.I. del alumno: ');
readln(clase[x].dni);
write('Direccion de correo electronico: ');
readln(clase[x].correo);
end;
(*Este procedimiento guarda los datos que el usuario meta de las alumnos en la
funcion anterior*)
procedure altas(var clase:Tclase);
var
nombre:string;
nuevoalumno:char;
x:integer;
fichero: Tfichero;
opciones:integer;
begin
nuevoalumno:='s';
writeln('Opciones:');
writeln('1: fichero ya existente');
writeln('2: nuevo fichero');
write('Opcion elegida: ');
readln(opciones);
writeln('nombre del fichero: ');
readln(nombre);
assign(fichero,nombre);
if (opciones=1) then
begin
reset(fichero);
x:=filesize(fichero)
end;
if (opciones=2) then
begin
rewrite(fichero);
x:=(filesize(fichero))
end;
close(fichero);
while((nuevoalumno='s') or (nuevoalumno='S')) do
begin
lee_clase(clase,x);
grabar_fichero(clase,x,nombre);
x:=x+1;
write('Quiere intoducir otra alta(s/n): ');
readln(nuevoalumno)
end;

end;
(*procedimiento para dar de baja a un alumno*)
procedure borra_fichero(var clase:Tclase;nombre:string;alumno:string);
var
fichero:Tfichero;
ficherodos:Tfichero;
i:integer;
pos,pos2:integer;
begin
i:=0;
assign(fichero,nombre);
assign(ficherodos,'cambio.dat');
reset(fichero);
rewrite(ficherodos);
repeat
i:=i+1;
read(fichero,clase[i]);
if (alumno=clase[i].nombre)then
begin
pos:= (filepos(fichero)-1);
pos2:= filepos(ficherodos);
close(fichero);
reset(fichero);
while (pos2<pos) do
begin
read(fichero,clase[i]);
write(ficherodos,clase[i]);
pos2:= (pos2 + 1);
seek(ficherodos, pos2);
end;
seek(fichero, (pos + 1));
while (not(eof(fichero))) do
begin
read(fichero,clase[i]);
write(ficherodos,clase[i]);
end;
rewrite(fichero);
reset(ficherodos);
while (not(eof(ficherodos))) do
begin
read(ficherodos,clase[i]);
write(fichero,clase[i]);
end;
end
until (eof(fichero));
close(fichero);
close(ficherodos)
end;
procedure bajas(var clase:Tclase);
var
nombre:string;
borralumno:char;
alumno:string;
begin
borralumno:='s';
writeln('Opciones:');
writeln('nombre del fichero: ');
readln(nombre);
while((borralumno='s') or (borralumno='S')) do
begin
write('Escribe el nombre del alumno que desea dar de baja: ');
readln(alumno);
borra_fichero(clase,nombre,alumno);
write('Quiere dar de baja a otro alumno(s/n): ');
readln(borralumno)
end;
end;

(*procedimiento para introducir las calificaciones de los alumnos*)


procedure lee_calificaciones(var clase:Tclase;x:integer;nombre:string);
var
calif:string;
fichero:Tfichero;
begin
assign(fichero,nombre);
reset(fichero);
seek(fichero,x);
read(fichero,clase[x]);
writeln('Alumno ',clase[x].nombre,':');
write('Ejercicios presentados: ');
readln(clase[x].calificaciones.ejerciciospre.numero);
write('Calificacion de los ejercicios presentados(apto,no apto): ');
readln(calif);
if (calif='apto') then
clase[x].calificaciones.ejerciciospre.calificacion:=true;
write('Ejercicios no presentados: ');
readln(clase[x].calificaciones.ejerciciosnopre);
write('Nota del examen teórico: ');
readln(clase[x].calificaciones.ex_teor);
write('Nota del examen práctico: ');
readln(clase[x].calificaciones.ex_pract);
clase[x].alumno:=true;
close(fichero)
end;
procedure introd_calificaciones(var clase:Tclase);
var
nuevacalif:char;
x:integer;
nombre:string;
fichero:Tfichero;
y:integer;
begin
x:=0;
nuevacalif:='S';
write('Nombre del fichero: ');
readln(nombre);
assign(fichero, nombre);
reset(fichero);
y:=filesize(fichero);
close(fichero);
while (((nuevacalif='s') or (nuevacalif='S'))and(x<=y)) do
begin
if(clase[x].alumno=false)then
begin
lee_calificaciones(clase,x,nombre);
grabar_fichero(clase,x,nombre);
end;
x:=x+1;
write('quieres introducir otra calificación(S/N): ');
readln(nuevacalif);
if (y=x) then
writeln('No hay mas alumnos');
end;
end;
procedure mostrar_alumno(clase:Tclase);
var
x:integer;
nombre:string;
fichero:Tfichero;
i:integer;
begin
write('nombre del fichero a utilizar: ');
readln(nombre);
assign(fichero,nombre);
reset(fichero);
x:=filesize(fichero);
for i:=1 to x do
begin
read(fichero,clase[i]);
writeln('Nombre: ',clase[i].nombre);
writeln('Ej.presentados: ',clase[x].calificaciones.ejerciciospre.numero);
end;
close(fichero)
end;

(*Modulo principal*)
var
opcion:integer;
menu:char;
clase:Tclase;
begin
menu:='S';
repeat
begin
opcion:=0;
clrscr;
while ((opcion<1) or (opcion>5)) do
begin
writeln('Opciones:');
writeln('1. ALta de alumnos');
writeln('2. Baja de alumnos');
writeln('3. Introducción de calificaciones');
writeln('4. Modificacion de datos');
writeln('5. Resultados acerca de los alumnos');
writeln('');
writeln('');
write('Introduzca la opción elegida: ');
readln(opcion);
case (opcion) of
1 : altas(clase);
2 : bajas(clase);
3 : introd_calificaciones(clase);
5 : mostrar_alumno(clase);
else
begin
clrscr;
writeln('Opción no disponible')
end;
end;
end;
write('¿Quiere volver al menu de opciones (S/N): ');
readln(menu)
end;
until((menu='n') or (menu='N'))
end.


:D:Dmuchas gracias :D:D
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

RE:ayuuuuuda

Publicado por Diego Romero (996 intervenciones) el 19/04/2007 21:18:05
No he probado el programa, solo leí el fuente y me llama la atención una cosa: ¿por qué declaras un array que luego vuelcas al archivo?, ¿por qué no guardas directamente en el archivo el registro que estás dando de alta?.
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