Помощь в написании студенческих работ
Антистрессовый сервис

Заключение. 
Программа "электронная сваха" для службы знакомств

РефератПомощь в написанииУзнать стоимостьмоей работы

Uses CRT, graph; {подключаем модуль CRT для работы с экраном, и граф для работы с графикой}. Nom:=1;{Присваеваем начальное значение переменной для получения порядкового номера}. По значению поля «пол» выбираем процедуру вствки в соответсвующий список}. Writeln ('—————————————————————————————————————'); Writeln ('—————————————————————————————————————'); Writeln… Читать ещё >

Заключение. Программа "электронная сваха" для службы знакомств (реферат, курсовая, диплом, контрольная)

В процессе разработки данного программного обеспечения были получены навыки по работе с динамическими списками.

По итогам работы можно сделать следующие выводы:

При необходимости выделения и уничтожения ячеек памяти под данные в процессе выполнения программы целесообразно использование динамических списков.

Использование языка Pascal в наши дни связано с определенными проблемами (несовместимости различных сред с некоторыми ОС и друг с другом).

Литература

  • 1. «Основы программирования» С. Окулов 2002г
  • 2. К. Йенсен, Н. Вирт «Паскаль Руководство для пользователя»
  • 3. С. Н. Лукин «Turbo Pascal 7.0. Самоучитель для начинающих»
  • 4. Никита Культин «Программирование в Turbo Pascal 7.0 и Delphi»
  • 5. Ю. Л. Кетков, А. Ю. Кетков «Свободное программное обеспечение. FREE PASCAL для студентов и школьников»
  • 6. Культин Н. Основы программирования в Delphi 7

Приложение 1

Листинг программы.

program KRES;

Uses CRT, graph; {подключаем модуль CRT для работы с экраном, и граф для работы с графикой}.

Type.

PointerKandidat=^ZAP;

ZAP = Record {Запись для формирования списков женихов и невест}.

NomPP:Integer; {Номер по порядку}.

FirstName:String[15]; {Фамилия}.

Name:String[15]; {Имя}.

Pol:Char; {Пол}.

FlagVib: Boolean; {Признак, что кандидат выбран}.

MyData:record {Запись о данных кандидата}.

Vz, Rst, Vs: Integer; {Возраст, рост, вес}.

end;

Critery:record {Запись — требования к партнеру}.

VzMin, VzMax: Integer;

RstMin, RstMax: Integer;

VsMin, VsMax: Integer;

end;

PredKond, SledKond: PointerKandidat; {Указатели на пердыдущий и следующий эл.}.

end;

Var.

ZhenihList, NevestaList: PointerKandidat; {Указатели на первые элементы списков}.

{Процедура заполнения формы кандидата}.

procedure FormKondidat (x, y: Integer;PKond:PointerKandidat);

Var x1, y1:integer;

begin.

x1:=x;

y1:=y;

{Выводим построчно форму для заполнения}.

GotoXY (x1,y1);

Write ('—-Dannie o kondidate—-');

Inc (y1);

GotoXY (x1,y1);

Write ('Pol (m — muzh, z — zhen):');

Inc (y1);

GotoXY (x1,y1);

Write ('Familiya :');

Inc (y1);

GotoXY (x1,y1);

Write ('Imya :');

Inc (y1);

GotoXY (x1,y1);

Write ('Vozrast :');

Inc (y1);

GotoXY (x1,y1);

Write ('Rost :');

Inc (y1);

GotoXY (x1,y1);

Write ('Ves :');

{Напротив каждой строки формы считываем значения}.

y:=y+1;

x:=x+25;

repeat {Цикл ввод пола}.

GotoXY (x, y);

ClrEol; {Очистка строки от позиции курсора}.

Readln (PKond^.pol);

if (PKond^.pol'm') AND (PKond^.pol'z') then.

begin.

GotoXY (x, y);

Write ('Nevernoe znachenie! Press anykey.');

ReadKey;

end;

Until (PKond^.pol='m') OR (PKond^.pol='z');

Inc (y);

GotoXY (x, y);

Readln (PKond^.FirstName);

Inc (y);

GotoXY (x, y);

Readln (PKond^.Name);

Inc (y);

GotoXY (x, y);

Readln (PKond^.MyData.Vz);

Inc (y);

GotoXY (x, y);

Readln (PKond^.MyData.Rst);

Inc (y);

GotoXY (x, y);

Readln (PKond^.MyData.Vs);

Inc (y);

{Продолжение заполнения формы}.

Inc (y1);

Inc (y1);

GotoXY (x1,y1);

Write ('Dlya prodolgeniya nazhmite lubuj klavishu.');

GotoXY (x1,y1);

ReadKey;

ClrEol;{Очистка строки от позиции курсора}.

Inc (y1);

GotoXY (x1,y1);

{Вывод формы для заполнения требований к партнеру}.

Write ('-Trebovaniya k partneru-');

Inc (y1);

GotoXY (x1,y1);

Write ('Minimalnij vozrast :');

Inc (y1);

GotoXY (x1,y1);

Write ('Maximalnij vozrast :');

Inc (y1);

GotoXY (x1,y1);

Write ('Minimalnij rost :');

Inc (y1);

GotoXY (x1,y1);

Write ('Maximalnij rost :');

Inc (y1);

GotoXY (x1,y1);

Write ('Minimalnij ves :');

Inc (y1);

GotoXY (x1,y1);

Write ('Maximalnij ves :');

{Считываем требования к партнеру}.

y:=y+3;

GotoXY (x, y);

Readln (PKond^.Critery.VzMin);

Inc (y);

GotoXY (x, y);

Readln (PKond^.Critery.VzMax);

Inc (y);

GotoXY (x, y);

Readln (PKond^.Critery.RstMin);

Inc (y);

GotoXY (x, y);

Readln (PKond^.Critery.RstMax);

Inc (y);

GotoXY (x, y);

Readln (PKond^.Critery.VsMin);

Inc (y);

GotoXY (x, y);

Readln (PKond^.Critery.VsMax);

Inc (y);

end;

{Процедура добовления элемента в список женихов}.

procedure IncludeZhenih (PZhenih:PointerKandidat);

Var VPointer: PointerKandidat;

begin.

if ZhenihList=nil then ZhenihList:=PZhenih {Если список женихов пустой}.

else.

begin.

VPointer:=ZhenihList;

{Добовление осуществляем по значению поля «Фамилия» }.

{Продвигаемся вперд пока значение фамилии доб. эл. больше}.

While (VPointer^.FirstName.

VPointer:=VPointer^.SledKond;

{Если вставляем на первое место}.

if (VPointer^.PredKond=nil) AND (VPointer^.FirstName>=PZhenih^.FirstName) then.

begin.

PZhenih^.SledKond:=VPointer;

VPointer^.PredKond:=PZhenih;

ZhenihList:=PZhenih;

end.

else.

{Если вставляем в конец списка}.

if (VPointer^.SledKond=nil) AND (VPointer^.FirstName<=PZhenih^.FirstName) then.

begin.

PZhenih^.PredKond:=VPointer;

VPointer^.SledKond:=PZhenih;

end.

else.

{Если вставляем в середину списка}.

begin.

PZhenih^.SledKond:=VPointer;

VPointer^.PredKond^.SledKond:=PZhenih;

PZhenih^.PredKond:=VPointer^.PredKond;

VPointer^.PredKond:=PZhenih;

end.

end;

Writeln ('—Zhenih dobavlen—');

end;

{Процедура добовления элемента в список невест}.

procedure IncludeNevesta (PNevesta:PointerKandidat);

Var VPointer: PointerKandidat;

begin.

if NevestaList=nil then NevestaList:=PNevesta {Если список женихов пустой}.

else.

begin.

VPointer:=NevestaList;

{Добовление осуществляем по значению поля «Фамилия» }.

{Продвигаемся вперд пока значение фамилии доб. эл. больше}.

While (VPointer^.FirstName<=PNevesta^.FirstName) AND (VPointer^.SledKondnil) do.

VPointer:=VPointer^.SledKond;

{Если вставляем на первое место}.

if (VPointer^.PredKond=nil) AND (VPointer^.FirstName>=PNevesta^.FirstName) then.

begin.

PNevesta^.SledKond:=VPointer;

VPointer^.PredKond:=PNevesta;

NevestaList:=PNevesta;

end.

else.

{Если вставляем в конец списка}.

if (VPointer^.SledKond=nil) AND (VPointer^.FirstName.

begin.

PNevesta^.PredKond:=VPointer;

VPointer^.SledKond:=PNevesta;

end.

else.

{Если вставляем в середину списка}.

begin.

PNevesta^.SledKond:=VPointer;

VPointer^.PredKond^.SledKond:=PNevesta;

PNevesta^.PredKond:=VPointer^.PredKond;

VPointer^.PredKond:=PNevesta;

end.

end;

Writeln ('—Nevesta dobavlena—');

end;

{Процедура добавления кандидата}.

procedure AddKondidat;

Var PKond: PointerKandidat;

begin.

ClrScr;

Writeln ('Dobovlenie kondidata.');

new (PKond);{Выделяем помять под новый элемент}.

FormKondidat (1,2,PKond); {Вызываем процедуру заполнения формы кандидата}.

PKond^.PredKond:=nil;

PKond^.SledKond:=nil;

{По значению поля «пол» выбираем процедуру вствки в соответсвующий список}.

if (PKond^.pol='m') then IncludeZhenih (PKond).

else IncludeNevesta (PKond);

Writeln ('Dlya dobavleniya ocherednogo elementa nagmite «1» ,');

Write ('dlya vihoda v glavnoe menu nazhmite vvod:');

end;

{Процедура вывод на экран информации о кандидате}.

procedure WriteKond (x, y: Integer; PKond: PointerKandidat);

begin.

with PKond^do.

begin.

GotoXY (x, y);

Write ('|', NomPP);

GotoXY (x+4,y);

Write ('|', FirstName);

GotoXY (x+19,y);

Write ('|', Name);

GotoXY (x+34,y);

Write ('|', MyData. Vz);

Write ('(', Critery. VzMin,'/', Critery. VzMax,')');

GotoXY (x+47,y);

Write ('|', MyData. Rst);

Write ('(', Critery. RstMin,'/', Critery. RstMax,')');

GotoXY (x+60,y);

Write ('|', MyData. Vs);

Write ('(', Critery. VsMin,'/', Critery. VsMax,')');

GotoXY (x+73,y);

Writeln ('|');

Writeln ('—————————————————————————————————————');

end;

end;

procedure WriteShapka;

begin.

Writeln ('—————————————————————————————————————');

Writeln ('| N | Familiya | Imya | Vozrast | Rost | Ves |');

Writeln ('|p/p| | | | sm | kg |');

Writeln ('—————————————————————————————————————');

end;

{Процедура вывода списка на экран}.

procedure Show (PList:PointerKandidat);

Var x, y, nom:Integer;

begin.

if (PList=nil)then Writeln ('Spisok pust!').

else.

begin.

x:=1;{Задаем координаты для установки курсора}.

y:=6;

nom:=1;{Присваеваем начальное значение переменной для получения порядкового номера}.

WriteShapka;

{Цикл вывода списка}.

repeat.

PList^.NomPP:=nom;

WriteKond (x, y, PList);

PList:=PList^.SledKond;

y:=y+2;

x:=1;

if ((nom mod 10) = 0) then.

begin.

Write ('Dlya prodolzheniya nazhmite lubuj klavishu:');

ReadKey;

ClrScr;

WriteShapka;

x:=1;

y:=6;

end;

nom:=nom+1;

until PList=nil;

end;

end;

{Процедура просмотра списков}.

procedure ShowList;

Var VPointer: PointerKandidat;

key:char;

begin.

ClrScr;

Writeln ('Viberite spisok dlya prosmotra.');

Writeln ('1. Spisok zhenihov.');

Writeln ('2. Spisok nevest.');

key:=ReadKey;

if (key='1') then {Выбор списка для просмотра}.

begin.

ClrScr;

Writeln ('Zenihi');

VPointer:=ZhenihList;

Show (VPointer);

end;

if (key='2') then.

begin.

ClrScr;

Writeln ('Nevesti');

VPointer:=NevestaList;

Show (VPointer);

end;

if (key'1') AND (key'2') then.

begin.

ClrScr;

Writeln ('Vi sdelali ne pravilnii vibor! Dlya povtora nazhmite «1» .');

end;

Write ('Dlya vihoda v glavnoe menu nazhmite vvod:');

end;

{Процедура вывода на экран пар}.

procedure VivodPar (x, y, counter:Byte;PZhenih, PNevesta: PointerKandidat);

begin.

if (counter=1) OR (((counter-1) mod 10) = 0) then.

begin.

ClrScr;

Writeln ('————————————————————————————————————');

Writeln ('| | |_Critery (Trebovaniya k partnery)__|');

Writeln ('| N | Para | Vozrast | Rost (sm) | Ves (kg) |');

Writeln ('|p/p| |(min/max)| (min/max) | (min/max) |');

Writeln ('————————————————————————————————————');

end;

{Вывод жениха}.

GotoXY (x, y);

Write ('|', counter);

GotoXY (x+4,y);

Write ('|Zhenih: ', PZhenih^.FirstName,' ', PZhenih^.Name[1],'.');

GotoXY (x+36,y);

Write ('|', PZhenih^.MyData.Vz);

{kriterii}.

GotoXY (x+39,y);

Write ('(', PZhenih^.Critery.VzMin,'/', PZhenih^.Critery.VzMax,')');

GotoXY (x+46,y);

Write ('|', PZhenih^.MyData.Rst);

{kriterii}.

GotoXY (x+50,y);

Write ('(', PZhenih^.Critery.RstMin,'/', PZhenih^.Critery.RstMax,')');

GotoXY (x+59,y);

Write ('|', PZhenih^.MyData.Vs);

{kriterii}.

GotoXY (x+62,y);

Write ('(', PZhenih^.Critery.VsMin,'/', PZhenih^.Critery.VsMax,')');

GotoXY (x+71,y);

Write ('|');

{Вывод невесты}.

Inc (y);

GotoXY (x, y);

Write ('|');

GotoXY (x+4,y);

Write ('|Nevesta: ', PNevesta^.FirstName,' ', PNevesta^.Name[1],'.');

GotoXY (x+36,y);

Write ('|', PNevesta^.MyData.Vz);

{kritery}.

GotoXY (x+39,y);

Write ('(', PNevesta^.Critery.VzMin,'/', PNevesta^.Critery.VzMax,')');

GotoXY (x+46,y);

Write ('|', PNevesta^.MyData.Rst);

{kriyery}.

GotoXY (x+50,y);

Write ('(', PNevesta^.Critery.RstMin,'/', PNevesta^.Critery.RstMax,')');

GotoXY (x+59,y);

Write ('|', PNevesta^.MyData.Vs);

{kritery}.

GotoXY (x+62,y);

Write ('(', PNevesta^.Critery.VsMin,'/', PNevesta^.Critery.VsMax,')');

GotoXY (x+71,y);

Writeln ('|');

Writeln ('————————————————————————————————————');

end;

{Процедура подбора пар}.

procedure PodborPar;

Var ZhenPointer, NevPointer: PointerKandidat;

x, y, counter:Byte; {Координаты и переменная для подсчета пар}.

begin.

ZhenPointer:=ZhenihList;

NevPointer:=NevestaList;

counter:=1;

x:=1;

y:=6;

{Присваеваем false переменным признака выбора кандидата}.

While (ZhenPointernil) do.

begin.

ZhenPointer^.FlagVib:=false;

ZhenPointer:=ZhenPointer^.SledKond.

end;

While (NevPointernil) do.

begin.

NevPointer^.FlagVib:=false;

NevPointer:=NevPointer^.SledKond.

end;

ZhenPointer:=ZhenihList;

{Цикл подбора пар. Для каждого элемента из списка женихов происходит подбор элемента из списка невест (продвигаясь по списку невест). При этом элемент считается подходящим, если критерии предъявляемые к партнеру соответствуют, личным данным (MyData) элемента из списка невест, а так же критерии элемента из списка невест, предъявляемые к партнеру, соответствуют личным данным элемента из списка женихов для которого осуществляется подбор. Признаки выбора обоих элементов должны быть установлены в false}.

While (ZhenPointernil) do.

begin.

NevPointer:=NevestaList;

While ((NevPointernil) AND.

  • (((((ZhenPointer^.Critery.VzMin>NevPointer^.MyData.Vz) OR
  • (ZhenPointer^.Critery.VzMax
  • ((ZhenPointer^.Critery.RstMin>NevPointer^.MyData.Rst) OR
  • (ZhenPointer^.Critery.RstMax
  • ((ZhenPointer^.Critery.VsMin>NevPointer^.MyData.Vs) OR
  • (ZhenPointer^.Critery.VsMax
  • (((NevPointer^.Critery.VzMin>ZhenPointer^.MyData.Vz) OR
  • (NevPointer^.Critery.VzMax
  • ((NevPointer^.Critery.RstMin>ZhenPointer^.MyData.Rst) OR
  • (NevPointer^.Critery.RstMax
  • ((NevPointer^.Critery.VsMin>ZhenPointer^.MyData.Vs) OR
  • (NevPointer^.Critery.VsMax
  • ((NevPointer^.FlagVib = true) OR (ZhenPointer^.FlagVib = true))))

do NevPointer:=NevPointer^.SledKond;

if (NevPointernil) then.

begin.

NevPointer^.FlagVib:= true; {Установка признаков выбора элемента}.

ZhenPointer^.FlagVib:= true;

VivodPar (x, y, counter, ZhenPointer, NevPointer); {Вызов процедуры печати пар}.

y:=y+3;

if (counter mod 10) = 0 then.

begin.

Write ('Dlya prodolzheniya nazhmite lubuj klavishu:');

ReadKey;

ClrScr;

x:=1;

y:=6;

end;

counter:=counter+1;

end;

ZhenPointer:=ZhenPointer^.SledKond;

end;

if counter=1 then ClrScr.

{Вывод на экран женихов и невест без пары}.

else.

begin.

Write ('Dlya prodolzheniya nazhmite vvod:');

ReadKey;

ClrScr;

ZhenPointer:=ZhenihList;

NevPointer:=NevestaList;

{raspechatka zhenihov}.

Writeln ('Zhenihi bez pari');

Writeln;

While (ZhenPointernil)do.

begin.

if (ZhenPointer^.FlagVib=false) then.

Writeln (ZhenPointer^.FirstName,' ', ZhenPointer^.Name[1],'.');

ZhenPointer:=ZhenPointer^.SledKond;

end;

{raspechatka nevest}.

Writeln;

Writeln ('Nevesti bez pari');

Writeln;

While (NevPointer…

begin.

ClrScr;

TextBackground (1);

{Window (1,1,80,2); {Задаем текстовое поле для вывода меню}.

ClrScr;

{Write ('F1 — Help; Alt+X — vihod iz programmi.');

TextBackground (1);}.

Window (1,1,80,5); {Задаем текстовое поле для вывода меню }.

ClrScr;

Writeln ('1. Dobavlenie novogo kandidata. 2. Udalenie kandidata.');

Writeln ('3. Prosmotr spiskov kandidatov. 4. Ochistka spiskov.');

Writeln ('5. Podbor par. 6. Poisk.');

Writeln ('7. Zapis v fail. 8. Zagruzka iz faila.');

TextBackground (3);

Window (1,5,80,50);{Задаем размеры окна}.

ClrScr;

Window (1,5,79,49);{Область вывода текста}.

Write ('Dlya nachala raboty nazhmite vvod, dlya zaversheniya Alt-X:');

end;

{Main procedure}.

Begin.

TextMode (3+256);

ClrScr;

graf; {Вызов Процедуры графики}.

MainMenu; {Вызов процедуры главного меню}.

StartWork;{Вызов процедуры анализа нажатой клавиши}.

End.

Показать весь текст
Заполнить форму текущей работой