commit 86ff1e0fe94f54f9afd32b5a61f11fb1ef5e32a6 Author: sonld Date: Tue Sep 30 09:22:49 2025 +0700 Init project diff --git a/QuizMaster/.vs/ProjectEvaluation/quizmaster.metadata.v9.bin b/QuizMaster/.vs/ProjectEvaluation/quizmaster.metadata.v9.bin new file mode 100644 index 0000000..ca70733 Binary files /dev/null and b/QuizMaster/.vs/ProjectEvaluation/quizmaster.metadata.v9.bin differ diff --git a/QuizMaster/.vs/ProjectEvaluation/quizmaster.projects.v9.bin b/QuizMaster/.vs/ProjectEvaluation/quizmaster.projects.v9.bin new file mode 100644 index 0000000..00ee608 Binary files /dev/null and b/QuizMaster/.vs/ProjectEvaluation/quizmaster.projects.v9.bin differ diff --git a/QuizMaster/.vs/ProjectEvaluation/quizmaster.strings.v9.bin b/QuizMaster/.vs/ProjectEvaluation/quizmaster.strings.v9.bin new file mode 100644 index 0000000..10e6b81 Binary files /dev/null and b/QuizMaster/.vs/ProjectEvaluation/quizmaster.strings.v9.bin differ diff --git a/QuizMaster/.vs/QuizMaster/DesignTimeBuild/.dtbcache.v2 b/QuizMaster/.vs/QuizMaster/DesignTimeBuild/.dtbcache.v2 new file mode 100644 index 0000000..6781fdf Binary files /dev/null and b/QuizMaster/.vs/QuizMaster/DesignTimeBuild/.dtbcache.v2 differ diff --git a/QuizMaster/.vs/QuizMaster/FileContentIndex/6f0c8829-fee0-49cb-b490-e961c2e34ef3.vsidx b/QuizMaster/.vs/QuizMaster/FileContentIndex/6f0c8829-fee0-49cb-b490-e961c2e34ef3.vsidx new file mode 100644 index 0000000..eb251a4 Binary files /dev/null and b/QuizMaster/.vs/QuizMaster/FileContentIndex/6f0c8829-fee0-49cb-b490-e961c2e34ef3.vsidx differ diff --git a/QuizMaster/.vs/QuizMaster/FileContentIndex/6fef2502-04a8-437e-ba70-b0339670714c.vsidx b/QuizMaster/.vs/QuizMaster/FileContentIndex/6fef2502-04a8-437e-ba70-b0339670714c.vsidx new file mode 100644 index 0000000..b737261 Binary files /dev/null and b/QuizMaster/.vs/QuizMaster/FileContentIndex/6fef2502-04a8-437e-ba70-b0339670714c.vsidx differ diff --git a/QuizMaster/.vs/QuizMaster/FileContentIndex/a6b0fe8b-191a-452e-887b-7758249198ff.vsidx b/QuizMaster/.vs/QuizMaster/FileContentIndex/a6b0fe8b-191a-452e-887b-7758249198ff.vsidx new file mode 100644 index 0000000..021233d Binary files /dev/null and b/QuizMaster/.vs/QuizMaster/FileContentIndex/a6b0fe8b-191a-452e-887b-7758249198ff.vsidx differ diff --git a/QuizMaster/.vs/QuizMaster/FileContentIndex/aaf226a0-1fda-421c-914e-edd6063b32b1.vsidx b/QuizMaster/.vs/QuizMaster/FileContentIndex/aaf226a0-1fda-421c-914e-edd6063b32b1.vsidx new file mode 100644 index 0000000..2a50dab Binary files /dev/null and b/QuizMaster/.vs/QuizMaster/FileContentIndex/aaf226a0-1fda-421c-914e-edd6063b32b1.vsidx differ diff --git a/QuizMaster/.vs/QuizMaster/FileContentIndex/bffddd60-cfd8-4d60-8607-633360fd1688.vsidx b/QuizMaster/.vs/QuizMaster/FileContentIndex/bffddd60-cfd8-4d60-8607-633360fd1688.vsidx new file mode 100644 index 0000000..da5f707 Binary files /dev/null and b/QuizMaster/.vs/QuizMaster/FileContentIndex/bffddd60-cfd8-4d60-8607-633360fd1688.vsidx differ diff --git a/QuizMaster/.vs/QuizMaster/v17/.futdcache.v2 b/QuizMaster/.vs/QuizMaster/v17/.futdcache.v2 new file mode 100644 index 0000000..b9fdf25 Binary files /dev/null and b/QuizMaster/.vs/QuizMaster/v17/.futdcache.v2 differ diff --git a/QuizMaster/.vs/QuizMaster/v17/.suo b/QuizMaster/.vs/QuizMaster/v17/.suo new file mode 100644 index 0000000..3050f41 Binary files /dev/null and b/QuizMaster/.vs/QuizMaster/v17/.suo differ diff --git a/QuizMaster/.vs/QuizMaster/v17/DocumentLayout.backup.json b/QuizMaster/.vs/QuizMaster/v17/DocumentLayout.backup.json new file mode 100644 index 0000000..ce9f759 --- /dev/null +++ b/QuizMaster/.vs/QuizMaster/v17/DocumentLayout.backup.json @@ -0,0 +1,223 @@ +{ + "Version": 1, + "WorkspaceRootPath": "D:\\Source\\Test-Jenkins\\QuizMaster\\", + "Documents": [ + { + "AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\test-jenkins\\quizmaster\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\test-jenkins\\quizmaster\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\test-jenkins\\quizmaster\\response\\quiz.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:response\\quiz.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\test-jenkins\\quizmaster\\response\\questionoption.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:response\\questionoption.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\test-jenkins\\quizmaster\\response\\question.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:response\\question.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\test-jenkins\\quizmaster\\service\\datautil.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:service\\datautil.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\test-jenkins\\quizmaster\\dbhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:dbhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\test-jenkins\\quizmaster\\response\\categoryinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:response\\categoryinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|D:\\Source\\Test-Jenkins\\QuizMaster\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form", + "RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form" + }, + { + "AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\test-jenkins\\quizmaster\\form1.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:form1.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\test-jenkins\\quizmaster\\service\\executeexcelservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:service\\executeexcelservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\test-jenkins\\quizmaster\\service\\excelvalidator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:service\\excelvalidator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + } + ], + "DocumentGroupContainers": [ + { + "Orientation": 0, + "VerticalTabListWidth": 134, + "DocumentGroups": [ + { + "DockedWidth": 200, + "SelectedChildIndex": 10, + "Children": [ + { + "$type": "Bookmark", + "Name": "ST:128:0:{116d2292-e37d-41cd-a077-ebacac4c8cc4}" + }, + { + "$type": "Document", + "DocumentIndex": 3, + "Title": "QuestionOption.cs", + "DocumentMoniker": "D:\\Source\\Test-Jenkins\\QuizMaster\\Response\\QuestionOption.cs", + "RelativeDocumentMoniker": "Response\\QuestionOption.cs", + "ToolTip": "D:\\Source\\Test-Jenkins\\QuizMaster\\Response\\QuestionOption.cs", + "RelativeToolTip": "Response\\QuestionOption.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAcAAAAcAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-07-02T07:59:06.439Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 7, + "Title": "CategoryInfo.cs", + "DocumentMoniker": "D:\\Source\\Test-Jenkins\\QuizMaster\\Response\\CategoryInfo.cs", + "RelativeDocumentMoniker": "Response\\CategoryInfo.cs", + "ToolTip": "D:\\Source\\Test-Jenkins\\QuizMaster\\Response\\CategoryInfo.cs", + "RelativeToolTip": "Response\\CategoryInfo.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-07-01T03:49:31.648Z" + }, + { + "$type": "Document", + "DocumentIndex": 9, + "Title": "Form1.Designer.cs", + "DocumentMoniker": "D:\\Source\\Test-Jenkins\\QuizMaster\\Form1.Designer.cs", + "RelativeDocumentMoniker": "Form1.Designer.cs", + "ToolTip": "D:\\Source\\Test-Jenkins\\QuizMaster\\Form1.Designer.cs", + "RelativeToolTip": "Form1.Designer.cs", + "ViewState": "AgIAAG4AAAAAAAAAAAAuwHkAAAAUAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-05-30T01:51:59.493Z" + }, + { + "$type": "Document", + "DocumentIndex": 4, + "Title": "Question.cs", + "DocumentMoniker": "D:\\Source\\Test-Jenkins\\QuizMaster\\Response\\Question.cs", + "RelativeDocumentMoniker": "Response\\Question.cs", + "ToolTip": "D:\\Source\\Test-Jenkins\\QuizMaster\\Response\\Question.cs", + "RelativeToolTip": "Response\\Question.cs", + "ViewState": "AgIAAAYAAAAAAAAAAAAuwBAAAAAsAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-05-29T02:22:22.487Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 5, + "Title": "DataUtil.cs", + "DocumentMoniker": "D:\\Source\\Test-Jenkins\\QuizMaster\\Service\\DataUtil.cs", + "RelativeDocumentMoniker": "Service\\DataUtil.cs", + "ToolTip": "D:\\Source\\Test-Jenkins\\QuizMaster\\Service\\DataUtil.cs", + "RelativeToolTip": "Service\\DataUtil.cs", + "ViewState": "AgIAABwAAAAAAAAAAAAQwC4AAAAiAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-05-29T01:45:12.308Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 11, + "Title": "ExcelValidator.cs", + "DocumentMoniker": "D:\\Source\\Test-Jenkins\\QuizMaster\\Service\\ExcelValidator.cs", + "RelativeDocumentMoniker": "Service\\ExcelValidator.cs", + "ToolTip": "D:\\Source\\Test-Jenkins\\QuizMaster\\Service\\ExcelValidator.cs", + "RelativeToolTip": "Service\\ExcelValidator.cs", + "ViewState": "AgIAACIAAAAAAAAAAAAQwDwAAABYAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-05-28T09:23:05.48Z" + }, + { + "$type": "Document", + "DocumentIndex": 8, + "Title": "Form1.cs [Design]", + "DocumentMoniker": "D:\\Source\\Test-Jenkins\\QuizMaster\\Form1.cs", + "RelativeDocumentMoniker": "Form1.cs", + "ToolTip": "D:\\Source\\Test-Jenkins\\QuizMaster\\Form1.cs [Design]", + "RelativeToolTip": "Form1.cs [Design]", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-05-28T09:15:57.769Z", + "EditorCaption": " [Design]" + }, + { + "$type": "Document", + "DocumentIndex": 10, + "Title": "ExecuteExcelService.cs", + "DocumentMoniker": "D:\\Source\\Test-Jenkins\\QuizMaster\\Service\\ExecuteExcelService.cs", + "RelativeDocumentMoniker": "Service\\ExecuteExcelService.cs", + "ToolTip": "D:\\Source\\Test-Jenkins\\QuizMaster\\Service\\ExecuteExcelService.cs", + "RelativeToolTip": "Service\\ExecuteExcelService.cs", + "ViewState": "AgIAAAkAAAAAAAAAAAAAABIAAAAPAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-05-28T07:42:59.847Z" + }, + { + "$type": "Document", + "DocumentIndex": 2, + "Title": "Quiz.cs", + "DocumentMoniker": "D:\\Source\\Test-Jenkins\\QuizMaster\\Response\\Quiz.cs", + "RelativeDocumentMoniker": "Response\\Quiz.cs", + "ToolTip": "D:\\Source\\Test-Jenkins\\QuizMaster\\Response\\Quiz.cs", + "RelativeToolTip": "Response\\Quiz.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAuwA8AAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-05-28T07:41:01.32Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 0, + "Title": "Form1.cs", + "DocumentMoniker": "D:\\Source\\Test-Jenkins\\QuizMaster\\Form1.cs", + "RelativeDocumentMoniker": "Form1.cs", + "ToolTip": "D:\\Source\\Test-Jenkins\\QuizMaster\\Form1.cs", + "RelativeToolTip": "Form1.cs", + "ViewState": "AgIAACsBAAAAAAAAAAAswDkBAABGAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-05-26T01:54:54.164Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 6, + "Title": "DbHelper.cs", + "DocumentMoniker": "D:\\Source\\Test-Jenkins\\QuizMaster\\DbHelper.cs", + "RelativeDocumentMoniker": "DbHelper.cs", + "ToolTip": "D:\\Source\\Test-Jenkins\\QuizMaster\\DbHelper.cs", + "RelativeToolTip": "DbHelper.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAwAAAAdAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-05-26T01:35:21.294Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 1, + "Title": "Program.cs", + "DocumentMoniker": "D:\\Source\\Test-Jenkins\\QuizMaster\\Program.cs", + "RelativeDocumentMoniker": "Program.cs", + "ToolTip": "D:\\Source\\Test-Jenkins\\QuizMaster\\Program.cs", + "RelativeToolTip": "Program.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAsAAAAIAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-05-26T01:32:42.515Z", + "EditorCaption": "" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/QuizMaster/.vs/QuizMaster/v17/DocumentLayout.json b/QuizMaster/.vs/QuizMaster/v17/DocumentLayout.json new file mode 100644 index 0000000..b2a280c --- /dev/null +++ b/QuizMaster/.vs/QuizMaster/v17/DocumentLayout.json @@ -0,0 +1,217 @@ +{ + "Version": 1, + "WorkspaceRootPath": "D:\\Source\\QuizMaster\\QuizMaster\\", + "Documents": [ + { + "AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\quizmaster\\quizmaster\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\quizmaster\\quizmaster\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\quizmaster\\quizmaster\\response\\quiz.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:response\\quiz.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\quizmaster\\quizmaster\\response\\questionoption.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:response\\questionoption.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\quizmaster\\quizmaster\\response\\question.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:response\\question.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\quizmaster\\quizmaster\\service\\datautil.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:service\\datautil.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\quizmaster\\quizmaster\\dbhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:dbhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\quizmaster\\quizmaster\\response\\categoryinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:response\\categoryinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|D:\\Source\\QuizMaster\\QuizMaster\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form", + "RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form" + }, + { + "AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\quizmaster\\quizmaster\\form1.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:form1.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\quizmaster\\quizmaster\\service\\executeexcelservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:service\\executeexcelservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\quizmaster\\quizmaster\\service\\excelvalidator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:service\\excelvalidator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + } + ], + "DocumentGroupContainers": [ + { + "Orientation": 0, + "VerticalTabListWidth": 134, + "DocumentGroups": [ + { + "DockedWidth": 200, + "SelectedChildIndex": 10, + "Children": [ + { + "$type": "Bookmark", + "Name": "ST:128:0:{116d2292-e37d-41cd-a077-ebacac4c8cc4}" + }, + { + "$type": "Document", + "DocumentIndex": 3, + "Title": "QuestionOption.cs", + "DocumentMoniker": "D:\\Source\\QuizMaster\\QuizMaster\\Response\\QuestionOption.cs", + "RelativeDocumentMoniker": "Response\\QuestionOption.cs", + "ToolTip": "D:\\Source\\QuizMaster\\QuizMaster\\Response\\QuestionOption.cs", + "RelativeToolTip": "Response\\QuestionOption.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAcAAAAcAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-07-02T07:59:06.439Z" + }, + { + "$type": "Document", + "DocumentIndex": 7, + "Title": "CategoryInfo.cs", + "DocumentMoniker": "D:\\Source\\QuizMaster\\QuizMaster\\Response\\CategoryInfo.cs", + "RelativeDocumentMoniker": "Response\\CategoryInfo.cs", + "ToolTip": "D:\\Source\\QuizMaster\\QuizMaster\\Response\\CategoryInfo.cs", + "RelativeToolTip": "Response\\CategoryInfo.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-07-01T03:49:31.648Z" + }, + { + "$type": "Document", + "DocumentIndex": 9, + "Title": "Form1.Designer.cs", + "DocumentMoniker": "D:\\Source\\QuizMaster\\QuizMaster\\Form1.Designer.cs", + "RelativeDocumentMoniker": "Form1.Designer.cs", + "ToolTip": "D:\\Source\\QuizMaster\\QuizMaster\\Form1.Designer.cs", + "RelativeToolTip": "Form1.Designer.cs", + "ViewState": "AgIAAG4AAAAAAAAAAAAuwHkAAAAUAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-05-30T01:51:59.493Z" + }, + { + "$type": "Document", + "DocumentIndex": 4, + "Title": "Question.cs", + "DocumentMoniker": "D:\\Source\\QuizMaster\\QuizMaster\\Response\\Question.cs", + "RelativeDocumentMoniker": "Response\\Question.cs", + "ToolTip": "D:\\Source\\QuizMaster\\QuizMaster\\Response\\Question.cs", + "RelativeToolTip": "Response\\Question.cs", + "ViewState": "AgIAAAYAAAAAAAAAAAAuwBAAAAAsAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-05-29T02:22:22.487Z" + }, + { + "$type": "Document", + "DocumentIndex": 5, + "Title": "DataUtil.cs", + "DocumentMoniker": "D:\\Source\\QuizMaster\\QuizMaster\\Service\\DataUtil.cs", + "RelativeDocumentMoniker": "Service\\DataUtil.cs", + "ToolTip": "D:\\Source\\QuizMaster\\QuizMaster\\Service\\DataUtil.cs", + "RelativeToolTip": "Service\\DataUtil.cs", + "ViewState": "AgIAABwAAAAAAAAAAAAQwC4AAAAiAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-05-29T01:45:12.308Z" + }, + { + "$type": "Document", + "DocumentIndex": 11, + "Title": "ExcelValidator.cs", + "DocumentMoniker": "D:\\Source\\QuizMaster\\QuizMaster\\Service\\ExcelValidator.cs", + "RelativeDocumentMoniker": "Service\\ExcelValidator.cs", + "ToolTip": "D:\\Source\\QuizMaster\\QuizMaster\\Service\\ExcelValidator.cs", + "RelativeToolTip": "Service\\ExcelValidator.cs", + "ViewState": "AgIAACIAAAAAAAAAAAAQwDwAAABYAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-05-28T09:23:05.48Z" + }, + { + "$type": "Document", + "DocumentIndex": 8, + "Title": "Form1.cs [Design]", + "DocumentMoniker": "D:\\Source\\QuizMaster\\QuizMaster\\Form1.cs", + "RelativeDocumentMoniker": "Form1.cs", + "ToolTip": "D:\\Source\\QuizMaster\\QuizMaster\\Form1.cs [Design]", + "RelativeToolTip": "Form1.cs [Design]", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-05-28T09:15:57.769Z", + "EditorCaption": " [Design]" + }, + { + "$type": "Document", + "DocumentIndex": 10, + "Title": "ExecuteExcelService.cs", + "DocumentMoniker": "D:\\Source\\QuizMaster\\QuizMaster\\Service\\ExecuteExcelService.cs", + "RelativeDocumentMoniker": "Service\\ExecuteExcelService.cs", + "ToolTip": "D:\\Source\\QuizMaster\\QuizMaster\\Service\\ExecuteExcelService.cs", + "RelativeToolTip": "Service\\ExecuteExcelService.cs", + "ViewState": "AgIAAAkAAAAAAAAAAAAAABIAAAAPAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-05-28T07:42:59.847Z" + }, + { + "$type": "Document", + "DocumentIndex": 2, + "Title": "Quiz.cs", + "DocumentMoniker": "D:\\Source\\QuizMaster\\QuizMaster\\Response\\Quiz.cs", + "RelativeDocumentMoniker": "Response\\Quiz.cs", + "ToolTip": "D:\\Source\\QuizMaster\\QuizMaster\\Response\\Quiz.cs", + "RelativeToolTip": "Response\\Quiz.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAuwA8AAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-05-28T07:41:01.32Z" + }, + { + "$type": "Document", + "DocumentIndex": 0, + "Title": "Form1.cs", + "DocumentMoniker": "D:\\Source\\QuizMaster\\QuizMaster\\Form1.cs", + "RelativeDocumentMoniker": "Form1.cs", + "ToolTip": "D:\\Source\\QuizMaster\\QuizMaster\\Form1.cs", + "RelativeToolTip": "Form1.cs", + "ViewState": "AgIAACsBAAAAAAAAAAAswD0BAAA2AAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-05-26T01:54:54.164Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 6, + "Title": "DbHelper.cs", + "DocumentMoniker": "D:\\Source\\QuizMaster\\QuizMaster\\DbHelper.cs", + "RelativeDocumentMoniker": "DbHelper.cs", + "ToolTip": "D:\\Source\\QuizMaster\\QuizMaster\\DbHelper.cs", + "RelativeToolTip": "DbHelper.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAwAAAAdAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-05-26T01:35:21.294Z" + }, + { + "$type": "Document", + "DocumentIndex": 1, + "Title": "Program.cs", + "DocumentMoniker": "D:\\Source\\QuizMaster\\QuizMaster\\Program.cs", + "RelativeDocumentMoniker": "Program.cs", + "ToolTip": "D:\\Source\\QuizMaster\\QuizMaster\\Program.cs", + "RelativeToolTip": "Program.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAsAAAAIAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2025-05-26T01:32:42.515Z" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/QuizMaster/DbHelper.cs b/QuizMaster/DbHelper.cs new file mode 100644 index 0000000..b4edb80 --- /dev/null +++ b/QuizMaster/DbHelper.cs @@ -0,0 +1,77 @@ +using System.Data; +using System.Data.SqlClient; +using System.Reflection; +using System.Runtime.Serialization; +using Npgsql; +using QuizMaster.Response; +using System.Windows.Forms; + +namespace QuizMaster +{ + public static class DbHelper + { + public static string connectionString = "Host=192.168.10.140;Port=5432;Database=BSH_Quiz;Username=postgres;Password=0SIs7c6EYPsFNwq;Timeout=30;CommandTimeout=30;"; + + public static async Task TestConnection() + { + try + { + await using var conn = new NpgsqlConnection(connectionString); + await conn.OpenAsync(); + return true; + } + catch (Exception ex) + { + MessageBox.Show($"Lỗi kết nối database: {ex.Message}", "Database Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + } + + public static async Task> ExecuteSelectQuery(string query) where T : new() + { + DataTable table = new DataTable(); + + using (var conn = new NpgsqlConnection(connectionString)) + { + await conn.OpenAsync(); + using (var cmd = new NpgsqlCommand(query, conn)) + using (var reader = await cmd.ExecuteReaderAsync()) + { + table.Load(reader); + } + } + + List list = new List(); + + foreach (DataRow row in table.Rows) + { + T obj = new T(); + + foreach (PropertyInfo prop in typeof(T).GetProperties()) + { + if (!prop.CanWrite) + continue; + + string columnName = prop.Name; + + var dataMember = prop.GetCustomAttribute(); + if (dataMember != null && !string.IsNullOrEmpty(dataMember.Name)) + { + columnName = dataMember.Name; + } + + if (table.Columns.Contains(columnName) && row[columnName] != DBNull.Value) + { + Type targetType = Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType; + object safeValue = Convert.ChangeType(row[columnName], targetType); + prop.SetValue(obj, safeValue); + } + } + + list.Add(obj); + } + + return list; + } + } +} diff --git a/QuizMaster/Form1.Designer.cs b/QuizMaster/Form1.Designer.cs new file mode 100644 index 0000000..907ca17 --- /dev/null +++ b/QuizMaster/Form1.Designer.cs @@ -0,0 +1,148 @@ +namespace QuizMaster +{ + partial class Form1 + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + tabControl1 = new TabControl(); + tabPage1 = new TabPage(); + textBox1 = new TextBox(); + BtnOpen = new Button(); + label2 = new Label(); + button1 = new Button(); + label1 = new Label(); + tabPage2 = new TabPage(); + tabControl1.SuspendLayout(); + tabPage1.SuspendLayout(); + SuspendLayout(); + // + // tabControl1 + // + tabControl1.Controls.Add(tabPage1); + tabControl1.Controls.Add(tabPage2); + tabControl1.Location = new Point(12, 12); + tabControl1.Name = "tabControl1"; + tabControl1.SelectedIndex = 0; + tabControl1.Size = new Size(1499, 955); + tabControl1.TabIndex = 0; + // + // tabPage1 + // + tabPage1.Controls.Add(textBox1); + tabPage1.Controls.Add(BtnOpen); + tabPage1.Controls.Add(label2); + tabPage1.Controls.Add(button1); + tabPage1.Controls.Add(label1); + tabPage1.Location = new Point(4, 34); + tabPage1.Name = "tabPage1"; + tabPage1.Padding = new Padding(3); + tabPage1.Size = new Size(1491, 917); + tabPage1.TabIndex = 0; + tabPage1.Text = "Tải lên bộ câu hỏi"; + tabPage1.UseVisualStyleBackColor = true; + // + // textBox1 + // + textBox1.Location = new Point(195, 84); + textBox1.Name = "textBox1"; + textBox1.Size = new Size(273, 31); + textBox1.TabIndex = 7; + // + // BtnOpen + // + BtnOpen.Location = new Point(469, 83); + BtnOpen.Name = "BtnOpen"; + BtnOpen.Size = new Size(92, 34); + BtnOpen.TabIndex = 6; + BtnOpen.Text = "open"; + BtnOpen.UseVisualStyleBackColor = true; + BtnOpen.Click += btnOpen_Click; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(28, 92); + label2.Name = "label2"; + label2.Size = new Size(159, 25); + label2.TabIndex = 5; + label2.Text = "Upload bộ câu hỏi"; + // + // button1 + // + button1.Location = new Point(195, 20); + button1.Name = "button1"; + button1.Size = new Size(112, 34); + button1.TabIndex = 4; + button1.Text = "Download"; + button1.UseVisualStyleBackColor = true; + button1.Click += button1_Click; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(28, 25); + label1.Name = "label1"; + label1.Size = new Size(125, 25); + label1.TabIndex = 3; + label1.Text = "Tải về file mẫu"; + // + // tabPage2 + // + tabPage2.Location = new Point(4, 34); + tabPage2.Name = "tabPage2"; + tabPage2.Padding = new Padding(3); + tabPage2.Size = new Size(1491, 917); + tabPage2.TabIndex = 1; + tabPage2.Text = "Tạo bộ câu hỏi ngẫu nhiên"; + // + // Form1 + // + AutoScaleDimensions = new SizeF(10F, 25F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(1515, 971); + Controls.Add(tabControl1); + Name = "Form1"; + Text = "Form1"; + Load += Form1_Load; + tabControl1.ResumeLayout(false); + tabPage1.ResumeLayout(false); + tabPage1.PerformLayout(); + ResumeLayout(false); + } + + #endregion + + private TabControl tabControl1; + private TabPage tabPage1; + private TabPage tabPage2; + private Label label2; + private Button button1; + private Label label1; + private TextBox textBox1; + private Button BtnOpen; + } +} diff --git a/QuizMaster/Form1.cs b/QuizMaster/Form1.cs new file mode 100644 index 0000000..b4921f6 --- /dev/null +++ b/QuizMaster/Form1.cs @@ -0,0 +1,393 @@ +using System.Collections.Generic; +using System.Collections.Specialized; +using System.Data; +using System.Diagnostics; +using System.Drawing.Printing; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using OfficeOpenXml; +using QuizMaster.Response; +using QuizMaster.Service; +using static System.Net.Mime.MediaTypeNames; +using static System.Windows.Forms.AxHost; + +namespace QuizMaster +{ + public partial class Form1 : Form + { + public Form1() + { + InitializeComponent(); + } + + private static string defaultCombobox = "Chọn lĩnh vực"; + + private List categorys = new List(); + + private List lstDep = new List + { + "Ban CNTT", + "Ban XCG", + "Ban TCHC", + "Ban PTĐT" + }; + + private static string dfDep = "Chọn phòng ban"; + private bool isUpdating = false; + List