这段程序具体是什么意思,每句语句的解释本人0基础,可以加QQ教会有额外奖励
namespace Correction
{
public class MainBll
{
private DBImpl dbImpl;
public MainBll()
{
dbImpl = new DBImpl(DBCommon.dbType, DBCommon.connString);
}
public static Dictionary<string, List<string>> knowdic = new Dictionary<string, List<string>>();
/// <summary>
/// 能否通过编译
/// </summary>
/// <param name="sourceCode"></param>
/// <returns></returns>
public bool CheckPass(string sourceCode, out string strErrorMsg)
{
bool result = true;
CSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvider();
CompilerParameters objCompilerParameters = new CompilerParameters();
objCompilerParameters.ReferencedAssemblies.Add("System.dll");
objCompilerParameters.ReferencedAssemblies.Add("System.Windows.Forms.dll");
objCompilerParameters.GenerateInMemory = true;
CompilerResults cr = objCSharpCodePrivoder.CompileAssemblyFromSource(objCompilerParameters, sourceCode);
strErrorMsg = "";
if (cr.Errors.HasErrors)
{
strErrorMsg = cr.Errors.Count.ToString() + " Errors:";
for (int x = 0; x < cr.Errors.Count; x++)
{
strErrorMsg = strErrorMsg + "\r\nLine: " +
cr.Errors[x].Line.ToString() + " - " +
cr.Errors[x].ErrorText;
}
result = false;
}
return result;
}
/// <summary>
/// 获取文本中单词
/// </summary>
/// <param name="text"></param>
/// <returns></returns>
public List<String> GetWord(string text)
{
List<String> wordList = new List<String>();
Boolean isWork = true;
String word = "";
foreach (Char c in text)
{
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') )
{
word = word + c;
isWork = true;
}
else if (!string.IsNullOrEmpty(c.ToString()))
{
wordList.Add(word);//把单词记录在数据集
word = "";
wordList.Add(c.ToString());//把运算符记录在数据集
isWork = false;
}
else
{
if (isWork)
{
wordList.Add(word);
word = "";
isWork = false;
}
}
}
if (!string.IsNullOrEmpty(word))
{
wordList.Add(word);
}
return wordList;
}
public void Initknowdic()
{
knowdic.Clear();
knowPointbll kbll = new knowPointbll();
DataTable dt=kbll.serach("");
if (dt != null && dt.Rows.Count > 0)
{
foreach(DataRow dr in dt.Rows)
{
List<string> list=GetWord(dr["knowContent"].ToString());
knowdic.Add(dr["id"].ToString(), list);
}
}
}
public List<string> GetKonwPoint(List<string> list)
{
List<string> liststr=new List<string>();
if (knowdic != null && knowdic.Count > 0)
{
foreach (var a in knowdic)
{
foreach (var valuestr in a.Value)
{
if (!list.Contains(valuestr))
{
continue;
}
liststr.Add(knowPointbll.knowdic[a.Key]);
}
}
}
return liststr.Distinct().ToList();
}
public double AutoCheck(string questionid ,string studentAnswer)
{
double score = 0;
bool isPass = false;
string msgstr="";
isPass= CheckPass(studentAnswer,out msgstr);//是否通过编译
List<String> wordList = GetWord(studentAnswer);//解析考生答案
QuestionScorebll qbll = new QuestionScorebll();
knowPointbll kbll = new knowPointbll();
DataTable dt=qbll.serach(questionid);
Dictionary<string,Double> dicScoseAndknowpoindic=new Dictionary<string,double>();
if(dt!=null&&dt.Rows.Count>0)
{
foreach(DataRow dr in dt.Rows)
{
string knowtype = dr["knowtype"].ToString();
DataTable dtknow=kbll.serach("", knowtype);//根据标签获取知识点数据
if (dtknow != null && dtknow.Rows.Count > 0)
{
foreach (DataRow dr1 in dtknow.Rows)
{
if (!knowdic.Keys.Contains(dr1["id"].ToString()))
{
continue;
}
List<string> valuelist = knowdic[dr1["id"].ToString()];
bool isRight = true;
foreach (string anwser in valuelist)
{
if (!wordList.Contains(anwser))
{
isRight = false;
}
}
if (isRight)
{
try
{
dicScoseAndknowpoindic.Add(knowtype, Convert.ToDouble(dr["Score"]));
}
catch(Exception ex)
{
}
}
}
}
}
score=dicScoseAndknowpoindic.Values.Sum();
}
return score;
}
public DataTable serach(string questionID)
{
string sql = "select tb_Answer.ExamName,tb_Answer.studentName,tb_Answer.Score,tb_Answer.Answer,tb_Answer.IsCheck,tb_Answer.Result,tb_question.Question from tb_Answer t1 Inner join tb_question t2 on t1.QuestionID=t2.ID where t2.ID=" + questionID;
return dbImpl.ExecuteQuery(sql);
}
}
}