Главная » Просмотр файлов » Модельный SQL-интерпретатор

Модельный SQL-интерпретатор (1115016), страница 4

Файл №1115016 Модельный SQL-интерпретатор (А.А. Вылиток - Раздаточный материал) 4 страницаМодельный SQL-интерпретатор (1115016) страница 42019-05-08СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 4)

*/send (s, “client”, 7, 0);/* ................................ */close (s);exit (0);}3.4. Пример-оболочка программы «Сервер» длясети ЭВМ#include#include#include#include#include#include<sys/types.h><sys/socket.h><netinet/in.h><netdb.h><stdio.h><string.h>extern int errno;void main (){char c;intd, d1, fromlen;FILE * fp;char hostname[64];struct hostent *hp;struct sockaddr_in sin, fromsin;14Модельный SQL-интерпретатор. Методическое пособие.// получаем хост-имя собственной ЭВМ:gethostname (hostname, sizeof (hostname));// определяем сетевой номер своей машины:if ((hp = gethostbyname (hostname)) == NULL) {fprintf (stderr, “%s: unknown host.\n”, hostname);exit (1);}// получаем свой сокет-дескриптор:if ((d = socket (AF_INET, SOCK_STREAM, 0)) < 0) {perror (“client: socket”);exit (1);}// создаем адрес, который свяжется с сокетом:sin.sin_family = AF_INET;sin.sin_port = htons (1234);// копируем сетевой номер:memcpy ( &sin.sin_addr, hp->h_addr, hp->h_length);// связываем адрес с сокетомif ( bind ( d, (struct sockaddr *)&sin, sizeof (sin)) < 0 ){perror (“server: bind”);exit (1);}// слушаем запросы на сокетif ( listen ( d, 5) < 0 ) {perror (“server: listen”);exit (1);}// связываемся с клиентом через неименованный сокет с дескриптором d1;// после установления связи адрес клиента содержится в структуре fromsinfromlen = sizeof fromsin;if((d1 = accept ( d, (struct sockaddr *)&fromsin, &fromlen)) < 0){perror (“server: accept”);exit (1);}/* ----------------------------------------- */// читаем сообщения клиента, пишем клиенту:fp = fdopen (d1, “r”);c = fgetc (fp);/* ...................................

*/send (d1, “server”, 7, 0);/* ................................... */putchar (c);/* ................................... */close (d);exit (0);}15Волкова И.А., Головин И.Г., Кузина Л.Н., Мальковский М.Г.Ниже приводятся примеры оболочек программ для «Клиента» и «Сервера» для сетиЭВМ, основанных на объектно-ориентированном интерфейсе для работы с сокетами(одна из возможных реализаций интерфейса приводится в приложении).3.5. Пример-оболочка программы «Клиент» длясети ЭВМ в объектно-ориентированномстиле#include <iostream>#include "sock_wrap.h"//см. приложениеusing namespace std;using namespace ModelSQL;#define PORT_NUM 1234//////////// номер порта процесса-сервераВ этом примере клиент и сервер выполняются на одном компьютере,но программа легко обобщается на случай разных компьютеров.

Дляэтого можно, например, использовать сетевое имя не собственногокомпьютера, как ниже, а имя компьютера, на котором выполняетсяпроцесс-серверint main(int argc, char* argv[]){try {char host[64];// запрос сетевого имени собственной ЭВМif (gethostname(host, sizeof host) < 0) {// ошибка --- досрочно завершаем выполнениеcerr << GetLastError();perror("Host name");exit (−1);}// создаём сокетInClientSocket sock(host, PORT_NUM);// устанавливаем соединениеsock.Connect();// отправляем серверу строкуsock.PutString("Hello from client!");// печатаем на экран ответ от сервераcout << "Read from server: " << sock.GetString() << endl;// продолжаем диалог с сервером, пока в этом есть необходимость// ...} catch (Exception & e) {// ошибка --- выводим текст сообщения на экранe.Report();}return 0;}16Модельный SQL-интерпретатор.

Методическое пособие.3.6. Пример-оболочка программы «Сервер» длясети ЭВМ в объектно-ориентированномстиле#include <iostream>#include "sock_wrap.h" //см. приложениеusing namespace std;using namespace ModelSQL;#define PORT_NUM 1234 // номер порта процесса-сервераclass MyServerSocket : public InServerSocket {public:MyServerSocket () : InServerSocket (PORT_NUM) {}protected:void OnAccept (BaseSocket * pConn){// установлено соединение с клиентом, читаем сообщениеcout << "Read from client: " << pConn->GetString() << endl;// отправляем ответpConn->PutString("Hello from server.");// продолжаем диалог с клиентом, пока в этом есть необходимость// ...delete pConn;}};int main(int argc, char* argv[]){try {// создаём серверный сокетMyServerSocket sock;for (;;)// слушаем запросы на соединениеsock.Accept();} catch (Exception& e) {// ошибка --- выводим текст сообщения на экранe.Report();}return 0;}4.

БД и СУБДОбычно, говоря о базе данных, подразумевают некоторый программный комплекс,имеющий в своем составе следующие основные компоненты: непосредственно базуданных (БД), систему управления базой данных (СУБД) и язык данных (язык общенияпользователя с БД, в нашем случае это модельный язык SQL).17Волкова И.А., Головин И.Г., Кузина Л.Н., Мальковский М.Г.Собственно БД — совокупность данных, хранящихся во внешней памяти. Всоответствии с [4] обычно в БД выделяют три основных уровня хранения информации:внутренний, внешний и концептуальный.

«Внутренний уровень (также называемыйфизическим) наиболее близок к физическому хранилищу информации, т.е. связан соспособами сохранения информации на физических устройствах. Внешний уровень(также называемый пользовательским логическим) наиболее близок к пользователям,т.е. связан со способами представления данных для отдельных пользователей.Концептуальный уровень (также называемый общим логическим или простологическим) является «промежуточным» уровнем между двумя первыми ...

и связан собобщенным представлением пользователей о БД»[4].СУБД — программа, которая управляет всем доступом к базе данных. В общих чертахэто происходит следующим образом:— пользователь выдает запрос на доступ к БД, используя конкретный языкданных;— СУБД принимает запрос, анализирует и интерпретирует его, обследуя поочередивнешнеепредставление,отображение«внешний —концептуальный»,концептуальноепредставление,отображение«концептуальный — внутренний» и структуру хранения;— СУБД выполняет необходимые операции над хранимой БД;— СУБД выдает ответ пользователю, сначала выбирая все требуемыеэкземпляры хранимых записей, затем получая экземпляры концептуальныхзаписей и уже потом формируя требуемый экземпляр внешней записи.Ядром любой системы данных является модель данных, которая в частностиопределяет выбор языка данных.

Имеются три широко известные модели данных:реляционная, иерархическая и сетевая [4].В данной разработке для хранения информации предлагается создать реляционную БД,состоящую из нескольких (2-5) таблиц.На логическом (концептуальном) и внешнем уровнях каждая таблица представляетсобой совокупность записей. Все записи одной таблицы имеют одинаковую структуру.Каждая запись состоит из нескольких полей.С каждым полем связываются следующие характеристики: имя поля, тип поля (домен),длина поля и значение поля.Имена, типы, и длины полей задаются при определении структуры таблицы.На физическом (внутреннем) уровне таблицы предлагается реализовать с помощьюготовой библиотеки функций для работы с файлами данных.

Файл с таблицей помимоданных (записей) содержит описание структуры таблицы, определяющей поля даннойтаблицы. Эта структура загружается в оперативную память при открытиисоответствующей таблицы и используется при всех операциях, производимых надтаблицами.Для работы с таблицами реализована следующая функциональность (соответствующуюбиблиотеку классов можно найти на сайте кафедры алгоритмических языковhttp://www.al.cs.msu.ru):— создание новой таблицы,— удаление существующей таблицы,— открытие существующей таблицы,— перемещение по записям таблицы,— редактирование отдельных записей таблицы,— добавление новых записей в таблицу,18Модельный SQL-интерпретатор.

Методическое пособие.— удаление существующих записей из таблицы.Операции работы с таблицами реализованы через операции базового (<io.h>) вводавывода:— создание или открытие файла (open),— закрытие файла (close),— удаление файла (unlink),— чтение из файла (read),— запись в файл (write),— установка на определенную позицию в файле (lseek).Каждая таблица описывается одним файлом данных. Этот файл состоит из двух частей:заголовка, в котором описывается структура таблицы, и собственно записей.

Заголовоксодержит информацию о числе полей и для каждого поля — его тип (строковый илидлинный целый). Для строковых полей, кроме того, хранится их длина.Ниже приводится объектно-ориентированный интерфейс управления таблицами (файлdbms.h), который необходимо использовать для выполнения задания.#if !defined _DBMS_H_#define _DBMS_H_#include <vector>#include <string>using namespace std;class Xception {public:stringvirtual voidvirtual};Message;PrintMessage ();Xception () {}Xception ( const string& aMessage ){ Message = aMessage; }Xception ( const Xception& xception ){ Message = xception.Message; }~ Xception () {}class IField {public:enumTypevirtual TypeOfTypevirtual string & Textvirtual long & Long};{ TEXT, LONG };() = 0;() = 0;() = 0;class ITextField: public IField {public:virtual long & Long() { throw Xception (); }};class ILongField: public IField {public:virtual string & Text() { throw Xception (); }};19Волкова И.А., Головин И.Г., Кузина Л.Н., Мальковский М.Г.class ITableStruct {public:virtual ITableStruct * AddTextvirtual ITableStruct * AddLongvirtual ITableStruct * SetName};( const string& Name, int Length ) = 0;( const string& Name ) = 0;( const string& Name ) = 0;class ITable {public:static ITable* Create( ITableStruct * TableStruct );static ITableStruct * CreateTableStruct ();static voidDrop( const string & Name );static ITable* Open( const string & Name );virtualvirtualvirtualvirtualvirtualvirtualvirtualvirtualvoidvoidvoidIFieldboolboolvoidAddDeleteDrop* GetFieldReadFirstReadNextUpdate~ ITable() = 0;() = 0;() = 0;( const string& Name ) = 0;() = 0;() = 0;() = 0;() {};};#endifСоздание или открытие существующей таблицы происходит через статическиефункции Create и Open интерфейсного класса ITable, которые в случае успехавозвращают указатель на экземпляр, реализующий интерфейс ITable.

Такие функцииназываются производящими. Данный интерфейс позволяет осуществлять чтение,модификацию, добавление и удаление записей таблицы. Для формирования новойтаблицы необходимо задать структуру будущей таблицы, используя интерфейсITableStruct.ITableStruct * Struct = ITable::CreateTableStruct ();Struct->SetName ( "mytable" );Struct->AddText ( "Name", 10 );Struct->AddLong ( "Age" );// или короче:// Struct->SetName("mytable")->AddText("Name",10)->AddLong("Age");ITable * Table = ITable::Create ( Struct );После формирования новой таблицы описание её структуры Struct агрегируется внутриэкземпляра Table, поэтому вручную уничтожать Struct не нужно.

Характеристики

Тип файла
PDF-файл
Размер
364,41 Kb
Тип материала
Высшее учебное заведение

Список файлов учебной работы

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6310
Авторов
на СтудИзбе
312
Средний доход
с одного платного файла
Обучение Подробнее