- •1 Внешнее описание
- •Анализ предметной области
- •Функциональная спецификация
- •2 Техническое задание на автоматизированную систему
- •3 Программирование
- •Описание классов и интерфейсов
- •3.2 Диаграмма классов
- •4 Клиентское приложение
- •4.1 Структура
- •4.2 Проектирование графического интерфейса
- •5 Тестирование
5 Тестирование
Для тестирования программы производились различные манипуляции с данными.
Проводились следующие тесты:
Тест 1 – Пустое значение в обязательном поле ввода данных, помеченном символом «*», изображен на рисунке 13:
Рисунок 13 – Ввод пустого значения в поле «Отчество»
Сообщение, которое будет показано пользователю после ввода пустого значения, представлено на рисунке 14.
Рисунок 14 – Ошибка при вводе пустого значения
Тест 2 – Попытка ввода текста в числовое поле, изображен на рисунке 15:
Рисунок 15 – Ввод текста в поле «Стоимость»
Сообщение, которое будет показано пользователю после ввода текста вместо числового значения, представлено на рисунке 16.
Рисунок 16– Ввод некорректных данных
Тест 3 – В полях ввода справа и слева от введенных данных встречаются пробелы. В этом случае они не учитываются и данные в журнал записываются без них, изображен на рисунке 17:
Рисунок 17 – Встречаются пробелы слева и справа от введенных данных
Тест 4 - Открытие некорректного XML-файла, изображен на рисунке 18:
Рисунок 18 – Попытка открыть некорректный XML-файл
А так же были проведены другие операции в хаотическом порядке, призванные выявить ошибки в программе.
Тестирование выявило мелкие недочеты, которые впоследствии были устранены.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
-
Э. Троелсен. С# и платформа .NET. Библиотека программиста. - СПб.: Питер, 2004. —796 с.: ил.
-
Е.А. Жоголев. «Технология программирования» - М., Научный мир, 2004, 216 с
-
Т. А. Павловская. «С#. Программирование на языке высокого уровня. Учебник для вузов» - СПб.: Питер, 2007. – 432 с.
-
Microsoft Developer Network(MSDN). [Электронный ресурс]. – Режим доступа: msdn.microsoft.com, свободный.
-
СТО 01.04 – 2005. Работы студентов. Общие требования и правила оформления. – введ. 2005 – 04 – 01. – Архангельск: Изд-во Арханг. гос. техн. ун-та, 2005.
ПРИЛОЖЕНИЕ А
Листинг библиотеки классов
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;
using System.IO;
namespace KR
{
public class LoadAndSave
{
#region Метод LoadXML - загрузка данных из файла
public static ListShop LoadXML(string filename, ListShop listshop)
{
XmlSerializer Serializer = new XmlSerializer(typeof(ListShop));
try
{
using (StreamReader reader = new StreamReader(filename))
{
listshop = (ListShop)Serializer.Deserialize(reader);
}
}
catch (FileNotFoundException)
{
string newXML = @"<?xml version=""1.0"" encoding=""utf-8""?>" + '\n' + @"<ListKafe xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"">" + '\n' + "<AllKafe />" + '\n' + "</ListKafe>";
using (StreamWriter writer = new StreamWriter(filename))
{
writer.Write(newXML);
}
}
return listshop;
}
#endregion
#region Save - сохранение экземляра класса Shop в файл
public static bool Save(ListShop listshop, string filename)
{
XmlSerializer sr = new XmlSerializer(listshop.GetType());
StringBuilder sb = new StringBuilder();
StreamWriter SW = new StreamWriter(filename);
sr.Serialize(SW, listshop);
SW.Close();
return true;
}
#endregion
}
public interface IFIOtoString
{
string FIOtoString();
}
#region классы (кафе, сотрудник,блюдо, заказ и др.) и интерфейсы
public class ListShop
{
public List<Worker> AllWorker = new List<Worker>();
public List<Food> AllFood = new List<Food>();
public List<Sale> AllSale = new List<Sale>();
public List<Check> AllCheck = new List<Check>();
}
public class Man
{
string name;
string surname;
string ot;
public string Name
{
get { return name; }
set { name = value; }
}
public string Ot
{
get { return ot; }
set { ot = value; }
}
public string Surname
{
get { return surname; }
set { surname = value; }
}
public Man()
{
name = "";
surname = "";
ot = "";
}
public Man(string Name, string Surname, string Ot)
{
name = Name;
surname = Surname;
ot = Ot;
}
}
[Serializable]
public class Worker : Man, IFIOtoString
{
DateTime ustrdate;
string twnumber;
string wmail;
public DateTime Ustrdate
{
get { return ustrdate; }
set { ustrdate = value; }
}
public string Twnumber
{
get { return twnumber; }
set { twnumber = value; }
}
public string Mail
{
get { return wmail; }
set { wmail = value; }
}
public string FIOtoString()
{
return Name + " " + Ot + " " + Surname;
}
}
[Serializable]
public class Food
{
int id;
string name;
string ingr;
int price;
int kol;
public int ID
{
get { return id; }
set { id = value; }
}
public int Kol
{
get { return kol; }
set { kol = value; }
}
public string Name
{
get { return name; }
set { name = value; }
}
public string Ingr
{
get { return ingr; }
set { ingr = value; }
}
public int Price
{
get { return price; }
set { price = value; }
}
}
[Serializable]
public class Sale : Worker, IFIOtoString
{
Food foodsale;
DateTime date;
Worker worker;
int kolv;
public Food Food
{
get { return foodsale; }
set { foodsale = value; }
}
public DateTime Date
{
get { return date; }
set { date = value; }
}
public Worker Worker
{
get { return worker; }
set { worker = value; }
}
public int Kolv
{
get { return kolv; }
set { kolv = value; }
}
public Sale()
{
foodsale = new Food();
date = new DateTime();
worker = new Worker();
}
public Sale(Food Food, DateTime Date, Worker Worker)
{
foodsale = Food;
date = Date;
worker = Worker;
}
}
public class Check
{
private List<Sale> sales = new List<Sale>();
private DateTime printTime;
private double cost=0;
private string printText="";
public DateTime PrintTime
{
get { return printTime; }
}
public string PrintText
{
get { return printText; }
}
public Check( IEnumerable<Sale> newSales)
{
sales.AddRange(newSales);
foreach (Sale sale in sales)
{
cost += sale.Food.Price*sale.Kolv;
}
}
public Check(Sale newSale)
{
sales.Add(newSale);
cost += newSale.Food.Price*newSale.Kolv;
}
public Check()
{
}
public void AddSale(IEnumerable<Sale> newSales)
{
sales.AddRange(newSales);
foreach (Sale sale in sales)
{
cost += sale.Food.Price * sale.Kolv;
}
}
public void AddSale(Sale newSale)
{
sales.Add(newSale);
cost += newSale.Food.Price * newSale.Kolv;
}
public double Cost
{
get { return cost; }
}
public string PrintCheck()
{
int temp=0;
printTime = DateTime.Now;
StringBuilder checkText = new StringBuilder();
checkText.AppendLine("*** Кафе ***");
checkText.AppendLine("Заказы :");
foreach (Sale sale in sales)
{
temp++;
checkText.AppendLine(String.Format("{0}: {1} - {2}*{3} = {4} этот заказ обслуживал {5} {6}", temp, sale.Food.Name,
sale.Food.Price, sale.Kolv, sale.Food.Price*sale.Kolv,sale.Worker.Name,sale.Worker.Surname));
}
checkText.AppendLine(string.Format("Итоговая стоимость {0}", cost));
checkText.AppendLine(string.Format("{0}",printTime));
checkText.AppendLine("***Спасибо за покупку****");
printText = checkText.ToString();
return checkText.ToString();
}
}
#endregion
}
ПРИЛОЖЕНИЕ Б
Листинг клиентского приложения
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;
namespace KR
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
ListShop ListShops = new ListShop();
int sel1 = 0;
int sel2 = 0;
int sel3 = 0;
int sel4 = 0;
private void button2_Click(object sender, EventArgs e) // добавление нового сотрудника
{
if ((textBox1.Text.Trim() == "") || (textBox2.Text.Trim() == "") || (textBox3.Text.Trim() == ""))
{
MessageBox.Show("Не все обязательные поля заполнены");
return;
}
Worker wrk = new Worker();
wrk.Name = textBox2.Text.Trim();
wrk.Ot = textBox3.Text.Trim();
wrk.Surname = textBox1.Text.Trim();
wrk.Twnumber = textBox4.Text.Trim();
wrk.Mail = textBox5.Text.Trim();
wrk.Ustrdate = dateTimePicker1.Value;
ListShops.AllWorker.Add(wrk);
MessageBox.Show("Новый сотрудник добавлен");
button1_Click(sender, e);
}
private void button1_Click(object sender, EventArgs e) // обновление
{
dataGridView1.Rows.Clear();
for (int i = 0; i < ListShops.AllWorker.Count; i++)
{
dataGridView1.Rows.Add(1);
dataGridView1[0, i].Value = ListShops.AllWorker[i].Surname;
dataGridView1[1, i].Value = ListShops.AllWorker[i].Name;
dataGridView1[2, i].Value = ListShops.AllWorker[i].Ot;
dataGridView1[3, i].Value = ListShops.AllWorker[i].Ustrdate;
dataGridView1[4, i].Value = ListShops.AllWorker[i].Twnumber;
dataGridView1[5, i].Value = ListShops.AllWorker[i].Mail;
}
dataGridView3.Rows.Clear();
for (int i = 0; i < ListShops.AllFood.Count; i++)
{
dataGridView3.Rows.Add(1);
dataGridView3[0, i].Value = ListShops.AllFood[i].Name;
dataGridView3[1, i].Value = ListShops.AllFood[i].Ingr;
dataGridView3[2, i].Value = ListShops.AllFood[i].Price;
}
dataGridView4.Rows.Clear();
for (int i = 0; i < ListShops.AllSale.Count; i++)
{
dataGridView4.Rows.Add(1);
dataGridView4[0, i].Value = ListShops.AllSale[i].Food.Name;
dataGridView4[1, i].Value = ListShops.AllSale[i].Date;
dataGridView4[2, i].Value = ListShops.AllSale[i].Worker.Surname + " " + ListShops.AllSale[i].Worker.Name + " " + ListShops.AllSale[i].Worker.Ot;
dataGridView4[3, i].Value = ListShops.AllSale[i].Kolv;
}
if (ListShops.AllWorker.Count > 0)
{
comboBox4.Items.Clear();
for (int i = 0; i < ListShops.AllWorker.Count; i++)
{
comboBox4.Items.Add(ListShops.AllWorker[i].Surname + " " + ListShops.AllWorker[i].Name + " " + ListShops.AllWorker[i].Ot);
}
}
if (ListShops.AllFood.Count > 0)
{
comboBox1.Items.Clear();
for (int i = 0; i < ListShops.AllFood.Count; i++)
{
comboBox1.Items.Add(ListShops.AllFood[i].Name + " " + ListShops.AllFood[i].Ingr + " ");
}
}
}
private void button4_Click(object sender, EventArgs e) // добавление нового блюда
{
if ((textBox12.Text.Trim() == "") || (textBox13.Text.Trim() == "") || (textBox16.Text.Trim() == "") )
{
MessageBox.Show("Не все обязательные поля заполнены");
return;
}
Food org = new Food();
org.Name = textBox12.Text.Trim();
org.Ingr = textBox13.Text.Trim();
try
{
org.Price = int.Parse(textBox16.Text.Trim());
int x = ListShops.AllFood.Count;
if (x != 0)
{
for (int i = 0; i < x; i++)
{
ListShops.AllFood.Add(org);
MessageBox.Show("Продукция успешно добавлена");
}
}
else
{
ListShops.AllFood.Add(org);
MessageBox.Show("Продукция успешно добавлена");
}
button1_Click(sender, e);
}
catch (FormatException)
{
MessageBox.Show("Неверный формат ввода");
}
}
private void button5_Click(object sender, EventArgs e) // добавление нового заказа
{
if ((comboBox1.Text.Trim() == "") || (comboBox4.Text.Trim() == ""))
{
MessageBox.Show("Не все обязательные поля заполены");
return;
}
Sale sl = new Sale();
sl.Food = ListShops.AllFood[comboBox1.SelectedIndex];
sl.Worker = ListShops.AllWorker[comboBox4.SelectedIndex];
sl.Date = dateTimePicker3.Value;
sl.Kolv = (byte)numericUpDown1.Value;
ListShops.AllFood[comboBox1.SelectedIndex].Kol -= sl.Kolv;
ListShops.AllSale.Add(sl);
MessageBox.Show("Успешно добавлено!");
}
private void dataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{
sel1 = e.RowIndex;
}
private void dataGridView2_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{
sel2 = e.RowIndex;
}
private void dataGridView3_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{
sel3 = e.RowIndex;
}
private void dataGridView4_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{
sel4 = e.RowIndex;
}
private void button6_Click(object sender, EventArgs e) // удаление сотрудника
{
if (ListShops.AllWorker.Count > 0)
{
ListShops.AllWorker.RemoveAt(sel1);
button1_Click(sender, e);
sel1 = 0;
}
}
private void button8_Click(object sender, EventArgs e) // удаление в меню
{
if (ListShops.AllFood.Count > 0)
{
ListShops.AllFood.RemoveAt(sel1);
button1_Click(sender, e);
sel3 = 0;
}
}
private void button9_Click(object sender, EventArgs e) // удаление в журнале заказов
{
if (ListShops.AllSale.Count > 0)
{
ListShops.AllSale.RemoveAt(sel1);
button1_Click(sender, e);
sel4 = 0;
}
}
private void button10_Click(object sender, EventArgs e) // поиск
{
dataGridView5.Rows.Clear();
int count = 0;
for (int i = 0; i < ListShops.AllSale.Count; i++)
{
if (ListShops.AllSale[i].Date.ToShortDateString() == dateTimePicker3.Value.ToShortDateString())
{
dataGridView5.Rows.Add(1);
dataGridView5[0, count].Value = ListShops.AllSale[i].Food.Name + " " + ListShops.AllSale[i].Food.Ingr;
dataGridView5[1, count].Value = ListShops.AllSale[i].Worker.Surname + " " + ListShops.AllSale[i].Worker.Name + " " + ListShops.AllSale[i].Worker.Ot;
dataGridView5[2, count].Value = ListShops.AllSale[i].Kolv;
dataGridView5[3, count].Value = ListShops.AllSale[i].Food.Price;
}
}
}
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
Close();
}
private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
{
About about = new About();
about.ShowDialog();
}
private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
if ((openFileDialog1.ShowDialog() == DialogResult.OK))
{
try
{
ListShops = LoadAndSave.LoadXML(openFileDialog1.FileName, ListShops);
}
catch (InvalidOperationException)
{
MessageBox.Show("Ошибка чтения XML-файла");
}
}
button1_Click(sender, e);
}
private void saveToolStripMenuItem_Click(object sender, EventArgs e)
{
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
try
{
LoadAndSave.Save(ListShops, saveFileDialog1.FileName);
MessageBox.Show("Файл сохранен");
}
catch (UnauthorizedAccessException)
{
MessageBox.Show("Невозможно сохранить файл");
}
}
}
private void button3_Click(object sender, EventArgs e)
{
Check newCheck = new Check();
if (listBox1.SelectedItems.Count!=0)
{
foreach (int sale in listBox1.SelectedIndices)
{
newCheck.AddSale(ListShops.AllSale[sale]);
}
ListShops.AllCheck.Add(newCheck);
MessageBox.Show(newCheck.PrintCheck());
}
else
{
MessageBox.Show("Вы должны выбрать заказы");
}
}
private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
if (tabControl2.TabIndex == 2)
{
listBox1.Items.Clear();
foreach (var sale in ListShops.AllSale)
{
listBox1.Items.Add(string.Format("{0} - {1}", sale.Food.Name, sale.Date.ToShortTimeString()));
}
}
}
private void dataGridView4_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
}
private void tabPage4_Click(object sender, EventArgs e)
{
}
}
}
Размещено на Allbest.ru