
- •1 Постановка задачі
- •3.2 Стислий опис системи Windows 7
- •3.3 Стислий опис мови програмування
- •Visual Basic 10.0 і c# 4.0 були випущені в квітні 2010 року, одночасно з випуском Visual Studio 2010.
- •3.4 Налагодження та тестування програми
- •3.5 Інструкція по роботі з програмою
- •4.2 Гігієна праці та виробнича санітарія
- •4.3 Організація робочого простору
- •5.3 Конкуренція
- •5.4 Стратегія маркетингу
- •If (processed)
5.4 Стратегія маркетингу
Для успішного супроводження програмного продукту на ринку та досягнення запланованого об’єму продаж необхідно ретельно спланувати рекламну компанію, котра дала б можливість усім потенційним користувачам дізнатись про існування та переваги розробленого програмного продукту. Рекламна компанія буде проводиться засобами електронної комерції, на IRC; та сайтах з новинами.
Але для початку рекламна компанія обмежиться розсилкою електронних листів потенційним покупцям. В листах буде знаходитись детальна інформація проданий програмний продукт, що досить зручно та вигідно. Також у листі вказується адреса домашнього сайту розробника, де можна буде внести свої пропозиції.
Витрати на розробку наведені у таблиці 5.4.
Таблиця 5.4 Розрахунок трудових витрат
-
Найменування операції
Кількість годин
1.Аналіз
25
2.Проектування
75
3.Кодування
50
4.Налагоджування
37,5
5.Тестування
37,5
6.Супроводження
25
Всього
250
Трудовитрати, які потребують для розробки програмного продукту складають 250 годин.
Розрахуємо час роботи на машині - 75+50+37,5+37,5+25= 225 годин.
Розрахуємо немашинний час - 25 = 25 годин.
1.Розрахуємо вартість машинного часу (електроенергія)
Велектр.ен. = машинний час* потужність машини* тариф
Велектр.ен.= 225 годин * 0.35 КВтчас*1.15 грн. = 90,56 грн.
2.Розрахуємо заробітну плату розробника програмного продукту. Витрачений час на розробку програмного продукту – 250 годин, тариф за годину роботи – 50 грн., звідси 250грн. * 50 год. = 12 500 грн.
3.Додаткова заробітна плата (20-50% від основної ЗП)
12 500грн.*(0,2 – 0,5) = 3750 грн.
4.Відрахування на соціальні потреби (38% від ФОП)
(12 500 грн. + 3450 грн.)* 0,38= 6175 грн.
5.Накладні витрати (40-100% від ФОП):
16250 грн.*(0,4 – 1) =8125 грн.
6. Розрахуємо вартість матеріалів (Таблиця 5.5 Витрати на матеріали)
Таблиця 5.5 - Витрати на матеріали
-
Матеріали
Кількість,
шт.
Ціна за одиницю, грн.
Вартість, грн.
1.Папір
300
0.10
30,00
2.Файл
200
0.15
30,00
3.Папка
2
5,00
10,00
4.Ручка
2
2,00
4,00
5.Тонер
1
30,00
30,00
6.Флешка
1
50,00
50,00
Всього
154,00
Суму витрат на розробку програмного продукту занесемо в таблицю 5.6 (Витрати на розробку програмного продукту).
Таблиця 5.6 - Витрати на розробку програмного продукту
-
Статті витрат
Вартість, грн.
Матеріали
154,00
Вартість електроенергії
91,00
Основна заробітна плата
12 500,00
Додаткова заробітна плата (20-50% від ФОП)
3750,00
Соціальні відрахування (38% від ФОП)
6175,00
Накладні витрати (40-100% від ФОП)
8125,00
Виробнича собівартість
30 795,00
Невиробничі витрати (3-10% від виробничої с/в)
1540,00
Всього
32 350,00
7. Розрахуємо витрати на адаптацію(невиробничі витрати програмного продукту, 3-10% від виробничої собівартості ПП)
30 794,56 грн.*(0,03 – 0,1) = 1539,73 грн.
8. Визначимо повну собівартість розробленого програмного продукту.
30 794 грн. + 1593,73 грн. = 32 350,00 грн.
Розрахуємо прибуток (20-50 % від повної собівартості).
32350,00грн.*0,4 = 12 933,72 грн.
Ціна: 30 794,56 грн. + 12 933,72грн. = 43 728 грн.
Розрахуємо вартість на 1 екземпляр тиражу (Таблиця 5.7 Витрати на матеріали на 1 шт.)
Таблиця 5.7 Витрати на матеріали на 1 шт
-
Матеріали
Кількість,
шт.
Вартість за одиницю, грн.
Вартість, грн.
Диск
1
3,00
3,00
Коробка для диска
1
2,00
2,00
Роздрук
1
2,00
2,00
Вкладинка
1
2,00
2,00
Всього:
9,00
Матеріальні витрати 9,00.грн.
Витрати на електроенергію: 0,1 н/г * 0,35 КВт*1,15 грн. = 0,04 грн.
Основна зарплата: 0,1 н/г*50 грн = 5,00 грн.
Додаткова зарплата: .5,00 грн.*0,2= 1,00 грн.
Соціальні відрахування: (5,00 грн. + 1,00 грн.) * 0,38 = 2,28 грн.
Накладні витрати: 6,00 грн.*0,5 = 3,00 грн.
Загальна сума: 20,32 грн.
Невиробничі витрати: 20,32 грн.*0,05 = 1,02 грн.
Повна собівартість: 1,02 грн. + 20,32грн. = 21,34 грн.
Мінімальна ціна програмного продукту:
Цmin =54,87 грн.
Максимальна ціна програмного продукту розраховується за формулою:
Цmax = (собівартість + кредит + 1,2 Прибуток) = 63 924грн.
Виходячи з ринкових цін на аналогічні продукти, приймаємо остаточну ціну нового програмного продукту 55,00 грн.
5.5 Фінансовий план.
Цей розділ узагальнює і систематизує всі матеріали попередніх розділів та представляє їх у вартісному вираженні.
З урахуванням раніш визначених витрат на розробку програмного продукту заповнюємо таблицю 5.8 – Таблиця доходів та витрат
Таблиця 5.8 –Доходів та витрат
-
Показники
Витрати до поч. реалізації
1 рік
2 рік
3 рік
Всього
Обсяг продаж (шт.)
1000
1000
1000
3000
Доходи від реалізації (грн)
55 000
55 000
55 000
165 000
Постійні витрати
-
- Матеріали
154,00
-
-
-
154,00
- Електроенергія
91,00
-
-
-
91,00
- Основна зарплата
12 500
-
-
-
12 500
- Додаткова зарплата
3750
-
-
-
3750
- Соціальні відрахування
6175
-
-
-
6175
- Накладні витрати
8125
-
-
-
8125
- Кредит
7000
-
-
-
7000
- Відсоток за кредит
-
-
1190
-
1190
Всього постійних витрат:
37795
-
1190
-
38985
Змінні витрати
- Тиражування
21340
21340
21340
64020
- Реалізація
10000
10000
10000
30000
Всього змінних витрат:
31340
31340
31340
94200
Всього витрат:
37795
31340
32530
31340
133 005
Прибуток:
-37795
23660
22470
23660
31 995
Податок на прибуток
-
4495
4269
4495
13 259
Чистий прибуток:
-37795
19165
18201
19165
18376
Будуємо графік беззбитковості та розраховуємо точку беззбитковості програмного продукту.
шт.
Рисунок 5.1 – Графік беззбитковості
Додаток А. Лістинг програми
/*
* Даний програмний продукт являється дипломним проектом "ДержТест" для проведення державного екзамену зі спеціальності бухгалтерський облік.
* Розробив: Острась М.В.
* Керівник: Гордон Н.Б.
* Замовник: Харківський патентно комп'ютерний коледж
* 25.05.2013
* */
// лістинг Form1
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Xml;
using System.Xml.Linq;
namespace Mytest
{
public partial class Form1 : Form
{
string cnfgFile = Environment.GetFolderPath(Environment.SpecialFolder.Personal) + @"/cnfg.xml";
// шлях до файлу конфігурації
string logAdm = ""; // ключі входу за замовчуванням
string pasAdm = "";
public Form1()
{
InitializeComponent();
if (File.Exists(cnfgFile))
{
// Зчитування файлу конфігурації
XDocument conf = XDocument.Load(cnfgFile);
conf = XDocument.Load(cnfgFile);
foreach (XElement el in conf.Root.Elements()) // зчитування значень ключів входу з файлу
{
if (el.Name == "login")
logAdm = Form2.DecryptFrom3Des(el.Value);
if (el.Name == "password")
pasAdm = Form2.DecryptFrom3Des(el.Value);
}
}
else
{
groupBox2.Visible = true; // контейнер,який містить дані об помилці
}
}
}
private void log_Click(object sender, EventArgs e) // обробник кнопки входу в розширений режим
{
if ( (this.login.Text == logAdm) && (this.pass.Text == pasAdm) )
{
Form2 admin = new Form2();
admin.Show();
}
else
{
Form3 user = new Form3();
user.Show();
}
}
private void button1_Click(object sender, EventArgs e)
{
Form3 user = new Form3();
user.Show();
}
private void Form1_Load(object sender, EventArgs e)
{
}
// Обробники пунктів меню
private void EXT_MENU_Click_1(object sender, EventArgs e)
{
groupBox1.Visible = true;
button1.Visible = false;
}
private void SIMP_MENU_Click(object sender, EventArgs e)
{
groupBox1.Visible = false;
button1.Visible = true;
}
private void toolStripMenuItem1_Click(object sender, EventArgs e)
{
Application.Exit();
}
// анімація кнопків форми
#region animation
// обробник події закриття форми
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
DialogResult result = MessageBox.Show("Выйти из программы", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (result == DialogResult.No)
{
e.Cancel = true;
}
else
{
e.Cancel = false;
}
}
}
}
// Лістинг Form2
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Xml;
using System.Xml.Linq;
using System.Security.Cryptography;
using System.Security.Cryptography.Xml;
using System.Diagnostics;
using Microsoft.Reporting.WinForms;
namespace Mytest
{
public partial class Form2 : Form
{
// змінні конфігуратора
string cnfgFile = Environment.GetFolderPath(Environment.SpecialFolder.Personal) + @"/cnfg.xml"; // шлях до файлу конігурації
string defPath;
string filename;
string login;
string password;
string time;
// критерії оцінювання
int criterion5_min_value = 0;
int criterion5_max_value = 0;
int criterion4_min_value = 0;
int criterion4_max_value = 0;
int criterion3_min_value = 0;
int criterion3_max_value = 0;
int criterion2_min_value = 0;
// змінні , які передаються в звіт
string report_Name;
string report_StudentName;
string report_StudentGroup;
int report_Mark;
int report_TestsCount;
Boolean processed = false;
// змінні шляхів до файлів обробки (rtf)
string rtfFileName = "";
string rtfFileNameAnswers = "";
string outputXmlFile = "";
// оголошення документу xml та реалізації інтерфейсу IEnumerable його елементів
XDocument xdoc;
IEnumerable<XElement> xel;
IEnumerable<XElement> xel2;
int i = 0;
int AnsCount = 0;
// динамічно створювані елементи контролю
RadioButton[] RadButt = new RadioButton[11];
TextBox[] AnsText = new TextBox[11];
public Form2()
{
InitializeComponent();
// сховування всіх контейнерів
groupBox1.Visible = false;
groupBox2.Visible = false;
groupBox3.Visible = false;
groupBox4.Visible = false;
groupBox5.Visible = false;
if (File.Exists(cnfgFile))
{
// зчитування файлу конфігурації
XDocument conf = XDocument.Load(cnfgFile);
conf = XDocument.Load(cnfgFile);
foreach (XElement el in conf.Root.Elements())
{
if (el.Name == "path")
defPath = el.Value;
if (el.Name == "login")
login = DecryptFrom3Des(el.Value);
if (el.Name == "password")
password = DecryptFrom3Des(el.Value);
if (el.Name == "criterion5_min")
criterion5_min_value = Convert.ToInt16(el.Value);
if (el.Name == "criterion5_max")
criterion5_max_value = Convert.ToInt16(el.Value);
if (el.Name == "criterion4_min")
criterion4_min_value = Convert.ToInt16(el.Value);
if (el.Name == "criterion4_max")
criterion4_max_value = Convert.ToInt16(el.Value);
if (el.Name == "criterion3_min")
criterion3_min_value = Convert.ToInt16(el.Value);
if (el.Name == "criterion3_max")
criterion3_max_value = Convert.ToInt16(el.Value);
if (el.Name == "criterion2_min")
criterion2_min_value = Convert.ToInt16(el.Value);
if (el.Name == "time")
time = el.Value;
}
// завантаження даних в елементи контролю
passCnf.Text = password;
logCnf.Text = login;
tmCnf.Text = time;
criterion5_min.Text = criterion5_min_value.ToString();
criterion5_max.Text = criterion5_max_value.ToString();
criterion4_min.Text = criterion4_min_value.ToString();
criterion4_max.Text = criterion4_max_value.ToString();
criterion3_min.Text = criterion3_min_value.ToString();
criterion3_max.Text = criterion3_max_value.ToString();
criterion2_min.Text = criterion2_min_value.ToString();
label10.Text = "(текущая: " + defPath + " )";
}
}
// обробник кнопки створення файлу теста
private void Add_Click(object sender, EventArgs e)
{
groupBox2.Visible = false;
groupBox1.Visible = true;
AnsCount = CountScroll.Value;
InitControl();
Directory.CreateDirectory(@defPath + "/tests/");
filename = @defPath + "/tests/" + fileNM.Text + ".xml";
XDocument doc = new XDocument();
XElement library = new XElement("test");
XElement CountAnswer = new XElement("CountAnswer",AnsCount);
library.Add(CountAnswer);
doc.Add(library);
doc.Save(filename);
}
// обробник копки додавання записів в файл
private void addBtn_Click_1(object sender, System.EventArgs e)
{
XDocument doc = XDocument.Load(filename);
int rightAnsw = 0; // змінна правильної відповіді
for (i = 1; i< AnsCount+1 ; i++)
{
if (RadButt[i].Checked)
{
rightAnsw = i;
}
}
XElement question = new XElement("question");
XElement rightAnswer = new XElement("rightAnswer", EncrypTo3DES(rightAnsw.ToString()));
question.Add(rightAnswer);
XElement title = new XElement("text",EncrypTo3DES(textbox.Text));
question.Add(title);
XElement[] a = new XElement [11];
for (i = 1; i < AnsCount+1; i++)
{
a[i] = new XElement ("a" + i.ToString(),EncrypTo3DES( AnsText[i].Text));
question.Add(a[i]);
}
doc.Root.Add(question);
doc.Save(filename);
InputClear();
}
// ФУНКЦІЇ ШИФРУВАННЯ
// створення ключа шифрування
private static TripleDES Create3DES()
{
MD5 md5 = new MD5CryptoServiceProvider();
TripleDES des = new TripleDESCryptoServiceProvider();
des.Key = md5.ComputeHash(Encoding.Unicode.GetBytes("<Kb>lJyuw^%1dw5249*%$jsnw"));
des.IV = new byte[des.BlockSize / 8];
return des;
}
// функція кодування в 3DES
public static string EncrypTo3DES(string PlainText)
{
if (string.IsNullOrEmpty(PlainText))
{
return null;
}
TripleDES des = Create3DES();
ICryptoTransform ct = des.CreateEncryptor();
byte[] input = Encoding.Unicode.GetBytes(PlainText);
byte[] resArr = ct.TransformFinalBlock(input, 0, input.Length);
string result = Convert.ToBase64String(resArr);
return result;
}
// функція розкодування
public static string DecryptFrom3Des(string CypherText)
{
if (string.IsNullOrEmpty(CypherText))
{
return null;
}
byte[] b = Convert.FromBase64String(CypherText);
TripleDES des = Create3DES();
ICryptoTransform ct = des.CreateDecryptor();
byte[] output = ct.TransformFinalBlock(b, 0, b.Length);
return Encoding.Unicode.GetString(output);
}
// обробник кнопки відкриття файлу теста
private void button1_Click(object sender, EventArgs e)
// обробник кнопки задання шляху для збереження файлів програми
private void button2_Click(object sender, EventArgs e)
// обробник кнопки збереження налаштувань
private void button3_Click(object sender, EventArgs e)
{
try
{
if (password != CurrPassTextBox.Text)
MessageBox.Show(" Вы ввели неправильный текущий пароль");
else
if (passCnf.Text != AcceptPassTextBox.Text)
MessageBox.Show(" Подверждение пароля не совпадает с введенным новым паролем");
else
if ((tmCnf.Text == null) | (passCnf.Text == null) | (logCnf.Text == null))
MessageBox.Show(" Недостаточно введенных данных ");
else
{
XDocument doc = new XDocument(
new XElement("configuration",
new XElement("login", EncrypTo3DES(logCnf.Text)),
new XElement("password", EncrypTo3DES(passCnf.Text)),
new XElement("time", tmCnf.Text),
new XElement("path", defPath),
new XElement("criterion5_min", criterion5_min.Text),
new XElement("criterion5_max", criterion5_max.Text),
new XElement("criterion4_min", criterion4_min.Text),
new XElement("criterion4_max", criterion4_max.Text),
new XElement("criterion3_min", criterion3_min.Text),
new XElement("criterion3_max", criterion3_max.Text),
new XElement("criterion2_min", criterion2_min.Text)));
doc.Save(cnfgFile);
MessageBox.Show("Файл успешно создан и сохранен в D:/ProgTest/ ");
}
}
catch (Exception error)
{
MessageBox.Show(error.Message);
}
}
// функція очищення полів вводу даних по тесту
private void InputClear()
{
textbox.Text = "";
for (i = 1; i < AnsCount + 1; i++)
{
AnsText[i].Text = "";
}
textbox.Focus();
}
// Обробники різних пунктів меню
// "Выход из программы"
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
// "Настройка программы"
private void toolStripMenuItem2_Click(object sender, EventArgs e)
// обробник пункту меню "Создание теста"
private void toolStripMenuItem1_Click(object sender, EventArgs e)
// "Результаты"
private void toolStripMenuItem3_Click(object sender, EventArgs e)
// "Считывание из файла"
private void ReadFileMenu_Click(object sender, EventArgs e)
// Обробник кнопки видалення файлу з результатами
// Функція створення елементів контролю
private void InitControl()
{
int positionY = 0;
try
{
for (i = 1; i < AnsCount+1; i++)
{
RadButt[i] = new System.Windows.Forms.RadioButton(); // створюємо елемент
RadButt[i].Location = new System.Drawing.Point(47, positionY + 50); // встановлюємо необхідні властивості
RadButt[i].Name = "RadioButton" + i;
RadButt[i].Size = new System.Drawing.Size(25, 25);
RadButt[i].TabIndex = 0;
RadButt[i].Text = "";
RadButt[i].BackColor = Color.Transparent;
this.panel7.Controls.Add(RadButt[i]); // добавляемо на панель
positionY = positionY + 50;
}
positionY = 0;
for (i = 1; i < AnsCount + 1; i++)
{
AnsText[i] = new System.Windows.Forms.TextBox();
AnsText[i].Location = new System.Drawing.Point(77, positionY + 50);
AnsText[i].Name = "RadioButton" + i;
AnsText[i].Size = new System.Drawing.Size(666, 22);
AnsText[i].TabIndex = 0;
AnsText[i].BackColor = Color.FromArgb(64,64,64);
AnsText[i].ForeColor = Color.WhiteSmoke;
AnsText[i].BorderStyle = BorderStyle.None;
AnsText[i].Anchor = AnchorStyles.Right | AnchorStyles.Left | AnchorStyles.Top;
AnsText[i].Text = "";
this.panel7.Controls.Add(AnsText[i]);
positionY = positionY + 50;
}
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
// відображення положення скролл - бару
private void CountScroll_Scroll(object sender, ScrollEventArgs e)
// функція обробки rtf файлів
private void ReadTxt()
{
List<string> richBoxPar = new List<string>();
List<string> elements = new List<string>();
List<string> richBoxPar2 = new List<string>();
XDocument doc = new XDocument();
// завантажуємо rtf файл та розділяємо його по знаку абзаца
RichTextBox rtb = new RichTextBox();
rtb.LoadFile(@rtfFileName);
string[] s = rtb.Text.Split('\u000A');
for (i = 0; i < s.Count() ; i++)
{
richBoxPar.Add("\t" + s[i]);
}
double countString = richBoxPar.Count;
string question;
// обробка файлу з питаннями
// створюємо необхідні корньові елементи в файл
XElement library = new XElement("test");
XElement CountAnswer = new XElement("CountAnswer", AnsCount);
library.Add(CountAnswer);
doc.Add(library);
doc.Save(@outputXmlFile);
// заносемо інформацію під необхідними тегами
XDocument xdoc = XDocument.Load(@outputXmlFile);
i = 0;
XElement[] a = new XElement[20];
int index1 = (int)(countString / (AnsCount + 1));
for (int j = 1; Convert.ToDouble(j) < index1 + 1; j++)
{
XElement q = new XElement("question");
question = EncrypTo3DES( richBoxPar[i]);
XElement t = new XElement("text", question);
q.Add(t);
i++;
for (int k = 1; k < AnsCount+1; k++)
{
a[k] = new XElement("a" + k.ToString(), EncrypTo3DES(richBoxPar[i]));
q.Add(a[k]);
i++;
}
xdoc.Root.Add(q);
}
xdoc.Save(@outputXmlFile);
// обробка файлу з відповідями
XDocument xdoc2 = XDocument.Load(@outputXmlFile);
xel2 = xdoc2.Elements();
RichTextBox rtb2 = new RichTextBox();
rtb.LoadFile(@rtfFileNameAnswers);
string[] s2 = rtb.Text.Split('\u000A');
double countStringAnswer = s2.Length;
i = 0;
for (int j = 1; j < countStringAnswer +1; j++)
{
XElement rA = new XElement("rightAnswer", EncrypTo3DES( s2[i]));
xel2.Elements("question").ElementAt(i).Add((rA));
i++;
}
xdoc2.Save(@outputXmlFile);
}
// кнопка вибору файлу з питаннями
private void button6_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.Filter = "RTF|*.rtf";
openFileDialog1.Title = "Select a rtf File";
if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
rtfFileName = Convert.ToString(openFileDialog1.FileName);
richTextBox1.LoadFile(rtfFileName);
richTextBox1.SelectAll();
richTextBox1.SelectionFont = new System.Drawing.Font("Segoe UI", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
richTextBox1.SelectionColor = Color.Snow;
label16.Text = rtfFileName;
}
}
// кнопка вибору файлу з відповідями
private void button7_Click(object sender, EventArgs e)
// кнопка обробки файлів
private void button8_Click(object sender, EventArgs e)
{
try
{
AnsCount = hScrollBar1.Value;
panel1.Visible = false;
outputXmlFile = @defPath + "/tests/" + textBox1.Text + ".xml";
ReadTxt();
MessageBox.Show("Успешно преобразовано");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
// обробка скроллбару
private void hScrollBar1_Scroll(object sender, ScrollEventArgs e)
{
label18.Text = "Выберите колличество ответов " + " " + hScrollBar1.Value.ToString();
}
// обробник кнопки обробки резульатів тестування
private void button4_Click(object sender, EventArgs e)
{
double Summ = 0;
double Count = 0;
string name = "";
string group = "";
int mark = 0;
try
{
if (FilterNameValue.Text == "")
MessageBox.Show(" Вы не применили фильтр по фамилии ");
else
if (FilterGroupValue.Text == "")
MessageBox.Show(" Вы не применили фильтр по группе");
else
{
for (int i = 0; i < dataGridView1.RowCount; i++)
{
if ((bool)dataGridView1[0, i].EditedFormattedValue == true)
{
name = dataGridView1.Rows[i].Cells[1].Value.ToString();
group = dataGridView1.Rows[i].Cells[2].Value.ToString();
Summ += Convert.ToInt16(dataGridView1.Rows[i].Cells[3].Value);
Count++;
}
}
// вираховуємо оцінку по критеріям оцінювання
if ((Summ <= criterion5_max_value) && (Summ >= criterion5_min_value))
mark = 5;
if ((Summ <= criterion4_max_value) && (Summ >= criterion4_min_value))
mark = 4;
if ((Summ <= criterion3_max_value) && (Summ >= criterion3_min_value))
mark = 3;
if (Summ < criterion2_min_value)
mark = 2;
ResultString.Text = " Итоговый результат: \n Фамилия: " + name + "\n Группа: " + group + "\n Оценка: " + mark.ToString() + "\n Результат по даным " + Count.ToString() + " тестов" + "\n Проверьте внимательно данные.";
report_StudentName = name;
report_StudentGroup = group;
report_Mark = mark;
report_TestsCount = (int)Count;
processed = true;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
// функція преперегляду rtf файлів
private void Preview()
{
// розділення файлів по абзацам
string[] s = richTextBox1.Text.Split('\u000A');
string[] s2 = richTextBox2.Text.Split('\u000A');
label34.Text = "";
int rowStart = 0, rowLen = 0;
richTextBox1.SelectAll();
richTextBox2.SelectAll();
// задаємо формат данним в richtextbox2
richTextBox2.SelectionFont = richTextBox1.SelectionFont = new System.Drawing.Font("Veranda", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
// вивід даних по файлам
label33.Text = "Текущий документ с вопросами имеет " + s.Count() + " абзацев, " + " а документ с ответами - " + s2.Count() + ".\n";
// деякий аналіз файлів
if (s.Count() % (hScrollBar1.Value+1) == 0)
{
label33.Text += "Файл с вопросами содержит " + (int)(s.Count() / (hScrollBar1.Value+1)) + " вопросов \n";
label33.ForeColor = Color.LightSkyBlue;
}
else
{
label33.Text += "Ошибка! Файл с вопросами имеет лишние или недостающие пункты \n";
label33.ForeColor = Color.LimeGreen;
}
if (s2.Count() != (s.Count() / (hScrollBar1.Value + 1)))
{
label34.Text = "Ошибка! Файл с ответами имеет лишние или недостающие пункты. \n Не реомендовано приступать к обработке.Проверьте исходные файлы \n";
label34.ForeColor = Color.LimeGreen;
}
else
{
label34.Text = "Можно приступать к обработке, ошибок не обнаружено";
label34.ForeColor = Color.LightSkyBlue;
}
// розфарбовка питань і відповідей в різні кольори
for (int k = 0; k < s.Length; k++)
{
rowStart = richTextBox1.Text.IndexOf(s[k], rowStart + rowLen);
rowLen = s[k].Length;
richTextBox1.Select(rowStart, rowLen);
Color rowColor = k % (hScrollBar1.Value + 1) == 0 ? Color.DodgerBlue : Color.Snow;
richTextBox1.SelectionColor = rowColor;
richTextBox1.SelectionFont = new System.Drawing.Font("Segoe UI", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
}
}
// обробник кнопки преперегляду
private void button9_Click(object sender, EventArgs e)
// кнопка скриття області преперегляду
private void button10_Click(object sender, EventArgs e)
// анімація кнопок
#region animation
// обробник кнопків відкриття файлів в редакторі операційної системи
private void button11_Click(object sender, EventArgs e)
{
Process p1 = new Process();
p1.StartInfo.FileName = rtfFileName;
p1.Start();
}
private void button12_Click(object sender, EventArgs e)
// зміна параметрів фільтру при зміні тексту в текстбоксі
private void FilterNameValue_TextChanged(object sender, EventArgs e)
{
bindingSource1.Filter =string.Format( "Name LIKE '{0}' and Group LIKE '{1}' ", FilterNameValue.Text, FilterGroupValue.Text);
if ((FilterNameValue.Text == "")&&(FilterGroupValue.Text == ""))
bindingSource1.Filter = null;
}
private void FilterGroupValue_TextChanged_1(object sender, EventArgs e)
{
bindingSource1.Filter = string.Format("Group LIKE '{0}' and Name LIKE '{1}' ", FilterGroupValue.Text, FilterNameValue.Text);
if ((FilterGroupValue.Text == "") && (FilterNameValue.Text == ""))
bindingSource1.Filter = null;
}
// кнопка сортування записів по прізвищу
private void button14_Click(object sender, EventArgs e)
// Функція зчитування xml файлу в datagridview
private void LoadDataGridView()
{
if (File.Exists(@defPath + "/result.xml"))
{
xdoc = XDocument.Load(@defPath + "/result.xml");
xel = xdoc.Elements();
int index2 = xel.Elements().Count();
while (dataGridView1.Rows.Count != 0)
{
dataGridView1.Rows.RemoveAt(dataGridView1.Rows.Count - 1);
}
dataSet1.ReadXml(@defPath + "/result.xml");
bindingSource1 = new BindingSource(dataSet1, dataSet1.Tables[0].TableName);
dataGridView1.DataSource = bindingSource1;
dataGridView1.Columns["Name"].HeaderText = "Фамилия";
dataGridView1.Columns["Group"].HeaderText = "Группа";
dataGridView1.Columns["RightAnsw"].HeaderText = "Колличество правильных ответов";
dataGridView1.Columns["RightAnsw"].Width = 100;
dataGridView1.Columns["File"].HeaderText = "Файл";
dataGridView1.Columns["File"].MinimumWidth = 200;
dataGridView1.Columns["Time"].HeaderText = "Дата";
dataGridView1.Columns["Time"].MinimumWidth = 200;
}
else
{
MessageBox.Show("Не проведено ни одного теста");
}
}
// кнопка відображення таблиці результатів
private void button15_Click(object sender, EventArgs e)
// кнопка для прибрання всіх фільтрів
private void button13_Click_1(object sender, EventArgs e)
// кнопка створення звіту
private void CreateReportButton_Click(object sender, EventArgs e)
{
try
{