/* * User: aputze * Date: 12.11.2004 * Time: 23:43 */ using System; using System.Collections; using System.Data; using System.Data.SqlClient; using System.Data.SqlTypes; namespace ViwoTour { public delegate void ProgressHandler(int Progress); public class ViwoTour { public CourseBook courseBook; public CoursePlan coursePlan; public TourPlan tourPlan; protected SqlConnection connection; protected SqlDataAdapter dataAdapter; protected SqlDataAdapter dataAdapter1; protected SqlDataAdapter dataAdapter2; protected SqlCommand command; protected SqlCommand command1; protected bool[,] A; public ArrayList S; public ArrayList T_search; public ArrayList T_select; public ViwoTour() { courseBook=new CourseBook(); coursePlan=new CoursePlan(); tourPlan=new TourPlan(); S=new ArrayList(); T_search=new ArrayList(); T_select=new ArrayList(); } public void Connect() { connection=new SqlConnection("Data Source="+Properties.DataSource+";"+ "Integrated Security=true;"+ "Initial Catalog="+Properties.InitialCatalog+";"); connection.Open(); } public void Disconnect() { connection.Close(); } public void Prepare() { dataAdapter=new SqlDataAdapter(); dataAdapter.SelectCommand=new SqlCommand("SELECT "+ "ID,"+ "DEPARTURE,DEPARTURE_STATION,"+ "ARRIVAL,ARRIVAL_STATION," + "MON,TUE,WED,THU,FRI,SAT,SUN"+ " FROM COURSE_BOOK",connection); dataAdapter1=new SqlDataAdapter(); dataAdapter1.InsertCommand=new SqlCommand("INSERT INTO COURSE_PLAN "+ "(ID,"+ "DEPARTURE,DEPARTURE_STATION,"+ "ARRIVAL,ARRIVAL_STATION)"+ " VALUES "+ "(@0,@1,@2,@3,@4)",connection); dataAdapter1.InsertCommand.Parameters.Add("@0",SqlDbType.Int,4,"ID"); dataAdapter1.InsertCommand.Parameters.Add("@1",SqlDbType.DateTime,8,"DEPARTURE"); dataAdapter1.InsertCommand.Parameters.Add("@2",SqlDbType.NVarChar,50,"DEPARTURE_STATION"); dataAdapter1.InsertCommand.Parameters.Add("@3",SqlDbType.DateTime,8,"ARRIVAL"); dataAdapter1.InsertCommand.Parameters.Add("@4",SqlDbType.NVarChar,50,"ARRIVAL_STATION"); dataAdapter2=new SqlDataAdapter(); dataAdapter2.InsertCommand=new SqlCommand("INSERT INTO TOUR_PLAN "+ "(ID,ID1,"+ "DEPARTURE,DEPARTURE_STATION,"+ "ARRIVAL,ARRIVAL_STATION)"+ " VALUES "+ "(@0,@1,@2,@3,@4,@5)",connection); dataAdapter2.InsertCommand.Parameters.Add("@0",SqlDbType.Int,4,"ID"); dataAdapter2.InsertCommand.Parameters.Add("@1",SqlDbType.Int,4,"ID1"); dataAdapter2.InsertCommand.Parameters.Add("@2",SqlDbType.DateTime,8,"DEPARTURE"); dataAdapter2.InsertCommand.Parameters.Add("@3",SqlDbType.NVarChar,50,"DEPARTURE_STATION"); dataAdapter2.InsertCommand.Parameters.Add("@4",SqlDbType.DateTime,8,"ARRIVAL"); dataAdapter2.InsertCommand.Parameters.Add("@5",SqlDbType.NVarChar,50,"ARRIVAL_STATION"); command=new SqlCommand("DELETE FROM COURSE_PLAN",connection); command1=new SqlCommand("DELETE FROM TOUR_PLAN",connection); } public void Load() { courseBook.Rows.Clear(); coursePlan.Rows.Clear(); dataAdapter.Fill(courseBook); string[] dayName=new string[] {"MON","TUE","WED","THU","FRI","SAT","SUN"}; TimeSpan[] dayOffset=new TimeSpan[] {new TimeSpan(0,0,0,0), new TimeSpan(1,0,0,0), new TimeSpan(2,0,0,0), new TimeSpan(3,0,0,0), new TimeSpan(4,0,0,0), new TimeSpan(5,0,0,0), new TimeSpan(6,0,0,0)}; TimeSpan[] dayOffset1=new TimeSpan[] {new TimeSpan(1,0,0,0), new TimeSpan(2,0,0,0), new TimeSpan(3,0,0,0), new TimeSpan(4,0,0,0), new TimeSpan(5,0,0,0), new TimeSpan(6,0,0,0), new TimeSpan(7,0,0,0)}; foreach(DataRow row in courseBook.Rows) { for(int day=0;day<7;day++) { if((int)row[dayName[day]]==1) { coursePlan.Rows.Add(new object[] {row["ID"], ((DateTime)row["DEPARTURE"]).Add(dayOffset[day]),row["DEPARTURE_STATION"], (DateTime)row["DEPARTURE"]<(DateTime)row["ARRIVAL"] ? ((DateTime)row["ARRIVAL"]).Add(dayOffset[day]) : ((DateTime)row["ARRIVAL"]).Add(dayOffset1[day]),row["ARRIVAL_STATION"]}); } } } courseBook.create_ID_Of_Rows(); courseBook.create_STATION_Of_Rows(); coursePlan.create_Rows_By_DEPARTURE_STATION(); coursePlan.create_Rows_By_ARRIVAL_STATION(); } public void Store() { foreach(ArrayList t_select in T_select) { foreach(int r in t_select) { DataRow row=coursePlan.Rows[r]; tourPlan.Rows.Add(new object[] {T_select.IndexOf(t_select),row["ID"], row["DEPARTURE"],row["DEPARTURE_STATION"], row["ARRIVAL"],row["ARRIVAL_STATION"]}); } } command.ExecuteNonQuery(); command1.ExecuteNonQuery(); dataAdapter1.Update(coursePlan); dataAdapter2.Update(tourPlan); } public void create_A() { A=new bool[coursePlan.Rows.Count,coursePlan.Rows.Count]; for(int i=0;i=Properties.MinWaiting && ((DateTime)row2[1]-(DateTime)row1[3])<=Properties.MaxWaiting; } } } public event ProgressHandler search_TProgress; public void search_T() { if(search_TProgress!=null) { search_TProgress(0); } T_search.Clear(); foreach(string s in S) { ArrayList R1=coursePlan.get_Rows_By_DEPARTURE_STATION(s); ArrayList R2=coursePlan.get_Rows_By_ARRIVAL_STATION(s); if(R1==null || R2==null) { continue; } ArrayList T=new ArrayList(); ArrayList T_prev; ArrayList T_next; T_prev=new ArrayList(); foreach(int r1 in R1) { ArrayList t1=new ArrayList(); t1.Add(r1); T_prev.Add(t1); } while(T_prev.Count>0) { T_next=new ArrayList(); foreach(ArrayList t_prev in T_prev) { int r1=(int)t_prev[0]; int r_prev=(int)t_prev[t_prev.Count-1]; for(int r_next=0;r_next0) { int ID=(int)IDsToDo[0]; ArrayList T_filter=new ArrayList(); foreach(ArrayList t_search in T_search) { foreach(int r in t_search) { DataRow row=coursePlan.Rows[r]; if(ID==(int)row[0]) { T_filter.Add(t_search); break; } } } if(T_filter.Count==0) { IDsToDo.Remove(ID); if(!IDsDone.Contains(ID)) { IDsDone.Add(ID); } continue; } double[] P=new double[T_filter.Count]; for(int i=0;iP[k]) { k=l; } } foreach(int r in (ArrayList)T_filter[k]) { DataRow row=coursePlan.Rows[r]; IDsToDo.Remove(row[0]); if(!IDsDone.Contains(row[0])) { IDsDone.Add(row[0]); } } T_select.Add(T_filter[k]); if(select_TProgress!=null) { select_TProgress((100*IDsDone.Count)/(IDsToDo.Count+IDsDone.Count)); } } if(select_TProgress!=null) { select_TProgress(100); } } } }