⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 multianswer.cs

📁 计算机考试管理系统 包括模拟测试
💻 CS
字号:
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Text;

[Serializable]
[Microsoft.SqlServer.Server.SqlUserDefinedType(Format.Native, IsFixedLength=true)]
public struct MultiAnswer : INullable
{
    private byte m_answer;
    private bool m_Null;

    public override string ToString()
    {
        return string.Format("{0}{1}{2}{3}", (m_answer >> 3) % 2, (m_answer >> 2) % 2, (m_answer >> 1) % 2, m_answer % 2);
    }

    public string ToAnswerString()
    {
        StringBuilder sb1 = new StringBuilder();
        if ((m_answer >> 3) % 2 == 1)
            sb1.Append('A');
        if ((m_answer >> 2) % 2 == 1)
            sb1.Append('B');
        if ((m_answer >> 1) % 2 == 1)
            sb1.Append('C');
        if ((m_answer) % 2 == 1)
            sb1.Append('D');
        return sb1.ToString();
    }

    public bool IsNull
    {
        get{ return m_Null; }
    }

    public byte? InnerValue
    {
        get
        {
            if (m_Null)
                return null;
            else
                return m_answer;
        }
    }

    public static MultiAnswer Null
    {
        get
        {
            MultiAnswer ans = new MultiAnswer();
            ans.m_Null = true;
            return ans;
        }
    }

    public static MultiAnswer Parse(SqlString s)
    {
        if (s.IsNull)
            return Null;
        MultiAnswer ans = new MultiAnswer();
        if (s.Value.Length != 4)
            throw new FormatException();
        byte x = 0;
        for (byte i = 0, j = 1; i < 4; i++, j *= 2)
        {
            if (s.Value[3 - i] == '1')
                x += j;
        }
        ans.m_answer = x;
        return ans;
    }

    public static MultiAnswer FromByte(byte value)
    {
        MultiAnswer ans = new MultiAnswer();
        ans.m_answer = value;
        return ans;
    }

    public static int Score(MultiAnswer standardAnswer, MultiAnswer answer)
    {
        if (answer.m_answer == 0) //未作解答
            return 0;
        int x, y;
        bool bit = false;
        for (byte i = 0; i < 4; i++)
        {
            x = (standardAnswer.m_answer >> i) % 2;
            y = (answer.m_answer >> i) % 2;
            if (x == 0 && y == 1) //选择了错误答案
                return 0;
            else if (x == 1 && y == 0) //未选择正确答案
                bit = true;
            continue;
        }
        if (bit)
            return 1;
        else
            return 2;
    }
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -