Разработка и стандартизация программных средств информационных технологий
Контрольная работа - Компьютеры, программирование
Другие контрольные работы по предмету Компьютеры, программирование
/p>
Структура и оформление документа устанавливается в соответствии с ГОСТ 19.105-78.
Для проведения испытаний (запуск, отладка, останов) программы был задействован ПК типа Pentium VI с операционной системой Windows XP.
3. Листинг прикладной программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, ValEdit, CheckLst;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const filename = students.txt; {файл с исходными данными}
type
student_record = record {структура для хранения данных о студенте}
name: ShortString; {ФИО}
examen1: ShortString; {Балл за первый экзамен}
examen2: ShortString; {Балл за второй}
zachet: ShortString; {1- сдан зачет, 0-не сдан}
faculty: ShortString; {факультет}
profession: ShortString; {специальность}
end;
plan = record {структура для хранения данных о плане приема на специальности}
name: ShortString; {наименование специальности}
ball: word; {проходной балл на специальность}
students: array of student_record; {студенты, зачисленные на специальность}
end;
var
Form1: TForm1;
f: textfile;
student_kniga: array of student_record; {массив студентов(данные из файла)}
plans: array of plan;{план приема и зачисленные студенты}
implementation
{$R *.dfm}
{открытие и чтение файла данных}
procedure open_file;
var i, ii, t: word;
s: ShortString;
begin
AssignFile(f, filename);
Reset(f);
i:=1;
SetLength(student_kniga,0);
while not eof(f) do {в цикле считываем данные из файла в переменные}
begin
t:=0;
SetLength(student_kniga,i);
readln(f, s); {читаем построчно}
for ii:=1 to Length(s) do {перебираем посимвольно строку}
begin
if (s[ii] = +) then t:=t+1{если встречаем символ-разделитель данных, переходим к считыванию следующей переменной}
else
if t=0 then
student_kniga[i-1].name:= student_kniga[i-1].name + s[ii] {запоминаем фамилию}
else
if t=1 then
student_kniga[i-1].examen1:= student_kniga[i-1].examen1 + s[ii] {запоминаем балл первого экзамена}
else
if t=2 then
student_kniga[i-1].examen2:= student_kniga[i-1].examen2 + s[ii] {запоминаем балл второго экзамена}
else
if t=3 then
student_kniga[i-1].zachet:= student_kniga[i-1].zachet + s[ii] {запоминаем результат зачета}
else
if t=4 then
student_kniga[i-1].faculty:= student_kniga[i-1].faculty + s[ii] {запоминаем факультет}
else
if t=5 then
student_kniga[i-1].profession:= student_kniga[i-1].profession + s[ii]; {запоминаем специальность}
end;
i:= i+1;
end;
closefile(f); {закрываем файл данных}
end;
{процедура отображения загруженных данных на форме}
procedure display;
var i: word;
begin
form1.Memo1.Clear; {очищаем окно вывода данных}
for i:=0 to length(student_kniga)-1 do {цикл по студентам}
begin
form1.Memo1.Lines.add(student_kniga[i].name {заносим данные о студенте в окно вывода}
+ #09 + student_kniga[i].examen1
+ #09 + student_kniga[i].examen2
+ #09 + student_kniga[i].zachet
+ #09 + student_kniga[i].faculty
+ #09 + student_kniga[i].profession);
end;
end;
{сохранение результатов вычислений}
procedure save_file;
var i, ii: word;
begin
for i:=0 to length(plans)-1 do {цикл по всем специальностям}
begin
if plans[i].name <> then
AssignFile(f, plans[i].name+.txt); {создаем файл с названием специальности}
reWrite(f);//открываем файл на перезапись
if length(plans[i].students) >0 then
begin
form1.Memo1.Lines.add(Студенты зачисленные на специальность +plans[i].name+: );
for ii:=0 to length(plans[i].students)-1 do {цикл по зачисленным студентам на данную специальность}
begin
writeln(f, plans[i].students[ii].name); {записываем имя студента в файл}
end;
end
else
writeln(f, Студенты не зачислены); {сообщаем, если нет зачисленных студентов на данную специальность}
closefile(f); {закрываем файл}
end;
end;
{процедура загрузки данных (кнопка "Загрузка")}
procedure TForm1.Button1Click(Sender: TObject);
begin
open_file; {открытие и чтение файла данных}
display; {процедура отображения данных на форме}
end;
{процедура обработки данных (кнопка "Зачислить студентов")}
procedure TForm1.Button2Click(Sender: TObject);
var sname: shortstring;
i, ii, iii, ball: word;
popal: boolean;
begin
for i:=0 to length(student_kniga)-1 do {строим массив специальностей.}
begin
setlength(plans,i+1); {увеличиваем размерность массива на единицу}
plans[i].name:= student_kniga[i].profession; {запоминаем специальность}
end;
end;
for i:=0 to length(plans)-1 do {удаляем повторяющиеся специальности}
begin
sname:= plans[i].name; {запоминаем первую специальность для сравнения с последующими}
for ii:=i+1 to length(plans)-1 do
begin
if sname = plans[ii].name then plans[ii].name:= ; {если специальность повторяется обнуляем элемент массива спец}
end;
end;
for i:=0 to length(plans)-1 do {цикл по специальностям чтобы определить проходной балл для каждой}
begin
{если название спец-ти не пустое, выводим окно ввода данных о проходном балле на данную специальность}
if plans[i].name <> then plans[i].ball:= strtoint(InputBox(Введите проходной балл,Проходной балл для +plans[i].name+: ,));
end;
{в цикле определяется прошел студент на свою специальность или нет(по проходному баллу}
for i:=0 to length(student_kniga)-1 do
begin
ball:= {вычисляем набранный балл студентом}
strtoint(student_kniga[i].examen1) +
strtoint(student_kniga[i].examen2) +
strtoint(student_kniga[i].zachet);
for ii:=0 to length(plans)-1 do
begin
{проверка на соответствие текущей спец-ти и выбранной студентом}
if plans[ii].name = student_kniga[i].profession then {если совпадает, смотрим проходит студент по набранному баллу или нет}
if plans[ii].ball<=ball then
begin
setlength(plans[ii].students, length(plans[ii].students)+1); {увеличиваем размерность массива студентов на 1}
plans[ii].students[length(plans[ii].students)-1].name:= student_kniga[i].name; {добавляем студента в список зачисленных}
popal:=true; {запоминаем в переменную, что студент проходит}
end
else
popal:=false; {иначе смотрим на какую специальность может быть зачислен}
end;
if not(popal) then
begin
for iii:=0 to length(plans)-1 do {смотрим проходные баллы по специальнос