73
МОСКОВСКИЙ АВТОМОБИЛЬНО-ДОРОЖНЫЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ (МАДИ) Э.А. ЧЕРНОВ ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ МЕТОДИЧЕСКИЕ УКАЗАНИЯ К КУРСОВОЙ РАБОТЕ

ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

  • Upload
    others

  • View
    15

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

МОСКОВСКИЙ АВТОМОБИЛЬНО-ДОРОЖНЫЙ

ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ

УНИВЕРСИТЕТ (МАДИ)

Э.А. ЧЕРНОВ

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

МЕТОДИЧЕСКИЕ УКАЗАНИЯ К КУРСОВОЙ РАБОТЕ

Page 2: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

МОСКОВСКИЙ АВТОМОБИЛЬНО-ДОРОЖНЫЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

(МАДИ)

Кафедра «Автоматизированные системы управления»

Утверждаю Врио зав. кафедрой _____________ В.Р. Рогов «____» __________ 2017 г.

Э.А. ЧЕРНОВ

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

МЕТОДИЧЕСКИЕ УКАЗАНИЯ К КУРСОВОЙ РАБОТЕ

МОСКВА МАДИ 2017

Page 3: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

УДК 519.682 (075.8) ББК 681.3

Ч493

Чернов, Э.А. Ч493 Объектно-ориентированное программирование: методиче-

ские указания к курсовой работе / Э.А. Чернов. – М.: МАДИ, 2017. – 72 с.

В методических указаниях приведены краткие теоретические по-ложения по разработке на языке C# в среде Visual Studio приложений, в которых реализованы запросы LINQ к локальным спискам. Преду-сматривается реализация операций поиска, фильтрации, объедине-ния таблиц и группировки. Приведено 40 вариантов заданий. Каждый вариант задания содержит краткое описание предметной области и перечень требуемых запросов. Приведены также требования к соста-ву курсовой работы и требования к ее оформлению.

УДК 519.682 (075.8) ББК 681.3

© МАДИ, 2017

Page 4: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

3

СОДЕРЖАНИЕ

ВВЕДЕНИЕ ....................................................................................................................... 5

ТРЕБОВАНИЯ К КУРСОВОЙ РАБОТЕ ......................................................................... 6

КРАТКИЕ ТЕОРЕТИЧЕСКИЕ ПОЯСНЕНИЯ ................................................................. 7

ИНИЦИАЛИЗАЦИЯ ОБЪЕКТОВ И СПИСКОВ ............................................................ 12

ПРИМЕРЫ ЗАПРОСОВ ................................................................................................. 13 Сортировка, проекция, фильтрация ............................................................. 13

Фильтрация (выборка строк по условию) .................................................... 14

Выделение части списка и поиск .................................................................. 14

Операции с коллекциями .............................................................................. 15

Операции с множествами .............................................................................. 15

Объединение и группировка коллекций ...................................................... 16

Агрегирующие запросы ................................................................................. 18

ЗАДАНИЯ НА КУРСОВЫЕ РАБОТЫ ........................................................................... 19 Задание № 1 (Гостиница) .............................................................................. 19

Задание № 2 (Библиотека) ............................................................................ 20

Задание № 3 (Школа) ..................................................................................... 21

Задание № 4 (Выставка собак) ..................................................................... 22

Задание № 5 (Прием в вуз) ........................................................................... 23

Задание № 6 (Почта) ..................................................................................... 25

Задание № 7 (Птицефабрика) ...................................................................... 26

Задание № 8 (Продмаг) ................................................................................. 27

Задание № 9 (Автобусный парк) ................................................................... 28

Задание № 10 (Кинотеатры) ......................................................................... 30

Задание № 11 (Футбол) ................................................................................. 31

Задание № 12 (Институт) .............................................................................. 32

Задание № 13 (Деканат) ................................................................................ 33

Задание № 14 (Поликлиника) ....................................................................... 34

Page 5: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

4

Задание № 15 (СТО) ...................................................................................... 36

Задание № 16 (Менеджер музыкальных групп) .......................................... 37

Задание № 17 (Архив) ................................................................................... 38

Задание № 18 (Турфирма) ............................................................................ 39

Задание № 19 (Аптека) .................................................................................. 40

Задание № 20 (Приборы) .............................................................................. 42

Задание № 21 (Хлебозавод) ......................................................................... 43

Задание № 22 (Судоходная компания) ........................................................ 44

Задание № 23 (Магазин музыкальных записей) ......................................... 45

Задание № 24 (ДТП) ...................................................................................... 46

Задание № 25 (Типография) ......................................................................... 47

Задание № 26 (Бассейн) ................................................................................ 49

Задание № 27 (Автобаза) .............................................................................. 50

Задание № 28 (Таксопарк) ............................................................................ 51

Задание № 29 (Рыболовный траулер) ......................................................... 52

Задание № 30 (Марки) ................................................................................... 53

Задание № 31 (Скачки) .................................................................................. 54

Задание № 32 (Цветы) ................................................................................... 55

Задание № 33 (Аукцион) ................................................................................ 56

Задание № 34 (Парикмахерская) ................................................................. 57

Задание № 35 (Фермер) ................................................................................ 58

Задание № 36 (Перевозки) ............................................................................ 59

Задание № 37 (Подписчики почты) .............................................................. 60

Задание № 38 (Книжный магазин) ................................................................ 61

Задание № 39 (Продажа автомобилей) ....................................................... 62

Задание № 40 (Аэропорт) .............................................................................. 63

ОФОРМЛЕНИЕ ОТЧЕТА ПО ВЫПОЛНЕННОЙ КУРСОВОЙ РАБОТЕ .................... 65

СПИСОК ЛИТЕРАТУРЫ ................................................................................................ 71

Page 6: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

5

ВВЕДЕНИЕ

Одним из важнейших достижений в технологии разработки со-временных приложений является реализация запросов к базам дан-ных с целью получения информации, подготовленной для восприятия пользователем. Помимо извлечения зачастую информацию требуется фильтровать, группировать и сортировать информацию, требуется также выполнять вычисления и другие операции. Все эти действия можно выполнять с помощью запросов LINQ.

LINQ (Language INtegrated Query – Язык интегрированных запро-сов) – это встроенный в среду Visual Studio язык, позволяющий извле-кать и обрабатывать данные из разнообразных источников, информа-ция в которых может иметь различные форматы данных.

Источниками данных могут быть как локальные коллекции, так и удаленные базы данных. Для извлечения данных могут применяться достаточно сложные условия поиска. Одновременно с реализацией запроса можно выполнять проекцию, фильтрацию, группировку и сор-тировку извлекаемых данных. Можно также реализовывать агреги-рующие арифметические операции с коллекциями: нахождение мак-симальных и минимальных значений, подсчет сумм и средних ариф-метических значений и т. д.

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

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

Данная курсовая работа предназначена для освоения студента-ми обработки информации в приложениях пользователя с помощью запросов LINQ.

Page 7: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

6

ТРЕБОВАНИЯ К КУРСОВОЙ РАБОТЕ

Целью курсовой работы является разработка в среде Visual Stu-

dio фирмы Microsoft консольного приложения для работы с локальны-

ми обобщенными списками. Информация для списков должна сохра-

няться в файлах, реализованных с помощью приложения «Блокнот».

Каждый из списков должен содержать не менее 10 инициализирован-

ных объектов класса.

Структура сущностей приведена в описании каждого индивиду-

ального задания. Реализация классов может предусматривать нали-

чие конструктора с параметрами (в зависимости от вида запросов), но

может быть выполнена с помощью свойств в форме {get; set;}. Сту-

дент может добавлять в класс свойства, но их не может быть меньше,

чем указано в задании.

Разрабатываемое приложение должно обрабатывать не менее

шести запросов. Запросы выполняются в форме LINQ to Objects. Тек-

сты запросов на русском языке должны представляться на экране в

виде списка, и каждый из запросов может быть выбран посредством

выбора номера его позиции в списке. После выполнения запроса на

экран снова выводится список для выбора другого запроса.

Одна из позиций в списке должна обеспечивать «нормальный»

выход из программы.

Отчет студент предоставляет в электронной форме в виде пап-

ки, имя которой содержит номер задания и фамилию студента. В пап-

ке представляется консольное приложение, на котором студент де-

монстрирует работоспособность разработанной программы, и имеет-

ся текстовый файл с описанием курсовой работы и содержащий:

титульный лист;

текст задания;

текст программы;

пояснения к программе;

файлы для инициализации списков.

Page 8: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

7

КРАТКИЕ ТЕОРЕТИЧЕСКИЕ ПОЯСНЕНИЯ

Информация для заполнения объектов классов хранится в фай-лах. Файлы создают в Приложении «Блокнот». Все данные для одного объекта записывают в одной строке.

В РФ дробная часть отделяется от целой с помощью запятой, поэтому для разграничения элементов в файлах ее применять нельзя (если предполагается применение дробных чисел). Можно использо-вать пробел (если в данном проекте строковые данные пробелов не имеют), точку с запятой и т. д. Ниже в примере запятая отделяет дробную часть числа от целой, а элементы разграничены точкой с за-пятой. Строковые данные в кавычки не заключают.

Пусть имеются таблицы следующей структуры.

Магазин Товар Ключ Ключ Название Название Адрес Цена Количество

Объявление классов для этих таблиц показано ниже. class Vegetable { public int vKey { set; get; } // Ключ public string Name { set; get; } // Название public double Price { set; get; } // Цена public int Quan { set; get; } // Количество public Vegetable() { } public Vegetable(string n, double p, int q) // Конструктор { Name = n; Price = p; Quan = q; } } Класс «Магазин»

class Shop { public string Name { set; get; } // Название товара, вместо ключа public string ShopName { set; get; } // Название магазина

Page 9: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

8

public string Street { set; get; } public Shop() { } // Пустой конструктор public Shop(string s,string c,string n) // Конструктор с параметрами { ShopName = s; Street = c; Name = n; } public Shop(Shop it) // Конструктор, принимающий объект { ShopName = it.ShopName; Street = it.Street; Name = it.Name; } } Для каждой таблицы создается автономный файл, и ввод дан-

ных для нее выполняется отдельно. Если требуется, чтобы одна таблица содержала вложенную или

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

Ниже приведен пример оформления файлов (в начале каждой строки целочисленный ключ):

Файл 1 (магазины) 1; Ашан; ул. Широкая; 2; Дикси; ул. Полярная; Файл 2 (товары) 1; Помидор; 83,5;1 1; Огурец; 65;2 2; Морковь; 35,2;3 2; Свекла; 14,5; 2 2; Лук; 21,4; 3

(В магазине «Ашан» 2 товара, в магазине «Дикси» 3). Ниже приведен метод для формирования обобщенного списка

для одного класса. (В данном примере имя класса Vegetable (Овощи). В заданиях на курсовую работу должно быть 3 или 4 класса, соответ-ственно измените имена классов, пути к файлам, объявления списков и количество полей в классах). Метод оформлен для формирования

Page 10: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

9

одного списка и вызывается несколько раз в цикле, передавая в него путь к файлу (path), индекс списка (n) и количество элементов в строке файла (m). Списки объявляют глобально (в классе Program). В метод передается индекс массива, содержащий количество элементов в строке файла (m). Раздельная обработка каждого списка (по индексу) обусловлена тем, что объект каждого класса отличается количеством элементов, их типами и порядком следования. using System.IO; // Не забудьте вставить эту сборку

Основная программа static void Main(string[ ] args) { File_Load(path); // Считывание файла // Обработка, указанная в задании на курсовую работу Console.ReadKey(); } static List<Shop> lst1 = new List<Shop>(); // Первый список static List<Vegetable> lst2 = new List< >( Vegetable); // Второй список static string[ ] path ={"C:\\Workc\\КР\\List1.txt","C:\\Workc\\КР\\List2.txt"};// Пути Подпрограмма формирования n таблиц static void File_Load(string[] path, int n, int m) { if (n == 0) // Первая таблица { StreamReader FileIn = new StreamReader(path[0], Encoding.Default); string str; while ((str = FileIn.ReadLine()) != null) // Пока не конец файла {

string[ ]ms = new string[m]; // m - количество полей в классе ms = str.Split(';'); // Расщепление на массив строк

// Добавление строки через конструктор с параметрами lst1.Add(new Shop (ms[0], ms[1], ms[2]));

}// Преобразование учитывает описание класса } // От while } // От if // При повторном вызове метода File_Load // n = 1 (Вторая таблица, опущены операторы if и while)

{ string[ ]ms = new string[m]; // m - количество полей в этом классе ms = str.Split(';'); // Расщепление на массив строк

lst2.Add(new Vegetable (Convert.ToInt32(ms[0]), ms[1], Convert.ToDouble(ms[2]))); // Второй список

}

Page 11: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

10

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

Запросы в каждом задании постоянные. Для их обработки оформляется оператор switch. Реализация запроса оформляется в виде группы case, вызывающей метод для обработки запроса.

Для моделирования работы с базой данных желательно запросы задавать номером с описанием запроса. После выбора номера нажи-мают на клавишу Enter. Желающие могут попробовать изменить про-грамму так, чтобы нажатия на клавишу Enter после выбора номера не требовалось. (Подсказка: надо обработать событие keybd_event).

Для вызова запросов по номеру рекомендуется реализовать приведенную ниже программу. Перед запуском цикла обработки за-просов в цикле формируются обобщенные списки. С этой целью объ-являются списки (их количество зависит от задания, в примере 3), и созданы массивы, содержащие пути к трем файлам и количество по-лей в каждом классе. Именам списков желательно задавать осмыс-ленные имена. static List<Vegetable> lst1 = new List<Vegetable>();// Объявите 3 списка static string [ ]p ={ "C:\\Workc17 Vis\\КР\\List1.txt", "Другие пути"};// 3 пути static int [ ]m ={3, 6, 5}; // Количество полей в классе для каждого класса static void Main(string[ ] args) { for (int i = 0; i < 3; ++i) { File_Load(p[i], n, m[i]);

// p[i] – пути, n - индекс списка, m[i] – количество полей в классе } int n = -1; // Позиция в switch while (true) { Frame();// Вывод списка для выбора запроса if (! int.TryParse(Console.ReadLine(), out n)) { Console.WriteLine("Это не цифра, нажмите на Enter"); Console.ReadLine(); Console.Clear(); continue; }

Page 12: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

11

switch (n) { case 1: Console.Clear(); // Вызов метода для реализации запроса для позиции 1 Console.WriteLine("Запрос окончен, нажмите любую клавишу"); Console.ReadKey(); Console.Clear(); continue; case 2: Console.Clear(); // Вызов подпрограммы реализации запроса для позиции 2 Console.WriteLine("Запрос окончен, нажмите любую клавишу"); Console.ReadKey(); Console.Clear(); continue; // Обработка других запросов case 9: Console.WriteLine

("Выход из программы - да, нет - любая клавиша "); string st = Console.ReadLine(); if (st == "да") Environment.Exit(0); else { Console.Clear(); continue; } continue; // Без этого оператора возникает ошибка default: Console.Clear(); Console.WriteLine

("Введенный № отсутствует, нажмите любую клавишу"); Console.ReadKey(); Console.Clear(); continue; } } } static void Frame() // Метод для выбора списка запросов { Console.WriteLine("\tВыберите № задачи\n");

Page 13: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

12

Console.WriteLine("1 - Получить справку о конкретном клиенте\n"); Console.WriteLine("2 - Суммарная стоимость товара в отделе\n"); Console.WriteLine("\tДругие запросы"); Console.WriteLine("\n9 - Выход из программы"); } } // Скобка от class Program

Примеры описания классов см. в начале параграфа.

ИНИЦИАЛИЗАЦИЯ ОБЪЕКТОВ И СПИСКОВ

Инициализация объекта класса может выполняться либо с по-мощью свойств ({ get; set; }), либо с помощью конструктора. Если ини-циализация выполняется с помощью конструктора, описания свойств не требуются. Если для инициализации применяются свойства, конст-руктор не нужен. В некоторых случаях система требует описание пус-того конструктора, который приведен в описаниях классов.

Если класс содержит массив, то инициализация такого массива выполняется только с помощью конструктора. Ниже приведен пример объявления класса, содержащего массив, и конструктор для инициа-лизации этого класса. class AZS// {

public string Firm; public string[ ] Benz= new string [3]; // public AZS(string f, params string [ ]b) // {

Firm = f; Address = a; GasKey = g; Benz[0] =""; Benz[1] =""; Benz[2] =""; // Эта строка не обязательна Benz[0] = b[0]; Benz[1] = b[1]; Benz[2] = b[2];

} }

Обратите внимание на модификатор params. Такой модифика-тор может быть только один, поэтому массив в классе, как правило, также один. Но если два массива имеют одинаковый тип, то индексы переменной с модификатором params (в примере g) можно продол-жить для инициализации второго массива (в котором индексы от 0, а индексы g следуют за максимальным индексом первого массива).

Page 14: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

13

Инициализация списка с элементами, содержащими массив, приведена ниже. static List<AZS> az = new List<AZS>() // Объявление пустого списка {

new AZS("Роснефть", "98","","92"), // Первый элемент списка new AZS("ТНК", "98","95",""), // Второй элемент списка

}; // Точка с запятой здесь обязательна

ПРИМЕРЫ ЗАПРОСОВ

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

Ниже для справки приведены наиболее распространенные за-просы LINQ.

Сортировка, проекция, фильтрация

В примерах запросов: lst обобщенный список для класса Vege-table (см. выше). w – имя переменной для лямбда-выражения (это имя может быть любым другим).

Выборка всех столбцов: var qr = lst.Select(w => w);

Выборка всех столбцов с сортировкой (по возрастанию): var qr = lst.Select(w => w).OrderBy(w=> w.Name);

Выборка двух столбцов (проекция): var qr = lst.Select(w => new {w.Name, w.Price });

При выполнении запроса GroupJoin обычно получается вло-женный список. Запрос Select выполняет выборку только на одном уровне. Поэтому при запросе Select вложенный список виден, но дос-туп к его полям отсутствует. Чтобы получить доступ к полям вложен-ного списка внутри анонимного метода применяют запрос SelectMany: var qr = ls.Select(rl => new {k = rl.Key, slst = rl.SelectMany(c => c.lst) });

Здесь ls содержит вложенный список, k – новое имя для ключа группировки, slst – новое имя вложенного списка; теперь его поля доступны в операторе foreach.

Page 15: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

14

Фильтрация (выборка строк по условию)

В одном запросе можно задать условие только для одного свой-ства (поля).

a. Попадание в диапазон значений var qr = lst.Where( w => w.num > 2 && w.num <5);//

b. Добавить условие для второго свойства (Сравнение для второго свойства записывается через точку по-

сле первого сравнения. Это обеспечивает операцию И (&&) между ло-гическими операциями для каждого поля). var qr=lst.Where(w=>w.Quan>2&&w.Quan<5).Where(b=>b.Price<4);

Если во второй проверке b заменить на a, ничего не изменится.

Выделение части списка и поиск

Операторы Take, Skip, TakeWhile и SkipWhile позволяют либо выбирать строки из начала списка, либо пропускать.

a. Взять первые три записи от начала списка: var qr = lst.Take(3);

b. Выбрать с начала списка по условию: var qs = lst.TakeWhile( w => w.Price < 50);

c. Поиск одиночного значения var qr = lst.FirstOrDefault( w => w.Name=="Помидор");

Console.WriteLine("{0}\t{1}\t{2}", qr.Name, qr.Price, qr. Quan); Запрос FirstOrDefault выбирает первый элемент в списке с за-

данным для поиска значением. Если такой элемент не найден, то вы-водится первый элемент из списка. Обратите внимание, при поиске выбирается объект класса, а не одиночное значение.

Запрос LastOrDefault выбирает последний элемент в списке с заданным для поиска значением. Если такой элемент не найден, то выводится последний элемент из списка.

Для поиска всех элементов с заданным для поиска значением можно применять запрос FindAll, но, наверное, лучше в этом случае применять запрос Where.

Page 16: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

15

Операции с коллекциями

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

Concat Объединение (конкатенация) двух коллекций

Distinct Исключение из списка повторяющихся элементов

Except Удаление из одного списка элементов другого списка

Intersect Пересечение двух коллекций

Union Объединение двух коллекций с удалением повторяющихся элементов

Операции с множествами

Для выполнения операций с коллекциями для типов данных пользователя требуется сравнивать между собой объекты класса. По-этому класс следует изменить (добавить класс интерфейса и доба-вить методы для сравнения свойств). Класс приобретет вид:

public class Vegetable : IEquatable<Vegetable> // Овощи { public string Name { get; set; } // Название public double Price { get; set; } // Цена public int Quan { get; set; } // Количество public Vegetable(string n, double p, int u) { Name = n; Price = p; Quan = u; } public bool Equals(Vegetable other) // Переопределение Equals { // Проверить, не имеет ли сравниваемый объект значение null. if (Object.ReferenceEquals(other, null)) return false; // Проверить, не ссылаются ли сравниваемые объекты // на одни и те же данные if (Object.ReferenceEquals(this, other)) return true; // Проверить, равны ли свойства товаров

Page 17: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

16

return name.Equals(other.Name) && Price.Equals(other.Price); } public override int GetHashCode() { //Получить хеш-код для поля Name, если оно не равно null. int hashVegName = Name == null ? 0 : name.GetHashCode(); // Получить хеш-код для поля price. int hashVegPrice = Price.GetHashCode(); // Вычислить хеш-код для товара. return hashVegName ^ hashVegPrice; } }

Теперь запрос, например, на удаление повторяющихся элемен-тов имеет вид: var qr = lst.Distinct();

В данном примере удаляются элементы, у которых совпадает название и цена.

Объединение и группировка коллекций

При объединении коллекций с данными пользователя возможно как внутреннее, так и внешнее объединение. Для объединения таблиц должен быть выбран ключ. При внутреннем объединении каждой строке в одной таблице строго соответствует одна строка в другой таблице. Внешнее левое объединение позволяет собрать новую таб-лицу из столбцов так, что в новой таблице повторяются строки из од-ной таблицы с одинаковым значением ключа в другой таблице. Если после объединения выполнить группировку (по повторяющимся стро-кам), получается аналог отношения «один ко многим». Ниже приведен пример левого внешнего объединения. См. скриншот.

Page 18: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

17

(Правое внешнее объединение (отношение многие к одному) не рассматривается).

Ниже приведен пример объединения двух классов (Shop и Vege-table) по ключам cKey (магазин), oKey (товар). (Shop – левый список, переменная w для левого списка, переменная b для правого списка)

var qr = cst.Join(lst, w => w.cKey, b => b.oKey, (w, b) => new {

w.ShopName, b.Name, b.Price, w.Quan,

});// Можно отсортировать .OrderBy( w => w.ShopName); string[ ] st = { "Магазин", "Овощ", "Цена", "Кол-во" }; // Заголовки Console.WriteLine("{0}\t{1}\t\t{2}\t{3} \n", st[0], st[1], st[2], st[3]); foreach (var v in qr) // Вывод новой таблицы

Console.WriteLine("{0} \t{1,-10} \t{2} \t{3}",v.Name, v.Price, v.Quan,);

При выводе таблицы обратите внимание на переменную v, она одинакова для свойств из левой и правой таблиц, поскольку вся таб-лица теперь единая (объединенная).

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

Ниже приведен пример применения группировки к итоговой таблице (в примере операции Join выше была получена таблица с именем qr).

Обратите внимание: после группировки из результата извлека-ется ключ и список для каждого ключа.

var grp = qr.GroupBy( w => w.ShopName).Select(rs => new { kgr = rs.Key, // Ключ группы sng = rs // Список группы });

foreach (var res in grp) {

Console.WriteLine("\nЗаказчик: " + res.kgr); // Вывод ключей foreach (var sp in res.sng) // Цикл вывода списка группы

Page 19: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

18

Console.WriteLine("{0}\t{1}\t{2} ", sp.Name, sp.Price, sp.Quan); }

Имена переменных res и sp в операторах foreach произволь-ные, но переменная res из наружного цикла позволяет с помощью то-чечной нотации обратиться к списку, относящемуся к группе.

К списку группы с помощью точечной нотации можно применять агрегирующие запросы.

Группировка может выполняться по разным ключам и может иметь несколько уровней.

Агрегирующие запросы

Основные операции для агрегирующих запросов: Average (Среднее значение), Aggregate (операции одного элемента с после-довательным по значению другим), Count (количество элементов в списке), Max, Min, Sum. Эти операции возвращают одиночное значе-ние для конкретного списка данных. Например, оператор:

int n = qs.Count();

подсчитывает количество элементов в списке qs.

Page 20: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

19

ЗАДАНИЯ НА КУРСОВЫЕ РАБОТЫ

Задания на курсовые работы по дисциплине «Объектно-ориен- тированное программирование» реализуются в форме консольных приложений в среде Visual Studio на языке C#. Обобщенные списки и коллекции являются локальными. Они формируются из файлов, реа-лизованных в приложении «Блокнот».

Задание № 1 (Гостиница)

Требуется разработать программную систему, предназначенную для администратора гостиницы. Такая система должна обеспечивать хранение сведений об имеющихся в гостинице номерах, о проживаю-щих в гостинице клиентах и о служащих, убирающих в номерах. Коли-чество номеров в гостинице известно, и имеются номера трех типов: одноместный, двухместный и трехместный, отличающиеся стоимо-стью проживания за сутки. Клиенту предоставляется место в номере. Оплата за место составляет долю от стоимости номера в зависимости от количества мест. Номер оплачивается по прибытии. Служащий гос-тиницы убирает все номера на одном этаже в определенные дни не-дели, при этом в разные дни он может убирать разные этажи.

Гостиница Клиент Служащий Номер Ключ Ключ Этаж ФИО ФИО Тип номера № паспорта Список этажей Стоимость в сутки Откуда Список дней недели Список клиентов Номер Список служащих Место Когда прибыл Оплата (суток)

Должны быть созданы обобщенные списки: • Сведения о гостинице. • Сведения о клиентах. • Сведения о служащих.

Page 21: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

20

Должны быть реализованы следующие запросы: • Стоимость места для заданного этажа и номера. • Список клиентов, прибывших из заданного города. • Кто из служащих убирал номер указанного клиента в заданный

день недели. • Сколько в гостинице свободных мест и свободных номеров. • Клиенты, проживающие в одноместных номерах. • Общая сумма, выплаченная всеми клиентами. Администратор должен иметь возможность (используя запросы

LINQ) выполнить следующую операцию: • Принять на работу или уволить служащего гостиницы (удалить

из списка).

Задание № 2 (Библиотека)

Требуется разработать программную систему, предназначенную для работников библиотеки. Такая система должна обеспечивать хра-нение сведений об имеющихся в библиотеке книгах, о читателях биб-лиотеки и читальных залах.

Библиотека имеет несколько читальных залов, которые харак-теризуются номером, специализацией и количеством мест. Читатели закрепляются за определенным залом (Общий, Физико-Математи- ческий и т. д.) и могут записываться и выписываться из библиотеки. Один читатель может взять несколько книг. Шифр книги задается при получении новой книги, а номер читательского билета задается при регистрации.

Книга Читатель Зал Ключ Ключ Ключ Название ФИО Название библиотеки Автор № билета Зал Год издания Дата рождения Специализация Шифр книги Телефон Количество мест Дата выдачи Образование Список читателей Дата получения Зал Кол-во экземпляров Список книг

Page 22: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

21

Должны быть созданы обобщенные списки: • Сведения о книгах. • Сведения о читателях. • Сведения о читальных залах. Библиотекарю могут потребоваться следующие сведения о те-

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

Задание № 3 (Школа)

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

Учитель Ученик Успеваемость Ключ Ключ Ключ ФИО Ученик Ученик Предмет Класс Предмет 1 № кабинета Предмет 2 Предмет 3

Page 23: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

22

Успеваемость задается числами от 2 до 5. Количество предме-тов может быть увеличено.

Должны быть созданы обобщенные списки: • Сведения об учителях. • Сведения об учениках. • Сведения об успеваемости. Завучу могут потребоваться следующие сведения о текущем со-

стоянии успеваемости: • Успеваемость по заданному предмету. • Количество неуспевающих учеников по всем классам. • У какого учителя самая низкая успеваемость. • Средняя оценка по всем предметам в каждом классе. • Класс с самой высокой успеваемостью по всем предметам. • Класс с самой низкой успеваемостью по всем предметам. Завуч может выполнять следующие операции: • Записать в школу нового ученика. • Отчислить из школы ученика.

Задание № 4 (Выставка собак)

Требуется разработать программную систему, предназначенную для организаторов выставки собак. Она должна обеспечивать хране-ние сведений о собаках – участниках выставки и экспертах. Для каж-дой собаки должны храниться сведения о том, к какому клубу она от-носится, кличка, порода и возраст, сведения о родословной (номер документа, клички родителей), дата последней прививки, фамилия, имя, отчество и паспортные данные хозяина. Сведения об эксперте должны включать фамилию и имя, специализацию по породе, номер ринга, который он обслуживает; клуб, название клуба, в котором он состоит. Каждый ринг имеет специализацию по породам, и его могут обслуживать несколько экспертов. Каждая порода собак выступает на своем ринге, но на одном и том же ринге в разное время могут высту-пать разные породы. Итогом выставки является определение медали-стов по каждой породе. Организатор выставки должен иметь возмож-

Page 24: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

23

ность добавить в базу нового участника или нового эксперта, снять эксперта с судейства, заменив его другим, отстранить собаку от уча-стия в выставке.

Собака Ринг Эксперт Ключ Ключ Ключ Кличка Номер (название) ФИО Порода Адрес Специализация Возраст Массив специализаций № ринга Клуб Клуб Клуб ФИО хозяина Список экспертов (ключ) Место (медаль) Список собак (ключ)

Должны быть созданы обобщенные списки: • Сведения о собаках. • Сведения о рингах. • Сведения об экспертах. Организатору выставки могут потребоваться следующие сведения: • На каком ринге выступает заданный хозяин со своей собакой. • Какими породами представлен заданный клуб. • Какие медали и сколько заслужены клубом. • Какие эксперты обслуживают породу. • Распределение специализаций по рингам. • Рекордсмены по породам по количеству медалей. Председатель клуба может выполнять следующие операции: • Принять в клуб новую собаку. • Отстранить от соревнований собаку. • Принять в клуб нового эксперта. • Уволить из клуба эксперта.

Задание № 5 (Прием в вуз)

Требуется разработать программную систему, предназначенную для работников приемной комиссии высшего учебного заведения. Она должна обеспечивать хранение, просмотр и изменение сведений об абитуриентах, а также о расписании экзаменов и консультаций. Ре-

Page 25: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

24

зультатом работы приемной комиссии должен быть список абитуриен-тов, зачисленных в институт.

Специальность задается названием кафедры и факультета, на которые поступает абитуриент. При регистрации абитуриенту выдают экзаменационный лист. Абитуриенты на период вступительных экза-менов объединяются в группы. Каждая группа сдает по три экзамена, по которым формируется экзаменационная ведомость. Для каждого потока формируется расписание консультаций и экзаменов по пред-метам. Медалистам засчитывают все экзамены. Известно количество мест по каждой кафедре. Приемная комиссия по результатам экзаме-нов должна сформировать списки абитуриентов, зачисленных в ин-ститут. Для вычисления проходного балла переписывают абитуриента в список зачисленных из списка результатов экзамена, отсортирован-ного по убыванию оценок, пока не будет достигнуто количество имеющихся мест по выбранной кафедре.

Абитуриент Экз. лист Экзамены Ключ Ключ Ключ Абитуриент ФИО Расписание ФИО Предмет 1 Группа Группа Предмет 2 Экзамен/Консультация Окончил Предмет 3 Число Медаль Время Кафедра Аудитория Факультет

Должны быть созданы обобщенные списки: • Сведения об абитуриентах. • Сведения о расписании. • Сведения об экзаменах. • Массив мест по кафедрам. Секретарю приемной комиссии могут потребоваться следующие

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

Page 26: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

25

• Консультация и экзамен по заданному предмету. • Списки зачисленных абитуриентов. • Конкурс на каждую специальность. • Списки абитуриентов, не прошедших по конкурсу. • Кафедры, по которым был недобор абитуриентов. Необходимо также предусмотреть возможность получения доку-

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

Задание № 6 (Почта)

Требуется разработать программную систему, позволяющую от-слеживать распределение по почтовым отделениям газет, печатаю-щихся в типографиях города. Система должна обеспечивать хране-ние, просмотр и изменение сведений о газетах, почтовых отделениях, получающих газеты и о типографиях, выпускающих газеты. Сведения о газетах включают в себя: название газеты, индекс издания, фами-лию, имя и отчество редактора, цену экземпляра газеты. Цены могут меняться. Возможно появление новых газет и изменение индекса су-ществующего издания. Для типографий указываются их названия и адреса. В типографии разными тиражами печатаются газеты несколь-ких наименований. Почтовое отделение имеет номер и адрес. На каж-дое почтовое отделение поступают в определенных количествах газе-ты разных наименований, причем часть экземпляров одной и той же газеты может быть напечатана в одной типографии, а часть в другой.

Газета Типография Почта Ключ Ключ Ключ Название Название Номер Индекс Адрес Адрес Редактор Список газет Список газет Тираж Список типографий Цена

Page 27: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

26

Должны быть созданы обобщенные списки: • Сведения о газетах. • Сведения о типографиях. • Сведения о почтовых отделениях. Пользователям системы может потребоваться следующая ин-

формация: • В каких типографиях печатаются газеты данного наименования. • Фамилия редактора газеты, которая печатается в указанной

типографии самым большим тиражом. • Какова общая стоимость тиража заданной газеты. • В какое почтовое отделение поступает больше всего газет. • В какие почтовые отделения поступает данная газета, печа-

тающаяся в заданной типографии. • В каком почтовом отделении максимальная стоимость полу-

чаемых газет. Должна быть предусмотрена возможность добавления новой га-

зеты, удаления газеты и изменения ее индекса.

Задание № 7 (Птицефабрика)

Требуется разработать программную систему, ориентированную на администрацию птицефабрики и позволяющую работать с инфор-мацией о работниках фабрики и об имеющихся на ней курах.

О каждой курице должна храниться следующая информация: вес, возраст, количество ежемесячно получаемых от курицы яиц, а также информация о местонахождении курицы. На птицефабрике за каждой курицей закреплена отдельная клетка. О работниках птице-фабрики в БД должна храниться следующая информация: паспорт-ные данные, зарплата, закрепленные за работником клетки. Не долж-но быть кур, не обслуживаемых ни одним работником. Количество кур может изменяться как в бóльшую, так и в меньшую сторону, в отдель-ные моменты времени часть клеток может пустовать. Цена яиц одина-кова для всех кур. В качестве дат применять дни одного месяца.

Page 28: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

27

Курица Птицефабрика Работник Ключ № Клетка ФИО Клетка Дата Клетки (ключ) Возраст Яйцо снесено? Зарплата Вес Яйценоскость Порода

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

ного веса и возраста. • Общее количество полученных яиц за диапазон дат и их сум-

марная стоимость. • Количество яиц, собранных каждым работником. • Куры, снесшие количество яиц ниже средней яйценоскости по

фабрике. • В какой клетке находится курица, от которой получили больше

всего яиц. • Какое количество кур обслуживает каждый работник. Должна быть предусмотрена возможность добавления и удале-

ния курицы.

Задание № 8 (Продмаг)

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

Page 29: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

28

Товар Отдел Продажи Ключ Ключ Ключ Название Название Товар Отдел Товар В наличии Сорт Продано Цена

Должны быть созданы обобщенные списки: • Сведения о товарах. • Сведения об отделах. • Сведения о продажах. Директору могут потребоваться следующие сведения: • Список товаров в магазине по отделам. • Какие товары по отделам отсутствуют. • Отделы с максимальной и минимальной прибылью. • Продажа товаров по отделам. • Какой товар дал максимальную прибыль по магазину. • Стоимость товаров для пополнения. Необходимо предусмотреть возможность добавления, удаление

и изменение товара.

Задание № 9 (Автобусный парк)

Требуется разработать программную систему, предназначенную для диспетчера автобусного парка. Такая система должна обеспечи-вать хранение сведений о водителях, о маршрутах и характеристиках автобусов.

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

Page 30: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

29

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

Водитель Маршрут Автобус Ключ Ключ Ключ ФИО № Гос. номер Стаж Начало Тип Класс Конец Вместимость Оклад Время отправления Исправен Маршрут Время прибытия График Автобус (гос. номер) Водитель (ключ)

Должны быть созданы обобщенные списки: • Сведения о водителях. • Сведения о маршрутах. • Сведения об автобусах. График задается вложенным массивом, содержащим номера

дней недели. Диспетчеру автопарка могут потребоваться следующие сведения: • Список водителей, работающих на определенном маршруте с

указанием графика их работы. • Какие автобусы обслуживают данный маршрут. • Протяженность маршрутов и их минимальная и максимальная

протяженность. • На каком маршруте работает водитель с максимальным стажем. • Какова общая протяженность маршрутов, обслуживаемых ав-

топарком. • Какие водители не вышли на линию по причине неисправности

автобуса.

Page 31: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

30

Директор автопарка должен иметь возможность добавить води-теля или автобус и удалить водителя или автобус.

Задание № 10 (Кинотеатры)

Требуется разработать программную систему, предназначенную для работников справочной службы кинотеатров города. Такая систе-ма должна обеспечивать хранение сведений о кинотеатрах города, о фильмах, которые в них демонстрируются, о сеансах и билетах на эти сеансы. На разных сеансах в одном кинотеатре могут идти разные фильмы, а если в кинотеатре несколько залов, то и на одном.

Кинотеатр Фильм Репертуар Ключ Ключ Ключ Название Название Дата Адрес Режиссер Сеанс Категория Оператор Цена Кол. мест Список актеров Свободных мест Кол. залов Жанр Состояние Киностудия

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

текущем состоянии проката фильмов в городе: • Репертуар кинотеатра. • В каких кинотеатрах можно посмотреть боевики. • Число свободных мест на данный сеанс в заданном кинотеатре. • Цена билетов на заданный сеанс в указанном кинотеатре. • Какие фильмы заданного режиссера демонстрируются в кино-

театрах. • В каких кинотеатрах демонстрируются комедии. Должна быть предусмотрена возможность добавления и удале-

ния фильма.

Page 32: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

31

Задание № 11 (Футбол)

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

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

Команда Игрок Стадион Матчи Название Ключ Ключ Ключ Город ФИО Название Команда Тренер Возраст Город Дата Место в рейтинге Амплуа Вместимость Счет Игроки № Цена билета Стадионы

Должны быть созданы обобщенные списки: • Сведения об игроках. • Сведения о команде. • Сведения о стадионе. • Сведения о матчах. Должны быть реализованы следующие запросы: • Даты встреч указанной команды, ее противники и счет.

Page 33: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

32

• Номера и фамилии игроков команд, участвовавших во встре-че, которая проходила в указанный день на стадионе.

• Цена билета на матч между указанными командами. • Команды, имеющие наилучшую и наихудшую разницу забитых

и пропущенных мячей. • Команды, занявшие призовые места. • Расписание игр по стадионам. Должна быть предусмотрена возможность добавления и удале-

ния игроков и матчей.

Задание № 12 (Институт)

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

Специальность Кафедра Дисциплина Ключ Название Название Название Факультет Семестр Специальность Телефон Часы Форма обучения Специальности Структура Отчетность

Должны быть созданы обобщенные списки: • Сведения о специальности.

Page 34: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

33

• Сведения о кафедрах. • Сведения о дисциплине. Структура дисциплины задается вложенным массивом, содер-

жащим три значения (количество часов в неделю: лекции, семинары, лабораторные работы, например, 2, 1, 4).

Сотруднику методического отдела могут потребоваться сле-дующие сведения:

• Список дисциплин для заданной специальности. • Количество часов лабораторных работ для заданной специ-

альности. • Семестровая нагрузка кафедры по специальности. • Дисциплины, по которым ведет занятия кафедра. • Дисциплины с минимальной и максимальной продолжитель-

ностью занятий. • Общее количество экзаменов и зачетов по кафедрам (включая

курсовую работу). Должна быть предусмотрена возможность добавления или уда-

ления специальности.

Задание № 13 (Деканат)

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

Студент Группа Предмет Ключ Ключ Ключ ФИО Факультет Весенняя/Зимняя № зачетки Группа Название Адрес Специальность Отчетность (зачет, экз.) Стипендия Кафедра Оценка

Должны быть созданы обобщенные списки: • Сведения о студенте.

Page 35: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

34

• Сведения о группе. • Сведения о предмете. Работнику деканата могут потребоваться следующие сведения: • Средний балл студентов по каждой группе указанного фа-

культета. • Средний балл по каждому предмету. • Группа с максимальным средним баллом по заданному

предмету. • Список по факультетам студентов, подлежащих отчислению

(не сдано более двух предметов). • По какому предмету больше всего неудовлетворительных

оценок. Должна быть предусмотрена возможность добавления и отчис-

ления студента.

Задание № 14 (Поликлиника)

Требуется разработать программную систему, предназначенную для врачей и работников регистратуры поликлиники. Такая система должна хранить сведения об участках, которые относятся к поликли-нике, о расписании работы участковых врачей, информацию о врачах, а также карточки пациентов. Карточка имеет номер, в нее заносятся сведения о каждом посещении поликлиники пациентом: дата посеще-ния, жалобы, предварительный диагноз, назначения, выписан или нет больничный лист, и если выписан, то на какой срок, имя врача. В кар-точке на первой странице указаны также фамилия, имя, отчество па-циента, его домашний адрес, пол и возраст, номер страхового полиса, дата заполнения карточки. В расписании работы врачей указывается, на каком участке работает врач, дни и часы приема, номер кабинета. Врач может обслуживать более одного участка. В случае увольнения врача его участок передается другим врачам. Данные о враче, кото-рые хранятся в БД, это фамилия, имя отчество, категория, стаж рабо-ты, дата рождения. В карточку больного при каждом его посещении поликлиники врачом заносится очередная запись. Работники регист-

Page 36: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

35

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

Участок Пациент Медработник Ключ Ключ Ключ Название ФИО ФИО Адрес Адрес Категория Пол Стаж Возраст Возраст № полиса Специализация Дата посещения Участок Жалоба Расписание Диагноз Кабинет № полиса Расписание приема

Должны быть созданы обобщенные списки: • Сведения об участках. • Карточки пациентов. • Сведения о врачах. «Расписание» приема задается в виде массива дней недели

(не более трех раз в неделю). Даты задаются в пределах дней одно-го месяца.

Работникам поликлиники могут потребоваться следующие све-дения:

• Списки пациентов, обслуживаемых данным врачом. • Сколько медсестер на каждом участке. • Расписание приема всех врачей заданной специализации. • Адрес данного больного, дата последнего посещения поли-

клиники и диагноз. • Фамилия и инициалы лечащего врача данного больного. • Какое количество больных обслужил за прошедший месяц ка-

ждый из врачей поликлиники. Должна быть предусмотрена возможность увольнения врача и

добавления врача.

Page 37: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

36

Задание № 15 (СТО)

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

Владелец Автомобиль Работник Ключ Ключ Ключ ФИО Марка ФИО № паспорта Цвет Специальность Адрес Год выпуска Разряд Возраст Гос. номер Список дефектов Марка авто Дата Дата обращения Цена работы Дата получения Цена запчастей

Должны быть созданы обобщенные списки: • Сведения о владельцах автомобилей. • Сведения об автомобилях. • Сведения о работниках. Список дефектов может быть представлен в виде вложенного

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

владельца и их стоимость.

Page 38: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

37

• Владельцы, сдавшие в ремонт автомобили с указанным типом неисправности.

• Самая распространенная неисправность в автомобилях ука-занной марки.

• Работник с максимальной выработкой. Должна быть предусмотрена возможность добавления автомо-

биля (для заданного клиента) и удаления клиента.

Задание № 16 (Менеджер музыкальных групп)

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

Группа Песня Гастроль Ключ Ключ Ключ Название Название Город Год создания Композитор Дата начала Страна Автор текста Дата конца Репертуар Год создания Рейтинг Певец

Должны быть созданы обобщенные списки: • Сведения о группах. • Сведения о песнях. • Сведения о гастролях. Дата задается в пределах одного месяца. Менеджеру могут потребоваться следующие сведения: • Какие песни исполнялись на гастролях заданной группы.

Page 39: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

38

• Какие группы исполняют песни заданного композитора. • Автор текста, композитор и дата создания песни с данным на-

званием. В репертуар какой группы она входит. • Репертуар наиболее популярной группы. • Место и продолжительность гастролей группы с заданным на-

званием. • Какие песни исполняет заданный певец. Должна быть предусмотрена возможность добавления и удале-

ния песен в заданную группу.

Задание № 17 (Архив)

Требуется разработать программную систему, предназначенную для работников технического архива предприятия. Технический архив содержит стеллажи, полки и ячейки, в которых хранится документа-ция. Ячейка архива может быть пустой или хранить все экземпляры одного документа. Каждый экземпляр документации имеет инвентар-ный номер и название. В базе данных должна храниться следующая информация о каждом документе архива: номер стеллажа, номер полки, номер ячейки, где хранится документ, название документа и название темы, к которой он относится, его инвентарный номер, коли-чество экземпляров документа, содержащихся в ячейке, дата поступ-ления документа в архив. Документ может быть востребован абонен-том архива. Работники архива, выдавая документ абоненту, фиксиру-ют, когда и кому он выдан.

Архив Абонент Документ Ключ Ключ Ключ Стеллаж ФИО Название Полка Отдел Тема Ячейка Телефон Инвентарный № Код ячейки Дата получения Код ячейки Заполнение Количество Дата поступления Даты выдачи (список)

Page 40: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

39

Должны быть созданы обобщенные списки: • Сведения об архиве. • Сведения об абонентах. • Сведения о документах. Дата задается днем в пределах одного месяца, даты выдачи (в

количестве до 4) оформлены в виде вложенного массива. Работнику архива могут потребоваться следующие сведения: • В каких ячейках хранятся востребованные абонентом до-

кументы. • Кто из абонентов получил документы на заданную тему. • Максимально заполненная ячейка. • Абонент, который брал указанный документ последним. • Есть ли в архиве пустые стеллажи, полки, ячейки, и в каком

количестве. • Список документов, не востребованных в течение заданного

срока. Должна быть предусмотрена возможность добавления и удале-

ния документа в заданную ячейку.

Задание № 18 (Турфирма)

Требуется разработать программную систему, предназначенную для работников туристической фирмы. Такая система должна обеспе-чивать хранение сведений об имеющихся в продаже путевках и о кли-ентах фирмы. Сведения о путевке включают ее стоимость, время от-правления (начало) и возвращения, экскурсии и прочие услуги, на-пример, в стоимость путевки полностью или частично может входить питание. Путевка предполагает посещение одного населенного пунк-та. Туристическая фирма продает стандартные путевки. Клиент может высказать свои пожелания относительно сроков поездки, ее стоимо-сти, город, который он хотел бы посетить. Каждый клиент покупает одну путевку. Для постоянных клиентов существует система скидок. Фирма ведет также журнал о продаже путевок (дата, какие путевки проданы, в каком количестве).

Page 41: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

40

Клиент Путевка Продажа Ключ Ключ Ключ ФИО Название ФИО сотрудника Телефон Начало Название путевки № паспорта Конец Количество продаж Скидка Город В наличии путевок Услуги Текущая дата Цена

Должны быть созданы обобщенные списки: • Сведения о клиентах. • Сведения о путевках. • Сведения о продаже путевок. Дата задается днем в пределах одного месяца. Работнику туристической фирмы могут потребоваться следую-

щие данные: • Кто из клиентов выбрал заданный город. • Есть ли путевки с заданной датой начала. • Какие путевки являются «горящими», то есть дата отправле-

ния, указанная в них, не более, чем на 5 дней больше текущей. • Сколько теряет фирма из-за скидок для постоянных клиентов. • Что представляет собой самая дорогая путевка из имеющихся

в продаже на текущий день. • Какие путевки пользуются наибольшим спросом. Должна быть предусмотрена возможность добавления и удале-

ния клиентов для заданной путевки.

Задание № 19 (Аптека)

Требуется разработать программную систему, предназначенную для директора аптеки. Такая система должна обеспечивать хранение сведений об аптеке, об имеющихся в ней товарах, о поставщиках и товарах, ими поставляемых. Аптека осуществляет закупку товаров у различных поставщиков, предпочитая при этом закупать одни виды

Page 42: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

41

товара у одних поставщиков, а другие у других. Предпочтение по-ставщика задается цифрой (1, 2 или 3). Список товаров у поставщика содержит имеющееся количество.

Товары, имеющиеся в аптеке, характеризуются наименованием, ценой, фасовкой (5 мг, 10 мг и т. д.), сроком годности и количеством. Директор аптеки закупает недостающие товары у поставщиков и спи-сывает просроченные товары.

Аптека Товар Поставщик Ключ Ключ Ключ Название Название Название Текущая дата Массив фасовок Товар Поставщик Цена Товар Поставщик Количество Срок годности Желаемый поставщик

Должны быть созданы обобщенные списки: • Сведения об аптеке. • Сведения о товарах. • Сведения о поставщиках. Фасовка задается в виде вложенного массива. Директору могут потребоваться следующие сведения: • Какие товары и в каком количестве имеются в каждой аптеке. • У каких товаров и в каких аптеках закончился срок годности

товара. • Какие товары можно заказать у поставщиков. • Суммарная стоимость товаров в аптеке. • У каких поставщиков и в каком количестве есть товар нужного

наименования. • У какого поставщика имеется товар с заданной фасовкой. Должна быть предусмотрена возможность добавления и удале-

ния товара в заданную аптеку.

Page 43: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

42

Задание № 20 (Приборы)

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

Каждый прибор может быть поставлен подразделением на кон-сервацию, поверяться (только рабочие), ремонтироваться или списан.

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

Списание прибора осуществляется по результатам поверки.

Прибор Подразделение Поверка Ключ Ключ Ключ Название Наименование Организация Инвентарный № Профиль Прибор Профиль Текущая дата Инвентарный № Стоимость Дата Состояние Результат Дата поверки Дата поверки

Должны быть созданы обобщенные списки: • Сведения о приборе. • Сведения о закреплении приборов за подразделениями. • Сведения о ремонте. Отделу метрологического обеспечения могут потребоваться

следующие сведения: • Какие приборы какого профиля и в каком количестве имеются

в подразделении.

Page 44: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

43

• Какие приборы, имеющиеся в подразделении, находятся на консервации и на поверке.

• Какие приборы были списаны. • Каким приборам (по подразделениям) необходимо пройти по-

верку (оставшийся срок меньше 5 дней). • Какие организации осуществляют поверку приборов заданного

профиля. • У каких приборов наступил срок очередной поверки. Должна быть предусмотрена возможность добавления и удале-

ния прибора.

Задание № 21 (Хлебозавод)

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

Хлебозавод Изделие Состав Ключ Ключ Ключ Название Название Ингредиент 1 Дата производства Вес изделия Ингредиент 2 Текущая дата Срок годности Ингредиент 3 Объем производства Ингредиент 4 Цена Ингредиент 5 Ингредиент 6 Вес Дата поставки Срок годности

Page 45: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

44

Должны быть созданы обобщенные списки: • Сведения о хлебозаводе. • Сведения об изделии. • Сведения о складе. Руководству комбината могут понадобиться следующие сведения: • Какие изделия выпускает заданный хлебозавод. • Какова суммарная стоимость всех изделий, выпускаемых за-

данным хлебозаводом. • Не было ли изделий, производство которых было выполнено

после истечения срока какого-либо ингредиента. • Отсортировать хлебозаводы в порядке убывания объема про-

изводства. • В каком изделии больше всего ингредиентов. • Какое изделие обеспечит при реализации максимальную

прибыль. Должна быть предусмотрена возможность добавления и удале-

ния изделия для заданного хлебозавода.

Задание № 22 (Судоходная компания)

База данных судоходной компании содержит сведения о рей-сах пассажирских судов, датах и времени отплытия, числе пассажи-ров на рейсе, о названиях судов, их вместимости и номерах выпол-няемых рейсов, о портах, в которые заходит судно при выполнении рейса, о времени стоянок в портах и т. д. Один рейс может обслужи-вать несколько судов. Система должна обеспечивать поиск и выда-чу сведений по различным запросам. Дата задается в пределах од-ного месяца. Разработать информационную систему для судоход-ной компании.

Должны быть созданы обобщенные списки: • Сведения о судах. • Сведения о рейсах. • Сведения о компаниях.

Page 46: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

45

Судно Рейс Стоянка Ключ Ключ Ключ Название Номер Порт Тип Дата Время прибытия Количество мест Судно Время стоянки Стоянки Время отплытия Стоимость Занято мест

Менеджеру компании могут понадобиться следующие сведения: • Расписание рейсов по датам. • Самый дорогой рейс. • Рейс, обслуживаемый максимальным количеством судов. • Самые незагруженные рейсы (дата, количество пассажиров). • Заданный рейс с перечислением посещаемых портов и вре-

мен стоянки. • В каких портах самые длительные стоянки. Необходимо предусмотреть возможность выдачи документа,

представляющего отчет о выполненных рейсах; отчет о прибылях.

Задание № 23 (Магазин музыкальных записей)

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

Page 47: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

46

Запись Каталог Магазин Ключ Ключ Ключ Название Запись Список записей Жанр Цена (розница) Цена (опт) Исполнитель Носитель Количество продаж Год выпуска Наличие Фирма Вид носителя

Должны быть созданы обобщенные списки: • Сведения о записях. • Сведения о произведениях. • Сведения о магазинах. Должны быть реализованы следующие запросы: • Получение перечня всех записей заданного жанра. • Получение списка самых продаваемых записей. • Исполнитель самых продаваемых произведений. • Перечень отсутствующих в магазине записей. • Стоимость всех проданных записей. • Запись с максимальной разницей между розничной и оптовой

ценой. Должна быть предусмотрена возможность добавления и удале-

ния песен в заданную группу.

Задание № 24 (ДТП)

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

Page 48: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

47

Система должна хранить полную информацию о ДТП.

Водитель Автомобиль Отдел ГИБДД Ключ Ключ Ключ ФИО Фирма Название Стаж Марка № акта о ДТП Гос. номер авто Тип кузова Водитель Удостоверение Гос. номер авто Гос. номер авто Дата Дата № акта о ДТП Место Кол-во пострадавших Вид ДТП Причина ДТП

Должны быть созданы обобщенные списки: • Сведения о водителях. • Сведения об автомобилях. • Сведения об отделе ГИБДД. Руководству МВД могут понадобиться следующие сведения: • Список водителей, совершивших более одного ДТП. • Список водителей, участвующих в ДТП в заданном месте. • Список водителей, участвующих в ДТП на заданную дату. • ДТП с максимальным количеством потерпевших. • Список водителей, участвующих в ДТП с наездом на пешеходов. • Причины ДТП в порядке убывания их количества. Должна быть предусмотрена возможность добавления и удале-

ния информации о ДТП.

Задание № 25 (Типография)

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

Page 49: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

48

Сведения о газетах включают в себя: название газеты, индекс изда-ния, фамилию, имя и отчество редактора, цену подписки на газету. Возможно появление новых газет и изменение индекса существующе-го издания. Для типографий указываются их названия, адреса и мак-симальный тираж. В типографии разными тиражами печатаются газе-ты нескольких наименований. Почтовое отделение имеет номер и ад-рес. На каждое почтовое отделение поступают в определенных коли-чествах газеты разных наименований, причем часть экземпляров од-ной и той же газеты может быть напечатана в одной типографии, а часть в другой.

Газета Типография Почта Ключ Ключ Ключ Название Название Номер Индекс Адрес Адрес Редактор Количество подписчиков Типография Тираж Цена подписки

Должны быть созданы обобщенные списки: • Сведения о газетах. • Сведения о типографиях. • Сведения о почтовых отделениях. Должны быть реализованы следующие запросы: • Какие типографии печатают заданную газету. • В каком почтовом отделении максимальное количество на-

именований газет. • Какая газета самая распространенная. • Какая газета дает максимальную прибыль. • В каких почтовых отделениях существует подписка на задан-

ную газету. • Общий объем (в рублях) реализации газет по почтовым отде-

лениям.

Page 50: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

49

Должна быть предусмотрена возможность добавления, измене-ния и удаления газет.

Задание № 26 (Бассейн)

Требуется разработать программную систему, позволяющую от-слеживать занятия в бассейне. Бассейны бывают спортивные, оздо-ровительные и комбинированные. Такая система должна обеспечи-вать хранение, просмотр и изменение сведений о бассейнах, трене-рах, расписании занятий, группах, разновидности абонементов (коли-чество посещений в неделю: 1, 2, 3, 5). Тренер проводит занятия только в одном бассейне. Категория группы: начинающие, подростки, взрослые и спортсмены.

Бассейн Тренер Группа Абонемент Ключ Ключ Ключ Ключ Название ФИО Номер группы № Адрес Группа Категория Категория Разновидность Расписание № абонемента Раз в неделю Тренеры Цена Абонементы

Должны быть созданы обобщенные списки: • Сведения о бассейнах. • Сведения о тренерах. • Сведения о группах. • Сведения об абонементах. Дни недели задаются в виде вложенного в класс «Тренер» мас-

сива констант (дней недели). Должны быть реализованы следующие запросы: • Список тренеров по бассейнам. • Итоговая прибыль каждого тренера в каждом бассейне. • Тренеры, работающие с начинающими. • Список посетителей, занимающихся с заданным тренером. • Количество групп в каждом бассейне по дням недели.

Page 51: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

50

• Бассейн с максимальной выручкой. Должна быть предусмотрена возможность добавления и удале-

ния группы в заданный бассейн.

Задание № 27 (Автобаза)

Требуется разработать программную систему, позволяющую от-слеживать заправку автомобилей на разных автозаправочных станци-ях (АЗС). На каждой автобазе имеются автомобили разных моделей и разных типов (пикап, самосвал, седан, фура и т. д.). Автомобили за-правляются разными сортами бензина (А92, А95, А98, ДТ (дизельное топливо). Автобазы имеют договора с несколькими АЗС по заправке своих автомобилей. АЗС могут быть временно закрыты (например, для слива топлива), на них могут отсутствовать некоторые сорта бен-зина. Система должна обеспечить получение различных справок.

Автомобиль АЗС Автобаза Ключ Ключ Ключ Фирма Название Номер Марка Адрес Адрес Тип Сорта бензина Государственный номер Состояние Сорт бензина

Должны быть созданы обобщенные списки: • Сведения об автомобилях. • Сведения об АЗС. • Сведения об автобазах. Сорта бензина задаются в виде массива строковых констант,

пустая строка указывает на отсутствие бензина на данной АЗС. Директору автобазы может потребоваться следующая инфор-

мация: • На каких АЗС можно заправить конкретный автомобиль. • Сколько автомобилей с кузовом седан заправляются дизель-

ным топливом. • Список АЗС, на которых отсутствует заданный сорт бензина.

Page 52: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

51

• АЗС, обслуживающая максимальное количество автомобилей. • Автомобили, заправляющиеся заданным сортом бензина. • Автобаза с максимальным количеством автомобилей. Должна быть предусмотрена возможность добавления и удале-

ния автомобилей в заданную автобазу.

Задание № 28 (Таксопарк)

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

Автомобиль Водитель Таксопарк Ключ Ключ Ключ Фирма ФИО Название Марка № паспорта Адрес Тип Стаж Государственный номер Выручка Состояние Автомобиль Список дат

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

мация: • Какова выручка заданного водителя на заданную дату.

Page 53: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

52

• Какова выручка всех водителей на заданную дату. • Автомобили какой марки дают максимальную прибыль. • Какие автомобили не вышли на линию по всем таксопаркам. • Автомобили какой марки чаще всего не выходят на линию. • Отсортировать водителей по итоговой выручке за итоговый

период. Должна быть предусмотрена возможность добавления и удале-

ния автомобиля в заданный таксопарк.

Задание № 29 (Рыболовный траулер)

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

Судно Рейс Место лова Ключ Ключ Ключ Название Код рейса Название Тип Имя судна Дата Водоизмещение Место лова Капитан Дата выхода Дата возврата Вид улова Вес улова

Должны быть созданы обобщенные списки: • Сведения о судах.

Page 54: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

53

• Сведения о выходах на лов (рейсах). • Сведения о местах лова. Должны быть реализованы следующие запросы: • Список судов и общий вес пойманной рыбы. • Судно, отловившее больше всего минтая. • Место с наиболее удачным рейсом. • Судно с максимальным уловом. • Место и дата с максимальным уловом. • В какой день на заданном месте было больше всего судов. Должна быть предусмотрена возможность добавления и удале-

ния рейсов для заданного места лова.

Задание № 30 (Марки)

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

Марка Коллекция Коллекционеры Ключ Ключ Ключ Название (код) Владелец Контакт Тема Страна Особенности Дата выпуска Тираж Дата приобретения Цена

Page 55: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

54

Должны быть созданы обобщенные списки: • Сведения о марках. • Сведения о коллекциях. • Сведения о коллекционерах. Должны быть реализованы следующие запросы: • Группировка коллекций по владельцам. • Группировка редких марок по коллекционерам. • Владелец самой дорогой марки. • Коллекционер с максимальным количеством редких марок. • Отсортировать список владельцев в порядке убывания стои-

мости коллекции. • Коллекционеры, имеющие марки, выпущенные больше 10 лет

назад. Должна быть предусмотрена возможность добавления и удале-

ния марки в заданную коллекцию.

Задание № 31 (Скачки)

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

Должны быть созданы обобщенные списки: • Сведения о скачках. • Сведения о лошадях. • Сведения о жокеях.

Page 56: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

55

Скачка Лошадь Жокей Ключ Ключ Ключ Название Кличка ФИО Ипподром Масть Возраст Дата Возраст Владелец Место

Должны быть реализованы следующие запросы: • Список лошадей и жокеев, занявших призовые места на за-

данную дату. • Список скачек, в которых принимала участие заданная лошадь. • Список скачек, в которых принимал участие заданный жокей. • Лошадь, занявшая больше всего призовых мест. • Жокей, занявший больше всего призовых мест. • На каком ипподроме чаще всего проводились скачки. Должна быть предусмотрена возможность добавления и удале-

ния лошади для заданного владельца.

Задание № 32 (Цветы)

База данных содержит сведения о типе цветов (садовый или комнатный), их характеристиках и сезоне цветения, стране, цветово-дах поставщиках сорта, виде помещения для выращивания (теплица, оранжерея, открытый грунт и т. д.). Система должна обеспечивать по-иск и выдачу сведений по различным запросам. Разработать инфор-мационную систему «Цветы».

Цветок Поставщик Продавец Ключ Ключ Ключ Название ФИО ФИО Вид Вид хозяйства Адрес Страна Адрес Сезон цветения Сорт Цена

Page 57: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

56

Должны быть созданы обобщенные списки: • Сведения о цветах. • Сведения о поставщиках. • Сведения о продавцах. Должны быть реализованы следующие запросы: • Списки цветов для каждого из поставщиков. • Список цветов с заданным сезоном цветения. • Список цветов, выведенных в заданной стране. • У кого можно купить заданный сорт. • Продавцы самых дорогих цветов. • Совпадающие поставщики у продавцов. Должна быть предусмотрена возможность добавления и удале-

ния цветов для заданного поставщика.

Задание № 33 (Аукцион)

Аукционная фирма занимается продажей с аукционов антиквар-ных вещей и произведений искусства. Владельцы вещей, выставляе-мых на аукционах, являются продавцами, а лица, приобретающие эти вещи, покупателями. Перед проведением очередного аукциона каж-дой из выставляемых на нем вещей присваивается уникальный номер лота. В книгах фирмы делается запись о каждом аукционе: дата, вре-мя и место его проведения, о его специфике (например: картины до 1900 г., написанные маслом). Заносятся также сведения о каждом продаваемом предмете: аукцион, на который он заявлен, номер лота, продавец, начальная (стартовая) цена, краткое словесное описание. Покупатель на одном аукционе может купить только один предмет. После аукциона служащие аукционной фирмы записывают фактиче-скую цену, уплаченную за проданный предмет, и фиксируют данные покупателя. Разработать информационную систему «Аукционы».

Должны быть созданы обобщенные списки: • Сведения о продавцах. • Сведения о покупателях. • Сведения об аукционах.

Page 58: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

57

• Сведения о предметах для продажи. Дата задается в пределах одного месяца.

Продавец Покупатель Аукцион Предмет Ключ Ключ Ключ Ключ ФИО ФИО Название Название № паспорта № паспорта Место Специфика Предмет Предмет Дата Начальная цена Лот Конечная цена Покупатели Продавцы

Должны быть реализованы следующие запросы: • Какие предметы на заданную дату и на заданном аукционе

выставлены на продажу. • На каком аукционе продавались предметы заданной специфики. • Предмет, имеющий максимальную разницу между начальной

и конечной ценами. • На каком аукционе было продано больше всего предметов. • Покупатель самого дорогого лота. • Продавец самого дорогого лота. Должна быть предусмотрена возможность добавления и удале-

ния предметов для заданного аукциона.

Задание № 34 (Парикмахерская)

Парикмахерская имеет два зала - мужской и женский. Мастера имеют специализацию по залам. Клиенты (категория) бывают посто-янные, которым полагается скидка, и случайные. Услуги для мужского зала: простая стрижка, модная стрижка, ирокез и т. д. Услуги женского зала: маникюр, стрижка, укладка, косметические услуги и т. д.

Должны быть созданы обобщенные списки: • Сведения о клиентах. • Сведения о мастерах. • Сведения об услугах.

Page 59: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

58

Клиент Мастер Услуга Ключ Ключ Ключ Имя ФИО Название Категория Специализация Пол Пол Разряд Цена Вид услуги Список клиентов Скидка Дата

Руководителю парикмахерского салона могут потребоваться следующие сведения:

• Список клиентов, обслуженных мастерами на заданную дату. • Заработок мастера на заданную дату. • Самая распространенная услуга. • Соотношение между клиентами мужчинами и женщинами. • Количество постоянных клиентов на заданную дату. • Мастер, обслуживший больше всего клиентов. Должна быть предусмотрена возможность добавления и удале-

ния клиентов.

Задание № 35 (Фермер)

Фермер производит некоторую продукцию (зерно, мясо, фрукты, овощи и т. д.). Для производства требуется удовлетворить потребно-сти (удобрения, орудия производства, транспортные услуги, строи-тельные услуги и т. д. Создать информационную систему для учета труда фермера.

Фермер Продукция Потребность Ключ Ключ Ключ ФИО Название Название Адрес Количество Товар/Услуга Качество Признак Отпускная цена Цена

Должны быть созданы обобщенные списки: • Сведения о фермерах.

Page 60: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

59

• Сведения о производимой продукции. • Сведения о потребностях. Руководителю области могут потребоваться следующие сведения: • Какую продукцию производят фермеры области. • Что требуется каждому фермеру для производства. • Какое количество заданной продукции производят фермеры. • Прибыль фермеров по каждому виду продукции. • Какой кредит требуется каждому фермеру. • Какова разница между кредитом и полученной прибылью. Должна быть предусмотрена возможность добавления и удале-

ния продукта.

Задание № 36 (Перевозки)

Автотранспортное предприятие, занимается большегрузными перевозками. Предприятие владеет парком трейлеров. Каждый трей-лер характеризуется номерным знаком, маркой, фирмой, грузоподъ-ёмностью, расходом топлива на 100 км, длиной прицепа, стоимостью перевозки (руб/км), водителем. Имеются также водители: паспортные данные, стаж работы, классность, напарник (описывается так же, как водитель). Предприятие получает заказы на перевозку товаров: вес, количество мест, пункт отправления, пункт назначения, расстояние (км), трейлер, водитель. При расстоянии перевозки до 500 км води-тель едет без напарника.

Трейлер Водитель Заказ Ключ Ключ Ключ Марка ФИО Название Фирма № паспорта Пункт отправления Гос. номер Напарник Пункт назначения Грузоподъемность Классность Расстояние Расход топлива Стаж работы Вес Длина прицепа Трейлер Перевозка руб./км Автобаза

Page 61: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

60

Должны быть созданы обобщенные списки: • Сведения об автомобилях. • Сведения о водителях и напарниках. • Сведения о заказах. Работнику автотранспортного предприятия могут потребоваться

следующие сведения: • Список заказов на перевозку с сортировкой по расстоянию. • Список заказов с сортировкой по весу. • Трейлер с наибольшим выполненным количеством заказов. • Водитель с наибольшим выполненным количеством заказов. • Рейсы, выполняемые без напарника. • Общая прибыль предприятия. Должна быть предусмотрена возможность добавления, удале-

ния и изменения заказов.

Задание № 37 (Подписчики почты)

Требуется разработать программную систему, предназначенную для работников почтового отделения. Такая система должна обеспе-чивать хранение сведений о подписчиках газет и журналов, обслужи-ваемых отделением связи, и о почтальонах.

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

Подписчик Почтальон Издание Ключ Ключ Ключ ФИО ФИО Название Адрес Участок Индекс Список изданий Список адресов Цена подписки Начало доставки Срок подписки

Page 62: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

61

Должны быть созданы обобщенные списки: • Сведения о подписчиках. • Сведения о почтальонах. • Сведения об изданиях. Цена подписки задается в виде вложенного массива. Должны быть реализованы следующие запросы: • Вывести список подписчиков со списком изданий. • По заданному адресу определить фамилию почтальона, об-

служивающего подписчика. • Список подписчиков по участкам. • Сколько почтальонов работает в почтовом отделении. • На каком участке количество экземпляров подписных изданий

максимально. • Каков средний срок подписки по каждому изданию. Должна быть предусмотрена возможность добавления и удале-

ния подписчика по заданному адресу.

Задание № 38 (Книжный магазин)

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

Книга Каталог Магазин Ключ Ключ Ключ Название Автор Название Жанр Название Цена (опт) Автор Шифр Количество продаж Год издания Цена (розница) Наличие Количество страниц Носитель Носитель

Page 63: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

62

Должны быть созданы обобщенные списки: • Сведения о книгах. • Сведения о каталоге. • Сведения о магазинах. Должны быть реализованы следующие запросы: • Получение перечня всех книг заданного жанра. • Получение списка книг по авторам. • Автор самых продаваемых книг. • Перечень отсутствующих в магазине книг. • Стоимость всех проданных книг. • Книга с максимальной разницей между розничной и оптовой

ценой. Должна быть предусмотрена возможность добавления и удале-

ния книг заданного жанра.

Задание № 39 (Продажа автомобилей)

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

Автомобиль Покупатель Магазин Ключ Ключ Ключ Фирма ФИО Название Модель Координаты Год выпуска Фирма Мощность двигателя Модель Коробка Год выпуска Состояние Состояние Особенности Максимальная цена Цена

Page 64: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

63

Должны быть созданы обобщенные списки: • Сведения об автомобилях. • Сведения о покупателях. • Сведения о магазинах. Должны быть реализованы следующие запросы: • Найти покупателей на автомобиль с заданными параметрами. • Покупатели, желающие приобрести автомобиль заданной

модели. • Вывести список автомобилей с пробегом меньше 30 тыс. км. • Вывести список новых автомобилей. • Соотношение покупательной способности покупателей и сум-

марной стоимости имеющихся автомобилей. • Самый дорогой автомобиль. Должна быть предусмотрена возможность добавления и удале-

ния покупателя.

Задание № 40 (Аэропорт)

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

Самолет Рейс Билеты Ключ Ключ Ключ Название № рейса № кассы Категория Самолет № рейса Количество мест Список посадок Дата Время вылета Время Свободные места Цена

Должны быть созданы обобщенные списки: • Сведения о самолетах.

Page 65: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

64

• Сведения о рейсах. • Сведения о билетах. Список промежуточных посадок задается вложенным массивом. Должны быть реализованы следующие запросы: • Есть ли свободные места на заданный рейс. • Список рейсов без промежуточных посадок. • Какие рейсы обслуживаются заданным самолетом. • Как загружены самолеты на заданный рейс по датам. • Самый дорогой рейс. • На каких рейсах можно заменить самолет (много свободных

мест). Должна быть предусмотрена возможность добавления и удале-

ния рейсов.

Page 66: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

65

ОФОРМЛЕНИЕ ОТЧЕТА ПО ВЫПОЛНЕННОЙ КУРСОВОЙ РАБОТЕ

Отчет курсовой работы должен содержать следующие структур-ные элементы:

1. Титульный лист; 2. Содержание; 3. Введение; 4. Основной раздел; 5. Текст программ консольных приложений с реализацией запро-

сов LINQ; 6. Файлы для реализации списков; 7. Заключение; 8. Список литературы; 9. Приложения. Объем отчета должен составлять 15–20 страниц. В Содержании указываются все разделы отчета с указанием

страниц. Во Введении отражаются: цель, задачи курсовой работы, акту-

альность выбранной темы, необходимость решения проблемы в со-временных условиях.

В Основном разделе содержится описание основных классов, типов обобщенных коллекций и списков, описание запросов LINQ с оформлением лямбда-выражений и анонимных методов, а также текст программы для реализации заданных в задании запросов.

В разделе Файлы должны быть представлены все файлы, необ-ходимые для инициализации списков, включая разграничительные символы между элементами.

В Заключении прилагаются скриншоты (желательно в виде нега-тивов от вывода на экран в консольных приложениях) реализации вы-вода на экран результатов запросов LINQ.

Список литературы должен включать в себя список книг и ис-точников из Интернета, действительно использованных при подготов-ке и написании отчета, и состоять не менее чем из 10 позиций.

Page 67: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

66

При оформлении отчета должны быть соблюдены следующие требования:

а) пояснительная записка может быть представлена как в элек-тронном виде, так и в бумажном, напечатанном на одной стороне лис-та белой бумаги формата А4;

б) поля: • правое 20 мм; • левое 30 мм; • верхнее 20 мм; • нижнее 20 мм; в) размер букв и шрифт: • для текстов описаний применяют шрифт Times New Roman

(кегль 14), для описания фрагментов программ – Ariel или Courier New (кегль 12);

• основной текст: кегль 14; • цвет шрифта текста – черный; • цвет шрифта программ и автоотступы как заданы редактором

текста среды разработки Visual Studio. г) интервал между строками текста 1,3 между строками про-

грамм 1. Для наименований структурных элементов «Содержание», «Вве-

дение», «Заключение», «Список литературы» задается стиль «заголо-вок» с соответствующим формированием гипертекстового оглавления. Для оформления нумерации должен применяться многоуровневый список. Заголовки записываются без точки на конце с выравниванием влево, строчными буквами без подчеркивания.

Рубрикация

Основная часть Пояснительной записки делится на разделы, подразделы, пункты и подпункты.

Разделы, подразделы, пункты и подпункты следует нумеровать арабскими цифрами.

Page 68: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

67

Разделы должны иметь порядковую нумерацию в пределах все-го текста, за исключением приложений. Номер подраздела включает номер раздела и порядковый номер подраздела, разделенные точкой.

После номеров раздела, подраздела, пункта и подпункта перед их заголовками или текстом точку не ставят.

Заголовки

Заголовки имеют только разделы и подразделы. Пункты и под-пункты заголовков не имеют. Заголовки должны четко и кратко отра-жать содержание разделов, подразделов.

Печать заголовков разделов и подразделов с абзацного отступа (1,25 см) строчными буквами, начиная с прописной, без точки в конце.

Запрещаются в заголовках: а) перенос слов; б) сокращения слов; в) применение аббревиатур. Заголовок из двух предложений разделяют точкой. Если заголовок состоит из двух и более строк, вторую и после-

дующие строки начинают под заглавной буквой первой строки заго-ловка. Заголовки разделов и подразделов следует выделять полу-жирным шрифтом.

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

Списки

1. После наименования списка ставится двоеточие. 2. Для каждого элемента списка, содержащего 2 строки и бо-

лее, устанавливается выступ на 0,7 (относительно номера, как в этом примере).

3. Вложенный список имеет отступ на 0,7 относительно первой позиции наружного списка и другой символ для нумерации:

а) Это пример строки вложенного списка. Обратите внимание на взаимное размещение списков.

Page 69: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

68

4. Пункты 2 и 3 показывают примеры элементов списка из не-скольких строк.

Нумерация страниц

Страницы Пояснительной записки следует нумеровать арабски-ми цифрами, соблюдая сквозную нумерацию по всему тексту.

Нумерация страниц выполняется в колонтитуле, имеющего форму: Задание № 1 - 3 - Иванов 2бАСУ1

На первых двух страницах колонтитул отсутствует. Такая фор-ма препятствует предоставлению одним студентом работы другого студента.

Титульный лист включают в общую нумерацию страниц. Каждый структурный элемент Пояснительной записки (Введе-

ние, Заключение, Список использованных источников, а также разде-лы основной части) следует начинать с нового листа (страницы).

Иллюстрации

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

Иллюстрации (вне приложений) нумеруют арабскими цифрами сквозной нумерации.

Порядковый номер рисунка и его название проставляются под рисунком посередине строки с указанием слова «Рис.», номера и на-именования рисунка (например, Рис. 1.).

Таблицы

Название таблицы должно отражать ее содержание, быть точным и кратким. Название таблицы следует помещать над таблицей слева, с абзацного отступа в одну строку с ее номером через символ подчерки-

Page 70: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

69

вания, например, «Таблица_1. Основные операции». Вторая строка на-звания таблицы начинается под заглавной буквой первой строки.

Располагают таблицу непосредственно после текста, в котором она упоминается впервые, или на следующей странице.

Ссылка на таблицу в тексте слово «таблица» с указанием ее но-мера, например, «…показано в Таблице_2».

Нумерация таблиц в основном тексте арабскими цифрами сквозной нумерации.

Перенос таблиц. Слово «Таблица» и ее номер указывают один раз слева над первой частью таблицы, над другими частями с абзац-ного отступа следует писать «Продолжение Таблицы» и указать ее номер, например, «Продолжение Таблицы_1».

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

В конце заголовков и подзаголовков таблиц точки не ставят.

Список литературы

Библиографическое описание литературных источников следует выполнять в соответствии с ГОСТ 7.1-2003, с указанием только обяза-тельных элементов.

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

Ссылки на использованные источники следует приводить в тек-сте Пояснительной записки в квадратных скобках, например: «в соот-ветствии с [7, с. 99]».

Примеры библиографического описания. ГОСТ 7.1-2003: Книги: а) один автор: Герасимова В.Д. Анализ и диагностика производственной дея-

тельности предприятий (теория, методика, ситуации, задания): учеб.

Page 71: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

70

пособие для вузов / В.Д. Герасимова. – 4-е изд., перераб. и доп. – М.: КНОРУС, 2008. – 256 с.

б) коллектив авторов: Любушин Н.П. Экономический анализ. Контрольно-тестирующий

комплекс: учеб. пособие для вузов / Н.П. Любушин, Н.Э. Бабичева. – М.: ЮНИТИ-ДАНА, 2007. – 159 с.

Защита курсовой работы

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

Page 72: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

71

СПИСОК ЛИТЕРАТУРЫ

1. Чернов, Э.А. Основы программирования на языке C# / Э.А. Чернов. – Дюссельдорф, Германия: LAP Lambert Academic Pub-lishing, 2015. – 310 с.

2. Дэвис, А. Асинхронное программирование в C# 5.0 / А. Дэвис. – М.: ДМК Пресс, 2013. – 120 с.

3. Котов, О.М. Язык C#. Краткое описание и введение в техноло-гии программирования / О.М. Котов. – Екатеринбург: Изд-во Урал. ун-та, 2014. – 208 с.

4. Албахари, Дж. C# 5.0. Справочник. Полное описание языка / Дж. Албахари, Б. Албахари. – М.: Вильямс: 2014. – 1008 с.

5. Язык программирования C# / А. Хейлсберг, М. Торгерсен, С. Вилтамут, П. Голд. – 4-е изд. – М.: Питер, 2012. – 784 с.

6. Мартин, Р. Принципы, паттерны и методики гибкой разработки на языке C# / Р. Мартин, М. Мартин. – СПб.: Символ Плюс, 2011. – 768 с.

7. Рубанцев, В. Тотальный тренинг по Си-шарпу / В. Рубанцев. – RVGames, 2013. – 213 с.

8. Рихтер, Дж. CLR via C#. Программирование на платформе Microsoft .NET Framework 4.0 на языке C# / Дж. Рихтер. – 3-е изд. – М.: Питер, 2012. – 928 с.

9. Троелсен, Э. Язык программирования C# 5.0 и платформа .NET 4.5 / Э. Троелсен. – 6-е изд. – М.: Вильямс, 2013. – 1312 с.

10. Стиллмен, Э. Изучаем C# / Э. Стиллмен, Д. Грин. – 3-е изд. – М.: Питер, 2014. – 816 с.

Интернет-ресурсы: 11. URL: professorweb.ru 12. URL: code.msdn.microsoft.com 13. URL: metanit.com

Page 73: ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕlib.madi.ru/fel/fel1/fel17M593.pdf · Данная курсовая работа предназначена

Учебное издание

ЧЕРНОВ Эдгар Александрович

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

МЕТОДИЧЕСКИЕ УКАЗАНИЯ К КУРСОВОЙ РАБОТЕ

Редактор Г.Н. Середина

Редакционно-издательский отдел МАДИ. E-mail: [email protected]

Подписано в печать 04.12.2017 г. Формат 60×84/16. Усл. печ. л. 4,5. Тираж 100 экз. Заказ . Цена 150 руб.

МАДИ, Москва, 125319, Ленинградский пр-т, 64.