0

我正在尝试准备一个调度算法,其中我使用了 3 个数据表来保存讲师详细信息面板详细信息和大厅可用性详细信息。我正在使用 for 循环来访问 DataTables。我发现 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