Разработка и стандартизация программных средств информационных технологий

Контрольная работа - Компьютеры, программирование

Другие контрольные работы по предмету Компьютеры, программирование

/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 {смотрим проходные баллы по специальнос