public int CreateProblem(CreateProblemData problem) { if (!new[] { "Traditional", "SpecialJudged", "Interactive", "AnswerOnly" }.Contains(problem.Type)) { throw new NotSupportedException("不支持的题目类型:" + problem.Type); } using (MooDB db = new MooDB()) { User currentUser = Security.CurrentUser.GetDBUser(db); Problem newProblem = new Problem() { Name = problem.Name, Type = problem.Type, CreateTime = DateTime.Now, CreatedBy = currentUser, ArticleLocked = false, EnableTesting = true, Hidden = false, Locked = false, PostLocked = false, RecordLocked = false, TestCaseHidden = false, TestCaseLocked = false, }; Access.Required(db, newProblem, Function.CreateProblem); db.Problems.AddObject(newProblem); ProblemRevision revision = new ProblemRevision() { Content = problem.Content, CreatedBy = currentUser, CreateTime = DateTime.Now, Problem = newProblem, Reason = "创建题目", }; newProblem.LatestRevision = revision; Access.Required(db, revision, Function.CreateProblemRevision); db.ProblemRevisions.AddObject(revision); db.SaveChanges(); return newProblem.ID; } }
/// <summary> /// 创建新的 Problem 对象。 /// </summary> /// <param name="id">ID 属性的初始值。</param> /// <param name="name">Name 属性的初始值。</param> /// <param name="type">Type 属性的初始值。</param> /// <param name="submissionTimes">SubmissionTimes 属性的初始值。</param> /// <param name="scoreSum">ScoreSum 属性的初始值。</param> /// <param name="submissionUser">SubmissionUser 属性的初始值。</param> /// <param name="createTime">CreateTime 属性的初始值。</param> /// <param name="hidden">Hidden 属性的初始值。</param> /// <param name="locked">Locked 属性的初始值。</param> /// <param name="recordLocked">RecordLocked 属性的初始值。</param> /// <param name="postLocked">PostLocked 属性的初始值。</param> /// <param name="articleLocked">ArticleLocked 属性的初始值。</param> /// <param name="testCaseLocked">TestCaseLocked 属性的初始值。</param> /// <param name="enableTesting">EnableTesting 属性的初始值。</param> /// <param name="testCaseHidden">TestCaseHidden 属性的初始值。</param> /// <param name="judgeInfoHidden">JudgeInfoHidden 属性的初始值。</param> public static Problem CreateProblem(global::System.Int32 id, global::System.String name, global::System.String type, global::System.Int32 submissionTimes, global::System.Int64 scoreSum, global::System.Int32 submissionUser, global::System.DateTime createTime, global::System.Boolean hidden, global::System.Boolean locked, global::System.Boolean recordLocked, global::System.Boolean postLocked, global::System.Boolean articleLocked, global::System.Boolean testCaseLocked, global::System.Boolean enableTesting, global::System.Boolean testCaseHidden, global::System.Boolean judgeInfoHidden) { Problem problem = new Problem(); problem.ID = id; problem.Name = name; problem.Type = type; problem.SubmissionTimes = submissionTimes; problem.ScoreSum = scoreSum; problem.SubmissionUser = submissionUser; problem.CreateTime = createTime; problem.Hidden = hidden; problem.Locked = locked; problem.RecordLocked = recordLocked; problem.PostLocked = postLocked; problem.ArticleLocked = articleLocked; problem.TestCaseLocked = testCaseLocked; problem.EnableTesting = enableTesting; problem.TestCaseHidden = testCaseHidden; problem.JudgeInfoHidden = judgeInfoHidden; return problem; }
/// <summary> /// 用于向 Problems EntitySet 添加新对象的方法,已弃用。请考虑改用关联的 ObjectSet<T> 属性的 .Add 方法。 /// </summary> public void AddToProblems(Problem problem) { base.AddObject("Problems", problem); }
public static void AddTestData(MooDB db) { #region Users SiteRoles siteRoles = new SiteRoles(db); User MrPhone = new User() { Name = "onetwogoo", Password = Converter.ToSHA256Hash("123456"), BriefDescription = "我觉得我写这么多应该够两行了", Description = "我是--屌丝--我骄傲,我为国家省钞票!", Email = "*****@*****.**", Role = siteRoles.Organizer, Score = 256, CreateTime = DateTime.Now }; db.Users.AddObject(MrPhone); User ShaBi = new User() { Name = "ShaBi", Password = Converter.ToSHA256Hash("ShaBi"), BriefDescription = "我觉得我写这么多应该够两行了", Description = "Moo*真*他妈的好!", Email = "*****@*****.**", Role = siteRoles.Worker, Score = 128, CreateTime = DateTime.Now }; db.Users.AddObject(ShaBi); User Baby = new User() { Name = "Baby", Password = Converter.ToSHA256Hash("Baby"), BriefDescription = "我啥都不懂", Description = "真不懂", Email = "*****@*****.**", Role = siteRoles.NormalUser, Score = 1000, CreateTime = DateTime.Now }; db.Users.AddObject(Baby); db.Users.AddObject(new User() { Name = "BeiJu", Password = Converter.ToSHA256Hash("BeiJu"), BriefDescription = "冤枉啊!啥都没干就被封了!", Description = "太他妈冤枉了!", Email = "", Role = siteRoles.Reader, Score = 0, CreateTime = DateTime.Now }); #endregion #region Tags Tag solution = new Tag() { Name = "题解" }; db.Tags.AddObject(solution); Tag forFun = new Tag() { Name = "娱乐" }; db.Tags.AddObject(forFun); Tag dp = new Tag() { Name = "动态规划" }; #endregion #region Problems Problem APlusB = new Problem() { Name = "A+B问题", Type = "Traditional", SubmissionTimes = 10, EnableTesting = true, ScoreSum = 100, SubmissionUser = 1, MaximumScore = 30, CreateTime = DateTime.Now, CreatedBy = MrPhone }; APlusB.Tag.Add(dp); db.Problems.AddObject(APlusB); Problem CPlusD = new Problem() { Name = "C+D问题", Type = "Traditional", SubmissionTimes = 20, EnableTesting = true, ScoreSum = 5, SubmissionUser = 2, MaximumScore = 120, CreateTime = DateTime.Now.AddSeconds(1), CreatedBy = ShaBi }; db.Problems.AddObject(CPlusD); Problem EPlusF = new Problem() { Name = "E+F问题", Type = "Traditional", SubmissionTimes = 40, EnableTesting = true, ScoreSum = 300, SubmissionUser = 4, MaximumScore = 110, CreateTime = DateTime.Now.AddSeconds(2), CreatedBy = Baby }; db.Problems.AddObject(EPlusF); Problem Cat = new Problem() { Name = "Cat", Type = "SpecialJudged", CreateTime = DateTime.Now.AddSeconds(3), CreatedBy = MrPhone }; db.Problems.AddObject(Cat); Problem EasyAPlusB = new Problem() { Name = "Easy A+B", Type = "Interactive", CreateTime = DateTime.Now.AddSeconds(4), CreatedBy = MrPhone }; db.Problems.AddObject(EasyAPlusB); Problem AnswerAPlusB = new Problem() { Name = "Answer A+B", Type = "AnswerOnly", CreateTime = DateTime.Now.AddSeconds(5), CreatedBy = MrPhone }; #endregion #region Problem Revision db.ProblemRevisions.AddObject(new ProblemRevision() { Problem = APlusB, Content = "输入A,B。输出A+B。啊!输错了!", Reason = "蛋疼", CreatedBy = ShaBi, CreateTime = DateTime.Now }); db.ProblemRevisions.AddObject(new ProblemRevision() { Problem = APlusB, Content = "输入A,B。输出它们的和。", Reason = "蛋疼", CreatedBy = MrPhone, CreateTime = DateTime.Now }); db.ProblemRevisions.AddObject(new ProblemRevision() { Problem = APlusB, Content = "输入俩蛋,输出它们的和。", Reason = "蛋疼", CreatedBy = ShaBi, CreateTime = DateTime.Now }); APlusB.LatestRevision = new ProblemRevision() { Problem = APlusB, Content = "输入两个Int32,输出它们的和。", Reason = "蛋疼", CreatedBy = MrPhone, CreateTime = DateTime.Now }; CPlusD.LatestRevision = new ProblemRevision() { Problem = CPlusD, Content = "输入C,D。*注意是Int64*输出它们的和。", Reason = "蛋疼", CreatedBy = ShaBi, CreateTime = DateTime.Now }; EPlusF.LatestRevision = new ProblemRevision() { Problem = EPlusF, Content = "输入E,F。输出它们的和。", Reason = "蛋疼", CreatedBy = ShaBi, CreateTime = DateTime.Now }; Cat.LatestRevision = new ProblemRevision() { Problem = Cat, Content = "模拟Cat", Reason = "擦!", CreatedBy = MrPhone, CreateTime = DateTime.Now }; EasyAPlusB.LatestRevision = new ProblemRevision() { Problem = EasyAPlusB, Content = "仅需编写一个int APlusB(int,int);即可。", Reason = "This is Interactive", CreatedBy = ShaBi, CreateTime = DateTime.Now }; AnswerAPlusB.LatestRevision = new ProblemRevision() { Problem = AnswerAPlusB, Content = "提交答案吧!", Reason = "None", CreatedBy = MrPhone, CreateTime = DateTime.Now }; #endregion #region Articles Article howToAC = new Article() { CreatedBy = MrPhone, CreateTime = DateTime.Now, Name = "如何才能AC呢", }; howToAC.Tag.Add(solution); howToAC.Tag.Add(forFun); db.Articles.AddObject(howToAC); Article aPlusBSolution = new Article() { CreatedBy = ShaBi, CreateTime = DateTime.Now, Name = "A+B正解", Problem = APlusB }; aPlusBSolution.Tag.Add(solution); db.Articles.AddObject(aPlusBSolution); #endregion #region Article Revision db.ArticleRevisions.AddObject(new ArticleRevision { Article = howToAC, Content = "AC就是<color:green>Accepted</color>,而在Moo上,评测信息则是<color:green>正确</color>。所以,理论上无法*AC*.", CreatedBy = MrPhone, CreateTime = DateTime.Now, Reason = "建立文章" }); db.SaveChanges(); howToAC.LatestRevision = new ArticleRevision { Article = howToAC, Content = "--AC就是<color:green>Accepted</color>,而在Moo上,评测信息则是<color:green>正确</color>。所以,理论上无法*AC*.--\n" + "楼上纯属扯淡", CreatedBy = ShaBi, CreateTime = DateTime.Now, Reason = "扯" }; aPlusBSolution.LatestRevision = new ArticleRevision { Article = aPlusBSolution, Content = "就XXX,然后XXX,就好了~", CreatedBy = ShaBi, CreateTime = DateTime.Now, Reason = "哈哈" }; #endregion #region Files UploadedFile file = new UploadedFile() { Name = "SPJ for Cat", Description = "给Cat的SPJ", FileName = "Cat.exe", CreatedBy = MrPhone }; db.UploadedFiles.AddObject(file); #endregion #region Test Cases db.TestCases.AddObject(new TraditionalTestCase() { Problem = CPlusD, Input = Encoding.ASCII.GetBytes("qwertyuioplkjhgfdsazxcvbnm"), Answer = Encoding.ASCII.GetBytes("mnbvcxzasdfghjklpoiuytrewq"), TimeLimit = 1000, MemoryLimit = 1024 * 1024 * 6, Score = 12, CreatedBy = MrPhone, CreateTime = DateTime.Now }); db.SaveChanges(); db.TestCases.AddObject(new TraditionalTestCase() { Problem = APlusB, Input = Encoding.ASCII.GetBytes("1 2"), Answer = Encoding.ASCII.GetBytes("3"), TimeLimit = 1000, MemoryLimit = 60 * 1024 * 1024, Score = 50, CreatedBy = MrPhone, CreateTime = DateTime.Now }); db.TestCases.AddObject(new TraditionalTestCase() { Problem = APlusB, Input = Encoding.ASCII.GetBytes("100 345"), Answer = Encoding.ASCII.GetBytes("445"), TimeLimit = 1000, MemoryLimit = 60 * 1024 * 1024, Score = 50, CreatedBy = MrPhone, CreateTime = DateTime.Now }); db.TestCases.AddObject(new SpecialJudgedTestCase() { Problem = Cat, Input = Encoding.ASCII.GetBytes("1 2"), Answer = Encoding.ASCII.GetBytes("Miao~"), TimeLimit = 1000, MemoryLimit = 60 * 1024 * 1024, Judger = file, CreatedBy = MrPhone, CreateTime = DateTime.Now }); file = new UploadedFile() { Name = "Invoker for EasyA+B", Description = "EasyA+B的调用程序", FileName = "EasyA+B.o", CreatedBy = MrPhone }; db.TestCases.AddObject(new InteractiveTestCase() { Problem = EasyAPlusB, TestData = Encoding.ASCII.GetBytes("1123 3212"), TimeLimit = 1000, MemoryLimit = 60 * 1024 * 1024, Invoker = file, CreatedBy = MrPhone, CreateTime = DateTime.Now }); db.TestCases.AddObject(new InteractiveTestCase() { Problem = EasyAPlusB, TestData = Encoding.ASCII.GetBytes("1 3"), TimeLimit = 1000, MemoryLimit = 60 * 1024 * 1024, Invoker = file, CreatedBy = MrPhone, CreateTime = DateTime.Now }); file = new UploadedFile() { Name = "Judger Of Answer A+B", Description = "*测评程序*啊", FileName = "AnswerA+B.exe", CreatedBy = MrPhone }; AnswerOnlyTestCase answerOnlyTestCase1 = new AnswerOnlyTestCase() { Problem = AnswerAPlusB, TestData = Encoding.ASCII.GetBytes("23 345"), Judger = file, CreatedBy = MrPhone, CreateTime = DateTime.Now }; db.TestCases.AddObject(answerOnlyTestCase1); AnswerOnlyTestCase answerOnlyTestCase2 = new AnswerOnlyTestCase() { Problem = AnswerAPlusB, TestData = Encoding.ASCII.GetBytes("453 123"), Judger = file, CreatedBy = MrPhone, CreateTime = DateTime.Now }; db.TestCases.AddObject(answerOnlyTestCase2); #endregion #region Posts Post post = new Post() { Name = "主页吐槽专用贴", Problem = APlusB, ReplyTime = DateTime.Now, OnTop = true, }; db.Posts.AddObject(post); db.PostItems.AddObject(new PostItem() { Post = post, CreateTime = DateTime.Now, Content = "终于抢到了主页第一个帖子。*沙发*!", CreatedBy = ShaBi, }); db.SaveChanges(); db.PostItems.AddObject(new PostItem() { Post = post, CreateTime = DateTime.Now.AddSeconds(3), Content = "靠!傻逼给我<color:red>撤</color>,这帖子是我的!测试一下源代码:\n" + "{code: c++}\n" + "#include <iostream>\n" + "using namespace std;\n" + "int main(){\n" + "\tcout<<\"没占上沙发真倒霉\"<<endl;\n" + "\treturn 0;\n" + "}\n" + "{code: c++}\n", CreatedBy = MrPhone }); post = new Post() { Name = "认真研究一下此题变形", Problem = APlusB, ReplyTime = DateTime.Now, OnTop = false }; db.Posts.AddObject(post); db.PostItems.AddObject(new PostItem() { Post = post, CreateTime = DateTime.Now, Content = "A+B能有什么变形呢?", CreatedBy = MrPhone }); db.SaveChanges(); db.PostItems.AddObject(new PostItem() { Post = post, CreateTime = DateTime.Now, Content = "靠!没人回答,我寂寞了~", CreatedBy = MrPhone }); post = new Post() { Name = "讨论一下Moo好不好", ReplyTime = DateTime.Now, OnTop = false }; db.Posts.AddObject(post); db.PostItems.AddObject(new PostItem() { Post = post, CreateTime = DateTime.Now, Content = "Moo很好啊。*注意此贴没有对应题目且被锁*", CreatedBy = MrPhone }); #endregion #region Contest Contest contest = new Contest() { StartTime = DateTime.Now.AddMinutes(0.5), EndTime = DateTime.Now.AddMinutes(1.5), Status = "Before", Name = "Moo水题大赛", Description = "全是--水--题啊!", LockProblemOnStart = true, LockPostOnStart = true, LockTestCaseOnStart = true, EnableTestingOnStart = false, HideTestCaseOnStart = true, LockRecordOnStart = false, HideProblemOnStart = false, EnableTestingOnEnd = true, LockPostOnEnd = false, LockProblemOnEnd = false, LockRecordOnEnd = false, LockTestCaseOnEnd = false, HideProblemOnEnd = false, HideTestCaseOnEnd = false, LockArticleOnEnd = false, LockArticleOnStart = true, }; //contest.Problem.Add(APlusB); contest.Problem.Add(CPlusD); contest.User.Add(ShaBi); db.Contests.AddObject(contest); #endregion #region Record Record record = new Record() { Code = "#include <iostream>\n" + "using namespace std;" + "int main(){" + " int x,y;" + " cin>>x>>y;" + " cout<<x+y;" + " return 0;" + "}", Language = "c++", CreateTime = DateTime.Now.AddMinutes(1.5), User = ShaBi, Problem = APlusB, }; db.Records.AddObject(record); record = new Record() { Code = "", Language = "c++", CreateTime = DateTime.Now.AddMinutes(1.5), User = ShaBi, Problem = APlusB, }; db.Records.AddObject(record); record = new Record() { Code = "#include <iostream>\n" + "int main(int argc,char* argv[]) {\n" + "\tint c,d;\n" + "\tstd::cin>>c>>d;\n" + "\tstd::cout<<c+d<<std::endl;\n" + "}", Language = "c++", CreateTime = DateTime.Now.AddMinutes(1.5), User = ShaBi, Problem = CPlusD, }; db.Records.AddObject(record); db.Records.AddObject(new Record() { Code = "int APlusB(int x,int y){\n\treturn 4;\n}", CreateTime = DateTime.Now, Language = "c++", Problem = EasyAPlusB, User = MrPhone, }); db.Records.AddObject(new Record() { Code = "<Moo:Answer testCase='" + answerOnlyTestCase1.ID + "'>368</Moo:Answer>\n" + "<Moo:Answer testCase='" + answerOnlyTestCase2.ID + "'>496</Moo:Answer>", CreateTime = DateTime.Now, Language = "plaintext", Problem = AnswerAPlusB, User = MrPhone, }); #endregion #region Messages db.Messages.AddObject(new Message() { Content = "抢占版聊第一帖!", CreateTime = DateTime.Now, From = Baby, }); db.SaveChanges(); db.Messages.AddObject(new Message { Content = "<color:red>沙发</color>!", CreateTime = DateTime.Now.AddSeconds(1), From = MrPhone }); db.SaveChanges(); db.Messages.AddObject(new Message { Content = "{code:c++}\n" + "#include <iostream>\n" + "#include <cstdio>\n" + "using namespace std;\n" + "int main(){\n" + "\tcout<<\"Hello Moo\"<<endl;\n" + "}\n" + "{code:c++}", CreateTime = DateTime.Now.AddSeconds(2), From = ShaBi }); for (int i = 0; i < 100; i++) { db.Messages.AddObject(new Message { Content = "Hello ShaBi " + i, CreateTime = DateTime.Now.AddSeconds(i), From = MrPhone, To = ShaBi, }); db.SaveChanges(); } db.Messages.AddObject(new Message { Content = "Hello 嘛呀", CreateTime = DateTime.Now.AddSeconds(1), From = ShaBi, To = MrPhone }); #endregion #region Files File.WriteAllText(Config.UploadFileDirectory + "firstfile.txt", "This is file content"); db.UploadedFiles.AddObject(new UploadedFile { CreatedBy = MrPhone, Description = "<color:red>Test Wiki</color>", FileName = "firstfile.txt", Name = "FirstFile.txt" }); #endregion db.SaveChanges(); }