【问题标题】:Determine correct answers from multiple questions从多个问题中确定正确答案
【发布时间】:2019-11-15 20:25:04
【问题描述】:

我有多个单选列表和多个复选框列表,其中有些可以选择多个答案,有些可以选择单个,具体取决于控件。

我不能使用数据库来完成这项任务。

控件将放置在 asp.net 表单上。

如果需要,我可以提供控件的 HTML,但我认为这对我的问题没有帮助。

根据选择的答案/选项将决定从 2 个可用结果中显示什么结果。

我知道我可以做一个 if 子句来检查每个控件,如果答案符合标准,我可以显示结果一,否则结果二,但是我可以使用更简洁的方法吗?如果将来标准发生变化,我觉得这种方式似乎需要大量维护?

编辑 1:示例

What is 1 + 1

A. 2
B. 3

Select all tech companies
A. Microsoft
B. Google
C. McDonald's

所以问题 1 中的选项 A 和问题 2 中的选项 A 和 B 会产生成功消息,而其他任何东西都不会。

【问题讨论】:

  • 是否存在某种关于如何根据答案分配答案的结构/逻辑,还是完全任意的?
  • 如果你从一个已知状态开始,你可以使用每个控件的 CheckedChanged 事件来修改状态,所以当你准备好显示结果时,你不必查询所有的控件,因为状态对象已经更新。但这个问题有点令人困惑。
  • 我个人认为,如果您要添加更多问题或修改已过时的问题,将所有内容保留在静态 html 中肯定会增加您的维护头痛。如果您要以某种方式处理答案,您也会遇到脚本噩梦。不知道为什么你不能使用后端。但是使用后端会减少你的整体头痛。
  • 我可以使用 JSON 或 XML 文件吗?我用一个例子修改了我的问题,以帮助我想要实现的目标。如果我只是 JSON/XML,我不确定如何确定正确答案?
  • 这不是你处理这个问题的方式。 1. 使用多个if ..else 语句编写代码并使其工作 2. 当您可以看到整个实现图时,您可以使用更可维护的实现对其进行重构。啊!如果您不要忘记执行第 0 步,那将会非常高效。在编写代码之前编写测试;)

标签: c# asp.net .net vb.net


【解决方案1】:

您的应用程序需要多个层。

  1. Repo 层 - 保存您的数据的东西,可以是 XML 或 JSON。我的观点是 JSON 更容易。
  2. 服务层 - 要生成问题集合,请提出第一个问题、确定是否正确以及后续步骤
  3. 视图层 - 接收问题并在表单上呈现正确的输入控件。

示例 JSON:

Questions: [Question:{
        Id: 1,
        QuestionText: "What is 1+1?",
        AnswerType: "Single"
        ProvidedAnswers: ["1","2","3","4"],
        CorrectAnswers: ["2"],
        CorrectMoveToQuestion: 2,
        IncorrectMoveToQuestion: 1
    }, Question:{
        Id: 2,
        QuestionText: "Select all tech companies",
        AnswerType: "Multiple"
        ProvidedAnswers : ["Microsoft","Google","McDonald's"],
        CorrectAnswers: ["Microsoft","Google"],
        CorrectMoveToQuestion: 3,
        IncorrectMoveToQuestion: 2
    }
]

示例 C#

public class Question
{
    public int Id {get;set;}
    public string QuestionText {get;set;}
    public string AnswerType {get;set;}
    public string[] ProvidedAnswers {get;set;}
    public string[] UserAnswers {get;set;}
    public string[] CorrectAnswers      {get;set;}
    public int  CorrectMoveToQuestion    {get;set;}
    public int  IncorrectMoveToQuestion  {get;set;}
}

public class QuestionService {

    public bool ValidateAnswers(string[] correctAnswers, string[] userAnswers)
    {
        //PseudoCode - I'm not doing your work for you.
        foreach(var uA in userAnswers)
        {
            //Check that correct Answers match and that the user has not selected any wrong answers
        }
        return true; // false; depending on result      
    }
}

【讨论】:

  • 这看起来不错。我很快就会试一试,但我知道如何序列化和反序列化 JSON,但是如何检查是否从每个控件中选择了所有正确答案?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多