4. Порядок выполнения работы
А. Классы, свойства, методы
1. Запустить СУБД Cache:
Пуск | Программы | Cache | Cacheweb | Старт Cache
2. Открыть визуальную среду Cache Studio:
Пуск | Программы | Cache | Cacheweb | Studio ► ф. Studio
3. Установить соединение с сервером:
ф. Соединение с сервером |
Выберите из списка сервер Cache ← Cacheweb(localhost(1972)); кн. OK ►
ф. Установить соединение с Cacheweb; Имя пользователя ← _system; Пароль ← SYS;
кн. OK ► ф. Менеджер соединений Cache; Область ← USER; кн. OK ►
ф. _SYSTEM – CACHEWEB/USER-Default __system – Studio
4. Создать класс Person (персона):
ф. Studio | ф. Рабочая поверхность | пр. кн. на Классы; выбр. Создание класс ►
ф. Мастер создания класса | Укажите имя Класса ← Person;
Введите описание данного Класса ← описание участников учебного процесса;
кн. Далее ► ф. Тип класса ← Persistent (может храниться в базе данных);
кн. Далее ► Имя таблицы SQL ← Person; кн. Готово ►
ф. _SYSTEM-CACHEWEB/USER/User.Person.cls с кодом создания класса
5. Определить свойства класса Person
– задать свойство persID (идентификатор персоны, уникальное число):
ф. Studio | ф. Рабочая поверхность | Классы | User | выделить Person;
панель инструментов | кн. Новое свойство ► ф. Мастер создания свойств |
Укажите имя нового свойства ← persID;
Введите описание нового свойства ← Идентификатор персоны; кн. Далее ►
ф. Тип свойства | уст. Единичное значение типа ← %Counter; кн. Далее ►
ф. Характеристики свойства | уст. Это свойство обязательное (не пустое);
Индексируемое. Создать индекс для этого свойства;
Уникально. Создать уникальный индекс для этого свойства;
имя поля для SQL ← persID; кн. Готово ►
– задать свойство fam (фамилия персоны, текстовое, до 20 символов):
ф. Studio | ф. Рабочая поверхность | Классы | User | выделить Person;
панель инструментов | кн. Новое свойство ► ф. Мастер создания свойств |
Укажите имя нового свойства ← fam;
Введите описание нового свойства ← Фамилия персоны; кн. Далее ►
ф. Тип свойства | уст. Единичное значение типа ← %String;
кн. Далее ►ф. Характеристики свойства | уст. Это свойство обязательное (не пустое);
имя поля для SQL ← fam; кн. Далее ►ф. Параметры свойства |
MAXLEN ← 20; кн. Готово ►
– аналогичным образом создать свойства im (имя) и ot (отчество).
6. Создать подкласс Student (Студент) родительского класса Person:
ф. Studio | ф. Рабочая поверхность | Классы | User | пр. кн. на Person;
выбр. Создание подкласса… ► ф. Мастер создания Класса |
Укажите имя Класса ← Student;
Введите описание данного Класса ← Данные студентов; кн. Далее ►
ф. Тип класса ← Расширения: Имя СуперКласса ← User.Person; кн. кн. Готово ►
ф. _SYSTEM-CACHEWEB/USER/User.Student.cls с кодом создания класса
7. Определить свойства класса Student:
– задать свойство noZK (номер зачетной книжки, ровно 6 символов):
ф. Studio | ф. Рабочая поверхность | Классы | User | выделить Student;
панель инструментов | кн. Новое свойство ► ф. Мастер создания свойств |
Укажите имя нового свойства ← noZK;
Введите описание нового свойства ← Номер зачетной книжки; кн. Далее ►
ф. Тип свойства | уст. Единичное значение типа ← %String; кн. Далее ►
ф. Характеристики свойства | уст. Это свойство обязательное (не пустое);
Уникально. Создать уникальный индекс для этого свойства;
имя поля для SQL ← noZK; кн. Далее ►ф. Параметры свойства | MINLEN ← 6;
MAXLEN ← 6; кн. Готово ►
– задать свойство spec (название специальности, до 7 символов):
ф. Studio | ф. Рабочая поверхность | Классы | User | выделить Student;
панель инструментов | кн. Новое свойство ► ф. Мастер создания свойств |
Укажите имя нового свойства ← spec;
Введите описание нового свойства ← Название специальности; кн. Далее ►
ф. Тип свойства | уст. Единичное значение типа ← %String; кн. Далее ►
ф. Характеристики свойства | уст. Это свойство обязательное (не пустое);
имя поля для SQL ← spec; кн. Далее ►ф. Параметры свойства | MAXLEN ← 7;
кн. Готово ►
– задать свойство gr (номер группы, число от 1 до 99):
ф. Studio | ф. Рабочая поверхность | Классы | User | выделить Student;
панель инструментов | кн. Новое свойство ► ф. Мастер создания свойств |
Укажите имя нового свойства ← gr;
Введите описание нового свойства ← Номер группы; кн. Далее ►
ф. Тип свойства | уст. Единичное значение типа ← %Integer; кн. Далее ►
ф. Характеристики свойства | уст. Это свойство обязательное (не пустое);
имя поля для SQL ← gr; кн. Далее ►ф. Параметры свойства |
MAXVAL ← 99; MINVAL ← 1; кн. Готово ►
– задать свойство kurs (название специальности, до 7 символов):
ф. Studio | ф. Рабочая поверхность | Классы | User | выделить Student;
панель инструментов | кн. Новое свойство ► ф. Мастер создания свойств |
Укажите имя нового свойства ← kurs; Введите описание нового свойства ← Курс;
кн. Далее ►ф. Тип свойства | уст. Единичное значение типа ← %Integer;
кн. Далее ►ф. Характеристики свойства | уст. Это свойство обязательное (не пустое);
имя поля для SQL ← kurs; кн. Далее ►ф. Параметры свойства | MAXVAL ← 6;
MINVAL ← 1; кн. Готово ►
– задать свойство data_r (дата рождения):
ф. Studio | ф. Рабочая поверхность | Классы | User | выделить Student;
панель инструментов | кн. Новое свойство ► ф. Мастер создания свойств |
Укажите имя нового свойства ← data_r;
Введите описание нового свойства ← Номер зачетной книжки; кн. Далее ►
ф. Тип свойства | уст. Единичное значение типа ← %Date;
кн. Далее ►ф. Характеристики свойства | не уст.
Это свойство обязательное (не пустое); имя поля для SQL ← data_r; кн. Готово ►
– задать свойство biogr (биография):
ф. Studio | ф. Рабочая поверхность | Классы | User | выделить Student;
панель инструментов | кн. Новое свойство ► ф. Мастер создания свойств |
Укажите имя нового свойства ← biogr;
Введите описание нового свойства ← Биография; кн. Далее ►
ф. Тип свойства | уст. Единичное значение типа ← %Text;
кн. Далее ►ф. Характеристики свойства |
не уст. Это свойство обязательное (не пустое); имя поля для SQL ← biogr;
кн. Готово ►
8. Определить первичный ключ класса Person:
ф. Studio | ф. Рабочая поверхность | Классы | User | выделить Person;
панель инструментов | кн. Новый индекс ► ф. Мастер создания Индекса |
Выберите имя Индекса ← pkPerson; кн. Далее ► ф. Тип индекса |
уст. Это первичный ключ для класса; кн. Далее ► ф. Свойства индекса;
кн. Атрибут (правый верхний угол) ► ф. Атрибут | Свойство ← id; кн. OK ►
ф. Свойства индекса; кн. Далее ► ф. Данные индекса | выбр. id; кн. [>]; кн. OK
9. Создать уникальный индекс fio класса Person:
ф. Studio | ф. Рабочая поверхность | Классы | User | выделить Person;
панель инструментов | кн. Новый индекс ► ф. Мастер создания Индекса |
Выберите имя Индекса ← UniqueFIO; кн. Далее ► ф. Тип индекса |
уст. Это уникальный индекс; кн. Далее ► ф. Свойства индекса;
кн. Атрибут (правый верхний угол) ► ф. Атрибут | Свойство ← fam; кн. OK ►
ф. Свойства индекса; кн. Атрибут (правый верхний угол) ► ф. Атрибут |
Свойство ← im; кн. OK ► ф. Свойства индекса;
кн. Атрибут (правый верхний угол) ► ф. Атрибут | Свойство ← ot; кн. OK ►
ф. Свойства индекса; кн. Далее ►
ф. Данные индекса | выбр. fam; кн. [>];выбр. im; кн. [>]; выбр. ot; кн. [>]; кн. OK
10. Создать метод Report класса Person, выводящий на экран значения фамилии, имени и отчества:
ф. Studio | ф. Рабочая поверхность | Классы | User | выделить Person;
панель инструментов | кн. Новый метод ► ф. Мастер создания Метода |
Укажите имя нового Метода ← Report; кн. Далее ► ф. Подпись метода; кн. Далее ►
ф. Характеристики метода; уст. Class Method; кн. Далее ► ф. Реализация; ввести код:
write "Фамилия"_..fam write ! write "Имя"_..im write !
write "Отчество"_..ot write !
кн. Готово
11. Сохранить все изменения:
Файл | Сохранить все
12. Выполнить компиляцию классов:
ф. Studio | ф. Рабочая поверхность | Классы | User | пр. кн. на Person;
выбр. Компиляция 'Person' ► ф. Вывод – Компиляция успешно завершена
аналогичным образом – для класса Student;
13. Аналогичным образом создать класс Subject (справочник предметов) со свойствами:
– Идентификатор предмета predmID (числовое, обязательное, первичный ключ)
– Название name (название предмета (текстовое, обязательное));
– Цикл cycle (цикл дисциплин, к которым относится предмет (текстовое,
обязательное));
– Объем hrs (количество часов (числовое, обязательное));
– Кафедра dept (название кафедры, на которой ведется преподавание предмета
(текстовое, необязательное)).
– указать первичный ключ класса Subject;
– определить метод Report для вывода информации о предмете.
14. Создать класс Uspev (успеваемость студентов по предметам):
ф. Studio | ф. Рабочая поверхность | пр. кн. на Классы; выбр. Создание класс ►
ф. Мастер создания класса | Укажите имя Класса ← Uspev;
Введите описание данного Класса ← Успеваемость студентов; кн. Далее ►
ф. Тип класса ← Persistent (может храниться в базе данных); кн. Далее ►
Имя таблицы SQL ← Person; кн. Готово ►
ф. _SYSTEM-CACHEWEB/USER/User.Uspev.cls с кодом создания класса
15. Определить свойства класса Uspev:
– задать свойство student (ссылка на класс Student):
ф. Studio | ф. Рабочая поверхность | Классы | User | выделить Uspev;
панель инструментов | кн. Новое свойство ► ф. Мастер создания свойств |
Укажите имя нового свойства ← student;
Введите описание нового свойства ← Название специальности; кн. Далее ►
ф. Тип свойства | уст. Единичное значение типа ← Student; кн. Далее ►
ф. Характеристики свойства | уст. Это свойство обязательное (не пустое);
имя поля для SQL ← student; кн. Готово ►
– аналогичным образом задать свойство predmet (ссылка на класс Subject)
– задать свойство ocenka (оценка, число от 2 до 5):
ф. Studio | ф. Рабочая поверхность | Классы | User | выделить Uspev;
панель инструментов | кн. Новое свойство ► ф. Мастер создания свойств |
Укажите имя нового свойства ← ocenka;
Введите описание нового свойства ← Оценка; кн. Далее ►ф. Тип свойства |
уст. Единичное значение типа ← %Integer; кн. Далее ►ф. Характеристики свойства |
уст. Это свойство обязательное (не пустое); имя поля для SQL ← kurs; кн. Далее ►
ф. Параметры свойства | MAXVAL ← 5; MINVAL ← 2; кн. Готово ►
– задать свойство data (дата получения оценки):
ф. Studio | ф. Рабочая поверхность | Классы | User | выделить Uspev;
панель инструментов | кн. Новое свойство ► ф. Мастер создания свойств |
Укажите имя нового свойства ← data;
Введите описание нового свойства ← дата получения оценки; кн. Далее ►
ф. Тип свойства | уст. Единичное значение типа ← %Date; кн. Далее ►
ф. Характеристики свойства | не уст. Это свойство обязательное (не пустое);
имя поля для SQL ← data; кн. Готово ►
– определить составной первичный ключ класса Uspev (свойства student и predmet).
16. Связать классы, сделав классы студентов и предметов родительскими, а класс успеваемости – дочерним:
ф. Studio | ф. Рабочая поверхность | Классы | User | выделить Uspev;
панель инструментов | кн. Новый Внешний Ключ ►
ф. Мастер создания Внешнего Ключа |
Укажите имя для нового внешнего ключа ← FKUspevSubjects; кн. Далее ►
ф. Атрибуты | выбр. Predmet; кн. [>]; кн. Далее ► ф. Создание ключа |
Класс ← User.Subject; Индекс ← PKSubjects; кн. Готово
аналогичным образом связать классы Uspev и Student.
Б. Экземпляры классов
1. Создать экземпляры классов Student (не менее 3), Subject (не менее 2) и Uspev (не менее 7). Проверить работоспособность ограничений значений полей, уникальности и др., предусмотренные при задании структуры классов:
– запустить терминал Cache
Пуск | Программы | Cache | Cacheweb | Studio ► ф. Терминал
– создать экземпляр класса Student:
после приглашения на ввод USER> ввести код:
Set student=##class(User.Student).%New()
нажать клавишу [Enter] ►если нет сообщения об ошибке, то экземпляр создан
– присвоить свойству id экземпляра класса Student значение "1":
после приглашения на ввод USER> ввести код:
set student.id=1
нажать клавишу [Enter] ►если нет сообщения об ошибке, то значение присвоено
– присвоить свойству fam экземпляра класса Student значение "Фамилия":
после приглашения на ввод USER> ввести код:
set student.fam="Фамилия"
нажать клавишу [Enter] ►если нет сообщения об ошибке, то значение присвоено
аналогичным образом присвоить значения остальным свойствам экземпляра класса
– одному из свойств экземпляра класса Student присвоить заведомо некорректные данные:
после приглашения на ввод USER> ввести код:
set student.kurs=9
нажать клавишу [Enter] ►
отобразить сообщение об ошибке:
после приглашения на ввод USER> ввести код:
do $system.OBJ.DisplayError()
нажать клавишу [Enter] ►сообщение об ошибке на экране
– отобразить значения свойств экземпляра класса Student:
после приглашения на ввод USER> ввести код:
write student.fam
нажать клавишу [Enter] ►если нет сообщения об ошибке, то результат на экране
аналогичным образом вывести значения остальных свойств экземпляра
– сохранить экземпляр класса Student:
после приглашения на ввод USER> ввести код:
do student.%Save()
нажать клавишу [Enter] ►если нет сообщения об ошибке, то экземпляр сохранен.
– освободить переменную student:
после приглашения на ввод USER> ввести код:
kill student
нажать клавишу [Enter] ►если нет сообщения об ошибке,
то переменная освобождена.
аналогичным образом создать остальные экземпляры класса Student и Subject.
– загрузить в переменную st экземпляр класса Student (индекс = 1):
после приглашения на ввод USER> ввести код:
set st = ##class(User.Student).%OpenId(1)
нажать клавишу [Enter] ►переменная создана
– вывести данные студента с помощью метода Report:
после приглашения на ввод USER> ввести код:
do st.Report()
нажать клавишу [Enter] ►результаты на экране
– загрузить в переменную p экземпляр класса Subject (индекс = 1):
после приглашения на ввод USER> ввести код:
set st = ##class(User.Subject).%OpenId(1)
нажать клавишу [Enter] ►переменная создана
– создать экземпляр класса Uspev:
после приглашения на ввод USER> ввести код:
Set uspev=##class(User.Uspev).%New()
нажать клавишу [Enter] ►если нет сообщения об ошибке, то экземпляр создан
– присвоить свойству student экземпляра класса Uspev значение из переменной st:
после приглашения на ввод USER> ввести код:
set uspev.student=st
нажать клавишу [Enter] ►если нет сообщения об ошибке, то значение присвоено
аналогичным образом присвоить значения оставшимся свойствам класса и создать оставшиеся экземпляры класса Uspev.
В. Cache Server Pages
1. Создать статическую CSP-страницу в Cache Studio:
– создать новую CSP-страницу:
ф. Studio | ф. Рабочая поверхность | пр. кн. на CSP файлы;
выбр. Создание CSP файл ► ф. _SYSTEM-CACHEWEB/User/Untitled1.CSP
заменить код
My page body
на Добро пожаловать в Cache Server Pages!
– скомпилировать CSP-страницу
ф. Studio | ф. Рабочая поверхность | раскр. CSP файлы; пр. кн. на Untitled1.CSP;
выбр. Компиляция 'Untitled1.CSP' ► ф. Сохранить как | выбр. CSP/USER;
Имя файла ← static.CSP; кн. Сохранить как ► ф. Результат |
Компиляция успешно завершена
– проверить работоспособность страницы:
ф. Studio | ф. Рабочая поверхность | раскр. CSP файлы; пр. кн. на static.CSP;
выбр. Показать веб-страницу ► окно браузера с загруженной страницей
2. Создать динамическую CSP-страницу в Cache Studio:
– создать новую CSP-страницу:
ф. Studio | ф. Рабочая поверхность | пр. кн. на CSP файлы;
выбр. Создание CSP файл ► ф. _SYSTEM-CACHEWEB/User/Untitled1.CSP
заменить код
My page body
на <h1>Сведения о студентах</h1>
– выполнить запрос к базе данных (класс Student, отображенный в одноименную таблицу):
ф. Studio | ф. Рабочая поверхность | ф. _SYSTEM-CACHEWEB/User/Untitled1.CSP
ввести код
<script language="SQL" name="StudentsInfo">
SELECT id, fam, im, ot, spec, kurs, gr FROM SQLUser.Student
</script>
– определить HTML-разметку таблицы для отображения результатов запроса:
ф. Studio | ф. Рабочая поверхность | ф. _SYSTEM-CACHEWEB/User/Untitled1.CSP
ввести код
<table border="1"> <tr> <td>ID</td> <td>Фамилия</td> <td>Имя</td>
<td>Отчество</td>
<td>Специальность</td> <td>Курс</td> <td>Группа</td> </tr> </table>
– построить цикл по результату запроса для отображения строк таблицы:
ф. Studio | ф. Рабочая поверхность | ф. _SYSTEM-CACHEWEB/User/Untitled1.CSP
ввести код:
<CSP:WHILE CONDITION="StudentsInfo.Next()"> <tr> <td>#(StudentsInfo.Data("id"))#</td> <td>#(StudentsInfo.Data("fam"))#</td> <td>#(StudentsInfo.Data("im"))#</td>
<td>#(StudentsInfo.Data("ot"))#</td>
<td>#(StudentsInfo.Data("spec"))#</td> <td>#(StudentsInfo.Data("kurs"))#</td> <td>#(StudentsInfo.Data("gr"))#</td> </tr> </CSP:WHILE>
– скомпилировать CSP-страницу и проверить ее работоспособность.
Аналогичным образом запрограммировать динамические страницы для отображения данных о предметах (код, название, цикл, объем и кафедра) и успеваемости студентов (фамилия, специальность и группа студента, название предмета, оценка и дата ее получения).