C#大作业——小学算数练习系统

小学生测验 面向小学1~2年级学生,随机选择两个整数加减法形成算式要求学生解答。

功能要求:

(1)进入测试之前先输入用户名、密码登录,以方便保存学生信息。

(2)出题模块:电脑随机出10道试题,每题10分,测试过程中,程序结束时显示学生得分;确保算式没有超出12年级的水平,只允许进行50以内的加减法,不允许两数之和或之差超出050的范围,负数更是不允许的;

(3)信息保存:要求用户信息、试题信息保存进文件,需要时可以调出试卷进行重新测试、修改试题内容等。将测试记录保存至文件,可以查看学生的解答情况,包括得分等。

(4)答题模块:每道题学生有三次机会输入答案,当学生输入错误答案时,提醒学生重新输入,如果三次机会结束则输出正确答案;

(5)计分功能:对于每道题,学生第一次输入正确答案得10分,第二次输入正确答案得7分,第三次输入正确答案得5分,否则不得分;

(6)结果显示:总成绩90以上显示“SMART”,80-90显示“GOOD”,70-80显示“OK”,60-70显示“PASS”,60以下“TRY AGAIN”。

(7)重考功能:不及格的学生,由学生自己选择是否重新来一次,可以重新做以前的测试卷,也可以选择重新做一套试卷。重做机会只有一次。

(8)排行榜功能:排行榜显示用户名、分数、做题时间等。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static string[] usernames = new string[100];
    static int[] scores = new int[100];
    static DateTime[] testTimes = new DateTime[100];
    static string[] pingjias = new string[100];
    static int numbers = 0;
    static Random random = new Random(); // 全局的随机数生成器
    static void Main(string[] args)
    {
        Console.Write("请输入用户名: ");
        string username = Console.ReadLine();

        Console.Write("请输入密码: ");
        string password = Console.ReadLine();

        if (!Login(username, password))
        {
            Console.WriteLine("用户名或密码错误。");
            return;
        }

        while (true)
        {
            Console.WriteLine("1. 开始测试");
            Console.WriteLine("2. 查看排行榜");
            Console.WriteLine("3. 退出");
            Console.Write("请选择: ");
            string n = Console.ReadLine();

            switch (n)
            {
                case "1":
                    KaoShi(username);
                    break;
                case "2":
                    PaiMing();
                    break;
                case "3":
                    return;
                default:
                    Console.WriteLine("你选了个泡泡茶壶?");
                    break;
            }
        }
    }

    static void KaoShi(string username)
    {
        string[] questions = new string[10];
        int[] answers = new int[10];

        // 生成问题
        for (int i = 0; i < 10; i++)
        {
            int num1, num2, answer;
            string fuhao;

            // 确保问题和答案符合要求
            while (true)
            {
                num1 = random.Next(1, 51);
                num2 = random.Next(1, 51);
                if (new Random().Next(2) == 0)
                {
                    fuhao = "+";
                    answer = num1 + num2;
                }
                else
                {
                    fuhao = "-";
                    answer = num1 - num2;
                }

                if (answer >= 0 && answer <= 100)
                    break;
            }

            questions[i] = num1.ToString() + " " + fuhao + " " + num2.ToString();
            answers[i] = answer;
        }

        int score = 0;

        // 进行测试
        for (int i = 0; i < 10; i++)
        {
            int changshi = 0;
            bool zhengque = false;

            while (changshi < 3 && !zhengque)
            {
                Console.WriteLine("问题: " + questions[i]);
                Console.Write("请输入答案: ");
                int userAnswer;
                bool pp = int.TryParse(Console.ReadLine(), out userAnswer);

                if (!pp)
                {
                    Console.WriteLine("请输入有效的整数答案。");
                    continue;
                }

                if (userAnswer == answers[i])
                {
                    zhengque = true;
                    int fenshu;
                    if (changshi == 0)
                    {
                        fenshu = 10;
                    }
                    else if (changshi == 1)
                    {
                        fenshu = 7;
                    }
                    else
                    {
                        fenshu = 5;
                    }

                    score += fenshu;
                    Console.WriteLine("正确!得分:" + fenshu);
                }
                else
                {
                    changshi++;
                    if (changshi < 3)
                    {
                        Console.WriteLine("错误,请重新输入。");
                    }
                    else
                    {
                        Console.WriteLine("错误,正确答案是: " + answers[i]);
                    }
                }
            }
        }

        // 计算结果
        string pingjia;
        if (score >= 90)
        {
            pingjia = "极其优秀";
        }
        else if (score >= 80)
        {
            pingjia = "优秀";
        }
        else if (score >= 70)
        {
            pingjia = "良好";
        }
        else if (score >= 60)
        {
            pingjia = "及格";
        }
        else
        {
            pingjia = "不及格";
        }

        Console.WriteLine("总成绩: " + score + ",评语: " + pingjia);

        // 保存成绩
        usernames[numbers] = username;
        scores[numbers] = score;
        testTimes[numbers] = DateTime.Now;
        pingjias[numbers] = pingjia;
        numbers++;

        // 提示重考
        if (score < 60)
        {
            Console.WriteLine("您没有及格,是否重考?(y/n)");
            if (Console.ReadLine() == "y")
            {
                KaoShi(username);
            }
        }
    }

    static bool Login(string username, string password)
    {
        // 简单示例,仅匹配用户名和密码都为"admin"
        return username == "admin" && password == "admin";
    }

    static void PaiMing()
    {
        for (int i = 0; i < numbers; i++)
        {
            Console.WriteLine("用户名: {0}, 分数: {1}, 时间: {2}, 结果: {3}", usernames[i], scores[i], testTimes[i], pingjias[i]);
        }
    }
}