Автор: Пользователь скрыл имя, 15 Марта 2011 в 10:38, курсовая работа
Так как цели курсовых работ пересекающиеся, а выбор предметной области свободный, то решено сначала спроектировать систему методами и средствами, изученными на занятиях по предмету «Проектирование информационных систем», а затем создать структуру базы данных и информационную систему, работающую со спроектированной БД, как того требует задание по предмету «Базы данных».
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное
образовательное учреждение высшего
профессионального образования
ВЯТСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
Вечерне-заочный факультет
Кафедра
информационных систем в экономике
КУРСОВАЯ РАБОТА
по дисциплинам
«Проектирование экономических
информационных систем» и «Базы данных»
Автоматизированная
информационная система
«Оптовый продовольственный склад»
Пояснительная
записка
Выполнил студент
группы ПИЭ _____<ШИФР>___________________ <ФИО> ______________
(шифр) (подпись) (дата)
Проверил преподаватель ________________________ <ФИО> ______________
(подпись) (дата)
Киров
2010 г.
Оглавление
Цель курсовой работы по предмету «Базы данных» - создание базы данных при помощи любой СУБД и разработка собственного приложения для работы с этой базой данных.
Цель курсовой работы по предмету «Проектирование информационных систем» - спроектировать и реализовать основные функции информационной системы в рабочем приложении.
Так как цели курсовых работ пересекающиеся, а выбор предметной области свободный, то решено сначала спроектировать систему методами и средствами, изученными на занятиях по предмету «Проектирование информационных систем», а затем создать структуру базы данных и информационную систему, работающую со спроектированной БД, как того требует задание по предмету «Базы данных».
Проектирование информационной системы осуществляется при помощи унифицированного языка моделирования UML при помощи приложения Visual Paradigm for UML community Edition.
Тема курсовой работы – Автоматизация рабочего места менеджера по закупкам оптового продовольственного склада. Поскольку предметную область обязан придумать тот, кто составляет курсовой проект, потенциальные требования к работе программы будут слегка экзотическими. Итак, требования к работе программы с точки зрения потенциального заказчика:
В модели требований описываются установленные пользователем задачи, функциональные и нефункциональные требования к системе. Так как рассматриваемая нами система описывается при помощи UML-диаграмм, то для построения модели требований используем в данном случае диаграмму вариантов использования (или диаграмма прецедентов).
Диаграммой прецедентов, или использования (Use case diagram), называется диаграмма, на которой показана совокупность прецедентов и актеров, а также отношения между ними. Диаграммы прецедентов представляют собой один из пяти типов диаграмм, применяемых в UML для моделирования динамических аспектов системы. Они применяются для моделирования вида системы с точки зрения прецедентов (или вариантов использования). Чаще всего это предполагает моделирование контекста системы, подсистемы или класса либо моделирование требований, предъявляемых к поведению указанных элементов.
По данной диаграмме можно судить о том, какие функции должна выполнять разрабатываемая информационная система. Первой и самой важной функцией системы является формирование заявок на поставку товара формируемых менеджером по закупкам. Поскольку товар необходимо заказывать не просто так, а для кого-то, то также неотъемлемой частью системы становится учет заявок покупателей. Исходными данными для формирования входящих заявок является информация о нуждаемости того или иного покупателя в том или ином продукте. Такая информация может вноситься в систему либо оператором системы, либо потенциальным покупателем лично. В задачи менеджера по продажам входит проанализировать сведения о заявках покупателей, информацию о покупателях, поставщиках и товарах, а также сформировать и направить заявки на поставки товара. После этого менеджер по закупкам обязан принять товар от поставщика. Кроме того система позволяет также и сформировать расходные документы для продажи товара покупателю, однако данный момент выходит за рамки компетенции менеджера по закупкам.
Модель анализа выявляет основные классы и взаимоотношения между ними. Диаграммой классов (Class diagram) называют диаграмму, на которой показано множество классов, интерфейсов, коопераций и отношений между ними.
По диаграмме
классов можно легко заметить насколько
важную роль в функционировании системы
играет класс MySQL. Именно он содержит свойства
и методы необходимые для подключения
к СУБД, выборки и изменения данных. Также
важным классом является главная форма
приложения (MainForm). MainForm является отправной
точкой для выполнения всех функций системы.
С помощью её создаются экземпляры классов
документов, которые открывают собственные
формы, вызывается форма ввода имени пользователя
и пароля, а также создается объект frmlistManager,
который тоже не менее интересен. С помощью
данного класса можно отобразить на экране
и управлять данными любой таблицы, содержащей
справочную информацию. Информацию о структуре
таблицы он получает при помощи метода
TableStructure класса MySQL.
Модель проектирования показывает взаимодействия внутри системы, способы передачи информации, потоки данных, состояния объектов системы. Для описания модели проектирования используем диаграммы взаимодействия (последовательности и кооперации) и состояния.
На диаграммах взаимодействий показывают связи, включающие множество объектов и отношений между ними, в том числе сообщения, которыми объекты обмениваются. При этом диаграмма последовательностей акцентирует внимание на временной упорядоченности сообщений, а диаграмма кооперации - на структурной организации посылающих и принимающих сообщения объектов.
Сообщения «Operation» и «frmDocument» выделены шрифтом так как обобщают классы и формы всех документов. Применена диаграмма кооперации для концентрации внимания на связях между объектами. Благодаря этому хорошо заметно, что редактирование справочной информации в БД происходит напрямую из формы, в то время как изменение и выборка данных о документах происходит только через промежуточный объект.
На данной диаграмме показан
порядок действий программы
ТЗ на АС является основным документом, определяющим требования и порядок создания автоматизированной системы, в соответствии с которым проводится разработка АС и ее приемка при вводе в действие.
ТЗ на АС разрабатывают на систему в целом, предназначенную для работы самостоятельно или в составе другой системы.
Дополнительно могут быть разработаны ТЗ на части АС:
Техническое задание на разработку рассматриваемой системы содержится в Приложении 1.
Потенциальными потребителями разрабатываемой системы, скорее всего, окажутся небольшие предприятия и индивидуальные предприниматели. Для них один их актуальных критериев выбора информационной системы – это стоимость. Следовательно, средство разработки средство разработки должно стоить как можно меньше или вообще распространяться свободно. В то же время, информационная система обязана быть конкурентоспособной, а значит должна поддерживать актуальные на сегодняшний момент платформы. Из таких решений можно выбрать Microsoft Visual Studio Express Edition 2008 (VS EE 2010 на момент написания курсового проекта находится в стадии beta-тестирования и потому не рассматривается) и проект компании Nokia - QT Creator. Среда разработки от компании Microsoft – наиболее распространена, но позволяет разрабатывать только приложения совместимые с операционной системой Windows. QT Creator же позволяет создавать приложения, совместимые с набором мультиплатформенных библиотек - QT. А значит, приложения, которые созданы в этой IDE – тоже мультиплатформенные. Однако данная среда разработки позволяет писать приложения только на языке С++, которому автор курсового проекта не симпатизирует. Visual Studio предлагает разрабатывать проекты с использованием Visual Basic, C++, а также, всё больше набирающим популярность, С#. Кроме того, последняя версия языка C# приобрела такие приятные функции как вывод типа, анонимные типы, расширяющие методы, лямбда-выражения, а также встроенный язык доступа к коллекциям объектов – Linq. И, наконец, «контрольным выстрелом» является то, что с недавнего времени Visual Studio 2008 полностью переведена на русский язык. Так что разрабатываемая система написана на языке программирования C# и будет использоваться только с операционной системой Windows. Для подключения к базе данных предполагается использовать интерфейс ODBC. Он позволяет абстрагироваться от внутренней механики той или иной СУБД и использовать любую из них. Единственное требование к СУБД в таком случае – наличие ODBC драйвера. В рамках курсовой работы используется СУБД MySQL. Основная причина выбора данной СУБД – это соблюдение лицензионной чистоты при отсутствии денежных выплат. Данная СУБД распространяется свободно для некоммерческого использования, а потому для образовательных целей подойдет. Кроме того набор визуальных средств администрирования имеет настолько понятный интерфейс, что даже не требуется наличие его локализации. Также данная СУБД удобна тем, что информация о таблицах БД содержится в такой же БД, только системной. Благодаря такой возможности можно реализовать универсальный и интеллектуальный механизм доступа к данным. Имеется ввиду, что, благодаря этой возможности легко реализуется выборка, группировка и анализ информации об именах полей, их типах, наличии внешних ключей интересующей таблицы база данных. Используя эту информацию можно программным кодом генерировать SQL запросы для доступа к информации, содержащейся в БД (Такие возможности будут продемонстрированы в классе frmListManager). Ну и, наконец, последним, и не очень важным, субъективным аргументом в пользу MySQL является его логотип. Дело в том, что в сравнении с другими свободными решениями плывущий дельфин смотрится гораздо приятней горящей птички и тем более на порядок красивей слоника в кепке.
Статический класс MySQL является самой важной частью приложения. Именно он определяет параметры для подключения к базе данных, само подключение и доступ к данным.
using System;
using System.Data; using System.Data.Odbc; using System.Collections.Generic; namespace winOrders { static class MySQL { public static string Driver { get; set; } public static string Server { get; set; } public static int Port { get; set; } public static string User { get; set; } public static string Pass { get; set; } public static string Database { get; set; } public static OdbcConnection Connection { get; set; } public static Link CurrentUser { get; set; } public static string ConnectionString() {// Формирование строки подключения к БД return "DRIVER=" + Driver + ";" + "SERVER=" + Server + ";" + "PORT=" + Port.ToString() + ";" + "USER=" + User + ";" + "PASSWORD=" + Pass + ";" + "DATABASE=" + Database + ";" + "stmt=SET NAMES 'cp1251';OPTION=4;"; } public static OdbcConnection GetConnection() {// Формирование подключения к БД return new OdbcConnection(ConnectionStrin } public static DataTable TableStructure(this string TableName) { // Возвращает таблицу структуры таблицы базы данных по имени таблицы // простите за тавтологию :) var dt = new DataTable(); string SQLstring = @"SELECT i.COLUMN_COMMENT as Synonym, i.COLUMN_NAME as Name, i.DATA_TYPE as Type, i.CHARACTER_MAXIMUM_LENGTH as Length, i.COLUMN_KEY as _Key, k.REFERENCED_TABLE_NAME as rTab, k.REFERENCED_COLUMN_NAME as rCol FROM information_schema.COLUMNS as i
LEFT JOIN information_schema.KEY_COLUMN_ i.TABLE_SCHEMA = k.TABLE_SCHEMA AND i.TABLE_NAME = k.TABLE_NAME AND i.COLUMN_NAME = k.COLUMN_NAME WHERE i.TABLE_SCHEMA = '" + Database + "' and i.TABLE_NAME = '" + TableName + "'"; dt.Fill(SQLstring); return dt; } public static string GetSynonym(this string TableName) {// Определяет пользовательское представление таблицы БД по имени таблицы string SQLstring = @"SELECT LEFT(TABLE_COMMENT,LOCATE(';', TABLE_COMMENT)-1) FROM information_schema.`TABLES` where TABLE_SCHEMA = '"+Database+"' and TABLE_NAME = '"+TableName+"'"; string
resultString = GetCommand(SQLstring).ExecuteS return resultString == "" ? TableName : resultString; } public static string GetSynonym(this string TableName, string ColumnName) {// Определяет пользовательское представление колонки таблицы БД string SQLstring = "SELECT COLUMN_COMMENT FROM information_schema.`COLUMNS`"+ "where TABLE_SCHEMA = '"+ Database+"'" +" and TABLE_NAME = '"+ TableName+"'" +" and COLUMN_NAME = '"+ ColumnName+"'"; string
resultString = GetCommand(SQLstring).ExecuteS return resultString == "" ? ColumnName : resultString; } public static string GetSynonym(this DataRow row) {// Находит пользовательское представление клонки в строке таблицы структуры БД return row.GetCol("Synonym") == "" ? row.GetName() : row.GetCol("Synonym"); } public static OdbcType GetOdbcType(string TypeName) {// Определение типа данных по имени типа switch (TypeName) { case "int": return OdbcType.Int; case "varchar": return OdbcType.VarChar; case "tinyint": return OdbcType.TinyInt; case "date": return OdbcType.Date; case "datetime": return OdbcType.DateTime; default: return OdbcType.VarChar; } } public static OdbcType GetOdbcType(this DataRow row) {// Получение значения типа данных из строки таблицы структуры БД return GetOdbcType(row.GetCol("Type") } public static int GetLenght(this DataRow row) {// Получение длины значения для колонки из строки талицы структуры БД return row.GetCol("Length") == "" ? 1 : int.Parse(row.GetCol("Length") } public static string GetName(this DataRow row) {// получение поля "Name" // необходимо часто, поэтому выделено в отдельный метод return row.GetCol("Name"); } public static string GetCol(this DataRow row, string ColName) {// Получение колонки таблицы по имени с проверкой существования колонки if (row.Table.Columns.Contains(Co return row[ColName].ToString(); else throw new Exception("Нет колонки "+ColName+"!"); } public static bool GetBoolCol(this DataRow row, string ColName) {// Конвертация tinyint в bool return row.GetCol(ColName) == "1" ? true : false; } public static int GetLastId() {// Получение последнего автоматически сгенерированного идентификатора return int.Parse(GetCommand("SELECT
LAST_INSERT_ID()").ExecuteScal } public static int GetId(this DataRow row) {// Получение поля "id" string id = row.GetCol("id").ToString(); return id=="" ? 0 : int.Parse(id); } public static OdbcParameter GetParameter(this DataRow row) {// Формирование параметра к запросу return new OdbcParameter("@" + row.GetName(), row.GetOdbcType(), row.GetLenght(), row.GetName()); } public static OdbcDataAdapter GetAdapter(string SQLstring) {// Получение дата-адаптера return new OdbcDataAdapter(SQLstring, Connection); } public static void Fill(this DataTable table, string SQLstring) {// заполнение таблицы данными на основе строки SQL запроса table.Clear();
GetAdapter(SQLstring).Fill(tab } public static OdbcCommand GetCommand(string SQLstring) {// Получение объекта OdbcCommand return new OdbcCommand(SQLstring, Connection); } public static bool TestConnection() {// Проверка соединения с БД bool result = true; try { Connection.Open(); } catch (Exception) {
result = false; } return result; } public static List<Link> ToLinksList(this DataTable dt) {// Формирование списка ссылок из таблицы return new List<Link>(dt.AsEnumerable() .Select(r => new Link(dt.TableName, r.GetId(), r.GetName()))); } public static List<Link> GetLinkCollection(string tableName) {// Получение списка ссылок для выпадающих списков DataTable dt = new DataTable(tableName); dt.Fill("SELECT id, Name FROM "+tableName); return dt.ToLinksList(); } public static string ToMySQL(this DateTime date) {// Конвертация даты в строку формата MySQL return "'" + string.Format("{0:yyyy-MM-dd HH:mm:ss}", date) + "'"; } } } |
Информация о работе Автоматизированная информационная система «Оптовый продовольственный склад»