МОСКОВСКИЙ АВТОМОБИЛЬНО-ДОРОЖНЫЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ (МАДИ) Э.А. ЧЕРНОВ ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ МЕТОДИЧЕСКИЕ УКАЗАНИЯ К КУРСОВОЙ РАБОТЕ МОСКОВСКИЙ АВТОМОБИЛЬНО-ДОРОЖНЫЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ (МАДИ) Кафедра «Автоматизированные системы управления» Утверждаю Врио зав. кафедрой _____________ В.Р. Рогов «____» __________ 2017 г. Э.А. ЧЕРНОВ ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ МЕТОДИЧЕСКИЕ УКАЗАНИЯ К КУРСОВОЙ РАБОТЕ МОСКВА МАДИ 2017 УДК 519.682 (075.8) ББК 681.3 Ч493 Чернов, Э.А. Ч493 Объектно-ориентированное программирование: методические указания к курсовой работе / Э.А. Чернов. – М.: МАДИ, 2017. – 72 с. В методических указаниях приведены краткие теоретические положения по разработке на языке C# в среде Visual Studio приложений, в которых реализованы запросы LINQ к локальным спискам. Предусматривается реализация операций поиска, фильтрации, объединения таблиц и группировки. Приведено 40 вариантов заданий. Каждый вариант задания содержит краткое описание предметной области и перечень требуемых запросов. Приведены также требования к составу курсовой работы и требования к ее оформлению. УДК 519.682 (075.8) ББК 681.3 © МАДИ, 2017 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 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 5 ВВЕДЕНИЕ Одним из важнейших достижений в технологии разработки современных приложений является реализация запросов к базам данных с целью получения информации, подготовленной для восприятия пользователем. Помимо извлечения зачастую информацию требуется фильтровать, группировать и сортировать информацию, требуется также выполнять вычисления и другие операции. Все эти действия можно выполнять с помощью запросов LINQ. LINQ (Language INtegrated Query – Язык интегрированных запросов) – это встроенный в среду Visual Studio язык, позволяющий извлекать и обрабатывать данные из разнообразных источников, информация в которых может иметь различные форматы данных. Источниками данных могут быть как локальные коллекции, так и удаленные базы данных. Для извлечения данных могут применяться достаточно сложные условия поиска. Одновременно с реализацией запроса можно выполнять проекцию, фильтрацию, группировку и сортировку извлекаемых данных. Можно также реализовывать агрегирующие арифметические операции с коллекциями: нахождение максимальных и минимальных значений, подсчет сумм и средних арифметических значений и т. д. При реализации запроса, возвращающего список, возможно появление новых типов (классов) данных. В частности, при объединении данных новая таблица содержит столбцы, извлеченные (частично или полностью) из исходных таблиц, а это означает появление объекта нового класса. Исходными данными для операции LINQ могут быть один или два списка любого типа. Результат выполнения также может быть списком, но может быть и одиночным значением. Данная курсовая работа предназначена для освоения студентами обработки информации в приложениях пользователя с помощью запросов LINQ. 6 ТРЕБОВАНИЯ К КУРСОВОЙ РАБОТЕ Целью курсовой работы является разработка в среде Visual Studio фирмы Microsoft консольного приложения для работы с локальными обобщенными списками. Информация для списков должна сохраняться в файлах, реализованных с помощью приложения «Блокнот». Каждый из списков должен содержать не менее 10 инициализированных объектов класса. Структура сущностей приведена в описании каждого индивидуального задания. Реализация классов может предусматривать наличие конструктора с параметрами (в зависимости от вида запросов), но может быть выполнена с помощью свойств в форме {get; set;}. Студент может добавлять в класс свойства, но их не может быть меньше, чем указано в задании. Разрабатываемое приложение должно обрабатывать не менее шести запросов. Запросы выполняются в форме LINQ to Objects. Тексты запросов на русском языке должны представляться на экране в виде списка, и каждый из запросов может быть выбран посредством выбора номера его позиции в списке. После выполнения запроса на экран снова выводится список для выбора другого запроса. Одна из позиций в списке должна обеспечивать «нормальный» выход из программы. Отчет студент предоставляет в электронной форме в виде папки, имя которой содержит номер задания и фамилию студента. В папке представляется консольное приложение, на котором студент демонстрирует работоспособность разработанной программы, и имеется текстовый файл с описанием курсовой работы и содержащий: титульный лист; текст задания; текст программы; пояснения к программе; файлы для инициализации списков. 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; } // Название магазина 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 класса, соответственно измените имена классов, пути к файлам, объявления списков и количество полей в классах). Метод оформлен для формирования 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]))); // Второй список } 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; } 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"); 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 следуют за максимальным индексом первого массива). 13 Инициализация списка с элементами, содержащими массив, приведена ниже. static List<AZS> az = new List<AZS>() // Объявление пустого списка { new AZS("Роснефть", "98","","92"), // Первый элемент списка new AZS("ТНК", "98","95",""), // Второй элемент списка }; // Точка с запятой здесь обязательна ПРИМЕРЫ ЗАПРОСОВ Сохранять результаты запросов не требуется. После реализации каждого запроса его данные выводятся на экран. После просмотра выполняется стирание экрана, и информация будет восстановлена при последующем запросе. Ниже для справки приведены наиболее распространенные запросы LINQ. Сортировка, проекция, фильтрация В примерах запросов: lst обобщенный список для класса Vegetable (см. выше). 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. 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. 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; // Проверить, равны ли свойства товаров 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(); В данном примере удаляются элементы, у которых совпадает название и цена. Объединение и группировка коллекций При объединении коллекций с данными пользователя возможно как внутреннее, так и внешнее объединение. Для объединения таблиц должен быть выбран ключ. При внутреннем объединении каждой строке в одной таблице строго соответствует одна строка в другой таблице. Внешнее левое объединение позволяет собрать новую таблицу из столбцов так, что в новой таблице повторяются строки из одной таблицы с одинаковым значением ключа в другой таблице. Если после объединения выполнить группировку (по повторяющимся строкам), получается аналог отношения «один ко многим». Ниже приведен пример левого внешнего объединения. См. скриншот. 17 (Правое внешнее объединение (отношение многие к одному) не рассматривается). Ниже приведен пример объединения двух классов (Shop и Vegetable) по ключам 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) // Цикл вывода списка группы 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. 19 ЗАДАНИЯ НА КУРСОВЫЕ РАБОТЫ Задания на курсовые работы по дисциплине «Объектно-ориентированное программирование» реализуются в форме консольных приложений в среде Visual Studio на языке C#. Обобщенные списки и коллекции являются локальными. Они формируются из файлов, реализованных в приложении «Блокнот». Задание № 1 (Гостиница) Требуется разработать программную систему, предназначенную для администратора гостиницы. Такая система должна обеспечивать хранение сведений об имеющихся в гостинице номерах, о проживающих в гостинице клиентах и о служащих, убирающих в номерах. Количество номеров в гостинице известно, и имеются номера трех типов: одноместный, двухместный и трехместный, отличающиеся стоимостью проживания за сутки. Клиенту предоставляется место в номере. Оплата за место составляет долю от стоимости номера в зависимости от количества мест. Номер оплачивается по прибытии. Служащий гостиницы убирает все номера на одном этаже в определенные дни недели, при этом в разные дни он может убирать разные этажи. Гостиница Номер Этаж Тип номера Стоимость в сутки Список клиентов Список служащих Клиент Ключ ФИО № паспорта Откуда Номер Место Когда прибыл Оплата (суток) Служащий Ключ ФИО Список этажей Список дней недели Должны быть созданы обобщенные списки: • Сведения о гостинице. • Сведения о клиентах. • Сведения о служащих. 20 Должны быть реализованы следующие запросы: • Стоимость места для заданного этажа и номера. • Список клиентов, прибывших из заданного города. • Кто из служащих убирал номер указанного клиента в заданный день недели. • Сколько в гостинице свободных мест и свободных номеров. • Клиенты, проживающие в одноместных номерах. • Общая сумма, выплаченная всеми клиентами. Администратор должен иметь возможность (используя запросы LINQ) выполнить следующую операцию: • Принять на работу или уволить служащего гостиницы (удалить из списка). Задание № 2 (Библиотека) Требуется разработать программную систему, предназначенную для работников библиотеки. Такая система должна обеспечивать хранение сведений об имеющихся в библиотеке книгах, о читателях библиотеки и читальных залах. Библиотека имеет несколько читальных залов, которые характеризуются номером, специализацией и количеством мест. Читатели закрепляются за определенным залом (Общий, Физико-Математический и т. д.) и могут записываться и выписываться из библиотеки. Один читатель может взять несколько книг. Шифр книги задается при получении новой книги, а номер читательского билета задается при регистрации. Книга Ключ Название Автор Год издания Шифр книги Дата выдачи Дата получения Кол-во экземпляров Читатель Ключ ФИО № билета Дата рождения Телефон Образование Зал Список книг Зал Ключ Название библиотеки Зал Специализация Количество мест Список читателей 21 Должны быть созданы обобщенные списки: • Сведения о книгах. • Сведения о читателях. • Сведения о читальных залах. Библиотекарю могут потребоваться следующие сведения о текущем состоянии библиотеки: • Какие книги выданы каждому читателю. • Сколько свободных мест в каждом зале. • Можно ли выдать книгу читателю (есть свободные экземпляры). • Количество книг заданного автора в читальном зале. • Читатели, взявшие книги, имеющиеся в одном экземпляре. • Книги с максимальным рейтингом. Библиотекарь может выполнять следующие операции: • Записать в библиотеку нового читателя. • Списать старую или потерянную книгу. • Принять книгу в фонд библиотеки. Задание № 3 (Школа) Требуется разработать программную систему, предназначенную для завуча школы. Она должна обеспечивать хранение сведений о каждом учителе, о предметах, которые он преподает, номере закрепленного за ним кабинета. Об учениках должны храниться следующие сведения: фамилия и имя, в каком классе учится, какую оценку имеет в текущей четверти по каждому предмету. Завуч должен иметь возможность добавить сведения о новом учителе или ученике, внести в базу данных четвертные оценки учеников каждого класса по каждому предмету, удалить данные об уволившемся учителе и отчисленном из школы ученике. Учитель Ключ ФИО Предмет № кабинета Ученик Ключ Ученик Класс Успеваемость Ключ Ученик Предмет 1 Предмет 2 Предмет 3 22 Успеваемость задается числами от 2 до 5. Количество предметов может быть увеличено. Должны быть созданы обобщенные списки: • Сведения об учителях. • Сведения об учениках. • Сведения об успеваемости. Завучу могут потребоваться следующие сведения о текущем состоянии успеваемости: • Успеваемость по заданному предмету. • Количество неуспевающих учеников по всем классам. • У какого учителя самая низкая успеваемость. • Средняя оценка по всем предметам в каждом классе. • Класс с самой высокой успеваемостью по всем предметам. • Класс с самой низкой успеваемостью по всем предметам. Завуч может выполнять следующие операции: • Записать в школу нового ученика. • Отчислить из школы ученика. Задание № 4 (Выставка собак) Требуется разработать программную систему, предназначенную для организаторов выставки собак. Она должна обеспечивать хранение сведений о собаках – участниках выставки и экспертах. Для каждой собаки должны храниться сведения о том, к какому клубу она относится, кличка, порода и возраст, сведения о родословной (номер документа, клички родителей), дата последней прививки, фамилия, имя, отчество и паспортные данные хозяина. Сведения об эксперте должны включать фамилию и имя, специализацию по породе, номер ринга, который он обслуживает; клуб, название клуба, в котором он состоит. Каждый ринг имеет специализацию по породам, и его могут обслуживать несколько экспертов. Каждая порода собак выступает на своем ринге, но на одном и том же ринге в разное время могут выступать разные породы. Итогом выставки является определение медалистов по каждой породе. Организатор выставки должен иметь возмож- 23 ность добавить в базу нового участника или нового эксперта, снять эксперта с судейства, заменив его другим, отстранить собаку от участия в выставке. Собака Ключ Кличка Порода Возраст Клуб ФИО хозяина Место (медаль) Ринг Ключ Номер (название) Адрес Массив специализаций Клуб Список экспертов (ключ) Список собак (ключ) Эксперт Ключ ФИО Специализация № ринга Клуб Должны быть созданы обобщенные списки: • Сведения о собаках. • Сведения о рингах. • Сведения об экспертах. Организатору выставки могут потребоваться следующие сведения: • На каком ринге выступает заданный хозяин со своей собакой. • Какими породами представлен заданный клуб. • Какие медали и сколько заслужены клубом. • Какие эксперты обслуживают породу. • Распределение специализаций по рингам. • Рекордсмены по породам по количеству медалей. Председатель клуба может выполнять следующие операции: • Принять в клуб новую собаку. • Отстранить от соревнований собаку. • Принять в клуб нового эксперта. • Уволить из клуба эксперта. Задание № 5 (Прием в вуз) Требуется разработать программную систему, предназначенную для работников приемной комиссии высшего учебного заведения. Она должна обеспечивать хранение, просмотр и изменение сведений об абитуриентах, а также о расписании экзаменов и консультаций. Ре- 24 зультатом работы приемной комиссии должен быть список абитуриентов, зачисленных в институт. Специальность задается названием кафедры и факультета, на которые поступает абитуриент. При регистрации абитуриенту выдают экзаменационный лист. Абитуриенты на период вступительных экзаменов объединяются в группы. Каждая группа сдает по три экзамена, по которым формируется экзаменационная ведомость. Для каждого потока формируется расписание консультаций и экзаменов по предметам. Медалистам засчитывают все экзамены. Известно количество мест по каждой кафедре. Приемная комиссия по результатам экзаменов должна сформировать списки абитуриентов, зачисленных в институт. Для вычисления проходного балла переписывают абитуриента в список зачисленных из списка результатов экзамена, отсортированного по убыванию оценок, пока не будет достигнуто количество имеющихся мест по выбранной кафедре. Абитуриент Ключ Абитуриент ФИО Группа Окончил Медаль Кафедра Факультет Экз. лист Ключ ФИО Предмет 1 Предмет 2 Предмет 3 Экзамены Ключ Расписание Группа Экзамен/Консультация Число Время Аудитория Должны быть созданы обобщенные списки: • Сведения об абитуриентах. • Сведения о расписании. • Сведения об экзаменах. • Массив мест по кафедрам. Секретарю приемной комиссии могут потребоваться следующие сведения: • Список абитуриентов по группам с учетом кафедры. • Проходной балл по всем специальностям. 25 • Консультация и экзамен по заданному предмету. • Списки зачисленных абитуриентов. • Конкурс на каждую специальность. • Списки абитуриентов, не прошедших по конкурсу. • Кафедры, по которым был недобор абитуриентов. Необходимо также предусмотреть возможность получения документа, представляющего собой сгруппированные по кафедрам списки абитуриентов, зачисленных в институт, с указанием набранных ими баллов по каждому предмету. Отчет должен содержать проходной балл по каждой кафедре, факультету и по институту в целом, а также количество абитуриентов, поступающих на кафедру и в институт. Задание № 6 (Почта) Требуется разработать программную систему, позволяющую отслеживать распределение по почтовым отделениям газет, печатающихся в типографиях города. Система должна обеспечивать хранение, просмотр и изменение сведений о газетах, почтовых отделениях, получающих газеты и о типографиях, выпускающих газеты. Сведения о газетах включают в себя: название газеты, индекс издания, фамилию, имя и отчество редактора, цену экземпляра газеты. Цены могут меняться. Возможно появление новых газет и изменение индекса существующего издания. Для типографий указываются их названия и адреса. В типографии разными тиражами печатаются газеты нескольких наименований. Почтовое отделение имеет номер и адрес. На каждое почтовое отделение поступают в определенных количествах газеты разных наименований, причем часть экземпляров одной и той же газеты может быть напечатана в одной типографии, а часть в другой. Газета Ключ Название Индекс Редактор Тираж Цена Типография Ключ Название Адрес Список газет Почта Ключ Номер Адрес Список газет Список типографий 26 Должны быть созданы обобщенные списки: • Сведения о газетах. • Сведения о типографиях. • Сведения о почтовых отделениях. Пользователям системы может потребоваться следующая информация: • В каких типографиях печатаются газеты данного наименования. • Фамилия редактора газеты, которая печатается в указанной типографии самым большим тиражом. • Какова общая стоимость тиража заданной газеты. • В какое почтовое отделение поступает больше всего газет. • В какие почтовые отделения поступает данная газета, печатающаяся в заданной типографии. • В каком почтовом отделении максимальная стоимость получаемых газет. Должна быть предусмотрена возможность добавления новой газеты, удаления газеты и изменения ее индекса. Задание № 7 (Птицефабрика) Требуется разработать программную систему, ориентированную на администрацию птицефабрики и позволяющую работать с информацией о работниках фабрики и об имеющихся на ней курах. О каждой курице должна храниться следующая информация: вес, возраст, количество ежемесячно получаемых от курицы яиц, а также информация о местонахождении курицы. На птицефабрике за каждой курицей закреплена отдельная клетка. О работниках птицефабрики в БД должна храниться следующая информация: паспортные данные, зарплата, закрепленные за работником клетки. Не должно быть кур, не обслуживаемых ни одним работником. Количество кур может изменяться как в бóльшую, так и в меньшую сторону, в отдельные моменты времени часть клеток может пустовать. Цена яиц одинакова для всех кур. В качестве дат применять дни одного месяца. 27 Курица Ключ Клетка Возраст Вес Яйценоскость Порода Птицефабрика № Клетка Дата Яйцо снесено? Работник ФИО Клетки (ключ) Зарплата Должны быть созданы обобщенные списки: • Сведения о курах. • Сведения о птицефабрике. • Сведения о работниках. Директору могут потребоваться следующие сведения: • Среднее количество яиц, получаемое от каждой курицы данного веса и возраста. • Общее количество полученных яиц за диапазон дат и их суммарная стоимость. • Количество яиц, собранных каждым работником. • Куры, снесшие количество яиц ниже средней яйценоскости по фабрике. • В какой клетке находится курица, от которой получили больше всего яиц. • Какое количество кур обслуживает каждый работник. Должна быть предусмотрена возможность добавления и удаления курицы. Задание № 8 (Продмаг) Требуется разработать программную систему, предназначенную для директора продовольственного магазина. Такая система должна обеспечивать хранение сведений о магазине, об имеющихся в нем товарах, отделах и продажах. Каждый отдел специализирован на продажу определенного вида товаров (кондитерский, гастроном, бакалея и т. д.). Товары характеризуются ценой и сортом. По каждому товару задается количество проданных единиц и оставшееся наличие. 28 Товар Ключ Название Отдел Сорт Цена Отдел Ключ Название Товар Продажи Ключ Товар В наличии Продано Должны быть созданы обобщенные списки: • Сведения о товарах. • Сведения об отделах. • Сведения о продажах. Директору могут потребоваться следующие сведения: • Список товаров в магазине по отделам. • Какие товары по отделам отсутствуют. • Отделы с максимальной и минимальной прибылью. • Продажа товаров по отделам. • Какой товар дал максимальную прибыль по магазину. • Стоимость товаров для пополнения. Необходимо предусмотреть возможность добавления, удаление и изменение товара. Задание № 9 (Автобусный парк) Требуется разработать программную систему, предназначенную для диспетчера автобусного парка. Такая система должна обеспечивать хранение сведений о водителях, о маршрутах и характеристиках автобусов. Каждый водитель характеризуется паспортными данными, классом, стажем работы и окладом, причем оклад зависит от класса и стажа работы. Маршрут автобуса характеризуется номером маршрута, названием начального и конечного пункта движения, временем начала и конца движения, интервалом движения и протяженностью в минутах (время движения по всему маршруту). Характеристиками автобуса являются: его тип, вместимость и государственный номерной знак. Каждый водитель закреплен за отдельным автобусом и работает на опре- 29 деленном маршруте, но в случае поломки своего автобуса или болезни другого водителя может пересесть на другую машину. В базе должен храниться график работы водителей в виде массива дней выхода на работу. Необходимо предусмотреть возможность корректировки списков в случаях поступления на работу нового водителя, списания старого автобуса, введения нового маршрута или изменения старого и т.п. Водитель Ключ ФИО Стаж Класс Оклад Маршрут График Маршрут Ключ № Начало Конец Время отправления Время прибытия Автобус (гос. номер) Водитель (ключ) Автобус Ключ Гос. номер Тип Вместимость Исправен Должны быть созданы обобщенные списки: • Сведения о водителях. • Сведения о маршрутах. • Сведения об автобусах. График задается вложенным массивом, содержащим номера дней недели. Диспетчеру автопарка могут потребоваться следующие сведения: • Список водителей, работающих на определенном маршруте с указанием графика их работы. • Какие автобусы обслуживают данный маршрут. • Протяженность маршрутов и их минимальная и максимальная протяженность. • На каком маршруте работает водитель с максимальным стажем. • Какова общая протяженность маршрутов, обслуживаемых автопарком. • Какие водители не вышли на линию по причине неисправности автобуса. 30 Директор автопарка должен иметь возможность добавить водителя или автобус и удалить водителя или автобус. Задание № 10 (Кинотеатры) Требуется разработать программную систему, предназначенную для работников справочной службы кинотеатров города. Такая система должна обеспечивать хранение сведений о кинотеатрах города, о фильмах, которые в них демонстрируются, о сеансах и билетах на эти сеансы. На разных сеансах в одном кинотеатре могут идти разные фильмы, а если в кинотеатре несколько залов, то и на одном. Кинотеатр Ключ Название Адрес Категория Кол. мест Кол. залов Состояние Фильм Ключ Название Режиссер Оператор Список актеров Жанр Киностудия Репертуар Ключ Дата Сеанс Цена Свободных мест Должны быть созданы обобщенные списки: • Сведения о кинотеатрах. • Сведения о фильмах. • Сведения о репертуаре. Справочной службе могут потребоваться следующие сведения о текущем состоянии проката фильмов в городе: • Репертуар кинотеатра. • В каких кинотеатрах можно посмотреть боевики. • Число свободных мест на данный сеанс в заданном кинотеатре. • Цена билетов на заданный сеанс в указанном кинотеатре. • Какие фильмы заданного режиссера демонстрируются в кинотеатрах. • В каких кинотеатрах демонстрируются комедии. Должна быть предусмотрена возможность добавления и удаления фильма. 31 Задание № 11 (Футбол) Требуется разработать программную систему, предназначенную для организаторов соревнований по футболу в рамках первенства страны. Такая система должна обеспечивать хранение сведений о командах, участвующих в первенстве, об игроках команд, о расписании встреч и их результатах, о цене билетов на игры. Сведения о команде: название команды, город, где она базируется, имя главного тренера, место в таблице прошлого сезона, расписание встреч. В один день команда может участвовать только в одной встрече. Сведения об игроке включают в себя фамилию и имя игрока, его возраст, номер и амплуа в команде. Сведения о стадионе, на котором происходит встреча, содержат город, в котором он находится, название стадиона, и его вместимость. Цена билета на матч зависит от вместимости стадиона и положения встречающихся команд в турнирной таблице прошлого сезона (наибольшая при игре тройки призеров, наименьшая при игре тройки аутсайдеров). Организаторы соревнований должны иметь возможность внести изменения в данные о составе команд, перенести встречу. Команда Название Город Тренер Место в рейтинге Игроки Стадионы Игрок Ключ ФИО Возраст Амплуа № Стадион Ключ Название Город Вместимость Цена билета Матчи Ключ Команда Дата Счет Должны быть созданы обобщенные списки: • Сведения об игроках. • Сведения о команде. • Сведения о стадионе. • Сведения о матчах. Должны быть реализованы следующие запросы: • Даты встреч указанной команды, ее противники и счет. 32 • Номера и фамилии игроков команд, участвовавших во встрече, которая проходила в указанный день на стадионе. • Цена билета на матч между указанными командами. • Команды, имеющие наилучшую и наихудшую разницу забитых и пропущенных мячей. • Команды, занявшие призовые места. • Расписание игр по стадионам. Должна быть предусмотрена возможность добавления и удаления игроков и матчей. Задание № 12 (Институт) Требуется разработать программную систему, предназначенную для работника методического отдела института. Такая система должна обеспечивать хранение сведений о специальностях, по которым ведет подготовку кафедра, о дисциплинах, входящих в перечень подготовки по каждой специальности. Сведения о специальности: это код и название специальности, присваиваемая квалификация и форма обучения (дневная, вечерняя, заочная). Сведения о кафедре включают ее название, телефон (телефоны), факультет, к которому относится кафедра. Сведения о дисциплине это название дисциплины, в каком семестре (семестрах) и для каких специальностей она читается, структура занятий (сколько часов для каждой специальности отводится на лекции, лабораторные и практические занятия по этой дисциплине, виды отчетности (зачет, экзамен, курсовая работа). Специальность Ключ Название Специальность Форма обучения Кафедра Название Факультет Телефон Специальности Дисциплина Название Семестр Часы Структура Отчетность Должны быть созданы обобщенные списки: • Сведения о специальности. 33 • Сведения о кафедрах. • Сведения о дисциплине. Структура дисциплины задается вложенным массивом, содержащим три значения (количество часов в неделю: лекции, семинары, лабораторные работы, например, 2, 1, 4). Сотруднику методического отдела могут потребоваться следующие сведения: • Список дисциплин для заданной специальности. • Количество часов лабораторных работ для заданной специальности. • Семестровая нагрузка кафедры по специальности. • Дисциплины, по которым ведет занятия кафедра. • Дисциплины с минимальной и максимальной продолжительностью занятий. • Общее количество экзаменов и зачетов по кафедрам (включая курсовую работу). Должна быть предусмотрена возможность добавления или удаления специальности. Задание № 13 (Деканат) Требуется разработать программную систему, предназначенную для работника деканата. Такая система должна обеспечивать хранение сведений о группах и студентах, а также о результатах текущей сессии. Студент Ключ ФИО № зачетки Адрес Стипендия Группа Ключ Факультет Группа Специальность Кафедра Предмет Ключ Весенняя/Зимняя Название Отчетность (зачет, экз.) Оценка Должны быть созданы обобщенные списки: • Сведения о студенте. 34 • Сведения о группе. • Сведения о предмете. Работнику деканата могут потребоваться следующие сведения: • Средний балл студентов по каждой группе указанного факультета. • Средний балл по каждому предмету. • Группа с максимальным средним баллом по заданному предмету. • Список по факультетам студентов, подлежащих отчислению (не сдано более двух предметов). • По какому предмету больше всего неудовлетворительных оценок. Должна быть предусмотрена возможность добавления и отчисления студента. Задание № 14 (Поликлиника) Требуется разработать программную систему, предназначенную для врачей и работников регистратуры поликлиники. Такая система должна хранить сведения об участках, которые относятся к поликлинике, о расписании работы участковых врачей, информацию о врачах, а также карточки пациентов. Карточка имеет номер, в нее заносятся сведения о каждом посещении поликлиники пациентом: дата посещения, жалобы, предварительный диагноз, назначения, выписан или нет больничный лист, и если выписан, то на какой срок, имя врача. В карточке на первой странице указаны также фамилия, имя, отчество пациента, его домашний адрес, пол и возраст, номер страхового полиса, дата заполнения карточки. В расписании работы врачей указывается, на каком участке работает врач, дни и часы приема, номер кабинета. Врач может обслуживать более одного участка. В случае увольнения врача его участок передается другим врачам. Данные о враче, которые хранятся в БД, это фамилия, имя отчество, категория, стаж работы, дата рождения. В карточку больного при каждом его посещении поликлиники врачом заносится очередная запись. Работники регист- 35 ратуры регистрируют пациента, заполняя первую страницу его карточки. При увольнении врача его больных передают другому врачу. Участок Ключ Название Адрес Пациент Ключ ФИО Адрес Пол Возраст № полиса Дата посещения Жалоба Диагноз № полиса Медработник Ключ ФИО Категория Стаж Возраст Специализация Участок Расписание Кабинет Расписание приема Должны быть созданы обобщенные списки: • Сведения об участках. • Карточки пациентов. • Сведения о врачах. «Расписание» приема задается в виде массива дней недели (не более трех раз в неделю). Даты задаются в пределах дней одного месяца. Работникам поликлиники могут потребоваться следующие сведения: • Списки пациентов, обслуживаемых данным врачом. • Сколько медсестер на каждом участке. • Расписание приема всех врачей заданной специализации. • Адрес данного больного, дата последнего посещения поликлиники и диагноз. • Фамилия и инициалы лечащего врача данного больного. • Какое количество больных обслужил за прошедший месяц каждый из врачей поликлиники. Должна быть предусмотрена возможность увольнения врача и добавления врача. 36 Задание № 15 (СТО) Требуется разработать программную систему, предназначенную для диспетчера станции техобслуживания. Такая система должна обеспечивать хранение сведений об услугах, оказываемых станцией и их стоимости, о клиентах станции, о работниках станции и об автомобилях, которые они ремонтируют в текущий момент. Клиент станции это человек, который хотя бы раз воспользовался услугами станции. О клиенте должны храниться сведения с указанием автомобилей, которые он сдавал в ремонт. После возвращения автомобиля клиенту данные о произведенном ремонте помещаются в архив, клиент получает счет, в котором содержится перечень устраненных неисправностей с указанием времени работы, стоимости работы и стоимости запчастей. Владелец Ключ ФИО № паспорта Адрес Возраст Марка авто Дата обращения Дата получения Автомобиль Ключ Марка Цвет Год выпуска Гос. номер Работник Ключ ФИО Специальность Разряд Список дефектов Дата Цена работы Цена запчастей Должны быть созданы обобщенные списки: • Сведения о владельцах автомобилей. • Сведения об автомобилях. • Сведения о работниках. Список дефектов может быть представлен в виде вложенного массива с номерами неисправностей. Диспетчеру могут потребоваться следующие сведения: • Кто обслуживал владельца заданного автомобиля. • Марка и год выпуска автомобиля данного владельца. • Перечень устраненных неисправностей в автомобиле данного владельца и их стоимость. 37 • Владельцы, сдавшие в ремонт автомобили с указанным типом неисправности. • Самая распространенная неисправность в автомобилях указанной марки. • Работник с максимальной выработкой. Должна быть предусмотрена возможность добавления автомобиля (для заданного клиента) и удаления клиента. Задание № 16 (Менеджер музыкальных групп) Требуется разработать программную систему, предназначенную для менеджера музыкальных групп. Такая система должна обеспечивать хранение сведений о группах, включающих название группы, год образования и страну, состав исполнителей, положение в последнем хит-параде; репертуар группы. Сведения о каждой песне из репертуара группы это ее название, композитор, автор текста. Необходимо также хранить данные о последней гастрольной поездке каждой группы: название гастрольной программы, названия населенных пунктов, дата начала и окончания выступлений, средняя цена билета (зависит от места выступления и положения группы в хит-параде). Группа Ключ Название Год создания Страна Репертуар Рейтинг Песня Ключ Название Композитор Автор текста Год создания Певец Гастроль Ключ Город Дата начала Дата конца Должны быть созданы обобщенные списки: • Сведения о группах. • Сведения о песнях. • Сведения о гастролях. Дата задается в пределах одного месяца. Менеджеру могут потребоваться следующие сведения: • Какие песни исполнялись на гастролях заданной группы. 38 • Какие группы исполняют песни заданного композитора. • Автор текста, композитор и дата создания песни с данным названием. В репертуар какой группы она входит. • Репертуар наиболее популярной группы. • Место и продолжительность гастролей группы с заданным названием. • Какие песни исполняет заданный певец. Должна быть предусмотрена возможность добавления и удаления песен в заданную группу. Задание № 17 (Архив) Требуется разработать программную систему, предназначенную для работников технического архива предприятия. Технический архив содержит стеллажи, полки и ячейки, в которых хранится документация. Ячейка архива может быть пустой или хранить все экземпляры одного документа. Каждый экземпляр документации имеет инвентарный номер и название. В базе данных должна храниться следующая информация о каждом документе архива: номер стеллажа, номер полки, номер ячейки, где хранится документ, название документа и название темы, к которой он относится, его инвентарный номер, количество экземпляров документа, содержащихся в ячейке, дата поступления документа в архив. Документ может быть востребован абонентом архива. Работники архива, выдавая документ абоненту, фиксируют, когда и кому он выдан. Архив Ключ Стеллаж Полка Ячейка Код ячейки Заполнение Абонент Ключ ФИО Отдел Телефон Дата получения Документ Ключ Название Тема Инвентарный № Код ячейки Количество Дата поступления Даты выдачи (список) 39 Должны быть созданы обобщенные списки: • Сведения об архиве. • Сведения об абонентах. • Сведения о документах. Дата задается днем в пределах одного месяца, даты выдачи (в количестве до 4) оформлены в виде вложенного массива. Работнику архива могут потребоваться следующие сведения: • В каких ячейках хранятся востребованные абонентом документы. • Кто из абонентов получил документы на заданную тему. • Максимально заполненная ячейка. • Абонент, который брал указанный документ последним. • Есть ли в архиве пустые стеллажи, полки, ячейки, и в каком количестве. • Список документов, не востребованных в течение заданного срока. Должна быть предусмотрена возможность добавления и удаления документа в заданную ячейку. Задание № 18 (Турфирма) Требуется разработать программную систему, предназначенную для работников туристической фирмы. Такая система должна обеспечивать хранение сведений об имеющихся в продаже путевках и о клиентах фирмы. Сведения о путевке включают ее стоимость, время отправления (начало) и возвращения, экскурсии и прочие услуги, например, в стоимость путевки полностью или частично может входить питание. Путевка предполагает посещение одного населенного пункта. Туристическая фирма продает стандартные путевки. Клиент может высказать свои пожелания относительно сроков поездки, ее стоимости, город, который он хотел бы посетить. Каждый клиент покупает одну путевку. Для постоянных клиентов существует система скидок. Фирма ведет также журнал о продаже путевок (дата, какие путевки проданы, в каком количестве). 40 Клиент Путевка Продажа Ключ Ключ Ключ ФИО Название ФИО сотрудника Телефон Начало Название путевки № паспорта Конец Количество продаж Скидка Город В наличии путевок Услуги Текущая дата Цена Должны быть созданы обобщенные списки: • Сведения о клиентах. • Сведения о путевках. • Сведения о продаже путевок. Дата задается днем в пределах одного месяца. Работнику туристической фирмы могут потребоваться следующие данные: • Кто из клиентов выбрал заданный город. • Есть ли путевки с заданной датой начала. • Какие путевки являются «горящими», то есть дата отправления, указанная в них, не более, чем на 5 дней больше текущей. • Сколько теряет фирма из-за скидок для постоянных клиентов. • Что представляет собой самая дорогая путевка из имеющихся в продаже на текущий день. • Какие путевки пользуются наибольшим спросом. Должна быть предусмотрена возможность добавления и удаления клиентов для заданной путевки. Задание № 19 (Аптека) Требуется разработать программную систему, предназначенную для директора аптеки. Такая система должна обеспечивать хранение сведений об аптеке, об имеющихся в ней товарах, о поставщиках и товарах, ими поставляемых. Аптека осуществляет закупку товаров у различных поставщиков, предпочитая при этом закупать одни виды 41 товара у одних поставщиков, а другие у других. Предпочтение поставщика задается цифрой (1, 2 или 3). Список товаров у поставщика содержит имеющееся количество. Товары, имеющиеся в аптеке, характеризуются наименованием, ценой, фасовкой (5 мг, 10 мг и т. д.), сроком годности и количеством. Директор аптеки закупает недостающие товары у поставщиков и списывает просроченные товары. Аптека Товар Поставщик Ключ Ключ Ключ Название Название Название Текущая дата Массив фасовок Товар Поставщик Цена Товар Поставщик Количество Срок годности Желаемый поставщик Должны быть созданы обобщенные списки: • Сведения об аптеке. • Сведения о товарах. • Сведения о поставщиках. Фасовка задается в виде вложенного массива. Директору могут потребоваться следующие сведения: • Какие товары и в каком количестве имеются в каждой аптеке. • У каких товаров и в каких аптеках закончился срок годности товара. • Какие товары можно заказать у поставщиков. • Суммарная стоимость товаров в аптеке. • У каких поставщиков и в каком количестве есть товар нужного наименования. • У какого поставщика имеется товар с заданной фасовкой. Должна быть предусмотрена возможность добавления и удаления товара в заданную аптеку. 42 Задание № 20 (Приборы) Требуется разработать программную систему, предназначенную для отдела метрологического обеспечения предприятия. Такая система должна обеспечивать хранение сведений о всех имеющихся измерительных приборах, которые принимаются на учет и закрепляются за конкретным структурным подразделением, имеющим профиль работ (биология, химия, производство и т. д.). При постановке на учет каждому прибору присваивается свой индивидуальный номер. Каждый измерительный прибор характеризуется наименованием, назначением и др. метрологическими характеристиками, а также стоимостью. Каждый прибор может быть поставлен подразделением на консервацию, поверяться (только рабочие), ремонтироваться или списан. При поверке приборам устанавливается дата следующей поверки, а по ее окончании фиксируется дата поверки, № свидетельства о поверке, наименование организации, осуществляющей поверку, выводы по годности (годен, не годен), стоимость поверки. Списание прибора осуществляется по результатам поверки. Прибор Ключ Название Инвентарный № Профиль Стоимость Состояние Дата поверки Подразделение Ключ Наименование Профиль Текущая дата Поверка Ключ Организация Прибор Инвентарный № Дата Результат Дата поверки Должны быть созданы обобщенные списки: • Сведения о приборе. • Сведения о закреплении приборов за подразделениями. • Сведения о ремонте. Отделу метрологического обеспечения могут потребоваться следующие сведения: • Какие приборы какого профиля и в каком количестве имеются в подразделении. 43 • Какие приборы, имеющиеся в подразделении, находятся на консервации и на поверке. • Какие приборы были списаны. • Каким приборам (по подразделениям) необходимо пройти поверку (оставшийся срок меньше 5 дней). • Какие организации осуществляют поверку приборов заданного профиля. • У каких приборов наступил срок очередной поверки. Должна быть предусмотрена возможность добавления и удаления прибора. Задание № 21 (Хлебозавод) Требуется разработать программную систему, предназначенную для обработки данных о хлебозаводах. Такая система должна обеспечивать хранение сведений о производимых изделиях и их стоимости. Сведения о производимых изделиях включают в себя: наименование изделия, объем производства, дату производства, срок годности, ингредиенты, отпускную цену. Каждый состав характеризуется наименованием, количеством, датой поставки, сроком годности. Состав изделия содержит список возможных ингредиентов: вода, мука пшеничная, мука ржаная, отруби, сахар, масло подсолнечное, соль, дрожжи, добавки. В составе могут отсутствовать некоторые ингредиенты (сахар, масло). Хлебозавод Ключ Название Дата производства Текущая дата Изделие Ключ Название Вес изделия Срок годности Объем производства Цена Состав Ключ Ингредиент 1 Ингредиент 2 Ингредиент 3 Ингредиент 4 Ингредиент 5 Ингредиент 6 Вес Дата поставки Срок годности 44 Должны быть созданы обобщенные списки: • Сведения о хлебозаводе. • Сведения об изделии. • Сведения о складе. Руководству комбината могут понадобиться следующие сведения: • Какие изделия выпускает заданный хлебозавод. • Какова суммарная стоимость всех изделий, выпускаемых заданным хлебозаводом. • Не было ли изделий, производство которых было выполнено после истечения срока какого-либо ингредиента. • Отсортировать хлебозаводы в порядке убывания объема производства. • В каком изделии больше всего ингредиентов. • Какое изделие обеспечит при реализации максимальную прибыль. Должна быть предусмотрена возможность добавления и удаления изделия для заданного хлебозавода. Задание № 22 (Судоходная компания) База данных судоходной компании содержит сведения о рейсах пассажирских судов, датах и времени отплытия, числе пассажиров на рейсе, о названиях судов, их вместимости и номерах выполняемых рейсов, о портах, в которые заходит судно при выполнении рейса, о времени стоянок в портах и т. д. Один рейс может обслуживать несколько судов. Система должна обеспечивать поиск и выдачу сведений по различным запросам. Дата задается в пределах одного месяца. Разработать информационную систему для судоходной компании. Должны быть созданы обобщенные списки: • Сведения о судах. • Сведения о рейсах. • Сведения о компаниях. 45 Судно Ключ Название Тип Количество мест Рейс Ключ Номер Дата Судно Стоянки Время отплытия Стоимость Стоянка Ключ Порт Время прибытия Время стоянки Занято мест Менеджеру компании могут понадобиться следующие сведения: • Расписание рейсов по датам. • Самый дорогой рейс. • Рейс, обслуживаемый максимальным количеством судов. • Самые незагруженные рейсы (дата, количество пассажиров). • Заданный рейс с перечислением посещаемых портов и времен стоянки. • В каких портах самые длительные стоянки. Необходимо предусмотреть возможность выдачи документа, представляющего отчет о выполненных рейсах; отчет о прибылях. Задание № 23 (Магазин музыкальных записей) Разработать информационную систему для магазина аудио- и видеозаписей. Магазин музыкальных и видеозаписей ведет для покупателей каталог имеющихся в продаже записей с указанием их розничных цен, жанра, разновидностей жанра, вида носителя записи (диск, флешка), имени (названия) исполнителя или автора, названия произведения или записи, года выпуска, производителя и т. д. Кроме того, магазин ведет внутренний учет текущих оптовых цен на записи, количества экземпляров, проданных за отдельные периоды в прошлом, числа еще не распроданных (имеющихся в наличии) экземпляров записей. В реальной ситуации также требуется вести учет заказов на отсутствующие записи, подсчет прибылей/убытков за прошедшие периоды и т. д. 46 Запись Ключ Название Жанр Исполнитель Год выпуска Фирма Вид носителя Каталог Ключ Запись Цена (розница) Носитель Магазин Ключ Список записей Цена (опт) Количество продаж Наличие Должны быть созданы обобщенные списки: • Сведения о записях. • Сведения о произведениях. • Сведения о магазинах. Должны быть реализованы следующие запросы: • Получение перечня всех записей заданного жанра. • Получение списка самых продаваемых записей. • Исполнитель самых продаваемых произведений. • Перечень отсутствующих в магазине записей. • Стоимость всех проданных записей. • Запись с максимальной разницей между розничной и оптовой ценой. Должна быть предусмотрена возможность добавления и удаления песен в заданную группу. Задание № 24 (ДТП) Требуется разработать программную систему, предназначенную для анализа дорожно-транспортных происшествий (ДТП). Такая система должна обеспечивать хранение сведений о ДТП. Для каждого ДТП должны быть сохранены: вид ДТП (наезд на пешехода, наезд на препятствие, столкновение, опрокидывание и т. д.), дата, гос. номера автомобилей (если в ДТП участвовали несколько автомобилей), данные о водителе и причина (выезд на полосу встречного движения, состояние водителя, неисправность автомобиля, нарушение ПДД и т. д.). Дата задается в пределах одного месяца. 47 Система должна хранить полную информацию о ДТП. Водитель Ключ ФИО Стаж Гос. номер авто Удостоверение Дата № акта о ДТП Автомобиль Ключ Фирма Марка Тип кузова Гос. номер авто Отдел ГИБДД Ключ Название № акта о ДТП Водитель Гос. номер авто Дата Место Кол-во пострадавших Вид ДТП Причина ДТП Должны быть созданы обобщенные списки: • Сведения о водителях. • Сведения об автомобилях. • Сведения об отделе ГИБДД. Руководству МВД могут понадобиться следующие сведения: • Список водителей, совершивших более одного ДТП. • Список водителей, участвующих в ДТП в заданном месте. • Список водителей, участвующих в ДТП на заданную дату. • ДТП с максимальным количеством потерпевших. • Список водителей, участвующих в ДТП с наездом на пешеходов. • Причины ДТП в порядке убывания их количества. Должна быть предусмотрена возможность добавления и удаления информации о ДТП. Задание № 25 (Типография) Требуется разработать программную систему, позволяющую отслеживать распределение по почтовым отделениям газет, печатающихся в типографиях города. Такая система должна обеспечивать хранение, просмотр и изменение сведений о газетах, почтовых отделениях, получающих газеты и о типографиях, выпускающих газеты. 48 Сведения о газетах включают в себя: название газеты, индекс издания, фамилию, имя и отчество редактора, цену подписки на газету. Возможно появление новых газет и изменение индекса существующего издания. Для типографий указываются их названия, адреса и максимальный тираж. В типографии разными тиражами печатаются газеты нескольких наименований. Почтовое отделение имеет номер и адрес. На каждое почтовое отделение поступают в определенных количествах газеты разных наименований, причем часть экземпляров одной и той же газеты может быть напечатана в одной типографии, а часть в другой. Газета Ключ Название Индекс Редактор Типография Тираж Цена подписки Типография Ключ Название Адрес Почта Ключ Номер Адрес Количество подписчиков Должны быть созданы обобщенные списки: • Сведения о газетах. • Сведения о типографиях. • Сведения о почтовых отделениях. Должны быть реализованы следующие запросы: • Какие типографии печатают заданную газету. • В каком почтовом отделении максимальное количество наименований газет. • Какая газета самая распространенная. • Какая газета дает максимальную прибыль. • В каких почтовых отделениях существует подписка на заданную газету. • Общий объем (в рублях) реализации газет по почтовым отделениям. 49 Должна быть предусмотрена возможность добавления, изменения и удаления газет. Задание № 26 (Бассейн) Требуется разработать программную систему, позволяющую отслеживать занятия в бассейне. Бассейны бывают спортивные, оздоровительные и комбинированные. Такая система должна обеспечивать хранение, просмотр и изменение сведений о бассейнах, тренерах, расписании занятий, группах, разновидности абонементов (количество посещений в неделю: 1, 2, 3, 5). Тренер проводит занятия только в одном бассейне. Категория группы: начинающие, подростки, взрослые и спортсмены. Бассейн Ключ Название Адрес Разновидность Тренеры Абонементы Тренер Ключ ФИО Группа Расписание Группа Ключ Номер группы Категория № абонемента Абонемент Ключ № Категория Раз в неделю Цена Должны быть созданы обобщенные списки: • Сведения о бассейнах. • Сведения о тренерах. • Сведения о группах. • Сведения об абонементах. Дни недели задаются в виде вложенного в класс «Тренер» массива констант (дней недели). Должны быть реализованы следующие запросы: • Список тренеров по бассейнам. • Итоговая прибыль каждого тренера в каждом бассейне. • Тренеры, работающие с начинающими. • Список посетителей, занимающихся с заданным тренером. • Количество групп в каждом бассейне по дням недели. 50 • Бассейн с максимальной выручкой. Должна быть предусмотрена возможность добавления и удаления группы в заданный бассейн. Задание № 27 (Автобаза) Требуется разработать программную систему, позволяющую отслеживать заправку автомобилей на разных автозаправочных станциях (АЗС). На каждой автобазе имеются автомобили разных моделей и разных типов (пикап, самосвал, седан, фура и т. д.). Автомобили заправляются разными сортами бензина (А92, А95, А98, ДТ (дизельное топливо). Автобазы имеют договора с несколькими АЗС по заправке своих автомобилей. АЗС могут быть временно закрыты (например, для слива топлива), на них могут отсутствовать некоторые сорта бензина. Система должна обеспечить получение различных справок. Автомобиль Ключ Фирма Марка Тип Государственный номер Сорт бензина АЗС Ключ Название Адрес Сорта бензина Состояние Автобаза Ключ Номер Адрес Должны быть созданы обобщенные списки: • Сведения об автомобилях. • Сведения об АЗС. • Сведения об автобазах. Сорта бензина задаются в виде массива строковых констант, пустая строка указывает на отсутствие бензина на данной АЗС. Директору автобазы может потребоваться следующая информация: • На каких АЗС можно заправить конкретный автомобиль. • Сколько автомобилей с кузовом седан заправляются дизельным топливом. • Список АЗС, на которых отсутствует заданный сорт бензина. 51 • АЗС, обслуживающая максимальное количество автомобилей. • Автомобили, заправляющиеся заданным сортом бензина. • Автобаза с максимальным количеством автомобилей. Должна быть предусмотрена возможность добавления и удаления автомобилей в заданную автобазу. Задание № 28 (Таксопарк) Требуется разработать программную систему, позволяющую отслеживать работу таксопарка. Такая система должна обеспечивать хранение, просмотр и обработку сведений об автомобилях, водителях и их работе. За каждым водителем закреплен автомобиль (задается гос. номером). На каждую дату водитель сообщает выручку. Автомобиль может находиться в аварийном состоянии (не выходит на линию), тогда выручка водителя равна нулю. По каждому таксопарку вычисляется суммарная выручка всех водителей. Дата задается в пределах одного месяца. Список дат задается в виде вложенного массива. Автомобиль Ключ Фирма Марка Тип Государственный номер Состояние Водитель Ключ ФИО № паспорта Стаж Выручка Автомобиль Список дат Таксопарк Ключ Название Адрес Должны быть созданы обобщенные списки: • Сведения об автомобилях. • Сведения о водителях. • Сведения о таксопарках. Даты задаются в виде рабочих дней водителя для одного месяца. Директору таксопарка может потребоваться следующая информация: • Какова выручка заданного водителя на заданную дату. 52 • Какова выручка всех водителей на заданную дату. • Автомобили какой марки дают максимальную прибыль. • Какие автомобили не вышли на линию по всем таксопаркам. • Автомобили какой марки чаще всего не выходят на линию. • Отсортировать водителей по итоговой выручке за итоговый период. Должна быть предусмотрена возможность добавления и удаления автомобиля в заданный таксопарк. Задание № 29 (Рыболовный траулер) Рыболовной фирме принадлежит небольшая флотилия рыболовных судов. Каждое судно имеет «паспорт», куда занесены его название, тип (обычный траулер, морозильный траулер, флагман (принимает улов с траулеров), водоизмещение и дата постройки. Фирма регистрирует каждый выход на лов, записывая название судна, фамилию капитана, даты выхода и возвращения (не больше 15 дней), а также вес пойманной рыбы отдельно по разным видам рыб. Фиксируется дата прихода на каждое место лова и дата отплытия, количество и виды выловленной рыбы (минтай, треска, навага, камбала и т. д.). Требуется вести учет и получать информацию из базы данных по различным запросам. Разработать информационную систему «Рыболовная фирма». Судно Ключ Название Тип Водоизмещение Капитан Рейс Ключ Код рейса Имя судна Место лова Дата выхода Дата возврата Вид улова Вес улова Место лова Ключ Название Дата Должны быть созданы обобщенные списки: • Сведения о судах. 53 • Сведения о выходах на лов (рейсах). • Сведения о местах лова. Должны быть реализованы следующие запросы: • Список судов и общий вес пойманной рыбы. • Судно, отловившее больше всего минтая. • Место с наиболее удачным рейсом. • Судно с максимальным уловом. • Место и дата с максимальным уловом. • В какой день на заданном месте было больше всего судов. Должна быть предусмотрена возможность добавления и удаления рейсов для заданного места лова. Задание № 30 (Марки) Разработать информационную систему «Справочник филателиста». Система должна обеспечивать хранение сведений о марках (страна, нарицательная стоимость, год выпуска, тираж, зубцовка, тема, серия, название марки, особенности, цена по каталогу), сведений о коллекционерах (страна, личные данные, контактные координаты, наличие редких марок в коллекции), сведений о собственной коллекции. Редкими считаются марки, стоимость которых больше 1000 руб. Система должна обеспечивать формирование выборок по различным условиям запросов. Марка Ключ Название (код) Тема Страна Особенности Дата выпуска Тираж Дата приобретения Цена Коллекция Ключ Владелец Коллекционеры Ключ Контакт 54 Должны быть созданы обобщенные списки: • Сведения о марках. • Сведения о коллекциях. • Сведения о коллекционерах. Должны быть реализованы следующие запросы: • Группировка коллекций по владельцам. • Группировка редких марок по коллекционерам. • Владелец самой дорогой марки. • Коллекционер с максимальным количеством редких марок. • Отсортировать список владельцев в порядке убывания стоимости коллекции. • Коллекционеры, имеющие марки, выпущенные больше 10 лет назад. Должна быть предусмотрена возможность добавления и удаления марки в заданную коллекцию. Задание № 31 (Скачки) В информационной системе хранятся данные о скачках на ипподроме: дате, времени и месте проведения каждого состязания, его названии, величине приза, кличке, масти, возрасте и других данных лошади, первой пришедшей лошади, имени ее жокея и данных владельца лошади, а также данные о лошадях и жокеях (владельцах), занявших второе и все последующие места. При этом в разных состязаниях могут участвовать одни и те же лошади и жокеи, причем жокеи могут менять лошадей, а на одной лошади могут скакать разные жокеи. Система должна обеспечивать выдачу списков и формирование выборок по различным запросам. Разработать информационную систему «Жокейские скачки». Должны быть созданы обобщенные списки: • Сведения о скачках. • Сведения о лошадях. • Сведения о жокеях. 55 Скачка Ключ Название Ипподром Дата Лошадь Ключ Кличка Масть Возраст Владелец Место Жокей Ключ ФИО Возраст Должны быть реализованы следующие запросы: • Список лошадей и жокеев, занявших призовые места на заданную дату. • Список скачек, в которых принимала участие заданная лошадь. • Список скачек, в которых принимал участие заданный жокей. • Лошадь, занявшая больше всего призовых мест. • Жокей, занявший больше всего призовых мест. • На каком ипподроме чаще всего проводились скачки. Должна быть предусмотрена возможность добавления и удаления лошади для заданного владельца. Задание № 32 (Цветы) База данных содержит сведения о типе цветов (садовый или комнатный), их характеристиках и сезоне цветения, стране, цветоводах поставщиках сорта, виде помещения для выращивания (теплица, оранжерея, открытый грунт и т. д.). Система должна обеспечивать поиск и выдачу сведений по различным запросам. Разработать информационную систему «Цветы». Цветок Ключ Название Вид Страна Сезон цветения Сорт Цена Поставщик Ключ ФИО Вид хозяйства Адрес Продавец Ключ ФИО Адрес 56 Должны быть созданы обобщенные списки: • Сведения о цветах. • Сведения о поставщиках. • Сведения о продавцах. Должны быть реализованы следующие запросы: • Списки цветов для каждого из поставщиков. • Список цветов с заданным сезоном цветения. • Список цветов, выведенных в заданной стране. • У кого можно купить заданный сорт. • Продавцы самых дорогих цветов. • Совпадающие поставщики у продавцов. Должна быть предусмотрена возможность добавления и удаления цветов для заданного поставщика. Задание № 33 (Аукцион) Аукционная фирма занимается продажей с аукционов антикварных вещей и произведений искусства. Владельцы вещей, выставляемых на аукционах, являются продавцами, а лица, приобретающие эти вещи, покупателями. Перед проведением очередного аукциона каждой из выставляемых на нем вещей присваивается уникальный номер лота. В книгах фирмы делается запись о каждом аукционе: дата, время и место его проведения, о его специфике (например: картины до 1900 г., написанные маслом). Заносятся также сведения о каждом продаваемом предмете: аукцион, на который он заявлен, номер лота, продавец, начальная (стартовая) цена, краткое словесное описание. Покупатель на одном аукционе может купить только один предмет. После аукциона служащие аукционной фирмы записывают фактическую цену, уплаченную за проданный предмет, и фиксируют данные покупателя. Разработать информационную систему «Аукционы». Должны быть созданы обобщенные списки: • Сведения о продавцах. • Сведения о покупателях. • Сведения об аукционах. 57 • Сведения о предметах для продажи. Дата задается в пределах одного месяца. Продавец Ключ ФИО № паспорта Предмет Покупатель Ключ ФИО № паспорта Предмет Аукцион Ключ Название Место Дата Лот Покупатели Продавцы Предмет Ключ Название Специфика Начальная цена Конечная цена Должны быть реализованы следующие запросы: • Какие предметы на заданную дату и на заданном аукционе выставлены на продажу. • На каком аукционе продавались предметы заданной специфики. • Предмет, имеющий максимальную разницу между начальной и конечной ценами. • На каком аукционе было продано больше всего предметов. • Покупатель самого дорогого лота. • Продавец самого дорогого лота. Должна быть предусмотрена возможность добавления и удаления предметов для заданного аукциона. Задание № 34 (Парикмахерская) Парикмахерская имеет два зала - мужской и женский. Мастера имеют специализацию по залам. Клиенты (категория) бывают постоянные, которым полагается скидка, и случайные. Услуги для мужского зала: простая стрижка, модная стрижка, ирокез и т. д. Услуги женского зала: маникюр, стрижка, укладка, косметические услуги и т. д. Должны быть созданы обобщенные списки: • Сведения о клиентах. • Сведения о мастерах. • Сведения об услугах. 58 Клиент Ключ Имя Категория Пол Мастер Ключ ФИО Специализация Разряд Вид услуги Список клиентов Дата Услуга Ключ Название Пол Цена Скидка Руководителю парикмахерского салона могут потребоваться следующие сведения: • Список клиентов, обслуженных мастерами на заданную дату. • Заработок мастера на заданную дату. • Самая распространенная услуга. • Соотношение между клиентами мужчинами и женщинами. • Количество постоянных клиентов на заданную дату. • Мастер, обслуживший больше всего клиентов. Должна быть предусмотрена возможность добавления и удаления клиентов. Задание № 35 (Фермер) Фермер производит некоторую продукцию (зерно, мясо, фрукты, овощи и т. д.). Для производства требуется удовлетворить потребности (удобрения, орудия производства, транспортные услуги, строительные услуги и т. д. Создать информационную систему для учета труда фермера. Фермер Ключ ФИО Адрес Продукция Ключ Название Количество Качество Отпускная цена Должны быть созданы обобщенные списки: • Сведения о фермерах. Потребность Ключ Название Товар/Услуга Признак Цена 59 • Сведения о производимой продукции. • Сведения о потребностях. Руководителю области могут потребоваться следующие сведения: • Какую продукцию производят фермеры области. • Что требуется каждому фермеру для производства. • Какое количество заданной продукции производят фермеры. • Прибыль фермеров по каждому виду продукции. • Какой кредит требуется каждому фермеру. • Какова разница между кредитом и полученной прибылью. Должна быть предусмотрена возможность добавления и удаления продукта. Задание № 36 (Перевозки) Автотранспортное предприятие, занимается большегрузными перевозками. Предприятие владеет парком трейлеров. Каждый трейлер характеризуется номерным знаком, маркой, фирмой, грузоподъёмностью, расходом топлива на 100 км, длиной прицепа, стоимостью перевозки (руб/км), водителем. Имеются также водители: паспортные данные, стаж работы, классность, напарник (описывается так же, как водитель). Предприятие получает заказы на перевозку товаров: вес, количество мест, пункт отправления, пункт назначения, расстояние (км), трейлер, водитель. При расстоянии перевозки до 500 км водитель едет без напарника. Трейлер Ключ Марка Фирма Гос. номер Грузоподъемность Расход топлива Длина прицепа Перевозка руб./км Водитель Ключ ФИО № паспорта Напарник Классность Стаж работы Трейлер Автобаза Заказ Ключ Название Пункт отправления Пункт назначения Расстояние Вес 60 Должны быть созданы обобщенные списки: • Сведения об автомобилях. • Сведения о водителях и напарниках. • Сведения о заказах. Работнику автотранспортного предприятия могут потребоваться следующие сведения: • Список заказов на перевозку с сортировкой по расстоянию. • Список заказов с сортировкой по весу. • Трейлер с наибольшим выполненным количеством заказов. • Водитель с наибольшим выполненным количеством заказов. • Рейсы, выполняемые без напарника. • Общая прибыль предприятия. Должна быть предусмотрена возможность добавления, удаления и изменения заказов. Задание № 37 (Подписчики почты) Требуется разработать программную систему, предназначенную для работников почтового отделения. Такая система должна обеспечивать хранение сведений о подписчиках газет и журналов, обслуживаемых отделением связи, и о почтальонах. Каждое подписное издание характеризуется индексом, названием и подписной ценой. Подписка может выполняться на разные сроки. Один подписчик может иметь подписку на несколько изданий. Несколько домов объединяются в участок, который обслуживается одним почтальоном. Каждый почтальон может обслуживать несколько участков. Подписчик Ключ ФИО Адрес Список изданий Начало доставки Срок подписки Почтальон Ключ ФИО Участок Список адресов Издание Ключ Название Индекс Цена подписки 61 Должны быть созданы обобщенные списки: • Сведения о подписчиках. • Сведения о почтальонах. • Сведения об изданиях. Цена подписки задается в виде вложенного массива. Должны быть реализованы следующие запросы: • Вывести список подписчиков со списком изданий. • По заданному адресу определить фамилию почтальона, обслуживающего подписчика. • Список подписчиков по участкам. • Сколько почтальонов работает в почтовом отделении. • На каком участке количество экземпляров подписных изданий максимально. • Каков средний срок подписки по каждому изданию. Должна быть предусмотрена возможность добавления и удаления подписчика по заданному адресу. Задание № 38 (Книжный магазин) Разработать информационную систему для книжного магазина. Магазин покупает у издательства книги по оптовой цене и продает покупателям по розничной цене. Магазин ведет для покупателей каталог имеющихся в продаже книг с указанием автора, названия, шифра произведения, жанра (технические, исторические, детективы и т. д.), года издания, розничных цен. Кроме того, магазин ведет учет оптовых цен на книги, количеств проданных книг, имеющихся в наличии книг. Требуется также вести учет заказов на отсутствующие книги, подсчет прибылей и т. д. Книга Ключ Название Жанр Автор Год издания Количество страниц Носитель Каталог Ключ Автор Название Шифр Цена (розница) Носитель Магазин Ключ Название Цена (опт) Количество продаж Наличие 62 Должны быть созданы обобщенные списки: • Сведения о книгах. • Сведения о каталоге. • Сведения о магазинах. Должны быть реализованы следующие запросы: • Получение перечня всех книг заданного жанра. • Получение списка книг по авторам. • Автор самых продаваемых книг. • Перечень отсутствующих в магазине книг. • Стоимость всех проданных книг. • Книга с максимальной разницей между розничной и оптовой ценой. Должна быть предусмотрена возможность добавления и удаления книг заданного жанра. Задание № 39 (Продажа автомобилей) Разработать информационную систему по продаже автомобилей. Система должна обеспечивать ведение списка новых и подержанных автомобилей (фирма, марка, год выпуска, мощность двигателя, коробка (АКП, МКП), техническое состояние (новая или пробег), запрашиваемая цена), ведение списка покупателей (координаты, требования к марке, техническим характеристикам и техническому состоянию, допустимая цена автомобиля), автоматизированный подбор вариантов для покупателя. Автомобиль Ключ Фирма Модель Год выпуска Мощность двигателя Коробка Состояние Особенности Цена Покупатель Ключ ФИО Координаты Фирма Модель Год выпуска Состояние Максимальная цена Магазин Ключ Название 63 Должны быть созданы обобщенные списки: • Сведения об автомобилях. • Сведения о покупателях. • Сведения о магазинах. Должны быть реализованы следующие запросы: • Найти покупателей на автомобиль с заданными параметрами. • Покупатели, желающие приобрести автомобиль заданной модели. • Вывести список автомобилей с пробегом меньше 30 тыс. км. • Вывести список новых автомобилей. • Соотношение покупательной способности покупателей и суммарной стоимости имеющихся автомобилей. • Самый дорогой автомобиль. Должна быть предусмотрена возможность добавления и удаления покупателя. Задание № 40 (Аэропорт) Разработать информационную систему управления авиаперевозками. Система должна обеспечивать хранение данных о расписании авиарейсов, хранение сведений о наличии свободных мест на каждом рейсе, обеспечивать поиск ближайшего (по времени) рейса до заданного пункта при наличии на рейсе свободных мест, Разработать запросы, необходимые для распродажи билетов. Самолет Ключ Название Категория Количество мест Рейс Ключ № рейса Самолет Список посадок Время вылета Свободные места Цена Билеты Ключ № кассы № рейса Дата Время Должны быть созданы обобщенные списки: • Сведения о самолетах. 64 • Сведения о рейсах. • Сведения о билетах. Список промежуточных посадок задается вложенным массивом. Должны быть реализованы следующие запросы: • Есть ли свободные места на заданный рейс. • Список рейсов без промежуточных посадок. • Какие рейсы обслуживаются заданным самолетом. • Как загружены самолеты на заданный рейс по датам. • Самый дорогой рейс. • На каких рейсах можно заменить самолет (много свободных мест). Должна быть предусмотрена возможность добавления и удаления рейсов. 65 ОФОРМЛЕНИЕ ОТЧЕТА ПО ВЫПОЛНЕННОЙ КУРСОВОЙ РАБОТЕ Отчет курсовой работы должен содержать следующие структурные элементы: 1. Титульный лист; 2. Содержание; 3. Введение; 4. Основной раздел; 5. Текст программ консольных приложений с реализацией запросов LINQ; 6. Файлы для реализации списков; 7. Заключение; 8. Список литературы; 9. Приложения. Объем отчета должен составлять 15–20 страниц. В Содержании указываются все разделы отчета с указанием страниц. Во Введении отражаются: цель, задачи курсовой работы, актуальность выбранной темы, необходимость решения проблемы в современных условиях. В Основном разделе содержится описание основных классов, типов обобщенных коллекций и списков, описание запросов LINQ с оформлением лямбда-выражений и анонимных методов, а также текст программы для реализации заданных в задании запросов. В разделе Файлы должны быть представлены все файлы, необходимые для инициализации списков, включая разграничительные символы между элементами. В Заключении прилагаются скриншоты (желательно в виде негативов от вывода на экран в консольных приложениях) реализации вывода на экран результатов запросов LINQ. Список литературы должен включать в себя список книг и источников из Интернета, действительно использованных при подготовке и написании отчета, и состоять не менее чем из 10 позиций. 66 При оформлении отчета должны быть соблюдены следующие требования: а) пояснительная записка может быть представлена как в электронном виде, так и в бумажном, напечатанном на одной стороне листа белой бумаги формата А4; б) поля: • правое 20 мм; • левое 30 мм; • верхнее 20 мм; • нижнее 20 мм; в) размер букв и шрифт: • для текстов описаний применяют шрифт Times New Roman (кегль 14), для описания фрагментов программ – Ariel или Courier New (кегль 12); • основной текст: кегль 14; • цвет шрифта текста – черный; • цвет шрифта программ и автоотступы как заданы редактором текста среды разработки Visual Studio. г) интервал между строками текста 1,3 между строками программ 1. Для наименований структурных элементов «Содержание», «Введение», «Заключение», «Список литературы» задается стиль «заголовок» с соответствующим формированием гипертекстового оглавления. Для оформления нумерации должен применяться многоуровневый список. Заголовки записываются без точки на конце с выравниванием влево, строчными буквами без подчеркивания. Рубрикация Основная часть Пояснительной записки делится на разделы, подразделы, пункты и подпункты. Разделы, подразделы, пункты и подпункты следует нумеровать арабскими цифрами. 67 Разделы должны иметь порядковую нумерацию в пределах всего текста, за исключением приложений. Номер подраздела включает номер раздела и порядковый номер подраздела, разделенные точкой. После номеров раздела, подраздела, пункта и подпункта перед их заголовками или текстом точку не ставят. Заголовки Заголовки имеют только разделы и подразделы. Пункты и подпункты заголовков не имеют. Заголовки должны четко и кратко отражать содержание разделов, подразделов. Печать заголовков разделов и подразделов с абзацного отступа (1,25 см) строчными буквами, начиная с прописной, без точки в конце. Запрещаются в заголовках: а) перенос слов; б) сокращения слов; в) применение аббревиатур. Заголовок из двух предложений разделяют точкой. Если заголовок состоит из двух и более строк, вторую и последующие строки начинают под заглавной буквой первой строки заголовка. Заголовки разделов и подразделов следует выделять полужирным шрифтом. Если заголовок размещается в нижней части страницы, то после него должно быть не менее трех строк текста. В противном случае заголовок и текст переносятся на следующую страницу. Списки 1. После наименования списка ставится двоеточие. 2. Для каждого элемента списка, содержащего 2 строки и более, устанавливается выступ на 0,7 (относительно номера, как в этом примере). 3. Вложенный список имеет отступ на 0,7 относительно первой позиции наружного списка и другой символ для нумерации: а) Это пример строки вложенного списка. Обратите внимание на взаимное размещение списков. 68 4. Пункты 2 и 3 показывают примеры элементов списка из нескольких строк. Нумерация страниц Страницы Пояснительной записки следует нумеровать арабскими цифрами, соблюдая сквозную нумерацию по всему тексту. Нумерация страниц выполняется в колонтитуле, имеющего форму: Задание № 1 -3Иванов 2бАСУ1 На первых двух страницах колонтитул отсутствует. Такая форма препятствует предоставлению одним студентом работы другого студента. Титульный лист включают в общую нумерацию страниц. Каждый структурный элемент Пояснительной записки (Введение, Заключение, Список использованных источников, а также разделы основной части) следует начинать с нового листа (страницы). Иллюстрации Иллюстрации (чертежи, графики, схемы, компьютерные распечатки, диаграммы) располагают непосредственно после текста, в котором они упоминаются впервые, или на следующей странице. Иллюстрации могут быть в компьютерном исполнении, в том числе и цветные. На все иллюстрации должны быть даны ссылки в тексте. Иллюстрации (вне приложений) нумеруют арабскими цифрами сквозной нумерации. Порядковый номер рисунка и его название проставляются под рисунком посередине строки с указанием слова «Рис.», номера и наименования рисунка (например, Рис. 1.). Таблицы Название таблицы должно отражать ее содержание, быть точным и кратким. Название таблицы следует помещать над таблицей слева, с абзацного отступа в одну строку с ее номером через символ подчерки- 69 вания, например, «Таблица_1. Основные операции». Вторая строка названия таблицы начинается под заглавной буквой первой строки. Располагают таблицу непосредственно после текста, в котором она упоминается впервые, или на следующей странице. Ссылка на таблицу в тексте слово «таблица» с указанием ее номера, например, «…показано в Таблице_2». Нумерация таблиц в основном тексте арабскими цифрами сквозной нумерации. Перенос таблиц. Слово «Таблица» и ее номер указывают один раз слева над первой частью таблицы, над другими частями с абзацного отступа следует писать «Продолжение Таблицы» и указать ее номер, например, «Продолжение Таблицы_1». Элементы в столбцах таблицы должны выравниваться по центру по высоте. Если заголовок шире текста в столбце (например, в столбце цифры) и наоборот, соответствующие ячейки выравниваются по ширине. В конце заголовков и подзаголовков таблиц точки не ставят. Список литературы Библиографическое описание литературных источников следует выполнять в соответствии с ГОСТ 7.1-2003, с указанием только обязательных элементов. Сведения об источниках в Списке литературы следует располагать в порядке появления ссылок на источники в тексте Пояснительной записки, нумеровать арабскими цифрами без точки и печатать с абзацного отступа. Ссылки на использованные источники следует приводить в тексте Пояснительной записки в квадратных скобках, например: «в соответствии с [7, с. 99]». Примеры библиографического описания. ГОСТ 7.1-2003: Книги: а) один автор: Герасимова В.Д. Анализ и диагностика производственной деятельности предприятий (теория, методика, ситуации, задания): учеб. 70 пособие для вузов / В.Д. Герасимова. – 4-е изд., перераб. и доп. – М.: КНОРУС, 2008. – 256 с. б) коллектив авторов: Любушин Н.П. Экономический анализ. Контрольно-тестирующий комплекс: учеб. пособие для вузов / Н.П. Любушин, Н.Э. Бабичева. – М.: ЮНИТИ-ДАНА, 2007. – 159 с. Защита курсовой работы Защита работы осуществляется в установленные сроки. На защите студент демонстрирует отлаженное приложение и поясняет принципы оформления запросов и причины выбора той или иной формы запроса. Дополнительно преподаватель задает вопросы по выполненной курсовой работе. Защита считается успешной в случае правильного выполнения задания к курсовой работе, корректного оформления отчета, соответствующего требованиям, приведенным в предыдущем разделе, и полного ответа на задаваемые преподавателем вопросы. 71 СПИСОК ЛИТЕРАТУРЫ 1. Чернов, Э.А. Основы программирования на языке C# / Э.А. Чернов. – Дюссельдорф, Германия: LAP Lambert Academic Publishing, 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 Учебное издание ЧЕРНОВ Эдгар Александрович ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ МЕТОДИЧЕСКИЕ УКАЗАНИЯ К КУРСОВОЙ РАБОТЕ Редактор Г.Н. Середина Редакционно-издательский отдел МАДИ. E-mail: [email protected] Подписано в печать 04.12.2017 г. Формат 60×84/16. Усл. печ. л. 4,5. Тираж 100 экз. Заказ . Цена 150 руб. МАДИ, Москва, 125319, Ленинградский пр-т, 64.