Читайте также:
|
|
8.2.1. Проект «Журнал группы»
Постановка задачи. В данном проекте составляется список студентов с возможностью его пополнения. Демонстрирует процесс добавления записи в файл, использование компонентов TComboBox и TRadioGroup (рис. 47).
Рис. 47. Проект «Журнал»
Реализация. Сначала создадим тип TStud для описания одной записи о студенте:
type TStud=record
fio: string[100]; // Фамилия, имя, отчество студента
group: string[20]; // группа
faculty: string[40]; // факультет
pol: string[10]; // пол
end;
Для записи фамилии используем компонент TEdit, для выбора группы и факультета – компоненты TComboBox. Для указания пола – компонент TRadioGroup. После того как все поля будут заполнены, надо записать эту запись в конец файла, если он существует, иначе создать новый файл.
var f: file of TStud; // Файл записей
stud: TStud;
// Щелчок на кнопке «Добавить»
procedure TForm1.Button1Click(Sender: TObject);
begin
with stud do
begin
fio:= Edit1.Text;
group:= ComboBox1.Text;
faculty:= ComboBox2.Text;
case RadioGroup1.ItemIndex of
0: pol:= 'Мужской';
1: pol:= 'Женский';
end;
end;
AssignFile(f, 'student');
if not FileExists('student') then
begin
Rewrite(f); // Открыть файл для записи, т. е. создать
write(f, stud); // Записать содержимое полей в файл
end
else
begin
Reset(f); // Файл существует
Seek(f, FileSize(f)); // Указатель записи в конец файла
write(f, stud);
end;
CloseFile(f); // Закрыть файл
end;
// Щелчок на кнопке «Просмотреть файл»
procedure TForm1.Button2Click(Sender: TObject);
var s:string;
begin
Memo1.Clear;
AssignFile(f, 'student');
Reset(f); // Открыть файл для чтения
while not eof(f) do
begin
Read(f,stud); // Прочитать одну запись
s:= stud.fio+' '+stud.group+' '+ stud.faculty+' '+ stud.pol;
Memo1.Lines.Add(s);
end;
end;
Задание. Создайте запись об игроке: имя, время игры, очки. Сделайте таблицу рекордов.
8.3. Файлы для проекта «Судоку»
Постановка задачи. В проекте «Судоку» предлагается несколько вариантов числовых таблиц, которые заранее создаются с помощью текстового редактора и записываются в файлы. Можно хранить все таблицы в одном файле. Цель данной задачи – скопировать таблицу из файла в двумерный массив и показать ее на форме. На рис. 48 приведен пример файла чисел для игры в «Судоку» без повторений по горизонталям и вертикалям.
Рис. 48. Файл для «Судоку»
Реализация. Для вывода таблицы чисел на форму сначала нарисуем поле с помощью процедуры DrawPole, которая была написана ранее (раздел 2.1.2). Перепишем числа из файла в двумерный массив mas, а затем из массива скопируем на форму.
Описание глобальных данных:
const n = 6;
x0 = 10;
y0 = 10;
dx = 30;
dy = 30;
var st: string[6];
f: textfile;
mas: array[1..n,1..n] of integer;
Копирование чисел из файла в таблицу и из таблицы на форму реализовано в процедуре zapolnenie ().
procedure zapolnenie(nf:string); // nf – имя файла
var k, c, i, j, x, y: integer;
st: string;
begin
AssignFile(f, nf);
Reset(f);
k:= 1;
while not Eof(f) and (k <= n) do
begin
Readln(f, st);
j:= 1;
for i:=1 to Length(st) do
begin
if st[i] <> ' ' then // Не равно пробелу
begin
c:= ord(st[i])-ord('0');
mas[k, j]:= c;
j:= j + 1;
end;
end;
k:= k + 1;
end;
CloseFile(f);
Form1.Canvas.Font.Color:=clblue;
Form1.Canvas.Font.Size:=16;
for i:=1 to n do
for j:=1 to n do
begin
x:= x0 + (j-1)*dx;
y:= y0 + (i-1)*dy;
Form1.Canvas.TextOut(x + 5, y + 5, IntToStr(mas[i, j]));
end;
end;
Код обработчика «Заполнить» приведен ниже:
procedure TForm1.Button1Click(Sender: TObject);
begin
DrawPole(n, dx, x0, y0);
zapolnenie('chisla.txt');
end;
Результат работы показан на рис. 49.
Рис. 49. Заполнение таблицы из файла
Задание 1. Сделайте так, чтобы таблица стала пригодной для игры, т. е. вместо некоторых чисел надо вывести пустые строки,
а в массиве – нули. Какие числа закрыть – выбирайте случайным образом или задайте некий алгоритм.
Задание 2. Сделайте проект «Судоку».
Дата добавления: 2015-08-20; просмотров: 58 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Просмотр текстовых файлов | | | Просмотр видеофильма с использованием |