5

我必须用java为学校创建一个投票系统,该系统将用于为电影投票。它将由某人预先设置所有用户和电影。

它是一个控制台应用程序,它将在多台计算机上运行。我对此的一些问题是:

  1. 我的老师希望我们使用文本文件来维护所有数据,这会不会有问题?切换到 MySQL 之类的数据库会更好吗?为什么?

  2. 当用户输入他们的登录信息时,程序是否应该 (a) 只是在文本文件中查找该人的凭据,然后为该人重新创建对象,或者 (b) 它是否应该重新创建所有用户然后只是检查用户的数组列表并检查密码?

或者对于#2 会有更好的方法吗?

4

4 回答 4

2

由于这是一个学校作业/项目,您应该遵循老师的指导和规范(以获得更好的分数)。如果这是您自己的项目,那么我的建议是完全避免将文本文件作为数据库。

在现实世界的场景中,

  • 如果您想将密码存储在数据库中,我建议使用良好的哈希算法(例如 SHA-512(SHA-2系列的一部分))对密码进行哈希处理。此外,如果您决定不将其设为 Web 应用程序,您将使用 HTTPS 等安全协议向/从您的应用程序/服务器发送机密信息。
于 2010-10-25T15:47:42.237 回答
1

对于#2。如果您一次只需要了解一个用户,那么将所有用户加载到内存中将没有任何好处。我的方法是解析用户名,在文件中找到它,然后检查解析的密码是否与为该用户记录的密码匹配。如果是,则创建对象。您应该在每个阶段检查并发现错误(例如,提供的用户名不合适、用户不存在等)

存储和传输明文密码总是一个坏主意。这可能不是此分配的要求,但请考虑 在保存密码之前对其进行哈希处理。然后,与其查找提供的实际密码文本,不如对其进行散列并将其与保存的散列进行比较。

于 2010-10-25T21:56:41.130 回答
0

我建议使用XStream,这是一种将数据持久保存到磁盘的快速且简单的方法。XStream 只是将您的 POJO 转换为 XML,并允许编组/解组。XStream 的优点是您的数据仍然可以被人类读取,这在您学习编程和进行调试时非常有用。

在这变成性能瓶颈之前,您需要拥有大量数据,并且由于这是家庭作业,我怀疑您是否会有那么多数据。我不知道你知道多少编程,但是添加一个适当的关系数据库会给你的系统增加很多复杂性。我的建议是你在这里一步一步地做。有大量时间用于数据库:)

于 2010-10-25T16:04:21.877 回答
0
  1. 数据库通常具有用于在多用户场景中保持数据完整性的内置功能。在您的应用程序中考虑如果两个用户同时从两台不同的计算机投票,文本文件会发生什么。除非您有一个处理文本文件更新的“服务器”进程,否则您将需要以某种方式在两个用户之间进行协调,以确保文本文件永远不会被破坏并且两个投票都被计算在内。它可以完成(也许通过使用“锁定”文件),考虑到引入数据库所需的额外复杂性,它甚至可能是值得的。

  2. 您的要求不是很清楚,但是如果您可以“扫描/搜索”您感兴趣的用户(名称)的文本文件,那么乍一看,这似乎比构建每个用户对象更有效检查匹配的密码。

于 2010-10-25T16:07:50.130 回答