Finish Detail Data Info

This commit is contained in:
wangxiner55 2024-09-13 19:11:38 +08:00
parent fe9c8a3f0c
commit 6ec84c76b9
15 changed files with 360 additions and 118 deletions

View File

@ -2,6 +2,7 @@
using StudentManager.Data; using StudentManager.Data;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -22,6 +23,25 @@ namespace StudentManager.Common
public int CorrectCount { get; set; } = 0; public int CorrectCount { get; set; } = 0;
} }
public class DetailErrorInfo
{
public QuestionData QuestionData { get; set; } = new QuestionData();
public int TotalUseCount { get; set; } = 1;
public int ErrorCount { get; set; } = 1;
public int CorrectCount { get; set; } = 0;
public bool Status { get; set; } = false;
}
public class DetailErrorSetInfo
{
public int TotalCount { get; set; } = 0;
public int TotalErrorCount { get; set; } = 0;
public int CorrectCount { get; set; } = 0;
public int ErrorCount { get; set; } = 0;
public float ErrorRate { get; set; } = 0;
public float CorrectRate { get; set; } = 0;
}
public class ErrorSet public class ErrorSet
{ {
public int TotalCount { get; set; } = 0; public int TotalCount { get; set; } = 0;
@ -40,6 +60,36 @@ namespace StudentManager.Common
} }
} }
public DetailErrorSetInfo GetDetailErrorSetInfo()
{
return new DetailErrorSetInfo
{
TotalCount = QuestionLib.GetQuestionCount(),
TotalErrorCount = Errores.Count(),
CorrectCount = CorrectArray.Count(),
ErrorCount = ErrorArray.Count(),
ErrorRate = ErrorArray.Count() / QuestionLib.GetQuestionCount(),
CorrectRate = CorrectArray.Count() / Errores.Count()
};
}
public ObservableCollection<DetailErrorInfo> GetDetailErrorQuestionList()
{
ObservableCollection<DetailErrorInfo> list = new ObservableCollection<DetailErrorInfo>();
foreach (var item in Errores)
{
list.Add(new DetailErrorInfo
{
QuestionData = QuestionLib.Get(item.Key),
CorrectCount = item.Value.CorrectCount,
ErrorCount = item.Value.ErrorCount,
Status = item.Value.QuestionBase.Status
});
}
return list;
}
public void AddQuestion(QuestionBase question) public void AddQuestion(QuestionBase question)
{ {
if (question.Status) if (question.Status)
@ -131,7 +181,7 @@ namespace StudentManager.Common
SQLHelper.Query<UserQuestionData>(Tables.UQTable, id).ForEach(x => SQLHelper.Query<UserQuestionData>(Tables.UQTable, id).ForEach(x =>
{ {
AddQuestion(new QuestionBase { ID = x.PID, Status = x.Status}); AddQuestion(new QuestionBase { ID = x.PID, Status = x.Status });
}); });
} }
} }

View File

@ -13,7 +13,7 @@ namespace StudentManager.Common
{ {
public static HomeWork CommonHomeWork { get; set; } = new HomeWork(); public static HomeWork CommonHomeWork { get; set; } = new HomeWork();
public static void Create(StudentInfo student,int lesson, int workNum = 10) public static void Create(StudentInfo student,int lesson, bool appedCommonWork = false, int workNum = 10)
{ {
HomeWork work = new HomeWork { Lesson = lesson}; HomeWork work = new HomeWork { Lesson = lesson};
foreach(var item in student.ErrorSet.ErrorArray) foreach(var item in student.ErrorSet.ErrorArray)
@ -21,21 +21,21 @@ namespace StudentManager.Common
work.AddHomeWork(item); work.AddHomeWork(item);
} }
if (CommonHomeWork.Questions.Count > 0) if (appedCommonWork && CommonHomeWork.Questions.Count > 0)
{ {
work.Append(CommonHomeWork); work.Append(CommonHomeWork);
} }
student.CurentHomeWork = work; Public(work);
} }
public static void Public() public static void Public(HomeWork homeWork)
{ {
foreach (var item in StudentLib.StudentDic) foreach (var item in StudentLib.StudentDic)
{ {
item.Value.PublicHomeWork(); item.Value.PublicHomeWork(homeWork);
} }
} }
} }

View File

@ -1,33 +1,98 @@
using DryIoc.ImTools; using DryIoc.ImTools;
using MySqlX.XDevAPI;
using StudentManager.Data; using StudentManager.Data;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Text.Json.Serialization;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace StudentManager.Common namespace StudentManager.Common
{ {
public class DetailQuestionBase
{
public QuestionData QuestionData { get; set; } = new QuestionData();
public bool Status { get; set; } = false;
}
public class DetailHomeWorkInfo
{
public DetailQuestionBase QuestionData { get; set; } = new DetailQuestionBase();
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 class HomeWork public class HomeWork
{ {
public int Lesson { get; set; } = 0; public int Lesson { get; set; } = 0;
public bool Status { get; set; } = false; public bool Status { get; set; } = false;
public HashSet<QuestionBase> Questions { get; set; } = new HashSet<QuestionBase>(); public DateTime DateTime { get; set; } = DateTime.Now;
public List<QuestionBase> Questions { get; set; } = new List<QuestionBase>();
public int TotalCount { get; set; } = 0;
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 },
Status = Status,
Lesson = Lesson,
DateTime = DateTime,
TotalCount = TotalCount,
ErrorCount = ErrorCount,
CorrectCount = CorrectCount
});
}
return list;
}
private void FreshData()
{
CorrectCount = 0;
ErrorCount = 0;
TotalCount = Questions.Count;
foreach (var item in Questions)
{
if (item.Status == true) CorrectCount++;
else ErrorCount++;
}
}
public void AddHomeWork(QuestionBase workInfo) public void AddHomeWork(QuestionBase workInfo)
{ {
Questions.Add(workInfo); Questions.Add(workInfo);
FreshData();
} }
public void AddHomeWork(int id) public void AddHomeWork(int id)
{ {
Questions.Add(new QuestionBase { ID = id }); Questions.Add(new QuestionBase { ID = id });
FreshData();
} }
public void RemoveHomeWork(QuestionBase workInfo) public void RemoveHomeWork(QuestionBase workInfo)
{ {
Questions.Remove(workInfo); Questions.Remove(workInfo);
FreshData();
} }
public void Append(HomeWork homeWork) public void Append(HomeWork homeWork)
@ -40,14 +105,74 @@ namespace StudentManager.Common
} }
} }
public class DetailHomeWorkSetInfo
{
public int TotalCount { get; set; } = 0;
public bool Status { get; set; } = false;
public DateTime DateTime { get; set; } = DateTime.Now;
public int Lesson { get; set; } = 0;
public int ErrorCount { get; set; } = 0;
public int CorrectCount { get; set; } = 0;
}
public class HomeWorkSet public class HomeWorkSet
{ {
[JsonInclude]
private Dictionary<int, HomeWork> HomeWorks { get; set; } = new Dictionary<int, HomeWork>(); private Dictionary<int, HomeWork> HomeWorks { get; set; } = new Dictionary<int, HomeWork>();
public int TotalCount { get; set; } = 0;
public void AddHomeWork(HomeWork homeWork) public void AddHomeWork(HomeWork homeWork)
{ {
HomeWorks.Add(homeWork.Lesson, homeWork); HomeWorks.Add(homeWork.Lesson, homeWork);
TotalCount = HomeWorks.Count;
}
public ObservableCollection<DetailHomeWorkInfo> GetDetailHomeWorkList(int lesson)
{
ObservableCollection<DetailHomeWorkInfo> list = new ObservableCollection<DetailHomeWorkInfo>();
foreach (var item in HomeWorks[lesson].Questions)
{
list.Add(new DetailHomeWorkInfo
{
QuestionData = {
QuestionData = QuestionLib.Get(item.ID),
Status = item.Status },
Status = HomeWorks[lesson].Status,
Lesson = HomeWorks[lesson].Lesson,
DateTime = HomeWorks[lesson].DateTime,
TotalCount = HomeWorks[lesson].TotalCount,
ErrorCount = HomeWorks[lesson].ErrorCount,
CorrectCount = HomeWorks[lesson].CorrectCount
});
}
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;
} }
@ -58,7 +183,13 @@ namespace StudentManager.Common
public HomeWork Get(int cursonId) public HomeWork Get(int cursonId)
{ {
return HomeWorks[cursonId]; if (HomeWorks.ContainsKey(cursonId)) return HomeWorks[cursonId];
return null;
}
public HomeWork GetLast()
{
return HomeWorks[TotalCount];
} }
public List<HomeWork> GetAll() public List<HomeWork> GetAll()
@ -77,15 +208,24 @@ namespace StudentManager.Common
return works; return works;
} }
public void QueryCQSet(int id) public void FreshAllHomeWork(int id)
{ {
HomeWorks.Clear(); HomeWorks.Clear();
SQLHelper.Query<CursonQuestionsData>(Tables.CQTable, id).ForEach(x => SQLHelper.Query<CursonQuestionsData>(Tables.CQTable, id).ForEach(x =>
{ {
HashSet<QuestionBase> Questions = new HashSet<QuestionBase>(); List<QuestionBase> Questions = new List<QuestionBase>();
x.ProblemIDS.ForEach(y => Questions.Add(new QuestionBase { ID = y, Status = x.CorrectIDS.Contains(y) })); x.ProblemIDS.ForEach(y => Questions.Add(new QuestionBase { ID = y, Status = x.CorrectIDS.Contains(y) }));
HomeWorks.Add(x.Lesson, new HomeWork { Lesson = x.Lesson, Questions = Questions, Status = x.Status == 1 }); HomeWorks.Add(x.Lesson, new HomeWork
{
Lesson = x.Lesson,
TotalCount = x.ProblemIDS.Length,
CorrectCount = x.CorrectCount,
ErrorCount = x.TotalCount - x.CorrectCount,
DateTime = x.DateTime,
Questions = Questions,
Status = x.Status == 1
});
}); });
} }
} }

View File

@ -40,6 +40,7 @@ namespace StudentManager.Common
(data as StudentData).Grade = (byte)reader[5]; (data as StudentData).Grade = (byte)reader[5];
(data as StudentData).TotalsQuestions = (UInt16)reader[6]; (data as StudentData).TotalsQuestions = (UInt16)reader[6];
(data as StudentData).CorrectionCount = (UInt16)reader[7]; (data as StudentData).CorrectionCount = (UInt16)reader[7];
(data as StudentData).HomeWork = (UInt16)reader[8];
} }
else if (typeof(T) == typeof(QuestionData)) else if (typeof(T) == typeof(QuestionData))
{ {
@ -65,6 +66,7 @@ namespace StudentManager.Common
(data as CursonQuestionsData).CorrectIDS = string.IsNullOrEmpty(reader[2].ToString()) ? Array.Empty<int>() : JsonConvert.DeserializeObject<int[]>(reader[2].ToString()); (data as CursonQuestionsData).CorrectIDS = string.IsNullOrEmpty(reader[2].ToString()) ? Array.Empty<int>() : JsonConvert.DeserializeObject<int[]>(reader[2].ToString());
(data as CursonQuestionsData).Lesson = (byte)reader[3]; (data as CursonQuestionsData).Lesson = (byte)reader[3];
(data as CursonQuestionsData).Status = (byte)reader[4]; (data as CursonQuestionsData).Status = (byte)reader[4];
(data as CursonQuestionsData).DateTime = (DateTime)reader[5];
(data as CursonQuestionsData).TotalCount = (data as CursonQuestionsData).ProblemIDS.Length; (data as CursonQuestionsData).TotalCount = (data as CursonQuestionsData).ProblemIDS.Length;
(data as CursonQuestionsData).CorrectCount = (data as CursonQuestionsData).CorrectIDS.Length; (data as CursonQuestionsData).CorrectCount = (data as CursonQuestionsData).CorrectIDS.Length;
} }

View File

@ -11,6 +11,7 @@ namespace StudentManager.Data
public int UID { get; set; } = 0; public int UID { get; set; } = 0;
public int[] ProblemIDS { get; set; } = { }; public int[] ProblemIDS { get; set; } = { };
public int[] CorrectIDS { get; set; } = { }; public int[] CorrectIDS { get; set; } = { };
public DateTime DateTime { get; set; } = DateTime.Now;
public int Lesson { get; set; } = 0; public int Lesson { get; set; } = 0;
public int TotalCount { get; set; } = 0; public int TotalCount { get; set; } = 0;

View File

@ -2,6 +2,7 @@
using StudentManager.Common; using StudentManager.Common;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics; using System.Diagnostics;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
@ -15,7 +16,13 @@ namespace StudentManager.Data
{ {
public static string FileName = "questionLib.dbqi"; public static string FileName = "questionLib.dbqi";
public static Dictionary<int, QuestionData> QuestionDic { get; set; } = new Dictionary<int, QuestionData>(); public static Dictionary<int, QuestionData> QuestionDic { get; set; } = new Dictionary<int, QuestionData>();
public static int TotalCount { get; set; } = 0;
public static int GetQuestionCount()
{
TotalCount = QuestionDic.Count;
return TotalCount;
}
public static void Load() public static void Load()
{ {
QuestionDic.Clear(); QuestionDic.Clear();
@ -34,6 +41,16 @@ namespace StudentManager.Data
SQLHelper.Query<QuestionData>(Tables.QuesTable).ForEach(x => QuestionDic.Add(x.Id, x)); SQLHelper.Query<QuestionData>(Tables.QuesTable).ForEach(x => QuestionDic.Add(x.Id, x));
} }
public static ObservableCollection<QuestionData> GetAllQuestion()
{
var list = new ObservableCollection<QuestionData>();
foreach (QuestionData data in QuestionDic.Values)
{
list.Add(data);
}
return list;
}
public static QuestionData Get(int id) public static QuestionData Get(int id)
{ {
if (!QuestionDic.ContainsKey(id)) return null; if (!QuestionDic.ContainsKey(id)) return null;

View File

@ -16,7 +16,7 @@ namespace StudentManager.Data
public int Grade { get; set; } = 1; public int Grade { get; set; } = 1;
public int TotalsQuestions { get; set; } = 0; public int TotalsQuestions { get; set; } = 0;
public int CorrectionCount { get; set; } = 0; public int CorrectionCount { get; set; } = 0;
public int HomeWork { get; set; } = 0;
public float ErrorRate { get; set; } = 0; public float ErrorRate { get; set; } = 0;
public float CorrectRate { get; set; } = 0; public float CorrectRate { get; set; } = 0;

View File

@ -1,6 +1,7 @@
using StudentManager.Common; using StudentManager.Common;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics; using System.Diagnostics;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
@ -50,6 +51,7 @@ namespace StudentManager.Data
Address = x.Address, Address = x.Address,
Contact = x.Contact, Contact = x.Contact,
Grade = x.Grade, Grade = x.Grade,
CurrentHomeWorkIndex = x.HomeWork,
})); }));
foreach (var item in StudentDic) foreach (var item in StudentDic)
@ -58,6 +60,16 @@ namespace StudentManager.Data
} }
} }
public static ObservableCollection<StudentInfo> GetAllStudents()
{
var list = new ObservableCollection<StudentInfo>();
foreach (var item in StudentDic)
{
list.Add(item.Value);
}
return list;
}
public static StudentInfo QueryStudentDetailInfo(int uid) public static StudentInfo QueryStudentDetailInfo(int uid)
{ {
return GetStudentDetailInfo(Get(uid)); return GetStudentDetailInfo(Get(uid));
@ -82,14 +94,15 @@ namespace StudentManager.Data
public static StudentInfo GetStudentDetailInfo(StudentInfo studentData) public static StudentInfo GetStudentDetailInfo(StudentInfo studentData)
{ {
studentData.ErrorSet.QueryErrorSet(studentData.UID); studentData.ErrorSet.QueryErrorSet(studentData.UID);
studentData.HomeWorkSet.QueryCQSet(studentData.UID); studentData.HomeWorkSet.FreshAllHomeWork(studentData.UID);
studentData.CurentHomeWork = studentData.HomeWorkSet.Get(studentData.CurrentHomeWorkIndex);
return studentData; return studentData;
} }
public static void GetStudentDetailInfo(ref StudentInfo studentData) public static void GetStudentDetailInfo(ref StudentInfo studentData)
{ {
studentData.ErrorSet.QueryErrorSet(studentData.UID); studentData.ErrorSet.QueryErrorSet(studentData.UID);
studentData.HomeWorkSet.QueryCQSet(studentData.UID); studentData.HomeWorkSet.FreshAllHomeWork(studentData.UID);
} }
} }
@ -101,15 +114,18 @@ namespace StudentManager.Data
public string Contact { get; set; } = "Contact"; public string Contact { get; set; } = "Contact";
public string Address { get; set; } = "Address"; public string Address { get; set; } = "Address";
public int Grade { get; set; } = 1; public int Grade { get; set; } = 1;
public int HomeWorkCount { get; set; } = 0;
public ErrorSet ErrorSet { get; set; } = new ErrorSet(); public ErrorSet ErrorSet { get; set; } = new ErrorSet();
public HomeWorkSet HomeWorkSet { get; set; } = new HomeWorkSet(); public HomeWorkSet HomeWorkSet { get; set; } = new HomeWorkSet();
public int CurrentHomeWorkIndex = 0;
public HomeWork CurentHomeWork { get; set; } = new HomeWork(); public HomeWork CurentHomeWork { get; set; } = new HomeWork();
public void PublicHomeWork() public void PublicHomeWork(HomeWork homeWork)
{ {
HomeWorkSet.AddHomeWork(CurentHomeWork); HomeWorkSet.AddHomeWork(homeWork);
} }
} }
} }

View File

@ -28,11 +28,7 @@ namespace StudentManager.Editor
private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{ {
var c = DataContext as Students;
if (c != null)
{
c.SelectedCQData = (Data.CursonQuestionsData)(sender as ListBox).SelectedItem;
}
} }
} }
} }

View File

@ -10,12 +10,11 @@
<Grid> <Grid>
<DockPanel LastChildFill="False"> <DockPanel LastChildFill="False">
<ListBox ItemsSource="{Binding CQDatas}" <ListBox ItemsSource="{Binding SelectedHomeWorkSet}">
SelectedItem="{Binding SelectedStudent}">
<i:Interaction.Triggers> <i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged"> <i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction <i:InvokeCommandAction
Command="{Binding DataContext.SelectedCommand ,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ItemsControl}}"/> Command="{Binding DataContext.HomeWorkSelectedCommand ,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ItemsControl}}"/>
</i:EventTrigger> </i:EventTrigger>
</i:Interaction.Triggers> </i:Interaction.Triggers>
<ListBox.ItemTemplate> <ListBox.ItemTemplate>
@ -25,13 +24,14 @@
</ListBox.ItemTemplate> </ListBox.ItemTemplate>
</ListBox> </ListBox>
<ListBox DockPanel.Dock="Top" ItemsSource="{Binding StudentCQDatas}"> <ListBox DockPanel.Dock="Top" ItemsSource="{Binding HomeWork}">
<ListBox.ItemTemplate> <ListBox.ItemTemplate>
<DataTemplate> <DataTemplate>
<DockPanel Width="800" HorizontalAlignment="Stretch" LastChildFill="False"> <DockPanel Width="800" HorizontalAlignment="Stretch" LastChildFill="False">
<TextBlock DockPanel.Dock="Left" Text="{Binding Id}"/> <TextBlock Text="{Binding DateTime}"/>
<TextBlock Grid.Column="1" Text="{Binding Stem}" TextWrapping="Wrap"/> <TextBlock Text="{Binding QuestionData.QuestionData.Stem}"/>
<CheckBox Grid.Column="2" DockPanel.Dock="Right" Content="正确?"/> <TextBlock Text="{Binding QuestionData.Stem}" TextWrapping="Wrap"/>
<CheckBox DockPanel.Dock="Right" Content="正确?"/>
</DockPanel> </DockPanel>
</DataTemplate> </DataTemplate>
</ListBox.ItemTemplate> </ListBox.ItemTemplate>

View File

@ -27,6 +27,7 @@
<i:Interaction.Triggers> <i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged"> <i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction <i:InvokeCommandAction
CommandParameter="{Binding SelectedItem, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ListBox}}"
Command="{Binding DataContext.SelectedCommand ,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ItemsControl}}"/> Command="{Binding DataContext.SelectedCommand ,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ItemsControl}}"/>
</i:EventTrigger> </i:EventTrigger>
</i:Interaction.Triggers> </i:Interaction.Triggers>
@ -65,12 +66,12 @@
</StackPanel> </StackPanel>
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource TextStyle}" Text="{Binding TotalQuestions}"/> <TextBlock Style="{StaticResource TextStyle}" Text="{Binding ErrorSet.TotalCount}"/>
<TextBlock Style="{StaticResource TextStyle}" Text="{Binding SelectedStudent.TotalsQuestions}"/> <TextBlock Style="{StaticResource TextStyle}" Text="{Binding ErrorSet.TotalErrorCount}"/>
<TextBlock Style="{StaticResource TextStyle}" Text="{Binding SelectedStudent.CorrectionCount}"/> <TextBlock Style="{StaticResource TextStyle}" Text="{Binding ErrorSet.CorrectCount}"/>
<TextBlock Style="{StaticResource TextStyle}" Text="{Binding SelectedStudent.UnCorrectCount}"/> <TextBlock Style="{StaticResource TextStyle}" Text="{Binding ErrorSet.ErrorCount}"/>
<TextBlock Style="{StaticResource TextStyle}" Text="{Binding SelectedStudent.ErrorRate}"/> <TextBlock Style="{StaticResource TextStyle}" Text="{Binding ErrorSet.ErrorRate}"/>
<TextBlock Style="{StaticResource TextStyle}" Text="{Binding SelectedStudent.CorrectRate}"/> <TextBlock Style="{StaticResource TextStyle}" Text="{Binding ErrorSet.CorrectRate}"/>
</StackPanel> </StackPanel>
@ -87,14 +88,18 @@
<TextBlock Style="{StaticResource TextStyle}" Text="状态"/> <TextBlock Style="{StaticResource TextStyle}" Text="状态"/>
</StackPanel> </StackPanel>
<ListBox ItemsSource="{Binding CQDatas}" <ListBox ItemsSource="{Binding HomeWorkSet}">
SelectionChanged="ListBox_SelectionChanged">
<i:Interaction.Triggers> <i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick"> <i:EventTrigger EventName="MouseDoubleClick">
<i:InvokeCommandAction <i:InvokeCommandAction
CommandParameter="DetailCheckView" CommandParameter="DetailCheckView"
Command="{Binding DataContext.RegionTo ,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ItemsControl}}"/> Command="{Binding DataContext.RegionTo ,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ItemsControl}}"/>
</i:EventTrigger> </i:EventTrigger>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction
CommandParameter="{Binding SelectedItem, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ListBox}}"
Command="{Binding DataContext.HomeWorkSetSelectedCommand ,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ItemsControl}}"/>
</i:EventTrigger>
</i:Interaction.Triggers> </i:Interaction.Triggers>
<ListBox.ItemTemplate> <ListBox.ItemTemplate>

View File

@ -28,11 +28,7 @@ namespace StudentManager.Editor
private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{ {
var c = DataContext as Students;
if (c != null)
{
c.SelectedCQData = (Data.CursonQuestionsData)(sender as ListBox).SelectedItem;
}
} }
} }
} }

View File

@ -18,11 +18,6 @@
SelectedItem="{Binding SelectedStudent}"> SelectedItem="{Binding SelectedStudent}">
<i:Interaction.Triggers> <i:Interaction.Triggers>
<!--<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction
Command="{Binding DataContext.SelectedCommand ,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ItemsControl}}"/>
</i:EventTrigger>-->
<i:EventTrigger EventName="MouseDoubleClick"> <i:EventTrigger EventName="MouseDoubleClick">
<i:InvokeCommandAction <i:InvokeCommandAction
CommandParameter="DetailView" CommandParameter="DetailView"
@ -33,11 +28,11 @@
<DataTemplate> <DataTemplate>
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource TextStyle}" Text="{Binding Name}"/> <TextBlock Style="{StaticResource TextStyle}" Text="{Binding Name}"/>
<TextBlock Style="{StaticResource TextStyle}" Text="{Binding TotalsQuestions}"/> <!--<TextBlock Style="{StaticResource TextStyle}" Text="{Binding TotalsQuestions}"/>
<TextBlock Style="{StaticResource TextStyle}" Text="{Binding CorrectionCount}"/> <TextBlock Style="{StaticResource TextStyle}" Text="{Binding CorrectionCount}"/>
<TextBlock Style="{StaticResource TextStyle}" Text="{Binding UnCorrectCount}"/> <TextBlock Style="{StaticResource TextStyle}" Text="{Binding UnCorrectCount}"/>
<TextBlock Style="{StaticResource TextStyle}" Text="{Binding ErrorRate}"/> <TextBlock Style="{StaticResource TextStyle}" Text="{Binding ErrorRate}"/>
<TextBlock Style="{StaticResource TextStyle}" Text="{Binding CorrectRate}"/> <TextBlock Style="{StaticResource TextStyle}" Text="{Binding CorrectRate}"/>-->
</StackPanel> </StackPanel>
</DataTemplate> </DataTemplate>
</ListBox.ItemTemplate> </ListBox.ItemTemplate>

View File

@ -23,6 +23,12 @@ namespace StudentManager.Editor
public StudentsView() public StudentsView()
{ {
InitializeComponent(); InitializeComponent();
Initialized += StudentsView_Initialized;
}
private void StudentsView_Initialized(object? sender, EventArgs e)
{
var data = DataContext;
} }
} }
} }

View File

@ -47,21 +47,24 @@ namespace StudentManager.Model
class Students : BindableBase class Students : BindableBase
{ {
private ObservableCollection<StudentData> studentDatas = new ObservableCollection<StudentData>(); private ObservableCollection<StudentInfo> studentDatas = new ObservableCollection<StudentInfo>();
public ReadOnlyObservableCollection<StudentData> StudentDatas { get; private set; } public ReadOnlyObservableCollection<StudentInfo> StudentDatas { get; private set; }
private ObservableCollection<QuestionData> questionDatas = new ObservableCollection<QuestionData>(); private ObservableCollection<QuestionData> questionDatas = new ObservableCollection<QuestionData>();
public ReadOnlyObservableCollection<QuestionData> QuestionDatas { get; private set; } public ReadOnlyObservableCollection<QuestionData> QuestionDatas { get; private set; }
private ObservableCollection<QuestionData> studentQuestionDatas = new ObservableCollection<QuestionData>(); private ObservableCollection<DetailErrorInfo> errorSetDatas = new ObservableCollection<DetailErrorInfo>();
public ReadOnlyObservableCollection<QuestionData> StudentQuestionDatas { get; private set; } public ReadOnlyObservableCollection<DetailErrorInfo> ErrorSetDatas { get; private set; }
private ObservableCollection<CursonQuestionsData> cQDatas = new ObservableCollection<CursonQuestionsData>(); private ObservableCollection<CursonQuestionsData> cQDatas = new ObservableCollection<CursonQuestionsData>();
public ReadOnlyObservableCollection<CursonQuestionsData> CQDatas { get; private set; } public ReadOnlyObservableCollection<CursonQuestionsData> CQDatas { get; private set; }
private ObservableCollection<QuestionData> studentCQDatas = new ObservableCollection<QuestionData>(); private ObservableCollection<DetailHomeWorkSetInfo> homeWorkSet = new ObservableCollection<DetailHomeWorkSetInfo>();
public ReadOnlyObservableCollection<QuestionData> StudentCQDatas { get; private set; } public ObservableCollection<DetailHomeWorkSetInfo> HomeWorkSet { get { return homeWorkSet; } private set { homeWorkSet = value; RaisePropertyChanged(); } }
private ObservableCollection<DetailHomeWorkInfo> homeWork = new ObservableCollection<DetailHomeWorkInfo>();
public ObservableCollection<DetailHomeWorkInfo> HomeWork { get { return homeWork; } private set { homeWork = value; RaisePropertyChanged(); } }
private ObservableCollection<MenuBar> menuBars = new ObservableCollection<MenuBar>(); private ObservableCollection<MenuBar> menuBars = new ObservableCollection<MenuBar>();
public ReadOnlyObservableCollection<MenuBar> MenuBars { get; private set; } public ReadOnlyObservableCollection<MenuBar> MenuBars { get; private set; }
@ -76,27 +79,53 @@ namespace StudentManager.Model
} }
private StudentData selectedStudent; private StudentInfo selectedStudent;
public StudentData SelectedStudent public StudentInfo SelectedStudent
{ {
get { return selectedStudent; } get { return selectedStudent; }
set { selectedStudent = value; RaisePropertyChanged(); } set { selectedStudent = value; RaisePropertyChanged(); }
} }
private CursonQuestionsData selectedCQData; private DetailHomeWorkSetInfo selectedHomeWorkSet;
public CursonQuestionsData SelectedCQData public DetailHomeWorkSetInfo SelectedHomeWorkSet
{ {
get { return selectedCQData; } get { return selectedHomeWorkSet; }
set { selectedCQData = value; RaisePropertyChanged(); } set { selectedHomeWorkSet = value; RaisePropertyChanged(); }
} }
private DetailHomeWorkInfo selectedHomeWork;
public DetailHomeWorkInfo SelectedHomeWork
{
get { return selectedHomeWork; }
set { selectedHomeWork = value; RaisePropertyChanged(); }
}
private StudentInfo studentInfo;
public StudentInfo StudentInfo
{
get { return studentInfo; }
set { studentInfo = value; RaisePropertyChanged(); }
}
private DetailErrorSetInfo errorSet;
public DetailErrorSetInfo ErrorSet
{
get { return errorSet; }
set { errorSet = value; RaisePropertyChanged(); }
}
private readonly IRegionManager regionManager; private readonly IRegionManager regionManager;
public DelegateCommand<string> RegionTo { get; set; } public DelegateCommand<string> RegionTo { get; set; }
public DelegateCommand SelectedCommand { get; set; } public DelegateCommand<StudentInfo> SelectedCommand { get; set; }
public DelegateCommand<CursonQuestionsData> CQSelectedCommand { get; set; } public DelegateCommand<DetailHomeWorkInfo> HomeWorkSelectedCommand { get; set; }
public DelegateCommand<DetailHomeWorkSetInfo> HomeWorkSetSelectedCommand { get; set; }
public DelegateCommand RegionToDetailCommand { get; set; } public DelegateCommand RegionToDetailCommand { get; set; }
Students(IRegionManager regionManager) Students(IRegionManager regionManager)
@ -107,28 +136,44 @@ namespace StudentManager.Model
regionManager.Regions[PrismManager.MainRegionName].RequestNavigate(x.ToString()); regionManager.Regions[PrismManager.MainRegionName].RequestNavigate(x.ToString());
if(x == "DetailCheckView") if(x == "DetailCheckView")
{ {
RegionToDCV(); RegionToDetailCheckView();
}
if (x == "DetailView")
{
RegionToDetailView();
} }
RegionToStudents(); RegionToStudents();
}); });
SelectedCommand = new DelegateCommand(() => SelectedCommand = new DelegateCommand<StudentInfo>((x) =>
{ {
cQDatas.Clear(); if (x == null) return;
SQLHelper.Query<CursonQuestionsData>(Tables.CQTable, SelectedStudent.UID).ForEach(x => cQDatas.Add(x)); SelectedStudent = x;
RegionToDetailView();
}); });
CQSelectedCommand = new DelegateCommand<CursonQuestionsData>((e) => HomeWorkSetSelectedCommand = new DelegateCommand<DetailHomeWorkSetInfo>((x) =>
{ {
selectedCQData = e; if (x == null) return;
selectedHomeWorkSet = x;
HomeWork = SelectedStudent.HomeWorkSet.GetDetailHomeWorkList(SelectedHomeWorkSet.Lesson);
}); });
StudentDatas = new ReadOnlyObservableCollection<StudentData>(studentDatas); HomeWorkSelectedCommand = new DelegateCommand<DetailHomeWorkInfo>((e) =>
{
if(e == null) return;
//HomeWork =
});
Load();
StudentDatas = new ReadOnlyObservableCollection<StudentInfo>(studentDatas);
QuestionDatas = new ReadOnlyObservableCollection<QuestionData>(questionDatas); QuestionDatas = new ReadOnlyObservableCollection<QuestionData>(questionDatas);
StudentQuestionDatas = new ReadOnlyObservableCollection<QuestionData>(studentQuestionDatas); ErrorSetDatas = new ReadOnlyObservableCollection<DetailErrorInfo>(errorSetDatas);
MenuBars = new ReadOnlyObservableCollection<MenuBar>(menuBars); MenuBars = new ReadOnlyObservableCollection<MenuBar>(menuBars);
CQDatas = new ReadOnlyObservableCollection<CursonQuestionsData>(cQDatas); //CQDatas = new ReadOnlyObservableCollection<CursonQuestionsData>(cQDatas);
StudentCQDatas = new ReadOnlyObservableCollection<QuestionData>(studentCQDatas); HomeWorkSet = new ObservableCollection<DetailHomeWorkSetInfo>(homeWorkSet);
@ -136,22 +181,20 @@ namespace StudentManager.Model
this.regionManager = regionManager; this.regionManager = regionManager;
SaveAll();
StudentInfo studentInfo = new StudentInfo();
//QueryAll();
StudentLib.FreshAllStudentInfo();
StudentLib.Save();
QuestionLib.Load();
QuestionLib.Save();
} }
private void RegionToDCV() private void RegionToDetailView()
{ {
Debug.Assert(SelectedCQData != null); if(selectedStudent == null) return;
GetQuestions(SelectedCQData.ProblemIDS); ErrorSet = selectedStudent.ErrorSet.GetDetailErrorSetInfo();
HomeWorkSet = selectedStudent.HomeWorkSet.GetDetailHomeWorkSetList();
}
private void RegionToDetailCheckView()
{
if (selectedHomeWorkSet == null) return;
HomeWork = SelectedStudent.HomeWorkSet.GetDetailHomeWorkList(SelectedHomeWorkSet.Lesson);
} }
private void RegionToStudents() private void RegionToStudents()
@ -169,43 +212,18 @@ namespace StudentManager.Model
menuBars.Add(new MenuBar() { Icon = "CodeGreaterThanOrEqual", Title = "出题", NameSpace = "DetailCheckView" }); menuBars.Add(new MenuBar() { Icon = "CodeGreaterThanOrEqual", Title = "出题", NameSpace = "DetailCheckView" });
} }
private void Load()
private void QueryAll()
{ {
studentDatas.Clear(); StudentLib.Load();
questionDatas.Clear(); QuestionLib.Load();
//cQDatas.Clear(); studentDatas = StudentLib.GetAllStudents();
//SQLHelper.Query<CursonQuestionsData>(Tables.CQTable,1).ForEach(x => cQDatas.Add(x)); questionDatas = QuestionLib.GetAllQuestion();
SQLHelper.Query<StudentData>(Tables.UserTable).ForEach(x => studentDatas.Add(x));
SQLHelper.Query<QuestionData>(Tables.QuesTable).ForEach(x => questionDatas.Add(x));
ComputeData();
//SQLHelper.UnionQuery<QuestionData>().ForEach(x => questionDatas.Add(x));
} }
private void ComputeData() private void SaveAll()
{ {
TotalQuestions = questionDatas.Count(); StudentLib.Save();
QuestionLib.Save();
foreach (var item in StudentDatas)
{
item.UnCorrectCount = item.TotalsQuestions - item.CorrectionCount;
item.ErrorRate = item.TotalsQuestions / TotalQuestions;
item.CorrectRate = item.CorrectionCount / item.TotalsQuestions;
}
}
private void GetQuestions(int[] ids)
{
if (SelectedCQData == null) return;
studentCQDatas.Clear();
foreach (var id in ids)
{
var q = QuestionDatas.FirstOrDefault((s) => s.Id == id);
studentCQDatas.Add(q);
}
} }
} }
} }