Автоматизована система "Облік паспортних даних"
Автоматизована система "Облік паспортних даних"
Міністерство освіти і науки України
Бердичівський коледж промисловості, економіки та права
Курсовий проект з дисципліни
«Технологія розробки програмного забезпечення»
спеціальності 5.05010301
«Розробка програмного забезпечення»
Тема
Автоматизована система
«Облік паспортних даних»
Бердичів 2009р.
Анотація
Курсовий проект, 67 с., 35 мал., 17 табл., 2 джерела, 3 додатки.
Дисципліна: «ТЕХНОЛОГІЯ РОЗРОБКИ ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ»
Тема: Автоматизована система «Облік паспортних даних»
У роботі описані процес і результати проектування автоматизованої системи «Облік паспортних даних», призначеної для автоматизації обліку паспортних даних.
Результат розробки оформлений у виді програмного пакету і комплекту супроводжувальної документації.
Подальший розвиток роботи можливий у бік поліпшення зовнішнього інтерфейсу ї адаптації програми до більшої області потенційного застосування.
Робота має навчальний характер і її впровадження для конкретного підприємства не виконувався.
Вступ
Автоматизація розрахункова - облікових задач у різних областях практичної діяльності є одним із основних напрямків застосування обчислювальної техніки і персональних комп'ютерів зокрема. На основі сукупності апаратних засобів і спеціалізованого прикладного програмного забезпечення будуються автоматизовані робочі місця спеціалістів різного профілю.
Однією із форм обліку для підприємств із різною формою діяльності є кадровий облік працівників.
Запропонований програмний засіб «АС Облік паспортних даних», призначений саме для автоматизації обліку паспортних даних на підприємстві, розроблений у відповідності до завдання на курсове проектування із дисципліни «Технологія розробки програмного забезпечення».
Основною метою даного курсового проекту є розробка розгорнутого технічного завдання на основі вивчення та аналізу заданої предметної області, розробка структур та вибір методів обробки даних, алгоритмів функціонування програмних модулів, забезпечення якісних показників роботи програми: створення зручного графічного інтерфейсу користувача, розробка інтегрованої довідкової системи та супроводжувальної документації, засобів для розгортання програмної системи в інформаційному середовищі користувачів.
Для реалізації поставленого завдання обрано сучасні інструментальні середовища і засоби програмування Borland Delphi 6.0, та відповідні засоби підтримки процесу розробки програм.
Не зважаючи на те, що проект носить навчальний характер, він має певне практичне значення і може бути застосований для автоматизації вказаної прикладної задачі на підприємствах.
1. Аналіз предметної області і постановка задачі на розробку програми
У відповідності до технічного завдання програма «Облік паспортних даних» повинна забезпечувати облік осіб і можливість отримання інформації, вибраної за певними критеріями, а також формування звітів у вигляді стандартизованих паперових документів.
Якщо вписується нова особа то у журнал реєстрації операцій вноситься відповідний запис.
При вибутті особи з паспортного обліку в журналі реєстрації операцій, вказується дата і причина про вибуття особи, прізвище та дані особи.
Для кожного нового особи заповнюється картка паспортного обліку, що представляє собою паперовий документ, у якому вказується:
- прізвище;
- ім'я;
- по батькові;
- дата видачі паспорта;
- рік народження;
- стать;
- адреса (вулиця, № будинку, квартира);
- серія та номер паспорта;
- ким виданий паспорт;
- військовозобов'язаний;
- фотографія;
- пенсіонер;
У відповідності до аналізу предметної області можна зробити висновок, що задача, яка підлягає автоматизації відноситься то складу типових аналітично - облікових задач і може бути вирішена з використанням програмних та інструментальних засобів, передбачених технічним завданням, а саме з використанням елементів файл - серверних баз даних.
2. Опис структур та методів обробки даних
2.1 Обґрунтування вибору методів та засобів обробки даних
Оскільки, у відповідності до технічного завдання і аналізу предметної області, розробка автоматизованої системи паспортних даних проводиться на основі принципів та елементів систем управління базами даних, то логічним є - збереження даних здійснювати у вигляді файлів таблиць бази даних певного типу, вибір і обробку інформації виконувати на основі запитів, для введення і відображення даних використовувати діалогові екранні форми, а вихідні паперові документи формувати у вигляді звітів.
Однією із сучасних універсальних інструментальних систем програмування є Borland Delphi 6, яка має розвинені засоби для програмування та обробки баз даних, і в той же час підтримує майже всі відомі формати даних, що при необхідності дозволить перевести створені файли даних на іншу програмну платформу.
Одним із самих розповсюджених форматів даних є формат таблиць баз даних Paradox, крім того обрана система програмування спеціалізована саме під цей формат і надає більше засобів для налаштування таблиць баз даних при їх створенні. Тому саме формат таблиць баз даних Paradox використовується в даній системі. Створення файлів таблиць бази даних та визначення їх структури здійснюється за допомогою утиліти Database Desktop, яка входить до складу програмного комплекту Delphi.
Для обробки даних на рівні запитів використовується мова SQL92, яка є стандартною мовою для побудови структурованих запитів в операційній системі Windows. Для створення звітів використовується генератор звітів QuickReport, компоненти якого представлені окремою вкладинкою програмного середовища Delphi.
Для забезпечення прискорення виконання операцій пошуку і вибірки даних, а також незалежності від шляху розташування фалів бази даних на дисках комп'ютерів користувачів, базі даних ставиться у співвідношення псевдонім (загальне ім'я бази даних), який створюється і обробляється за допомогою спеціалізованої утиліти BDE Administrator.
2.2 Опис структур даних
Як було зазначено вище основними структурними елементами даних є файли таблиць бази даних у форматі Paradox. Нижче наведено перелік цих файлів із вказівкою назви файлу, структури полів та пояснень, що до призначення файлу. Назва полів певної таблиці даних починаються з літери, яка співпадає з першою літерою назви відповідного файлу. Це забезпечує виключення того, що в різних таблицях будуть використані однакові назви полів, і в той же час вказує належність поля до певної таблиці. Для збереження файлів таблиць використовують каталог:
С:\Program Files\Pasp_st\DATA
Pasp_st.db - файл, який використовується для обліку даних про всіх осіб. Початкові дані заносяться в таблицю при реєстрації нової особи і можуть при необхідності редагуватися. Структура полів файлу Pasp_st.db наведена у таблиці 1.
Таблиця 1 Структура полів файлу Pasp_st.db
Назва поля
|
Тип
|
Інформаційний зміст
|
|
ID
|
+
|
Код
|
|
Prizvuge
|
Alpha
|
Прізвище
|
|
Imia
|
Alpha
|
Ім'я
|
|
Po_batkovi
|
Alpha
|
По батькові
|
|
Rik_nar
|
Date
|
Рік народження
|
|
Vik
|
Number
|
Вік
|
|
Stat
|
Alpha
|
Стать
|
|
Adress
|
Alpha
|
Адреса
|
|
Vylucia
|
Alpha
|
Вулиця
|
|
Nom_byd
|
Number
|
Номер будинку
|
|
Nom_kva
|
Number
|
Номер квартири
|
|
Ser_pasp
|
Alpha
|
Серія паспорта
|
|
Nom_pasp
|
Number
|
Номер паспорта
|
|
Data_vud_pasp
|
Date
|
Дата видачі паспорта
|
|
Kum_vud_pasp
|
Alpha
|
Ким виданий паспорт
|
|
Viiskovo_zobov
|
Alpha
|
Військовозобов'язаний
|
|
Photo
|
Graphic
|
Фото
|
|
Pensioner
|
Alpha
|
Пенсіонер
|
|
|
Таблиця 2 Структура полів файлу Vyl_sp.db
Назва поля
|
Тип
|
Інформаційний зміст
|
|
ID
|
+
|
Код
|
|
Adress
|
Alpha
|
Адреса
|
|
Nazva
|
Alpha
|
Назва
|
|
|
Таблиця 3 Структура полів файлу Tab_vub.db
Назва поля
|
Тип
|
Інформаційний зміст
|
|
ID
|
+
|
Код
|
|
Prizvuge
|
Alpha
|
Прізвище
|
|
Imia
|
Alpha
|
Ім'я
|
|
Po_batkovi
|
Alpha
|
По батькові
|
|
Rik_nar
|
Date
|
Рік народження
|
|
Vik
|
Number
|
Вік
|
|
Stat
|
Alpha
|
Стать
|
|
Adress
|
Alpha
|
Адреса
|
|
Vylucia
|
Alpha
|
Вулиця
|
|
Nom_byd
|
Number
|
Номер будинку
|
|
Nom_kva
|
Number
|
Номер квартири
|
|
Ser_pasp
|
Alpha
|
Серія паспорта
|
|
Nom_pasp
|
Number
|
Номер паспорта
|
|
Data_vud_pasp
|
Date
|
Дата видачі паспорта
|
|
Kum_vud_pasp
|
Alpha
|
Ким виданий паспорт
|
|
Viiskovo_zobov
|
Alpha
|
Військовозобов'язаний
|
|
Photo
|
Graphic
|
Фото
|
|
Pensioner
|
Alpha
|
Пенсіонер
|
|
Prucuna_vub
|
Alpha
|
Причина вибуття
|
|
Data_vub
|
Date
|
Дата вибуття
|
|
|
3. Опис алгоритму функціонування програмного забезпечення
3.1 Інформаційна модель системи
Рис. 3.1. Інформаційна модель системи
3.2. Модульна структура програмного засобу
Програма складається з набору програмних модулів, кожний з яких виконує одну чи декілька функцій. Модульна структура програми зображена на рис. 3.2. У таблиці 3.1. наведено призначення програмних модулів.
Мал. 3.2
Призначення програмних модулів Таблиця 3.1
№
|
Позначення
|
Призначення
|
|
1
|
p_st
|
Головний модуль програми. Містить головну форму і забезпечує перехід з однієї форми на іншу.
|
|
2
|
vyl
|
Модуль довідника вулиць.
|
|
3
|
pasp_st
|
Модуль введення та редагування даних.
|
|
4
|
Unit9
|
Модуль звіту «Картка паспортних даних».
|
|
5
|
Uni11
|
Модуль для введення додаткових даних.
|
|
6
|
Uni10
|
Модуль звіту «Довідка про прописку».
|
|
7
|
Unit12
|
Модуль, який містить дані про вибувших.
|
|
8
|
Unit7
|
Модуль, для вилучення вибувших.
|
|
9
|
Unit4
|
Модуль, для пошуку за прізвищем.
|
|
10
|
Unit5
|
Модуль, для пошуку за адресою.
|
|
11
|
Unit6
|
Модуль, для відображення списку пенсіонерів.
|
|
12
|
Unit8
|
Модуль звіту «Список пенсіонерів»
|
|
13
|
Unit2
|
Модуль, який містить довідку про розробника.
|
|
|
3.3 Опис програмних модулів
3.2.1 Модуль “P_st_”
Модуль P_st є головним модулем програми через який здійснюється зв'язок з іншими програмними модулями. Перехід на інші програмні модулі виконується з використанням системи меню. Екранна форма модуля в режимі виконання програми, з розкритим елементом меню зображена на рис.3.3.
Мал.3.3 Екранна форма модуля P_st в режимі виконання програми
Екранна форма модуля в режимі конструювання зображена на мал. 3.4
Мал. 3.4 Екранна форма модуля P_st в режимі конструювання
Програмна специфікація модуля P_st наведена у таблиці 3.2
Таблиця 3.2 Програмна специфікація модуля P_st
Компонент програми
|
Позначення
|
Зміст
|
|
Стандартні модулі
|
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, Menus;
|
Стандартні модулі, з якими встановлюється зв'язок
|
|
Візуальні компоненти
|
MainMenu1: TMainMenu;
|
Програмне меню, яке забезпечує перехід на інші програмні форми
|
|
|
N1: TMenuItem;
|
Пункт меню «Довідники»
|
|
|
N2: TMenuItem;
|
Підпункт «Вулиці» пункту меню Довідники
|
|
|
N3: TMenuItem;
|
Пункт меню «Операції»
|
|
|
N4: TMenuItem;
|
Підпункт «Введення даних» пункту меню Операції
|
|
|
N5: TMenuItem;
|
Пункт меню «Вибірка»
|
|
|
N6: TMenuItem;
|
Підпункт «Вибувші» пункту меню Вибірка
|
|
|
N7: TMenuItem;
|
Підпункт «Дані про вибувших» пункту меню Операції
|
|
|
N8: TMenuItem;
|
Підпункт «Пошук» пункту меню Вибірка
|
|
|
N9: TMenuItem;
|
Підпункт «Прізвище» підпункту Пошук меню Вибірка
|
|
|
N10: TMenuItem;
|
Підпункт «Адреса» підпункту Пошук меню Вибірка
|
|
|
N11: TMenuItem;
|
Підпункт «Пенсіонери» пункту меню Вибірка
|
|
|
N12: TMenuItem;
|
Пункт меню «Довідка»
|
|
|
N13: TMenuItem;
|
Підпункт «Про програму» пункту меню Довідка
|
|
|
N14: TMenuItem;
|
Підпункт «Про автора» пункту меню Довідка
|
|
Процедури
|
procedure N1Click(Sender: TObject);
|
Відкриваємо пункт меню «Довідники»
|
|
|
procedure N2Click(Sender: TObject);
|
Переходимо на форму довідника вулиць
|
|
|
procedure N3Click(Sender: TObject);
|
Відкриваємо пункт меню «Операції»
|
|
|
procedure N4Click(Sender: TObject);
|
Переходимо на форму введення даних
|
|
|
procedure N5Click(Sender: TObject);
|
Відкриваємо пункт меню «Вибірка»
|
|
|
procedure N6Click(Sender: TObject);
|
Переходимо на форму вилучення вибувших
|
|
|
procedure N7Click(Sender: TObject
|
Переходимо на форму перегляду даних про вибувших
|
|
|
procedure N8Click(Sender: TObject);
|
Відкриваємо підпункт меню «Пошук»
|
|
|
procedure N9Click(Sender: TObject);
|
Переходимо на форму для пошуку по прізвищу
|
|
|
procedure N10Click(Sender: TObject);
|
Переходимо на форму для пошуку за адресою
|
|
|
procedure N11Click(Sender: TObject);
|
Переходимо на форму для відображення пенсіонерів
|
|
|
procedure N12Click(Sender: TObject);
|
Відкриваємо пункт меню «Довідка»
|
|
|
procedure N13Click(Sender: TObject);
|
Переходимо на форму для перегляду довідки про програму
|
|
|
procedure N14Click(Sender: TObject);
|
Переходимо на форму для перегляду довідки про розробника
|
|
|
Програмний код модуля P_st наведено у Додатку 2.
Модуль pasp_st є одним з головних модулів тому що саме він підтримує введення нових даних в базу даних та видалення даних з бази даних. Введення виконується вручну з деяким використанням автоматизації процесу. Контроль за введенням даних частково лягає на користувача, а частково на комп'ютер. Також можна за допомогою цього модуля виконувати редагування даних. За допомогою даного модулю можна відобразити звіти «Картка паспортних даних» та «Довідка про прописку».
Екранна форма модуля в режимі виконання програми зображена на мал.3.5.
Мал.3.5. Екранна форма модуля pasp_st в режимі виконання програми
Екранна форма модуля pasp_st в режимі конструювання зображена на мал. 3.6.
Мал. 3.6 Екранна форма модуля pasp_st в режимі конструювання
Програмна специфікація модуля pasp_st наведена у таблиці 3.3
Таблиця 3.3 Програмна специфікація модуля pasp_st
Компонент програми
|
Позначення
|
Зміст
|
|
Стандартні модулі
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, DBCtrls, Grids, DBGrids, DBTables, Db, StdCtrls, Mask,DateUtils;
|
Стандартні модулі, з якими встановлюється зв'язок
|
|
Компоненти
|
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Label15: TLabel;
Label16: TLabel;
|
Написи на формі
|
|
|
DBEdit1: TDBEdit;
DBEdit2: TDBEdit;
DBEdit3: TDBEdit;
DBEdit4: TDBEdit;
DBEdit5: TDBEdit;
DBEdit10: TDBEdit;
DBEdit11: TDBEdit;
DBEdit9: TDBEdit;
DBEdit6: TDBEdit;
|
Поля введення даних
|
|
|
DBLookupComboBox1: TDBLookupComboBox;
|
Випливаючі списки даних з яких потрібно вибрати потрібне поле
|
|
|
DBNavigator1: TDBNavigator;
|
Навігатор по базі даних
|
|
|
DBImage1: TDBImage;
|
Об'єкт завантаження малюнка
|
|
|
DBGrid1: TDBGrid;
|
Таблиці відображення вмісту бази данних
|
|
|
BitBtn1: TBitBtn;
BitBtn3: TBitBtn;
BitBtn2: TBitBtn;
|
Кнопки виконання команд
|
|
|
DBComboBox1: TDBComboBox;
DBComboBox2: TDBComboBox;
DBComboBox3: TDBComboBox;
|
Поле даних зі списком
|
|
Процедури
|
procedure DBEdit4Change(Sender: TObject);
|
Процедура автоматичного розрахунку поля Вік
|
|
|
procedure BitBtn1Click(Sender: TObject);
|
Відкриває папку для загрузки фото
|
|
|
procedure BitBtn2Click(Sender: TObject);
|
Відкриває звіт паспортних даних
|
|
|
procedure FormCreate(Sender: TObject);
|
Активація форматів загрузки фото
|
|
|
procedure Edit1Change(Sender: TObject);
|
Пошук по першим літерам прізвища
|
|
|
procedure BitBtn3Click(Sender: TObject);
|
Відкриває звіт «Довідка про прописку»
|
|
|
procedure FormActivate(Sender: TObject);
|
Курсор на перше поле введення
|
|
|
procedure DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
|
Активація компонентів введення
|
|
|
Програмний код модуля Pasp_st наведено у Додатку 2.
Модуль Vyl - модуль довідника вулиць. За допомогою даного модуля можливо ввести в базу вулиць нову, раніше не записану вулицю, або при введенні використовувати вже занесені адреси.
Екранна форма модуля в режимі виконання програми зображена на мал.3.7.
Мал.3.7 Екранна форма модуля Vyl в режимі виконання програми
Екранна форма модуля в режимі конструювання зображена на мал. 3.8
Мал. 3.8 Екранна форма модуля Vyl в режимі конструювання
Програмна специфікація модуля Vyl наведена у таблиці 3.4
Таблиця 3.4
Компонент програми
|
Позначення
|
Зміст
|
|
Стандартні модулі
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, DBCtrls, Grids, DBGrids, DBTables, Db, StdCtrls, Mask,DateUtils;
|
Стандартні модулі, з якими встановлюється зв'язок
|
|
Компоненти
|
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
|
Написи на формі
|
|
|
DBEdit1: TDBEdit;
|
Поле для введення даних
|
|
|
DBNavigator1: TDBNavigator;
|
Навігатор по базі даних
|
|
|
DBImage1: TDBImage;
|
Об'єкт завантаження малюнка
|
|
|
DBGrid1: TDBGrid;
|
Таблиці відображення вмісту бази данних
|
|
|
DBComboBox1: TDBComboBox;
|
Поле даних зі списком
|
|
|
Програмний код модуля Vyl наведено у Додатку 2.
Модуль Unit4 - модуль пошуку даних за прізвищем. За допомогою даного модуля можливо вручну ввести потрібне прізвище і натиснути кнопку Пошук.
Екранна форма модуля в режимі виконання програми зображена на мал.3.9.
Мал.3.9. Екранна форма Unit4 режимі виконання
Екранна форма модуля Unit4 в режимі конструювання зображена на рис. 3.10
Мал.3.10. Екранна форма Unit4 режимі конструювання
Програмна специфікація модуля Unit4 наведена у таблиці 3.5
Таблиця 3.5
Компонент програми
|
Позначення
|
Зміст
|
|
Стандартні модулі
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, DBCtrls, Grids, DBGrids, DBTables, Db, StdCtrls, Mask,DateUtils;
|
Стандартні модулі, з якими встановлюється зв'язок
|
|
Компоненти
|
Label1: TLabel;
|
Написи на формі
|
|
|
Edit1: TEdit;
|
Поле для введення даних
|
|
|
Button1: TButton;
|
Кнопка пошуку
|
|
|
DBImage1: TDBImage;
|
Об'єкт завантаження малюнка
|
|
|
DBGrid2: TDBGrid;
|
Таблиці відображення вмісту бази даних
|
|
Процедури
|
procedure Button1Click(Sender: TObject);
|
Процедура пошуку
|
|
|
procedure FormCreate(Sender: TObject);
|
Оновлення таблиці
|
|
|
Програмний код модуля Unit4 наведено у Додатку 2.
Модуль Unit5 - модуль пошуку даних за адресою. За допомогою даного модуля можливо вручну ввести потрібне прізвище і натиснути кнопку Пошук.
Екранна форма модуля в режимі виконання програми зображена на мал.3.11.
Мал.3.11. Екранна форма Unit5 режимі виконання
Екранна форма модуля Unit5 в режимі конструювання зображена на рис. 3.12
Мал.3.12. Екранна форма Unit5 режимі конструювання
Програмна специфікація модуля Unit5 наведена у таблиці 3.6
Таблиця 3.6
Компонент програми
|
Позначення
|
Зміст
|
|
Стандартні модулі
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, DBCtrls, Grids, DBGrids, DBTables, Db, StdCtrls, Mask,DateUtils;
|
Стандартні модулі, з якими встановлюється зв'язок
|
|
Компоненти
|
Label1: TLabel;
|
Написи на формі
|
|
|
Edit1: TEdit;
|
Поле для введення даних
|
|
|
Button1: TButton;
|
Кнопка пошуку
|
|
|
DBImage1: TDBImage;
|
Об'єкт завантаження малюнка
|
|
|
DBGrid1: TDBGrid;
|
Таблиці відображення вмісту бази даних
|
|
Процедури
|
procedure Button1Click(Sender: TObject);
|
Процедура пошуку
|
|
|
procedure FormCreate(Sender: TObject);
|
Оновлення таблиці
|
|
|
Програмний код модуля Unit5 наведено у Додатку 2.
Модуль Unit6 - модуль пошуку і відображення списку пенсіонерів. За допомогою даного модуля можна визначити список пенсіонерів і вивести на принтер їх список.
Екранна форма модуля в режимі виконання програми зображена на мал.3.13.
Мал.3.13. Екранна форма Unit6 режимі виконання
Екранна форма модуля Unit6 в режимі конструювання зображена на рис. 3.14
Мал.3.14. Екранна форма Unit6 режимі конструювання
Програмна специфікація модуля Unit6 наведена у таблиці 3.7
Таблиця 3.7
Компонент програми
|
Позначення
|
Зміст
|
|
Стандартні модулі
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, DBCtrls, Grids, DBGrids, DBTables, Db, StdCtrls, Mask,DateUtils;
|
Стандартні модулі, з якими встановлюється зв'язок
|
|
Компоненти
|
Label1: TLabel;
|
Написи на формі
|
|
|
Edit1: TEdit;
|
Поле для введення даних
|
|
|
Button1: TButton;
BitBtn1: TBitBtn;
|
Кнопка пошуку
|
|
|
DBGrid1: TDBGrid;
|
Таблиці відображення вмісту бази даних
|
|
Процедури
|
procedure Button1Click(Sender: TObject);
|
Друк списку пенсіонерів
|
|
|
procedure FormCreate(Sender: TObject);
|
Оновлення таблиці
|
|
|
procedure BitBtn1Click(Sender: TObject);
|
Відображення списку пенсіонерів
|
|
|
Страницы: 1, 2
|