LINUX.ORG.RU

GUI к консольной проге


0

0

В универе дали лабу состоящую из двух частей:
1) Описать пару классов для работы со строками (нормальная часть)
2) Написать консольную гуйню (дерьмовая часть)

Когда я спросил у препода какими средствами рисовать гуйню он сказал "любыми, хоть conio.h".

Вот что нам нужно рисовать:

      Написать тестовую программу на языке С++ в соответствии
      с выданным вариантом задания.

      Программа должна иметь меню и окна для отображения
      необходимой информации.

      Предлагается следующая организация работы программы:

 ┌──────────────────────────────────────────────────────────────────────────┐
 │ ┌───────────────┐           ┌──────────────┐           ┌───────────────┐ │
 │ │ Инициализация │           │ Тестирование │           │     Выход     │ │
 │ └───────────────┘           └──────────────┘           └───────────────┘ │
 │       │  Выпад.                    │  Выпад.                             │
 │      \ / меню                     \ / меню                               │
 │ -------------------        -------------------       ------------------- │
 │ |┌───────────────┐|        |┌───────────────┐|       | Выпадающее меню | │
 │ |│ Кол-во эл-тов │|        |│ Базовый класс │| ----- |                 | │
 │ |└───────────────┘|        |└───────────────┘|       | с перечислением | │
 │ |┌───────────────┐|        |┌───────────────┐|       |                 | │
 │ |│ Нач. значения │|        |│ Строка идент. │| ----- | методов для     | │
 │ |└───────────────┘|        |└───────────────┘|       |                 | │
 │ -------------------        |┌───────────────┐|       | соответствующего| │
 │                            |│ В зав. от вар.|| ----- |                 | │
 │                            |└───────────────┘|       | класса.         | │
 │                            |┌───────────────┐|       |                 | │
 │                            |│    Операнды   ||       |                 | │
 │                            |└───────────────┘|       |                 | │
 │                            -------------------       ------------------- │
 │                                                                          │
 │                                                                          │
 │                [1]                                   [2]                 │
 │ ┌──────────────────────────────┐         ┌─────────────────────────────┐ │
 │ │1                             │         │                             │ │
 │ │2                             │         │                             │ │
 │ │3                             │         │                             │ │
 │              .                           │                             │ │
 │              .                           │                             │ │
 │              .                           │                             │ │
 │ │N                             │         │                             │ │
 │ └──────────────────────────────┘         └─────────────────────────────┘ │
 │                                                                          │
 │                                                                          │
 └──────────────────────────────────────────────────────────────────────────┘
 Расположение пунктов меню и окон отображения информации может быть изменено
 без их сокращения.
 
 Активный на данный момент времени пункт меню должен быть выделен.
 Перемещение по пунктам меню должно осуществляться с помощью "стрелок",
 выбор - <Enter>, можно задействовать <Esc> для закрытия выпадающих пунктов
 меню. Нажатие других клавиш при работе с меню должно игнорироваться.

 Первоначально пункты меню "Тестирование" и "Начальные значения" запрещены.

 После ввода числа создаваемых объектов по пункту меню "Кол-во элементов"
 в программе осуществляется динамическое выделение памяти под массив указа-
 телей на базовый класс соответствующей размерности, этот пункт запрещается
 и разрешается пункт "Начальные значения". При этом на экране появляется
 окно [1] с количеством пронумерованных строк в соответствии со значением N,
 введенным ранее как число создаваемых объектов и окно [2] для последующего
 вывода в него информации об отработке соответствующих конструкторов и
 деструкторов.

 Пункт меню "Тестирование" разрешается после ввода начальных значений хотя
 бы для одного объекта.

 Все сформированные в процессе создания объектов строки отображаются в окне
 [1] в соответствуюшей введенному номеру объекта строке с указанием типа
 созданного объекта. При этом, если строки удовлетворяют правилам представле-
 ния для данного типа, то они отображаются в точном соответствии с введенным
 значением, а если нет - в соответствии с правилами,указанными в варианте 
 задания.

 Если в процессе тестирования значение объекта изменяется, то новое значение
 также должно отобразиться в окне [1].

 Пункт меню "Операнды" служит для ввода номеров операндов, над которыми
 будут производиться выбранные действия. Количество операндов может быть
 от одного до трех (в зависимости от выбранного для тестирования метода).
 Для операций "сложение", "вычитание","умножение","деление" и т.п. обязательно
 использование трех операндов ( два - над которыми производится действие
 и один - куда будет помещен результат ). Номера операндов могут совпадать.

 Вне методов/операций классов объекты могут создаваться/удаляться только при
 инициализации нового значения и при выходе из программы.
                            
 Инициализация (или изменение значения и типа) одного или нескольких объектов
 производного класса может производиться в любой момент времени и в любом по-
 рядке после ввода количества создаваемых значений без изменения значений и типа
 других ранее проинициализированых объектов. При этом допускается ограничение 
 для вводимых значений тестируемых строк и строки результата ( до 16 символов ).
 Если объект с данным номером был ранее проинициализирован, он д.б. удален.

 Допускается отсутствие пункта меню "Операнды" - в этом случае запрос номеров
 операндов осуществляется сразу после выбора соответствующего метода для
 тестирования.

 Необходимо также предусмотреть вывод различной диагностической информации:
 - сообщения об ошибках(в том числе и при переполнении разрядной сетки),
 - результат работы тестируемых методов не изменяющих значение тестируемого
   объекта и т.п. 

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

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

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

Посоветуйте либу, с помощью которой можно написать сие.
Попроще что-нибудь.

У него ASP стоит в кабинете, думаю ncurses стоит там по дефолту?

Ty3uK
() автор топика
Ответ на: комментарий от MKuznetsov

#!/usr/bin/tclsh
package require Tk
menu .main
.main add cascade -label "Init" -menu .main.init
.main add cascade -label "Test" -menu .main.test
.main add command -label "Exit" -command {destroy .}
menu .main.init
.main.init add command -label "Number of item" -command {setQuatity}
.main.init add command -label "Initial values" -command {setInitial}
menu .main.test
.main.test add cascade -label "Base class" -menu .main.test.base
.main.test add command -label "Another menu item"

menu .main.test.base -postcommand {
     .main.test.base delete 0 end
     for { set i 0 } { $i < 10 } { incr i} {
         .main.test.base add command -label "Method $i"
     }
}
. configure -menu .main
proc setQuatity {} {
     tk_messageBox -message "Under development" -type ok
}
proc setInitial {} {
     tk_messageBox -message "Under development" -type ok
}

MKuznetsov ★★★★★
()
Ответ на: комментарий от sjorij

Спасибо за ссылку, ncurses то что надо.
Пишем на Cpp.

Ty3uK
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.