实例练习目的主要是为了体会编程思想,理解高内聚、低耦合,掌握编程思维逻辑的大招,告别垃圾代码,重点体会编程之美…
目录
开发一个项目之前,切记不要打开程序就写代码,首先要做的就是分析项目,从项目的架构开始思考,软件要实现什么功能(思考UI界面布局);数据从哪里获取?(数据库、文本文件、通讯接口…);重点思考项目对象、功能有哪些?(对象的属性<成员>、方法<功能>,之间的关系…),以此项目为例,思维导图如下:
1. 软件实现的功能有哪些?(UI如何设计)
答: 用一个主界面实现,有标题栏(项目名称及关闭按钮)、菜单栏(上一题、下一题、提交按钮)、内容显示题目,选项以勾选的方式答题,最后提交得出总分;
2.数据在哪里获取?
答: 文本文件(是否可靠,避免用户更改源文件,进一步优化<序列化保存文件后反序列化读取>—用到的技能:文本文件操作<后续总结概括>)
3.对象有哪些,它们之间的关系是什么?
答: 软件运行强相关的对象有试卷、试题、答案(正确答案、错误答案);一张试卷中若干试题(一对多),试题在试卷中以集合的方式存在;试题的答案唯一(一对一),答案在试题中以对象属性的形式存在;
4.如何设计类(列出属性<成员>、方法<功能>)?
答: 窗体加载试卷对象(试题加载(答案));从最底层答案类开始设计:
5.代码实现
- 【答案类】
- 属性:所选答案、正确答案;
/// <summary>
/// 答案类(属性<成员变量>:所选答案、正确答案)
/// </summary>
[Serializable] //实体类需序列化保存
public class Answer
{
public string SelectAnswer {
get; set; } = string.Empty;
public string RightAnswer {
get; set; } = string.Empty;
}
- 【试题类】
- 属性:题干、选项、答案(对象属性<需在类的构造方法初始化>);
/// <summary>
/// 试题类(属性:题干、答案<对象属性-构造函数初始化>)
/// </summary>
[Serializable]
public class Question
{
public Question() //构造函数初始化
{
QueAnswer = new Answer();
}
public string Title {
get; set; } = string.Empty;
public string DescriptionA {
get; set; } = string.Empty;
public string DescriptionB {
get; set; } = string.Empty;
public string DescriptionC {
get; set; } = string.Empty;
public string DescriptionD {
get; set; } = string.Empty;
public Answer QueAnswer {
get; set; } //答案为对象属性
}
- 【试卷类】
- 属性:试题集合List;
- 方法:计算总分、读取文本(抽取试题);
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
namespace WindowsFormsApp_试卷抽题.Models
{
/// <summary>
/// 试卷类(属性:试题集合、 方法:抽题、分数)
/// </summary>
public class Paper
{
//构造函数初始化(对象属性)
public