This commit is contained in:
wangxiner55 2024-09-23 19:08:19 +08:00
parent f19c955def
commit da9c3b7041
20 changed files with 367 additions and 49 deletions

View File

@ -25,6 +25,7 @@ namespace StudentManager
containerRegistry.RegisterForNavigation<DetailView>(); containerRegistry.RegisterForNavigation<DetailView>();
containerRegistry.RegisterForNavigation<DetailCheckView>(); containerRegistry.RegisterForNavigation<DetailCheckView>();
containerRegistry.RegisterForNavigation<AddQuestionView>(); containerRegistry.RegisterForNavigation<AddQuestionView>();
containerRegistry.RegisterForNavigation<AddHomeWork>();
} }
} }

View File

@ -73,6 +73,12 @@ namespace StudentManager.Common
}; };
} }
public List<int> GetErrorsList()
{
return ErrorArray;
}
public ObservableCollection<DetailErrorInfo> GetDetailErrorQuestionList() public ObservableCollection<DetailErrorInfo> GetDetailErrorQuestionList()
{ {
ObservableCollection<DetailErrorInfo> list = new ObservableCollection<DetailErrorInfo>(); ObservableCollection<DetailErrorInfo> list = new ObservableCollection<DetailErrorInfo>();

View File

@ -14,5 +14,13 @@ namespace StudentManager.Common
StudentLib.Save(); StudentLib.Save();
QuestionLib.Save(); QuestionLib.Save();
} }
public static void FreashAllInfo()
{
StudentLib.FreshAllStudentInfo();
QuestionLib.FreshAllQuestion();
SaveAll();
}
} }
} }

View File

@ -13,29 +13,11 @@ 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, bool appedCommonWork = false, int workNum = 10) public static void PublicHomework(uint lesson, bool appedCommonWork = false, bool appendErrorSet = false, int workNum = -1)
{
HomeWork work = new HomeWork { Lesson = lesson};
foreach(var item in student.ErrorSet.ErrorArray)
{
work.AddHomeWork(item);
}
if (appedCommonWork && CommonHomeWork.Questions.Count > 0)
{
work.Append(CommonHomeWork);
}
Public(work);
}
public static void Public(HomeWork homeWork)
{ {
foreach (var item in StudentLib.StudentDic) foreach (var item in StudentLib.StudentDic)
{ {
item.Value.PublicHomeWork(homeWork); item.Value.PublicHomeWork(lesson, appedCommonWork, appendErrorSet, workNum);
} }
} }
} }

View File

@ -34,7 +34,7 @@ namespace StudentManager.Common
public class HomeWork public class HomeWork
{ {
public int Lesson { get; set; } = 0; public uint Lesson { get; set; } = 0;
public bool Status { get; set; } = false; public bool Status { get; set; } = false;
public DateTime DateTime { get; set; } = DateTime.Now; public DateTime DateTime { get; set; } = DateTime.Now;
public List<QuestionBase> Questions { get; set; } = new List<QuestionBase>(); public List<QuestionBase> Questions { get; set; } = new List<QuestionBase>();
@ -118,7 +118,7 @@ namespace StudentManager.Common
public bool Status { get; set; } = false; public bool Status { get; set; } = false;
public DateTime DateTime { get; set; } = DateTime.Now; public DateTime DateTime { get; set; } = DateTime.Now;
public int Lesson { get; set; } = 0; public uint Lesson { get; set; } = 0;
public int ErrorCount { get; set; } = 0; public int ErrorCount { get; set; } = 0;
public int CorrectCount { get; set; } = 0; public int CorrectCount { get; set; } = 0;
@ -128,7 +128,7 @@ namespace StudentManager.Common
public class HomeWorkSet public class HomeWorkSet
{ {
[JsonInclude] [JsonInclude]
private Dictionary<int, HomeWork> HomeWorks { get; set; } = new Dictionary<int, HomeWork>(); private Dictionary<uint, HomeWork> HomeWorks { get; set; } = new Dictionary<uint, HomeWork>();
public int TotalCount { get; set; } = 0; public int TotalCount { get; set; } = 0;
@ -138,7 +138,7 @@ namespace StudentManager.Common
TotalCount = HomeWorks.Count; TotalCount = HomeWorks.Count;
} }
public ObservableCollection<DetailHomeWorkInfo> GetDetailHomeWorkList(int lesson) public ObservableCollection<DetailHomeWorkInfo> GetDetailHomeWorkList(uint lesson)
{ {
ObservableCollection<DetailHomeWorkInfo> list = new ObservableCollection<DetailHomeWorkInfo>(); ObservableCollection<DetailHomeWorkInfo> list = new ObservableCollection<DetailHomeWorkInfo>();
foreach (var item in HomeWorks[lesson].Questions) foreach (var item in HomeWorks[lesson].Questions)
@ -188,7 +188,7 @@ namespace StudentManager.Common
HomeWorks.Remove(homeWork.Lesson); HomeWorks.Remove(homeWork.Lesson);
} }
public HomeWork Get(int cursonId) public HomeWork Get(uint cursonId)
{ {
if (HomeWorks.ContainsKey(cursonId)) return HomeWorks[cursonId]; if (HomeWorks.ContainsKey(cursonId)) return HomeWorks[cursonId];
return null; return null;
@ -196,7 +196,7 @@ namespace StudentManager.Common
public HomeWork GetLast() public HomeWork GetLast()
{ {
return HomeWorks[TotalCount]; return HomeWorks[(uint)TotalCount];
} }
public List<HomeWork> GetAll() public List<HomeWork> GetAll()

View File

@ -38,7 +38,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).CurronHomeWorkIndex = (UInt16)reader[8]; (data as StudentData).CurronHomeWorkIndex = (uint)reader[8];
(data as StudentData).Password = reader[9].ToString(); (data as StudentData).Password = reader[9].ToString();
(data as StudentData).Birthdate = (DateTime)reader[10]; (data as StudentData).Birthdate = (DateTime)reader[10];
(data as StudentData).HWQTotalCount = (uint)reader[11]; (data as StudentData).HWQTotalCount = (uint)reader[11];
@ -59,7 +59,8 @@ namespace StudentManager.Common
(data as QuestionData).Category = reader[5].ToString(); (data as QuestionData).Category = reader[5].ToString();
(data as QuestionData).Tags = reader[6].ToString(); (data as QuestionData).Tags = reader[6].ToString();
(data as QuestionData).Source = reader[7].ToString(); (data as QuestionData).Source = reader[7].ToString();
Enum.TryParse(reader[8].ToString(), true, out qStatus); (data as QuestionData).Lesson = (uint)reader[8];
Enum.TryParse(reader[9].ToString(), true, out qStatus);
(data as QuestionData).Status = qStatus; (data as QuestionData).Status = qStatus;
} }
else if (typeof(T) == typeof(CursonQuestionsData)) else if (typeof(T) == typeof(CursonQuestionsData))
@ -68,7 +69,7 @@ namespace StudentManager.Common
(data as CursonQuestionsData).UID = (int)reader[0]; (data as CursonQuestionsData).UID = (int)reader[0];
(data as CursonQuestionsData).ProblemIDS = string.IsNullOrEmpty(reader[1].ToString()) ? Array.Empty<int>() : JsonConvert.DeserializeObject<int[]>(reader[1].ToString()); (data as CursonQuestionsData).ProblemIDS = string.IsNullOrEmpty(reader[1].ToString()) ? Array.Empty<int>() : JsonConvert.DeserializeObject<int[]>(reader[1].ToString());
(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 = (uint)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).DateTime = (DateTime)reader[5];
(data as CursonQuestionsData).TotalCount = (data as CursonQuestionsData).ProblemIDS.Length; (data as CursonQuestionsData).TotalCount = (data as CursonQuestionsData).ProblemIDS.Length;
@ -244,6 +245,8 @@ namespace StudentManager.Common
cmd.ExecuteNonQuery(); cmd.ExecuteNonQuery();
cmd.Dispose();
} }
//string sql = $"insert into {stableName}" //string sql = $"insert into {stableName}"
} }
@ -253,7 +256,7 @@ namespace StudentManager.Common
} }
finally finally
{ {
cmd.Dispose(); //cmd.Dispose();
connection.Close(); connection.Close();
} }
} }
@ -315,7 +318,7 @@ namespace StudentManager.Common
} }
} }
internal static void UpdateHomework(long UID, int lesson, string totalArray, string correctArray, DateTime dateTime, bool status) internal static void UpdateHomework(long UID, uint lesson, string totalArray, string correctArray, DateTime dateTime, bool status)
{ {
using (MySqlConnection connection = new MySqlConnection(config)) using (MySqlConnection connection = new MySqlConnection(config))
{ {

View File

@ -13,7 +13,7 @@ namespace StudentManager.Data
public int[] CorrectIDS { get; set; } = { }; public int[] CorrectIDS { get; set; } = { };
public DateTime DateTime { get; set; } = DateTime.Now; public DateTime DateTime { get; set; } = DateTime.Now;
public int Lesson { get; set; } = 0; public uint Lesson { get; set; } = 0;
public int TotalCount { get; set; } = 0; public int TotalCount { get; set; } = 0;
public int CorrectCount { get; set; } = 0; public int CorrectCount { get; set; } = 0;
public int Status { get; set; } = 0; public int Status { get; set; } = 0;

View File

@ -38,8 +38,9 @@ namespace StudentManager.Data
public string Category { get; set; } = string.Empty; public string Category { get; set; } = string.Empty;
public string Tags { get; set; } = "默认"; public string Tags { get; set; } = "默认";
public string Source { get; set; } = string.Empty; public string Source { get; set; } = string.Empty;
public int Lesson { get; set; } = 0; public uint Lesson { get; set; } = 0;
public QStatus Status { get; set; } = QStatus.published; public QStatus Status { get; set; } = QStatus.published;
public DateTime UpdateTime { get; set; } = DateTime.MinValue;
//public string TableName { get => "questions"; set => throw new NotImplementedException(); } //public string TableName { get => "questions"; set => throw new NotImplementedException(); }

View File

@ -10,13 +10,26 @@ using System.Linq;
using System.Text; using System.Text;
using System.Text.Json; using System.Text.Json;
using System.Threading.Tasks; using System.Threading.Tasks;
using static Mysqlx.Crud.UpdateOperation.Types;
namespace StudentManager.Data namespace StudentManager.Data
{ {
public class QuestionSetDesc
{
public uint TotalQuestions { get; set; } = 0;
public DateTime UpdateTime { get; set; } = DateTime.Now;
public uint Lesson { get; set; } = 0;
}
public static class QuestionLib public static class QuestionLib
{ {
public static string FileName = "questionLib.dbqi"; public static string FileName = "questionLib.dbqi";
public static string TableDicFileName = "questionTableDicLib.dbqi";
public static string TableDescFileName = "questionTableDescLib.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 Dictionary<uint, QuestionSetDesc> QuestionTableDesc { get; set; } = new Dictionary<uint, QuestionSetDesc>();
public static Dictionary<uint, Dictionary<int, QuestionData>> QuestionTableDic { get; set; } = new Dictionary<uint, Dictionary<int, QuestionData>>();
public static int TotalCount { get; set; } = 0; public static int TotalCount { get; set; } = 0;
public static int GetQuestionCount() public static int GetQuestionCount()
@ -29,17 +42,57 @@ namespace StudentManager.Data
QuestionDic.Clear(); QuestionDic.Clear();
Debug.Assert(Path.Exists(StudentLib.LibPath)); Debug.Assert(Path.Exists(StudentLib.LibPath));
if (!Path.Exists(StudentLib.LibPath + FileName))
File.WriteAllText((StudentLib.LibPath + FileName), "");
string file = File.ReadAllText(StudentLib.LibPath + FileName); string file = File.ReadAllText(StudentLib.LibPath + FileName);
if (file.Length != 0)
QuestionDic = JsonSerializer.Deserialize<Dictionary<int, QuestionData>>(file); QuestionDic = JsonSerializer.Deserialize<Dictionary<int, QuestionData>>(file);
if (!Path.Exists(StudentLib.LibPath + TableDicFileName))
File.WriteAllText((StudentLib.LibPath + TableDicFileName), "");
file = File.ReadAllText(StudentLib.LibPath + TableDicFileName);
if (file.Length != 0)
QuestionTableDic = JsonSerializer.Deserialize<Dictionary<uint, Dictionary<int, QuestionData>>>(file);
if (!Path.Exists(StudentLib.LibPath + TableDescFileName))
File.WriteAllText((StudentLib.LibPath + TableDescFileName), "");
file = File.ReadAllText(StudentLib.LibPath + TableDescFileName);
if (file.Length != 0)
QuestionTableDesc = JsonSerializer.Deserialize<Dictionary<uint, QuestionSetDesc>>(file);
} }
public static void Save() public static void Save()
{ {
File.WriteAllText((StudentLib.LibPath + FileName), JsonSerializer.Serialize(QuestionDic)); File.WriteAllText((StudentLib.LibPath + FileName), JsonSerializer.Serialize(QuestionDic));
File.WriteAllText((StudentLib.LibPath + TableDicFileName), JsonSerializer.Serialize(QuestionTableDic));
File.WriteAllText((StudentLib.LibPath + TableDescFileName), JsonSerializer.Serialize(QuestionTableDesc));
} }
public static void FreshAllQuestion() public static void FreshAllQuestion()
{ {
QuestionDic.Clear ();
QuestionTableDic.Clear ();
QuestionTableDesc.Clear ();
SQLHelper.Query<QuestionData>().ForEach(x => QuestionDic.Add(x.Id, x)); SQLHelper.Query<QuestionData>().ForEach(x => QuestionDic.Add(x.Id, x));
SQLHelper.Query<QuestionData>().ForEach(x => {
if (!QuestionTableDic.ContainsKey(x.Lesson))
{
QuestionTableDic[x.Lesson] = new Dictionary<int, QuestionData>();
}
QuestionTableDic[x.Lesson][x.Id] = x;
});
foreach (var QuestionTables in QuestionTableDic)
{
DateTime update = DateTime.MinValue;
foreach(var item in QuestionTables.Value)
{
update = update > item.Value.UpdateTime ? item.Value.UpdateTime : update;
}
QuestionTableDesc.Add(QuestionTables.Key, new QuestionSetDesc{ TotalQuestions = (uint)QuestionTables.Value.Count ,UpdateTime = update, Lesson = QuestionTables.Key });
}
} }
public static ObservableCollection<QuestionData> GetAllQuestion() public static ObservableCollection<QuestionData> GetAllQuestion()
@ -51,6 +104,15 @@ namespace StudentManager.Data
} }
return list; return list;
} }
public static ObservableCollection<QuestionData> GetAllQuestionByLesson(uint lesson)
{
var list = new ObservableCollection<QuestionData>();
foreach (QuestionData data in QuestionTableDic[lesson].Values)
{
list.Add(data);
}
return list;
}
public static QuestionData Get(int id) public static QuestionData Get(int id)
{ {
@ -59,9 +121,26 @@ namespace StudentManager.Data
return QuestionDic[id]; return QuestionDic[id];
} }
public static QuestionData Get(uint lesson , int id)
{
if (!QuestionDic.ContainsKey(id)) return null;
return QuestionDic[id];
}
public static void Add(QuestionData question) public static void Add(QuestionData question)
{ {
QuestionDic.Add(question.Id, question); QuestionDic.Add(question.Id, question);
if (!QuestionTableDic.ContainsKey(question.Lesson))
{
QuestionTableDic[question.Lesson] = new Dictionary<int, QuestionData>();
}
QuestionTableDic[question.Lesson][question.Id] = question;
QuestionTableDesc[question.Lesson].UpdateTime = DateTime.Now;
QuestionTableDesc[question.Lesson].TotalQuestions = (uint)QuestionTableDic[question.Lesson].Count;
SQLHelper.Add(question); SQLHelper.Add(question);
} }
@ -69,6 +148,9 @@ namespace StudentManager.Data
{ {
if (question == null) throw new NullReferenceException(); if (question == null) throw new NullReferenceException();
QuestionDic.Remove(question.Id); QuestionDic.Remove(question.Id);
QuestionTableDic[question.Lesson].Remove(question.Id);
QuestionTableDesc[question.Lesson].TotalQuestions = (uint)QuestionTableDic[question.Lesson].Count;
} }
public static void Remove(int id) public static void Remove(int id)

View File

@ -30,7 +30,7 @@ namespace StudentManager.Data
public int CorrectionCount { get; set; } = 0; public int CorrectionCount { get; set; } = 0;
// HomeWork // HomeWork
public int CurronHomeWorkIndex { get; set; } = 0; public uint CurronHomeWorkIndex { get; set; } = 0;
// HomeWorkSet // HomeWorkSet
public uint HWQTotalCount { get; set; } = 0; public uint HWQTotalCount { get; set; } = 0;

View File

@ -120,12 +120,33 @@ namespace StudentManager.Data
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 uint CurrentHomeWorkIndex = 0;
public HomeWork CurentHomeWork { get; set; } = new HomeWork(); public HomeWork CurentHomeWork { get; set; } = new HomeWork();
public void PublicHomeWork(HomeWork homeWork) public void PublicHomeWork(uint lesson, bool appendCommonWork = false, bool appendErrorSet = false, int workNum = -1)
{ {
HomeWork homeWork = new HomeWork();
homeWork.Lesson = (uint)(HomeWorkSet.TotalCount + 1) ;
homeWork.DateTime = DateTime.Now;
if(appendErrorSet)
{
ErrorSet.ErrorArray.ForEach(error =>
homeWork.AddHomeWork(error));
}
if(appendCommonWork)
{
foreach (var item in QuestionLib.GetAllQuestionByLesson(lesson))
{
homeWork.AddHomeWork(item.Id);
}
}
if (workNum != -1)
{
}
HomeWorkSet.AddHomeWork(homeWork); HomeWorkSet.AddHomeWork(homeWork);
} }
} }
} }

View File

@ -0,0 +1,61 @@
<UserControl x:Class="StudentManager.Editor.AddHomeWork"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:StudentManager.Editor"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="50"/>
</Grid.RowDefinitions>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<StackPanel VerticalAlignment="Stretch" >
<CheckBox Margin="5" Content="是否加入公共题库" IsChecked="{Binding IsAddPublicQuestionsLib}"/>
<CheckBox Margin="5" Content="是否需要纠错" IsChecked="{Binding IsNeedErrorset}"/>
<CheckBox Margin="5" Content="是否控制题目数量" IsChecked="{Binding IsControlQuestionNum}"/>
<StackPanel Margin="5" Orientation="Horizontal">
<TextBlock Text=" 课程章节序号 "/>
<TextBox Text="{Binding PublicLesson}" MinWidth="50"/>
</StackPanel>
<StackPanel Margin="5" Orientation="Horizontal">
<TextBlock Text=" 问题数量 "/>
<TextBox Text="{Binding QuestionCount}" MinWidth="50"/>
</StackPanel>
</StackPanel>
<ScrollViewer Grid.Column="1" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto">
<ItemsControl Grid.Row="1" ItemsSource="{Binding HomeworkTestData}" HorizontalAlignment="Center">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border Background="#55aaaaaa" BorderBrush="Gray" BorderThickness="1" Padding="5" Height="50" Width="100" Margin="5">
<TextBlock Margin="1" TextWrapping="Wrap" FontSize="12" Foreground="White" Text="{Binding Stem}" TextAlignment="Center"/>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
</Grid>
<Button Grid.Row="1" DockPanel.Dock="Bottom" Content="发布作业"
Command="{Binding PublicHomeWorkCommand}"/>
</Grid>
</UserControl>

View File

@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace StudentManager.Editor
{
/// <summary>
/// AddHomeWork.xaml 的交互逻辑
/// </summary>
public partial class AddHomeWork : UserControl
{
public AddHomeWork()
{
InitializeComponent();
}
}
}

View File

@ -4,6 +4,7 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:StudentManager.Editor" xmlns:local="clr-namespace:StudentManager.Editor"
xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
xmlns:md="http://materialdesigninxaml.net/winfx/xaml/themes" xmlns:md="http://materialdesigninxaml.net/winfx/xaml/themes"
xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:dt="clr-namespace:StudentManager.Data" xmlns:dt="clr-namespace:StudentManager.Data"
@ -36,17 +37,24 @@
</UserControl.Resources> </UserControl.Resources>
<Grid> <Grid>
<DockPanel LastChildFill="False"> <DockPanel LastChildFill="False">
<ListView DockPanel.Dock="Top" <StackPanel DockPanel.Dock="Top" Orientation="Horizontal">
<TextBlock Text="Lesson" HorizontalAlignment="Left" VerticalAlignment="Center"/>
<TextBox Text="{Binding Lesson}"/>
</StackPanel>
<!--<ListView DockPanel.Dock="Top"
ItemsSource="{Binding ADDQuestionDatas}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ItemsSource="{Binding ADDQuestionDatas}" ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ScrollViewer.VerticalScrollBarVisibility="Disabled"> ScrollViewer.VerticalScrollBarVisibility="Disabled">
<!--<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}}" 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>--><!--
<ListView.View > <ListView.View >
@ -139,8 +147,11 @@
</GridViewColumn> </GridViewColumn>
</GridView> </GridView>
</ListView.View> </ListView.View>
</ListView> </ListView>-->
<DataGrid DockPanel.Dock="Top" ItemsSource="{Binding ADDQuestionDatas}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" CanUserDeleteRows="True"
ScrollViewer.VerticalScrollBarVisibility="Disabled"/>
<Grid HorizontalAlignment="Stretch" DockPanel.Dock="Bottom"> <Grid HorizontalAlignment="Stretch" DockPanel.Dock="Bottom">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="*" /> <ColumnDefinition Width="*" />

View File

@ -69,7 +69,13 @@
</ListView.View> </ListView.View>
</ListView> </ListView>
<Button DockPanel.Dock="Bottom" Content="提交" Command="{Binding SubmitHomeWorkCommand}"/> <!--<DataGrid DockPanel.Dock="Top" ItemsSource="{Binding HomeWork}" CanUserAddRows="False" CanUserDeleteRows="False" >
--><!--<DataGrid.Columns>
<DataGridCheckBoxColumn Header="正确?" Binding="{Binding Status}" />
</DataGrid.Columns>--><!--
</DataGrid>-->
<Button DockPanel.Dock="Bottom" MinHeight=" 50" Content="提交" Command="{Binding SubmitHomeWorkCommand}"/>
</DockPanel> </DockPanel>
</DockPanel> </DockPanel>

View File

@ -33,6 +33,8 @@
<Button Margin="5" HorizontalAlignment="Stretch" DockPanel.Dock="Bottom" Content="保存" <Button Margin="5" HorizontalAlignment="Stretch" DockPanel.Dock="Bottom" Content="保存"
Command="{Binding SaveAllCommand}"/> Command="{Binding SaveAllCommand}"/>
<Button Margin="5" HorizontalAlignment="Stretch" DockPanel.Dock="Bottom" Content="刷新数据"
Command="{Binding FreshAllCommand}"/>
</DockPanel> </DockPanel>
<ContentControl Grid.Column="1" prism:RegionManager.RegionName="{x:Static extent:PrismManager.MainRegionName}"/> <ContentControl Grid.Column="1" prism:RegionManager.RegionName="{x:Static extent:PrismManager.MainRegionName}"/>

View File

@ -24,7 +24,7 @@
</i:EventTrigger> </i:EventTrigger>
</i:Interaction.Triggers>--> </i:Interaction.Triggers>-->
<ListView.View> <!--<ListView.View>
<GridView> <GridView>
<GridViewColumn <GridViewColumn
DisplayMemberBinding="{Binding Id}" DisplayMemberBinding="{Binding Id}"
@ -60,7 +60,13 @@
</GridViewColumn.CellTemplate> </GridViewColumn.CellTemplate>
</GridViewColumn> </GridViewColumn>
</GridView> </GridView>
</ListView.View> </ListView.View>-->
</ListView> </ListView>
<DataGrid ItemsSource="{Binding QuestionDatas}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" CanUserDeleteRows="False" CanUserAddRows="False" IsReadOnly="True"
ScrollViewer.VerticalScrollBarVisibility="Disabled"/>
</Grid> </Grid>
</UserControl> </UserControl>

View File

@ -57,6 +57,9 @@ namespace StudentManager.Model
private ObservableCollection<QuestionData> questionDatas = new ObservableCollection<QuestionData>(); private ObservableCollection<QuestionData> questionDatas = new ObservableCollection<QuestionData>();
public ObservableCollection<QuestionData> QuestionDatas { get { return questionDatas; } private set { questionDatas = value; RaisePropertyChanged(); } } public ObservableCollection<QuestionData> QuestionDatas { get { return questionDatas; } private set { questionDatas = value; RaisePropertyChanged(); } }
private ObservableCollection<QuestionData> homeworkTestData = new ObservableCollection<QuestionData>();
public ObservableCollection<QuestionData> HomeworkTestData { get { return homeworkTestData; } private set { homeworkTestData = value; RaisePropertyChanged(); } }
private ObservableCollection<QuestionData> preToRemove = new ObservableCollection<QuestionData>(); private ObservableCollection<QuestionData> preToRemove = new ObservableCollection<QuestionData>();
private ObservableCollection<QuestionData> addQuestionDatas = new ObservableCollection<QuestionData>(); private ObservableCollection<QuestionData> addQuestionDatas = new ObservableCollection<QuestionData>();
public ObservableCollection<QuestionData> ADDQuestionDatas { get { return addQuestionDatas; } private set { addQuestionDatas = value; RaisePropertyChanged(); } } public ObservableCollection<QuestionData> ADDQuestionDatas { get { return addQuestionDatas; } private set { addQuestionDatas = value; RaisePropertyChanged(); } }
@ -125,6 +128,59 @@ namespace StudentManager.Model
set { errorSet = value; RaisePropertyChanged(); } set { errorSet = value; RaisePropertyChanged(); }
} }
private uint lesson;
public uint Lesson
{
get { return lesson; }
set { lesson = value; RaisePropertyChanged(); }
}
private bool isAddPublicQuestionsLib;
public bool IsAddPublicQuestionsLib
{
get { return isAddPublicQuestionsLib; }
set { isAddPublicQuestionsLib = value; OnPublicHomeworkSelectionChanged(); RaisePropertyChanged(); }
}
private bool isNeedErrorset;
public bool IsNeedErrorset
{
get { return isNeedErrorset; }
set { isNeedErrorset = value; OnPublicHomeworkSelectionChanged(); RaisePropertyChanged(); }
}
private bool isControlQuestionNum;
public bool IsControlQuestionNum
{
get { return isControlQuestionNum; }
set { isControlQuestionNum = value; OnPublicHomeworkSelectionChanged(); RaisePropertyChanged(); }
}
private uint publicLesson;
public uint PublicLesson
{
get { return publicLesson; }
set { publicLesson = value; OnPublicHomeworkSelectionChanged(); RaisePropertyChanged(); }
}
private int questionCount;
public int QuestionCount
{
get { return questionCount; }
set { questionCount = value; RaisePropertyChanged(); }
}
@ -142,6 +198,8 @@ namespace StudentManager.Model
public DelegateCommand SubmitAddQuestionsCommand { get; set; } public DelegateCommand SubmitAddQuestionsCommand { get; set; }
public DelegateCommand ClearnAddQuestionsCommand { get; set; } public DelegateCommand ClearnAddQuestionsCommand { get; set; }
public DelegateCommand SaveAllCommand { get; set; } public DelegateCommand SaveAllCommand { get; set; }
public DelegateCommand PublicHomeWorkCommand { get; set; }
public DelegateCommand FreshAllCommand { get; set; }
Students(IRegionManager regionManager) Students(IRegionManager regionManager)
{ {
@ -214,15 +272,21 @@ namespace StudentManager.Model
}); });
SaveAllCommand = new DelegateCommand(() => FileSystem.SaveAll()); SaveAllCommand = new DelegateCommand(() => FileSystem.SaveAll());
FreshAllCommand = new DelegateCommand(() => FileSystem.FreashAllInfo());
PublicHomeWorkCommand = new DelegateCommand(() =>
{
HomeWorkManager.PublicHomework(PublicLesson, IsAddPublicQuestionsLib, isNeedErrorset);
});
SubmitAddQuestionsCommand = new DelegateCommand(() => SubmitAddQuestionsCommand = new DelegateCommand(() =>
{ {
Debug.Assert(Lesson != 0);
foreach (var item in ADDQuestionDatas) foreach (var item in ADDQuestionDatas)
{ {
item.Id = ConvertToHashInt(item.Stem); item.Id = ConvertToHashInt(item.Stem);
item.Lesson = Lesson;
if (!(QuestionLib.Get(item.Id) == null)) continue; if (!(QuestionLib.Get(item.Id) == null)) continue;
if (string.IsNullOrEmpty(item.Stem) || string.IsNullOrEmpty(item.Source) || string.IsNullOrEmpty(item.Answer)) continue; if (string.IsNullOrEmpty(item.Stem) || string.IsNullOrEmpty(item.Source) || string.IsNullOrEmpty(item.Answer)) continue;
QuestionLib.Add(item); QuestionLib.Add(item);
@ -233,6 +297,8 @@ namespace StudentManager.Model
{ {
ADDQuestionDatas.Remove(item); ADDQuestionDatas.Remove(item);
} }
QuestionLib.Save();
}); });
@ -315,7 +381,7 @@ namespace StudentManager.Model
menuBars.Add(new MenuBar() { Icon = "CodeGreaterThanOrEqual", Title = "详情", NameSpace = "DetailView" }); menuBars.Add(new MenuBar() { Icon = "CodeGreaterThanOrEqual", Title = "详情", NameSpace = "DetailView" });
menuBars.Add(new MenuBar() { Icon = "CodeGreaterThanOrEqual", Title = "题库", NameSpace = "QuestionsView" }); menuBars.Add(new MenuBar() { Icon = "CodeGreaterThanOrEqual", Title = "题库", NameSpace = "QuestionsView" });
menuBars.Add(new MenuBar() { Icon = "CodeGreaterThanOrEqual", Title = "审批", NameSpace = "CheckView" }); menuBars.Add(new MenuBar() { Icon = "CodeGreaterThanOrEqual", Title = "审批", NameSpace = "CheckView" });
//menuBars.Add(new MenuBar() { Icon = "CodeGreaterThanOrEqual", Title = "出题", NameSpace = "QuestionsView" }); menuBars.Add(new MenuBar() { Icon = "CodeGreaterThanOrEqual", Title = "发布家庭作业", NameSpace = "AddHomeWork" });
menuBars.Add(new MenuBar() { Icon = "CodeGreaterThanOrEqual", Title = "出题", NameSpace = "AddQuestionView" }); menuBars.Add(new MenuBar() { Icon = "CodeGreaterThanOrEqual", Title = "出题", NameSpace = "AddQuestionView" });
} }
@ -323,10 +389,37 @@ namespace StudentManager.Model
{ {
StudentLib.Load(); StudentLib.Load();
QuestionLib.Load(); QuestionLib.Load();
Reload();
}
private void Reload()
{
studentDatas.Clear();
questionDatas.Clear();
studentDatas = StudentLib.GetAllStudents(); studentDatas = StudentLib.GetAllStudents();
questionDatas = QuestionLib.GetAllQuestion(); questionDatas = QuestionLib.GetAllQuestion();
} }
private void OnPublicHomeworkSelectionChanged()
{
HomeworkTestData.Clear();
if (IsAddPublicQuestionsLib)
{
HomeworkTestData = QuestionLib.GetAllQuestionByLesson(PublicLesson);
}
if (IsNeedErrorset)
{
if (SelectedStudent != null)
{
foreach (var item in SelectedStudent.ErrorSet.GetDetailErrorQuestionList())
{
homeworkTestData.Add(item.QuestionData);
}
}
}
}
} }
} }

View File

@ -9,6 +9,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Extended.Wpf.Toolkit" Version="4.6.1" />
<PackageReference Include="MaterialDesignThemes" Version="5.1.0" /> <PackageReference Include="MaterialDesignThemes" Version="5.1.0" />
<PackageReference Include="MySql.Data" Version="9.0.0" /> <PackageReference Include="MySql.Data" Version="9.0.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />

View File

@ -7,6 +7,9 @@
</ApplicationDefinition> </ApplicationDefinition>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Update="Editor\AddHomeWork.xaml.cs">
<SubType>Code</SubType>
</Compile>
<Compile Update="Editor\AddQuestionView.xaml.cs"> <Compile Update="Editor\AddQuestionView.xaml.cs">
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>
@ -30,6 +33,9 @@
</Compile> </Compile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Page Update="Editor\AddHomeWork.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="Editor\AddQuestionView.xaml"> <Page Update="Editor\AddQuestionView.xaml">
<SubType>Designer</SubType> <SubType>Designer</SubType>
</Page> </Page>