Форум программистов, компьютерный форум CyberForum.ru

Программа с меню - C++

Восстановить пароль Регистрация
 
Egor138
 Аватар для Egor138
30 / 11 / 2
Регистрация: 10.08.2012
Сообщений: 619
Записей в блоге: 2
11.08.2012, 18:46     Программа с меню #1
Недавно встретил программу в на паскале ABC может кто нибудь поможет реализовать ее на c++

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
uses crt;
const nmenu=4;  //кол-во строк в меню
      DataFileName = 'spis.dat'; //имя файла и путь к нему
type anketa=record
     tel:integer;  //номер телефона
     kod:real;     //код города
     data:string[20];  //дата разговора
     kol:real;     //кол-во минут
     sum:real;     //сумма к оплате
     end;
var
i, n: integer;
  c:char;
  spis: anketa;
  f: file of anketa;
ch:char;       //код последней нажатой клавиши
fun_key: boolean;//нажата ли спец клавиша
str_menu:array [0..nmenu-1] of string;   //массив строк меню
text_color:byte; //цвет текста меню
back_color:byte;//цвет фона строки меню
sel_text_color:byte;//цвет текста выбранного пункта меню
sel_back_color:byte;//цвет фона выбранного пункта меню
menu_back_color:byte;//цвет фона меню
screen_back_color:byte;//цвет фона экрана
border_back_color:byte;//цвет фона рамки
border_color:byte;//цвет рамки
width:byte;//ширина меню
wx:byte;//координата х левого верхнего угла меню
wy:byte;//координата у левого верхнего угла меню
dy:byte;//интервал между строками меню
crm:byte;//номер подсвеченного пункта меню
                  procedure  vivod;  //вывод на экран содержимого файла
                begin
                clrscr;
                seek(f,0);
                    writeln;
                    WriteLn('-------------------------------------------------------------------------------');
                    WriteLn('|      №  телефона   |Код города |Дата разговора|Кол-во минут| Сумма к оплате |');
                    WriteLn('-------------------------------------------------------------------------------');
                 for i:=1 to FileSize(f) do begin
                 Read(f,spis );
                 with spis do
                 begin
                  gotoxy(1,4+i);write('|');
                  gotoxy(2,4+i); write(tel);
                  gotoxy(22,4+i); write('|');
                  gotoxy(23,4+i); write(kod);
                  gotoxy(34,4+i); write('|');
                  gotoxy(35,4+i); write(data);
                  gotoxy(49,4+i); write('|');
                  gotoxy(50,4+i); write(kol);
                  gotoxy(62,4+i); write('|');
                  gotoxy(63,4+i); write(sum);
                  gotoxy(79,4+i);write('|');
                  end;
                  writeln
                  end;
                   WriteLn('-------------------------------------------------------------------------------');
                   writeln('Программа завершена. Нажмите ESC для выхода.');
                   halt
               end;
 
                 procedure dob;//добавление записей в файл
                   var n:integer;
                   begin
                   clrscr;
                   writeln('Введите кол-во добавляемых записей');
                   Readln(n);
                   if n>1 then  begin
                     for i := 1 to n do begin
                     writeln('Введите № телефона:');
                     readln(spis.tel);
                     writeln('Введите код города:');
                     readln(spis.kod);
                     writeln('Введите дату разговора:');
                     readln(spis.data);
                     writeln('Введите Количество минут:');
                     readln(spis.kol);
                     writeln('Введите сумму к оплате:');
                     readln(spis.sum);
                     Write(f, spis);
                     end;
                     end
                     else begin
                     if n=1then begin
                     writeln('Введите № телефона:');
                     readln(spis.tel);
                     writeln('Введите код города:');
                     readln(spis.kod);
                     writeln('Введите дату разговора:');
                     readln(spis.data);
                     writeln('Введите Количество минут:');
                     readln(spis.kol);
                     writeln('Введите сумму к оплате:');
                     readln(spis.sum);
                     Write(f, spis);
                     end
                     else begin writeln('Введено отрицательно число.');
                     close(f);
                     halt
                     end;
                     vivod;
                     end;
                     end;
                               procedure del;//удаление файла
                               begin
                                  close(f);
                                  Erase(f);
                                  gotoxy(27,15);writeln('Файл успешно удален. Также был создан новый файл.');
                                  assign(f, DataFileName );
                                  rewrite(f);
                               end;
                                             procedure ex;//выход
                                             begin
                                             close(f);
                                             halt
                                             end;
//процедура рисует на экране рамку
procedure box(x1,y1,x2,y2:integer);
 var i,j:integer;
begin
 gotoxy(x1+1,y1);
 for i:=x1+1 to x2+4 do write('-');
 gotoxy(x1+1,y2);
 for i:=x1+1 to x2+4 do write('-');
 for i:= y1 to y2 do
   begin
     gotoxy(x1,i);
     write('|');
   end;
 for i:=y1+1 to y2-1 do
  begin
   gotoxy(x2+4,i);
   write('|');
  end;
 gotoxy(x1,y1);
 write('0');
 gotoxy(x2+4,y1);
 write('0');
 gotoxy(x2+4,y2);
 write('0');
 gotoxy(x1,y2);
 write('0');
end;
//процедура очищает экран , вызывает процедуру вох
procedure draw_menu;
  var i,j:integer;
 begin
    textbackground(screen_back_color);
    clrscr;
    textcolor(border_color);
    textbackground(border_back_color);
    box(wx-2,wy-2,wx+width,wy+(nmenu-1)*dy+2);
    textbackground(menu_back_color);
    i:=wx-1;
    for j:=wy-1 to wy+(nmenu-1)*dy+1 do
      for i:=wx-1 to wx+width-1 do
        begin
         gotoxy(i,j);
         write('');
        end;
      for i:=0 to nmenu-1 do
       begin
       if i=crm then
        begin
          textbackground(sel_back_color);
          textcolor(sel_text_color);
        end
      else
         begin
            textbackground(back_color);
            textcolor(text_color);
         end;
      gotoxy(wx,wy+i*dy);
      write(str_menu[i]);
        end;
  end;
  //процедура устанавливает значение для переменных, хранящих цвета текста и фона:
  //размеры меню, координаты положения меню на экране и текст, содержащийся в строках меню
procedure init;
begin
   text_color:=blue;
   back_color:=white;
   sel_text_color:=yellow;
   sel_back_color:=green;
   menu_back_color:=blue;
   screen_back_color:=white;
   border_back_color:=lightgray;
   border_color:=red;
   width:=25;
   wx:=25;
   wy:=9;
   dy:=1;
   crm:=0;
   str_menu[0]:='Просмотреть содержимое файла';
   str_menu[1]:='Добавить записи в файл';
   str_menu[2]:='Удалить файл';
   str_menu[3]:='Выход из программы';
end;
//процедура получая параметры-значения Old - старый номер подсвеченной строки
//menu и Sel - новый номер подсвеченной строки, обновляет изображение меню на
//экране за счет печати строки меню со старым номером цветом Text_Color на фоне
//Back_Сolor, а строки меню с новым номером цветом Sel_Text_Color на фоне цветом
//Sel_Back_Color
procedure new_menu(old,sel:integer);
   begin
        textbackground(sel_back_color);
        textcolor(sel_text_color);
        gotoxy(wx,wy+sel*dy);
        write(str_menu[sel]);
        textbackground(back_color);
        textcolor(text_color);
        gotoxy(wx,wy+old*dy);
        write(str_menu[old]);
   end;
//процедура реагирует на нажатие клавиши со стрелкой вверх
procedure up;
  var old:byte;
begin
     old:=crm;
     if crm-1=-1 then crm:=nmenu;
     crm:=crm-1;
     if crm=-1 then crm:=nmenu-1;
     new_menu(old,crm);
end;
//процедура реагирует на нажатие клавиши со стрелкой вниз
procedure down;
  var old:byte;
begin
     old:=crm;
     crm:=crm+1;
     if crm=nmenu then crm:=0;
     new_menu(old,crm);
end;
//процедура получает параметр-значение - номер выбранного пункта меню и имитирует
//действие программы при выборе данного пункта меню и имитирует действие программы
//при выборе данного пункта
procedure do_select(n:integer);
  begin
   textcolor(n);
   if n=0 then vivod;
   if n=1 then dob;
   if n=2 then del;
   if n=3 then ex;
   gotoxy(1,1);write('Выполнение задания из пункта',n+1);
  end;
//Процедура, получив параметры-значения key и fun_key, выполняет проверку клавиши
//и, если была нажата клавиша Enter, то передает управление процедуре do_select
//указывая ей номер выбранного пункта меню. Если была нажата клавиша со стрелкой
//вверх или вниз, то вызываются проуедуры up или down соответственно.
procedure do_command(key:char;fun_key:boolean);
  begin
      if (not fun_key) or (upcase(key)=#13)// если не спец клавиша и нажата клавиша Enter
        then do_select(crm);
         if fun_key then //если спецклавиша
         case upcase(key) of
          #72: up;
          #80: down;
         end;
  end;
//основная программа
begin
assign(f, DataFileName );  //открытие файла
    if not FileExists( DataFileName )   //проверка существования файла
    then Rewrite(f)
    else begin reset(f); seek(f, FileSize(f)) end;
  init;
  draw_menu;
  repeat
     ch:=readkey;
     if ch=#0 then
       begin
         fun_key:=true;
         ch:=readkey;
       end
       else fun_key:=true;
       do_command(ch,fun_key);
   until (ch=#27);
close(f);
end.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.08.2012, 18:46     Программа с меню
Посмотрите здесь:

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

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
serg3091
 Аватар для serg3091
12 / 12 / 0
Регистрация: 09.10.2010
Сообщений: 143
11.08.2012, 22:42     Программа с меню #2
а в чём сложность? или сделать за тебя нужно, тогда это другой вопрос уже
Yandex
Объявления
11.08.2012, 22:42     Программа с меню
Ответ Создать тему
Опции темы

Текущее время: 02:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru