【问题标题】:Unique Emplyee ID Generation C++ [closed]唯一员工 ID 生成 C++ [关闭]
【发布时间】:2012-10-30 16:55:28
【问题描述】:

我正在用 C++ 编写员工数据库程序。我想为每个员工生成一个唯一的员工编号,但我没有成功,有人可以帮助我,哦,请发布与 Turbo C++ Borland 相关的代码,而不是 Visual C++。希望尽快收到你们的来信。如果不是代码,请告诉我一个算法来完成这项工作。

【问题讨论】:

  • 顺序已知是唯一的...
  • Luchian Grigore 算法的实现。 last_id++; 如果 last_id 是最后一个使用的,这段代码将创建一个新的唯一 id 并将其存储在 last_id 中。
  • 如果您使用普通的 RDBMS 后端来存储员工数据,您或许应该使用该数据库自己的唯一标识符生成机制,因为这些可以由数据库以及任何锁定和同步问题强制执行应该为你处理。如果您没有使用标准数据库后端,您可能应该使用。
  • 请告诉我们您已经尝试过什么。

标签: c++ unique-id


【解决方案1】:

从 1 开始,每次增加。这是一个单线程版本:

unsigned long long int unique_id()
{
    static unsigned long long int n = 0;
    return ++n;
}

对于线程安全版本,请改用std::atomic<unsigned long long int>,或添加互斥体。

【讨论】:

  • Turbo C++ 中的 std::atomic 和互斥锁?
  • C++Builder,Turbo C++ 的现代(和维护)替代品,显然至少支持部分 C++11 规范。然而,Turbo C++ 本身并没有太大希望。
【解决方案2】:

一个非常简单的唯一 ID 生成器

class UniqueIDGenerator{
   private:
      static unsigned long uniqueId = 1000ul;   //Starting the IDs with 1000

   public: 
      static unsigned long generateUniqueId(){
         return uniqueId++;
      }
};

这样使用

int empId = UniqueIDGenerator::generateUniqueId();

【讨论】:

  • @KerrekSB 抱歉,如果我犯了任何语法错误。好久没接触C++了。能否请您指出错误,以便我更正?
  • 嗯,C++ 中没有“public class”这样的东西。只是class。但是拥有一个没有非静态成员的类也有点过头了。为什么不只是一个函数?
  • 或者至少,使它成为一个实际的类,ID 种子作为构造属性或其他东西!
  • 感谢指正。我同意这里没有非静态成员时不需要类的观点:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-22
  • 1970-01-01
  • 1970-01-01
  • 2017-02-11
  • 2012-02-22
  • 1970-01-01
相关资源
最近更新 更多