program gostin;
{$APPTYPE CONSOLE}
uses
SysUtils, windows;
var
mas1: array[0..4] of string;
mas2: array[0..1, 0..9] of string;
s: string;
nom: byte;
function Rus(mes: string):string; // Перекодировка ANSI->OEM
// В ANSI русские буквы кодируются числами от 192 до 255,
// в ASCII - от 128 до 175 (А..Яа..п) и от 224 до 239 (р..я).
begin
SetLength(Result, Length(mes));
if Length(Result) > 0 then
AnsiToOem(PChar(mes), PChar(Result));
end;
function dos(mes: string): string; // Перекодировка OEM->ANSI
begin
SetLength(Result, Length(mes));
if Length(Result) > 0 then
OemToAnsi(PChar(mes), PChar(Result));
end;
procedure Zag;
var
f: TextFile;
i, j: integer;
s0, s1: string;
begin
if not FileExists('Gostin.txt') then
begin
writeln(rus('Файла Gostin.txt не существует'));
Exit;
end;
AssignFile(f, 'Gostin.txt');
Reset(f);
Readln(f, s0);
for i:= 0 to 4 do
begin
Readln(f, s0);
delete(s0, 1, 2);
mas1[i]:= s0;
end;
Readln(f, s0);
for i:= 0 to 9 do
begin
Readln(f, s0);
While s0[1] <> ' ' do
delete(s0, 1, 1);
delete(s0, 1, 1);
s1:= '';
for j:= 1 to Length(s0) do
if s0[j] <> ',' then
s1:= s1 + copy(s0, j, 1)
else
break;
mas2[0, i]:= s1;
While s0[1] <> ',' do
delete(s0, 1, 1);
delete(s0, 1, 1);
mas2[1, i]:= s0;
end;
CloseFile(f);
end;
procedure Find;
var
s0, s1: string;
i: integer;
fnd: boolean;
begin
{readln(s);}
fnd:= false;
for i := 0 to 4 do
if (Pos(s, mas1[i]) <> 0) AND ((mas1[i][length(s) + 1] = ' ')
OR (length(mas1[i]) = length(s))
OR (mas1[i][length(s) + 1] = '.')) then
begin
if fnd then
begin
writeln(rus('Таких жильцов несколько! Введите инициалы жильца'));
readln(s0);
s0:= dos(s0);
s:= s + ' ' + s0;
Find;
exit;
end;
s1:= rus('Жилец с фамилией ' + s + ' проживает в номере ') + IntToStr(i + 1);
fnd:= true;
end;
for i:= 0 to 9 do
begin
if (Pos(s, mas2[0, i]) <> 0) AND ((mas2[0, i][length(s) + 1] = ' ')
OR (length(mas2[0, i]) = length(s))
OR (mas2[0, i][length(s) + 1] = '.')) then
begin
if fnd then
begin
writeln(rus('Таких жильцов несколько! Введите инициалы жильца'));
readln(s0);
s0:= dos(s0);
s:= s + ' ' + s0;
Find;
exit;
end;
s1:= rus('Жилец с фамилией ' + s + ' проживает в номере ') + IntToStr(i + 6);
fnd:= true;
end;
if (Pos(s, mas2[1, i]) <> 0) AND ((mas2[1, i][length(s) + 1] = ' ')
OR (length(mas2[1, i]) = length(s))
OR (mas2[1, i][length(s) + 1] = '.')) then
begin
if fnd then
begin
writeln(rus('Таких жильцов несколько! Введите инициалы жильца'));
readln(s0);
s0:= dos(s0);
s:= s + ' ' + s0;
Find;
exit;
end;
s1:= rus('Жилец с фамилией ' + s + ' проживает в номере ') + IntToStr(i + 6);
fnd:= true;
end;
end;
if not fnd then
writeln(rus('Жильца с фамилией ' + s + ' нет'))
else
begin
writeln(s1);
end;
end;
procedure spisok;
var
i: integer;
begin
writeln(rus('Одноместные номера'));
for i:= 0 to 4 do
writeln('#' + IntToStr(i + 1) + ' ' + rus(mas1[i]));
writeln('');
writeln(rus('Двухместные номера'));
for i:= 0 to 9 do
writeln('#' + IntToStr(i + 6) + ' ' + rus(mas2[0, i]) + ',' + rus(mas2[1, i]));
end;
procedure save;
var
f: TextFile;
i: integer;
begin
AssignFile(f, 'Gostin.txt');
Rewrite(f);
Writeln(f, '[1]');
for i := 0 to 4 do
Writeln(f, IntToStr(i + 1) + ' ' + mas1[i]);
Writeln(f, '[2]');
for i := 0 to 9 do
Writeln(f, InttoStr(i + 6) + ' ' + mas2[0, i] + ',' + mas2[1, i]);
CloseFile(f);
end;
procedure edit;
var
x, j: integer;
s0, s1: string;
begin
writeln(rus('Введите номер комнаты'));
readln(x);
if x < 6 then
begin
writeln(rus('В этом номере проживают ') + rus(mas1[x - 1]));
writeln(rus('Введите Фамилии и инициалы новых жильцов'));
readln(s0);
s0:= dos(s0);
mas1[x - 1]:= s0;
{spisok;}
end
else
begin
writeln(rus('В этом номере проживают ') + rus(mas2[0, x - 6]) + ', ' + rus(mas2[1, x - 6]));
writeln(rus('Введите Фамилии и инициалы новых жильцов'));
readln(s0);
s0:= dos(s0);
for j:= 1 to Length(s0) do
if s0[j] <> ',' then
s1:= s1 + copy(s0, j, 1)
else
break;
mas2[0, x - 6]:= s1;
While s0[1] <> ',' do
delete(s0, 1, 1);
delete(s0, 1, 1);
mas2[1, x - 6]:= s0;
{spisok; }
end;
save;
end;
procedure vubor;
begin
writeln(rus('Выберите нужную операцию'));
writeln(rus('1: Список жильцов'));
writeln(rus('2: Изменить жильца'));
writeln(rus('3: Сохранить список жильцов'));
writeln(rus('4: Поиск жильца'));
writeln(rus('5: Выход'));
readln(nom);
Case nom of
1: spisok;
2: edit;
3: save;
4: begin
writeln(rus('Введите фамилию жильца'));
readln(s);
s:= dos(s);
Find;
end;
5: Exit;
end;
writeln('');
vubor;
end;
begin
zag;
vubor;
end.
program gostin;
{$APPTYPE CONSOLE}
uses
SysUtils, Windows;
var
mas1: array[0..4] of string; // Жильцы по одноместным номерам
mas2: array[0..1, 0..9] of string; // Жильцы по двухместным номерам
s: string;
nom: byte; // Выбор меню
function Rus(mes: string):string; // Перекодировка ANSI->OEM, что бы не было кракозябров на экране
// В ANSI русские буквы кодируются числами от 192 до 255,
// в ASCII для dos - от 128 до 175 (А..Яа..п) и от 224 до 239 (р..я).
begin
SetLength(Result, Length(mes)); // Устанавливаем длину выходной строки равной входящей
if Length(Result) > 0 then // Если длина больше 0 перекодируем строку
AnsiToOem(PChar(mes), PChar(Result));
end;
function Dos(mes: string): string; // Перекодировка OEM->ANSI, что бы не было кракозябров после ввода строки
begin
SetLength(Result, Length(mes)); // Устанавливаем длину выходной строки равной входящей
if Length(Result) > 0 then // Если длина больше 0 перекодируем строку
OemToAnsi(PChar(mes), PChar(Result));
end;
procedure Zag; // Процедура загрузки данных из файла
var
f: TextFile;
i, j: integer;
s0, s1: string;
begin
if not FileExists('Gostin.txt') then // Проверяем существование файла
begin
writeln(rus('Файла Gostin.txt не существует'));
Exit; // Выход из процедуры
end;
AssignFile(f, 'Gostin.txt'); // Связали файловую переменную с файлом
Reset(f); // Встали на начало файла
Readln(f, s0); // Считываем одну строку
for i:= 0 to 4 do // Загружаем данные по одноместным номерам
begin
Readln(f, s0); // Считываем строку
delete(s0, 1, 2); // Удаляем первые два символа
mas1[i]:= s0; // Записали в массив
end;
Readln(f, s0); // Считали строку
for i:= 0 to 9 do // Загружаем данные по двухместным номерам
begin
Readln(f, s0); // Считали строку
While s0[1] <> ' ' do // Делаем пока не дойдём до пробела
delete(s0, 1, 1); // Удаляем первый символ
delete(s0, 1, 1); // Удаляем первый символ
s1:= '';
for j:= 1 to Length(s0) do
if s0[j] <> ',' then
s1:= s1 + copy(s0, j, 1) // Копируем символы пока не дойдём до символа ,
else
break; // Досрочный выход из цикла
mas2[0, i]:= s1; // Записали в массив строку
While s0[1] <> ',' do // Удаляем первый символ пока не дойдём до символа ,
delete(s0, 1, 1);
delete(s0, 1, 1); // Удаляем первый символ
mas2[1, i]:= s0; // Записали строку в массив
end;
CloseFile(f); // Закрыли файл
end;
procedure Find; // Процедура поиска жильца
var
s0, s1: string;
i: integer;
fnd: boolean;
begin
fnd:= false;
for i := 0 to 4 do // Ищем по одноместным номерам
if (Pos(s, mas1[i]) <> 0) AND ((mas1[i][length(s) + 1] = ' ')
OR (length(mas1[i]) = length(s))
OR (mas1[i][length(s) + 1] = '.')) then
{Нашли вхождение фамилии в массиве}
begin
if fnd then
begin
writeln(rus('Таких жильцов несколько! Введите инициалы жильца'));
readln(s0); // Запомнили введёные данные с клавиатуры
s0:= dos(s0); // Перекодировали строку
s:= s + ' ' + s0; // Добавили к фамилии инициалы
Find; // Запуск процедуры поиска с начала
exit; // Выход из процедуры
end;
s1:= rus('Жилец с фамилией ' + s + ' проживает в номере ') + IntToStr(i + 1);
fnd:= true;
end;
for i:= 0 to 9 do // Ищем по двухместным номерам
begin
if (Pos(s, mas2[0, i]) <> 0) AND ((mas2[0, i][length(s) + 1] = ' ')
OR (length(mas2[0, i]) = length(s))
OR (mas2[0, i][length(s) + 1] = '.')) then
{Нашли вхождение фамилии в массиве}
begin
if fnd then
begin
writeln(rus('Таких жильцов несколько! Введите инициалы жильца'));
readln(s0); // Запомнили введёные данные с клавиатуры
s0:= dos(s0); // Перекодировали строку
s:= s + ' ' + s0; // Добавили к фамилии инициалы
Find; // Запуск процедуры поиска с начала
exit; // Выход из процедуры
end;
s1:= rus('Жилец с фамилией ' + s + ' проживает в номере ') + IntToStr(i + 6);
fnd:= true;
end;
if (Pos(s, mas2[1, i]) <> 0) AND ((mas2[1, i][length(s) + 1] = ' ')
OR (length(mas2[1, i]) = length(s))
OR (mas2[1, i][length(s) + 1] = '.')) then
{Нашли вхождение фамилии в массиве}
begin
if fnd then
begin
writeln(rus('Таких жильцов несколько! Введите инициалы жильца'));
readln(s0); // Запомнили введёные данные с клавиатуры
s0:= dos(s0); // Перекодировали строку
s:= s + ' ' + s0; // Добавили к фамилии инициалы
Find; // Запуск процедуры поиска с начала
exit; // Выход из процедуры
end;
s1:= rus('Жилец с фамилией ' + s + ' проживает в номере ') + IntToStr(i + 6);
fnd:= true;
end;
end;
if not fnd then
writeln(rus('Жильца с фамилией ' + s + ' нет')) // Вывод результата поиска
else
begin
writeln(s1); // Вывод результата поиска
end;
end;
procedure spisok; // Процедура вывода списка всех жильцов
var
i: integer;
begin
writeln(rus('Одноместные номера'));
for i:= 0 to 4 do // Выводим по одноместным
writeln('#' + IntToStr(i + 1) + ' ' + rus(mas1[i]));
writeln(''); // Вывели на экран пустую строку
writeln(rus('Двухместные номера'));
for i:= 0 to 9 do // Выводим по двухместным
writeln('#' + IntToStr(i + 6) + ' ' + rus(mas2[0, i]) + ',' + rus(mas2[1, i]));
end;
procedure save; // Процедура сохранения списка жильцов в файл
var
f: TextFile;
i: integer;
begin
AssignFile(f, 'Gostin.txt'); // Связали файловую переменную с файлом
Rewrite(f); // Открыли файл для перезаписи
Writeln(f, '[1]'); // Записали идентификатор одноместных номеров
for i := 0 to 4 do // Записали данные по одноместным
Writeln(f, IntToStr(i + 1) + ' ' + mas1[i]);
Writeln(f, '[2]'); // Записали идентификатор двухместных
for i := 0 to 9 do // Записали данные по двухместным
Writeln(f, InttoStr(i + 6) + ' ' + mas2[0, i] + ',' + mas2[1, i]);
CloseFile(f); // Закрыли файл
end;
procedure edit; // Процедура редактирования жильцов
var
x, j: integer;
s0, s1: string;
begin
writeln(rus('Введите номер комнаты'));
readln(x); // Сохранили введённый номер
if x < 6 then
begin // По одноместным
writeln(rus('В этом номере проживают ') + rus(mas1[x - 1]));
writeln(rus('Введите Фамилии и инициалы новых жильцов'));
readln(s0); // Сохранили фамилию жильца
s0:= dos(s0); // Перекодировали строку
mas1[x - 1]:= s0; // Записали в массив
end
else
begin // По двухместным
writeln(rus('В этом номере проживают ') + rus(mas2[0, x - 6]) + ', ' + rus(mas2[1, x - 6]));
writeln(rus('Введите Фамилии и инициалы новых жильцов'));
readln(s0); // Сохранили фамилию жильца
s0:= dos(s0); // Перекодировали строку
for j:= 1 to Length(s0) do
if s0[j] <> ',' then
s1:= s1 + copy(s0, j, 1) // Копируем символы пока не дойдём до символа ,
else
break; // Досрочный выход из цикла
mas2[0, x - 6]:= s1; // Записали в массив
While s0[1] <> ',' do
delete(s0, 1, 1); // Удаляем первый символ пока не дойдём до символа ,
delete(s0, 1, 1); // Удаляем первый символ
mas2[1, x - 6]:= s0; // Записали в массив
end;
save; // Вызов процедуры сохранения списка жильцов
end;
procedure vubor; // Процедура выбора меню
begin
writeln(rus('Выберите нужную операцию'));
writeln(rus('1: Список жильцов'));
writeln(rus('2: Изменить жильца'));
writeln(rus('3: Сохранить список жильцов'));
writeln(rus('4: Поиск жильца'));
writeln(rus('5: Выход'));
readln(nom); // Запомнили номер пункта меню
Case nom of // Выбор номера меню из списка
1: spisok; // Вызов процедуры вывода списка жильцов
2: edit; // Вызов процедуры редактирования списка жильцов
3: save; // Вызов процедуры сохранения в файл списка жильцов
4: begin
writeln(rus('Введите фамилию жильца'));
readln(s); // Запомнили введёную фамилию жильца
s:= dos(s); // Перекодировали строку
Find; // Вызов процедуры вывода списка жильцов
end;
5: Exit; // Выход из процедуры
end;
writeln('');
vubor; // Вызов процедуры выбора меню
end;
begin
zag; // Вызов процедуры загрузки списка жильцов
vubor; // Вызов процедуры выбора меню
end.
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.