0

講師の詳細パネルの詳細とホールの空​​き状況の詳細を保持するために、3 つの DataTable を使用したスケジューリング アルゴリズムを準備しようとしています。for ループを使用して DataTable にアクセスしています。for ループ制御構造は、この状況で正しい出力を得るのに役立たないことがわかりました

テーブルを作成するための私のSQLステートメントは次のとおりです

create table Lecturer_availability(
lecid int,
name varchar(100),
dat1 varchar(100),
time1 varchar(100),
dat2 varchar(100),
time2 varchar(100),
dat3 varchar(100),
time3 varchar(100),
)

create table panel(
groupid int,
e1 int,     //examiner 1
e2 int,     //examiner 2
sup int,    //supervisor   
)

create table Location_availability(
hname varchar(100),
dat1 varchar(100),
time1 varchar(100),
dat2 varchar(100),
time2 varchar(100),
dat3 varchar(100),
time3 varchar(100),
)


create table Schedule(
Location varchar(100),
Group_ID varchar(100),
Date varchar(100),
Time_slot varchar(100),
Examiner_1 varchar(100),
Examiner_2 varchar(100),
Supervisor varchar(100),
)

C# コードでは、3 つの DataTable を作成し、for ループを使用して、講義の利用可能な日時とホールの利用可能な日時を一致させ、検証済みのレコードをスケジュール テーブルに挿入します。パネルテーブルは講師の講義IDを保持します

これが私のアルゴリズムです。ここでは、date1 と time1 のみについて検討します

string connString = ConfigurationManager.ConnectionStrings["ConString"].ConnectionString;

 //Load panel details    

            var panel = new DataTable();
            using (var da = new SqlDataAdapter("SELECT * FROM panel",connString))
            {
                da.Fill(panel);

            }

             //Load lecturer avaialability

            var lecavaial = new DataTable();
            using (var da = new SqlDataAdapter("select * from Lecturer_availability", connString))
            {
                da.Fill(lecavaial);

            }

             //Hall Availability

            var hallavaial = new DataTable();
            using (var da = new SqlDataAdapter("select * from Location_availability", connString))
            {
                da.Fill(hallavaial);

            }

 string ex1date1, ex1time1, ex2date1, ex2time1, supdate1, suptime1;
            string ex1name, ex2name, sup, hall, groupid, date, time;

            for (int j = 0; j < hallavaial.Rows.Count; j++)
            {
                for (int k = 0; k < panel.Rows.Count; k++)
                {
                    for (int i = 0; i < lecavaial.Rows.Count; i++)
                    {
                        if (panel.Rows[k]["e1"].ToString() == lecavaial.Rows[i]["lecid"].ToString())
                        {
                            ex1date1 = lecavaial.Rows[i]["dat1"].ToString();
                            ex1time1 = lecavaial.Rows[i]["time1"].ToString();

                            if (ex1date1 == hallavaial.Rows[j]["dat1"].ToString())
                            {
                                if (ex1time1 == hallavaial.Rows[j]["time1"].ToString())
                                {
                                    ex1name = lecavaial.Rows[i]["name"].ToString();
                                    Label5.Text = ex1name;


                                    if (panel.Rows[k]["e2"].ToString() == lecavaial.Rows[i]["lecid"].ToString())
                                    {
                                        ex2date1 = lecavaial.Rows[i]["dat1"].ToString();
                                        ex2time1 = lecavaial.Rows[i]["time1"].ToString();

                                        if (ex2date1 == hallavaial.Rows[j]["dat1"].ToString())
                                        {
                                            if (ex2time1 == hallavaial.Rows[j]["time1"].ToString())
                                            {
                                                ex2name = lecavaial.Rows[i]["name"].ToString();
                                                Label6.Text = ex2name;

                                                if (panel.Rows[k]["sup"].ToString() == lecavaial.Rows[i]["lecid"].ToString())
                                                {
                                                    supdate1 = lecavaial.Rows[i]["dat1"].ToString();
                                                    suptime1 = lecavaial.Rows[i]["time1"].ToString();

                                                    if (supdate1 == hallavaial.Rows[j]["dat1"].ToString())
                                                    {
                                                        if (suptime1 == hallavaial.Rows[j]["time1"].ToString())
                                                        {
                                                            sup = lecavaial.Rows[i]["name"].ToString();
                                                            Label7.Text = sup;
                                                        }

                                                    }


                                                }

                                            }

                                        }
                                    }

                                }
                            }

                        }

                        hall = hallavaial.Rows[j]["hname"].ToString();
                        groupid = panel.Rows[k]["gid"].ToString();
                        date = lecavaial.Rows[i]["dat1"].ToString();
                        time = lecavaial.Rows[i]["time1"].ToString();
                        ex1name = Label5.Text;
                        ex2name = Label6.Text;
                        sup = Label7.Text;


                        using (SqlConnection connection = new SqlConnection(connString))
                        {
                            SqlCommand cmd = new SqlCommand("INSERT INTO Schedule (Location,Group_ID,Date,Time_slot,Examiner_1,Examiner_2,Supervisor) VALUES (@loc, @gid, @date, @time, @ex1, @ex2, @sup)");
                            cmd.CommandType = CommandType.Text;
                            cmd.Connection = connection;
                            cmd.Parameters.AddWithValue("@loc", hall);
                            cmd.Parameters.AddWithValue("@gid", groupid);
                            cmd.Parameters.AddWithValue("@date", date);
                            cmd.Parameters.AddWithValue("@time", time);
                            cmd.Parameters.AddWithValue("@ex1", ex1name);
                            cmd.Parameters.AddWithValue("@ex2", ex2name);
                            cmd.Parameters.AddWithValue("@sup", sup);
                            connection.Open();
                            cmd.ExecuteNonQuery();
                        }

                    }
                }
            }

これが私の出力の仕方です

比較後のスケジュール表

4

0 に答える 0