Esempio n. 1
0
        private void очиститьToolStripMenuItem_Click_1(object sender, EventArgs e)
        {
            SourceLog.Clear();
            LogReach.Clear();
            dataGridView1.Rows.Clear();
            dataGridView1.Columns.Clear();
            dataGridView1.Columns.Add("FIO", "Ф.И.О Участника");
            SourceName.Items.Clear();
            SourceTask.Items.Clear();
            SourceName.Text = string.Empty;
            SourceTask.Text = string.Empty;

            dataGridView2.Rows.Clear();
            dataGridView2.Columns.Clear();
            dataGridView2.Columns.Add("FIO", "Ф.И.О Участника");
            dataGridView2.Columns.Add("Pos", "Занятое место");
            dataGridView2.Columns.Add("Sum", "Задачи");
            dataGridView2.Columns.Add("Dob", "Добавочные баллы");
            dataGridView2.Columns.Add("itog", "Итоговая сумма");
        }
Esempio n. 2
0
        private void StartTest_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < dataGridView2.Rows.Count - 1; i++)
            {
                dataGridView2[3, i].Value = 0;
            }
            float TimeLimit = 0;

            float  mainnerf    = 0;
            float  KF          = 0;
            string pupilAnswer = string.Empty;
            string realAnswer  = string.Empty;

            LogReach.Clear();
            float prizeTime = 0;

            string[,] answerForTask = new string[myform.exeNameBox.Items.Count, myform.testTaskDirBox.Items.Count];
            foreach (Control con in myform.Controls)
            {
                if (con.Name == "timeLimit")
                {
                    TimeLimit = float.Parse(con.Text);
                }
            }
            bool   flag            = false;
            double sum             = 0;
            float  maxBallforPupil = 0;
            float  maxBallforTask  = 0;

            if (myform.CustomSystem.Checked)
            {
                foreach (Control con in myform.Controls)
                {
                    if (con.Name == "MaxBall")
                    {
                        maxBallforPupil = float.Parse(con.Text);
                        maxBallforTask  = float.Parse(con.Text) / myform.testTaskDirBox.Items.Count;
                    }
                    if (con.Name == "KFF")
                    {
                        KF = float.Parse(con.Text);
                    }
                }
            }
            if (myform.bonusTime.Checked)
            {
                foreach (Control con in myform.Controls)
                {
                    if (con.Name == "prizeTime")
                    {
                        prizeTime = float.Parse(con.Text);
                    }
                }
            }



            if (myform.checkBox2.Checked)
            {
                foreach (Control con in myform.Controls)
                {
                    if (con.Name == "textBox1")
                    {
                        mainnerf = float.Parse(con.Text);
                    }
                }
            }

            float    tmpnerf = 0;
            bool     donerf  = true;
            DateTime dt      = new DateTime();

            dataGridView1.Show();
            StreamReader     streamIn;
            StreamReader     streamOut;
            ProcessStartInfo psi;

            System.Diagnostics.Process pr = new Process();
            int n = 0;

            bool[,] flagSS = new bool[myform.exeNameBox.Items.Count, myform.testTaskDirBox.Items.Count];
            for (int i = 0; i < flagSS.GetLength(0); i++)
            {
                for (int j = 0; j < flagSS.GetLength(1); j++)
                {
                    flagSS[i, j] = false;
                }
            }
            for (int i = 0; i < myform.exeNameBox.Items.Count; i++)
            {
                myform.exeFileExe.Items.Clear();
                myform.exeFileExe.Items.AddRange(Directory.GetFiles(myform.exeNameBox.Items[i].ToString()));


                fi = new FileInfo(myform.exeNameBox.Items[i].ToString());
                LogReach.SelectionFont = new Font("Microsoft Sans Serif", 11, FontStyle.Bold);
                LogReach.AppendText("\t " + fi.Name + "\n");


                for (int k = 1; k <= myform.testTaskDirBox.Items.Count; k++)
                {
                    LogReach.SelectionFont  = new Font("Microsoft Sans Serif", float.Parse("8,25"), FontStyle.Italic);
                    LogReach.SelectionColor = default(Color);
                    LogReach.AppendText("Задача " + k + ":\n");
                    LogReach.AppendText("\n");


                    foreach (string path in myform.exeFileExe.Items)
                    {
                        fi = new FileInfo(path);
                        if (fi.Name == k.ToString() + ".exe")
                        {
                            foreach (string put in myform.exeFileExe.Items)
                            {
                                fi = new FileInfo(put);
                                if ((fi.Name == k.ToString() + ".c") || (fi.Name == k.ToString() + ".h") ||
                                    (fi.Name == k.ToString() + ".cpp") || (fi.Name == k.ToString() + ".hpp") ||
                                    (fi.Name == k.ToString() + ".cs") || (fi.Name == k.ToString() + ".pas"))
                                {
                                    donerf = false;
                                    break;
                                }
                            }

                            myform.testTaskFileBox.Items.Clear();
                            myform.outputOriginFileBox.Items.Clear();
                            myform.testTaskFileBox.Items.AddRange(Directory.GetFiles(myform.testTaskDirBox.Items[k - 1].ToString()));
                            myform.outputOriginFileBox.Items.AddRange(Directory.GetFiles(myform.outputOriginDirBox.Items[k - 1].ToString()));
                            //цикл на прокрутку
                            for (int l = 0; l < myform.testTaskFileBox.Items.Count; l++)
                            {
                                foreach (FileInfo f in myform.inputInfo.GetFiles())
                                {
                                    f.Delete();
                                }

                                foreach (FileInfo f in myform.outputInfo.GetFiles())
                                {
                                    f.Delete();
                                }

                                File.Copy(myform.testTaskFileBox.Items[l].ToString(), myform.inputInfo.ToString() + @"\" + k.ToString() + "." + "txt");
                                File.Copy(myform.outputOriginFileBox.Items[l].ToString(), myform.outputInfo.ToString() + @"\" + k.ToString() + "." + "txt");

                                /*
                                 * копирование, переименование файла
                                 */

                                psi          = new ProcessStartInfo(path);
                                pr.StartInfo = psi;
                                dt           = DateTime.Now;
                                pr.Start();

                                while ((DateTime.Now.Ticks - dt.Ticks) / TimeSpan.TicksPerSecond < TimeLimit)
                                {
                                    if (pr.HasExited)
                                    {
                                        flag = true;
                                        break;
                                    }
                                }
                                if (!flag)
                                {
                                    pr.Kill();
                                }
                                else
                                {
                                    flag = false;
                                    //pr.Close();
                                    streamIn = new StreamReader(myform.inputInfo.ToString() + @"\" + k.ToString() + "." + "txt");

                                    if (File.Exists(myform.outputInfo.ToString() + @"\" + k.ToString() + "." + "txt"))
                                    {
                                        streamOut = new StreamReader(myform.outputInfo.ToString() + @"\" + k.ToString() + "." + "txt");
                                    }
                                    else
                                    {
                                        continue;
                                    }

                                    pupilAnswer = streamIn.ReadToEnd();
                                    if (myform.on_OffComp.Checked)
                                    {
                                        answerForTask[i, k - 1] += pupilAnswer;
                                    }
                                    realAnswer = streamOut.ReadToEnd();
                                    LogReach.AppendText("Тест " + (l + 1) + ":\n");


                                    //сравнение  с рил отутпут
                                    if (pupilAnswer == realAnswer)
                                    {
                                        LogReach.AppendText(realAnswer + "\n");
                                        LogReach.SelectionColor = Color.Green;
                                        LogReach.AppendText(pupilAnswer + "\n");
                                        // LogReach.SelectionColor = Color.Green;

                                        LogReach.AppendText("\n");
                                        LogReach.SelectionColor = default(Color);
                                        n++;
                                    }
                                    else
                                    {
                                        LogReach.AppendText(realAnswer + "\n");
                                        LogReach.SelectionFont  = new Font("Microsoft Sans Serif", float.Parse("8,25"), FontStyle.Bold);
                                        LogReach.SelectionColor = Color.Red;
                                        LogReach.AppendText(pupilAnswer + "\n");
                                        //LogReach.ForeColor = Color.Red;

                                        LogReach.AppendText("\n");
                                        LogReach.SelectionColor = default(Color);
                                    }

                                    streamIn.Close();
                                    streamOut.Close();
                                }
                            }
                        }
                        /*   else if (Другое разрешение)    */
                    }
                    if (myform.StudentSystem.Checked)
                    {
                        if ((n > 0) && (n != myform.testTaskFileBox.Items.Count))
                        {
                            flagSS[i, k - 1] = true;
                        }
                        if (n == myform.testTaskFileBox.Items.Count)
                        {
                            dataGridView1[k, i].Value           = "1";
                            dataGridView1[k, i].Style.BackColor = Color.Green;
                        }
                        else
                        {
                            dataGridView1[k, i].Value           = "0";
                            dataGridView1[k, i].Style.BackColor = Color.Red;
                        }
                    }
                    else
                    {
                        dataGridView1[k, i].Value = Math.Round(maxBallforTask / myform.testTaskFileBox.Items.Count * n, 2);
                        if (float.Parse(dataGridView1[k, i].Value.ToString()) == maxBallforTask)
                        {
                            dataGridView1[k, i].Style.BackColor = Color.Green;
                        }
                        else if (double.Parse(dataGridView1[k, i].Value.ToString()) <= 0)
                        {
                            dataGridView1[k, i].Value           = 0;
                            dataGridView1[k, i].Style.BackColor = Color.Red;
                        }
                    }
                    n   = 0;
                    psi = new ProcessStartInfo();
                    if (donerf)
                    {
                        tmpnerf += mainnerf;
                    }
                    donerf = true;
                }
                dataGridView2[3, i].Value = float.Parse(dataGridView2[3, i].Value.ToString()) - tmpnerf;
                tmpnerf = 0;
            }

            for (int i = 0; i <= dataGridView1.RowCount - 2; i++)
            {
                for (int j = 1; j <= dataGridView1.ColumnCount - 1; j++)
                {
                    sum += float.Parse(dataGridView1[j, i].Value.ToString());
                }
                dataGridView2[2, i].Value = sum;
                sum = 0;
            }



            if (myform.on_OffComp.Checked)
            {
                string[] tmpAnswerForTask = new string[myform.exeNameBox.Items.Count];
                string   tmp  = string.Empty;
                float    comp = KF * myform.exeNameBox.Items.Count;
                for (int i = 0; i < myform.testTaskDirBox.Items.Count; i++)
                {
                    int max = 1;
                    for (int j = 0; j < myform.exeNameBox.Items.Count; j++)
                    {
                        tmp = answerForTask[i, j];
                        tmpAnswerForTask[j] = tmp;
                    }

                    Array.Sort(tmpAnswerForTask);

                    for (int k = 0; k < tmpAnswerForTask.Count() - 1; k++)
                    {
                        if (tmpAnswerForTask[k] == tmpAnswerForTask[k + 1])
                        {
                            n++;
                            if (n > max)
                            {
                                max = n;
                            }
                        }
                        else
                        {
                            n = 1;
                        }
                    }

                    if (max >= comp)
                    {
                        if (myform.CustomSystem.Checked)
                        {
                            for (int k = 0; k < myform.exeNameBox.Items.Count; k++)
                            {
                                if (float.Parse(dataGridView1[i + 1, k].Value.ToString()) > 0)
                                {
                                    dataGridView2[3, k].Value = float.Parse(dataGridView2[3, k].Value.ToString()) + (maxBallforTask - float.Parse(dataGridView1[i + 1, k].Value.ToString()));
                                }
                            }
                        }
                        else
                        {
                            for (int k = 0; k < myform.exeNameBox.Items.Count; k++)
                            {
                                if (flagSS[k, i])
                                {
                                    dataGridView2[3, k].Value = float.Parse(dataGridView2[3, k].Value.ToString()) + 1;
                                }
                            }
                        }
                    }
                }
            }


            double   ball  = 0;
            DateTime tmpDT = new DateTime();

            if (myform.bonusTime.Checked)
            {
                for (int i = 0; i < dataGridView2.RowCount - 1; i++)
                {
                    if (double.Parse(dataGridView2[2, i].Value.ToString()) == maxBallforPupil)  //Need changed!!
                    {
                        for (int j = 0; j < myform.exeNameBox.Items.Count; j++)

                        {
                            fi = new FileInfo(myform.exeNameBox.Items[j].ToString());
                            if (fi.Name == dataGridView1[0, i].Value.ToString())
                            {
                                tmpDT = Directory.GetLastWriteTime(myform.exeNameBox.Items[j].ToString());
                                ball  = float.Parse(dataGridView2[3, i].Value.ToString()) + Math.Round((myform.dateTimePicker1.Value.Ticks - tmpDT.Ticks) / TimeSpan.TicksPerMinute * prizeTime, 2);
                                dataGridView2[3, i].Value = ball;
                            }
                        }
                    }
                }
            }


            for (int i = 0; i < dataGridView2.Rows.Count - 1; i++)
            {
                dataGridView2[4, i].Value = float.Parse(dataGridView2[2, i].Value.ToString()) + float.Parse(dataGridView2[3, i].Value.ToString());
            }


            dataGridView2.Sort(dataGridView2.Columns[4], ListSortDirection.Descending);
            dataGridView2[1, 0].Value = 1;

            for (int i = 1; i < dataGridView1.RowCount - 1; i++)
            {
                if (float.Parse(dataGridView2[4, i].Value.ToString())
                    == float.Parse(dataGridView2[4, i - 1].Value.ToString()))
                {
                    dataGridView2[1, i].Value =
                        dataGridView2[1, i - 1].Value;
                }
                else
                {
                    dataGridView2[1, i].Value =
                        (float.Parse(dataGridView2[1, i - 1].Value.ToString()) + 1);
                }
            }
        }