
- •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)
If (processed)
{
//передача параметрів в файл звіту
report_Name = Report_NameValue.Text;
ReportParameter parameter1 = new ReportParameter("StudName", report_StudentName);
reportViewer1.LocalReport.SetParameters(new ReportParameter[] { parameter1 });
ReportParameter parametr2 = new ReportParameter("GroupValue", report_StudentGroup);
reportViewer1.LocalReport.SetParameters(new ReportParameter[] { parametr2 });
ReportParameter parametr3 = new ReportParameter("MarkValue", report_Mark.ToString());
reportViewer1.LocalReport.SetParameters(new ReportParameter[] { parametr3 });
ReportParameter parametr4 = new ReportParameter("testCount", report_TestsCount.ToString());
reportViewer1.LocalReport.SetParameters(new ReportParameter[] { parametr4 });
ReportParameter parametr5 = new ReportParameter("ReportName", report_Name);
reportViewer1.LocalReport.SetParameters(new ReportParameter[] { parametr5 });
// скриття всіх панелей та відображення панелі зі звітом
panel8.Hide();
panel9.Hide();
panel10.Hide();
panel11.Show();
this.reportViewer1.RefreshReport();
}
else
MessageBox.Show(" Вы не произвели обработку");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
// скриття панелі зі звітом
private void button16_Click(object sender, EventArgs e)
}
// Лістинг Form3
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.Timers;
using System.IO;
using System.Xml;
using System.Xml.Linq;
namespace Mytest
{
public partial class Form3 : Form
{
string cnfgFile = Environment.GetFolderPath(Environment.SpecialFolder.Personal) + @"/cnfg.xml"; // шлях до файлу конфігурації
XDocument xdoc;
IEnumerable<XElement> xel;
// динамічно створювані елементи контролю
List<Label> lstOfLabel = new List<Label>();
List<RadioButton> lstOfRadBut = new List<RadioButton>();
int[] test; // массив для заповнення випадковими числами
int tm = 0; // кількість хвилин на тест
int remTime = 0; // залишившийся час
int CAnsw = 0; // кількість варіантів відповідей
int right; // правильна відповідь
int answer = 0; // вибрана відповідь
int CountAnsw = 0; // кількість правильних відповідей
int CQ = 0; // загальна кількість питань
int cv = 0; //
string group; // група
double percent; // процент правильних відповідей
double rByAll; // співвідношення загальної кількості питань до кількості правильних відповідей
string filenmResult; // шлях до файлу з результатами
string filename; // шлях до файлу з тестом
string dPath; // шлях , указаний в конфігурації по замовчуванням
string TestPath; // шлях до папки, де зберігаються файли тесту
string BuffPath; // буфферна змінна, яка зберігає нинішню позицію в дереві файлів
string NameOutput;
public Form3()
{
InitializeComponent();
try
{
XDocument conf = XDocument.Load(cnfgFile);
conf = XDocument.Load(cnfgFile); // завантажуємо xml документ
// зчиткємо дані з конфігуратора
foreach (XElement el in conf.Root.Elements())
{
{
if (el.Name == "path")
dPath = el.Value;
if (el.Name == "time")
tm = Convert.ToInt16(el.Value);
}
}
// ініціалізуємо змінні
filenmResult = @dPath + "/result.xml";
TestPath = @dPath + "/tests/";
BuffPath = @TestPath;
ReadFolder(); // відображення даних папки в treeview
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
private void goTest_Click(object sender, EventArgs e) // дії при старті тестування
{
// перевірка введенних даних
if ((textBox1.TextLength < 1) || (textBox2.Text == ""))
{
MessageBox.Show("Невозможно перейти к тестированию. Не введены данные либо данных недостаточно", "Ошибка");
}
else if ((textBox1.TextLength < 3) || (textBox1.TextLength < 3))
{
MessageBox.Show("Данные указаны некорректно.\nПоле \"Фамилия\" должна содержать не менее 3-ти символов.\nПоле \"Номер группы\" - не менее 3-х", "Ошибка");
}
else
try
{
// скриваємо непотрібні контейнери
panel7.Visible = false;
panel6.Visible = true;
panel8.Visible = true;
label3.Visible = true;
button1.Visible = false;
AnswBut.Visible = true;
// ініціалізація таймерів
timer1.Interval = tm * 60000;
remTime = tm;
timer2.Enabled = true;
timer1.Enabled = true;
// інізіалізація змінних
rByAll = 0;
percent = 0;
CountAnsw = 0;
// відображення даних по стану тесту
label1.Text = "Осталось времени до конца теста:" + " " + remTime.ToString() + " " + "минут" ;
label1.Visible = true;
label3.Text = "Вопрос: " + (cv).ToString() + " из " + CQ.ToString();
xdoc = XDocument.Load(filename); //завантажуємо xml документ
xel = xdoc.Elements();
CQ = (xel.Elements().Count()); // вираховуємо кількість запитань в файлі
CQ = CQ - 1;
// зчитуємо дані з файлу , які містять кількість варіантів відповідей
foreach (XElement el in xdoc.Root.Elements())
{
if (el.Name == "CountAnswer")
CAnsw = Convert.ToInt16(el.Value);
}
InitControl(); // ініціалізація елементів контролю
test = new int[CQ]; // створення массиву випадкових чисел для рандомізації данних з xml
Boolean[] b; // допоміжний массив
// b[i] == true, якщо число i записано в массив test
b = new Boolean[CQ];
for (int i = 0; i < CQ; i++)
{
b[i] = false;
}
Random rnd = new Random();
int r; // випадкове число
for (int i = 0; i < CQ; i++)
{
do
r = rnd.Next(CQ);
while (b[r] == true);
test[i] = r;
b[r] = true;
}
cv = 0;
int labelCV = cv;
// скриття непотрібних контейнерів та відображення контейнеру, який мвстить дані тесту
Testing.Visible = true;
Input.Visible = false;
title.Visible = true;
qw(test[cv]); // відобразити перше питання
cv++; // перехід до наступнього питання
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
// функція зчитування питання з xml файлу
private void qw(int i)
{
// питання
title.Text = Form2.DecryptFrom3Des(xel.Elements("question").ElementAt(i).Element("text").Value);
// правильна відповідь
right = System.Convert.ToInt32(Form2.DecryptFrom3Des((xel.Elements("question").ElementAt(i).Element("rightAnswer").Value)));
// варіанти відповідей
for (int j = 0; j < CAnsw ; j++)
{
lstOfLabel[j].Text = Form2.DecryptFrom3Des(xel.Elements("question").ElementAt(i).Element("a" + (j+1).ToString()).Value);
}
}
private void showResult() // функция відображення результатів
{
// скриття непотрібних контейнерів
panel8.Visible = false;
title.Visible = false;
button1.Visible = true;
panel6.Visible = false;
panel7.Visible = true;
// зупинка таймеру
timer1.Interval = tm * 60000;
timer2.Enabled = false;
group = textBox2.Text;
// вираовуємо дані тестування
rByAll = (Convert.ToDouble(CountAnsw) / Convert.ToDouble(CQ));
percent = (rByAll * 100.00);
// скриття елементів контролю
AnswBut.Visible = false;
label1.Visible = false;
label3.Visible = false;
// відображення данних
label4.Visible = true;
label4.Text = " Тестирование завершено!\n Фамилия: " + textBox1.Text + "\n Группа: " + group + "\n Всего вопросов: " + CQ.ToString() + "\n Правильных ответов: " + CountAnsw.ToString() + " (" + percent.ToString() + "%)";
for (int j = 0; j < CAnsw ; j++)
{
lstOfRadBut[j].Visible = false;
lstOfLabel[j].Visible = false;
}
SaveResult(); // зберігаємо дані в файл
}
// Обробник натискання кнопки відповіді
private void AnswBut_Click(object sender, EventArgs e)
{
if (answer == right)
CountAnsw++; // перевірка вибраного варіанту відповіді та правильного варіанту
if (cv < CQ)
{
// відображення наступного питання
qw(test[cv]);
cv++;
label3.Text = "Вопрос: " + (cv).ToString() + " из " + CQ.ToString();
}
else
{
// більше питань немає
showResult();
}
}
// дії таймерів
private void timer1_Tick(object sender, EventArgs e)
private void timer2_Tick(object sender, EventArgs e)
// відображення файлів та папок в певній директорії
private void ReadFolder()
{
treeView1.Nodes.Clear();
BuffPath = @TestPath;
DirectoryInfo dir = new DirectoryInfo(TestPath);
// отримуємо список папок та заносимо їхні імена в treeview
DirectoryInfo[] dirs = dir.GetDirectories();
foreach (DirectoryInfo subdir in dirs)
{
treeView1.Nodes.Add(subdir.Name,subdir.Name,0);
}
// отримуємо список xml файлів та заносимо їх в treeview
foreach (FileInfo files in dir.GetFiles("*.xml"))
{
treeView1.Nodes.Add(files.Name,files.Name.Replace(".xml","_файл").Replace(".XML","_файл"),1);
}
}
// Функція збереження результатів в xml файл
private void SaveResult()
{
try
{
// якщо файл вже існує то заносимо в нього нові данні
if (File.Exists(filenmResult))
{
XDocument doc = XDocument.Load(filenmResult);
XElement result = new XElement("result",
new XElement("Name", textBox1.Text),
new XElement("Group", group),
new XElement("RightAnsw", CountAnsw),
new XElement("File", NameOutput),
new XElement("Time", DateTime.Now.ToString()));
doc.Root.Add(result);
doc.Save(filenmResult);
saveResultText.Text = "Данные добавлены в файл";
}
// інакше створюємо новий файл з необхідними тегами
else
{
XDocument doc2 = new XDocument(
new XElement("results",
new XElement("result",
new XElement("Name", textBox1.Text),
new XElement("Group", group),
new XElement("RightAnsw", CountAnsw),
new XElement("File", NameOutput),
new XElement("Time", DateTime.Now.ToString()))));
doc2.Save(filenmResult);
saveResultText.Text = "Успешно создан файл и данные добавлены в файл";
}
saveResultText.Visible = true;
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
// функція ініціалізації елементів контролю
private void InitControl()
{
int positionY = -25;
for (int j = 0; j < CAnsw; j++)
{
RadioButton RadButt = new RadioButton(); // створюємо контрол
// встановлюємо необхідні властивості
RadButt.Location = new System.Drawing.Point(160, positionY + 50);
RadButt.Name = "RadButt" + j.ToString();
RadButt.Size = new System.Drawing.Size(25, 25);
RadButt.TabIndex = 0;
RadButt.Text = "";
RadButt.BackColor = Color.Transparent;
this.panel8.Controls.Add(RadButt); //додаємо контрол в контейнер
RadButt.Click += (s, e) =>
{
tring name = (s as RadioButton).Name;
name = name.Replace("RadButt", "");
answer = Convert.ToInt16(name)+1;
for (int k = 0; k < CAnsw; k++)
{
lstOfLabel[k].ForeColor = Color.LightGray;
}
lstOfLabel[Convert.ToInt16(name)].ForeColor = Color.LightSkyBlue;
};
// додаємо котрол в список
lstOfRadBut.Add(RadButt);
positionY = positionY + 50;
}
positionY = -25;
for (int j = 0; j < CAnsw; j++)
{
Label QuestionText = new Label();
QuestionText.Location = new System.Drawing.Point(190, positionY + 50);
QuestionText.Name = "TextQuest" + j.ToString();
QuestionText.MinimumSize = new System.Drawing.Size(50, 25);
QuestionText.MaximumSize = new System.Drawing.Size(700, 50);
QuestionText.AutoSize = true;
QuestionText.TabIndex = 0;
QuestionText.Text = "";
QuestionText.BackColor = Color.Transparent;
QuestionText.ForeColor = Color.LightGray;
QuestionText.MouseLeave += (s, e) => (s as Label).Font = new System.Drawing.Font(" Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
QuestionText.MouseHover += (s, e) => (s as Label).Font = new System.Drawing.Font(" Segoe UI", 12F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
QuestionText.Click += (s, e) =>
{
for (int k = 0; k < CAnsw ; k++)
{
lstOfLabel[k].ForeColor = Color.LightGray;
}
(s as Label).ForeColor = Color.LightSkyBlue;
string name = (s as Label).Name;
name = name.Replace("TextQuest", "");
answer = Convert.ToInt16(name) +1;
lstOfRadBut[Convert.ToInt16(name)].Focus();
};
QuestionText.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.panel8.Controls.Add(QuestionText);
lstOfLabel.Add(QuestionText);
positionY = positionY + 50;
}
}
// кнопка "Пройти ище раз"
private void button1_Click_1(object sender, EventArgs e)
{
}
// відображення файлів у папкі
private void FolderFilesShow(string path)
{
try
{
treeView1.Nodes.Clear();
DirectoryInfo dir = new DirectoryInfo(path);
DirectoryInfo[] dirs = dir.GetDirectories();
string NameWithExtension;
foreach (FileInfo files in dir.GetFiles ("*.xml"))
{
NameWithExtension = files.Name;
treeView1.Nodes.Add(files.Name,(NameWithExtension.Replace(".xml","_файл").Replace(".XML","_файл")),1);
}
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
// кнопка вибору папки
private void button2_Click(object sender, EventArgs e)
// кнопка вибору файлу
private void button3_Click(object sender, EventArgs e)
// кнопка переміщення в корневу директорію
private void button4_Click(object sender, EventArgs e)
// Анімація кнопок
#region animation
}
}
Додаток Б. Форми вхідних документів
Вхідними даними є:
прізвище та група студента;
ім’я файлу тесту;
логін та пароль для входу в розширений режим;
ім’я створюваного файлу;
список питань та відповідей на них з поміткою правильної відповіді;
шлях до оброблюваних rtf файлів;
кількість хвилин на проходження тесту;
шлях до папки для збереження файлів тесту та інших файлів;
критерії оцінювання.
Додаток Б.1 – Форма введення даних тестування
Додаток Б.2 – Форма входу в розширений режим
Додаток Б.3 – Форма створення тесту
Д
одаток
Б.4 – Форма додання питань
Додаток Б.5 – Форма налаштування програми
Додаток Б.6 – Форма обробки rtf файлів
Додаток В. Форми вихідних документів
В якості вихідної інформації є:
xml файл з даними теста;
xml файл з результатами тестування;
xml файл з даними налаштування програми;
прізвище, група, оцінка студента, пройшовшого тестування.
Додаток В.1 – Форма виводу результата тестування
?xml version="1.0" encoding="utf-8"?>
<test>
<CountAnswer>3</CountAnswer>
<question>
<text>/wUaqFjIb9KLZDlnTEHL88wxdEcRuROKnHpLpbGrYl6X2Hr3WmKn+Lc+kJ3FwW81yzHrLSLQQwfK8GjGOhT/THay2sZXItdWQMyU1ag9rGGQi7H5jAWGA2y4JXOBCHNE8Ik//i7L7R1ss/KRtmxDmBLxLE8P/TXGMdbN+lDbhdbexXArzFp9Qb62HPf/HSa+0erAKUlNMMU=</text>
<a1>/wUaqFjIb9Kn0XTMakDbBrJVOdQUhhdn4XPjQofmAfZZRfOtRlQD3TUdbSFLofh+G9FJQdvJZmi4SwRj7/PTiwdKoSdp4Zb8h9zPhbAum6SMLUzAnECZzSVFvvbSHT4uRdgU91gEQ/5ldP20THW+nm9oke/9uYJTtMIWoWdtAr4DBN5trmtvP7QTXnsw4G/Ah6aR7NsspE4FM2xBkbWczg==</a1>
<a2>y18xXtAc9VNWMcO4xXywVeB7EDoYLAqML4k57oujaE965zhwuVTPSTnDq26plWtq</a2>
<a3>Tpc1vXoyGJ3N4PkfdY8XRtvIMH5JSRanrAzrtWBJrHCviFj7pIkFO6PWWBe4sTuV+jhsmRO0sqFuSYIOUx0jmNVotfC95W1YiBe+Z8aRpkJ2PKVbMgxOTeZ/Ea1O/FqXBvqgyVqTU8Eb3cm+kzdj/07whcsmKnOqbPHVNVFGK1A=</a3>
<rightAnswer>0Gja2MeWefg=</rightAnswer>
</question>
</test>
Додаток В.2 – Зразок вихідного xml файлу з даними тесту
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<login>0Gja2MeWefg=</login>
<password>0Gja2MeWefg=</password>
<time>10</time>
<path>D:\ProgTest</path>
<criterion5_min>28</criterion5_min>
<criterion5_max>40</criterion5_max>
<criterion4_min>20</criterion4_min>
<criterion4_max>28</criterion4_max>
<criterion3_min>12</criterion3_min>
<criterion3_max>20</criterion3_max>
<criterion2_min>12</criterion2_min>
</configuration>
Додаток В.3 – зразок вихідного xml файлу з даними налаштування програми
<?xml version="1.0" encoding="utf-8"?>
<results>
<result>
<Name>Трещев</Name>
<Group>б-06</Group>
<RightAnsw>8</RightAnsw>
<File>Економічний аналіз білет 7_файл</File>
<Time>04.06.2013 9:07:32</Time>
</result>
</results>
Додаток В.4 – зразок вихідного xml файлу з результатами тестування.
Висновки
Метою дипломного проекту є розробка програми «ДержТест» для проведення державного екзамену зі спеціальності бухгалтерський облік, яка буде забезпечувати проведення тестового контролю, формування тестів, зчитування питань та відповідей з rtf файлів, збереження результатів та їх перегляд.
За час розробки дипломного проекту, я пройшов весь шлях: від розробки постановки задачі, написання та налагодження програми, тестування і аналіза отриманих результатів. Було скорочено час на розробку програмного продукту завдяки використанню UML діаграм на етапі проектування. Для написання програми використовувалася сучасна мова програмування С# та Framework Microsoft dot NET 4.5.
Розробка проводилася на базі інтегрованого середовища програмування MS Visual Studio 2012.
Для шифрування інформації тесту був використаний асинхронний алгоритм шифрування TripleDES, що дозволило захистити вхідну та вихідну інформацію для режиму тестування.
Був використаний сучасний елемент інтерфейсу Microsoft Report Viewer для побудови та виводу звітів та експорту даних у формати сучасної електронної документації : MS Word, MS Excel, Adobe PDF.
Дипломний проект оформленно за вимогами державних стандартів.
Перелік посилань
1. Вірт Н. Алгоритми і структури даних. «Мир», 2006, 478 стор.
2. Мельников А.В, Цитовіч П.Л., Цитович Б.Ф. Основні принципи автоматизації проектування навчальної системи. «Эксмо», 2007, 413 стор.
3. Анелікова Л.А. Тести. Інформатика та інформаційні технології. «Дрохва», 2004, 357 стор.
4. http://www.amd.com/us/products/Pages/products.aspx
5. Олег Колесніченко, Ігор Шишигин, Валентин Соломенчук. Апаратні засоби PC. «БХВ-Петербург», 2010, 800 с.
6. Скотт Мюллер. Модернізація та ремонт ноутбуків. «Вільямс», 2005, 688 стор.
7. Карп Д. Windows 7. для професіоналів. «Символ», 2009, 560 стор.
8. Фаронов В.В. Програмування на мові С #. «Аспект-Пресс», 2007,241 стор.
9. Раттц Д -. LINQ мова інтегрованих запитів в C # 2008 для професіоналів «Вільямс», 2007, 546 стор.
10. Троелсен Е. С # і платформа. NET. «BHV», 2006. 796 стор.
11. Шилдт Герберт. Повний довідник по C #. «Вільямс», 2004,748 стор.
12. Агуров Павло. C #. Розробка компонентів у MS Visual Studio 2005-2008. 2008, 467 стор .
13. Липа В.В. Методи забезпечення якості великомасштабних програмних засобів. М.: Сінтег, 2007, 561 стор.
14. Тампре Л. Введення в тестування програмного забезпечення: Пер. з англ. - М.: "Вільямс", 2008, 657 стор.
15.В.Ц Жидецький. Охорона праці користувачів комп’ютерів. Львів, «Афіша», 2000, 174 стор.