
|
|
ПРАВИТЕЛЬСТВО РОССИЙСКОЙ ФЕДЕРАЦИИ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ «ВЫСШАЯ ШКОЛА ЭКОНОМИКИ» |
||||
СОГЛАСОВАНО Доцент Национального исследовательского университета «Высшая школа экономики», кандидат наук
_________________ Брейман А.Д. «__» _____________ 2013 г. |
|
УТВЕРЖДАЮ Заведующий отделением Программной инженерии Национального исследовательского университета «Высшая школа экономики»
_________________ Авдошин С.М. «__» _____________ 2013 г. |
||||
ПРОГРАММА АВТОМАТИЗАЦИИ РАБОТЫ ДИСПЕТЧЕРА ТАКСИ ТЕКСТ ПРОГРАММЫ |
||||||
Подп. и дата |
|
ЛИСТ УТВЕРЖДЕНИЯ
|
||||
Инв. № дубл. |
|
|
||||
Взам. инв. № |
|
|
|
|
||
Подп. и дата |
|
Исполнитель: студент группы 171 ПИ ___________________ /Лапшов И.В./ «____»_______________________ 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;
}
}
}