- •Содержание
- •Введение
- •1 Постановка задачи
- •2 Выбор и обоснование структур данных
- •2.1 Динамические структуры данных
- •2.2 Запись
- •2.3 Абстрактный тип данных «список»
- •3 Разработка алгоритма
- •Поиск по издательству Удаление Поиск по изданию
- •4 Тестирование
- •5 Руководство пользователя
- •Заключение
- •Приложение а листинг программы
5 Руководство пользователя
Для начала работы с программой необходимо запустить файл Project3forma. После чего на экране появится главное окно приложения.
Рисунок 5.1 – Главное окно приложения
Для просмотра всей информации об изданиях нужно нажать кнопку «Просмотреть весь список».
Рисунок 5.2 – Просмотр данных
Для просмотра всех периодических изданий одного издательства нужно на панели «Поиск по издательству» ввести название необходимого издательства и нажать кнопку «Поиск по издательству».
Рисунок 5.3 – Просмотр всех периодических изданий одного издательства
Для просмотра всех одноименных периодических изданий нужно на панели «Поиск по изданию» ввести название необходимого издания и нажать кнопку «Поиск по изданию». Издания выведутся на экран, отсортированными по дате.
Рисунок 5.4 – Просмотр всех одноименных периодических изданий
Для добавления периодического изданий нужно на панели «Добавление записи» ввести информацию о добавляемом издании и нажать кнопку «Добавить».
Рисунок 5.5 – Добавление периодического издания
Для корректирования информации о периодическом издании нужно на панели «Редактирование записи» ввести номер необходимого издания и нажать кнопку «Ок». На панели «Добавление записи» появится информация о соответствующем издании. Данная информация изменятся на необходимую, после чего на панели «Редактирование записи» нужно нажать кнопку «Редактировать».
Рисунок 5.6 – Редактирование периодического издания
Для удаления периодического изданий нужно на панели «Удаление записи» ввести номер удаляемого издания и нажать кнопку «Удалить».
Рисунок 5.7 – Удаление периодического издания
Для просмотра измененной информации нужно нажать кнопку «Просмотреть весь список».
Рисунок 5.8 – Просмотр измененной информации
Заключение
Результатом выполнения учебного проекта является приложение, позволяющее вести учет периодических изданий в библиотеке, в котором реализованы следующие функции:
- просмотр всех периодических изданий одного издательства;
- поиск всех номеров изданий по названию и их вывод на экран отсортированными по дате;
- добавление, удаление и корректировка записи из списка, а так же просмотр всего списка;
В программе использовались динамические списки.
Программа может быть улучшена путём добавления различных функций, например, выдача пользователю сообщений о типе допущенной им ошибки.
В ходе выполнения учебного проекта были закреплены знания по работе с динамическими списками и текстовыми файлами.
Приложение а листинг программы
unit Unit3_2;
interface
Type
PtQueue = ^Tqueue;
TQueue=record
number:integer; //номер издания
name_periodik:string; //название периодического издания
name_izdat:string; //наименование издательства
year:integer; //год издания
month:integer; //месяц издания
day:integer; //день издания
pt:PtQueue; //указатель на следующий элемент
end;
var
F : TextFile;
head: PtQueue;
procedure Queue;
implementation
{процедура создания списка}
procedure Queue;
var
next,p: PtQueue;
begin
//создание первого звена списка
new (head);
head^.pt:=nil;
next:=head;
readln(F,next^.number);
readln(F,next^.name_periodik);
readln(F,next^.name_izdat);
readln(F,next^.year);
readln(F,next^.month);
readln(F,next^.day);
//создание списка
while not Eof(F)do
begin
new (p);
next^.pt:=p;
readln(F,p^.number);
readln(F,p^.name_periodik);
readln(F,p^.name_izdat);
readln(F,p^.year);
readln(F,p^.month);
readln(F,p^.day);
p^.pt:=nil;
next:=p;
end;
end;
end.
unit Unit3forma;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,Unit3_2, Grids;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Memo1: TMemo;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Edit8: TEdit;
Edit9: TEdit;
Button7: TButton;
GroupBox1: TGroupBox;
Label11: TLabel;
GroupBox2: TGroupBox;
Label1: TLabel;
GroupBox3: TGroupBox;
Label2: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Label15: TLabel;
GroupBox4: TGroupBox;
Label3: TLabel;
GroupBox5: TGroupBox;
Label4: TLabel;
Label5: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{процедура вывода списка}
procedure TForm1.Button1Click(Sender: TObject);
procedure Print;
var
next: PtQueue;
begin
next:=head;
//прохождение по списку
while next<>nil do
begin
//вывод номера, названия издания и названия издательства
memo1.lines.add (IntToStr(next^.number));
memo1.lines.add (next^.name_periodik);
memo1.lines.add (next^.name_izdat);
if (next<>head) then
memo1.lines.add ('');
//вывод даты
memo1.Text:=memo1.Text+IntToStr(next^.day)+'.'+IntToStr(next^.month)+
+'.'+IntToStr(next^.year);
next:=next^.pt;
end;
end;
begin
memo1.Clear;
Print;
end;
{по созданию}
procedure TForm1.FormCreate(Sender: TObject);
begin
memo1.Clear;
//работа с текстовым файлом
AssignFile(F, 'библиотека.txt');
Reset(F);
//создание списка
Queue;
CloseFile(F);
end;
{процедура поиска данных по названию издательства}
procedure TForm1.Button2Click(Sender: TObject);
procedure PoiskPoIzdatelstvy;
var
next: PtQueue;
begin
next:=head;
//поиск названия издательства
while next<>nil do
begin
if Edit1.Text=next^.name_izdat then
begin
//вывод номера, названия издания и названия издательства
memo1.lines.add (IntToStr(next^.number));
memo1.lines.add (next^.name_periodik);
memo1.lines.add (next^.name_izdat);
if (next<>head) then
memo1.lines.add ('');
//вывод даты
memo1.Text:=memo1.Text+IntToStr(next^.day)+'.'+IntToStr(next^.month)+
+'.'+IntToStr(next^.year);
end;
next:=next^.pt;
end;
end;
begin
memo1.Clear;
PoiskPoIzdatelstvy;
Edit1.Clear;
end;
{процедура поиска данных по названию издания}
procedure TForm1.Button3Click(Sender: TObject);
var
headN: PtQueue;
{вывод отсортированных данных}
Procedure Print;
var
nextN:PtQueue;
begin
nextN:=headN^.pt^.pt;
//прохождение списка
while nextN<>nil do
begin
//вывод номера, названия издания и названия издательства
memo1.lines.add (IntToStr(nextN^.number));
memo1.lines.add (nextN^.name_periodik);
memo1.lines.add (nextN^.name_izdat);
if (nextN<>headN) then
memo1.lines.add ('');
//вывод даты
memo1.Text:=memo1.Text+IntToStr(nextN^.day)+'.'+IntToStr(nextN^.month)+
+'.'+IntToStr(nextN^.year);
nextN:=nextN^.pt;
end;
end;
{Сортировка нового списка по дате}
Procedure Sort;
var
min,temp,next,tec:PtQueue;
begin
tec:=headN^.pt;
//прохождение нового списка
while tec^.pt<>nil do
begin
next:=tec^.pt;
min:=tec^.pt;
while next<>nil do
begin
{нахождение наименьшего года}
if min^.year>next^.year then
min:=next;
if min^.year=next^.year then
begin
{для одного года, нахождение наименьшего месяца}
if min^.month>next^.month then
min:=next;
if min^.month=next^.month then
begin
{для одного год и месяца, нахождение наименьшего дня}
if min^.day>next^.day then
min:=next;
end;
end;
next:=next^.pt;
end;
//перемена местами информации записей списка
new(temp);
//сохранение значения записи на которую указывает min
temp^.number:=min^.number;
temp^.name_periodik:=min^.name_periodik;
temp^.name_izdat:=min^.name_izdat;
temp^.year:=min^.year;
temp^.month:=min^.month;
temp^.day:=min^.day;
//изменение значения записи на которую указывает min
min^.number:=tec^.pt^.number;
min^.name_periodik:=tec^.pt^.name_periodik;
min^.name_izdat:=tec^.pt^.name_izdat;
min^.year:=tec^.pt^.year;
min^.month:=tec^.pt^.month;
min^.day:=tec^.pt^.day;
//изменение значения записи на которую указывает tec^.pt
tec^.pt^.number:=temp^.number;
tec^.pt^.name_periodik:=temp^.name_periodik;
tec^.pt^.name_izdat:=temp^.name_izdat;
tec^.pt^.year:=temp^.year;
tec^.pt^.month:=temp^.month;
tec^.pt^.day:=temp^.day;
//удаление временного указателя
dispose(temp);
tec:=tec^.pt;
end;
end;
{создание нового списка с информацией о изданиях}
procedure PoiskPoIzdaniy;
var
next,nextN,p: PtQueue;
begin
next:=head;
new (headN);
headN^.pt:=nil;
nextN:=headN;
//поиск издания
while next<>nil do
begin
if Edit2.Text=next^.name_periodik then
begin
//создание звена списка с информацией об этом издании
new (p);
nextN^.pt:=p;
p^.number:=next^.number;
p^.name_periodik:=next^.name_periodik;
p^.name_izdat:=next^.name_izdat;
p^.year:=next^.year;
p^.month:=next^.month;
p^.day:=next^.day;
p^.pt:=nil;
nextN:=p;
end;
next:=next^.pt;
end;
//создание первого звена списка
nextN:=headN;
new(headN);
headN^.pt:=nextN;
end;
begin
memo1.Clear;
//вызов процедур для поиска данных по названию издания
PoiskPoIzdaniy;
Sort;
Print;
Edit2.Clear;
end;
{Добавление записи}
procedure TForm1.Button4Click(Sender: TObject);
procedure Add;
var
next,p: PtQueue;
k:integer;
begin
next:=head;
//поиск номера записи
k:=0;
while next^.pt<>nil do
begin
k:=k+1;
next:=next^.pt;
end;
//создание новой записи
new (p);
next^.pt:=p;
p^.number:=k+2;
p^.name_periodik:=Edit3.Text;
p^.name_izdat:=Edit4.Text;
p^.year:=StrToInt(Edit5.Text);
p^.month:=StrToInt(Edit6.Text);
p^.day:=StrToInt(Edit7.Text);
p^.pt:=nil;
next:=p;
end;
begin
memo1.Clear;
Add;
Edit3.Clear;
Edit4.Clear;
Edit5.Clear;
Edit6.Clear;
Edit7.Clear;
end;
{процедура удаления элемента очереди}
procedure TForm1.Button5Click(Sender: TObject);
procedure Delete;
var
next,q: PtQueue;
begin
next:=head;
//Проверка является ли удаляемая запись первой в списке
if StrToInt(Edit8.Text)=head^.number then
begin
q:=head;
head:=head^.pt;
next:=head;
dispose (q);
end
else
//Поиск записи
while next^.pt<>nil do
begin
if StrToInt(Edit8.Text)=next^.pt^.number then
begin
// Удаление записи
q:=next^.pt;
next^.pt:=next^.pt^.pt;
dispose (q);
end
else
next:=next^.pt;
end;
end;
begin
memo1.Clear;
Delete;
Edit8.Clear;
end;
{процедура1 редактирование списка}
procedure TForm1.Button6Click(Sender: TObject);
procedure Redactirovat1;
var
next: PtQueue;
begin
next:=head;
//поиск нужной записи
while next<>nil do
begin
if Edit9.Text=IntToStr(next^.number) then
begin
//сохранение в список измененной записи
next^.name_periodik:=Edit3.Text;
next^.name_izdat:=Edit4.Text;
next^.year:=StrToInt(Edit5.Text);
next^.month:=StrToInt(Edit6.Text);
next^.day:=StrToInt(Edit7.Text);
end;
next:=next^.pt;
end;
end;
begin
memo1.Clear;
Redactirovat1;
Edit9.Clear;
end;
{процедура2 редактирование списка}
procedure TForm1.Button7Click(Sender: TObject);
procedure Redactirovat2;
var
next: PtQueue;
begin
next:=head;
//Поиск нужной записи
while next<>nil do
begin
if Edit9.Text=IntToStr(next^.number) then
begin
// вывод исходной информации
Edit3.Text:=next^.name_periodik;
Edit4.Text:=next^.name_izdat;
Edit5.Text:=IntToStr(next^.year);
Edit6.Text:=IntToStr(next^.month);
Edit7.Text:=IntToStr(next^.day);
end;
next:=next^.pt;
end;
end;
begin
memo1.Clear;
Edit3.Clear;
Edit4.Clear;
Edit5.Clear;
Edit6.Clear;
Edit7.Clear;
Redactirovat2;
end;
end.