Мегаобучалка Главная | О нас | Обратная связь


Описание работы программы



2016-01-05 500 Обсуждений (0)
Описание работы программы 0.00 из 5.00 0 оценок




После своей загрузки программа осуществляет вывод на экран меню программы:

 

Навигация по меню осуществляется при помощи клавиш UP, DOWN, ENTER и ESC. При нажатии клавиши Enter на одном из элементов списка, на экран будет вызвано одно из дочерних меню.

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

 

 

При выборе пункта меню Look будет вызвано окно для работы со списком:

 

При выборе пункта меню Diagram будет вызвано меню отображения блок-схем:

При выборе одного из пунктов меню Diagram будет вызвано окно отображения блок-схемы:

 

Для того чтобы переключится на другую блок-схему необходимо нажать любую клавишу:

 

При вызове пункта меню About на экран будет выведена информация о версии программы и разработчике.

При вызове пункта меню Exit произойдет выход из программы.

Заключение

В данной курсовой работе был реализован абстрактный тип данных – двусвязный список на основе указателей.

В процессе реализации был написан класс для работы с двусвязным списком и использовано разбиение необходимых действий на функции, что значительно упростило модификацию и отладку программы. Также разработаны алгоритмы для обработки двусвязного списка, реализующие такие операции: добавление, удаление, корректировка, вывод элементов двусвязного списка.

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


Литература

1. http://ru.wikipedia.org/wiki/Fstream

2. http://ru.wikipedia.org/wiki/Связный_список

3. Справочная служба среды BorlandC

4. Программирование на языке высокого уровня СИ. Часть II: практикум/ Сост. О. В. Шестопал, О. В. Сташкова. – Тирасполь, 2010. – 83 с.

5. Абрамов С. А. Начала информатики, - М.: Наука, 1990. – 384 с.

6. Гусева А. И. Учимся информатике: задачи и методы их решения, - М.: Диалог МИФИ, 1998. – 173 с.

7. Бьярн Страуструп. Язык программирования С++, в двух частях. Пер. с англ. Киев:"ДиаСофт",1993. -296 с.

8. Корриган Джон Компьютерная графика: Секреты и решения: Пер с англ. -М.: Энтроп, 1995. - 352 с.

9. Шилдт Г. "Справочник программиста по С/С++": Пер. с англ.: Издательский дом "Вильямс", 2001. – 158 с.

10. Новиков Ф.А. "Дискретная математика для программистов". – СПб: Питер, 2001. – 405 с.

 

Приложение

Файл МENU.CPP

#include <iostream.h>

#include <conio.h>

#include <stdlib.h>

#include <stdio.h>

#include <graphics.h>

#include <fstream.h>

 

class myList {

private:

 

struct List {

char data;

List *next;

List *pred;

};

 

List *first;

List *last;

int countItems;

 

public:

 

myList ();

~myList ();

 

void addToList( char data);

int addToList( char data, int numb);

int changeElem(char data, int numb);

void printList();

void printLists();

void delAllList();

int delElem(int numb);

int getCount();

void writeToFile (char *path);

int readFromList();

 

};

 

myList:: myList() {

first = NULL;

last = NULL;

countItems = 0;

}

 

myList:: ~myList() {

delAllList ();

};

 

void myList:: addToList (char data) {

List *temp = new List;

if (first == NULL) {

temp->pred = NULL;

temp->next = NULL;

temp->data = data;

first = temp;

last = temp;

countItems ++;

}

else {

last->next = temp;

temp->data = data;

temp->next = NULL;

temp->pred = last;

last = temp;

countItems++;

 

}

}

 

int myList:: addToList (char data, int numb) {

 

List *pTemp = first;

 

for (int i=1; i<numb; i++) {

pTemp = pTemp->next;

}

 

List *pEl = new List;

 

pEl->next = pTemp->next;

pEl->pred = pTemp;

pTemp->next = pEl;

pEl->data = data;

pEl->next->pred = pEl;

 

countItems++;

 

return 0;

}

 

int myList:: changeElem(char data, int numb) {

 

List *pTemp = first;

 

for (int i=1; i<numb; i++) {

pTemp = pTemp->next;

}

 

pTemp->data = data;

 

return 0;

}

 

 

int myList:: getCount() {

return countItems;

}

 

void myList:: printList() {

List *pTemp = first;

 

if (first == NULL) {

;

}

else {

 

while (pTemp != NULL) {

if (pTemp->data !=0x0D && pTemp->data !=0x0A )

cout<<pTemp->data;

pTemp=pTemp->next;

 

}

 

}

}

 

void myList:: printLists() {

List *pTemp = first;

 

if (first == NULL) {

;

}

else {

 

while (pTemp != NULL) {

cout<<pTemp->data;

pTemp=pTemp->next;

 

}

 

}

}

 

int myList:: delElem(int numb) {

List *pTemp = first;

if(first == NULL)

{

return -1;

}

else if( numb < 1 || numb > countItems )

{

return -2;

}

else if( numb == 1)

{

first = pTemp->next;

delete pTemp;

countItems --;

}

else if(numb == countItems){

pTemp = last;

last = last->pred;

delete pTemp;

last->next = NULL;

countItems--;

 

}

else

{ for (int i=1; i<numb; i++) {

 

pTemp = pTemp->next;

 

}

 

pTemp->pred->next = pTemp->next;

pTemp->next->pred = pTemp->pred;

 

delete pTemp;

countItems--;

 

}

return 1;

 

}

void myList:: delAllList() {

while(first !=0) {

List *pTemp = first;

first = first->next;

delete pTemp;

}

first = NULL;

last = NULL;

}

 

char c[80];

 

int myList:: readFromList() {

 

List *pTemp = first;

 

int i=0;

 

while (pTemp != NULL) {

 

c[i] = pTemp->data;

pTemp = pTemp->next;

i++;

 

}

return i;

}

 

void myList:: writeToFile (char *path) {

 

ofstream f;

f.open(path,ios::binary | ios::out);

 

List *pTemp = first;

 

while (pTemp != NULL) {

 

f<<pTemp->data;

pTemp = pTemp->next;

 

}

 

f.close();

 

}

void readFromFile (char *path) {

 

char temp;

 

ifstream in (path, ios:: binary | ios:: in);

 

if (in) {

while ( !in.eof() ) {

in.get(temp);

cout<<temp;

}

}

else {

clrscr();

gotoxy(1,2);

cout<<"\n\t\tError file no exist";

}

 

in.close();

}

 

// Функция обрабоки нажатий клавиш

void handlerKeys (char ch, myList &row,int &lenStr) {

int x,y;

 

x = wherex();

y = wherey();

 

if ( (x >= lenStr) && (ch >= 32 && ch <= 126) && lenStr <= 58 ) {

 

row.addToList(ch);

clrscr();

row.printList();

lenStr++;

 

}

else if ((x < lenStr) && (ch >= 32 && ch <= 126) && lenStr <=58 ) {

row.addToList(ch,x-1);

clrscr();

row.printList();

gotoxy(x+1,1);

lenStr++;

 

}

else {

 

if(ch == '\x0') ch = ch + getch();

 

switch(ch) {

 

case 75: {

gotoxy(x-1,y);

break;

} //left

 

 

case 77: {

if (x<lenStr+1)

gotoxy(x+1,y);

break;

} //right

 

case 8: { // Back Space

row.delElem (x-1);

 

clrscr();

row.printList();

gotoxy(x-1,1);

if(lenStr>0)

lenStr--;

break;

}

case 83: { // Delete

 

row.delElem(x);

clrscr();

row.printList();

gotoxy(x,1);

 

if ( lenStr>0 && x < lenStr)

lenStr--;

 

break;

}

case 71: {

gotoxy(1,1);

break;

}

case 79: {

gotoxy(lenStr+1,1);

break;

}

case 19: {

ofstream f("e:test.txt", ios::binary | ios::trunc);

f.close();

row.writeToFile("e:test.txt");

}

case 18: {

clrscr();

readFromFile("e:test.txt");

gotoxy(1,1);

break;

}

 

} // End of Switch

 

}

 

}

 

void mainMenu();

 

// Вывод окна редактирования и справки

void getchKey() {

 

char ch;

char *info = " For navigation use keys Right/Left\n Delete or BackSpace - delete element\n ^S - Write list to base\n ^R - Read list from base\n Esc - back to main menu";

myList text;

int lenStr=0;

 

window(1,1,80,25);

textbackground(1);

clrscr();

gotoxy(1,20);

cout<<info;

 

gotoxy(10, 6);

textbackground(11);

textcolor(10);

cprintf("%s","Please enter data:");

textcolor(7);

window(10, 8, 70, 10);

textbackground(4);

clrscr();

window(10, 9, 70, 10);

 

while (ch != 27) {

 

handlerKeys(ch, text,lenStr);

ch = getch();

 

}

 

window(1,1,80,25);

textbackground(0);

clrscr();

mainMenu();

 

}

 

 

// Функции для реализации меню

void init_Graph(){

 

int gdriver = DETECT;

int gmode;

initgraph(&gdriver,&gmode,"c:\\turboc3\\bgi\\");

 

}

 

// Функция прорисовки одного элемента меню

void one_Menu(int x, int y) {

 

bar(x,y,x+3,y+30);

 

}

 

// Функция прорисовки всего меню

void paint_Menu(int x, int y, int count){

 

//setcolor(3);

setfillstyle(1,3);

for(int i = 0; i < count; i++)

 

one_Menu(x,y + i * 30);

 

}

 

// Функция передвижения по меню

int move_Menu(int x, int y,int count) {

 

int count_menu = 0;

char c=0;

 

count--;

setfillstyle(2,14);

one_Menu(x,y);

 

while(c!=13){

 

c = getch();

 

if(!c) c+=getch();

 

switch(c) {

 

case 80:{ if(count_menu == count) count_menu = 0;

else count_menu++;

 

setfillstyle(1,3);

one_Menu(x,y);

setcolor(14);

setfillstyle(2,14);

y = count_menu*30+10;

one_Menu(x,y);

break;

} //down

 

 

case 72:{

if(count_menu == 0) count_menu = count;

else count_menu--;

 

setfillstyle(1,3);

one_Menu(x,y);

setcolor(14);

setfillstyle(2,14);

y = count_menu*30+10;

one_Menu(x,y);

break;

}//up

 

}

}

 

return count_menu;

}

 

// Функция прорисовки названий элементов меню

void paint_Menu_Text(int x, int y, int count, char *name_Menu[]){

 

setcolor(15);

settextstyle(8,0,2);

for(int i =0; i<count; i++)

outtextxy(x+10,y+i*30-2,name_Menu[i]);

 

}

 

// Выводим текст для About

void printAbout() {

cleardevice();

setcolor(7);

settextstyle(8,0,4);

char *s;

 

sprintf(s,"%s","Bidirectional list");

outtextxy(180,100,s);

 

sprintf(s,"%s","Version 1.0");

outtextxy(230,135,s);

 

sprintf(s,"%s","2013");

outtextxy(285,170,s);

 

 

}

 

// Функция прорисовки окна

void backColor (int color) {

window(1,1,80,25);

textbackground(color);

clrscr();

}

//Меню вывода диаграмм

void diagramMenu() {

 

char *back = "\n Enter - back to menu";

char *view = "\n\n\tAny key - view next diagram";

char *list = "\n\n +-------+ +-------+ +-------+\n | data | .->| data | .->| data |\n +---+---+ | +---+---+ | +---+---+\n | 0 | |-' | | |-' | | 0 |\n | | |<---| | |<---| | |\n +---+---+ +---+---+ +---+---+";

 

char *add_done = "\n\n +-----+ +-----+ +-----+ +-----+\n |info | |info | |info | |info |\n\ +--+--+ +--+--+ +--+--+ +--+--+\n |0 | |--->| | |--->| | |--->| |0 |\n | | |<---| | |<---| | |<---| | |\n +--+--+ +--+--+ +--+--+ +--+--+\n";

char *add_base = "\n\n +-----+ \n | new | \n +--+--+ \n | | | \n | | | \n +--+--+ \n \n \n +-----+ +-----+ +-----+\n |data | |data | |data |\n +--+--+ +--+--+ +--+--+\n |0 | |--->| | |--->| |0 |\n | | |<---| | |<---| | |\n +--+--+ +--+--+ +--+--+";

char *add_f = "\n\n +-----+\n | new |\n +--+--+\n .----------->|0 | |\n | | | |\n | +--+|-+\n | _____|\n | | \n | +-----+ | +-----+ +-----+\n | |data |<-' |data | |data |\n | +--+--+ +--+--+ +--+--+\n | | | |--->| | |--->| |0 |\n '-| | |<---| | |<---| | |\n +--+--+ +--+--+ +--+--+";

char *add_m = "\n\n +-----+\n | new |\n +--+--+\n .---------| | |\n | .--->| | |\n | | +--+A|+\n | | _____||\n | | | |\n +--V--+ | | +--+-V+ +-----+\n |data | | | |data | |data |\n +--+--+ | | +--+--+ +--+--+\n |0 | |-' '-| | |--->| |0 |\n | | | | | |<---| | |\n +--+--+ +--+--+ +--+--+";

char *add_l = "\n\n +-----+\n | new |\n +--+--+\n | |0 |\n | | |<-----------.\n +|-+--+ |\n |____________ |\n | |\n +-----+ +-----+ +--V--+ |\n |data | |data | |data | |\n +--+--+ +--+--+ +--+--+ |\n |0 | |--->| | |--->| | |-'\n | | |<---| | |<---| | |\n +--+--+ +--+--+ +--+--+";

 

char *del_done = "\n\n +-----+ +-----+\n |info | |info |\n\ +--+--+ +--+--+\n |0 | |--->| |0 |\n | | |<---| | |\n +--+--+ +--+--+\n";

char *del_base = "\n\n +-------+ +-------+ +-------+\n | data | | data | | data |\n +---+---+ +---+---+ +---+---+\n | 0 | |--->| | |--->| | 0 |\n +---+-A-+ +-|-+-A-+ +-|-+---+\n |________| |________|";

char *del_f = "\n\n +-------+ +-------+ +-------+\n | del | | data | | data |\n +---+---+ +---+---+ +---+---+\n | 0 | 0 | | 0 | |--->| | 0 |\n +---+---+ +---+-A-+ +-|-+---+\n |________|\n";

char *del_m = "\n\n ___________________\n | |\n +-------+ | +-------+ +---V---+\n | data | | | del | | data |\n +---+---+ | +---+---+ +---+---+\n | 0 | |-' | 0 | 0 |--->| | 0 |\n +---+-A-+ +---+---+ +-|-+---+\n |_____________________|\n";

char *del_l = "\n\n +-------+ +-------+ +-------+\n | data | | data | | del |\n +---+---+ +---+---+ +---+---+ \n | 0 | |--->| | 0 |--->| 0 | 0 |\n +---+-A-+ +-|-+---+ +---+---+\n |________|";

 

int x=30,y=10;

int count = 8;

 

char *name_Menu[]={"Two-coherent list\0", "Element insert in the list beginning\0","Element insert in the list middle\0","Element insert in the list end\0","Removal of the first element of the list\0","Removal of an element from the list middle\0","Removal of the last element of the list\0","Back\0"};

 

int count_menu;

 

init_Graph();

 

paint_Menu(x,y,count);

 

paint_Menu_Text(x,y,count,name_Menu);

 

count_menu = move_Menu(x,y,count);

 

switch (count_menu) {

case 0: {

closegraph();

backColor(5);

cout<<list;

cout<<endl<<back;

_setcursortype(0);

getch();

diagramMenu();

break;

}

 

case 1: {

closegraph();

backColor(4);

cout<<add_base;

cout<<view;

_setcursortype(0);

getch();

 

backColor(14);

cout<<add_f;

cout<<view;

_setcursortype(0);

getch();

 

backColor(5);

cout<<add_done;

cout<<back;

_setcursortype(0);

getch();

 

diagramMenu();

break;

}

 

case 2: {

closegraph();

backColor(4);

cout<<add_base;

cout<<view;

_setcursortype(0);

getch();

 

backColor(14);

cout<<add_m;

cout<<view;

_setcursortype(0);

getch();

 

backColor(5);

cout<<add_done;

cout<<back;

_setcursortype(0);

getch();

 

diagramMenu();

break;

}

 

case 3: {

closegraph();

backColor(4);

cout<<add_base;

cout<<view;

_setcursortype(0);

getch();

 

backColor(14);

cout<<add_l;

cout<<view;

_setcursortype(0);

getch();

 

backColor(5);

cout<<add_done;

cout<<back;

_setcursortype(0);

getch();

 

diagramMenu();

break;

}

 

case 4: {

closegraph();

backColor(4);

cout<<del_base;

cout<<view;

_setcursortype(0);

getch();

 

backColor(14);

cout<<del_f;

cout<<view;

_setcursortype(0);

getch();

 

backColor(5);

cout<<del_done;

cout<<back;

_setcursortype(0);

getch();

 

diagramMenu();

break;

}

 

case 5: {

closegraph();

backColor(4);

cout<<del_base;

cout<<view;

_setcursortype(0);

getch();

 

backColor(14);

cout<<del_m;

cout<<view;

_setcursortype(0);

getch();

 

backColor(5);

cout<<del_done;

cout<<back;

_setcursortype(0);

getch();

 

diagramMenu();

break;

}

 

case 6: {

closegraph();

backColor(4);

cout<<del_base;

cout<<view;

_setcursortype(0);

getch();

 

backColor(14);

cout<<del_l;

cout<<view;

_setcursortype(0);

getch();

 

backColor(5);

cout<<del_done;

cout<<back;

_setcursortype(0);

getch();

 

diagramMenu();

break;

}

 

case 7: {

mainMenu();

break;

}

}

 

closegraph();

 

}

 

//Главное меню

void mainMenu() {

 

int x=270,y=10;

int count = 4;

 

char *name_Menu[]={"Look\0", "Diagram\0","About\0","Exit\0"};

 

int count_menu;

 

init_Graph();

 

paint_Menu(x,y,count);

 

paint_Menu_Text(x,y,count,name_Menu);

 

count_menu = move_Menu(x,y,count);

switch (count_menu) {

case 0: { closegraph(); getchKey(); break;}

case 1: { diagramMenu(); break;}

case 2: { printAbout(); getch(); mainMenu(); break;}

case 3: { exit(0); break;}

}

 

closegraph();

 

}

 

int main(){

 

mainMenu();

getch();

 

return 0;

}

 



2016-01-05 500 Обсуждений (0)
Описание работы программы 0.00 из 5.00 0 оценок









Обсуждение в статье: Описание работы программы

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение...
Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация...
Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (500)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.006 сек.)