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;
        }
    }
    

      

  • 相关阅读:
    luoguP2657 [SCOI2009] windy 数 数位dp
    LOJ#3280. 「JOISC 2020 Day4」首都城市 点分治+BFS
    luoguP2168 [NOI2015]荷马史诗 哈夫曼树
    转载-如何在博客园随笔中增加章节导航
    转载-MySQL之终端(Terminal)管理数据库、数据表、数据的基本操作
    转载-MySQL之终端(Terminal)管理MySQL
    数据库缓存
    独立图片服务器的部署(了解)
    CDN加速
    MySQL update替换字段部分内容
  • 原文地址:https://www.cnblogs.com/pandora2050/p/13247101.html
Copyright © 2011-2022 走看看