Имя атрибута | Имя поля | Тип данных | Описание |
USD | USD | Денежный | Атрибут содержит информацию о конкретной валюте. Не уникален. |
EUR | EUR | Денежный | Атрибут содержит информацию о конкретной валюте. Не уникален. |
MDL | MDL | Денежный | Атрибут содержит информацию о конкретной валюте. Не уникален. |
UA | UA | Денежный | Атрибут содержит информацию о конкретной валюте. Не уникален. |
RUS | RUS | Денежный | Атрибут содержит информацию о конкретной валюте. Не уникален. |
Дата | Data | Дата/время | Атрибут содержит дату курса. Не уникален. |
Сущность «Покупка» обладает следующими атрибутами: USD, EUR, MDL, UA, RUS, Дата
Первичного ключа нет.
Таблица 6 – Структура отношения Продажа (Prodaja)
Имя атрибута | Имя поля | Тип данных | Описание |
USD | USD | Денежный | Атрибут содержит информацию о конкретной валюте. Не уникален. |
EUR | EUR | Денежный | Атрибут содержит информацию о конкретной валюте. Не уникален. |
MDL | MDL | Денежный | Атрибут содержит информацию о конкретной валюте. Не уникален. |
UA | UA | Денежный | Атрибут содержит информацию о конкретной валюте. Не уникален. |
RUS | RUS | Денежный | Атрибут содержит информацию о конкретной валюте. Не уникален. |
Дата | Data | Дата/время | Атрибут содержит дату курса. Не уникален. |
Сущность «Продажа» обладает следующими атрибутами: USD, EUR, MDL, UA, RUS, Дата
Первичного ключа нет.
Таким образом, разработанная схема данных предметной области Информационная система обменного пункта имеет вид (рисунок 2):

Рисунок 2 - Схема данных предметной области Информационная система обменного пункта
3 РАЗРАБОТКА ПРОГРАММНОГО ПРОДУКТА
Центральное место в объектно-ориентированном анализе и проектировании занимает
разработка логической модели системы в виде диаграммы классов. Диаграмма классов служит для представления статической структуры модели системы.
Изображаем диаграмму классов, в которой присутствуют интерфейсные классы, содержащие методы и интерфейсные классы наследники, которые наследуют методы интерфейсных классов:

Рисунок 3 – Диаграмма классов для сущности “Sotrudnik”
В программе используются интерфейсный класс и интерфейсный класс – наследник. Интерфейсный класс – наследник ClassNaslednikInterfaceSotrudnik наследует метод класса ClassInterfaceSotrudnik – AddNewSotrudnik , UpdateSotrudnik, DeleteSotrudnik, PoiskSotrudnik и все поля этих методов.
В интерфейсном классе ClassInterfaceSotrudnik присутствуют следующие методы:
AddNewSotrudnik– этот метод, позволяет добавлять сотрудника в базу данных. Поля метода AddNewSotrudnik: ID, FAM, IM, OTCHECTVO, Vozrast, Adres, Dopolnitel_inform, PAS.
UpdateSotrudnik – метод, который позволяет редактировать любые данные о детях. Поля метода AddNewSotrudnik: ID, FAM, IM, OTCHECTVO, Vozrast, Adres, Dopolnitel_inform, PAS.
PoiskSotrudnik – метод, который позволяет реализовать поиск сотрудника по фамилии. Поля метода PoiskSotrudnik: FAM.
DeleteSotrudnik– метод, который позволяет пользователю удалить данные о сотруднике из списка. Поля метода DeleteSotrudnik: ID, FAM.

Рисунок 4 – Диаграмма классов для сущности “Kurs”
Интерфейсный класс – наследник ClassNaslednikInterfaceKurs наследует методы класса ClassInterfaceKurs: UpdateKurs и все поля этих методов.
В интерфейсном классе ClassInterfaceKurs присутствуют следующие методы:
UpdateKurs – этот метод позволяет редактировать данные о курсе валют. Поля метода UpdateKurs: USD, EUR, MDL, UA, RUS, Data.

Рисунок 5 – Диаграмма классов для сущности “Obmen_Valut”
Интерфейсный класс – наследник ClassNaslednikInterfaceObmen_Valut наследует методы класса ClassInterfaceObmen_Valut: AddNewObmen_Valut, DeleteObmen_Valut и все поля этих методов.
AddNewObmen_Valut – этот метод, позволяет добавлять данные о обмене валют в базу данных. Поля метода AddNewObmen_Valut: ID, Polucheno, Poluchenaya_Valuta, Vudannaya_Valuta, Kurs, Summ_Obmena, Itogo, Data, Kassir;
DeleteObmen_Valut – метод, который позволяет удалить данные о обмене валют и базы данных. Поля метода DeleteObmen_Valut: ID.
3.1 Делегаты и события, используемые в программном продукте
В данной курсовой работе используются делегаты и события при нажатии на форме кнопки, производящая подсчет обмена валюты. В результате чего вызывалось сообщение о дальнейших действиях.
Объявляем делегат для события public delegate void ButtonDelegate();
Затем объявляем событие делегата public event ButtonDelegate Click;
Реализуем метод, который будет выдавать сообщение.
public static void Exit()
{
if ((Convert. ToInt32(MessageBox. Show("Произсходит обмен, продолжить ?", "Выход", MessageBoxButtons. YesNo, MessageBoxIcon. Question))) == 6) ;
Application. Exit();
else
MessageBox. Show("Поздно программа уже подсчитала", "", MessageBoxButtons. OK, MessageBoxIcon. Information);
}
private void button2_Click(object sender, EventArgs e)
{
Button button_event = new Button();
button_event. Click += new ButtonDelegate(Exit);
button_event. Simulation();
button_event. Click -= new ButtonDelegate(Exit);
}
3.2 Реализуемые отчёты
Были реализованы следующие отчёты:
1) Чек, выдаваемый сразу же после обмена (Рисунок 11).

Рисунок 11 - Чек
2) Отчет на произведенный обмен за рабочую смену (Рисунок 12).

Рисунок 12 - Отчет
2 РАЗРАБОТКА ПОЛЬЗОВАТЕЛЬСКОГО ИНТЕРФЕЙСА
2.1 Диаграмма варианта использования «обмен валют»

Рисунок 13 - Диаграмма Вариантов Использования для «Обменного пункта».
На диаграмме изображены варианты использования для объекта кассир. Рассмотрим один из вариантов использования "Продажи валюты ", состоящий из следующих шагов: Клиент обращается к Кассиру для того чтобы оформить продвжу валюты. Кассир получает от клиента информацию о валюте которую он хочет купить или обменять на рубли. Имея эту информацию, кассир осуществляет соответствующие действия, в случае если имется валюта в наличие, то продать ее клинту, либо предложить другие варианты валюты для продажи, так как возможно не имеется желаемой валюты или нет желаемой суммы для произведения операции обмена.
2.2 Диаграмма взаимодействия.

Рисунок 14 - Диаграмма последовательности для ВИ «Продажа валюты»

Рисунок 15 - Кооперативная диаграмма для ВИ «Обмен валют»
Заключение
В процессе работы над проектом был создан комплекс программных средств для обеспечения работы пункта обмена валюты. Применение специализированных функций позволило сократить время разработки основного модуля программы и обеспечило высвобождение времени на создание процедур и методов обработки данных. В проекте представлен объектно-ориентированный подход в проектировании программного обеспечения информационного плана, дающий возможность на ранних этапах разработки учесть все нюансы будущей программы, необходимый набор функций, состав и структуру баз данных, что в дальнейшем исключает необходимость переработки уже написанных компонентов программы.
Программа реализована полноценно с удобным и информативным интерфейсом. Благодаря понятной архитектуре и несложному управлению работать с базой данных может и неподготовленный пользователь.
Для реализации структуры такой управленческой системы была изучена конкретная предметная область, выявлены все её сущности. Исходя из полученных данных, были выявлены атрибуты для каждой сущности, построены связи между объектами. На основе разработанной структуры, была проведена нормализация и утверждена реляционная модель базы данных.
Сама база данных представлена в реляционном виде, то есть оперирует фактическими данными, представленными в специальном образом форматированных совокупностях записей.
Программа может использоваться под управлением различных операционных систем на различных аппаратных платформах.
Законченное приложение было реализовано в среде Visual Studio 2005 NET.
Литература
1. Кристиан Нейгел, Билл Ивьен, Джей Глин, Морган Скиннер, Карли Уотсон «C# 2005 и платформа. NET 3.0 для профессионалов», Издательство: «Диалектика», г. Санкт-Петербург, 2008г. , 1789 стр.
2. Автор: « С#. Сборник рецептов », Издательство: «Вильямс», г. Санкт-Петербург, 2006г. , 1789 стр.
3. Автор: «Си Шарп. Создание приложений для Windows» , Издательство: «Харвест», г. Новосибирск, 2003 г., 598 стр.
4. Автор: «Программирование на языке C# 2005. Самоучитель. Си шарп» , Издательство: «Диалектика», г. Санкт-Петербург, 2006 г., 1876 стр.
5. Автор: Эндрю Троелсен «Язык программирования C# 2005 (Си Шарп) и платформа. NET 2.0, 3-е издание» Издательство: «Вильямс», г. Санкт-Петербург, 2005г. , 2124 стр.
Приложение А
Руководство пользователя
Огромное внимание при разработке данного программного продукта было уделено его интерфейсу.
Во-первых, цвета, использующиеся для отображения того или иного объекта на форме, не должны быть какими-то мрачными или неприятными для человеческого взгляда, а наоборот, должны способствовать его полному расслаблению.
Во-вторых, должны соблюдаться определенные удобства при эксплуатации программы, то есть при минимуме объектов и удобстве их расположения должны достигаться максимальные возможности по управлению входными и выходными данными.
И, в-третьих, все вышеперечисленное должно подходить не одному конкретному лицу, а всем, кто непосредственно будет, так или иначе, сталкиваться с данной программой.
Ниже приведено описание всех оконных форм и меню.
При запуске программы перед пользователем открывается окно, для ввода данных кассира:

Рисунок 16 - Окно входа в программу
После пользователю открывается главное окно программы. Наглядное изображение главного окна программы.

Рисунок 17 – Главное окно
В главном окне программы пользователь может осуществлять операции обмена и продажи валюты, после выполнения операции кассир распечатывает чек.

Рисунок 18 - Чек
А также пользователь имеет возможность просматривать совершенные за день операции.

Рисунок 19 – Таблица совершенных операций
В которой можно просматривать операции покупки и продажи валюты, совершенные в установленный промежуток времени пользователем - кассиром. Для чего необходимо указать в специальных полях установки даты соответствующие значения. Либо по нажатию кнопки «Все записи» - просмотреть все записи об операциях за время существования деятельности программы.
Из меню программы можно вызвать форму на добавление нового сотрудника. Нажав, Программа -> Добавить нового сотрудника, появится окно с формой и просмотра таблицы всех сотрудников.

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

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

Рисунок 10- Изменение курса валюты
Когда необходимые данные уже ведены и необходимо сохранить их в базу данных, надо нажать кнопку Изменить.
После нажатия кнопки Изменить, окно с вводом информации закрывается и управление возвращается снова к главному окну.
Приложение В
Листинг программы
Form1.cs
using System;
using System. Collections. Generic;
using ponentModel;
using System. Data;
using System. Drawing;
using System. Text;
using System. Windows. Forms;
using System. IO;
using System. Drawing. Printing;
using System. Data. SqlClient;
namespace TRPO_lab10
{
public partial class Main : Form
{
public Main()
{
InitializeComponent();
}
private Font printFont; // переменная для задачи шрифта при печати
private StreamReader streamToPrint; // поток чтения для печати
static string filePath = @"Чек. txt"; // строка полного пути к распечатываемому файлу
// Метод загружающий основную часть данных программы
private void Main_Load(object sender, EventArgs e)
{
try
{ // макс ID из таблицы Enter
int a = (int)enterTableAdapter. ScalarQueryMAXID();
// тот кто зашел в программу на данный момент
toolStripStatusLabel1.Text = enterTableAdapter. ScalarQueryFIObyID(a).ToString();
}
catch (Exception ex)
{
MessageBox. Show(ex. Message, "Ошибка", MessageBoxButtons. OK, MessageBoxIcon. Error);
Application. Exit();
}
try
{
// TODO: This line of code loads data into the 'changeDatabaseDataSet. Enter' table. You can move, or remove it, as needed.
this. enterTableAdapter. Fill(this. changeDatabaseDataSet. Enter);
// TODO: This line of code loads data into the 'changeDatabaseDataSet. Obmen_Valut' table. You can move, or remove it, as needed.
this. obmen_ValutTableAdapter. Fill(this. changeDatabaseDataSet. Obmen_Valut);
// TODO: This line of code loads data into the 'changeDatabaseDataSet. Prodaga' table. You can move, or remove it, as needed.
this. prodagaTableAdapter. Fill(this. changeDatabaseDataSet. Prodaga);
// TODO: This line of code loads data into the 'changeDatabaseDataSet. Pokypka' table. You can move, or remove it, as needed.
this. pokypkaTableAdapter. Fill(this. changeDatabaseDataSet. Pokypka);
}
catch (Exception exc)
{
if (MessageBox. Show("Ошибка: /n" + exc. Message + "/n Хотите побровать снова?", " Ошибка", MessageBoxButtons. RetryCancel, MessageBoxIcon. Error) == DialogResult. Retry)
{
LoadData();
}
else
Application. Exit();
}
UpdateBuyLabels();
UpdateSellLabels();
}
// загрузка данных из базы данных в приложение (рекурсия)
private void LoadData()
{
try
{
this. enterTableAdapter. Fill(this. changeDatabaseDataSet. Enter);
this. obmen_ValutTableAdapter. Fill(this. changeDatabaseDataSet. Obmen_Valut);
this. prodagaTableAdapter. Fill(this. changeDatabaseDataSet. Prodaga);
this. pokypkaTableAdapter. Fill(this. changeDatabaseDataSet. Pokypka);
}
catch (Exception exc)
{
if (MessageBox. Show("Ошибка: /n" + exc. Message + "/n Хотите побровать снова?", " Ошибка", MessageBoxButtons. RetryCancel, MessageBoxIcon. Error) == DialogResult. Retry)
{
LoadData();
}
else
Application. Exit();
}
}
// Выборка из базы данных курса валют ПОКУПКИ для вычисления расчетной суммы
private double DoChangeBuy(string sum)
{
try
{
double val = 0;
switch (comboBox1.Text)
{
case "USD":
val = Convert. ToDouble(sum) * Convert. ToDouble(pokypkaTableAdapter. ScalarQueryUSDPokypka());
break;
case "EUR":
val = Convert. ToDouble(sum) * Convert. ToDouble(pokypkaTableAdapter. ScalarQueryEURPokypka());
break;
case "MDL":
val = Convert. ToDouble(sum) * Convert. ToDouble(pokypkaTableAdapter. ScalarQueryMDLPokypka());
break;
case "UAH":
val = Convert. ToDouble(sum) * Convert. ToDouble(pokypkaTableAdapter. ScalarQueryUAHPokypka());
break;
case "RUB":
val = Convert. ToDouble(sum) * Convert. ToDouble(pokypkaTableAdapter. ScalarQueryRUBPokypka());
break;
}
return val;
}
catch (Exception exc)
{
MessageBox. Show(exc. Message, "Ошибка", MessageBoxButtons. OK, MessageBoxIcon. Error);
return 0;
}
}
// Выборка из базы данных курса валют ПРОДАЖИ для вычисления расчетной суммы
private double DoChangeSell(string sum)
{
try
{
double val = 0;
switch (comboBox2.Text)
{
case "USD":
val = Convert. ToDouble(sum) * Convert. ToDouble(prodagaTableAdapter. ScalarQueryUSDProdaga());
break;
case "EUR":
val = Convert. ToDouble(sum) * Convert. ToDouble(prodagaTableAdapter. ScalarQueryEURProdaga());
break;
case "MDL":
val = Convert. ToDouble(sum) * Convert. ToDouble(prodagaTableAdapter. ScalarQueryMDLProdaga());
break;
case "UAH":
val = Convert. ToDouble(sum) * Convert. ToDouble(prodagaTableAdapter. ScalarQueryUAHProdaga());
break;
case "RUB":
val = Convert. ToDouble(sum) * Convert. ToDouble(prodagaTableAdapter. ScalarQueryRUBProdaga());
break;
}
return val;
}
catch (Exception exc)
{
MessageBox. Show(exc. Message, "Ошибка", MessageBoxButtons. OK, MessageBoxIcon. Error);
return 0;
}
}
// Выборка из базы данных курса валют ПОКУПКИ (Buy)
private Single SelectKursBuy()
{
Single val = 0;
switch (comboBox1.Text)
{
case "USD":
val = (Single)pokypkaTableAdapter. ScalarQueryUSDPokypka();
break;
case "EUR":
val = (Single)pokypkaTableAdapter. ScalarQueryEURPokypka();
break;
case "MDL":
val = (Single)pokypkaTableAdapter. ScalarQueryMDLPokypka();
break;
case "UAH":
val = (Single)pokypkaTableAdapter. ScalarQueryUAHPokypka();
break;
case "RUB":
val = (Single)pokypkaTableAdapter. ScalarQueryRUBPokypka();
break;
}
return val;
}
// Выборка из базы данных курса валют Продажи (Sell)
private Single SelectKursSell()
{
Single val = 0;
switch (comboBox2.Text)
{
case "USD":
val = (Single)prodagaTableAdapter. ScalarQueryUSDProdaga();
break;
case "EUR":
val = (Single)prodagaTableAdapter. ScalarQueryEURProdaga();
break;
case "MDL":
val = (Single)prodagaTableAdapter. ScalarQueryMDLProdaga();
break;
case "UAH":
val = (Single)prodagaTableAdapter. ScalarQueryUAHProdaga();
break;
case "RUB":
val = (Single)prodagaTableAdapter. ScalarQueryRUBProdaga();
break;
}
return val;
}
// Обновление текущих курсов валют для ПОКУПКИ
private void UpdateBuyLabels()
{
try
{
labelUSD_p. Text = pokypkaTableAdapter. ScalarQueryUSDPokypka().ToString();
labelEUR_p. Text = pokypkaTableAdapter. ScalarQueryEURPokypka().ToString();
labelUAH_p. Text = pokypkaTableAdapter. ScalarQueryUAHPokypka().ToString();
labelRUB_p. Text = pokypkaTableAdapter. ScalarQueryRUBPokypka().ToString();
labelMDL_p. Text = pokypkaTableAdapter. ScalarQueryMDLPokypka().ToString();
}
catch (Exception ex)
{
MessageBox. Show(ex. Message, "Ошибка", MessageBoxButtons. OK, MessageBoxIcon. Error);
}
}
// Обновление текущих курсов валют для ПРОДАЖИ
private void UpdateSellLabels()
{
try
{
labelUSD. Text = prodagaTableAdapter. ScalarQueryUSDProdaga().ToString();
labelEUR. Text = prodagaTableAdapter. ScalarQueryEURProdaga().ToString();
labelUAH. Text = prodagaTableAdapter. ScalarQueryUAHProdaga().ToString();
labelRUB. Text = prodagaTableAdapter. ScalarQueryRUBProdaga().ToString();
labelMDL. Text = prodagaTableAdapter. ScalarQueryMDLProdaga().ToString();
}
catch (Exception ex)
{
MessageBox. Show(ex. Message, "Ошибка", MessageBoxButtons. OK, MessageBoxIcon. Error);
}
}
// Печать чека ПОКУПКИ
private void PrintCheckBuy()
{
try
{
StreamWriter stwr = new StreamWriter(@"Чек. txt", false); // поток открытия по записи
stwr. NewLine = Separ("", "", "", "", "", "-") + "-----\r\n";
stwr. WriteLine();
for (int i = 0; i < 2; i++)
{
stwr. NewLine = "Квитанция о валютно-обменной операции\r\n";
stwr. WriteLine();
stwr. NewLine = Separ("", "--- Получено ", "", " Выдано ", "", "-") + "\r\n";
stwr. WriteLine();
//stwr. NewLine = Separ("Сумма", textBoxPolucheno. Text, comboBox1.Text, DoChangeBuy(textBoxSumma_Obmena. Text).ToString(), "ПМР", " ") + "\r\n";
//stwr. WriteLine();
stwr. NewLine = Separ("Курс ", "1", "", SelectKursBuy().ToString(), "", " ") + "\r\n";
stwr. WriteLine();
stwr. NewLine = Separ("Итого ", textBoxSumma_Obmena. Text, comboBox1.Text, DoChangeBuy(textBoxSumma_Obmena. Text).ToString(), "ПМР", " ") + "\r\n";
stwr. WriteLine();
stwr. NewLine = Separ("", "", "", "", "", "-") + "-----\r\n";
stwr. WriteLine();
stwr. NewLine = DateTime. Now + " --- " + "Код " + obmen_ValutTableAdapter. ScalarQueryID().ToString() + "\r\n";
stwr. WriteLine();
stwr. NewLine = " \r\n";
stwr. WriteLine();
stwr. NewLine = toolStripStatusLabel2.Text + toolStripStatusLabel1.Text + " ___________ \r\n";
stwr. WriteLine();
stwr. NewLine = " \r\n";
stwr. WriteLine();
stwr. NewLine = Separ("", "", "", "", "", "-") + "-----\r\n";
stwr. WriteLine();
}
stwr. Close(); // зактрытие файла
}
catch (Exception exc)
{
if (MessageBox. Show("Ошибка подготовки к печати:\n" + exc. Message, "Ошибка", MessageBoxButtons. RetryCancel, MessageBoxIcon. Error) == DialogResult. Retry)
PrintCheckSell();
}
Printing();
}
// Печать чека ПРОДАЖИ
private void PrintCheckSell()
{
try
{
StreamWriter stwr = new StreamWriter(@"Чек. txt", false);
stwr. NewLine = Separ("", "", "", "", "", "-") + "-----\r\n";
stwr. WriteLine();
for (int i = 0; i < 2; i++)
{
stwr. NewLine = "Квитанция о валютно-обменной операции\r\n";
stwr. WriteLine();
stwr. NewLine = Separ("", "--- Получено ", "", " Выдано ", "", "-") + "\r\n";
stwr. WriteLine();
//stwr. NewLine = Separ("Сумма", DoChangeSell(textBoxSum. Text).ToString(), "ПМР", textBoxSum. Text, comboBox2.Text, " ") + "\r\n";
//stwr. WriteLine();
stwr. NewLine = Separ("Курс ", SelectKursSell().ToString(), "", "1", "", " ") + "\r\n";
stwr. WriteLine();
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 |


