Разработка приложения "Записная книжка"
Изучение программы по нахождению корней системы из двух нелинейных уравнений методами Ньютона и простых итераций. Характеристика графических возможностей современных ПК на примере применения графических функций языка С++ с использованием VGA-графики.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 18.07.2012 |
Размер файла | 57,3 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
{справочный текст}
'Убрать - удалить запись, выделенную цветом',
'Искать - искать запись, начинающуюся с нужных букв',
'Изменить - изменить поле (поля) выделенной записи',
'Добавить - добавить новую запись');
var
R: TRect;
D: PDlgWin;
k: Integer;
begin
R.Assign(7,6,74,15);
D:=New(PDlgWin,Init(R, 'Выберите продолжение:'));
with D^ do
begin
for k:=0 to 3 do {вставляем поясняющий текст}
begin
R.Assign(1,1+k,65,2+k);
Insert(New(PStaticTEXT,Init(R,#3+Txt[k])))
end;
for k:=0 to 4 do {вставляем кнопки:}
begin
R.Assign(X+k*DX,6,X+k*DX+L,8);
Insert(New(PButton,
Init(R,But[k],cmCan+k,bfNormal)))
end;
SelectNext(False); {активизируем первую кнопку}
end;
Control:=DeskTop^.ExecView(D); {выполняем диалог}
end;{Conrol}
{------------}
Procedure TInterior.HandleEvent;
Procedure DeleteItem;
{удаляет указанный в Location эл-т данных}
var
D: Integer;
PStr: PString;
s: String;
Data: DataType;
begin
PStr:=PS^.At(Location); {получаем текущую запись}
s:=copy(PStr^,1,LName);
seek(DataFile,0);
D:=-1; {D-номер записи в файле}
repeat {цикл поиска по освпадению поля Name:}
inc(D);
read(DataFile,Data);
with Data do while Length(Name)<LName do
Name:=Name+' '
until Data.Name=s;
seek(DataFile,pred(FileSize(DataFile)));
read(DataFile,Data); {читает последнюю запись}
seek(DataFile,D);
write(DataFile,Data); {помещает ее на место удаляемой}
seek(DataFile,pred(FileSize(DataFile)));
truncate(DataFile); {удаляет последнюю запись}
with PS^ do D:=IndexOf(At(Location));
PS^.AtFree(D); {удаляет строку из коллекции}
Draw {обновляет окно}
end;{DeleteItem}
{----------------------}
procedure AddItem(Edit: Boolean);
{добавляет новый или редактирует элемент данных}
const
y=1;
dy=2;
L=LName+LPhone+LAddr;
var
Data: DataType;
R: TRect;
InWin: PDialog;
BName,BPhone,BAddr:PInputLine;
Control: Word;
OldCount: Word;
s: String;
p: PString;
begin
Seek(DataFile,FileSize(DataFile)); {добавяет записи в конец файла}
repeat {цикл ввода записей}
if Edit then {готовит заголовок}
s:='Редактирование'
else
begin
Str(FileSize(DataFile)+1,s);
while Length(s)<3 do
s:='0'+s;
s:='Вводится запись N'+s
end;
FillChar(Data,SizeOf(Data),' '); {заполняет поля пробелами}
R.Assign(15,5,65,16);
InWin:=New(PDialog, Init(R, s)); {создает окно}
with InWin^ do
begin {формируем окно:}
R.Assign(2,y+1,2+LName,y+2);
BName:=New(PInputline, Init(R,LName));
Insert(BName); {поле имени}
R.Assign(2,y,2+LName,y+1);
Insert(New(PLabel,
Init(R, 'Имя',BName)));
R.Assign(2,y+dy+1,2+LPhone,y+dy+2);
BPhone:=New(PInputLine,
Init(R,LPhone));
Insert(BPhone); {поле телеф.}
R.Assign(2,y+dy,2+LPhone,y+dy+1);
Insert(New(PLabel, Init(R, 'Телефон',BPhone)));
R.Assign(2,y+2*dy+1,2+LAddr,y+2*dy+2);
BAddr:=New(PInputLIne, Init(R,LAddr));
Insert(BAddr); {поле адреса}
R.Assign(2,y+2*dy,2+LAddr,y+2*dy+1);
Insert(New(PLabel, Init(R, 'Адрес',BAddr)));
{вставляем две комаедные кнопки}
R.Assign(2,y+3*dy+1,12,y+3*dy+3);
Insert(New(PButton, Init(R, 'Ввести',cmOK,bfDefault)));
R.Assign(2+20,y+3*dy+1,12+20,y+3*dy+3);
Insert(New(PButton, Init(R, 'Выход',cmCancel,bfNormal)));
SelectNext(False) {Активизируем 1-ую кнопку}
end; {конец формирования окна}
if Edit then with Data do
begin {готовим начальный текст}
p:=PS^.At(Location);{читает данные из записи}
s:=p^;
Name:=copy(s,1,LName);
Phone:=copy(s,succ(LName),LPhone);
Addr:=copy(s,succ(LName+LPhone),LAddr);
InWin^.SetData(Data) {вставляет текст в поля ввода}
end;
Control:=DeskTop^.ExecView(InWin); {выполняем диалог}
if Control=cmOK then with Data do
begin
if Edit then
DeleteItem; {удаляет старую запись}
Name:=BName^.Data^;
Phone:=BPhone^.Data^;
Addr:=BAddr^.Data^;
s[0]:=chr(L);
FillChar(s[1],L,' ');
move(Name[1],s[1],Length(Name));
move(Phone[1],s[succ(LName)],Length(Phone));
move(Addr[1],s[succ(LName+LPhone)],Length(Addr));
OldCount:=PS^.Count; {прежнее кол-во записей}
PS^.Insert(NewStr(s)); {добавляет в коллекцию}
{проверяем добавление}
if OldCount<>PS^.Count then
write(DataFile,Data) {да - добавляем в файл}
end
until Edit or (Control=cmCancel);
Draw
end; {AddItem}
{--------------------}
procedure SearchItem;
{ищет нужный элемент }
function UpString(s: String): string;
{преобразует строку в верхний регистр}
var
k: Integer;
begin
for k:=1 to Length(s) do
if s[k] in ['a'..'z'] then
s[k]:=chr(ord('A')+ord(s[k])-ord('a'))
else if s[k] in ['а'..'п'] then
s[k]:=chr(ord('A')+ord(s[k])-ord('a'))
else if s[k] in ['р'..'я'] then
s[k]:=chr(ord('P')+ord(s[k])-ord('p'));
UpString:=s
end; {UpString}
var
InWin: PDialog;
R: TRect;
s: String;
p: PInputLine;
k: Word;
begin {SearchItem}
R.Assign(15,8,65,16);
InWin:=New(PDialog,
Init(R,'Поиск записи:'));
with InWin^ do
begin
R.Assign(2,2,47,3);
p:=New(PInputLine,Init(R,50));
Insert(p);
R.Assign(1,1,40,2);
Insert(New(PLabel, Init(R, 'Введите образец поиска:',p)));
R.Assign(10,5,20,7);
Insert(New(PButton,Init(R,'Ввести',cmOK,bfDefault)));
R.Assign(25,5,35,7);
Insert(New(PButton,Init(R,'Выход',cmCancel,bfNormal)));
SelectNext(False)
end;
if DeskTop^.ExecView(InWin)=cmCancel then
exit;
s:=p^.Data^;
Location:=0;
while (UpString(s)>=UpString(PString(PS^.At(Location))^))
and (Location<pred(PS^.Count)) do
inc(Location);
if (Location<Delta.Y+pred(Size.Y)) then
ScrollTo(Delta.X,Location)
else
Draw
end; {SearchItem}
{------------------------}
var
R: TPoint;
label Cls;
begin
TScroller.HandleEvent(Event);
case Event.What of
evCommand:
case Event.Command of
cmClose:
begin
Cls:
case Control of {получить команду из основного диалогового окна}
cmCan,
cmCancel: EndModal(cmCancel);
cmEdit: AddItem(True);
cmDelete: DeleteItem;
cmSearch: SearchItem;
cmAdd: AddItem(False);
end
end;
cmZoom: exit;
end;
evMouseDown: {реакция на щелчок мыши}
begin
MakeLocal(MouseWhere, R); {получение в R локальные
координаты мыши}
Location:=Delta.Y+R.Y;
Draw
end;
evKeyDown: {реакция на клавиши + -}
case Event.KeyCode of
kbEsc: goto Cls;
kbGrayMinus: if Location<Delta.Y then
begin
dec(Location);
Draw
end;
kbGrayPlus: if Location<Delta.Y+pred(Size.Y) then
begin
inc (Location);
Draw
end;
end
end
end; {TInterior.HandleEvent}
{------------------------}
procedure Tnotebook.Work;
{работа с данными}
var
R: TRect;
PW: PWorkWin;
Control: Word;
begin
R.Assign(0,0,80,23);
PW:=New(PWorkWin, Init(R));
Control:=DeskTop^.ExecView(PW);
Dispose(PW,Done)
end;
{------------------------}
procedure TNotebook.HandleEvent(var Event: TEvent);
{обработчик событий программы}
begin {TNotebook.HandleEvent}
TApplication.HandleEvent(Event); {обработка станд. команд cmQuit и cmMenu}
if Event.What=evCommand then
case Event.Command of
{обработка новых команд}
cmOpen: FileOpen; {открыть файл}
cmSave: FileSave; {закрыть файл}
cmChangeDir: ChangeDir; {сменить диск}
cmDOSShell: DOSCall; {временный выход в дос}
cmWork: Work; {Обработать данные}
else
exit {не обрабатывать другие команды}
end;
ClearEvent(Event) {очистить событие после обработки}
end; {TNotebook.HandleEvent}
{--------------------------------}
procedure TNotebook.InitMenuBar;
{соэдание верхнего меню}
var
R: TRect;
begin
GetExtent(R);
R.B.Y:=succ(R.A.Y); {R - координаты строки меню}
MenuBar:=New(PMenuBar, Init(R,
NewMenu( {создание меню}
{первый эл-т нового меню представляет собой
подменю. Создаем его}
NewSubMenu('~F~ Файл', hcNoContext,
{описываем элемент главного меню}
NewMenu( {создание подменю}
NewItem( {первый эл-т}
'~~ Открыть','F3',kbF3,cmOpen,hcNoContext,
NewItem( {второй эл-т}
'~~ Закрыть','F2',kbF2,cmSave,hcNoContext,
NewItem( {третий эл-т}
'~~ Сменить диск','',0,cmChangeDir,hcNoContext,
NewLine( {строка-разделитель}
NewItem('~~ Вызов ДОС','',0,cmDOSShell,hcNoContext,
NewItem('~~ Конец работы','Alt-X',kbAltX,cmQuit,hcNoContext,
NIL)))))) {нет других элементов подменю}
),
{создаем второй элемент главного меню}
NewItem('~W~ Работа','',kbF4,cmWork,hcNoContext,
NIL) {нет др. эл-тов гл. меню}
))))
end; {TNotebook.InitMenuBar}
{----------------------------}
procedure TNotebook.InitStatusLine;
{формирует строку статуса}
var
R:TRect; {границы строки статуса}
begin
GetExtent(R); {получаем в R координаты всего экрана}
R.A.Y:=pred(R.B.Y);
StatusLine:=New(PStatusLine,
Init(R, {создает строку статуса}
NewStatusDef(0, $FFFF, {устанавливает макс. диап. кон-
текстной справочной службы}
NewStatusKey('~Alt-X~ Выход',kbAltX,cmQuit,
NewStatusKey('~F2~ Закрыть',kbF2,cmSave,
NewStatusKey('~F3~ Открыть',kbF3,cmOpen,
NewStatusKey('~F4~ Работа',kbF4,cmWork,
NewStatusKey('~F10~ Меню',kbF10,cmMenu,
NIL))))), {нет других клавиш}
NIL) {нет др. определений}
));
DisableCommands(WinCom1) {запрещает недоступные команды}
end; {TNotebook.InitStatusLine}
Nbook: TNotebook;
begin
Nbook.Init;
Nbook.Run;
Nbook.Done
end.
Размещено на Allbest.ru
Подобные документы
Способы отделения корней. Решение задачи методами Ньютона уточнения корней и простых итераций. Формула нахождения погрешностей. Геометрическая интерпретация методов. Составление блок-схем и текстов программ. Результаты их работы на тестовом примере.
курсовая работа [3,1 M], добавлен 15.06.2013Изучение методов решения нелинейных уравнений таких как: метод Ньютона, модифицированный метод Ньютона, метод Хорд, метод простых Итераций. Реализация программы для персонального компьютера, которая находит решение нелинейного уравнения разными способами.
практическая работа [321,9 K], добавлен 24.06.2012Нахождение с заданной погрешностью корней уравнения. Оценка скорости сходимости. Нахождение промежутка, в котором содержится какой-либо корень уравнения для методов итераций и Ньютона. Разработка текста компьютерных программ для решения данных уравнений.
лабораторная работа [253,9 K], добавлен 19.12.2012Разработка программы для нахождения корней нелинейных уравнений несколькими методами: методом хорд, касательных, половинного деления, итераций. Реализации программы с помощью системы программирования Delphi 7. Методика работы пользователя с программой.
курсовая работа [1,3 M], добавлен 11.02.2013Разработка проекта по вычислению корней нелинейных уравнений методом итераций, в среде программирования Delphi. Интерфейс программы и ее программный код, визуализация метода. Сравнение результатов решения, полученных в Mathcad 14 и методом итераций.
контрольная работа [1,9 M], добавлен 10.12.2010Решение нелинейных уравнений методом простых итераций и аналитическим, простым и модифицированным методом Ньютона. Программы на языке программирования Паскаль и С для вычислений по вариантам в порядке указанных методов. Изменение параметров задачи.
лабораторная работа [191,0 K], добавлен 24.06.2008Рассмотрение основных этапов создания приложения "Записная книжка", основное предназначение. Анализ способов выбора среды программирования. Знакомство с элементом управления Data Grid View. Общая характеристика методов конструкции языка программирования.
контрольная работа [1002,4 K], добавлен 21.06.2014Суть основных идей и методов, особенностей и областей применения программирования для численных методов и решения нелинейных уравнений. Методы итераций, дихотомии и хорд и их использование. Алгоритм метода Ньютона, создание программы и ее тестирование.
курсовая работа [423,0 K], добавлен 17.02.2010Разработка в среде Delphi приложения "Записная книжка" для ввода и корректировки информации, поиска данных. Выбор состава технических и программных средств. Текст программы, ее описание и тестирование. Основные условия программы, требования к компьютеру.
курсовая работа [565,7 K], добавлен 08.12.2011Общие сведения о графических редакторах, понятия компьютерной растровой и векторной графики, форматов. Обзор и сравнительный анализ современных программ обработки и просмотра графических изображений: Paint, Corel Draw, Adobe Photoshop, MS PowerPoint.
дипломная работа [283,9 K], добавлен 09.08.2010