📄 multianswer.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 + -