我与Apache,PHP和MySQL合作,用于Web开发和本地应用程序。在过去的几年中,我一直在慢慢学习C ++,并希望在今年夏天构建一个应用程序。具体来说,我想制作一个“库”应用程序,可以在其中存储有关我拥有的书籍,CD和记录的信息。我知道存在这种类型的应用程序,但是我想学习C ++,这似乎是一个很好的方法。

这里有几个问题:

  1. 是否可以创建不需要数据库存储数据的独立应用程序?

  2. 如果上面的#1答案是“是”,那么对于可能需要管理大量数据的应用程序来说,这样做是个好主意吗?

  3. 您建议与C ++应用程序一起使用哪些数据存储选项?

谢谢!

更新好吧,有很多很好的答案。这是一个很棒的网站,有很多贡献者。事实证明,我现在可能不需要走C ++路线。我现在意识到我最感兴趣地编写可以充当“库”组织系统的应用程序 更多的 比我想追求C ++。感谢大家的回答!

有帮助吗?

解决方案

是否可以创建不需要数据库存储数据的独立应用程序?

是的,您可以对存储数据进行某种自定义文件格式。

如果上面的#1答案是“是”,那么对于可能需要管理大量数据的应用程序来说,这样做是个好主意吗?

这不是一个好主意,除非您真的想学习将数据存储在结构化文件中。

您建议与C ++应用程序一起使用哪些数据存储选项?

我会看 sqlite. 。它是一个数据库,但不需要单独的引擎。

其他提示

如果您不想使用数据库,则可能需要将数据保存到文件(或一个以上)。如果是这样,问题可能是:哪种文件格式是最好的?答案取决于各种因素:

1)快速访问,尺寸小且易于解析?答案是“二进制数据”。只需使用直接将数据按原样写入输出文件 fwrite. 。有两个弊端:这些文件不是人类可读性的,并且要维护不同的版本很麻烦。如果您阅读的数据不是您的期望,那么您会迅速遇到麻烦。

2)人类可读且易于维护?这就是XML的目的。准备使用TinyXML等解析器,这是编写数据提交数据的绝佳工具。缺点是编写加载/保存例程需要更多的时间(很多情况)。

3)为您完成工作的库。 MFC提供了Carchive类,但是还有其他更好的工具可以做到这一点。

  1. 是的
  2. 这取决于数据,“很多数据”是相对的,您可能会发现有关1000本书的信息可以存储在几个mbs中,然后将其存储在DB中是一个过度杀伤,除非它是轻量级的DB,例如sqlite
  3. 我建议坚持使用纯文本格式 CSV 或者 XML.

为了学习,除非您想学习SQL和关系DB的设计,否则不使用DB引擎会有所帮助。另一方面,使用DB引擎将使开发更快,更轻松,因为它将为不同的数据创建索引,以帮助您轻松有效地搜索。

所以取决于你。

嗯...

当然,您可以做到这一点。

您正在谈论的事情是及时回到RDBMS成功之前的时期。这并不难,但是您可能会学到一些经验教训:

  1. 在开始编码之前 - 或至少在编写数据访问代码之前,您的数据库设计是否好像要使用数据库一样 - 您需要什么数据?您可以减少所需的属性数(“字段”)?图书馆中媒体类型之间的共同点是什么?等等
  2. 考虑使用目录树和文件名作为临时存储结构的一点。如果您需要或要管理超出程序的当前功能,这将直接将数据直接放在命令行实用程序的手中。例如,书籍可能都在书籍子目录中,在此中,您可以将ISBN或标题用作文件名。我寻找可以自然使用LS,DIR或您使用的CLI使用的文件名称。
  3. 另一个不错的选择是将其放置在XML格式中。可能两者 - 使用目录层次结构进行整体数据布局,并以XML格式将库条目数据放入平面文件中。这可能在某个时候很方便。
  4. 仅以纯文本格式将数据作为字符串 - 无二进制数据!再次,这很重要,因为能够访问 /操纵程序之外的数据。
  5. 通过这样的策略,您可以使用GREP,SED,LEX等系统工具在需要的情况下使用数据进行完全计划外的事情。
  6. 拥有一个功能 - 或编写单独的读取器程序,该程序将行走您的“数据库”,并将其整个内容输出为纯文本,每条条目一行。您可能有选项可以告诉它要输出哪种媒体等。此外,还包括一个标志,可以让您设置输出属性之间使用的定界符 - 逗号分隔是一个常见的选择,但是您也可能只想要一个空间,转叉返回,新线路或其他任何内容。如果您使其成为可选的标志,让用户使用 任何事物 并提供您喜欢的默认值,应该没问题。
  7. 模块化代码,以便以后可以替换存储策略,如果您选择的话,就不必重新组成整个程序。您甚至可以提供多种存储策略。

这应该做到这一点。

请注意,使用现代计算机硬件将管理的数据量不太可能成为性能或空间问题,因此不必担心节省一些字节 - 这不值得麻烦。

祝你好运,享受旅程。

  1. 是的。
  2. 可以,但是除非您的需求比看起来更专业,否则通用数据库管理器可能是更好的方法。
  3. 对于这样的事情,我想使用可用的(许多)可嵌入数据库管理器之一。

鉴于您(显然)主要是为了自我教育而不是真实使用, 可能 在没有数据库管理器的情况下编写代码以处理存储很有意义。自行编写所有代码(一点点护理)通常会导致速度略高,但要付出很多额外的工作,通常会损失灵活性。从学习角度来看,最大的问题是,您所学到的很多事情只会在相当狭窄的情况下适用(即,对于大多数典型的应用程序,您 将要 想要使用数据库管理器,因此学会无需获得很大的收益而学习)。

一点还取决于您的预期使用/受众。如果您想一次支持多个用户,事情会得到 很多 几乎立即困难(至少有效地这样做)。如果您只对一个用户一次访问数据库感兴趣,那使事情变得更简单。

我也会推荐 sqlite.

从他们的网页:

“ SQLITE是一个软件库,它实现了独立,无服务器,零配置,交易SQL数据库引擎。SQLITE是世界上部署最广泛的SQL数据库引擎。SQLITE的源代码在公共领域中。”

“将sqlite视为替代甲骨文,而是替代fopen()”

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top