Тестирование администраторского приложения



Мы поможем в написании ваших работ!


Мы поможем в написании ваших работ!



Мы поможем в написании ваших работ!


ЗНАЕТЕ ЛИ ВЫ?

Тестирование администраторского приложения



 

Администраторская часть приложения предоставляет функционал добавления, редактирования и удаления информации в хранилище.

При запуске приложения для изменения информации пользователю предоставляется возможность выбора таблицы для последующего изменения/добавления/удаления, что отображено на рисунке 8.1 .

 

 

Рисунок 8.1.1 – Главная страница администраторского приложения

 

Работа с информацией во всех таблицах осуществляется по схожим принципам, следовательно, достаточно будет описать процесс и основные моменты по работе только с одной из них.

Правильная последовательность действий и ознакомление с интерфейсом будет описана на примере таблицы «Stations». На рисунке 8.2 отображен вид страницы с информацией по станциям.

 

 

Рисунок 8.1.2 – Вид страницы «Stations» для работы с информацией

 

Далее детально будет описана работа с каждой кнопкой данной страницы.

Для добавления новой записи необходимо воспользоваться кнопкой «Добавить новую запись». После ее нажатия необходимо заполнить информацией выпавшие поля. Далее кнопкой «Вставить» фиксируем занесение данных в хранилище. Пример заполнения формы предоставлен на рисунке 8.3.

 

 

Рисунок 8.1.3 – Пример заполнения данных

Кнопка «Изменить» имеет такой же интерфейс как и кнопка «Добавить новую запись», с одним лишь отличием: поля уже заполнены исходной информацией.

Кнопка «Удалить» соответственно предназначена для удаления текущей записи из хранилища.

Дополнительные возможности представлены кнопками:

- «Информация» – полная информация о городе,

- «ViewTransits» – просмотр фактов, связанных с выбранным городом.

Работа с остальными элементами хранилища выполняется по тем же принципам и имеет понятный интерфейс.

 

Тестирование клиентского приложения

 

Надстройка в программе выглядит следующим образом:

 

 

Рисунок 8.2.1

 

Анализ содержимого хранилища данных будет представлен в виде круговых диаграмм. Рассмотрим представлении на следующих примерах:

1) определение количества проданных билетов в зависимости от года (рисунок 8.2.2);

2) определение количества маршрутов по областям (рисунок 8.2.3).

 

 

Рисунок 8.2.2

 

 

Рисунок 8.2.3

 

При выборе анализа самых прибыльных рейсов, мы можем увидеть первых 7 по величине прибыли рейсов и их численное значение прибыли за весь наблюдаемый период:

Прогноз позволяет посмотреть количества продаваемых билетов по данному маршруту с учётом сезонности в будущем на основании данных нескольких предыдущих лет. Используется линия тренда:

 

 

Рисунок 8.2.3


ЗАКЛЮЧЕНИЕ

 

Система «Анализ и прогнозирование потребности в железнодорожном транспорте на основе данных о перевозках» реализована довольно качественно. Поставленная цель достигнута – оптимизировали учёт перевозок, а также ввели контроль потребности в железнодорожном транспорте с возможностью построения прогноза.

Весь функционал, определенный на этапе спецификации системы выполнен:

- Определение самых убыточных и прибыльных рейсов;

- Анализ проданных билетов по конкретному рейсу осуществляется на основе выбранного времени отправления в заданном направлении и купленных билетов по каждому из типов вагонов;

- Анализ потребности в рейсах за границу осуществляется на основе выбранной страны либо города прибытия;

- Анализ потребности в ж/д транспорте на основе выбранного пункта отправления и прибытия по всем рейсам за день;

- Анализ потребности в транспорте в зависимости от времени года;

- Прогнозирование потребности в ж/д транспорте на основе осуществлённых перевозок.

В результате тестирования разработанной системы явных недочетов не выявлено. Но не исключается возможность усовершенствования данного проекта, например, добавление новых параметров для анализа, а также прогнозирование более конкретных параметров.


СПИСОК ЛИТЕРАТУРЫ

 

[1] Чарльз Петцольд. Программирование в тональности С#. 2-е изд. – Русская Редакция, 2004г. – 512с.

[2] http://hubpages.com/hub/How-To-Program-with-Excel-and-C-using-a-Ribbon - Программирование в MSExcel.

[3] Мартин Фаулер. UML основы. Четвертое издание. – “Вильямс”,

2007г. ­­– 162 с.

[4] Буч Г., Якобсон А., Рамбо Дж. UML. Классика CS. 2-е изд. / Пер. с англ.; Под общей редакцией проф. С. Орлова — СПб.: Питер, 2006. — 736 с

[5] ГрейдиБуч, Джеймс Рамбо, Айвар Джекобсон Язык UML. Руководство пользователя = TheUnifiedModelingLanguageuserguide. — 2. — М., СПб.: «ДМК Пресс», «Питер», 2004. — 432 с.

[6] http://softru.ru/down/o-849.html - компьютерная программа «Автотранспорт: учет и анализ 4.70»

[7] http://www.programmon.ru/VBA/28.html - Линия тренда.


ПРИЛОЖЕНИЕ А

(обязательное)

Рисунок А.1 - Контекстная диаграмма

Рисунок А.2 - Декомпозиция контекстной диаграммы

Рисунок А.3 - Декомпозиция блока «Собрать данные»

Рисунок А.4 – Декомпозиция блока «Выбрать параметры для анализа/прогнозирования»

Рисунок А.5 – Декомпозиция блока «Обработать данные»

Рисунок А.6 – Декомпозиция блока «Сделать выборку по заданным параметрам»

Рисунок А.7 – декомпозиция блока «Сформировать результат»


ПРИЛОЖЕНИЕ Б

(обязательное)

 

 

Рисунок Б.1 – Общая блок-схема работы системы

Рисунок Б.2Блок-схема функции анализа потребности в транспорте в зависимости от времени


ПРИЛОЖЕНИЕ В

(обязательное)

Листинг скрипта генерации базы данных

 

USE[D:\ÊÏ\RAIL\RAIL_TRANSPORT.MDF]

GO

/****** Object: Table [dbo].[Wagon] Script Date: 05/17/2011 02:30:50 ******/

SETANSI_NULLSON

GO

SETQUOTED_IDENTIFIERON

GO

CREATETABLE[dbo].[Wagon](

[id_wagon][int]NOTNULL,

[type_wagon][nchar](30)NOTNULL,

CONSTRAINT[PK_wagon]PRIMARYKEYCLUSTERED

(

[id_wagon]ASC

)WITH (PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY]

)ON[PRIMARY]

GO

/****** Object: Table [dbo].[Type_train] Script Date: 05/17/2011 02:30:50 ******/

SETANSI_NULLSON

GO

SETQUOTED_IDENTIFIERON

GO

CREATETABLE[dbo].[Type_train](

[id_type][int]NOTNULL,

[type_train][nchar](20)NOTNULL,

CONSTRAINT[PK_Type_train]PRIMARYKEYCLUSTERED

(

[id_type]ASC

)WITH (PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY]

)ON[PRIMARY]

GO

/****** Object: Table [dbo].[Period] Script Date: 05/17/2011 02:30:50 ******/

SETANSI_NULLSON

GO

SETQUOTED_IDENTIFIERON

GO

CREATETABLE[dbo].[Period](

[id_period][int]NOTNULL,

[daily][int]NOTNULL,

[even][int]NOTNULL,

[uneven][int]NOTNULL,

CONSTRAINT[PK_Period]PRIMARYKEYCLUSTERED

(

[id_period]ASC

)WITH (PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY]

)ON[PRIMARY]

GO

/****** Object: Table [dbo].[Date_trans] Script Date: 05/17/2011 02:30:50 ******/

SETANSI_NULLSON

GO

SETQUOTED_IDENTIFIERON

GO

CREATETABLE[dbo].[Date_trans](

[id_date][int]NOTNULL,

[day_trans][int]NOTNULL,

[month_trans][int]NOTNULL,

[year_trans][int]NOTNULL,

CONSTRAINT[PK_Date_trans]PRIMARYKEYCLUSTERED

(

[id_date]ASC

)WITH (PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY]

)ON[PRIMARY]

GO

/****** Object: Table [dbo].[Country] Script Date: 05/17/2011 02:30:50 ******/

SETANSI_NULLSON

GO

SETQUOTED_IDENTIFIERON

GO

CREATETABLE[dbo].[Country](

[id_country][int]NOTNULL,

[name_country][nchar](20)NOTNULL,

CONSTRAINT[PK_Country]PRIMARYKEYCLUSTERED

(

[id_country]ASC

)WITH (PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY]

)ON[PRIMARY]

GO

/****** Object: Table [dbo].[City] Script Date: 05/17/2011 02:30:50 ******/

SETANSI_NULLSON

GO

SETQUOTED_IDENTIFIERON

GO

CREATETABLE[dbo].[City](

[id_city][int]NOTNULL,

[id_country][int]NOTNULL,

[name_city][nchar](20)NOTNULL,

CONSTRAINT[PK_City_1]PRIMARYKEYCLUSTERED

(

[id_city]ASC,

[id_country]ASC

)WITH (PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY]

)ON[PRIMARY]

GO

/****** Object: Table [dbo].[Train] Script Date: 05/17/2011 02:30:50 ******/

SETANSI_NULLSON

GO

SETQUOTED_IDENTIFIERON

GO

CREATETABLE[dbo].[Train](

[id_train][int]NOTNULL,

[id_type][int]NOTNULL,

CONSTRAINT[PK_Train]PRIMARYKEYCLUSTERED

(

[id_train]ASC,

[id_type]ASC

)WITH (PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY]

)ON[PRIMARY]

GO

/****** Object: Table [dbo].[Transit] Script Date: 05/17/2011 02:30:50 ******/

SETANSI_NULLSON

GO

SETQUOTED_IDENTIFIERON

GO

CREATETABLE[dbo].[Transit](

[amount_places][int]NOTNULL,

[amount_tickets][int]NOTNULL,

[price_ticket][int]NOTNULL,

[time_dep][time](0)NOTNULL,

[costs][int]NOTNULL,

[id_train][int]NOTNULL,

[id_wagon][int]NOTNULL,

[id_type][int]NOTNULL,

[id_date][int]NOTNULL,

[id_city_dep][int]NOTNULL,

[id_city_dest][int]NOTNULL,

[id_country_dep][int]NOTNULL,

[id_contry_dest][int]NOTNULL,

[id_period][int]NOTNULL,

CONSTRAINT[PK_Transit]PRIMARYKEYCLUSTERED

(

[id_train]ASC,

[id_wagon]ASC,

[id_type]ASC,

[id_date]ASC,

[id_city_dep]ASC,

[id_city_dest]ASC,

[id_country_dep]ASC,

[id_contry_dest]ASC,

[id_period]ASC

)WITH (PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY]

)ON[PRIMARY]

GO

/****** Object: ForeignKey [FK_City_Country] Script Date: 05/17/2011 02:30:50 ******/

ALTERTABLE[dbo].[City]WITHCHECKADDCONSTRAINT[FK_City_Country]FOREIGNKEY([id_country])

REFERENCES[dbo].[Country]([id_country])

GO

ALTERTABLE[dbo].[City]CHECKCONSTRAINT[FK_City_Country]

GO

/****** Object: ForeignKey [FK_Train_Type_train] Script Date: 05/17/2011 02:30:50 ******/

ALTERTABLE[dbo].[Train]WITHCHECKADDCONSTRAINT[FK_Train_Type_train]FOREIGNKEY([id_type])

REFERENCES[dbo].[Type_train]([id_type])

GO

ALTERTABLE[dbo].[Train]CHECKCONSTRAINT[FK_Train_Type_train]

GO

/****** Object: ForeignKey [FK_Transit_CityDep] Script Date: 05/17/2011 02:30:50 ******/

ALTERTABLE[dbo].[Transit]WITHCHECKADDCONSTRAINT[FK_Transit_CityDep]FOREIGNKEY([id_city_dep],[id_country_dep])

REFERENCES[dbo].[City]([id_city],[id_country])

GO

ALTERTABLE[dbo].[Transit]CHECKCONSTRAINT[FK_Transit_CityDep]

GO

/****** Object: ForeignKey [FK_Transit_CityDest] Script Date: 05/17/2011 02:30:50 ******/

ALTERTABLE[dbo].[Transit]WITHCHECKADDCONSTRAINT[FK_Transit_CityDest]FOREIGNKEY([id_city_dest],[id_contry_dest])

REFERENCES[dbo].[City]([id_city],[id_country])

GO

ALTERTABLE[dbo].[Transit]CHECKCONSTRAINT[FK_Transit_CityDest]

GO

/****** Object: ForeignKey [FK_Transit_Date_trans] Script Date: 05/17/2011 02:30:50 ******/

ALTERTABLE[dbo].[Transit]WITHCHECKADDCONSTRAINT[FK_Transit_Date_trans]FOREIGNKEY([id_date])

REFERENCES[dbo].[Date_trans]([id_date])

GO

ALTERTABLE[dbo].[Transit]CHECKCONSTRAINT[FK_Transit_Date_trans]

GO

/****** Object: ForeignKey [FK_Transit_Period] Script Date: 05/17/2011 02:30:50 ******/

ALTERTABLE[dbo].[Transit]WITHCHECKADDCONSTRAINT[FK_Transit_Period]FOREIGNKEY([id_period])

REFERENCES[dbo].[Period]([id_period])

GO

ALTERTABLE[dbo].[Transit]CHECKCONSTRAINT[FK_Transit_Period]

GO

/****** Object: ForeignKey [FK_Transit_Train] Script Date: 05/17/2011 02:30:50 ******/

ALTERTABLE[dbo].[Transit]WITHCHECKADDCONSTRAINT[FK_Transit_Train]FOREIGNKEY([id_train],[id_type])

REFERENCES[dbo].[Train]([id_train],[id_type])

GO

ALTERTABLE[dbo].[Transit]CHECKCONSTRAINT[FK_Transit_Train]

GO

/****** Object: ForeignKey [FK_Transit_Wagon] Script Date: 05/17/2011 02:30:50 ******/

ALTERTABLE[dbo].[Transit]WITHCHECKADDCONSTRAINT[FK_Transit_Wagon]FOREIGNKEY([id_wagon])

REFERENCES[dbo].[Wagon]([id_wagon])

GO

ALTERTABLE[dbo].[Transit]CHECKCONSTRAINT[FK_Transit_Wagon]

GO


ПРИЛОЖЕНИЕ Г

(обязательное)

Листинг алгоритмов реализующих бизнес-логику

 

Функция подключения к базе данных:

publicstaticSqlConnection Connect()

{

myConnection = newSqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=D:\\КП\\rail\\rail_transport.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");

myConnection.Open();

returnmyConnection;

 

 

}

 

Функция анализа занятости рейсов за вчерашний день по заданному направлению:

publicstaticintanalysByTime(Microsoft.Office.Interop.Excel.WorksheetactiveWorksheet)

{

clearDiagram();

clearRows();

transL = newList<Transit>();

SqlDataReadermyReader = null;

DateTimemyDate = DateTime.Now;

stringstrDate = myDate.Year.ToString() + '.'

+ myDate.Month.ToString() + '.'

+ myDate.Day.ToString();

 

 

myDate = myDate.AddDays(-1);

intcurDay = myDate.Day;

intcurMonth = myDate.Month;

intcurYear = myDate.Year;

int number = 0;

introwCount = 1;

double tick = 0;

doublepl = 0;

double[] per;

double[] tickets;

double[] places;

 

 

myCommand = newSqlCommand("select * from Transit inner join Date_trans on Transit.id_date=Date_trans.id_date where id_city_dep=" + transit.getIdCityDep() + " and id_city_dest=" + transit.getIdCityDest() + " and day_trans = " + curDay + " and month_trans = " + curMonth + " and year_trans = " + curYear, myConnection);

myReader = myCommand.ExecuteReader();

int i = 0;

while (myReader.Read())

{

number++;

}

myReader.Close();

 

String[] id_w = newString[number];

for (int m = 0; m < number; m++)

{

id_w[m] = "";

}

 

myReader = myCommand.ExecuteReader();

while (myReader.Read())

{

 

rowCount++;

Transit trans = newTransit();

trans.setAmountTickets(Convert.ToInt32(myReader["amount_tickets"].ToString()));

trans.setAmountPlaces(Convert.ToInt32(myReader["amount_places"].ToString()));

trans.setTimeDep(TimeSpan.Parse(myReader["time_dep"].ToString()));

trans.setIdWagon(Convert.ToInt32(myReader["id_wagon"].ToString()));

 

if (!id_w.Contains(myReader["time_dep"].ToString()))

{

id_w[i] = myReader["time_dep"].ToString();

}

 

transL.Add(trans);

 

i++;

}

myReader.Close();

 

intcount_type = 0;

int j = 2;

for (int m = 0; m <id_w.Length; m++)

{

 

if (!id_w[m].Equals(""))

{

activeWorksheet.Cells[j, 1] = id_w[m];

j++;

count_type++;

}

}

intnn = transL.Count;

tickets = newdouble[count_type];

places = newdouble[count_type];

count_type = 0;

 

for (i = 0; i <tickets.Length; i++)

{

tickets[i] = 0.0;

places[i] = 0.0;

}

for (i = 0; i <id_w.Length; i++)

{

if (!id_w[i].Equals(""))

{

for (j = 0; j <transL.Count; j++)

{

if (transL[j].getTimeDep().Equals(TimeSpan.Parse(id_w[i])))

{

tickets[count_type] += transL[j].getAmountTickets();

places[count_type] += transL[j].getAmountPlaces();

 

 

}

}

count_type++;

}

 

}

rowCount = countPercent(count_type, tickets, places, activeWorksheet);

if (rowCount != 2)

{

if (activeWorksheet != null)

{

activeWorksheet.Cells[1, 1] = "Времяотправления";

activeWorksheet.Cells[1, 2] = "% ";

 

}

}

int f;

 

returnrowCount;

}

 

Функцияпостроениядиаграммы:

 

privatestaticvoiddrawDiargamm(introwCount, Microsoft.Office.Interop.Excel.WorksheetactiveWorksheet)

{

objectmisValue = System.Reflection.Missing.Value;

 

// объектыграфиков

ChartObjectsxlCharts;

ChartObjectchartObj;

Microsoft.Office.Interop.Excel.Chart chart;

bool graph = false;

 

xlCharts = (Microsoft.Office.Interop.Excel.ChartObjects)activeWorksheet.ChartObjects(Type.Missing);

chartObj = (Microsoft.Office.Interop.Excel.ChartObject)xlCharts.Add(10, 80, 450, 300);

 

chart = chartObj.Chart;

String n = chart.Name;

StringnL = chart.Legend.Name;

 

graph = true;

Excel.Axis axis = (Excel.Axis)chart.Axes(Excel.XlAxisType.xlValue, Excel.XlAxisGroup.xlPrimary);

axis.HasTitle = true;

axis.AxisTitle.Text = "% занятости";

 

chart.HasTitle = true;

chart.ChartTitle.Text = "Диаграммаанализа";

 

// выбираемдиапазон

Microsoft.Office.Interop.Excel.RangechartRange = activeWorksheet.get_Range("A2", "B" + (rowCount - 1));

 

chart.SetSourceData(chartRange, misValue);

 

// типграфика

chart.Type = 3;

 

}

 



Последнее изменение этой страницы: 2016-04-07; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.236.222.124 (0.04 с.)