C# WinForm答題設計思路(類的設計)


一、面向對象程序設計的基本步驟:

(1)分析項目中有那些類(或對象)參與程序。

  對象選擇的標准:

    1、這個對象必須參與程序的運行;

    2、這個對象有對象的基本特征;

    3、對象必須是項目強相關的對象。

  初步找到的:試卷、試題、計算機、考生、答案、題干、選項。。。

  篩選后:

    試卷類:本項目中只有一張試卷(后續擴展可以做成多套試卷)

    試題類:包括題干、選項、答案

    答案類:包括正確答案、答案分析、所選答案(答案和試題是關聯的)

    邊界類:項目主界面(負責和用戶交互,完成對象關聯)

(2)分析項目中類或對象之間的關系,分析結果:

  試卷->試題:一張試卷包含若干試題,一對多。試題在試卷中應該以集合對象形式存在。

  試題->答案:一道試題有一個答案,一對一。答案對象應該在試題中以對象屬性形式存在。

  邊界類->試卷:一個窗體中有一個試卷對象。

二、設計類

1、設計答案類。屬性:正確答案、所選答案、答案分析。

2、設計試題類。屬性:試題編號、題干、選擇A、B、C、D、答案對象(類似數據庫外鍵)

3、設計試卷類。屬性:試題集合list<T> 方法:(1)抽取試題(2)題目選擇(3)獲取得分。

4、設計邊界類。屬性:試卷對象,試題序號。事件:(1)抽取試題(2)題目選擇(3)提交試卷

三、創建類

1、Answer類

[Serializable]
public class Answer
{
    public string AnswerAnalysis{get;set;} = string.Empty;
    public string SelectedAnswer{get;set;} = string.Empty;
    public string RightAnswer{get;set;} = string.Empty;               
}

2、Question類

[Serializable]
public class Question
{
    public Question()
    {
         this.QAnswer = new Answer();
    }
    public int QuestionID {get;set;}
    public string QuestionTitle {get;set;}
    public string OptionA {get;set;}
    public string OptionB {get;set;}
    public string OptionC {get;set;}
    public string OptionD {get;set;}
    public Answer QAnswer {get;set;}
}    

3、Paper類

using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

public class Paper
{
    public Paper()
    {
        this.questions = new List<string[]>();
    }
    private List<string[]> questions;
    public List<string[]> Questions
    {
        get{return this.questions;}
    }
    //提取試題
    public void ExtractQuestionByOrign()
    {
        FileStream fs = new FileStream("Question.txt",FileMode.Open);
        StreamReader sr = new StreamReader(fs,Encoding.GetEncoding("utf-8"));
        string questionString = sr.ReadToEnd();
        string[] questionArr = questionString.Split(Convert.ToChar("&"));
        string[] question = null;
        for(int i=0;i<questionArr.Length;++i)
        {
            questions = questionArr[i].Trim().Split(Convert.ToChar("\r"));
            this.questions.Add(new Questions()
            {
                QuestionTitle = questions[0].Trim(),
                OptionA = question[1].Trim(),
                OptionB = question[2].Trim(),
                OptionC = question[3].Trim(),
                OptionD = question[4].Trim(),
                QAnswer = new Answer()
                {
                    RigthAnswer = question[5].Trim()
                }
            });
        }
        sr.Close();
        fs.Close();  
    }
    //生成序列化文件
    public void CreateSerializableFile()
    {
        FileStream fs = new FileStream("Question.obj",FileMode.Create);
        BinaryFormatter formatter = new BinaryFormatter();
        formatter.Serialize(fs,this.questions);
        fs.Close();
    }
    //提取文件
    public void ExtractbySerializableFile()
    {
        FileStream fs = new FileStream("Question.obj",FileMode.Open);
        BinaryFormatter formatter = new BinaryFormatter();
        this.questions = (List<Question>)formatter.Deserialize(fs);
        fs.Close();
    }
    //獲取得分
    public int GetScore()
    {
        int score = 0;
        foreach(Question item in this.questions)
        {
            if(item.QAnswer.SelectedAnswer == string.Empty) continue;
            if(item.QAnswer.SelectedAnswer.Equals(item.QAnswer.RightAnswer))
                score += 5;
        }
        return score;
    }
}

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM