Автор: Пользователь скрыл имя, 15 Марта 2011 в 10:38, курсовая работа
Так как цели курсовых работ пересекающиеся, а выбор предметной области свободный, то решено сначала спроектировать систему методами и средствами, изученными на занятиях по предмету «Проектирование информационных систем», а затем создать структуру базы данных и информационную систему, работающую со спроектированной БД, как того требует задание по предмету «Базы данных».
Прежде чем приводить исходные коды классов документов нужно сказать несколько слов о служебном классе Link. Так как для системы важна информация о идентификаторе объекта, на которого сослаться, а также название таблицы базы данных, а для пользователя наиболее важно представление, было принято решение сконцентрировать все эти три вещи в одной сущности. Метод ToString()необходим для нормального отображения экземпляра в контролах, с которыми осуществляется связь полей объектов типа Link. Кроме того для возможности упорядочивания необходима реализация интерфейса IComparable, а именно метода CompareTo(object obj).
public class Link : IComparable
{ public string TableName { get; private set; } public int Id { get; set; } public string Name { get; set; } public Link(string tableName) { this.TableName = tableName; } public Link(string tableName, int id, string name) { this.TableName = tableName; this.Id = id; this.Name = name; } public Link(string tableName, int id) { this.TableName = tableName; this.Id = id; this.Name = MySQL.GetCommand("SELECT `Name` FROM `"+tableName+ "` WHERE `id` = '" + id + "'").ExecuteScalar().ToString( } public Link(string tableName, DataRow row, string colPrefix) { this.TableName = tableName; this.Id = int.Parse(row.GetCol(colPrefix this.Name = row.GetCol(colPrefix + "_name"); } public override string ToString() { return this.Name; } public int CompareTo(object obj) { var other = obj as Link; int
result = this.Name.CompareTo(other.Name return result == 0 ? this.Id.CompareTo(other.Id) : result; } } |
Далее приведены исходные коды класса Operation и унаследованного от него класса OrderIn. Кроме того показан класс OrderInParameter. Класс заявки имеет в качестве одного из свойств типизированный список параметров.
public class Operation : IComparable
{ public DateTime Date { get; set; } public int Id { get; set; } public Operation() { this.Date = DateTime.Now; } public int CompareTo(object obj) {// Функция нужна для возможности упорядочивания var other = obj as Operation; int
result = this.Date.CompareTo(other.Date return result == 0 ? this.Id.CompareTo(other.Id) : result; } public virtual bool Save() { return true; } } |
public class OrderIn : Operation { public Link Client { get; set; } public float Count { get; set; } public int Status { get; set; } // Пока число, потом надо будет создать перечисление public List<OrderInParameter> Parameters { get; set; } private Link _good; public Link Good { get { return _good; } set { _good = value; GenerateNewParameters(); } }
public OrderIn() { this.Client = MySQL.CurrentUser; } public OrderIn(int id) { var
dt = new DataTable(); string SQLstring = @"SELECT orderin.id as id, orderin.date as date, orderin.client as client_id, users.Name as client_name, orderin.good as good_id, kgoods.Name as good_name, orderin.count as count, orderin.status as status FROM orderin LEFT JOIN users ON orderin.client = users.id LEFT JOIN kgoods ON orderin.good = kgoods.id
WHERE orderin.id = '" +
id + "'";
dt.Fill(SQLstring); if (dt.Rows.Count > 0) { var row = dt.Rows[0]; this.Id = id; this.Date =
DateTime.Parse(row.GetCol(" this.Client = new Link("users", row, "client"); // присваиваю приватному свойству для того, чтобы // геттер не генерил новые параметры _good = new Link("kgoods", row, "good"); this.Count = float.Parse(row.GetCol("count" this.Status = int.Parse(row.GetCol("status") }
dt.Clear(); SQLstring = @"SElECT o.id as id, o.checked as checked, o.characteristic as char_id, k.name as char_name, o.equality as equality, o.val as val FROM orderinparameters as o LEFT JOIN kcharacteristics as k ON o.characteristic = k.id
WHERE o.idorder = '" + this.Id + "'";
dt.Fill(SQLstring); var parameters = dt.AsEnumerable() .Select(row => new OrderInParameter(this, row.GetId(), row.GetBoolCol("checked"), new Link("kcharacteristics", row, "char"), row.GetCol("equality"),
row.GetCol("val"))); this.Parameters = new
List<OrderInParameter>(paramet } public void GenerateNewParameters() { var
dt = new DataTable(); string SQLstring = @"SELECT curCh.id as id, curCh.checked as checked, kc.id as char_id, kc.Name as char_name, curCh.equality as equality, curCh.val as val FROM kchargoods as kcg LEFT JOIN kcharacteristics as kc ON kcg.KindOfCharacteristic = kc.id LEFT JOIN ( SELECT id, checked, characteristic, val, equality FROM orderinparameters WHERE idorder = '" + this.Id+@"' ) as curCh ON kc.id = curCh.characteristic
WHERE KindOfGood = '" + this.Good.Id + "'";
dt.Fill(SQLstring); var parameters = dt.AsEnumerable() .Select(row => new OrderInParameter(this, row.GetId(), row.GetBoolCol("checked"), new Link("kcharacteristics", row, "char"), row.GetCol("equality"),
row.GetCol("val"))); this.Parameters = new
List<OrderInParameter>(paramet } public void OpenForm(Form1 mainForm) { frmOrderIn f; if (mainForm.OpenWindows.Contains {
f = (frmOrderIn)mainForm.OpenWindo f.Activate(); } else { f = new frmOrderIn(this, mainForm);
mainForm.OpenWindows.Add(this. f.Show(); } } public override string ToString() { return "Заявка клиента № "+this.Id.ToString() + " от " + this.Date.ToString(); } public override bool Save() { var command = MySQL.GetCommand( (this.Id == 0 ? "INSERT INTO" : "UPDATE") + " orderin SET " + "`date` = " + this.Date.ToMySQL() + ", " + "`client` = " + this.Client.Id + ", " + "`status` = " + this.Status + ", " + "`good` = " + this.Good.Id + ", " + "`count` = " + this.Count + " " + (this.Id == 0 ? "" : ("WHERE id = " + this.Id + ""))); command.ExecuteNonQuery(); this.Id = this.Id == 0 ?
MySQL.GetLastId() : this.Id; // Сначала удалить те характеристики, которые были со старым товаром, // а потом установить характеристики, которые должны описывать новый товар command.CommandText = "DELETE from orderinparameters WHERE idorder = '" + this.Id + "'"; command.ExecuteNonQuery(); if (this.Parameters.Count != 0) { var SQLvalues = (from par in Parameters select ("(" + par.Id + ", " + // id par.Order.Id + ", " + // idorder (par.Checked ? "1" : "0") + ", " + // checked par.Characteristic.Id + ", " + // characteristic "'" + par.Equality + "', " + // equality "'" + par.Val + "')" // val )).Aggregate((a, b) => a + ", " + b); command.CommandText = @"INSERT INTO orderinparameters (id, idorder, checked, characteristic, equality, val) VALUES " + SQLvalues + ";"; command.ExecuteNonQuery(); } return true; } } public class OrderInParameter : IComparable { public int Id { get; set; } public OrderIn Order { get; set; } public bool Checked { get; set; } public Link Characteristic { get; set; } public object Val { get; set; } private string _equality; public string Equality { get { return _equality; } set { _equality = value == "" ? "=" : value; } } public OrderInParameter() { this.Checked = false; this.Equality = "="; } public OrderInParameter(OrderIn order) { this.Order = order; this.Checked = false; this.Equality = "="; } public OrderInParameter(OrderIn order, int id) { var dt = new DataTable(); string SQlstring = @"SElECT o.id as id, o.idorder as idorder, o.checked as checked, k.id as char_id, k.name as char_name, o.equality as equality, o.val as val FROM orderinparameters as o LEFT JOIN kcharacteristics as k ON o.characteristic = k.id
WHERE o.id = '" +
id + "'";
dt.Fill(SQlstring); if (dt.Rows.Count > 0) { var
row = dt.Rows[0]; this.Id = id; this.Order = order; this.Checked = row.GetBoolCol("checked"); this.Characteristic = new Link("kcharacteristics", row, "char"); this.Equality = row.GetCol("equality"); this.Val = row.GetCol("val"); } } public OrderInParameter(OrderIn order, int id, bool check, Link characteristic, string equality, object val) { this.Id = id; this.Order = order; this.Checked = check; this.Characteristic = characteristic; this.Equality = equality; this.Val = val; } public int CompareTo(object obj) { var other = obj as OrderInParameter; int
result = this.Characteristic.CompareTo( return result; } } |
Задача главной формы – отображать основную информацию на экране и позволять управлять подчиненными формами. Для того чтобы объекты форм не создавались несколько раз, необходимо чтобы главная форма хранила список открытых окон. В самом верху формы расположена панель инструментов, на которой пока одна гиперссылка, отображающая полное имя пользователя, который в данный момент работает с системой. При нажатии на неё, а также при входе в систему главная форма запрашивает пароль пользователя.
private void btnOK_Click(object sender, EventArgs e)
{ string oldUser = MySQL.User; string oldPass = MySQL.Pass; MySQL.User = txtUser.Text.Trim(); MySQL.Pass = txtPass.Text.Trim(); MySQL.Connection = MySQL.GetConnection(); if (!MySQL.TestConnection()) { MessageBox.Show("Неправильные имя пользователя или пароль!", "Ошибка аутентификации", MessageBoxButtons.OK); MySQL.User = oldUser;
MySQL.Pass = oldPass; this.DialogResult = DialogResult.Cancel; } |
На панель инструментов предполагается вывести кнопки, выполняющие общие функции для системы, но пока не известно что может понадобиться пользователю.
В верхней
части формы расположены
С данной закладкой
работает покупатель. Здесь отображаются
только заявки текущего пользователя.
Нижняя таблица отображает список допустимых
фильтров. Здесь данные только отображаются,
редактировать их нельзя. Для редактирования
заявок существует отдельная форма. Конечно,
удобней было бы редактировать данные
прямо в списке, но это временное решение,
так как пока не решена проблема с привязкой
данных.
Работая с этой вкладкой, менеджер по закупкам принимает решение о принятии заявки или об отказе от неё. Слева в верху находятся ссылки на отчеты, дающие информацию для принятия такого решения. Чуть ниже расположены ссылки для списка товаров и их характеристик. В верхней таблице отображается, сгруппированная по покупателям, информация о необработанных заявках. В нижней таблице находится расшифровка по каждой заявке. Здесь же приводится ориентировочная цена товара. Она берется из списка товаров и вычисляется как средняя между всеми товарами, соответствующими условиям, которые определены в заявке.
В левой части данной вкладки отображается сгруппированная информация о заказанных товарах. Эта информация приводится справочно и необходима менеджеру для контроля за заказом товаров поставщику. В правой части формы вносятся заявки поставщику. Вверху – список заявок поставщикам, внизу их расшифровка. На панели инструментов кнопки добавить, редактировать и удалить необходимы для ручного управления заявками поставщику. Кнопка «Сформировать автоматически» формирует заявки поставщикам на основании заявок покупателей. Кнопкой «Пакетная печать» вызывается диалог, в котором можно выбрать заявки и распечатать все одновременно. Кнопкой Утвердить заявки меняется статус заявок поставщику и заявки покупателя. После данной операции ни ту ни другую менять уже нельзя.
Информация о работе Автоматизированная информационная система «Оптовый продовольственный склад»