StudentManager/StudentManager/Common/HomeWorkSet.cs
2024-09-27 19:07:59 +08:00

296 lines
7.0 KiB
C#

using DryIoc.ImTools;
using LiveCharts;
using MySqlX.XDevAPI;
using StudentManager.Data;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
namespace StudentManager.Common
{
public class DetailQuestionBase
{
public QuestionData QuestionData { get; set; } = new QuestionData();
public bool Status { get; set; } = false;
}
public class DetailHomeWorkInfo : BindableBase
{
//public DetailQuestionBase QuestionData { get; set; } = new DetailQuestionBase();
public QuestionData QuestionData { get; set; } = new QuestionData();
//public DateTime DateTime { get; set; } = DateTime.Now;
//public int Lesson { get; set; } = 0;
public bool Status { get; set; } = false;
//public int TotalCount { get; set; } = 0;
//public int ErrorCount { get; set; } = 0;
//public int CorrectCount { get; set; } = 0;
public int PID { get; set; } = 0;
}
public class HomeWork
{
public uint Lesson { get; set; } = 0;
public bool Status { get; set; } = false;
public DateTime DateTime { get; set; } = DateTime.Now;
public List<QuestionBase> Questions { get; set; } = new List<QuestionBase>();
public int TotalCount { get{return Questions.Count;} }
public int ErrorCount { get; set; } = 0;
public int CorrectCount { get; set; } = 0;
public ObservableCollection<DetailHomeWorkInfo> GetDetailHomeWorkList()
{
ObservableCollection<DetailHomeWorkInfo> list = new ObservableCollection<DetailHomeWorkInfo>();
foreach (var item in Questions)
{
list.Add(new DetailHomeWorkInfo
{
//QuestionData = {
// QuestionData = QuestionLib.Get(item.ID),
// Status = item.Status },
QuestionData = QuestionLib.Get(item.ID),
Status = Status,
//Lesson = Lesson,
//DateTime = DateTime,
//TotalCount = TotalCount,
//ErrorCount = ErrorCount,
//CorrectCount = CorrectCount,
PID = item.ID
});
}
return list;
}
public void UpdateData(bool FirstAdd = false)
{
CorrectCount = 0;
ErrorCount = 0;
if(FirstAdd) return;
foreach (var item in Questions)
{
if (item.Status == true) CorrectCount++;
else ErrorCount++;
}
}
public void AddHomeWork(QuestionBase workInfo)
{
Questions.Add(workInfo);
UpdateData();
}
public void AddHomeWork(int id)
{
Questions.Add(new QuestionBase { ID = id });
}
public void RemoveHomeWork(QuestionBase workInfo)
{
Questions.Remove(workInfo);
UpdateData();
}
public void Append(HomeWork homeWork)
{
foreach (var item in homeWork.Questions)
{
Questions.Add(item);
}
UpdateData();
}
}
public class DetailHomeWorkSetInfo
{
public uint Lesson { get; set; } = 0;
public int TotalCount { get; set; } = 0;
public int ErrorCount { get; set; } = 0;
public int CorrectCount { get; set; } = 0;
public bool Status { get; set; } = false;
public DateTime DateTime { get; set; } = DateTime.Now;
}
public class HomeWorkSet
{
[JsonInclude]
private Dictionary<uint, HomeWork> HomeWorks { get; set; } = new Dictionary<uint, HomeWork>();
public int TotalSetCount { get; set; } = 0;
public int TotalQuestionCount { get; set; } = 0;
public int TotalErrorQuestionCount { get; set; } = 0;
public int TotalCorrectQuestionCount { get; set; } = 0;
public int TotalErrorQuestionRate { get; set; } = 0;
[JsonIgnore]
public List<string> Lessons { get; set; } = new List<string>();
[JsonIgnore]
public ChartValues<double> ErrorCounts { get; set; } = new ChartValues<double>();
[JsonIgnore]
public ChartValues<double> CorrectCounts { get; set; } = new ChartValues<double>();
public void UpdateDataView()
{
if(ErrorCounts.Count == 0)
{
foreach (var item in HomeWorks)
{
Lessons.Add(item.Key.ToString());
ErrorCounts.Add(item.Value.ErrorCount);
CorrectCounts.Add(item.Value.CorrectCount);
}
}
}
public void UpdateDate()
{
TotalSetCount = HomeWorks.Count;
TotalQuestionCount = 0;
TotalErrorQuestionCount = 0;
TotalCorrectQuestionCount = 0;
Lessons.Clear();
ErrorCounts.Clear();
CorrectCounts.Clear();
foreach (var item in HomeWorks)
{
TotalQuestionCount += item.Value.TotalCount;
TotalErrorQuestionCount += item.Value.ErrorCount;
TotalCorrectQuestionCount += item.Value.CorrectCount;
Lessons.Add(item.Key.ToString());
ErrorCounts.Add(item.Value.ErrorCount);
CorrectCounts.Add(item.Value.CorrectCount);
}
TotalErrorQuestionRate = TotalQuestionCount == 0 ? 0 : TotalErrorQuestionCount / TotalQuestionCount;
}
public bool Contain(uint id)
{
return HomeWorks.ContainsKey(id);
}
public void AddHomeWork(HomeWork homeWork)
{
HomeWorks.Add(homeWork.Lesson, homeWork);
}
public ObservableCollection<DetailHomeWorkInfo> GetDetailHomeWorkList(uint lesson)
{
ObservableCollection<DetailHomeWorkInfo> list = new ObservableCollection<DetailHomeWorkInfo>();
foreach (var item in HomeWorks[lesson].Questions)
{
list.Add(new DetailHomeWorkInfo
{
QuestionData = QuestionLib.Get(item.ID),
Status = item.Status,
PID = item.ID
});
}
return list;
}
public ObservableCollection<DetailHomeWorkSetInfo> GetDetailHomeWorkSetList()
{
ObservableCollection<DetailHomeWorkSetInfo> list = new ObservableCollection<DetailHomeWorkSetInfo>();
foreach (var item in HomeWorks)
{
list.Add(new DetailHomeWorkSetInfo
{
Status = item.Value.Status,
Lesson = item.Value.Lesson,
DateTime = item.Value.DateTime,
TotalCount = item.Value.TotalCount,
ErrorCount = item.Value.ErrorCount,
CorrectCount = item.Value.CorrectCount
});
}
return list;
}
public void RemoveHomeWork(HomeWork homeWork)
{
HomeWorks.Remove(homeWork.Lesson);
UpdateDate();
}
public HomeWork Get(uint cursonId)
{
if (HomeWorks.ContainsKey(cursonId)) return HomeWorks[cursonId];
return null;
}
public HomeWork GetLast()
{
return HomeWorks[(uint)TotalSetCount];
}
public List<HomeWork> GetAll()
{
return HomeWorks.Values.ToList();
}
public ObservableCollection<HomeWork> GetAllByColl()
{
ObservableCollection<HomeWork> works = new ObservableCollection<HomeWork>();
foreach (var item in HomeWorks)
{
works.Add(item.Value);
}
return works;
}
public void FreshAllHomeWork(long id)
{
HomeWorks.Clear();
SQLHelper.Instance.Query<CursonQuestionsData>(id).ForEach(x =>
{
List<QuestionBase> Questions = new List<QuestionBase>();
x.ProblemIDS.ForEach(y => Questions.Add(new QuestionBase { ID = y, Status = x.CorrectIDS.Contains(y) }));
HomeWorks.Add(x.Lesson, new HomeWork
{
Lesson = x.Lesson,
CorrectCount = x.CorrectCount,
ErrorCount = x.Status == 1 ? x.TotalCount - x.CorrectCount : 0,
DateTime = x.DateTime,
Questions = Questions,
Status = x.Status == 1
});
});
UpdateDate();
}
internal void DeleteHomework(uint lesson)
{
HomeWorks.Remove(lesson);
UpdateDate();
}
}
}