講師の詳細パネルの詳細とホールの空き状況の詳細を保持するために、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();
}
}
}
}
これが私の出力の仕方です