Диплом: Исследование разработка информационной системы управленческого учета видеосалонов на примере ООО "Видеогид"

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
74
Excel.Chart chart = myChart.Chart;
- задает параметры и значения нового графика:
SeriesCollection seriesCollection =
(SeriesCollection)chart.SeriesCollection(Type.Missing);
Series series = seriesCollection.NewSeries();
series.XValues = sheet.get_Range("A3", "A33");
series.Values = sheet.get_Range("B3", "B33");
- определить вид графика:
chart.ChartType = XlChartType.xlLine;
- задать имя графика;
series.Name = "График Выручки";
Полный текст программного кода окна «Касса» указан в приложении 2.
Экран «Сеансы» используется для учета проданных билетов по сеансам и
их анализу. Основные рабочие экраны разделов сделаны по унифицированному
формату, поэтому он похож на раздел «Касса» (рис. 44).
На экране присутствуют кнопки «Подключиться», «Добавить запись»,
«Отобразить записи», «Топ просмотров», «Сравнительный анализ», «Очистить
таблицу», сгруппированные через элемент toolStrip.
Рисунок 44 - Форма «Проданные билеты»
«Подключиться» и «Добавить запись» действую аналогично элементам из
формы «Касса», однако в форме «Добавить сеанс», открываемый кнопкой
75
«Добавить запись» имеются отличия, в частности другие элементы textbox,
обусловленные другим количеством столбцов таблицы Сеансы (рис. 45).
«Добавить запись» вызывается кодом:
- проверяется наличие доступа к базе данных:
if (m_dbConn.State != ConnectionState.Open)
{
MessageBox.Show("Open connection with database");
return;
}
- вызывается форма AddDataBilets:
AddDataBilets addData = new AddDataBilets();
if (addData.ShowDialog() == DialogResult.OK)
Рисунок 45 - Форма добавления «Реализованные билеты»
При использовании кнопки «Подключиться» используется SQL-запрос:
m_sqlCmd.CommandText = "CREATE TABLE IF NOT EXISTS " + "bil" +
cbMonth1.Text + "(id INTEGER PRIMARY KEY AUTOINCREMENT,DateS
TEXT, Seans TEXT, allBilets TEXT, saleBilets TEXT)";
m_sqlCmd.ExecuteNonQuery();
Данный запрос создает таблицу bilМесяц с графами ID, DateS (дата
показа), Seans (Наименование сеанса), allBilets (всего билетов), saleBilets
(билетов продано) все в текстовом формате.
Элемент «отобразить записи» отображает все сеансы в порядке их
добавления в таблицу, имеет следующие строки:ID, Дата, Сеанс, Всего билетов,
76
Билетов продано. В зависимости от месяца, выбранного в соответствующем
элементе, будут показаны сеансы за соответствующий месяц.
«Топ просмотров» формирует запрос к базе данных, группируя все записи
посеансно, и отображает список фильмов, показанных в текущем месяце,
количество сеансов по фильму, общее количество проданных билетов за фильм
(рис. 46). Действует аналогично с предыдущим элементом – при выборе месяца
будут показаны запросы по выбранному месяцу. SQL-запрос выглядит
следующим образом:
Рисунок 46 - Результат запроса "Топ просмотров"
- выбираются колонки ID, Seans (сгруппированный по уникальным значениям),
сумму проданных билетов из таблицы за соответствующий месяц,
сгруппированные по графе Сеанс, распределенные в порядке убывания
количества проданных билетов. Так же отдельной строкой выводится сумма
выручки за соответствующий месяц:
sqlQuery = "SELECT ID, Seans, COUNT(Seans), SUM(saleBilets) FROM " +
"bil" + cbMonth1.Text + " GROUP BY Seans ORDER BY saleBilets DESC ";
sqlQuery1 = "SELECT SUM(money) FROM kass" + cbMonth1.Text;
При выведенном на экран топе просмотров и при нажатии кнопки
«Сравнительный анализ» будет выведена страница MS Excel, куда будут
скопированы записи из DataGridViev и добавлены формулы расчета основных
показателей. Так же по нажатии добавляются графики распределения, согласно
отображенным данным.
Код вызова данного события:
77
Excel.Application excel = new Excel.Application();
excel.Visible = true;
- создаем ссылку на файл с шаблоном отчета:
object tab = AppDomain.CurrentDomain.BaseDirectory + "\\" + "Отчет" + "\\"
+ "11.xls";
- создаем ссылки на необходимые при открытии файла функции:
object missing = Type.Missing;
object falseValue = false;
- открываем шаблон, заданный в ссылке:
excel.Workbooks.Open(AppDomain.CurrentDomain.BaseDirectory + "\\" +
"Шаблон" + "\\" + "1.xls", missing, missing, missing, missing, missing, missing,
missing, missing, missing, missing, missing, missing, missing, missing);
- создаем ссылку на новую логическуб таблицу:
DataTable dTable = new DataTable();
Далее, после проверки доступа к базе данных необходимо выполнить
условие:
- выводим в специальный скрытый label результат запроса к базе данных по
выводу суммы выручки за месяц:
lbSumm.Text = new SQLiteCommand("SELECT SUM(money) from " +
"kass" + cbMonth.Text, m_dbConn).ExecuteScalar().ToString().Replace(" ",
string.Empty);
- создаем новый документ Excel:
Excel.Workbook workbook = excel.Workbooks[1];
Excel.Worksheet sheet = (Excel.Worksheet)excel.Worksheets.get_Item(1);
- задаем начало строки документа, с которой будет начато заплонение :
int rowExcel = 3;
- задаем условие заполнения и заполняем документ значениями из DataGridViev:
for (int i = 0; i < dgvViewer2.Rows.Count; i {
sheet.Cells[rowExcel, "A"] = dgvViewer2.Rows[i].Cells["DateS"].Value;
sheet.Cells[rowExcel, "B"] = dgvViewer2.Rows[i].Cells["Seans"].Value;
sheet.Cells[rowExcel, "C"] = dgvViewer2.Rows[i].Cells["allBilets"].Value;
++rowExcel;
78
}
- выводим в отдельну строку данные по выручке из label:
sheet.Cells[3, 5] = lbSumm.Text;
- заполняем названия столбцов документа:
sheet.Cells[2, 1] = "Сеанс";
sheet.Cells[2, 2] = "Всего сеансов";
sheet.Cells[2, 3] = "Продано билетов";
sheet.Cells[2, 4] = "Среднее за сеанс";
sheet.Cells[2, 5] = "Выручка за месяц";
sheet.Cells[2, 6] = "Выручка за сеанс";
sheet.Cells[2, 7] = "Относительная выручка";
- делаем текст в выбранном диапазоне (А1-Е1) полужирным:
sheet.Cells.get_Range("A1", "E1").Font.Bold = true;
- определяем ширину столбцов в диапазоне (А1 – Е1):
sheet.Cells.get_Range("A1", "E1").ColumnWidth = 18;
- определяем размер шрифта в выбранном диапазоне
sheet.Cells.get_Range("A1", "E1").ColumnWidth = 18;
- делаем автоматическое форматирование ячеек в диапазоне:
sheet.Cells.get_Range("A1","E1").EntireColumn.AutoFit();
Создаем параллельно два графика каждый со своими данными:
ChartObjects xlCharts = (ChartObjects)sheet.ChartObjects(Type.Missing);
- создаем переменную первого графика с указанием размера и положения на
странице:
ChartObject myChart = (ChartObject)xlCharts.Add(300, 200, 350, 250);
- создаем переменную второго графика, с указанием того же размера, но другого
положения, чтобы графики не накладывались друг на друга:
ChartObject myChart1 = (ChartObject)xlCharts.Add(0, 200, 350, 250);
- создаем ссылки на созданные графики
Chart chart = myChart.Chart;
Chart chart1 = myChart1.Chart;
SeriesCollection seriesCollection =
(SeriesCollection)chart.SeriesCollection(Type.Missing);
79
SeriesCollection seriesCollection1 =
(SeriesCollection)chart1.SeriesCollection(Type.Missing);
- создаем ссылки на элементы графиков:
Series series = seriesCollection.NewSeries();
Series series1 = seriesCollection1.NewSeries();
- параллельно задаем каждому графику серию наименований, которые
указываются в скобках после Range:
series.XValues = sheet.get_Range("A3", "A10");
series1.XValues = sheet.get_Range("A3", "A10");
- параллельно задаем каждому графику серию значений, которые указываются в
скобках после Range:
series.Values = sheet.get_Range("F3", "F10");
series1.Values = sheet.get_Range("G3", "G10");
- указываем визуальные типы графиков:
chart.ChartType = XlChartType.xlPie;
chart1.ChartType = XlChartType.xlPie;
- задаем каждому графику имя:
series.Name = "График продаж";
series1.Name = "Относительный график продаж";
Как видно из таблицы, в ней указываются данные из программы, берется
месячная выручка по кассе из соответствующей таблицы, и по формуле
высчитывается выручка за сеанс (Выручка за месяц/Сумма проданных
билетов*Проданные билеты за киноленту) и относительная выручка (выручка за
сеанс/количество сеансов) и по вычисленным данным стоятся графики
распределения.
График распределения выполнен в круговом формате, где элементом X
являются Сеансы, а Y – значения, вычисленные по формулам.
Элемент «Очистить таблицу» возвращает DataGridViev нулевые значения
и скрывает его (рис. 47):
private void btClearTable_Click(object sender, EventArgs e)
{ dgvViewer2.Rows.Clear();
dgvViewer2.Visible = false; }
80
Рисунок 47 - Исходное состояние формы "Сеансы"
Кнопка «Вернуться» возвращает на главный экран.
Полный текст экрана «Проданные билеты» отображен в приложении 3.
Третий раздел «Кадры» отвечает за работу с сотрудниками организации.
Изменение их статуса, больничные листы, расчет зарплаты.
Форма имеет таблицу вывода, необходимую для расчета зарплаты. На нее
выводятся данные по сотрудникам из статичной базы данных, актуальные
данные по больничным листам. На форме присутствуют копки, объединенные в
общий формат: «Подключение», «Добавить больничный», «Список
сотрудников», «Статистика больничных», «Отобразить данные по ЗП»,
«Очистить таблицу», «Рассчитать ЗП», «Изменить данные», «Окончить
изменения» и «Вернуться» (рис. 48).
На экране «Кадры» присутствует элемент ComboBox ФИО, список
значений которого заполняется из таблицы «Сотрудники». Заполнение
происходит следующими командами:
- задается ссылку на файл статичной базы данных:
dbF = "sprav.sqlite";
- создается новое подключение к базе данных:
m_dbConn = new SQLiteConnection();
m_sqlCmd = new SQLiteCommand();
m_dbConn = new SQLiteConnection("Data Source=" + dbF + ";Version=3;");
- задает ссылку на SQL-команду:
string SQLExpression = "SELECT FIO FROM Ppl";
81
Рисунок 48 - Окно «Кадры»
- используется подключение к базе данных и запрос:
using (SQLiteConnection connection = new SQLiteConnection(m_dbConn))
{ connection.Open();
m_sqlCmd.Connection = m_dbConn;
- создает новую команду с соответствующим запросом:
SQLiteCommand command = new SQLiteCommand(SQLExpression,
connection);
SQLiteDataReader reader = command.ExecuteReader();
while (reader.Read())
- дается команда cbBoln читать данные по открытому запросу графы ФИО:
cbBoln.Items.Add((string)reader["FIO"]);
Кнопка «Подключиться» производит подключение к динамичной базе
данных «2018», а также выполняет команду:
m_sqlCmd.CommandText = "ATTACH DATABASE 'sprav.sqlite' AS 'DB'";
Данная команда производит сопряжение двух баз данных для доступа к
таблицам из обеих в рамках одного запроса.
При успешном подключении в статусной зоне появляется надпись
«Connected».
При открытии окна таблица DataGridViev скрыты. Таблица появляется
только при необходимости вывести на нее информацию.
82
Элемент «Добавить больничный» создает, если еще не было создано
таблицу «Больничный[Месяц]», и добавляет в эту таблицу данные из combobox
ФИО и количество больничных дней из графы «дней». Если в таблице уже
имеется графа с выбранной фамилией, но программа добавляет в запись
заданное значение, суммируя данные в графе, это реализуется следующим
алгоритмом:
- выполняется команда на создание таблицы, где ключевым элементом является
графа ФИО, чтобы данные в этой графе не повторялись:
m_sqlCmd.CommandText = "CREATE TABLE IF NOT EXISTS pss" +
cbMonth1.Text + " (FIOb TEXT PRIMARY KEY, Boln INT N)";
m_sqlCmd.ExecuteNonQuery();
- программа пытается добавить запись в таблицу:
try
{
m_sqlCmd.CommandText = "INSERT INTO " + "pss" + cbMonth1.Text +
"('FIOb', 'Boln') values ('" cbBoln.Text + "' , '" + tbBl.Text + "')";
m_sqlCmd.ExecuteNonQuery(); }
- при ошибке записи (графа ФИО должна быть уникальной), программа
выполняет команду добавления данных в строку, где ФИО соответствует
выбранной в выпадающем меню:
catch (SQLiteException ex)
{
m_sqlCmd.CommandText = "UPDATE pss" + cbMonth1.Text + " SET 'Boln' =
Boln + " + tbBl.Text + " WHERE FIOb = '" + cbBoln.Text + "'";
m_sqlCmd.ExecuteNonQuery(); }
«Список сотрудников» создает запрос к базе данных справочника и
выводит на первый DataGridViev основные данные по сотрудникам организации
(ФИО, должность, оклад, телефон):
sqlQuery = "SELECT FIO, Dolj, Oklad, Tlf FROM Ppls";
«Статистика больничных» создает запрос к актуальной базе данных и
выводит данные по выбранному месяцу о больничных листах, сгруппированные
по убыванию (рис. 49):
83
sqlQuery = "SELECT FIOb, SUM(Boln) FROM pss" + cbMonth1.Text + "
GROUP BY FIOb ORDER BY Boln DESC";
Рисунок 49 - Результат запроса "Статистика больничных"
«Рассчитать данные по ЗП» создает запрос, ссылающийся к таблице
сотрудников из статичной базы данных и к таблице больничных из актуальной
базы. При каждом новом использовании необходимо использовать элемент
«Подключиться», в котором присутствует код на подключение второй активной
базы данных:
В результате, на таблицу DataGridViev отображается таблица с
необходимыми для расчета заработной платы данными (рис. 50)
Рисунок 50 - Результат запроса по заработной плате

Смотрите также:

"Автоматизация обработки заявок ООО "Проектно-Строительная Компания"
"Автоматизация процесса аттестации персонала для ООО "Нэт Бай Нэт Холдинг"
"Анализ интернет-активности конкурентов ( на примере конкурентов "Газпром нефть")
"Бухгалтерский учёт и аудит расчётов с подотчётними лицами в организации на примере ООО "ЛОЦ 10""
«Психологическое сопровождение персонала в организации на примере ООО «Крокус»
Cовершенствование деловой оценки персонала в организации (на примере ООО "Даймонд кейтеринг развитие")
PR как средство продвижения организации (на примере ПАО "Тамбовский завод "Комсомолец им. Н.С. Артемова")
PR-коммуникации в сфере общественного питания (на примере кафе-кондитерской «Cream Cheese»)
SMM как средство повышения эффективности работы учреждений социокультурной сферы (на примере Малого театра)
Value-based education: ценности в системе образования и способы их реализации на уроке английского языка. Опыт Европейских стран