2015-02-08 54 views
0

在网上搜索了近3天后,我决定在这里发帖,因为我似乎无法亲自找到它。我在Visual Basic中的技能非常有限,但我正在学习。xml,my.settings?走哪条路?

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

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

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

读出这一切仍然是在遥远的未来......

到目前为止,我有其中有一些组合框,一些radiobuttens,一个文本框,并在运行时产生的文本框/复选框的形式。

我需要能够保存用户放置的设置,因为它们将定义测试的所有参数。这是令我困扰的这个节省部分。我怀疑要走哪条路。

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

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

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

感谢:-)

编辑:

多一点光在我想要实现:

孩子们在纸上测试。

*教师将程序的名称放入程序中。

*老师把问题的数量放到程序中。*教师将测试包含在哪些章节中,以及哪些技能(例如“力量”或“二战”,技能可能是“语法”或“使用公式”)。这些技能和章节被输入到文本框并输出到标签。

*老师把每个问题的最高分。

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

输出可能是这样的一个测试用9个问题

部队□□□□□□□□□

压力□□□□□□□□□

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

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

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

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

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

然后读出所有这些应该是一个图。首先,老师选择课程,然后从下拉菜单中选择学生。最终的结果应该是一张图表,用百分比表示孩子在第一步中对老师指定的每个类别所做的事情。

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

回答

1

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

首先My.Settings是一个VB选项,它不适用于C#。因此,如果您想将您的解决方案移植到C#,这会让事情变得困难。其次My.Settings只是一个简单的过载与App.Config文件。正如你可能已经理解的,My.Settings是用来配置你的应用程序的。你所要求的并不是真正的配置,尽管动态文本框处于灰色区域。

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

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

如果我理解正确,你有一个测试学生的动态设置。虽然测试框架对于各种问题都是一样的?!也就是说,针对多个问题进行的测试的答案是预定义的。 但并不是所有的(类型)的测试将在一个单一的去装,别说了,所有的学生都将被单一测试期间加载?因此,将所有这些信息存储在单个文件中对我来说听起来很奇怪。 采取头脑会发生什么,如果应用程序将成长,你将有一个单一的文件:这将是真正的问题(而且有很多!): - 你失去了一个文件! - 一个单独的文件会得到腐败 - 单个文件将增长到大小时,它会需要几分钟来加载 - 多用户保存(或装载)在同一时间的信息。你会如何防止这一点,甚至更具挑战性的控制呢?

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

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

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

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

打字毕竟,我认为当你描述你应该直接通过使用数据库开始你的目标是一样大。与Entity Framework Code FirstSQL local db这很容易做到。它将为您提供查询的所有好处,并且在应用程序变得庞大时很容易移植到SQL服务器。

+0

嗨里克,这个答案是超过我能有希望的。我会坚决检查你的建议并阅读链接。感谢那!我编辑了我的OP,因为我认为如果你有兴趣阅读它,这个想法还不完全清楚。再次感谢:-) – 2015-02-09 17:40:42

+0

我阅读你的编辑。听起来像一个很好的设计。尽管如此,它并没有改变我的答案。我认为你真的应该使用数据库,因为文件只是文件。特别是您的图形需求需要查询,使用数据库要容易得多。 – 2015-02-10 13:37:10

+0

如果你喜欢我的回答,你可以随时接受它和/或upvote :-) – 2015-02-10 13:37:53