Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Текст программы.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
101.67 Кб
Скачать

ПРАВИТЕЛЬСТВО РОССИЙСКОЙ ФЕДЕРАЦИИ

НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ

«ВЫСШАЯ ШКОЛА ЭКОНОМИКИ»

СОГЛАСОВАНО

Доцент Национального исследовательского университета «Высшая школа экономики»,

кандидат наук

_________________ Брейман А.Д.

«__» _____________ 2013 г.

УТВЕРЖДАЮ

Заведующий отделением Программной инженерии Национального исследовательского университета «Высшая школа экономики»

_________________ Авдошин С.М.

«__» _____________ 2013 г.

ПРОГРАММА АВТОМАТИЗАЦИИ РАБОТЫ ДИСПЕТЧЕРА ТАКСИ

ТЕКСТ ПРОГРАММЫ

Подп. и дата

ЛИСТ УТВЕРЖДЕНИЯ

Инв. № дубл.

Взам. инв. №

Подп. и дата

Исполнитель: студент группы 171 ПИ

___________________ /Лапшов И.В./

«____»_______________________ 2013 г.

Инв. № подл.

2013

УТВЕРЖДЕНО

ПРОГРАММА АВТОМАТИЗАЦИИ РАБОТЫ ДИСПЕТЧЕРА ТАКСИ

Текст программы

Листов 30

Руководитель работы: доцент

Национального исследовательского

университета «Высшая школа экономики»,

кандидат наук

_____________________ /Брейман А.Д./

«____»_______________________ 2013 г.

Исполнитель: студент группы 171 ПИ

___________________ /Лапшов И.В./

«____»_______________________ 2013 г.

Подп. и дата

Инв. № дубл.

Взам. инв. №

Подп. и дата

Инв. № подл.

2013

AddOrder.Cs

using System;

using System.Windows.Forms;

using System.Net;

using System.IO;

using System.Xml;

using MyLibrary;

using System.Collections.Generic;

using System.Data;

using System.Data.OleDb;

namespace WindowsFormsApplication1

{

public partial class AddOrder : Form

{

public AddOrder()

{

InitializeComponent();

if (adress.tarif.Count != 0)

for (int i = 0; i < adress.tarif.Count; i++)//список тарифов в combobox

{

Tarifs t = (Tarifs)adress.tarif[i];

TarifsComBox.Items.Add(t.Name);

}

if (adress.drivers.Count != 0)//список тарифок в listbox

{

for (int i = 0; i < adress.drivers.Count; i++)

{

Voditel vod=(Voditel)adress.drivers[i];

DriversList.Items.Add(i+1+". " + vod.Name+", " + vod.Car_Mod);

}

}

}

public void GetInfoAboutDistance(out double length, out double time)//расстояние и время между адрессами

{

try

{

string origin = adress.Data;

string destination = adress.DataTo;

origin = Uri.EscapeDataString(origin);

destination = Uri.EscapeDataString(destination);

string url = @"http://maps.googleapis.com/maps/api/distancematrix/xml?origins=" + origin + "&destinations=" + destination + "&mode=driving&language=en-US&sensor=false";

HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(url);

WebResponse webResponse = httpRequest.GetResponse();

Stream dataStream = webResponse.GetResponseStream();

StreamReader reader = new StreamReader(dataStream);

string responseFromServer = reader.ReadToEnd();

webResponse.Close();

XmlDocument xmlDoc = new XmlDocument();

xmlDoc.LoadXml(responseFromServer);

XmlNodeList durationNode = xmlDoc.GetElementsByTagName("duration");

XmlNodeList distanceNode = xmlDoc.GetElementsByTagName("distance");

length = int.Parse(distanceNode[0].ChildNodes[0].InnerText) / 1000;

time = Math.Round(double.Parse(durationNode[0].ChildNodes[0].InnerText) / 60, 0, MidpointRounding.AwayFromZero);

}

catch { MessageBox.Show("Проблемы с интернет соединением"); length = 0; time = 0; }

}

private bool CheckInfo()//проверка корректности введеных данных

{

long phone;

int discountpercent = 0;

distance.Text = "Расстояние: ";

time.Text = "Приблизительное время: ";

SummPrice.Text = "Итоговая стоимость: ";

if (TarifsComBox.SelectedIndex == -1)

{

MessageBox.Show("Выберите тариф");

return false;

}

if (DriversList.SelectedIndex == -1)

{

MessageBox.Show("Назначьте водителя");

return false;

}

if (CityFrom.Text == "")

{

MessageBox.Show("Введите город отправления");

CityFrom.Clear();

CityFrom.Focus();

return false;

}

if (AddressFrom.Text == "")

{

MessageBox.Show("Введите адрес отправления");

AddressFrom.Clear();

AddressFrom.Focus();

return false;

}

if (CityTo.Text == "")

{

MessageBox.Show("Введите город назначения");

CityTo.Clear();

CityTo.Focus();

return false;

}

if (AddressTo.Text == "")

{

MessageBox.Show("Введите адрес назначения");

AddressTo.Clear();

AddressTo.Focus();

return false;

}

if (adress.Data == null)

{

MessageBox.Show("Необходимо проверить адрес отправления");

return false;

}

if (adress.DataTo == null)

{

MessageBox.Show("Необходимо проверить адрес доставки");

return false;

}

if (ClientPhone.Text == "")

{

MessageBox.Show("Введите телефон клиента");

ClientPhone.Focus();

return false;

}

if (!long.TryParse(ClientPhone.Text, out phone) | ClientPhone.Text.Length != 10)

{

MessageBox.Show("Номер телефона введен некорректно");

ClientPhone.Focus();

return false;

}

if (DiscountCheck.Checked == true)

{

if (DiscountPercentText.Text == "")

{

MessageBox.Show("Укажите процент скидки");

DiscountPercentText.Focus();

return false;

}

if (!int.TryParse(DiscountPercentText.Text, out discountpercent) | discountpercent < 1)

{

MessageBox.Show("Неверно указан процент скидки");

DiscountPercentText.Focus();

return false;

}

}

return true;

}

public double CalculateOrder()

{

try

{

if (CheckInfo())

{

double price = -1;

int discountpercent = 0;

distance.Text = "Расстояние: ";

time.Text = "Приблизительное время: ";

SummPrice.Text = "Итоговая стоимость: ";

double length;

double times;

GetInfoAboutDistance(out length, out times);

int.TryParse(DiscountPercentText.Text, out discountpercent);

distance.Text = distance.Text + "" + length + " км.";

if (times <= 60)

{

time.Text = time.Text + times + " м.";

}

else

{

time.Text = time.Text + (int)(times) / 60 + " ч." + (times - (int)(times)) + " м.";

}

AddBut.Enabled = true;

Tarifs tar = (Tarifs)adress.tarif[TarifsComBox.SelectedIndex];

int now;

int.TryParse(DateTime.Now.Hour.ToString(), out now);

if (tar.Type == "Покилометровая")

{

price = length * tar.Price;

if (tar.DependTrafic)

{

if ((adress.trafic >= 0) & (adress.trafic <= 3))

price *= tar.OneThree;

if ((adress.trafic >= 4) & (adress.trafic <= 6))

price *= tar.FourSix;

if ((adress.trafic >= 7) & (adress.trafic <= 10))

price *= tar.SevenTen;

}

if (tar.DependTime)

{

if ((now >= 0) & (now < 6))

price *= tar.Night;

if ((now >= 6) & (now < 12))

price *= tar.Morning;

if ((now >= 12) & (now < 18))

price *= tar.Day;

if ((now >= 18) & (now < 24))

price *= tar.Evening;

}

if (DiscountCheck.Checked)

price = price - discountpercent * price / 100;

}

if (tar.Type == "Поминутная")

{

price = times * tar.Price;

if (tar.DependTrafic)

{

if ((adress.trafic >= 0) & (adress.trafic <= 3))

price *= tar.OneThree;

if ((adress.trafic >= 4) & (adress.trafic <= 6))

price *= tar.FourSix;

if ((adress.trafic >= 7) & (adress.trafic <= 10))

price *= tar.SevenTen;

}

if (tar.DependTime)

{

if ((now >= 0) & (now < 6))

price *= tar.Night;

if ((now >= 6) & (now < 12))

price *= tar.Morning;

if ((now >= 12) & (now < 18))

price *= tar.Day;

if ((now >= 18) & (now < 24))

price *= tar.Evening;

}

if (DiscountCheck.Checked)

price = price - discountpercent * price / 100;

price = Math.Round(price);

}

SummPrice.Text = SummPrice.Text + " " + price;

return price;

}

}

catch (System.Net.WebException)

{

MessageBox.Show("Проблемы с интернет соединением");

}

catch { MessageBox.Show("Ошибка подсчета заказа"); }

return -1;

}

public void Calculate_Click(object sender, EventArgs e)//подсчет стоимости

{

CalculateOrder();

}

private void AddressCheck1_Click(object sender, EventArgs e)

{

adress.Data = CityFrom.Text + " " + AddressFrom.Text;

if (((CityFrom.Text == "") || (AddressFrom.Text == "")))

{

MessageBox.Show("Адрес отправления введен некорректно");

return;

}

else

{

Form2 f = new Form2();

f.Owner = this;

f.Show();

}

}

private void AddressCheck2_Click(object sender, EventArgs e)

{

adress.DataTo = CityTo.Text + " " + AddressTo.Text;

if (((CityTo.Text == "") || (AddressTo.Text == "")))

{

MessageBox.Show("Адрес назначения введен некорректно");

return;

}

else

{

Form3 f = new Form3();

f.Show();

}

}

private void AddBut_Click(object sender, EventArgs e)

{

try{

if (CalculateOrder() != -1)

{

double price = 0, length, time;

price = CalculateOrder();

int discountpercent = 0;

Tarifs tar = (Tarifs)adress.tarif[TarifsComBox.SelectedIndex];

Voditel vod = (Voditel)adress.drivers[DriversList.SelectedIndex];

Client cli = new Client("+7" + ClientPhone.Text);

try

{

adress.client.Add("+7" + ClientPhone.Text, "+7" + ClientPhone.Text);

}

catch { }

GetInfoAboutDistance(out length, out time);

int.TryParse(DiscountPercentText.Text, out discountpercent);

//Добавление данныв в базу данных

string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Orders.accdb";

OleDbConnection myOleDbConnection = new OleDbConnection(connectionString);

OleDbCommand myOleDbCommand = myOleDbConnection.CreateCommand();

myOleDbCommand.CommandText = "INSERT INTO [Table1] (Подача,Назначение,Стоимость,Тариф,Телефон_клиента,Водитель,Телефон_водителя,Модель_авто,Гос_номер,Статус) values ('" + adress.Data.Replace('\'', '*') + "','" + adress.DataTo.Replace('\'', '*') + "','" + price + "','" + TarifsComBox.SelectedItem.ToString() + "','" + cli.Phone + "','" + vod.Name + "','" + vod.Phone + "','" + vod.Car_Mod + "','" + vod.Car_number + "','Принят');";

myOleDbConnection.Open();

myOleDbCommand.ExecuteNonQuery();

myOleDbConnection.Close();

myOleDbConnection.Open();

myOleDbCommand.CommandText = "SELECT MAX(№) FROM Table1";

int maxId = Convert.ToInt32(myOleDbCommand.ExecuteScalar());//Id последнего заказа

//Отправка смс сообщений[заказ принят] водителю и клиенту

SMSC sms = new SMSC();

if ((adress.smsplaced != null) & (adress.smsplaced_Driver != null))

{

string message = adress.smsplaced.Replace("#price", price.ToString()).Replace("#car", vod.Car_Mod + " " + vod.Car_number).Replace("#phone", vod.Phone);

string messagedriver = adress.smsplaced_Driver.Replace("#price", price.ToString()).Replace("#address_from", adress.Data).Replace("#address_to", adress.DataTo).Replace("#phone", cli.Phone).Replace("#number", maxId.ToString());

sms.send_sms("7" + ClientPhone.Text, message, adress.smstranslit);

sms.send_sms("7" + vod.Phone, messagedriver, adress.smstranslit);

}

else

{

MessageBox.Show("Сообщение неотправлено так как в настройках не указан текст сообщения");

return;

}

Manage_Taxi mt = (Manage_Taxi)Application.OpenForms[0];

mt.CloseAdding();//обновить таблицу заказов

Close();

}

}

catch { MessageBox.Show("Ошибка добавления заказа"); }

}

private void DiscountCheck_CheckedChanged(object sender, EventArgs e)

{

if (DiscountCheck.Checked == true)

{

DiscountPercentText.Enabled = true;

}

else

DiscountPercentText.Enabled = false;

}

}

}