zoukankan      html  css  js  c++  java
  • 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("
    "));
                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;
        }
    }
    

      

  • 相关阅读:
    pipelinewise 学习二 创建一个简单的pipeline
    pipelinewise 学习一 docker方式安装
    Supercharging your ETL with Airflow and Singer
    ubuntu中使用 alien安装rpm包
    PipelineWise illustrates the power of Singer
    pipelinewise 基于singer 指南的的数据pipeline 工具
    关于singer elt 的几篇很不错的文章
    npkill 一个方便的npm 包清理工具
    kuma docker-compose 环境试用
    kuma 学习四 策略
  • 原文地址:https://www.cnblogs.com/pandora2050/p/13247101.html
Copyright © 2011-2022 走看看