244 lines
10 KiB
C#
244 lines
10 KiB
C#
/* aputze */
|
|
|
|
using System;
|
|
using System.Collections;
|
|
|
|
using System.Data;
|
|
using System.Data.SqlClient;
|
|
|
|
namespace DynaDis {
|
|
public delegate void ProgressHandler(int progress);
|
|
|
|
public class DynaDis {
|
|
public string dataSource="localhost";
|
|
public string initialCatalog="DynaDis";
|
|
|
|
public TimeSpan minWaiting=new TimeSpan(0,5,0);
|
|
public TimeSpan maxWaiting=new TimeSpan(0,15,0);
|
|
|
|
public TimeSpan maxTouring=new TimeSpan(8,0,0);
|
|
|
|
public int day=1;
|
|
|
|
public DataSet dataSet;
|
|
|
|
protected DataTable trainTable;
|
|
protected DataTable deviceTable;
|
|
protected DataTable employeeTable;
|
|
|
|
protected SqlConnection connection;
|
|
protected SqlDataAdapter dataAdapter1; //TrainTable
|
|
protected SqlDataAdapter dataAdapter2; //DeviceTable
|
|
protected SqlDataAdapter dataAdapter3; //EmployeeTable
|
|
|
|
protected Hashtable A;
|
|
|
|
protected ArrayList T;
|
|
protected ArrayList t;
|
|
|
|
public DynaDis() {
|
|
dataSet=new DataSet("DynaDis");
|
|
|
|
trainTable=dataSet.Tables.Add("TrainTable");
|
|
deviceTable=dataSet.Tables.Add("DeviceTable");
|
|
employeeTable=dataSet.Tables.Add("EmployeeTable");
|
|
}
|
|
|
|
public void Connect() {
|
|
connection=new SqlConnection("Data Source="+dataSource+";"+
|
|
"Initial Catalog="+initialCatalog+";"+
|
|
"Integrated Security=true;");
|
|
connection.Open();
|
|
}
|
|
public void Disconnect() {
|
|
connection.Close();
|
|
}
|
|
|
|
public void Prepare() {
|
|
dataAdapter1=new SqlDataAdapter("SELECT * FROM TrainTable WHERE (Available & "+day+")=1", connection);
|
|
|
|
dataAdapter1.UpdateCommand=new SqlCommand("UPDATE TrainTable SET "+
|
|
"Departure=@1,DepartureStation=@2,"+
|
|
"Arrival=@3,ArrivalStation=@4,"+
|
|
"Available=@5,"+
|
|
"ToDo=@6,Done=@7"+
|
|
" WHERE TrainId=@0", connection);
|
|
dataAdapter1.UpdateCommand.Parameters.Add("@0",SqlDbType.Int,4,"TrainId");
|
|
dataAdapter1.UpdateCommand.Parameters.Add("@1",SqlDbType.DateTime,8,"Departure");
|
|
dataAdapter1.UpdateCommand.Parameters.Add("@2",SqlDbType.VarChar,50,"DepartureStation");
|
|
dataAdapter1.UpdateCommand.Parameters.Add("@3",SqlDbType.DateTime,8,"Arrival");
|
|
dataAdapter1.UpdateCommand.Parameters.Add("@4",SqlDbType.VarChar,50,"ArrivalStation");
|
|
dataAdapter1.UpdateCommand.Parameters.Add("@5",SqlDbType.Int,4,"Available");
|
|
dataAdapter1.UpdateCommand.Parameters.Add("@6",SqlDbType.Int,4,"ToDo");
|
|
dataAdapter1.UpdateCommand.Parameters.Add("@7",SqlDbType.Int,4,"Done");
|
|
|
|
dataAdapter1.InsertCommand=new SqlCommand("INSERT INTO TrainTable "+
|
|
"(Departure,DepartureStation,"+
|
|
"Arrival,ArrivalStation,"+
|
|
"Available,"+
|
|
"ToDo,Done)"+
|
|
" VALUES "+
|
|
"(@0,@1,@2,@3,@4,@5,@6)", connection);
|
|
dataAdapter1.InsertCommand.Parameters.Add("@0",SqlDbType.DateTime,8,"Departure");
|
|
dataAdapter1.InsertCommand.Parameters.Add("@1",SqlDbType.VarChar,50,"DepartureStation");
|
|
dataAdapter1.InsertCommand.Parameters.Add("@2",SqlDbType.DateTime,8,"Arrival");
|
|
dataAdapter1.InsertCommand.Parameters.Add("@3",SqlDbType.VarChar,50,"ArrivalStation");
|
|
dataAdapter1.InsertCommand.Parameters.Add("@4",SqlDbType.Int,4,"Available");
|
|
dataAdapter1.InsertCommand.Parameters.Add("@5",SqlDbType.Int,4,"ToDo");
|
|
dataAdapter1.InsertCommand.Parameters.Add("@6",SqlDbType.Int,4,"Done");
|
|
|
|
dataAdapter1.DeleteCommand=new SqlCommand("DELETE FROM TrainTable WHERE TrainId=@0", connection);
|
|
dataAdapter1.DeleteCommand.Parameters.Add("@0",SqlDbType.Int,4,"TrainId");
|
|
|
|
dataAdapter2=new SqlDataAdapter("SELECT * FROM DeviceTable WHERE (Available & "+day+")=1", connection);
|
|
|
|
dataAdapter2.UpdateCommand=new SqlCommand("UPDATE DeviceTable SET "+
|
|
"Vendor=@1,Model=@2,"+
|
|
"Available=@3"+
|
|
" WHERE DeviceId=@0", connection);
|
|
dataAdapter2.UpdateCommand.Parameters.Add("@0",SqlDbType.Int,4,"DeviceId");
|
|
dataAdapter2.UpdateCommand.Parameters.Add("@1",SqlDbType.VarChar,50,"Vendor");
|
|
dataAdapter2.UpdateCommand.Parameters.Add("@2",SqlDbType.VarChar,50,"Model");
|
|
dataAdapter2.UpdateCommand.Parameters.Add("@3",SqlDbType.Int,4,"Available");
|
|
|
|
dataAdapter2.InsertCommand=new SqlCommand("INSERT INTO DeviceTable "+
|
|
"(Vendor,Model,Available)"+
|
|
" VALUES "+
|
|
"(@0,@1,@2)", connection);
|
|
dataAdapter2.InsertCommand.Parameters.Add("@0",SqlDbType.VarChar,50,"Vendor");
|
|
dataAdapter2.InsertCommand.Parameters.Add("@1",SqlDbType.VarChar,50,"Model");
|
|
dataAdapter2.InsertCommand.Parameters.Add("@2",SqlDbType.Int,4,"Available");
|
|
|
|
dataAdapter2.DeleteCommand=new SqlCommand("DELETE FROM DeviceTable WHERE DeviceId=@0", connection);
|
|
dataAdapter2.DeleteCommand.Parameters.Add("@0",SqlDbType.Int,4,"DeviceId");
|
|
|
|
dataAdapter3=new SqlDataAdapter("SELECT * FROM EmployeeTable WHERE (Available & "+day+")=1", connection);
|
|
|
|
dataAdapter3.UpdateCommand=new SqlCommand("UPDATE EmployeeTable SET "+
|
|
"DeviceId=@1,"+
|
|
"Name=@2,Address=@3,"+
|
|
"Station=@4,Available=@5"+
|
|
" WHERE EmployeeId=@0", connection);
|
|
dataAdapter3.UpdateCommand.Parameters.Add("@0",SqlDbType.Int,4,"EmployeeId");
|
|
dataAdapter3.UpdateCommand.Parameters.Add("@1",SqlDbType.Int,4,"DeviceId");
|
|
dataAdapter3.UpdateCommand.Parameters.Add("@2",SqlDbType.VarChar,50,"Name");
|
|
dataAdapter3.UpdateCommand.Parameters.Add("@3",SqlDbType.VarChar,50,"Address");
|
|
dataAdapter3.UpdateCommand.Parameters.Add("@4",SqlDbType.VarChar,50,"Station");
|
|
dataAdapter3.UpdateCommand.Parameters.Add("@5",SqlDbType.Int,4,"Available");
|
|
|
|
dataAdapter3.InsertCommand=new SqlCommand("INSERT INTO EmployeeTable "+
|
|
"(DeviceId,"+
|
|
"Name,Address,"+
|
|
"Station,Available)"+
|
|
" VALUES "+
|
|
"(@0,@1,@2,@3,@4)", connection);
|
|
dataAdapter3.InsertCommand.Parameters.Add("@0",SqlDbType.Int,4,"DeviceId");
|
|
dataAdapter3.InsertCommand.Parameters.Add("@1",SqlDbType.VarChar,50,"Name");
|
|
dataAdapter3.InsertCommand.Parameters.Add("@2",SqlDbType.VarChar,50,"Address");
|
|
dataAdapter3.InsertCommand.Parameters.Add("@3",SqlDbType.VarChar,50,"Station");
|
|
dataAdapter3.InsertCommand.Parameters.Add("@4",SqlDbType.Int,4,"Available");
|
|
|
|
dataAdapter3.DeleteCommand=new SqlCommand("DELETE FROM EmployeeTable WHERE EmployeeId=@0", connection);
|
|
dataAdapter3.DeleteCommand.Parameters.Add("@0",SqlDbType.Int,4,"EmployeeId");
|
|
}
|
|
|
|
public void Fill() {
|
|
dataSet.Clear();
|
|
|
|
dataAdapter1.FillSchema(dataSet,SchemaType.Source,"TrainTable");
|
|
dataAdapter1.Fill(dataSet,"TrainTable");
|
|
dataAdapter2.FillSchema(dataSet,SchemaType.Source,"DeviceTable");
|
|
dataAdapter2.Fill(dataSet,"DeviceTable");
|
|
dataAdapter3.FillSchema(dataSet,SchemaType.Source,"EmployeeTable");
|
|
dataAdapter3.Fill(dataSet,"EmployeeTable");
|
|
}
|
|
public void Update() {
|
|
dataAdapter1.Update(dataSet,"TrainTable");
|
|
dataAdapter2.Update(dataSet,"DeviceTable");
|
|
dataAdapter3.Update(dataSet,"EmployeeTable");
|
|
}
|
|
|
|
public event ProgressHandler selectProgress;
|
|
public void Select() {
|
|
if(selectProgress!=null) { selectProgress(0); }
|
|
|
|
DateTime dateTime1=DateTime.Now;
|
|
Create_A();
|
|
DateTime dateTime2=DateTime.Now;
|
|
Create_T();
|
|
DateTime dateTime3=DateTime.Now;
|
|
Create_t();
|
|
DateTime dateTime4=DateTime.Now;
|
|
|
|
Console.WriteLine("Create_A() {0}",dateTime2-dateTime1);
|
|
Console.WriteLine("Create_T() {0}",dateTime3-dateTime2);
|
|
Console.WriteLine("Create_t() {0}",dateTime4-dateTime3);
|
|
|
|
Console.WriteLine("|T|={0}",T.Count);
|
|
Console.WriteLine("|t|={0}",t.Count);
|
|
|
|
if(selectProgress!=null) { selectProgress(100); }
|
|
}
|
|
|
|
protected void Create_A() {
|
|
A=new Hashtable();
|
|
|
|
foreach(DataRow trainRow1 in trainTable.Rows) {
|
|
foreach(DataRow trainRow2 in trainTable.Rows) {
|
|
if((string)trainRow2["DepartureStation"]==(string)trainRow1["ArrivalStation"] &&
|
|
((DateTime)trainRow2["Departure"]-(DateTime)trainRow1["Arrival"])>=minWaiting &&
|
|
((DateTime)trainRow2["Departure"]-(DateTime)trainRow1["Arrival"])<=maxWaiting) {
|
|
|
|
if(!A.Contains(trainRow1["TrainId"])) {
|
|
A.Add(trainRow1["TrainId"],new ArrayList());
|
|
}
|
|
((ArrayList)A[trainRow1["TrainId"]]).Add(trainRow2);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
protected void Create_T() {
|
|
T=new ArrayList();
|
|
|
|
foreach(DataRow employeeRow in employeeTable.Rows) {
|
|
ArrayList T1=new ArrayList();
|
|
ArrayList T2=new ArrayList();
|
|
|
|
foreach(DataRow trainRow1 in trainTable.Rows) {
|
|
if((string)trainRow1["DepartureStation"]==(string)employeeRow["Station"]) {
|
|
ArrayList tour1=new ArrayList();
|
|
tour1.Add(trainRow1); T1.Add(tour1);
|
|
}
|
|
}
|
|
|
|
while(T1.Count>0) {
|
|
foreach(ArrayList tour1 in T1) {
|
|
DataRow trainRow0=(DataRow)tour1[0];
|
|
DataRow trainRow1=(DataRow)tour1[tour1.Count-1];
|
|
|
|
try {
|
|
foreach(DataRow trainRow2 in (ArrayList)A[trainRow1["TrainId"]]) {
|
|
if(((DateTime)trainRow2["Arrival"]-(DateTime)trainRow0["Departure"])<=maxTouring) {
|
|
ArrayList tour2=(ArrayList)tour1.Clone();
|
|
tour2.Add(trainRow2); T2.Add(tour2);
|
|
|
|
if((string)trainRow2["ArrivalStation"]==(string)employeeRow["Station"]) {
|
|
T.Add(tour2);
|
|
}
|
|
}
|
|
}
|
|
} catch { continue; }
|
|
}
|
|
|
|
T1=T2;
|
|
T2=new ArrayList();
|
|
}
|
|
}
|
|
}
|
|
|
|
protected void Create_t() {
|
|
t=new ArrayList();
|
|
}
|
|
}
|
|
}
|