这段程序具体是什么意思,每句语句的解释本人0基础,可以加QQ教会有额外奖励

QQ841414387 2019-05-01 04:44:25
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);
}
}
}
...全文
165 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2019-05-02
  • 打赏
  • 举报
回复
应该是编程考试自动判分,用户输入源代码,然后动态编译,看是否能编译,以及代码中提取出关键字和你数据库里的比较,从而给分。
泡泡龙 2019-05-02
  • 打赏
  • 举报
回复
CheckPass 动态编译 GetWord 拆分单词和各种非字母的符号 剩下的就是数据库获取知识点作比较之类的,也没啥难懂的
泡泡龙 2019-05-02
  • 打赏
  • 举报
回复
莫非又是搞NCRE的,最近好多

110,557

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧