题目要求:利用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; }
}
}