Програма на Паскал за отпечатване на файлове, принтиране и извеждане на списъци
Задача и пример за програмиране на Паскал
Да се състави програма,на Паскал, която с данните:
име на студента(string);
ЕГН;
факултетен номер;
масив от 6 избираеми дисциплини;
извършва следните действия:
създава файл с данни, добавя данните на новите студенти и изтрива данните на напуснали студенти(по зададен факултетен номер);
отпечатва факултетния номер на всички студенти;
ичислява броя на избраните дисциплини и ги отпечатва (име-бр.дисциплини);
извежда списъци на студентите по дисциплини;
Програмата да работи с меню.
Описание на програмата:
Деклариране на елементите във файла. С Var преди първата процедура се въвеждат глобалните променливи, те ще се използват от всички процедури.
Първата процедура е за въвеждане на данни на един човек. При отваряне на файла Stu запо1ва записване на данните на студента и се стартира цикъл за записване на дисциплините.
Втората процедура е за извеждане не данните на студентите на екрана.
Третата е за създаване на празен файл.Rewrite създава файла StFl , след което същия се затваря с Close.
Четвъртата процедура е за добавяне на данни във файла. Файлът се отваря и се позиционира в края му. Това става като се зададе функцията Seek с параметри името не файла и неговата големина изведена чрез FileSize. Започва цикъл, който се прекратява при задаване на ‘’n’’. Цикъла извиква помощната процедура ReadStudent(първата) с входен параметър файла ‘’Student’’. Данните се записват в ‘’StFl’’.
В петата процедура декларираме помощния файл ‘’DelFl’’ и
променливата FN, в която ще запишем факултетния номер на студента, който ще трием. Отваря се файла ‘’StFl’’ и се създава помощния файл ‘’DelFl’’. Докато не се стигне неговия край (EOF) се изпълнява следния цикъл.Прочита се информацията от ‘’StFl’’ и ако ‘’Student.FN’’ е различно от зададения факултетен немер информацията се презаписва в ‘’DelFl’’. В противен случай се извежда съобщение, че данните са изтрити и не се презаписват в ‘’DelFl’’. Затваряме‘’StFL’’и ‘’DelFl ‘’и изтриваме ‘’StFl’’и преименуваме ‘’ DelFl’’с името на ‘’StFL’’.
Шестата процедура е помощна процедура за извеждане на име и факултетен номер.
В седмата процедура чрез променливата ‘’к’’ ще разберем дали файлът е бил празен. Отваряме файла и до неговия край повтаряме процедура шест, като при всяко повтаряне к се увеличава с едно.
Осмата процедура е за извеждане на студент по дисциплини. От клавиятурата въвеждаме името на дисциплината, която ни интересува. Отваряме файла’’StFL’’ и започва цикъл до неговия край, в който прочитаме данните от масива с дисциплини и за всяко съвпадение с дадена дисциплина извежда името на студента.
Деветата процедура извиква в цикъл втората процедура за извеждане не данните на един човек . Цикълът се повтаря до края на файла.
Десетата процедура е за извеждане на броя на избраните дисциплини от един студент(име-брой дисциплини).
Единадесетата процедура използва десетата за да изведе броя на дисциплините на всички студенти.
Главна процедура
От клавиатурата въвеждаме името на файла (FailName) и то се назначава към ‘’StFl’’. Създаваме цикъл , който се прекратява при въвеждане на стойност 0 за С . На екрана извеждаме списъка с операции като зададен номер на операцията присвояваме на ‘’С’’ създаваме ‘’Case’’ от С , който прави връзка между стойността на С и желаната процедура.
Код на програмата:
Type
TSt=record
Ime:string[20]; EGN:string[10];
FN:string[6];
Discip:array[1..6] of string[30];
Brdiscip:byte;
end;
Var
StFl:file of TSt;
FileName:string[20];
Student:TSt;
C:byte;
i:integer;
Procedure ReadStudent(Var Stu:TSt);
Var j:integer;
Begin
With Stu do
begin
j:=0;
Write(' ':20,'Vavedete ime: ');Readln(Ime);
Write(' ':20,'Vavedete EGN: ');Readln(EGN);
Write(' ':20,'Vavedete Fakult. Nom.: ');Readln(FN);
for i:=1 to 6 do
begin
Write(' ':20,'Vavedete ',i,'-ta disciplina: ');Readln(Discip[i]);
j:=j+1;
Brdiscip:=j;
end;
end
End;
Procedure WriteStudent(Stu:TSt);
Begin
With Stu do begin
Writeln('Ime: ',Ime);
Writeln('EGN: ',EGN);
Writeln('Fakult. Nomer: ',FN);
for i:=1 to 6 do
writeln(' Disciplina',i,': ',Discip[i]);
End;
end;
Procedure SzdPrz;
Begin
Rewrite(StFl); Close(StFl);
Writeln;Writeln('Failat e sazdaden!')
End;
Procedure Dobaviane;
Var
Ch:char;
Begin
Reset(StFl); Seek(StFl,FileSize(StFl));
Repeat
ReadStudent(Student); Write(StFl,Student);
Write('Jelaete li da prodaljite s vavejdaneto? (d/n): ');readln(Ch)
until Ch in ['N','n','?','-'];;
Close(StFl);
End;
Procedure Iztrivane;
Var
DelFl:file of TSt;
FN:string[6];
Begin
Write('Vavedete Fakulteten Nomer: ');Readln(FN);
Reset(StFl); Assign(DelFl,'Del'); Rewrite(DelFl);
While not EOF(StFl) do
begin
Read(StFl,Student);
If Student.FN<>FN
then Write(DelFl,Student)
else Writeln('Dannite za student s fakulteten nomer: ',FN,' sa iztriti.');
end;
Close(StFl); Close(DelFl); Erase(StFl); Rename(DelFl,FileName);
Writeln;
End;
Procedure WriteFakNom(Stu:TSt);
Begin
With Stu do Writeln('Ime: ',Ime,'; Fakulteten nomer: ',FN)
End;
Procedure SpisFak;
Var
k:byte;
Begin
Reset(StFl); k:=0;
Writeln('Spisak s Fak. Nomera na vsichki studenti: ');
While not EOF(StFl) do
begin
Read(StFl,Student); k:=k+1; WriteFakNom(Student)
end;
If k=0 then Writeln('Failat e prazen');readln;
Close(StFl)
End;
Procedure StudPoDisc;
Var
k,i:integer;
Dis:string;
Begin
Write('Vavedete disciplina: ');Readln(Dis);
Reset(StFl); k:=0;
While not EOF(StFl) do
with Student do
begin
Read(StFl,Student);
for i:=1 to 6 do begin
If Discip[i]=Dis
then begin Writeln('Ime: ',Ime);k:=k+1;
end;
end;
end;
If k=0 then Writeln('Nqma hora zapisali disciplina: ',Dis);
Close(StFl)
End;
Procedure ObSpis;
Var
k:byte;
Begin
Reset(StFl); k:=0;
Writeln('Spisak s vsi4ki lica:');
While not EOF(StFl) do
begin
Read(StFl,Student); k:=k+1; WriteStudent(Student)
end;
If k=0 then Writeln('Failat e prazen');readln;
Close(StFl)
End;
Procedure BrDis1(Stu:TSt);
Begin
with Stu do
writeln('Ime: ',Ime,' ':21-length(Ime),'Broi Disciplini:',Brdiscip);
End;
Procedure BrDis;
Var Stu:TSt;
begin
Reset(StFl);
writeln('Broi na disciplinite:');
while not EOF(StFl) do
begin
read(StFl,TSt(Stu));
BrDis1(Stu);
End;
End;
BEGIN
Write('Vavedete ime na faila: ');Readln(FileName);
Assign(StFl,FileName);
Repeat
Writeln(' ':20,'Poso4ete nomera na jelanata operaciq:');
Writeln(' ':33,'1 - za sazdavane na nov fail');
Writeln(' ':33,'2 - za dobavqne na student');
Writeln(' ':33,'3 - za iztrivane na danni');
Writeln(' ':33,'4 - za spisak s Fak. Nom');
Writeln(' ':33,'5 - za spis1k na studentite po disciplini');
Writeln(' ':33,'6 - za izvejdane dannite na vsi4ki lica');
Writeln(' ':33,'7 - za izvejdane broq na izbranite disciplini');
Writeln(' ':33,'0 - za izhod ');Readln(C);
Case C of
1:SzdPrz;
2:Dobaviane;
3:Iztrivane;
4:SpisFak;
5:StudPoDisc;
6:ObSpis;
7:BrDis;
End;
until C=0
End.
Сходни статии:
- Програма на Паскал за нуждите на хотел Програма на Паскал за нуждите на хотел, която поддържа следната информация за гостите на хотела: име (string); ЕГН; семейно положение; дата на пристигане и дата на отпътуване; масив предлагани услуги;...
- Използване на файл в Паскал Files are referred to in Pascal programs by the use of filenames. You have already used two default filenames, input and output. These are associated with the keyboard and console...
- Програма за събиране не еднобайтови BCD числа В тази програма не би трябвало да има нещо особено. Двата операнда се задават в BCD код в клетките 0х0060 0х0061. След това се извършва сумирането им по познатия начин....
- Компресиране на файлове в NTFS дялове Ще разгледаме въпросите за компресирането на файлове в NTFS дялове и възможните последствия от компресирането и декомпресирането на файловете и папките. Компресиране и декомпресиране на файлове и папки Файловата система...
- Програма за събиране на четирибайтови числа Програма за събиране на четирибайтови числа Операндите трябва да се заредят най-напред в оперативната памет. За първия операнд са отделени клетките 0х60, 0х61, 0х62 и 0х63; като първата от тях...