• C该程序生成一个唯一的序列号


            在实际的软件开发项目,通常,它包括产生一唯一的序列号。在本文中,一个切实可行的方案,例如,它引入了一个唯一的序列号生成过程。

            本文生成的序列号的样式为:MMDDHHMINSS_XXXXXX。

     

            程序例如以下:

    /**********************************************************************
    * 版权全部 (C)2014, Zhou Zhaoxiong。
    *
    * 文件名: SerialNo.c
    * 文件标识: 无
    * 内容摘要: 用于演示序列号的创建方法
    * 其他说明: 无
    * 当前版本号: V1.0
    * 作        者: 周兆熊
    * 完毕日期: 20140603
    *
    * 改动记录1:// 改动历史记录, 包含改动日期、版本号号、改动人及改动内容
    * 改动日期: 20140603
    * 版 本 号: V1.0
    * 修 改 人: Zhou Zhaoxiong
    * 改动内容: 创建
    **********************************************************************/

    #include <afxinet.h>

    // 数据类型
    typedef unsigned char       UINT8;
    typedef unsigned char       UINT16;
    typedef unsigned int           UINT32;
    typedef signed   int             INT32;


    // 时间信息结构体
    typedef struct
    {
     UINT8   second;        /* 0-59 */
     UINT8   minute;         /* 0-59 */
     UINT8   hour;             /* 0-23 */
     UINT8   day;              /* 1-31 */
     UINT8   month;           /* 1-12 */
     UINT16  year;             /* 1994-2099 */
     UINT8   week;             /* 1-7 */
     UINT8   Count10ms;  /* 0-99 */
    } ClockStruc;


    // 函数声明
    void  GetCurTime(ClockStruc *pCurrentTime);                           // 获取当前时间
    INT32 CreateSerial(UINT8 *pSerialID, UINT32 iSerialSize);     // 创建序列号
    INT32 main(void);                                                                             // 主函数


    /**********************************************************************
    * 功能描写叙述: 获取当前时间                                            
    * 输入參数: 无                                                      
    * 输出參数: pCurrentTime-当前时间结构体                             
    * 返 回 值: 无                                                      
    * 其他说明: 无                                                      
    * 改动日期      版本号号      改动人          改动内容                 
    * ----------------------------------------------------------------------------
    * 20140603       V1.0    Zhou Zhaoxiong       创建                   
    **********************************************************************/
    void GetCurTime(ClockStruc *pCurrentTime)
    {
        SYSTEMTIME tCurrentTime;

        GetLocalTime(&tCurrentTime);

        pCurrentTime->month     = (UINT8)tCurrentTime.wMonth;
        pCurrentTime->day       = (UINT8)tCurrentTime.wDay;
        pCurrentTime->hour      = (UINT8)tCurrentTime.wHour;
        pCurrentTime->minute    = (UINT8)tCurrentTime.wMinute;
        pCurrentTime->second    = (UINT8)tCurrentTime.wSecond;
        pCurrentTime->week      = (UINT8)tCurrentTime.wDayOfWeek;
        if (pCurrentTime->week == 0)         // 表示星期天
        {
            pCurrentTime->week = 7;
        }
    }


    /**********************************************************************
    * 功能描写叙述: 创建序列号
    * 输入參数: iSerialSize: 序列号长度
    * 输出參数: pSerialID: 序列号
    * 返 回 值: 0-成功  -1-失败
    * 其他说明: 序列号的样式: MMDDHHMINSS_XXXXXX
    * 改动日期          版本号号           改动人         改动内容
    * --------------------------------------------------------------
    * 20140603           V1.0         Zhou Zhaoxiong      创建
    ***********************************************************************/
    INT32 CreateSerial(UINT8 *pSerialID, UINT32 iSerialSize)
    {
        ClockStruc    tClock   = {0};
        static UINT32 iTailNum = 0;
       
        if (NULL == pSerialID)
        {
            printf("CreateSerial: input parameter is NULL. ");
            return -1;
        }

        GetCurTime(&tClock);


        _snprintf((char *)pSerialID, iSerialSize, "%02d%02d%02d%02d%02d_%06d",
                 tClock.month, tClock.day, tClock.hour, tClock.minute, tClock.second, iTailNum);


        iTailNum ++;
        if (iTailNum > 999999)
        {
            iTailNum = 0;
        }

        return 0;
    }


    /****************************************************************
    * 功能描写叙述:  主函数                                            
    * 输入參数:  无                                                
    * 输出參数:  无                                                
    * 返 回 值: 0-运行成功  -1-运行失败                           
    * 其他说明:  无                                                
    * 改动日期        版本号号        改动人        改动内容
    * ------------------------------------------------------------------------
    * 20140603         V1.0     Zhou Zhaoxiong     创建
    ****************************************************************/
    INT32 main(void)
    {
        UINT32 iLoopFlag      = 0;      // 该变量用于表示循环标志
        INT32  iRetValue      = 0;        // 该变量用于表示调用CreateSerial函数返回的值
        UINT8  szSerialID[50] = {0};    // 该变量用于存放生成的序列号
       
        // 生成10个序列号, 并打印出来
        for (iLoopFlag = 0; iLoopFlag < 10; iLoopFlag ++)
        {
            iRetValue = CreateSerial(szSerialID, sizeof(szSerialID));
            if (iRetValue != 0)
            {
                printf("exec CreateSerial failed. ");
                return -1;
            }
           
            printf("第%d个序列号为: %s ", iLoopFlag + 1, szSerialID);
        }

        return 0;
    }

            程序运行的结果例如以下图所看到的:

     

    (本人微博:http://weibo.com/zhouzxi?topnav=1&wvr=5,我们聊天号码:245924426。欢迎关注!

    )

    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    Oracle--SQL Developer创建连接及使用
    MongoDB--使用修改器修改文档
    MongoDB 的创建、查询、更新、删除
    window下 Mongodb无法访问28107的有关问题(转)
    十一、存储过程
    十、视图
    九、增、改、查数据
    七、联结表
    八、组合查询和全文本搜索
    六、聚合函数、数据分组
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4678673.html
Copyright © 2020-2023  润新知