Skip to content

Commit e91fe82

Browse files
committed
2 parents 5a4b408 + 6660777 commit e91fe82

2 files changed

Lines changed: 66 additions & 19 deletions

File tree

CustomTools/Kouyu100AutoFinishInnerWindow.xaml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,11 @@
1111
<TextBlock x:Name="HomeworkTitleTextBlock" Margin="10,10,0,0" TextWrapping="Wrap" Text="标题: " HorizontalAlignment="Left" VerticalAlignment="Top"/>
1212
<TextBlock x:Name="ExamIdTextBlock" HorizontalAlignment="Left" Margin="10,30,0,0" TextWrapping="Wrap" Text="ExamId: " VerticalAlignment="Top"/>
1313
<TextBlock x:Name="HomeworkIdTextBlock" HorizontalAlignment="Left" Margin="10,50,0,0" TextWrapping="Wrap" Text="HwId: " VerticalAlignment="Top"/>
14-
<Button x:Name="StartButton" Content="一键开摆" HorizontalAlignment="Center" Margin="0,27,0,0" VerticalAlignment="Top" Click="StartButton_Click"/>
15-
<TextBlock HorizontalAlignment="Left" Margin="269,10,0,0" TextWrapping="Wrap" Text="摆烂进度: " VerticalAlignment="Top"/>
16-
<ProgressBar x:Name="UploadProgressBar" HorizontalAlignment="Left" Height="12" Margin="328,10,0,0" VerticalAlignment="Top" Width="200"/>
14+
<Button x:Name="StartButton" Content="一键开摆" HorizontalAlignment="Center" Margin="0,50,0,0" VerticalAlignment="Top" Click="StartButton_Click"/>
15+
<TextBlock HorizontalAlignment="Left" Margin="269,33,0,0" TextWrapping="Wrap" Text="摆烂进度: " VerticalAlignment="Top"/>
16+
<ProgressBar x:Name="UploadProgressBar" HorizontalAlignment="Left" Height="12" Margin="328,33,0,0" VerticalAlignment="Top" Width="200"/>
17+
<TextBox x:Name="UserAnswerStringTextBox" HorizontalAlignment="Left" Margin="304,6,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="189" Cursor="Arrow" TextChanged="AnswerStringTextBox_TextChanged"/>
18+
<TextBlock HorizontalAlignment="Left" Margin="269,10,0,0" TextWrapping="Wrap" Text="答案: " VerticalAlignment="Top"/>
19+
<TextBlock x:Name="ScoreTextBlock" HorizontalAlignment="Left" Margin="498,10,0,0" TextWrapping="Wrap" Text="分数: " VerticalAlignment="Top"/>
1720
</Grid>
1821
</Window>

CustomTools/Kouyu100AutoFinishInnerWindow.xaml.cs

Lines changed: 60 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,11 @@ namespace CustomTools
1616
/// </summary>
1717
public partial class Kouyu100AutoFinishInnerWindow : Window
1818
{
19-
private readonly Homework currentHomework;
19+
readonly Homework currentHomework;
2020
public bool PrepareSuccessfully = false;
21-
string cookieString;
21+
string cookieString, answerString = "";
2222
int ScoreId;
23+
List<Tuple<int, int, string>> answerList = new List<Tuple<int, int, string>>();
2324
public Kouyu100AutoFinishInnerWindow(Homework currentHomework, string cookieString)
2425
{
2526
InitializeComponent();
@@ -31,19 +32,37 @@ public Kouyu100AutoFinishInnerWindow(Homework currentHomework, string cookieStri
3132
#pragma warning disable CS8600 // 将 null 字面量或可能为 null 的值转换为非 null 类型。
3233
#pragma warning disable CS8602 // 解引用可能出现空引用。
3334
#pragma warning disable CS8604 // 引用类型参数可能为 null。
35+
// 获取ScoreId
3436
try
3537
{
3638
ScoreId = (int)((
3739
(JObject)JsonConvert.DeserializeObject(
3840
Kouyu100HttpGet($"http://028.kouyu100.com/njjlzxhx/getTimeAndAnswer.action?examId={currentHomework.ExamId}&homeWork.id={currentHomework.HomeworkId}")
3941
)
4042
)["listenExamScore"]["id"]);
41-
PrepareSuccessfully = true;
43+
4244
}
4345
catch(ArgumentException ex)
4446
{
4547
MessageBox.Show("暂不支持的作业类型! ");
4648
}
49+
PrepareSuccessfully = true;
50+
// 构造答案列表
51+
string groupListResultString = Kouyu100HttpGet($"http://028.kouyu100.com/njjlzxhx/getListenGroupsByExamId.action?examId={currentHomework.ExamId}");
52+
JArray groupList = (JArray)((JObject)JsonConvert.DeserializeObject(groupListResultString))["groupList"];
53+
StringBuilder answerStringBuilder = new StringBuilder();
54+
foreach (JObject group in groupList)
55+
{
56+
foreach (JObject choose in (JArray)group["chooseList"])
57+
{
58+
answerList.Add(new Tuple<int, int, string>((int)group["id"], (int)choose["id"], (string)choose["answers"]));
59+
answerStringBuilder.Append((string)choose["answers"]);
60+
}
61+
answerStringBuilder.Append(' ');
62+
}
63+
// 代码中修改TextBox.Text也触发TextBox.TextChanged,坑了我半天,解决方法居然只是把L64跟L65换个位置
64+
answerString = answerStringBuilder.ToString().Replace(" ", "");
65+
UserAnswerStringTextBox.Text = answerStringBuilder.ToString();
4766
#pragma warning restore CS8604 // 引用类型参数可能为 null。
4867
#pragma warning restore CS8602 // 解引用可能出现空引用。
4968
#pragma warning restore CS8600 // 将 null 字面量或可能为 null 的值转换为非 null 类型。
@@ -119,6 +138,39 @@ static public string DictionaryToQueryString(IDictionary<string, string> paramet
119138
}
120139
return query.ToString().Substring(0, query.Length - 1);
121140
}
141+
142+
private void AnswerStringTextBox_TextChanged(object sender, System.Windows.Controls.TextChangedEventArgs e)
143+
{
144+
// 更新answerList
145+
string userAnswerStringWithoutSpace = UserAnswerStringTextBox.Text.Trim().Replace(" ", "");
146+
for (int i = 0; i < answerList.Count; i++)
147+
{
148+
if (i >= userAnswerStringWithoutSpace.Length) // 用户答案串字符数量不足,退出循环
149+
{
150+
break;
151+
}
152+
var tmp = answerList[i].ToValueTuple();
153+
tmp.Item3 = userAnswerStringWithoutSpace[i].ToString();
154+
answerList[i] = tmp.ToTuple();
155+
}
156+
// 更新Score
157+
int Score = 0;
158+
string normalizedAnswerString = answerString.ToLower();
159+
string normalizedUserAnswerStringWithoutSpace = userAnswerStringWithoutSpace.ToLower();
160+
for(int i = 0; i < normalizedAnswerString.Length; i++)
161+
{
162+
if (i >= normalizedUserAnswerStringWithoutSpace.Length) // 归一化后的用户答案串数量不足,退出循环
163+
{
164+
break;
165+
}
166+
if (normalizedAnswerString[i] == normalizedUserAnswerStringWithoutSpace[i])
167+
{
168+
Score++;
169+
}
170+
}
171+
ScoreTextBlock.Text = $"分数: {Score}";
172+
}
173+
122174
private void StartButton_Click(object sender, RoutedEventArgs e)
123175
{
124176
Task.Run(() =>
@@ -161,20 +213,10 @@ private void StartButton_Click(object sender, RoutedEventArgs e)
161213
#pragma warning disable CS8600 // 将 null 字面量或可能为 null 的值转换为非 null 类型。
162214
#pragma warning disable CS8602 // 解引用可能出现空引用。
163215
#pragma warning disable CS8604 // 引用类型参数可能为 null。
164-
// 构造答案列表
165-
string groupListResultString = Kouyu100HttpGet($"http://028.kouyu100.com/njjlzxhx/getListenGroupsByExamId.action?examId={currentHomework.ExamId}");
166-
JArray groupList = (JArray)((JObject)JsonConvert.DeserializeObject(groupListResultString))["groupList"];
167-
List<Tuple<int, int, string>> answerList = new List<Tuple<int, int, string>>();
168-
foreach(JObject group in groupList)
169-
{
170-
foreach (JObject choose in (JArray)group["chooseList"])
171-
{
172-
answerList.Add(new Tuple<int, int, string>((int)group["id"], (int)choose["id"], (string)choose["answers"]));
173-
}
174-
}
216+
217+
// 遍历答案列表上传答案
175218
int count = 0;
176219
double total = answerList.ToArray().Length;
177-
// 遍历答案列表上传答案
178220
foreach (Tuple<int, int, string> tuple in answerList)
179221
{
180222
int groupId = tuple.Item1;
@@ -191,8 +233,10 @@ private void StartButton_Click(object sender, RoutedEventArgs e)
191233
{ "listenExamAnswer.homeWorkId", currentHomework.HomeworkId.ToString() },
192234
{ "listenExamScore.id", ScoreId.ToString() }
193235
};
236+
string UploadSingleAnswerResult = Kouyu100HttpPost("https://028.kouyu100.com/njjlzxhx/saveSingleExamAnswer.action", DictionaryToQueryString(data));
237+
//MessageBox.Show(UploadSingleAnswerResult);
194238
// 上传单个答案并检查
195-
if (Kouyu100HttpPost("https://028.kouyu100.com/njjlzxhx/saveSingleExamAnswer.action", DictionaryToQueryString(data)) != "1.0")
239+
if (UploadSingleAnswerResult != "1.0" && UploadSingleAnswerResult != "0.0") // 1.0正确, 0.0错误
196240
{
197241
throw new WebException("上传单个答案API调用错误! ");
198242
}

0 commit comments

Comments
 (0)