Temperateclimate 2022-07-15 14:46 采纳率: 100%
浏览 64
已结题

怎样在集合中正确存入数据

题目要求:利用C#编写一个用于机考字符界面的控制台程序,当用户进入到控制台窗口后,程序将从硬盘目录中的题目存储文件中读取一组单项选择题,要求用户选择对应的正确答案,当用户完成所有的选择后,系统将给出用户的得分和所用时长。具体要求如下:

(1)题目需要存储在文本文件中,文本文件中多个题目按照以下的格式,按照顺序进行存储:
[题目序号]
1
[题干]
长在树上的水果不包括:
[选项]
[A]荔枝
[B]苹果
[C]菠萝
[D]桃子
[答案]
C

(2)题目文件的存储位置要求
题目存储的文本文件的位置不做特定的要求,即可以将题目文件存储在程序运行的目录当中,以便程序可以直接存储;也可以存储在特定的目录中,由程序按照此目录进行读取。
(3)题目文件的读取和显示
程序在运行时,要从题目所在的文本文件中读取题目,如果文件中不包含题目,则程序可以直接退出,如果包含题目,则控制台窗口中应显示如下所示的第一题的内容:

(4)用户的输入处理
当用户在当前的题目后输入选择后,程序将提示用户输入“yes”进行选择确定,并提示一旦确定就无法修改;输入“exit”直接退出程序的执行。如果用户没有输入“yes”或者“exit”,就可以继续为当前题目输入选择,否则,将显示下一题或者退出程序。

(5)计分处理
一旦所有题目均已完成选择,程序应对比用户选择的选项和对应题目的答案是否一致,然后利用如下公式计算用户得分:
用户得分=正确选择的题目个数/题目总数*100
计算完成用户得分后,程序应显示用户的得分,并以分钟:秒的格式显示用户所用的时间。

有没有人可以帮我解答一下:怎样才能让文件中的数组分别读取为题号、题干、选项、答案,再按每道题存入集合?
代码如下
using System;
using System.Collections;
using System.IO;

namespace test
{
public class Info
{
static void Exist()
{ //测试文件是否存在

        bool bExist = File.Exists("d:\\net\\test\\questions.txt");
        if (bExist == true)
        {
            Console.WriteLine("文件存在,按回车开始测试");
            Console.ReadKey();
        }
        else
        {
            Console.WriteLine("文件不存在,按回车退出");
            Console.ReadKey();
            Environment.Exit(0);
        }
    }
   
    ArrayList list = new ArrayList();
   void GetPageInfo()
    {
       
        string[] utf = File.ReadAllLines("d:\\net\\test\\questions.txt", System.Text.Encoding.UTF8);
        if (utf == null)
        {
            Console.WriteLine("试题内容不存在,按回车退出");
            Console.ReadKey();
            Environment.Exit(0);
        }

        for (int i = 0; i < utf.Length; i++)
        {   Question  pageInfo = new Question();
            if (utf[i] == "[题目序号]")
            {
                pageInfo.number = utf[i + 1];
               
            }  
           else if (utf[i] == "[题干]")
            {
                pageInfo.text = utf[i + 1];
                
            }
          else if (utf[i] == "[选项]")
            {
                for (int n = 1; n < 5; n++)
                {
                    pageInfo.choose = pageInfo.choose + "\n" + utf[i + n];
                }

            }
            else if (utf[i] == "[答案]")
            {
                pageInfo.answer = utf[i + 1];
            } 
          if(pageInfo.answer != null && pageInfo.choose != null && pageInfo.number != null && pageInfo.text != null)
            {
                list.Add(pageInfo);   int sum = list.Count;     Console.WriteLine(sum);         
            }
             Console.WriteLine(pageInfo.number);
            Console.WriteLine(pageInfo.text);
            Console.WriteLine(pageInfo .choose); 

        }   
    }
    DateTime dt1 = System.DateTime.Now;
    void Getanswer()
    {
        int sum=list.Count;
        string put;
        foreach (Question pageInfo in list)
        {
            Console.WriteLine("共{0}题,当前第{1}题", sum,pageInfo.number);
            Console.WriteLine(pageInfo.text);
            Console.WriteLine(pageInfo.choose);
            Console.WriteLine("请输入答案");
            put = Console.ReadLine();
            Console.WriteLine("是否确认?");
            pageInfo.decision = Console.ReadLine();
            if (pageInfo.decision == "yes")
            {
                pageInfo.input = put;
                list.Add(pageInfo);
            }
            else if (pageInfo.decision == "exit")
            {
                Environment.Exit(0);
            }
            else
            {
                put = Console.ReadLine();
            }
        }
    }

    
    int Getscore()
    {
        int score = 0;
        int count=0;
        foreach(Question pageInfo in list)
        {
            if(pageInfo.answer == pageInfo.input)
            {count++;
               score = score +( count/ list.Count)*100;
            }
        }
        Console.WriteLine("最终得分为:{0}", score);
        return score;
    }

     void Time()
    {
        
        System.Threading.Thread.Sleep(0);
        DateTime dt2 = System.DateTime.Now;

        TimeSpan ts = dt2.Subtract(dt1);
        Console.WriteLine("运行时间: {0}秒", ts.TotalMilliseconds);


    }
    public static void Main(string[] args)
    {
        Info info = new Info();
        Exist();
        info. GetPageInfo();
        info. Getanswer();
        info. Getscore();
        info.Time();
       
    }
}
class Question
{
    public string number;//题号
    public string text;//题干
    public string choose;//选项
    public string answer;//答案
    public string input;//输入的答案
    public string decision;//输入的确定
    public Question() { }
    public Question(string number, string text, string choose, string answer, string input, string decision)
    {

        this.number = number;
        this.text = text;
        this.choose = choose;
        this.answer = answer;
        this.input = input;
        this.decision = decision;


    }
    public string getNumber() { return number; }
    public string getText() { return text; }
    public string getChoose() { return choose; }
    public string getAnswer() { return answer; }
    public string getInput() { return input; }
    public string getDecision() { return decision; }
    public void setNumber(string number) { this.number = number; }
    public void setText(string text) { this.text = text; }
    public void setChoose(string choose) { this.choose = choose; }
    public void setAnswer(string answer) { this.answer = answer; }
    public void setInput(string input) { this.input = input; }
    public void setDecision(string decision) { this.decision = decision; }


}

}

  • 写回答

1条回答 默认 最新

  • Hello World, 2022-07-15 15:31
    关注

    img

    //此段赋值
                var lines = File.ReadAllLines(@"G:\桌面\a.txt");
                var Questions = new List<Question>();
                for(int i = 0, n = lines.Length; i<n; i++)
                {
                    var str = lines[i];
                    if(str =="[题目序号]")
                    {
                        int seq = int.Parse(lines[i+1]);
                        var question = new Question
                        {
                            Seq = seq,
                            Title = lines[i+3]
                        };
                        i+=5;
                        while (lines[i]!="[答案]")
                        {
                            question.Options.Add(lines[i]);
                            i++;
                        }
                        question.Answer=lines[i+1];
                        Questions.Add(question);
                    }
                }
    //问题的类
        class Question
        {
            /// <summary>
            /// [题目序号]
            /// </summary>        
            public int Seq { get; set; }
            /// <summary>
            /// [题干]
            /// </summary>
            public string Title { get; set; }
    
            /// <summary>
            /// 选项
            /// </summary>
            public List<string> Options { get; set; } = new List<string>();
    
            /// <summary>
            /// 答案
            /// </summary>
            public string Answer { get; set; }
        }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 7月23日
  • 已采纳回答 7月15日
  • 赞助了问题酬金20元 7月15日
  • 创建了问题 7月15日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改