Π”ΠΈΠΏΠ»ΠΎΠΌΡ‹, курсовыС, Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚Ρ‹, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅...
Брочная ΠΏΠΎΠΌΠΎΡ‰ΡŒ Π² ΡƒΡ‡Ρ‘Π±Π΅

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Β«Π‘Ρ‚Ρ€ΠΎΠΊΠ°Β», строки ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΈ дСсятичной строки. 
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ графичСского интСрфСйса

ΠšΡƒΡ€ΡΠΎΠ²Π°ΡΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° класса графичСского мСню. Π’ Π΄Π°Π½Π½Ρ‹ΠΉ класс Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΊΠ°ΠΊ: отрисовка элСмСнтов мСню ΠΈ ΠΏΠΎΠ΄ΠΌΠ΅Π½ΡŽ, рСализация ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° развёртывания ΠΈ ΡΠ²Ρ‘ртывания подмСню, пСрСмСщСния ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡƒΠ½ΠΊΡ‚Π°ΠΌΠΈ мСню ΠΈ ΠΏΠΎΠ΄ΠΌΠ΅Π½ΡŽ, ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Π²Ρ‹Π±ΠΎΡ€Π° ΠΏΡƒΠ½ΠΊΡ‚Π° мСню ΠΈ Ρ‚. Π΄. ЦСлью Π΄Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ являСтся созданиС класса «ΡΡ‚Ρ€ΠΎΠΊΠ°» ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… классов ΠΎΡ‚ Π½Π΅Π³ΠΎ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° интСрфСйса для Π²Π²ΠΎΠ΄Π° Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ…… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Β«Π‘Ρ‚Ρ€ΠΎΠΊΠ°Β», строки ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΈ дСсятичной строки. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ графичСского интСрфСйса (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

Π€Π΅Π΄Π΅Ρ€Π°Π»ΡŒΠ½ΠΎΠ΅ государствСнноС Π±ΡŽΠ΄ΠΆΠ΅Ρ‚Π½ΠΎΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΡƒΡ‡Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ образования Балтийский государствСнный тСхничСский унивСрситСт «Π’ΠΎΠ΅Π½ΠΌΠ΅Ρ…» ΠΈΠΌ. Π”.Π€. Устинова

ΠšΠ£Π Π‘ΠžΠ’ΠΠ― Π ΠΠ‘ΠžΠ’Π

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса строка, строки ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΈ Π΄Π΅ΡΡΡ‚ΠΈΡ‡Π½ΠΎΠΉ строки. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ графичСского интСрфСйса

Π ΡƒΠΊΠΎΠ²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ Ρ‚Π΅ΠΌΡ‹ Π‘Π΅Π·Ρ€ΡƒΠΊΠΎΠ² Π’.А.

Π˜ΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒ Ρ‚Π΅ΠΌΡ‹ Π‘ΠΎΡ‡ΠΊΠ°Ρ€Π΅Π² А.Π‘.

Π‘Π°Π½ΠΊΡ‚-ΠŸΠ΅Ρ‚Π΅Ρ€Π±ΡƒΡ€Π³ 2014

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

ВСхничСскоС Π·Π°Π΄Π°Π½ΠΈΠ΅

1. Класс строка

1.1 Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ класс строка

1.2 Π‘Ρ‚Ρ€ΠΎΠΊΠ° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€

1.3 ДСсятичная строка

2. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ

2.1 Класс Desk (Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ стол)

2.2 Класс Menu (мСню/подмСню)

2.3 Класс MenuItem (ΠΏΡƒΠ½ΠΊΡ‚ мСню)

2.4 Класс Listbox (тСкстовый бокс/список)

2.5 Класс ListItem (элСмСнт списка)

2.6 ОписаниС Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Бписок Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ

ЦСлью Π΄Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ являСтся созданиС класса «ΡΡ‚Ρ€ΠΎΠΊΠ°» ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… классов ΠΎΡ‚ Π½Π΅Π³ΠΎ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° интСрфСйса для Π²Π²ΠΎΠ΄Π° Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, отобраТСния Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² ΠΈ Ρ‚Сстирования ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² собствСнного класса.

Для достиТСния поставлСнной Ρ†Π΅Π»ΠΈ Π±Ρ‹Π»ΠΈ осущСствлСны ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ:

1. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° класса Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ стола. Π’ Π½Π΅Π³ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΊΠ°ΠΊ: отрисовка Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ стола, Π²Π²ΠΎΠ΄ числовых ΠΈ ΡΡ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, Π²Ρ‹Π²ΠΎΠ΄ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² ΠΈ ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…, рСализация ΠΊΠΎΠΌΠ°Π½Π΄ мСню ΠΈ Ρ‚. Π΄. Π—Π°Π΄Π°Ρ‡Π΅ΠΉ класса Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊ Π½Π΅ΠΌΡƒ привязаны.

2. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° класса графичСского мСню. Π’ Π΄Π°Π½Π½Ρ‹ΠΉ класс Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΊΠ°ΠΊ: отрисовка элСмСнтов мСню ΠΈ ΠΏΠΎΠ΄ΠΌΠ΅Π½ΡŽ, рСализация ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° развёртывания ΠΈ ΡΠ²Ρ‘ртывания подмСню, пСрСмСщСния ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡƒΠ½ΠΊΡ‚Π°ΠΌΠΈ мСню ΠΈ ΠΏΠΎΠ΄ΠΌΠ΅Π½ΡŽ, ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Π²Ρ‹Π±ΠΎΡ€Π° ΠΏΡƒΠ½ΠΊΡ‚Π° мСню ΠΈ Ρ‚. Π΄.

3. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° классов: базовая строка, строка ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, дСсятичная строка согласно тСхничСскому заданию.

ВСхничСскоС Π·Π°Π΄Π°Π½ΠΈΠ΅

ΠžΠΏΠΈΡΠ°Ρ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс строка

ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‡Π»Π΅Π½Ρ‹ класса:

1) ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° char — Ρ…Ρ€Π°Π½ΠΈΡ‚ адрСс динамичСски Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ памяти для размСщСния символов строки;

2) Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° int — Ρ…Ρ€Π°Π½ΠΈΡ‚ Π΄Π»ΠΈΠ½Ρƒ строки Π² Π±Π°ΠΉΡ‚Π°Ρ….

ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ дСйствия:

1) конструктор Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²;

2) конструктор, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π‘ΠΈ-строку (заканчиваСтся Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ Π±Π°ΠΉΡ‚ΠΎΠΌ);

3) конструктор, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° символ (char);

4) конструктор копирования;

5) дСструктор.

6) очистка строки (ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ строку пустой);

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ ΠΎΡ‚ Π‘Ρ‚Ρ€ΠΎΠΊΠ° класс Π‘Ρ‚Ρ€ΠΎΠΊΠ°-ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€.

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса строятся ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ записи ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² Π² Π‘И, ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² ΡΠ΅Π±Ρ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² ΡΠΎΡΡ‚Π°Π² Π‘ΠΈ-ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ². Если исходныС Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡Π°Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ записи ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°, Ρ‚ΠΎ ΡΠΎΠ·Π΄Π°Π΅Ρ‚ся пустая БВРОКА_Π˜Π”Π•ΠΠ’Π˜Π€Π˜ΠšΠΠ’ΠžΠ .

ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹:

1) ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²;

2) ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π‘ΠΈ-строку (заканчиваСтся Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ Π±Π°ΠΉΡ‚ΠΎΠΌ);

3) ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ копирования;

4) ДСструктор.

5) ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ всСх символов строки (ΠΊΡ€ΠΎΠΌΠ΅ Ρ†ΠΈΡ„Ρ€) Π² Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ рСгистр.

ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ:

1) присваиваниС (=);

2) ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ == -ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ€Π°Π²Π΅Π½ΡΡ‚Π²ΠΎ;

3) индСксноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ [];

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ ΠΎΡ‚ Π‘Ρ‚Ρ€ΠΎΠΊΠ° класс ДСсятичная строка.

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ символы дСсятичных Ρ†ΠΈΡ„Ρ€ ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Ρ‹ — ΠΈ +, Π·Π°Π΄Π°ΡŽΡ‰ΠΈΠ΅ Π·Π½Π°ΠΊ числа. Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ — ΠΈΠ»ΠΈ + ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ числа, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ символ + ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ, Π² ΡΡ‚ΠΎΠΌ случаС число считаСтся ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ. Если Π² ΡΠΎΡΡ‚Π°Π²Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ строки Π±ΡƒΠ΄ΡƒΡ‚ встрСчСны Π»ΡŽΠ±Ρ‹Π΅ символы, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΎΡ‚ Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΠΌΡ‹Ρ…, ДСсятичная строка ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… строк рассматриваСтся ΠΊΠ°ΠΊ дСсятичноС число.

ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹:

1) конструктор Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²;

2) конструктор, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π‘ΠΈ-строку (заканчиваСтся Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ Π±Π°ΠΉΡ‚ΠΎΠΌ);

3) конструктор копирования;

4) дСструктор;

ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ, ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΄Π°Π½Π½ΠΎΠ΅ число Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ char;

ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ:

1) присваиваниС (=);

2) слоТСниС — - арифмСтичСская Ρ€Π°Π·Π½ΠΎΡΡ‚ΡŒ строк;

3) опСрация == - ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ€Π°Π²Π΅Π½ΡΡ‚Π²ΠΎ;

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π²ΠΏΡ€Π°Π²Π΅ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ любоС (с ΠΎΠ±ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ нСобходимости) число Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ‡Π»Π΅Π½ΠΎΠ² ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

Π—Π°Π΄Π°Π½ΠΈΠ΅:

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ классов ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ схСмС:

с ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… Ρ‡Π»Π΅Π½ΠΎΠ² ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π΅ΡΡ‚ΠΎΠ²ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая:

1) динамичСски выдСляСт массив ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс (4−6 ΡˆΡ‚.);

2) Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π΄ΠΈΠ°Π»ΠΎΠ³Π° заполняСт этот массив указатСлями Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Π΅ классы, ΠΏΡ€ΠΈ этом экзСмпляры ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… классов ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ динамичСски с Π·Π°Π΄Π°Π½ΠΈΠ΅ΠΌ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ;

3) для созданных экзСмпляров ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… классов выполняСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° всСх Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² (Π² ΡΠΎΠΎΡ‚вСтствии с Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ задания), с Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ исходных Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π½Π° Π΄ΠΈΡΠΏΠ»Π΅ΠΉ.

Π Π΅ΠΆΠΈΠΌ Π΄ΠΈΠ°Π»ΠΎΠ³Π° обСспСчиваСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ иСрархичСского мСню.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΏΡƒΠ½ΠΊΡ‚Ρ‹:

1. «Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ» .

ΠŸΠΎΠ΄ΠΏΡƒΠ½ΠΊΡ‚Ρ‹:

1.1. «Π§ΠΈΡΠ»ΠΎ элСмСнтов» — Π·Π°Π΄Π°Π΅Ρ‚ число элСмСнтов Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс. ЗапрСщаСтся послС задания числа элСмСнтов ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ этим ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠΌ мСню.

1.2. «ΠΠ°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅» — с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этого ΠΏΡƒΠ½ΠΊΡ‚Π° мСню ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€ элСмСнта, Π΅Π³ΠΎ Ρ‚ΠΈΠΏ ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π—Π°Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ значСния ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΡƒΠ½ΠΊΡ‚Π°ΠΌΠΈ мСню запрСщаСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π΄Π°Π½ΠΎ число элСмСнтов. ДопускаСтся Π·Π°Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ нСсколько Ρ€Π°Π·.

2. «Π’СстированиС»

Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠΎΠ΄ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠ² ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚ΠΈΠΏΡ‹ строк ΠΈΠ· Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° задания ΠΈ

ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ для всСх ΠΏΠΎΠ΄ΠΏΡƒΠ½ΠΊΡ‚Ρ‹ «ΡΡ‚Ρ€ΠΎΠΊΠ°» ΠΈ «Π·Π°Π΄Π°Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°», Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

2.1. «Π‘Ρ‚Ρ€ΠΎΠΊΠ°» ;

2.2. «Π‘Ρ‚Ρ€ΠΎΠΊΠ°-ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€» ;

2.3. «Π”Ссятичная строка» ;

ПослС Π²Ρ‹Π±ΠΎΡ€Π° ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠ² мСню прСдлагаСтся Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² списка всСх ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² (ΠΊΡ€ΠΎΠΌΠ΅ конструкторов ΠΈ Π΄Π΅ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ΠΎΠ²), связанных с Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΌ ΠΏΠΎΠ΄ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠΌ. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выводится Π½Π° ΡΠΊΡ€Π°Π½.

3. «Π’Ρ‹Ρ…ΠΎΠ΄»

ЗначСния экзСмпляров классов ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ ΠΈΡ… ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ выводятся Π½Π° Π΄ΠΈΡΠΏΠ»Π΅ΠΉ ΠΈ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π½Π° Π²ΡΠ΅ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ПослС Π²Ρ‹Π±ΠΎΡ€Π° ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ² ΠΎΠ½ΠΈ ΠΏΠΎΠ΄ΡΠ²Π΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ†Π²Π΅Ρ‚ΠΎΠΌ, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΎΡ‚ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… экзСмпляров.

1. Класс Π‘Ρ‚Ρ€ΠΎΠΊΠ°

1.1 Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ класс Π‘Ρ‚Ρ€ΠΎΠΊΠ°

НазваниС класса: String. ЯвляСтся Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ классов для классов дСсятичная строка ΠΈ ΡΡ‚Ρ€ΠΎΠΊΠ° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€.

Π”Π°Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Ρ‹ класса, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ protected:

1) char *str — ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΌΠ°ΡΡΠΈΠ² символов;

2) int len — пСрСмСнная, хранящая Π΄Π»ΠΈΠ½Ρƒ строки.

ΠœΠ΅Ρ‚ΠΎΠ΄Π° классы строка:

1) string () — конструктор Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², создаСт строку Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹;

2) String (const char *) — конструктор, Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ Π‘ΠΈ-строку.;

3) String (const char) — конструктор, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΎΠ΄ΠΈΠ½ символ.;

4) String (const String &) — конструктор копирования;

5) ~String () — дСструктор;

6) void clear (); - функция, ΠΎΡ‡ΠΈΡ‰Π°ΡŽΡ‰Π°Ρ строку;

7) char *text () — функция, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π°Ρ Π‘ΠΈ-строку

8) void friend report (char *) — друТСствСнная функция Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ сообщСния ΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ конструкторов/дСструкторов Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»ΡŒ, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ сообщСния ΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ конструкторов Π² ΠΏΡ€Π°Π²ΠΎΠ΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ.

1.2 Π‘Ρ‚Ρ€ΠΎΠΊΠ° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€

интСрфСйс ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ графичСский ΠΎΠΏΠ΅Ρ€Π°Π½Π΄

НазваниС класса: Identifier. Π”Π°Π½Π½Ρ‹ΠΉ класс являСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌ классом класса String.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса Identifier:

1) Identifier () — конструктор;

2) Identifier (const char *) — конструктор, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° си-строку.

3) Identifier (const Identifier &) — конструктор копирования;

4) ~Identifier () — дСструктор;

5) Identifier operator =(const Identifier &) — пСрСопрСдСлСнная опСрация присваивания Ρ‚ΠΈΠΏΠ° «ΠΎΠ±ΡŠΠ΅ΠΊΡ‚» = «ΠΎΠ±ΡŠΠ΅ΠΊΡ‚» ;

6) Identifier operator =(const char *) — пСрСопрСдСлСнная опСрация присваивания Ρ‚ΠΈΠΏΠ° «ΠΎΠ±ΡŠΠ΅ΠΊΡ‚» = «ΡΠΈ-строка» ;

7) Identifier operator ==(const Identifier &) — пСрСопрСдСлСнная опСрация ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° Ρ€Π°Π²Π΅Π½ΡΡ‚Π²ΠΎ;

8) сhar operator [](int) — пСрСопрСдСлСнная опСрация индСкса.

1.3 ДСсятичная строка

НаимСнованиС класса: Tenstring. Π”Π°Π½Π½Ρ‹ΠΉ класс являСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌ классом класса String. ΠœΠ΅Ρ‚ΠΎΠ΄Π° Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса:

1) Tenstring () — конструктор;

2) Tenstring (const char *) — конструктор, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π‘ΠΈ-строку;

3) Tenstring (const Tenstring &) — конструктор копирования;

4) ~ Tenstring () — дСструктор;

5) Tenstring operator =(const Tenstring &) — пСрСопрСдСлСнная опСрация присваивания Ρ‚ΠΈΠΏΠ° «ΠΎΠ±ΡŠΠ΅ΠΊΡ‚» = «ΠΎΠ±ΡŠΠ΅ΠΊΡ‚» ;

6) Tenstring operator =(const char *) — пСрСопрСдСлСнная опСрация присваивания Ρ‚ΠΈΠΏΠ° «ΠΎΠ±ΡŠΠ΅ΠΊΡ‚» = «ΡΠΈ-строка» ;

7) Tenstring operator ?(Tenstring &) — пСрСопрСдСлСнная опСрация разности (арифмСтичСская Ρ€Π°Π·Π½ΠΎΡΡ‚ΡŒ строк);

8) int operator ==(Tenstring &) — ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° равСнства строк;

9) void ChangeChar () — ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ числа Π² char

2. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ

2.1 Класс Desk (Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ стол)

Π”Π°Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Ρ‹ класса desk ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ private:

1) char ClassName[3][12] - массив строк — ΠΈΠΌΡ‘Π½ тСстируСмых классов.

2) Menu mn, mn1, mn2, mn3, mn4, mn5 — мСню ΠΈ ΠΏΠΎΠ΄ΠΌΠ΅Π½ΡŽ — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса Menu.

3) ListBox *lbx1, *lbx2 — ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса ListBox — ΠΏΡ€Π°Π²Ρ‹ΠΉ ΠΈ Π»Π΅Π²Ρ‹ΠΉ тСкстовыС боксы.

4) INSTANCE inst[LIMIT] - массив структур INSTANCE — содСрТит ΠΈΠΌΠ΅Π½Π° ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ экзСмпляров тСстируСмых классов строк.

5) int count — количСство созданных экзСмпляров тСстируСмых классов.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса desk ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ public:

1) Desk () — конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

2) ~Desk () — дСструктор

3) void PaintBg (void) — рисуСт Ρ„ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ стола.

4) void Go (void) — Π½Π°Ρ‡Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅.

5) void Command (void) — Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ мСню

6) void setCount (void) — количСство экзСмпляров тСстируСмых классов.

7) void Init (void) — инициализация экзСмпляров тСстируСмых классов.

8) int numInput (int, int, int, int, char *) — Π²Π²ΠΎΠ΄ цСлочислСнного значСния.

9) void strInput (int, int, int, int, char *, char *, int) — Π²Π²ΠΎΠ΄ строкового значСния.

10) int str2int (char *, int &) — ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΈΠ· ΡΡ‚Ρ€ΠΎΠΊΠΈ Π² Ρ‡ΠΈΡΠ»ΠΎ.

11) int dataError (int, int, int, int) — Π²Ρ‹Π²ΠΎΠ΄ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ….

12) String *CreateInstance (int, char *) — созданиС экзСмпляра тСстируСмого класса

13) void numResult (int, int, int, int, char *, int) — Π²Ρ‹Π²ΠΎΠ΄ числовых Π΄Π°Π½Π½Ρ‹Ρ….

14) void Msg (int, int, int, int, char *) — Π²Ρ‹Π²ΠΎΠ΄ сообщСния.

15) void strclear (void) — рСализация ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ мСню «ΠΎΡ‡ΠΈΡΡ‚ΠΊΠ° строки»

16) void sidToUpper (void) — рСализация ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ мСню «ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π² Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ рСгистр»

17) void sidAssign (void) — рСализация ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ мСню «ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ²»

18) void sidSub (void) — рСализация ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ мСню «ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ€Π°Π²Π΅Π½ΡΡ‚Π²ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ²» .

19) void Ind (void) — рСализация ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ мСню — «ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅»

20) void sbtInd (void) — рСализация ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ мСню «Ρ€Π°Π·Π½ΠΎΡΡ‚ΡŒ дСсятичных строк» .

21) void sbtChangeChar (void) — рСализация ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ мСню «ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ числа Π² char» .

22) void sbtAssign (void) — рСализация ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ мСню «ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ дСсятичных строк» .

23) void sbtSub (void) — рСализация ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ мСню «ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ€Π°Π²Π΅Π½ΡΡ‚Π²ΠΎ дСсятичных строк»

2.2 Класс Menu (мСню/подмСню)

Π”Π°Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Ρ‹ класса ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ private

1) Menu *supmenu — ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π³Π»Π°Π²Π½ΠΎΠ΅ мСню.

2) MItem mItem[10] - массив элСмСнтов (ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠ²) мСню.

3) int n — количСство элСмСнтов мСню.

4) int selected — Π½ΠΎΠΌΠ΅Ρ€ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ элСмСнта (ΠΏΡƒΠ½ΠΊΡ‚Π°) мСню.

5) bool visible — Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ/Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ мСню.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса:

1) Menu () — конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

2) Menu (Menu *, int) — конструктор с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ.

3) ~Menu () — дСструктор.

4) void Add (int, int, int, int, char *) — Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнта мСню.

5) void setSubmenu (Menu *, int) — Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ подмСню ΠΊ ΠΏΡƒΠ½ΠΊΡ‚Ρƒ мСню.

6) void Show (void) — ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ мСню.

7) void Hide (void) — ΡΠΊΡ€Ρ‹Ρ‚ΡŒ мСню.

8) void setSelect (int) — Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΏΡƒΠ½ΠΊΡ‚ мСню.

9) int getSelected (void) — Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡƒΠ½ΠΊΡ‚Π° мСню.

10) void setEnable (int) — ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ доступным ΠΏΡƒΠ½ΠΊΡ‚ мСню.

11) int isEnable (int) — ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΏΡƒΠ½ΠΊΡ‚Π° мСню.

12) void setDisable (int) — ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ нСдоступным ΠΏΡƒΠ½ΠΊΡ‚ мСню.

13) void Forward (void) — ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΏΡƒΠ½ΠΊΡ‚Ρƒ мСню.

14) void Backward (void) — Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ ΠΏΡƒΠ½ΠΊΡ‚Ρƒ мСню.

15) void Upward (void) — ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ ΠΏΡƒΠ½ΠΊΡ‚Ρƒ подмСню.

16) void Downward (void) — ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΏΡƒΠ½ΠΊΡ‚Ρƒ подмСню.

17) Menu *getSubMenu (int) — ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΠΎΠ΄ΠΌΠ΅Π½ΡŽ ΠΏΠΎ Π½ΠΎΠΌΠ΅Ρ€Ρƒ ΠΏΡƒΠ½ΠΊΡ‚Π° мСню.

2.3 Класс MenuItem (ΠΏΡƒΠ½ΠΊΡ‚ мСню)

Π”Π°Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Ρ‹ класса ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ private

1) int status — статус ΠΏΡƒΠ½ΠΊΡ‚Π° мСню.

2) int x, y, w, h — ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΏΡƒΠ½ΠΊΡ‚Π° мСню.

3) char text[16] - тСкст ΠΏΡƒΠ½ΠΊΡ‚Π° мСню.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса:

1) MenuItem () конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

2) MenuItem (int, int, int, int, char *) — конструктор с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ.

3) void Show (void) — ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡƒΠ½ΠΊΡ‚ мСню.

4) void Hide (void) — ΡΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΏΡƒΠ½ΠΊΡ‚ мСню.

5) void setStatus (int) — Π·Π°Π΄Π°Ρ‚ΡŒ статус ΠΏΡƒΠ½ΠΊΡ‚Π° мСню.

6) int getStatus (void) — ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ статус ΠΏΡƒΠ½ΠΊΡ‚Π° мСню.

7) ~MenuItem () — дСструктор.

2.4 Класс Listbox (тСкстовый бокс/список)

Π”Π°Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Ρ‹ класса ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ private

1) int x, y, w, h — ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ бокса.

2) int n — количСство строк тСкста.

3) ListItem *lItem[STR_MAX] - массив ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ списка (строки тСкста).

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса:

1) ListBox (void) — конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

2) ListBox (int, int, int, int) — конструктор с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ.

3) ~ListBox (void) — дСструктор.

4) void Add (char *) — Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ строку тСкста.

5) void AddSeveral (int) — Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ нСсколько строк тСкста.

6) void UpdateRow (int, char *) — ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ строку.

7) void Clear (void) — ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ строки.

8) void Show (void) — ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ бокс.

9) void Erase (void) — ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ строки.

2.5 Класс ListItem (элСмСнт списка)

Π”Π°Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Ρ‹ класса ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ private

1) int x, y, w, h — ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ элСмСнта списка (строки тСкста)

2) ListBox *lbx — ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€.

Π”Π°Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Ρ‹ класса ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ public:

1) char text[STR_LEN+1] - строка тСкста.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса:

1) ListItem (void) — конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

2) ListItem (int, int, int, int, char *) — конструктор с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ.

3) ~ListItem (void) — дСструктор.

4) void setText (char *) — Π·Π°Π΄Π°Ρ‚ΡŒ тСкст стороки.

5) void Show (void) — ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ строку.

void Erase (void) — ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ строку.

2.6 ОписаниС

Π’Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ «ΠΊΠ»Π°ΡΡ ΠΎΠΊΠ½Π°» являСтся структорой menu ΠΈ ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΠΎΠΊΠ½Π΅. Данная структура содСрТит большоС количСство ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ — конструктор. МСню ΠΎΠΊΠ½Π° создаСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ класса desk. Класс desk содСрТит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡƒΠ½ΠΊΡ‚Ρ‹:

1. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ

o Π§ΠΈΡΠ»ΠΎ элСмСнтов

o ΠΠ°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ значСния

2. ВСстированиС

o Π‘Ρ‚Ρ€ΠΎΠΊΠ°

§ ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ

o Π‘Ρ‚Ρ€ΠΎΠΊΠ°-ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€

§ ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π² Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ рСгистр

§ ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ =

§ ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ€Π°Π²Π΅Π½ΡΡ‚Π²ΠΎ ==

§ ИндСкс

o Π”Ссятичная строка

§ МоТно Π»ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ char

§ ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ =

§ Π’Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅ ?

§ ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ€Π°Π²Π΅Π½ΡΡ‚Π²ΠΎ ==

3. Π’Ρ‹Ρ…ΠΎΠ΄.

ВсС Π΄ΠΈΠ°Π»ΠΎΠ³ΠΈ созданы ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ класса listbox.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ЦСль курсовой Ρ€Π°Π±ΠΎΡ‚Ρ‹ достигнута. Π‘Ρ‹Π»ΠΈ созданы тСстируСмыС классы: Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс Π‘Ρ‚Ρ€ΠΎΠΊΠ°, Π‘Ρ‚Ρ€ΠΎΠΊΠ°-ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ДСсятичная строка. Π’Π°ΠΊ ΠΆΠ΅ Π±Ρ‹Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ классы интСрфСйса: класс Π Π°Π±ΠΎΡ‡Π΅Π³ΠΎ стола ΠΈ ΠΊΠ»Π°ΡΡ МСню. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ тСстируСмых классов Π±Ρ‹Π»ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ ΠΊ ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌ мСню ΠΈ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌ ΠΎΠΊΠ½Π°ΠΌ. ВСстируСмыС классы ΠΈ ΠΈΠ½Ρ‚СрфСйс Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ.

Из ΠΈΠ½Ρ‚СрфСйса Π±Ρ‹Π» ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΏΡƒΠ½ΠΊΡ‚ мСню «Π’СстированиС — Π—Π°Π΄Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄», Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹ вводились нСпосрСдствСнно ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° тСстируСмого класса

1. Π‘. И. Π‘Π΅Ρ€Π΅Π·ΠΈΠ½. ΠΠ°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ курс Π‘ ΠΈ Π‘++. — Πœ.:Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ Π”ΠΈΠ°Π»ΠΎΠ³-МИЀИ,

2005 Π³. — 248 с.

2. Π . Π›Π°Ρ„ΠΎΡ€Π΅. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Π‘++. 4-Π΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅. — Π‘ΠΏΠ±.: Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ ΠŸΠ˜Π’Π•Π , 2004 Π³. — 902 с.

3. Π‘. Бтрауструп. Π―Π·Ρ‹ΠΊ программирования Π‘++. Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅. ΠŸΠ΅Ρ€. Ρ Π°Π½Π³Π». — Πœ.: Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ Π‘ΠΈΠ½ΠΎΠΌ, 2011 Π³. — 1136 с.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 1. Π€Π°ΠΉΠ» mystring.h

#ifndef MYSTRING_H

#define MYSTRING_H

#ifndef STR_MAX

#define STR_MAX 255

#endif

#include «friends.h»

class String {

protected:

char *str;

int len;

public:

String ();

String (const char *);

String (const char);

String (const String &);

~String ();

void clear ();

char *text ();

void friend report (char *);

};

class Identifier: public String {

public:

Identifier ();

Identifier (const char *);

Identifier (const Identifier &);

Identifier operator ==(const Identifier &);

Identifier operator =(const char *);

Identifier operator =(const Identifier &);

char operator [](int);

~Identifier ();

void toUpper ();

};

class Tenstring: public String {

public:

Tenstring ();

Tenstring (const char *);

Tenstring (const Tenstring &);

Tenstring operator =(const Tenstring &);

Tenstring operator =(const char *);

Tenstring operator ==(Tenstring&);

Tenstring operator -(Tenstring &);

~Tenstring ();

void ChangeChar ();

};

#endif /* MYSTRING_H */

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 2. Π€Π°ΠΉΠ» mystring.cpp

#include

#include

#include

#include «mystring.h»

using namespace std;

String:String (){

report («Default String class constructor»);

str = new char[STR_MAX+1];

str[0] = '';

len = 0;

}

String:String (const char *s){

report («String class constructor (const char *)»);

str = new char[STR_MAX+1];

int i;

for (i=0;i

str[i] = '';

len = i-1;

}

String:String (const char ch){

report («String class constructor (const char)»);

str = new char[STR_MAX+1];

str[0] = ch;

str[1] = '';

len = 1;

}

String:String (const String& ss){

report («Copy String class constructor»);

str = new char[STR_MAX+1];

int i;

for (i=0;i<=ss.len;i++) str[i] = ss. str[i];

str[i] = '';

len = ss. len;

}

String:~String (){

report («String class destructor»);

delete [] str;

}

char *String:text (){

return str;

}

void String: clear ()

{

delete str;

len = 0;

str = new char[1];

str[0] = 0;

report («String:clear ()»);

}

Identifier:Identifier (){

report («Default Identifier class constructor»);

}

Identifier:Identifier (const char *s){

report («Identifier class constructor (const char *)»);

if (!isalpha (s[0])&&s[0]≠'_') return;

int i;

for (i=1;i

if (!isalnum (s[i])&&s[i]≠'_') return;

}

strcpy (str, s);

len = i;

}

Identifier:Identifier (const Identifier& ss):String (ss){

report («Copy Identifier class constructor»);

}

Identifier:~Identifier (){

report («Identifier class destructor»);

}

Identifier Identifier: operator ==(const Identifier& ss){

report («Identifier operator ==(const Identifier &)»);

// int i;

if (strcmp (str, ss. str))

report («Identifier operator ≠ executed»);

else

report («Identifier operator == executed»);

return *this;}

Identifier Identifier: operator =(const Identifier& ss){

report («Identifier operator =(const Identifier &)»);

if (&ss == this)

return *this;

strcpy (str, ss. str);

len = ss. len;

return *this;

}

Identifier Identifier: operator =(const char *s){

report («Identifier operator =(const char *)»);

if (!isalpha (s[0])&&s[0]≠'_'){ str[0]=''; len=0; return *this; }

int i;

for (i=0;i

if (!isalnum (s[i])&&s[i]≠'_'){ str[0]=''; len=0; return *this; }

}

strncpy (str, s, i);

str[i] = '';

len = i;

return *this;

}

char Identifier: operator [](int i)

{

report («stroka_id:operator[](int i)»);

if ((i<0)||(i>=strlen (str))) {

report («index is too big (small?)»);

return 0;

}

return str[i];

}

void Identifier: toUpper (){

report («Identifier member function toUpper ()»);

for (int i=0;str[i]≠'';i++) if (islower (str[i])) str[i]=toupper (str[i]);

}

Tenstring:Tenstring (){

report («Default Tenstring class constructor»);

}

Tenstring:Tenstring (const char *s)

Tenstring:Tenstring (const Tenstring& ss):String (ss){

report («Copy Tenstring class constructor»);

}

Tenstring:~Tenstring (){

report («Tenstring class destructor»);

}

void Tenstring: ChangeChar (){

report («Tenstring member function ChangeChar ()»);

if (len>4)

{report («False»);

return;

}

long long int number;

number = atoll (str);

if (number > 128 || number < -127)

{

report («True»);

return;

}

else

{

report («False»);

return;

}

}

Tenstring Tenstring: operator =(const Tenstring& ss){

report («Tenstring operator =(const Tenstring &)»);

if (&ss == this) return *this;

strcpy (str, ss. str);

len = ss. len;

return *this;

}

Tenstring Tenstring: operator =(const char *s){

report («Tenstring operator =(const char *)»);

int i;

for (i=0;i

if (s[i]≠'0'&&s[i]≠'1'){ str[0]=''; len=0; return *this; }

}

strncpy (str, s, i);

len = i;

str[i] = '';

return *this;

}

Tenstring Tenstring: operator ==(Tenstring& ss){

if (atol (this->str)==atol (ss.str))

report («Tenstring operator == (Tenstring &)»);

else

report («Tenstring operator ≠ (Tenstring &)»);

}

Tenstring Tenstring: operator -(Tenstring& ss){

report («Tenstring operator — (Tenstring &)»);

int len = this->len>ss.len? len: ss. len, res;

char res1[len];

res = atol (this->str)-atol (ss.str);

ltoa (res, res1,10);

return Tenstring (res1);

}

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 3. Π€Π°ΠΉΠ» Friends.h

#ifndef FRIENDS_H

#define FRIENDS_H

#include «listbox.h»

void report (char *);

#endif /* FRIENDS_H */

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 4. Π€Π°ΠΉΠ» Friends.cpp

#include «friends.h»

#include

void report (char *s){

std:cout «s «std:endl;

extern ListBox *ptr;

ptr->Add (s);

}

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 5. Π€Π°ΠΉΠ» Desk.h

#ifndef DESK_H

#define DESK_H

#include «menu.h»

#include «listbox.h»

#include «mystring.h»

#define LIMIT 8

struct INSTANCE{

String *item;

int classId;

};

class Desk {

private:

char ClassName[3][12];

Menu mn, mn1, mn2, mn3, mn4, mn5;

ListBox *lbx1, *lbx2;

INSTANCE inst[LIMIT];

int count;

public:

Desk ();

~Desk ();

void PaintBg (void);

void Go (void);

void Command (void);

void setCount (void);

void Init (void);

int numInput (int, int, int, int, char *);

void strInput (int, int, int, int, char *, char *, int);

int str2int (char *, int &);

int dataError (int, int, int, int);

String *CreateInstance (int, char *);

void numResult (int, int, int, int, char *, int);

void Msg (int, int, int, int, char *);

void strclear (void);

void sidToUpper (void);

void sidAssign (void);

void sidSub (void);

void Ind (void);

void sbtInd (void);

void sbtChangeChar (void);

void sbtAssign (void);

void sbtSub (void);

};

#endif /* DESK_H */

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 6. Π€Π°ΠΉΠ» Desk.cpp

#include

#include

#include

#include

#include

#include

#include

#include

#include «desk.h»

using namespace std;

Desk:Desk (){ //конструктор

PaintBg ();

mn.Add (80,30,120,30," Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ");

mn.Add (260,30,120,30," ВСстированиС");

mn.Add (440,30,120,30," Π’Ρ‹Ρ…ΠΎΠ΄");

mn.setDisable (1);

mn.setSelect (0);

//mn.setDisable (1);

mn1.Add (80,80,120,30," Число элСмСнтов");

mn1.Add (80,120,120,30," Нач-Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅");

mn1.setDisable (1);

mn1.Hide ();

//Menu mn2

mn2.Add (260,80,120,30," Π‘Ρ‚Ρ€ΠΎΠΊΠ°");

mn2.Add (260,120,120,30," Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€");

mn2.Add (260,160,120,30," ДСсят. строка");

mn2.Hide ();

//Menu mn3

mn3.Add (390,80,120,25," clear ()");

mn3.Hide ();

//Menu mn4

mn4.Add (390,120,120,25," Toupp");

mn4.Add (390,145,120,25," ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ =");

mn4.Add (390,170,120,25," ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ==");

mn4.Add (390,195,120,25," ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ []");

// mn4. Add (390,220,120,25," vxod");

mn4.Hide ();

//Menu mn5

mn5.Add (390,160,120,25," ChangeChar ()");

mn5.Add (390,185,120,25," ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ =");

mn5.Add (390,210,120,25," ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ==");

mn5.Add (390,235,120,25," ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ -");

mn5.Hide ();

mn.setSubmenu (&mn1,0);

mn.setSubmenu (&mn2,1);

mn2.setSubmenu (&mn3,0);

mn2.setSubmenu (&mn4,1);

mn2.setSubmenu (&mn5,2);

lbx1 = new ListBox (20,300,292,162);

lbx2 = new ListBox (330,300,292,162);

extern void *ptr;

ptr = lbx2;

strcpy (ClassName[0]," String");

strcpy (ClassName[1]," Identifier");

strcpy (ClassName[2]," Tenstring");

for (int i=0;i

inst[i]. item = NULL;

inst[i]. classId = 0;

}

count = 0;

}

Desk:~Desk (){ //дСструктор

if (lbx1) delete lbx1;

if (lbx2) delete lbx2;

}

void Desk: setCount (){ //Π²Π²ΠΎΠ΄ числа

int k = numInput (205,80,30,30," count ?");

if (k>0&&k<=LIMIT){

count = k;

lbx1->AddSeveral (k);

mn1.setEnable (1);

mn1.setSelect (1);

mn1.setDisable (0);

} else dataError (205,80,5,30);

}

String *Desk:CreateInstance (int classId, char *val){ //Π²Ρ‹Π±ΠΎΡ€ класса

switch (classId){

case 0: return new String (val);

case 1: return new Identifier (val);

case 2: return new Tenstring (val);

}

return NULL;

}

void Desk: Init (){ //запись

int k=0, classId=0, limit=39;

char val[limit+1];

char text[limit+1]; text[0]='';

k = numInput (205,120,30,30," num ?");

if (k<=0||k>count) if (dataError (205,120,30,30)) return;

classId = numInput (205,120,30,30," classId ?1)ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ 2) дСсятичная строка");

if (classId≠0&&classId≠1&&classId≠2) if (dataError (205,120,30,30)) return;

strInput (205,120,30,30," value ?", val, 23);

k—;

lbx2->Clear ();

if (inst[k]. item){ delete inst[k]. item;

inst[k].item = NULL;

inst[k]. classId = 0;

}

inst[k]. item = CreateInstance (classId, val);

inst[k]. classId = classId;

strcpy (val, inst[k]. item->text ());

sprintf (text," %d %s %s", k+1,ClassName[classId], val);

if (inst[k]. item) lbx1->UpdateRow (++k, text);

k=0;

while (inst[k++]. item);

if (k>count && !mn.isEnable (1)) mn. setEnable (1);

}

void Desk: strclear (){ //очистка строки

int len, k = numInput (520,80,25,25," num ?");

char text[40]; text[0]='';

if (k<=0||k>count){ if (dataError (520,80,25,25)) return; }

else {

inst[k-1]. item->clear ();

sprintf (text," %d %s %s", k, ClassName[0], inst[k-1]. item->text ());

lbx1->UpdateRow (k, text);

}

}

void Desk: sidToUpper (){ // Ρ‹Π΅Ρ€Ρ…Π½ΠΈΠΉ рСгистр

int k = numInput (520,120,25,25," num ?");

if (k<=0||k>count){ if (dataError (520,120,25,25)) return; }

if (inst[k-1]. classId≠1) { Msg (520,120,25,25," Wrong data"); return; }

Identifier *pId = (Identifier*)inst[k-1]. item;

pId->toUpper ();

char text[40]; text[0]='';

sprintf (text," %d %s %s", k, ClassName[1], pId->text ());

lbx1->UpdateRow (k, text);

}

void Desk: sidAssign (){//присваиваниС

int k, k1=0;

Identifier *pOp[2];

char op[2][6] = {" op1 ?" ," op2 ?" };

for (int i=0;i<2;i++){

k = numInput (520,145,25,25,op[i]); if (!k1) k1=k;

if (k<=0||k>count){ if (dataError (520,145,25,25)) return; }

if (inst[k-1]. classId≠1) { Msg (520,145,25,25," Wrong data"); return; }

pOp[i] = (Identifier*)inst[k-1]. item;

}

*pOp[0] = *pOp[1];

char text[40]; text[0]='';

sprintf (text," %d %s %s", k1, ClassName[1], pOp[0]->text ());

lbx1->UpdateRow (k1,text);

}

void Desk: sidSub (){//сравнСниС

int k, k1=0;

Identifier *pOp[2];

char op[2][6] = {" op1 ?" ," op2 ?" };

for (int i=0;i<2;i++){

k = numInput (520,170,25,25,op[i]); if (!k1) k1=k;

if (k<=0||k>count){ if (dataError (520,170,25,25)) return; }

if (inst[k-1]. classId≠1) { Msg (520,170,25,25," Wrong data"); return; }

pOp[i] = (Identifier*)inst[k-1]. item;

}

*pOp[0] == *pOp[1];

{

char text[40]; text[0]='';

sprintf (text," %d %s %s", k1, ClassName[1], pOp[0]->text ());

lbx1->UpdateRow (k1,text);

}}

void Desk: Ind () //индСксноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

{

int k, k1=0;

Identifier *pOp[0];

char op[1][6] = {" op1 ?" };

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

k = numInput (520,170,25,25,op[i]); if (!k1) k1=k;

if (k<=0||k>count){ if (dataError (520,170,25,25)) return; }

if (inst[k-1]. classId≠1) { Msg (520,170,25,25," Wrong data"); return; }

pOp[0] = (Identifier*)inst[k-1]. item;

char *id=new char[5];

strInput (520,170,25,25," Index", id, 2);

int idx;

if (!str2int (id, idx)) {

Msg (520,170,25,25," Wrong data");

delete id;

break;

}

delete id;

char text[40], out[20]; text[0]='';

idx—;

sprintf (out," Return value is %c" ,(*(Identifier*)pOp[0])[idx]);

sprintf (text," %d %s %s", k, ClassName[2], pOp[0]->text ());

lbx1->UpdateRow (k1,out);

getch ();

lbx1->UpdateRow (k1,text);

}

}

void Desk: sbtInd (){//ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅

int k, k1=0;

Tenstring *pOp[3];

char op[3][6] = {" op1 ?" ," op2 ?" ," op3 ?" };

for (int i=0;i<3;i++){

k = numInput (520,210,25,25,op[i]); if (!k1) k1=k;

if (k<=0||k>count){ if (dataError (520,210,25,25)) return; }

if (inst[k-1]. classId≠2) { Msg (520,210,25,25," Wrong data"); return; }

pOp[i] = (Tenstring*)inst[k-1]. item;

}

*pOp[0] = *pOp[1] - *pOp[2];

char text[40]; text[0]='';

sprintf (text," %d %s %s", k1, ClassName[2], pOp[0]->text ());

lbx1->UpdateRow (k1,text);

}

void Desk: sbtChangeChar (){//ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ Ρ‡Π°Ρ€

int k = numInput (520,160,25,25," num ?");

if (k<=0||k>count){ if (dataError (520,160,25,25)) return; }

if (inst[k-1]. classId≠2) { Msg (520,160,25,25," Wrong data"); return; }

Tenstring *pId = (Tenstring*)inst[k-1]. item;

pId->ChangeChar ();

char text[40]; text[0]='';

sprintf (text," %d %s %s", k, ClassName[2], pId->text ());

lbx1->UpdateRow (k, text);

}

void Desk: sbtAssign (){//присваиваниС

int k, k1=0;

Tenstring *pOp[2];

char op[2][6] = {" op1 ?" ," op2 ?" };

for (int i=0;i<2;i++){

k = numInput (520,185,25,25,op[i]); if (!k1) k1=k;

if (k<=0||k>count){ if (dataError (520,185,25,25)) return; }

if (inst[k-1]. classId≠2) { Msg (520,185,25,25," Wrong data"); return; }

pOp[i] = (Tenstring*)inst[k-1]. item;

}

*pOp[0] = *pOp[1];

char text[40]; text[0]='';

sprintf (text," %d %s %s", k1, ClassName[2], pOp[0]->text ());

lbx1->UpdateRow (k1,text);

}

void Desk: sbtSub (){//сравнСниС

int k, k1=0;

Tenstring *pOp[2];

char op[2][6] = {" op1 ?" ," op2 ?" };

for (int i=0;i<2;i++){

k = numInput (520,210,25,25,op[i]); if (!k1) k1=k;

if (k<=0||k>count){ if (dataError (520,210,25,25)) return; }

if (inst[k-1]. classId≠2) { Msg (520,210,25,25," Wrong data"); return; }

pOp[i] = (Tenstring*)inst[k-1]. item;

}

*pOp[0] == *pOp[1];

char text[40]; text[0]='';

sprintf (text," %d %s %s", k1, ClassName[2], pOp[0]->text ());

lbx1->UpdateRow (k1,text);

}

void Desk: numResult (int x, int y, int w, int h, char *s, int k){ // Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚

int len = strlen (s)+5;

char *text = new char[len];

if (k<=99) sprintf (text," %s= %d", s, k);

else sprintf (text," %s= xxx", s);

int wt = textwidth (text);

int ht = textheight (text);

w+=wt;

outtextxy (x+(w-wt)/2,y+(h-ht)/2,text);

getch ();

bar (x, y, x+w+1,y+h+1);

}

int Desk: dataError (int x, int y, int w, int h){ //ошибка

char text[]="Data Error" ;

int wt = textwidth (text);

int ht = textheight (text);

w+=wt;

int color = getcolor ();

setcolor (RED);

rectangle (x, y, x+w, y+h);

outtextxy (x+(w-wt)/2,y+(h-ht)/2,text);

setcolor (color);

char ch;

do ch=getch ();

while (ch≠13&&ch≠27);

bar (x, y, x+w+1,y+h+1);

return (ch=27)?1:0;

}

void Desk: Msg (int x, int y, int w, int h, char *s){//собщСниС

int wt = textwidth (s);

int ht = textheight (s);

w+=wt;

outtextxy (x+(w-wt)/2,y+(h-ht)/2,s);

getch ();

bar (x, y, x+w+1,y+h+1);

}//

int Desk: str2int (char *str, int &result)//ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π² Ρ‡ΠΈΡΠ»ΠΎ

{

char correct=1,minus=0;

int res=0,i=0;

if (str[0] == '-') {

minus = 1;

i = 1;

}

if (str[i] == 0) {

return 0;

}

while (correct&&(str[i]≠0)) {

if ((str[i] >= 0×30)&&(str[i] <= 0×39)) {

res = res*10 + (str[i] - 0×30);

} else {

correct = 0;

}

i++;

}

if (correct) {

result = (minus)?(-res):(res);

return 1;

} else {

return 0;

}

}

int Desk: numInput (int x, int y, int w, int h, char *prompt){//число

int ht, wt;

char text[2];

setbkcolor (BLUE);

wt = textwidth (prompt);

ht = textheight (prompt);

w+=wt;

outtextxy (x+(w-wt)/2,y+(h-ht)/2,prompt);

text[0] = getch (); text[1]='';

bar (x, y, x+w+1,y+h+1);

wt = textwidth (text);

ht = textheight (text);

outtextxy (x+(w-wt)/2,y+(h-ht)/2,text);

while (getch ()≠13);

bar (x, y, x+w+1,y+h+1);

if (text[0]>=48&&text[0]<=57) return text[0]-48;

return 0;

}

void Desk: strInput (int x, int y, int w, int h, char *prompt, char *text, int limit){//строка

int ht, wt;

setbkcolor (BLUE);

wt = textwidth (prompt);

ht = textheight (prompt);

w+=wt;

outtextxy (x+(w-wt)/2,y+(h-ht)/2,prompt);

int i=0;

text[0]='';

while (((text[i++]=getch ())≠13)&&(i<=limit)){

text[i]='';

bar (x, y, x+w+1,y+h+1);

w-=wt;

wt = textwidth (text);

ht = textheight (text);

w+=wt;

outtextxy (x+(w-wt)/2,y+(h-ht)/2,text);

}

text[i-1]='';

bar (x, y, x+w+1,y+h+1);

}

void Desk: PaintBg (){ //ΠΎΠΊΠ½ΠΎ

setfillstyle (1,1);

bar (0,0,640,480);

setcolor (11);

rectangle (5,5,635,475);

}

void Desk: Go (){//ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

unsigned char ch;

for (;;){

ch = getch ();

switch (ch){

case 13: Command (); break;

case 72: mn. Upward (); break;

case 75: mn. Backward (); break;

case 77: mn. Forward (); break;

case 80: mn. Downward (); break;

case 27: exit (0);

}

}

}

void Desk: Command (void){ ///ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

lbx2->Clear ();

Menu *smn = mn. getSubMenu (mn.getSelected ());

Menu *smn1 = NULL;

if (smn) smn1 = smn->getSubMenu (smn->getSelected ());

switch (mn.getSelected ()){

case 0: if (smn){

switch (smn->getSelected ()){

case -1: smn->Show (); break;

case 0: setCount (); break;

case 1: Init (); break;

}

}

break;

case 1: if (smn){

switch (smn->getSelected ()){

case -1: smn->Show (); break;

case 0: if (smn1){

switch (smn1->getSelected ()){

case -1: smn1->Show (); break;

case 0: strclear (); break;

}

}

break;

case 1: if (smn1){

switch (smn1->getSelected ()){

case -1: smn1->Show (); break;

case 0: sidToUpper (); break;

case 1: sidAssign (); break;

case 2: sidSub (); break;

case 3: Ind ();break;

}

}

break;

case 2: if (smn1){

switch (smn1->getSelected ()){

case -1: smn1->Show (); break;

case 0: sbtChangeChar (); break;

case 1: sbtAssign (); break;

case 2: sbtSub (); break;

case 3: sbtInd ();break;

}

}

break;

case 3: break;

}

}

break;

case 2: exit (0);

}

}

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 7. Π€Π°ΠΉΠ» menu.h

#ifndef MENU_H

#define MENU_H

class MenuItem{

private:

int status;

int x, y, w, h;

char text[16];

public:

MenuItem ();

MenuItem (int, int, int, int, char *);

void Show (void);

void Hide (void);

void setStatus (int);

int getStatus (void);

~MenuItem (){}

};

class Menu;

struct MItem{

MenuItem *item;

bool enabled;

Menu *submenu;

};

class Menu{

private:

Menu *supmenu;

MItem mItem[10];

int n;

int selected;

bool visible;

public:

Menu ();

Menu (Menu *, int);

~Menu ();

void Add (int, int, int, int, char *);

void setSubmenu (Menu *, int);

void Show (void);

void Hide (void);

void setSelect (int);

int getSelected (void);

void setEnable (int);

int isEnable (int);

void setDisable (int);

void Forward (void);

void Backward (void);

void Upward (void);

void Downward (void);

void setSubMenu (int, Menu *);

Menu *getSubMenu (int);

};

#endif /* MENU_H */

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 8. Π€Π°ΠΉΠ» Menu.cpp

#include

#include

#include

#include

#include

#include «menu.h»

MenuItem:MenuItem (){

status = 0;

x = 0; y = 0; w = 120; h = 30;

strcpy (text," Item");

Show ();

}

MenuItem:MenuItem (int xx, int yy, int ww, int hh, char *s){

status = 0;

x = xx; y = yy; w = ww; h = hh;

strncpy (text, s,16);

Show ();

}

void MenuItem: setStatus (int k){

status = k;

Show ();

}

int MenuItem: getStatus (){

return status;

}

void MenuItem: Show (void){

rectangle (x, y, x+w, y+h);

int clr = getcolor ();

if (status > 0) setcolor (RED);

else if (status==0) setcolor (LIGHTGREEN);

else setcolor (LIGHTGRAY);

setbkcolor (BLUE);

int wt = textwidth (text);

int ht = textheight (text);

outtextxy (x+(w-wt)/2,y+(h-ht)/2,text);

setcolor (clr);

}

void MenuItem: Hide (void){

if (status==1) status = 0;

int clr = getcolor ();

setcolor (BLUE);

bar (x, y, x+w+1,y+h+1);

setcolor (clr);

}

Menu:Menu (){

n=0;

selected=-1;

visible = 1;

supmenu = NULL;

for (int i=0;i<10;i++){

mItem[i]. item = NULL;

mItem[i]. submenu = NULL;

mItem[i]. enabled = 1;

}

}

Menu:Menu (Menu *mn, int k){

n=0;

selected=-1;

visible = 1;

supmenu = mn;

for (int i=0;i<10;i++){

mItem[i]. item = NULL;

mItem[i]. submenu = NULL;

mItem[i]. enabled = 1;

}

mn->setSubMenu (k, this);

}

Menu:~Menu (){

while (n>=0) delete mItem[—n]. item;

}

int Menu: isEnable (int k){

return mItem[k]. item->getStatus () >= 0;

}

void Menu: Add (int x, int y, int w, int h, char *s){

mItem[n++]. item = new MenuItem (x, y, w, h, s);

return;

}

void Menu: setSubmenu (Menu *mn, int k){

if (k>=0&&k

mn->supmenu = this;

}

void Menu: Show (void){

for (int i=0;iShow ();

visible = 1;

}

void Menu: Hide (void){

Menu *smn = NULL;

if (selected >=0) smn = mItem[selected]. submenu;

if (smn) smn->Hide ();

for (int i=0;iHide ();

selected = -1;

visible = 0;

}

void Menu: setSelect (int k){

if (mItem[k]. enabled){

mItem[k].item->setStatus (1);

if (selected >=0) mItem[selected]. item->setStatus (0);

selected = k;

}

}

void Menu: setEnable (int k){

if (k≠selected) mItem[k]. item->setStatus (0);

mItem[k].enabled = 1;

Show ();

}

void Menu: setDisable (int k){

if (k≠selected) mItem[k]. item->setStatus (-1);

mItem[k].enabled = 0;

Show ();

}

void Menu: Forward (void){

Menu *smn = NULL;

int i;

for (i=selected+1;i

if (i<=n-1){

mItem[i]. item->setStatus (1);

if (selected>=0){

mItem[selected].item->setStatus (0);

smn = mItem[selected]. submenu;

}

if (smn) { /*smn->selected = -1*/; smn->Hide (); }

selected = i;

}

}

void Menu: Backward (void){

int i;

for (i=selected-1;i>=0;i—) if (mItem[i]. enabled) break;

if (i>=0){

mItem[i]. item->setStatus (1);

mItem[selected].item->setStatus (0);

Menu *smn = mItem[selected]. submenu;

if (smn) { /*smn->selected = -1*/; smn->Hide (); }

selected = i;

} else if (supmenu) {

selected = -1;

Hide ();

}

}

void Menu: Upward (void){

Menu *mn = this, *mn1 = NULL;

while (mn->selected >=0 && (mn1=mn->mItem[mn->selected]. submenu) && mn1->visible) mn = mn1;

mn->Backward ();

}

void Menu: Downward (void){

Menu *mn = this, *mn1 = NULL;

while (mn->selected >=0 && (mn1=mn->mItem[mn->selected]. submenu) && mn1->visible) mn = mn1;

mn->Forward ();

}

void Menu: setSubMenu (int i, Menu *mn){

if (i>=0&&i

}

Menu *Menu:getSubMenu (int i){

if (i>=0&&i

return NULL;

}

int Menu: getSelected (void){

return selected;

}

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 9. Π€Π°ΠΉΠ» Listbox.h

#ifndef LISTBOX_H

#define LISTBOX_H

#ifndef STR_MAX

#define STR_MAX 255

#endif

#define STR_LEN 79

#define LINE_HEIGHT 20

class ListBox;

class ListItem {

private:

int x, y, w, h;

ListBox *lbx;

public:

char text[STR_LEN+1];

ListItem (void);

ListItem (int, int, int, int, char *);

~ListItem (void);

void setText (char *);

void Show (void);

void Erase (void);

};

class ListBox {

private:

int x, y, w, h;

int n;

ListItem *lItem[STR_MAX];

public:

ListBox (void);

ListBox (int, int, int, int);

~ListBox (void);

void Add (char *);

void AddSeveral (int);

void UpdateRow (int, char *);

void Clear (void);

void Show (void);

void Erase (void);

void Count (void);

};

#endif /* LISTBOX_H */

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 10. Π€Π°ΠΉΠ» Listbox.cpp

#include

#include

#include

#include «listbox.h»

ListItem:ListItem (){

x = 0; y = 0; w = 100; h = LINE_HEIGHT;

strcpy (text," «);

lbx = NULL;

}

ListItem:ListItem (int xx, int yy, int ww, int hh, char *s){

x = xx; y = yy; w = ww; h = hh;

strncpy (text, s, STR_LEN-1);

text[STR_LEN] = '';

lbx = NULL;

Show ();

}

ListItem:~ListItem (){

Erase ();

}

void ListItem: setText (char *s){

strncpy (text, s, STR_LEN+1);

if (strlen (s)>STR_LEN) text[STR_LEN+1] = '';

}

void ListItem: Show (){

Erase ();

int clr = getcolor ();

setcolor (BLUE);

rectangle (x, y, x+w, y+h);

setcolor (clr);

setbkcolor (BLUE);

int ht = textheight (text);

outtextxy (x+5,y+(h-ht)/2,text);

}

void ListItem: Erase (){

//int clr = getcolor ();

//setcolor (BLUE);

bar (x, y, x+w-1,y+h);

//setcolor (clr);

}

ListBox:ListBox (){ //puts («ListBox ()»);

x = 0; y = 0; w = 200; h = 100;

n = 0;

for (int i=0;i

Show ();

}

ListBox:ListBox (int xx, int yy, int ww, int hh){

char s[STR_LEN];

x = xx; y = yy; w = ww; h = hh;

n = 0;

Show ();

}

ListBox:~ListBox (){ //puts («~ListBox ()»);

for (int i=0;i

}

void ListBox: Add (char *s){

if (n<8){

lItem[n] = new ListItem (x+1, y+n*LINE_HEIGHT+1, w, LINE_HEIGHT, s);

n++;

}

}

void ListBox: AddSeveral (int k){

char s[1];

if (k>=0&&k<=STR_MAX){

for (int i=0;i

sprintf (s," %d", i+1);

lItem[i] = new ListItem (x+1, y+i*LINE_HEIGHT+1, w, LINE_HEIGHT, s);

n++;

}

}

}

void ListBox: UpdateRow (int k, char *text){ //printf («%dt%sn», k, text);

lItem[—k]->setText (text);

lItem[k]->Show ();

}

void ListBox: Clear (){

for (int i=0;i

n=0;

}

void ListBox: Erase (){

for (int i=0;iErase ();

}

void ListBox: Show (){

rectangle (x, y, x+w, y+h);

}

void ListBox: Count (){

printf («n=%dn», n);

}

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 11. Π€Π°ΠΉΠ» main.cpp

#include

#include

#include «desk.h»

void *ptr = NULL;

int main (void){

int gd = DETECT, gm;

initgraph (&gd, &gm, «»);

Desk dsk;

dsk.Go ();

system («pause»);

closegraph ();

return 0;

}

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 12. Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡ

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ