
一、面向對象程序設計的基本步驟:
(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;
}
}
