Рейтинг в окне TeacherControlPlugin.cs

Мелкие правки чтобы не выбрасывались исключения при дебаггинге
Мелкие правки Робота - клетка вместо ячейки
This commit is contained in:
Mikhalkovich Stanislav 2023-02-19 00:00:00 +03:00
parent a6d507d2bc
commit c809da4f21
15 changed files with 130 additions and 31 deletions

View file

@ -2706,7 +2706,7 @@ namespace CodeCompletion
private void add_system_unit()
{
string unit_file_name = this.converter.controller.Parser.LanguageInformation.SystemUnitName;
string unit_file_name = this.converter.controller.Parser?.LanguageInformation.SystemUnitName;
if (unit_file_name == null) return;
string unit_name = CodeCompletionNameHelper.FindSourceFileName(unit_file_name);
if (unit_name != null)

View file

@ -1291,7 +1291,7 @@ namespace CodeCompletion
public override string ToString()
{
return CodeCompletionController.CurrentParser.LanguageInformation.GetSimpleDescription(this);
return CodeCompletionController.CurrentParser?.LanguageInformation.GetSimpleDescription(this);
}
}

View file

@ -15,7 +15,7 @@ internal static class RevisionClass
public const string Major = "3";
public const string Minor = "8";
public const string Build = "3";
public const string Revision = "3244";
public const string Revision = "3247";
public const string MainVersion = Major + "." + Minor;
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;

View file

@ -1,4 +1,4 @@
%COREVERSION%=3
%REVISION%=3244
%MINOR%=8
%REVISION%=3247
%COREVERSION%=3
%MAJOR%=3

View file

@ -1 +1 @@
3.8.3.3244
3.8.3.3247

View file

@ -1 +1 @@
!define VERSION '3.8.3.3244'
!define VERSION '3.8.3.3247'

View file

@ -17,7 +17,7 @@ procedure Left;
procedure Up;
/// Переместить Робота вниз
procedure Down;
/// Закрасить текущую ячейку
/// Закрасить текущую клетку
procedure Paint;
/// Возвращает True, если справа от Робота - свободно, и False в противном случае
function FreeFromRight: boolean;
@ -35,9 +35,9 @@ function WallFromLeft: boolean;
function WallFromUp: boolean;
/// Возвращает True, если снизу от Робота - стена, и False в противном случае
function WallFromDown: boolean;
/// Возвращает True, если текущая ячейка не закрашена, и False в противном случае
/// Возвращает True, если текущая клетка не закрашена, и False в противном случае
function CellIsFree: boolean;
/// Возвращает True, если текущая ячейка закрашена, и False в противном случае
/// Возвращает True, если текущая клетка закрашена, и False в противном случае
function CellIsPainted: boolean;
/// Вызывать задание с именем name
procedure Task(name: string);
@ -79,10 +79,14 @@ function СлеваСтена: boolean;
function СверхуСтена: boolean;
/// Возвращает True, если снизу от Робота - стена, и False в противном случае
function СнизуСтена: boolean;
/// Возвращает True, если текущая ячейка не закрашена, и False в противном случае
/// Возвращает True, если текущая клетка не закрашена, и False в противном случае
function ЯчейкаНеЗакрашена: boolean;
/// Возвращает True, если текущая ячейка закрашена, и False в противном случае
/// Возвращает True, если текущая клетка закрашена, и False в противном случае
function ЯчейкаЗакрашена: boolean;
/// Возвращает True, если текущая клетка не закрашена, и False в противном случае
function КлеткаНеЗакрашена: boolean;
/// Возвращает True, если текущая клетка закрашена, и False в противном случае
function КлеткаЗакрашена: boolean;
/// Вызывать задание с данным именем
procedure Задание(имя: string);
/// Создать пустое поле размера 9 на 11 клеток
@ -250,6 +254,8 @@ function СверхуСтена := WallFromUp;
function СнизуСтена := WallFromDown;
function ЯчейкаНеЗакрашена := CellIsFree;
function ЯчейкаЗакрашена := CellIsPainted;
function КлеткаНеЗакрашена := CellIsFree;
function КлеткаЗакрашена := CellIsPainted;
procedure Задание(имя: string) := Task(имя);
procedure СтандартноеПоле := StandardField;
procedure Поле(n,m: integer) := Field(n,m);

View file

@ -167,9 +167,9 @@
this.label12.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.label12.Location = new System.Drawing.Point(3, 0);
this.label12.Name = "label12";
this.label12.Size = new System.Drawing.Size(317, 13);
this.label12.Size = new System.Drawing.Size(311, 13);
this.label12.TabIndex = 17;
this.label12.Text = "Copyright (c) 2005, 2023 Ivan Bondarev, Stanislav Mikhalkovich";
this.label12.Text = "Copyright (c) 2005, 2023 Ivan Bondarev, Stanislav Mikhalkovich";
//
// label9
//

View file

@ -25,7 +25,14 @@ namespace VisualPascalABC
}
public void AppendTextToConsoleCompiler(object text)
{
CompilerConsole.AppendText(text as string);
try
{
CompilerConsole.AppendText(text as string); // SSM !!!!!!!!!!!!!!! 18/02/23
}
catch (Exception e)
{
}
}
public void AddTextToCompilerMessages(string text)

View file

@ -103,6 +103,8 @@ namespace VisualPascalABCPlugins
key = key.OpenSubKey("Microsoft");
key = key.OpenSubKey("VisualStudio");
key = key.OpenSubKey("8.0");
if (key == null)
return null;
string s = (string)key.GetValue("InstallDir");
key.Close();
s = System.IO.Path.GetDirectoryName(s);

View file

@ -43,8 +43,9 @@
this.PluginImageAuthorized = new System.Windows.Forms.PictureBox();
this.panelUnAuthorized = new System.Windows.Forms.Panel();
this.panelAuthorized = new System.Windows.Forms.Panel();
this.labelUserName = new System.Windows.Forms.Label();
this.labelRating = new System.Windows.Forms.Label();
this.labelUserName = new System.Windows.Forms.Label();
this.labelDetails = new System.Windows.Forms.Label();
((System.ComponentModel.ISupportInitialize)(this.userImage)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.groupImage)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.PluginImage)).BeginInit();
@ -188,29 +189,39 @@
// panelAuthorized
//
this.panelAuthorized.Controls.Add(this.labelRating);
this.panelAuthorized.Controls.Add(this.labelDetails);
this.panelAuthorized.Controls.Add(this.labelUserName);
this.panelAuthorized.Location = new System.Drawing.Point(0, 0);
this.panelAuthorized.Name = "panelAuthorized";
this.panelAuthorized.Size = new System.Drawing.Size(422, 132);
this.panelAuthorized.TabIndex = 14;
//
// labelRating
//
this.labelRating.Font = new System.Drawing.Font("Microsoft Sans Serif", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.labelRating.Location = new System.Drawing.Point(12, 50);
this.labelRating.Name = "labelRating";
this.labelRating.Size = new System.Drawing.Size(398, 26);
this.labelRating.TabIndex = 12;
this.labelRating.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// labelUserName
//
this.labelUserName.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.labelUserName.Location = new System.Drawing.Point(25, 14);
this.labelUserName.Font = new System.Drawing.Font("Microsoft Sans Serif", 13F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.labelUserName.Location = new System.Drawing.Point(0, 14);
this.labelUserName.Name = "labelUserName";
this.labelUserName.Size = new System.Drawing.Size(372, 26);
this.labelUserName.Size = new System.Drawing.Size(419, 26);
this.labelUserName.TabIndex = 11;
this.labelUserName.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// labelRating
// labelDetails
//
this.labelRating.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.labelRating.Location = new System.Drawing.Point(25, 53);
this.labelRating.Name = "labelRating";
this.labelRating.Size = new System.Drawing.Size(372, 26);
this.labelRating.TabIndex = 12;
this.labelRating.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.labelDetails.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.labelDetails.Location = new System.Drawing.Point(12, 86);
this.labelDetails.Name = "labelDetails";
this.labelDetails.Size = new System.Drawing.Size(398, 26);
this.labelDetails.TabIndex = 13;
this.labelDetails.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// LoginForm
//
@ -259,5 +270,6 @@
private System.Windows.Forms.Label labelUserName;
private System.Windows.Forms.Panel panelAuthorized;
private System.Windows.Forms.Label labelRating;
private System.Windows.Forms.Label labelDetails;
}
}

View file

@ -238,6 +238,12 @@ namespace DBAccessPluginNamespace
}
}
public void SetRating(string rating)
{
var ss = rating.Split('|');
labelRating.Text = $"Рейтинг: {ss[0]} баллов";
labelDetails.Text = ss[1];
}
public void ChangeControlsAfterLogin(string login)
{
try
@ -308,6 +314,9 @@ namespace DBAccessPluginNamespace
{
WriteLoginPassToAuthDat(usersNamesBox.Text, passwordBox.Text);
ChangeControlsAfterLogin(usersNamesBox.Text);
var Rating = await SiteProvider.GetRating("", usersNamesBox.Text, passwordBox.Text);
SetRating(Rating);
//labelRating.Text = "Рейтинг: " + Rating.ToString();
}
else MessageBox.Show(answer, "Ошибка");
}

View file

@ -213,6 +213,61 @@ namespace DBAccessPluginNamespace
return "Success";
}
async public Task<string> GetRating(string shortFIO, string fullFIO, string password)
{
var values = new Dictionary<string, string>
{
//`id`, `pupilId`, `taskName`, `lessonName`, `type`, `content`, `time`, `IP`
//{ "shortFIO", ShortFIO }, // shortFIO или FIO, и они должны совпадать с такими же в базе
{ "FIO", FullFIO },
//{ "password", Password}
};
// Отправка запроса на сервер
var content = new FormUrlEncodedContent(values);
var response = await client.PostAsync(ServAddr + "/getRating.php", content);
string responseText = await response.Content.ReadAsStringAsync();
var pieces = responseText.Split(';');
var res = "";
var ClassTasksSolved = 0;
var ControlTasksSolved = 0;
var HomeworkTasksSolved = 0;
var AdditionalTasksSolved = 0;
try
{
foreach (var s in pieces)
{
if (s.IndexOf(':') < 1) continue;
var pair = s.Split(':');
switch (pair[0])
{
case "ClassTasks":
ClassTasksSolved = int.Parse(pair[2]);
break;
case "ControlTasks":
ControlTasksSolved = int.Parse(pair[2]);
break;
case "HomeworkTasks":
HomeworkTasksSolved = int.Parse(pair[2]);
break;
case "AdditionalTasks":
AdditionalTasksSolved = int.Parse(pair[2]);
break;
}
}
// великая формула !!!
var Rating = ClassTasksSolved * 1 + ControlTasksSolved * 5 + HomeworkTasksSolved * 3 + AdditionalTasksSolved * 2;
var Details = $" (Осн: {ClassTasksSolved}×1, Доп: {AdditionalTasksSolved}×2, ДЗ: {HomeworkTasksSolved}×3, КР: {ControlTasksSolved}×5)";
res = Rating.ToString() + '|' + Details;
}
catch (Exception e)
{
res = e.Message;
}
return res;
}
// Так как мы на сервере пока ничего не запоминаем, то процесс выхода - просто стереть всё
public void Logout()
{

View file

@ -97,6 +97,8 @@ namespace VisualPascalABCPlugins
if (answer.Result == "Success")
{
loginForm.ChangeControlsAfterLogin(login);
var Rating = User.GetRating("", login, pass);
loginForm.SetRating(Rating.Result);
}
}
catch (Exception e)

View file

@ -17,7 +17,7 @@ procedure Left;
procedure Up;
/// Переместить Робота вниз
procedure Down;
/// Закрасить текущую ячейку
/// Закрасить текущую клетку
procedure Paint;
/// Возвращает True, если справа от Робота - свободно, и False в противном случае
function FreeFromRight: boolean;
@ -35,9 +35,9 @@ function WallFromLeft: boolean;
function WallFromUp: boolean;
/// Возвращает True, если снизу от Робота - стена, и False в противном случае
function WallFromDown: boolean;
/// Возвращает True, если текущая ячейка не закрашена, и False в противном случае
/// Возвращает True, если текущая клетка не закрашена, и False в противном случае
function CellIsFree: boolean;
/// Возвращает True, если текущая ячейка закрашена, и False в противном случае
/// Возвращает True, если текущая клетка закрашена, и False в противном случае
function CellIsPainted: boolean;
/// Вызывать задание с именем name
procedure Task(name: string);
@ -79,10 +79,14 @@ function СлеваСтена: boolean;
function СверхуСтена: boolean;
/// Возвращает True, если снизу от Робота - стена, и False в противном случае
function СнизуСтена: boolean;
/// Возвращает True, если текущая ячейка не закрашена, и False в противном случае
/// Возвращает True, если текущая клетка не закрашена, и False в противном случае
function ЯчейкаНеЗакрашена: boolean;
/// Возвращает True, если текущая ячейка закрашена, и False в противном случае
/// Возвращает True, если текущая клетка закрашена, и False в противном случае
function ЯчейкаЗакрашена: boolean;
/// Возвращает True, если текущая клетка не закрашена, и False в противном случае
function КлеткаНеЗакрашена: boolean;
/// Возвращает True, если текущая клетка закрашена, и False в противном случае
function КлеткаЗакрашена: boolean;
/// Вызывать задание с данным именем
procedure Задание(имя: string);
/// Создать пустое поле размера 9 на 11 клеток
@ -250,6 +254,8 @@ function СверхуСтена := WallFromUp;
function СнизуСтена := WallFromDown;
function ЯчейкаНеЗакрашена := CellIsFree;
function ЯчейкаЗакрашена := CellIsPainted;
function КлеткаНеЗакрашена := CellIsFree;
function КлеткаЗакрашена := CellIsPainted;
procedure Задание(имя: string) := Task(имя);
procedure СтандартноеПоле := StandardField;
procedure Поле(n,m: integer) := Field(n,m);