xml,my.settings?哪条路?

时间:2015-02-08 18:26:42

标签: xml vb.net dynamic user-controls savestate

在网上搜索了将近3天后,我决定在这里发帖,因为我似乎无法自己找到它。我在Visual Basic中的技能非常有限,但我正在学习。

我的目标是编写一个程序,能够分析孩子们在高中时所做的测试。我在VBA中完成了第一个版本,但是我想创建一些不依赖于Excel的东西,因此我正在开发.NET版本。

我看到它的方式我需要先完成一个测试。年份,级别,问题数量,每个问题的最高分数以及指定哪些问题属于哪些章节/技能的方式。 (例如,对于我的物理课,章节可以是电/力/压力,技能可以是复制/洞察/使用公式等。用户应该可以自由地指定这些并随后选择哪个问题属于电,力等。)

之后,必须有可能在每个问题上添加一个课程来评分每个学生。必须可以在一个测试中添加更多类,因为碰巧有几个类进行相同的测试。我可以通过xml导入类,因为它们可以从我们的学校数据库生成。

所有这些的宣读仍然是在遥远的未来......

到目前为止,我有一个表单,其中包含一些组合框,一些radiobuttens,一个文本框,以及在运行时生成的文本框/复选框。

我需要能够保存用户输入的设置,因为它们将定义测试的所有参数。这个节省的部分非常令人不安。我怀疑要走哪条路。

我看到有些人使用my.settings方式并以这种方式保存设置。这似乎是一个不错的选择,虽然我将不得不研究如何使用动态生成的文本框和复选框来实现它。

另一方面,我一直在尝试将所有内容保存到一个.xml文件中。我不知道.xml文件格式是否适用于这类事情,它必须包含分数表,控制值等。如果有可能在一个xml文件中包含我想要的所有内容(测试参数和测试结果无论用户希望添加多少类,那么这将是惊人的。另一方面,my.settings似乎是一种更简单的保存设置的方法,但是我必须找到一个单独的.xml文件,其中包含用户必须加载到程序中的所有得分数据。我希望所有这一切都有意义......

有人可以给我任何建议吗?并没有真正询问如何对所有这些进行编码,只是在努力实现应用程序的保存和加载功能的结构。如果我能得到它(保存并加载用户输入)它会启动我,但我害怕开始错误的方式。

谢谢: - )

编辑:

对我想要达到的目标更加清楚:

孩子们在纸上进行测试。

*教师将测试名称输入程序。

*教师向课程提出问题数量。

*教师在课程中加入测试所包含的章节,以及哪些技能(例如" Forces"或" WWII"。技能可以是"语法"或者"使用公式")。这些技能和章节在文本框中输入并输出到标签。

*教师按每个问题的最高分数。

*程序在每个标签后生成一个带有复选框的行。复选框的数量对应于问题的数量。

对于9个问题的测试,输出可能是这样的

部队□□□□□□□□□

压力□□□□□□□□□

等。 (文本框甚至可能在表格中生成......可能更容易检索: - )

*教师选择属于其前面标签类别的问题的复选框。

完成此操作后,测试配置完成。这意味着必须保存控制值。这里的挑战是加载值,因为几乎所有的复选框都是在运行时创建的。

教师的下一步是将课程加载到课程中。这些类以xml格式提供,我可以将它们导入到datagridview中,以输入每个问题的每个学生的分数。

应该能够保存类结果,并且确实将它们全部添加到测试配置文件中似乎更方便,但是将它们作为文件夹中的单独文件。该程序可以在用户不知道的情况下生成该文件夹。我已经添加了可供选择的类的列表框会很好。

然后读出所有这些应该是一个图表。首先,教师从下拉菜单中选择课程,之后是学生。最终结果应该是一个图表,以百分比的形式显示孩子在第一步中教师指定的每个类别上的表现。

我在VBA中有这整个工作,它看起来很漂亮。我发现它的编程非常有趣,我决定尝试使用.NET版本: - )

1 个答案:

答案 0 :(得分:1)

由于这是一个非常开放的问题,我不确定你是否可以使用我的答案。但是我愿意试一试。

首先,My.Settings是一个VB选项,它不适用于C#。因此,如果您想将解决方案移植到C#,这将使事情变得困难。其次,My.Settings只是轻松超载App.Config文件。您可能已经了解My.Settings旨在用于配置您的应用程序。虽然动态文本框位于灰色区域,但您所要求的并不是真正的配置。

尽管如此,我的直觉告诉了我.Settings不是要走的路。

文件格式(xml,json,text,binary,database等)实际上并不那么有趣。我认为设计更为重要。

如果我理解正确,您可以动态设置测试学生。虽然各种问题的测试框架是一样的吗?!即具有多个问题的测试,其答案是预定义的。 但并非所有(类型)测试都会在一次性测试中加载,更不用说,所有学生都会在一次测试中加载?!所以将所有这些信息存储在一个文件中对我来说听起来很奇怪。 请记住,如果应用程序增长并且您只有一个文件会发生什么:这将是真正的问题(还有更多!!):    - 你丢失了单个文件!    - 单个文件会损坏    - 当加载需要几分钟时,单个文件将增长到一个大小    - 多个用户同时保存(或加载)信息。你会如何防止这种情况,甚至更具挑战性的控制呢?

我会围绕一堆SOLID类(poco对象)设计应用程序:

  • 定义测试的类(从中可以生成输入表单)
  • 定义单个问题的类(参考测试)
  • 定义类
  • 的类
  • 定义学生的类(引用类类: - )
  • 定义每个问题的结果的类(通过引用学生和问题)

使用此设置,您可以简单地将类序列化为您选择的文件格式,并以严格的方式存储它们。您可能需要考虑命名约定和/或目录结构。您让用户不能通过Windows资源管理器或其他东西自己打开这些文件,但让应用程序的use case决定需要加载哪个文件。

我更喜欢使用json,因为它使用起来非常简单,特别是使用NewtonSoft json serializer,您可以从NuGet中获取解决方案。

输入所有这些后,我认为当您的目标与您描述的一样大时,您应该直接从使用数据库开始。使用Entity Framework Code FirstSQL local db这很容易做到。它将为您提供查询的所有好处,并且在应用程序变大的情况下很容易移植到SQL服务器。