Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2014, 08:05   #1
Imagine Dragons
 
Регистрация: 17.12.2014
Сообщений: 8
По умолчанию Работа с файлами (Pascal)

Код:
Program lab3;
 uses Crt;
 type vedomost=record
 
nz_pr:string[20];
  nom_gr:string[10];
  fam_stud:string[20];
 nom_zad:string[20];
 rab_vp:string[3];
 oth_zd:string[3];
 end;
Var f:file of vedomost;
zn,filename:string;
 
k:integer;
label 11;
 procedure sozdanie_file;
 begin
 
writeln('Imya Faila budet...');
 
readln(filename);
 
assign(f,filename);
 
rewrite(f);
 
end;
 
 
 
procedure dobavlenie_record;
 
var rez:integer; ch:char;
 
begin
 
while rez=1 do
 
begin
 
writeln('zadayte imya faila');
 
readln(filename);
 
assign(f,filename);
 
reset(f);
 
rez:=IOResult;
 
if rez<>0 then
 
begin
 
writeln('Imya faila verno?');
 
writeln('Povtorit?(Y/N)');
 
readln(ch);
 
if (ch='n') or (ch='N') then halt (0);
 
end;
 
end;
 
seek(f,filesize(f));
 
end;
 
 
 
procedure vvod_file;
 
var s:vedomost;
 
k:char;
 
begin
 
repeat
 
writeln('Vvedite information');
 
write('Nazvanie predmeta: '); readln(s.nz_pr);
 
write('№ group:' ); readln(s.nom_gr);
 
write('Familiya student:'); readln(s.fam_stud);
 
write('№ zadaniya:'); readln(s.nom_zad);
 
write('Rabota vupolnena:'); readln(s.rab_vp);
 
write('Otchet sdan: '); readln(s.oth_zd);
 
write(f,s);
 
write('Vvodit new information? (Y/N)>');readln(k);
 
writeln;
 
until(k='n') or (k='N');
 
close(f);
 
end;
 
 
 
procedure redactirovanie_record;
 
var
 
s:vedomost;
 
filename,str:string;   x:integer;
 
  nz_pr1:string[20];
  nom_gr1:string[10];
  fam_stud1:string[20];
  nom_zad1:string[20];
  rab_vp1:string[3];
  oth_zd1:string[3];
 
 
 
 
 begin
 
writeln ('Name file');
 
readln(filename);
 
assign(f,filename);
 
reset(f);
 
with s do
 
begin  write('Vvedite familya studenta dlya redactirovaniya: ');readln(str);
 
x:=0;
 
while not eof(f) do
 
begin
 
read(f,s);
 
if s.fam_stud=str then
 
begin
 
  writeln('New: ');
 write ('Nazvanie predmeta'); readln( s.nz_pr);
 write('№ group'); readln(s.nom_gr);
 write ('Familya student'); readln(s.fam_stud);
 write ('№ zadaniya'); readln(s.nom_zad);
 write ('Rabota vypolnena'); readln(s.rab_vp);
 write ('Otchet sdan'); readln (s.oth_zd);
 
 
 
nz_pr1:=nz_pr; nom_gr1:=nom_gr; fam_stud1:=fam_stud;  nom_zad1:=nom_zad; rab_vp1:=rab_vp; oth_zd1:=oth_zd;
 
seek(f,filepos(f)-1);
 
write(f,s); x:=1;
 
end;
 end;
 
close(f);
 
   end;
if x=0 then begin
writeln('record c takoy familyeu ne sushestvuet...'); readln; end;
 end;
 
 
 
 
 
procedure Openfile;
 
var rez:integer;ch:char;
 
begin
 
while rez<>0 do
 
begin
 
writeln('Zadayte name file');
 
readln(filename);
 
assign(f,filename);
 
reset(f);
 
rez:=IOResult;
 
if rez=1 then
 
begin
 
writeln('proverte pravilnost napisaniya familii');
 
writeln('Eshe raz? (Y/N)');
 
readln(ch);
 
if (ch='n') or (ch='N') then halt (0);
 
end;
 
end;
 
end;
 
 
 
procedure Vyvod_file;
 
var s:vedomost;k:char;
 
begin
 
writeln('Posmotret dannye o studentax ? (Y/N)');
 
readln(k);
 
if (k='y') or (k='Y') then
 
while not eof(f) do
 
begin
 
read(f,s); clrscr;
 
writeln(' nazvanie predmeta :',s.nz_pr);
 
writeln('№ group:',s.nom_gr);
 
writeln('Familya student:',s.fam_stud);
 
writeln('№ zadaniya:',s.nom_zad);
 
writeln('Rabota vypolnena:',s.rab_vp);
 
writeln('Otchet sdan:',s.oth_zd);
 
writeln('Dlya continue touch Enter (enter)');
 
readln;
 
end;
 
close(f);
 
end;
 
{========================================================}
 
procedure Ochistka_file;
 
var s:vedomost;
 
studtoout:string[20];
 
fo:file of vedomost;
 
begin
 
writeln('Imya file iz kotorogo budem udalyat?');
 
readln(filename);
 
assign(f,filename);reset(f);
 
assign(fo,'newfile.dat');rewrite(fo);
 
writeln('Familya student record o kotorom udalyaetsya');
 
readln(studtoout);
 
while not eof(f) do
 
begin
 
read(f,s);
 
if s.fam_stud=studtoout then write(fo,s);
write('good');
end;
close(f);close(fo);
 
erase(f);
 
rename(fo,filename);
 
end;
 Begin 11:clrscr;
 
writeln('Navigation');
 
writeln('1:Create file');
 
writeln('2:Add record in file');
 
writeln('3:correct record');
 
writeln('4: open file');
 
writeln('5:clear record from file');
 
writeln('6:exit');
 
readln(k);
 
case k of 1: begin sozdanie_file; vvod_file end;
 
2: begin dobavlenie_record; vvod_file end;
 
3: redactirovanie_record;
 
4: begin Openfile; Vyvod_file end;
 
5: Ochistka_file;
 
6: Halt;
 
else writeln('Errors. Retry...');
end;
goto 11;
End.
Пожалуйста, помогите. Как сделать так, чтобы выводило на экран фамилии тех студентов, которые не выполнили и не сдали хотя бы одну работу...
И при редактировании файла вылетает ошибка, если указать на имя несуществующего. Как можно это избежать?
Заранее спасибо.

Последний раз редактировалось Stilet; 17.12.2014 в 08:11.
Imagine Dragons вне форума Ответить с цитированием
Старый 17.12.2014, 08:14   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
при редактировании файла вылетает ошибка, если указать на имя несуществующего. Как можно это избежать?
Код:
    AssignFile(F, OpenDialog1.FileName);
    {$I-}
    Reset(F);
    {$I+}
    if IOResult <> 0 then
    begin
      Writeln('Файла нема. Аривидырчи'); readln; halt;
    end;
  end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.12.2014, 08:28   #3
Imagine Dragons
 
Регистрация: 17.12.2014
Сообщений: 8
По умолчанию

точно. Спасибо.
А как быть с выводом фамилий на экран??
Imagine Dragons вне форума Ответить с цитированием
Старый 17.12.2014, 08:29   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

на мой взгляд, не очень адекватно создана структура записи.
ладно, "номер группы", "номер задания" - это реально могут быть не только цифры, но и буквы (хотя какие буквы в НОМЕРЕ задания, не очень понятно). Ну да пусть.
Допускаем.

а вот
Цитата:
Код:
 rab_vp:string[3];  {работа выполнена}
 oth_zd:string[3];  {отчёт сдан}
почему там СТРОКА из трёх символов?!
что в этих строках? да или ДА или Да или Yes или YES или ВЫП или ОК или вообще мусор ?! При вводе ничего не контролируется, туда можно внести всё, что угодно.
Я бы сделал это поле либо числовым (1 - это 'Да, работа выполнена', 0 - 'нет, не выполнена'). Числовое поле легко позволит ввести третье состояние (например, НЕТ ДАННЫХ о выполнении работы или, если понадобится - оценку).
Либо банально это поле сделал BOOLEAN (логическое TRUE = 'Да, работа выполнена', FALSE = 'Нет, работа не выполнена').

Цитата:
выводило на экран фамилии тех студентов, которые не выполнили и не сдали хотя бы одну работу...
что значит - "хотя бы одну" ?!!! У Вас по каждому студенту в файле может быть НЕСКОЛЬКО записей?! А как Вы собираетесь идентифицировать студентов? По фамилии?! Да и это уже заявка на то, что нужно делать мини-БД из пары-тройки таблиц: в одной предметы, в другой - студенты и в третьей "Ведомости" результаты сдачи предметов студентами...



Код программы в целом неплохой! Если данный код Вы написали, то Вы легко ( с помощью форумчан) можете довести его до ума.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.12.2014, 09:47   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Код программы в целом неплохой! Если данный код Вы написали, то Вы легко
А мне код не понравился и я не верю что его писал автор, поскольку у него есть ответ на второй вопрос, а он даже не обратил на это внимание.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с файлами(Pascal) AndrewAlexandrov Помощь студентам 3 11.02.2014 21:01
Pascal работа с файлами A.S.W Помощь студентам 1 07.01.2010 19:01
работа с файлами (Pascal) makc101 Помощь студентам 5 26.12.2009 14:46
pascal работа с файлами evilguy Помощь студентам 3 18.04.2009 18:08