Использование библиотеки Turbo Vision в C++

  • Вид работы:
    Контрольная работа
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    8,02 Кб
  • Опубликовано:
    2013-10-13
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Использование библиотеки Turbo Vision в C++

Пермский Государственный Политехнический Университет

Электротехнический факультет











Контрольная работа

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

На тему: «Использование библиотеки Turbo Vision в C++»

Выполнил: Палкин Д.В

Проверил: Ноткин А.М.





Пермь 2013 г.

Содержание

Постановка задачи

Алгоритмы

Проектирование

Определение классов

Определение глобальных имен

Инструкция программисту

Инструкция пользователю

Выводы

Приложение

Постановка задачи

Создать методические указания к лабораторной работе под названием «Turbo Vision C++. Организация диалога», которые должны содержать теоретический материал по данной теме и демонстрационную программу.

Программа выполняет обработку базы данных, элементами которой являются объекты класса Student (студент), и организует пользовательский диалог для ввода информации и просмотра объектов и поиск. Созданный объект заноситься в линейный список. Данные хранятся в файле.

Теоритический материал должен содержать информацию о классах Turbo Vision: TDialog, TInputLine, TButton, TStaticText.

Алгоритмы

В программе использовался алгоритм поиска в линейном двунаправленном списке. Идея алгоритма: просматривается список, начиная с первого элемента, пока не будет найден нужный элемент или список не закончится. Поиск объекта СТУДЕНТ осуществляется по одному из полей данных, которое выбирает пользователь. Также осуществляется поиск следующего элемента: Функция поиска первого элемента заносит результат поиска (указатель на найденный объект) в глобальную переменную, функция же поиска следующего элемента начинает просмотр не сначала, а с элемента на который указывает эта глобальная переменная.

Проектирование

В программе определяется класс TStudentApp производный от TApplication, в котором представлены методы для организации пользовательского интерфейса и работы со списком объектов СТУДЕНТ и работы с файлами. И класс TStudentBase, являющийся объектом СТУДЕНТ, и содержащий поля next (указатель на следующий элемент в списке) prev (указатель на предыдущий элемент в списке) и persone - указатель на структуру данных о студенте TStudent.

При создании списка инициализируется глобальная переменная StudentBase - указатель на текущий элемент, и глобальная переменная first - указатель на первый элемент списка.

При создании рабочего (основного) диалога в программе для удобства не создается класс производный от TDialog, а описывается глобальная переменная TDialog *wd, которая затем инициализируется в компонентной функции класса TStudentApp::WorkDialog(). Данные считываются из диалога и устанавливаются непосредственно в/из поля persone объекта StudentBase.

При поиске в списке объектов организуется диалог, в котором пользователь указывает поле поиска и его значение. Эти данные заносятся в глобальную структуру searchRec, затем функции поиска используют эту структуру в своих целях.

Сохраняются данные в файл в виде структур типа TStudent.

Определение классов

TSearchRec //Структура поиска

{pole; // Поле по которому производится поискval[30]; // Значение поля

};TStudent //Структура информации о студенте

{soname[30];name[30];patron[30];sex;group[12];course[3];contra;grant[10];studnum[8];

};TStudentBase //Класс СТУДЕНТ

{:();

~TStudentBase();Sets(char*,char*,char*,char*,ushort,char*,char*,char*,ushort);*persone; //указатель на TStudent

TStudentBase *prev; //предыдущий элемент в списке*next; //следующий элемент в списке

};TStudentApp : public TApplication

{:();void handleEvent(TEvent& event);TStatusLine *initStatusLine(TRect);TMenuBar *initMenuBar(TRect);

private:WorkDialog(); //Функция, создающая рабочий диалогSaveBase(char *filename); //Сохранение базы в файл*ReadBase(char *filename); //Чтение базы из файлаNewBase(); //Создание новой базыchangeDir();openBase(); //Открытие базыsearchDialog(); //Диалог поиска*Search(TSearchRec *); //Поиск первого элемента

TStudentBase *SAgain(TSearchRec *,TStudentBase *); //Поиск следующего

элемента

};

Определение глобальных имен

база пользовательский обработка программист

const cmNewBase=200,=201, //Команды управления=202,=203,

cmSAgain=204,=205,=206,=207,=208,=209,=210;*wd; //Рабочий диалог*StudentBase, //Ук-ль на текущий элемент в списке

*firstItm, //Ук-ль на текущий элемент в списке

*tmpS; //Указатель на найденный элемент*searchRec; //Ук-ль на данные поиска

ushort control;*basename; //Имя базы

char *fileName; //Путь и имя файла базы

Инструкция программисту

Требования к ресурсам: процессор не ниже Intel 386.

Память - минимум 1Мб. Дисковое пространство - 1Mb

Видеоадаптер - любой. О/S -Ms. Dos, Ms Windows 3.1-98

Инструментальные разработки: Программа написана на языке С++, с помощью программной среды Borland C++ ver. 3.0 и библиотеки Turbo Vision. Исходник программы находится в файле KURSOVIK.CPP.

Стандартные библиотеки С++:stdio.h, stdlib.h, string.h

Библиотеки Turbo Vision: tv.h, app.h, objects.h, menus.h, dialog.h, stddlg.h, msgbox.h.

Инструкция пользователю

Если вы решили использовать в своих целях данный программный продукт, запустите файл KURSOVIK.EXE и наслаждайтесь приятной работой которую обеспечит вам данная программа. База данных студентов сохраняется в файле с расширением .sdb.

После запуска программы перед вами появляется окно программы в верхней части которого находится меню. Для создания новой базы войдите в меню File и выберите пункт НОВАЯ БАЗА ДАННЫХ, появится окно в котором нужно ввести название базы не более 8 символов. После этого вы увидите рабочий диалог. Вы сможете перемещаться по базе с помощью кнопок >> и <<, а также добавлять и удалять записи с помощью кнопок Add и Del, при закрытии базы кнопкой Close происходит автосохранение базы. Для поиска элемента используйте пункт ПОИСК меню EDIT или клавишу F7. С помощью пункта ОТМЕНИТЬ ИСПРАВЛЕНИЯ в меню EDIT или клавиши Alt-Q вы можете отменить исправления в данной записи.

Выводы

В результате выполнения работы я полностью освоил организацию и работу с диалоговыми окнами в Turbo Vision C++. Была написана «мощнейшая» база данных, обрабатывающая данные о студентах, способная сохранять данные в файл и считывать из файла в новом стандарте SDB. В программе организован сверх-удобный и вместе с тем несложный пользовательский интерфейс. Данный программный продукт является коммерческим. Копирование и взлом преследуются по закону.

Приложение

Текст программы.

#define Uses_TKeys

#define Uses_TApplication

#define Uses_TInputLine

#define Uses_TLabel

#define Uses_TMenuBar

#define Uses_TSubMenu

#define Uses_TButton

#define Uses_TMenuItem

#define Uses_TStatusLine

#define Uses_TStatusItem

#define Uses_TStatusDef

#define Uses_TDeskTop

#define Uses_TDialog

#define Uses_TFileDialog

#define Uses_TChDirDialog

#define Uses_TSItem

#define Uses_TRadioButtons

#define Uses_MsgBox

#include <tv.h>

#include <msgbox.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>cmNewBase=200,//=201,=202,=203,=204,=205,=206,//=207,//=208, //=209, //=210;*wd;TStudent

{soname[30];name[30];patron[30];sex;group[12];course[3];contra;grant[10];studnum[8];

};blocksize=sizeof(TStudent);TSearchRec

{pole;val[30];

};TStudentBase

{:();

~TStudentBase();Sets(char*,char*,char*,char*,ushort,char*,char*,char*,ushort);*persone;*prev;*next;

};*StudentBase, *firstItm, *tmpS;*searchRec;control;*basename;*fileName;TStudentApp : public TApplication

{:();void handleEvent(TEvent& event);TStatusLine *initStatusLine(TRect);TMenuBar *initMenuBar(TRect);:WorkDialog();SaveBase(char *filename);*ReadBase(char *filename);NewBase();changeDir();openBase();searchDialog();*Search(TSearchRec *);*SAgain(TSearchRec *,TStudentBase *);

};::TStudentApp():(&TStudentApp::initStatusLine,

&TStudentApp::initMenuBar,

&TStudentApp::initDeskTop)

{(cmSaveBase);(cmSearch);(cmSAgain);(cmUndoCh);

};*TStudentApp::initStatusLine(TRect r)

{.a.y=r.b.y-1;new TStatusLine(r,

*new TStatusDef(0,0xFFFF)+

*new TStatusItem("~Alt-X~ Выход",kbAltX,cmQuit)

);

}*TStudentApp::initMenuBar(TRect r)

{.b.y=r.a.y+1;new TMenuBar(r,

*new TSubMenu("~F~ile",kbAltF,hcNoContext)+

*new TMenuItem("Новая база данных... ~Alt-N~",cmNewBase,kbAltN)+

*new TMenuItem("Открыть базу... ~F3~",cmOpenBase,kbF3)+

*new TMenuItem("Сохранить базу ~F2~",cmSaveBase,kbF2)+

newLine()+

*new TMenuItem("Сменить каталог...",cmChDir,hcNoContext)+()+

*new TMenuItem("~В~ыход ~Alt-X~",cmQuit,hcNoContext)+

*new TSubMenu("~E~dit",kbAltE,hcNoContext)+

*new TMenuItem("Поиск... ~F7~",cmSearch,kbF7)+

*new TMenuItem("Поиск следующей записи ~Shift-F7~",cmSAgain,kbShiftF7)+

*new TMenuItem("Отменить исправления ~Alt-Q~",cmUndoCh,kbAltQ)

);

};TStudentApp::handleEvent(TEvent& event)

{( event.what == evCommand )

{( event.message.command )

{cmNewBase:();(control==cmCancel)break;=new TStudentBase();=StudentBase;=basename;();( event );;cmAddItm:>getData(StudentBase->persone);*tmp=new TStudentBase();>prev=StudentBase;>next=StudentBase->next;>next->prev=tmp;>next=tmp;=StudentBase->next;>setData(StudentBase->persone);( event );;cmDel:((StudentBase->prev!=NULL)||(StudentBase->next!=NULL))

{(StudentBase->prev!=NULL)>prev->next=StudentBase->next;(StudentBase->next!=NULL)

{StudentBase->next->prev=StudentBase->prev;=StudentBase->next;}StudentBase=StudentBase->prev;

}(StudentBase!=NULL)wd->setData(StudentBase->persone);( event );;cmFwd:>getData(StudentBase->persone);(StudentBase->next!=NULL)

{=StudentBase->next;>setData(StudentBase->persone);

};( event );;cmBck:>getData(StudentBase->persone);(StudentBase->prev!=NULL)

{=StudentBase->prev;>setData(StudentBase->persone);

};( event );;cmCancel:(cmSaveBase);(cmSearch);(cmSAgain);(cmUndoCh);(cmOpenBase);(cmNewBase);>getData(StudentBase->persone);(fileName);(wd);( event );;cmChDir:();( event );;cmOpenBase:();((control==cmCancel)||StudentBase==NULL)break;();( event );;cmSaveBase:(fileName);( event );;cmSearch:=new TSearchRec;(searchRec->val,"");>pole=0;();(control==cmCancel)break;=Search(searchRec);( event );;cmSAgain:=SAgain(searchRec,tmpS);( event );;cmUndoCh:>setData(StudentBase->persone);:;

}

};::handleEvent( event );

}TStudentApp::NewBase()

{*nb=new TDialog(TRect(20,5,60,15),"Новая База");*bnm=new TInputLine(TRect(3,3,37,4),9);*ok=new TButton(TRect(4,6,19,8),"~O~k",cmOK,bfDefault);*canc=new TButton(TRect(21,6,36,8),"~C~ancel",cmCancel,bfNormal);>insert(canc);>insert(ok);>insert(bnm);=deskTop->execView(nb);(control!=cmCancel)

{>getData(basename);(basename,".sdb");

}(nb);

};TStudentApp::WorkDialog()

{=new TDialog(TRect(3,2,77,21),basename);>flags=0x00;*stdn=new TInputLine(TRect(23,2,30,3),8);*sn=new TInputLine(TRect(12,4,42,5),30);*nm=new TInputLine(TRect(12,6,42,7),30);*pt=new TInputLine(TRect(12,8,42,9),30);*cr=new TInputLine(TRect(37,10,42,11),3);*gr=new TInputLine(TRect(12,10,26,11),12);*st=new TInputLine(TRect(14,12,25,13),10);*Sex=new TRadioButtons(TRect(44,4,57,6),TSItem( "Мужской",TSItem( "Женский",0

)));>insert(new TLabel(TRect(3,12,13,13),"~С~тепендия",st));>insert(new TLabel(TRect(44,7,60,8),"~К~онтрактник",Contr));>insert(new TLabel(TRect(31,10,36,11),"~К~урс",cr));>insert(new TLabel(TRect(3,10,11,11),"~Г~руппа",gr));>insert(new TLabel(TRect(44,3,57,4),"~П~ол",Sex));>insert(new TLabel(TRect(3,8,11,9),"~О~чество",pt));>insert(new TLabel(TRect(3,6,7,7),"~И~мя",nm));>insert(new TLabel(TRect(3,4,11,5),"~Ф~амилия",sn));>insert(new TLabel(TRect(3,2,22,3),"~Н~омер студ. билета",stdn));>insert(sn);>insert(nm);>insert(pt);>insert(Sex);>insert(gr);>insert(cr);>insert(Contr);>insert(st);>insert(new TButton(TRect(60,5,71,7),"~A~dd",cmAddItm,bfNormal));>insert(new TButton(TRect(60,8,71,10),"~D~el",cmDel,bfNormal));>insert(new TButton(TRect(60,11,71,13),"~C~lose",cmCancel,bfDefault));>insert(new TButton(TRect(19,15,35,17),"<<",cmBck,bfNormal));>insert(new TButton(TRect(39,15,55,17),">>",cmFwd,bfNormal));>insert(stdn);>setData(StudentBase->persone);(cmSaveBase);(cmSearch);(cmSAgain);(cmUndoCh);(cmOpenBase);(cmNewBase);>insert(wd);>getData(StudentBase->persone);

}TStudentApp::searchDialog()

{*sr=new TDialog(TRect(17,5,63,20),"Поиск");*Val=new TInputLine(TRect(3,3,37,4),30);*ok=new TButton(TRect(4,10,19,12),"~O~k",cmOK,bfDefault);*canc=new TButton(TRect(21,10,36,12),"~C~ancel",cmCancel,bfNormal);*Pole=new TRadioButtons(TRect(3,5,43,9),TSItem( "Номер студенческого",TSItem( "Фамилия",TSItem( "Имя",TSItem( "Отчество",TSItem( "Группа",TSItem( "Курс",TSItem( "Степендия",0

))))))));>insert(canc);>insert(ok);>insert(Pole);>insert(Val);=deskTop->execView(sr);(control!=cmCancel)

{>getData(searchRec);

}(sr);

};*TStudentApp::Search(TSearchRec *srec)

{*Sb=new TStudentBase();=firstItm;found;=2;((Sb!=NULL)&&(found))

{(srec->pole)

{0:found=strcmp(srec->val,Sb->persone->studnum);break;1:found=strcmp(srec->val,Sb->persone->soname);break;2:found=strcmp(srec->val,Sb->persone->name);break;3:found=strcmp(srec->val,Sb->persone->patron);break;4:found=strcmp(srec->val,Sb->persone->group);break;5:found=strcmp(srec->val,Sb->persone->course);break;6:found=strcmp(srec->val,Sb->persone->grant);break;

}(found!=0)Sb=Sb->next;{StudentBase=Sb;>setData(StudentBase->persone);

}

};(found!=0)

{mfOkError=mfOKButton | mfError;

messageBox("Запись не найдена!!!",mfOkError);

return NULL;

};Sb->next;

};*TStudentApp::SAgain(TSearchRec *srec,TStudentBase *tmp)

{found;=2;((tmp!=NULL)&&(found))

{(srec->pole)

{0:found=strcmp(srec->val,tmp->persone->studnum);break;1:found=strcmp(srec->val,tmp->persone->soname);break;2:found=strcmp(srec->val,tmp->persone->name);break;3:found=strcmp(srec->val,tmp->persone->patron);break;4:found=strcmp(srec->val,tmp->persone->group);break;5:found=strcmp(srec->val,tmp->persone->course);break;6:found=strcmp(srec->val,tmp->persone->grant);break;

}(found!=0)tmp=tmp->next;{StudentBase=tmp;>setData(StudentBase->persone);

}

};(found!=0)

{mfOkError=mfOKButton | mfError;

messageBox("Запись не найдена!!!",mfOkError);

return NULL;

};tmp->next;

};TStudentApp::openBase()

{*d= (TFileDialog *)validView(TFileDialog( "*.sdb", "Открыть файл", "~N~ame", fdOpenButton, 100 ));=deskTop->execView(d);( d != 0 && control!=cmCancel)

{>getFileName( basename );(fileName,basename);

{(basename,strchr(basename,'\\')+1);

}while (strchr(basename,'\\')!=NULL);=ReadBase(fileName);=firstItm;

}( d );

}TStudentApp::changeDir()

{*d = validView( new TChDirDialog( 0, cmChangeDir ) );( d != 0 )

{>execView( d );( d );

}

}::TStudentBase()

{=new TStudent;("","","","",0,"","","",0);=NULL;=NULL;

};::~TStudentBase()

{persone;

};TStudentBase::Sets(char *stdn,char *sn,char *nm,char *pt,sx,char *gr,char *cr,char *st,ushort cntr)

{(persone->studnum,stdn);(persone->soname,sn);(persone->name,nm);(persone->patron,pt);(persone->group,gr);(persone->course,cr);(persone->grant,st);> sex=sx;>contra=cntr;

};filesize(FILE *f)

{curpos, length;=ftell(f);(f,0L,SEEK_END);=ftell(f);(f,curpos,SEEK_SET);length;

};Eof(FILE *f)

{curpos=ftell(f);*st;(st,sizeof(TStudent),1,f);(feof(f))

{(f, curpos, SEEK_SET);1;

};(f, curpos, SEEK_SET);0;

};*TStudentApp::ReadBase(char *filename)

{*baseF;(((baseF=fopen(filename,"r"))==NULL)||(filesize(baseF)==0))

{NULL;(baseF);

}*base=new TStudentBase();*tmp;=base;

{(tmp->persone,sizeof(TStudent),1,baseF);(Eof(baseF)!=0)break;>next=new TStudentBase();>next->prev=tmp;>next->next=NULL;=tmp->next;

}while (!feof(baseF));(baseF);base;

}TStudentApp::SaveBase(char *filename)

{*baseF;=fopen(filename,"w");*tmp;=firstItm;

{(tmp->persone,sizeof(TStudent),1,baseF);=tmp->next;

}(tmp!=NULL);(baseF);

};main()

{=new char[100];=new char[100];StBase;.run();

}

Похожие работы на - Использование библиотеки Turbo Vision в C++

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!