@@ -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