
一、面向对象程序设计的基本步骤:
(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("
"));
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;
}
}