Chinaunix首页 | 论坛 | 博客
  • 博客访问: 18689356
  • 博文数量: 7460
  • 博客积分: 10434
  • 博客等级: 上将
  • 技术积分: 78178
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 22:54
文章分类

全部博文(7460)

文章存档

2011年(1)

2009年(669)

2008年(6790)

分类: C/C++

2008-05-31 10:30:06

一、功能
  提供软件的一般用户管理系统
二、设计思路及程序实现
    1.建立的表:以下表在建立时应该先加密码,程序打开时才由程序传递密码。以避免直接用工具可打开DB文件。
  
      ① 用户资料表
         用户ID:   用户登录时输入的用户名。
         用户姓名:  用户的真实姓名。
         密码:      用户密码(在存入前应该进行必要的加密)
         权限:      用户级别。
         有效期开始:该帐号从何时开始有效(下面程序没利用该功能)
         有效期截止:何时该帐号不能用。
         是否有效:  可以让该用户暂时为不可用。
         出错次数:  用户连续输错密码次数(当有正确输入时复位)
         出错限度:  允许输错密码次数,如果超过该限度,该用户置为不可用,必须找管理员为其复位。
         备注:      必要的说明。

       ② 活动表:
          用户ID:   记录进入系统的用户ID.
          活动状态:  该用户是否是当前活动用户。(程序允许A用户进入后,不必 退出系统而让B用户进入,A用户被置为非活动用户,当B退出后A被变为活动用户,只有第一个用户才能退出系统,同时清空活动表)

2. 进入系统的验证

    ① 供用户进入系统的密码输入窗口。

    ② 当用户输入完成后,首先打开用户资料表,检查该用户是否存在,若不存在,清空用户输入,提示不存在该用户,让用户从新输入,用户名输入错误这里将不作次数限制。

    ③ 若存在该用户,接着验证密码,如果正确,根据用户的使用期限,是否有效作判断,并根据结果作出是否允许用户进入系统。如果不允许,给出相应的提示后关闭系统。否则,根据用户的级别置某些功能不能使用,同时在活动表中记录该用户已进入,并复位出错次数字段。
  
    ④ 如果存在该用户,但密码错误,用户资料表中的出错次数加一。让用户从新输入。

    ⑤ 实现部分功能的程序
    void __fastcall Tpasswdfm::Edit2KeyDown(TObject *Sender, WORD &Key,
       TShiftState Shift)
    {
    String userID;
    bool endflag=0;
    short cout=0;
    if(Key==VK_RETURN)
     {
       userID=Edit1->Text;
       Session->AddPassword(123456);
       DM1->PasDTable->Active=true;
       DM1->PasDTable->FindFirst();

       while((!DM1->PasDTable->Eof) && (!endflag))//找到用户
        {
          if(DM1->PasDTable->FieldByName(\"用户代码\")->Value==userID)
           { endflag=1;
           }
            else {DM1->PasDTable->Next();}
        }

       if(endflag)//找到了用户
        {
         if(DM1->PasDTable->FieldByName(\"密码\")->Value==
               passwdfm->Edit2->Text)
            {
              DM1->PasDTable->Edit();
              cout=0;
              DM1->PasDTable->FieldByName(\"出错次数\")->Value=cout;
              DM1->PasDTable->Post();
              if(DM1->PasDTable->FieldByName(\"权限\")->Value>1)
                 //根据权限设置不可用菜单

 {
                  Main->N5->Enabled=false;
                }
               else {
                       Main->N5->Enabled=true;
                    }
              Session->RemovePassword(123456);
              DM1->PasDTable->Close();
              passwdfm->Close();

              Session->AddPassword(123456);// 用户使用表登记
              DMPaswd->ActiveTable->Active=true;
              DMPaswd->ActiveTable->FindFirst();
              DMPaswd->ActiveTable->Insert();
              DMPaswd->ActiveTable->FieldByName
                      (\"用户代码\")->Value=userID;
              DMPaswd->ActiveTable->FieldByName(\"活动状态\")->Value=true;
              DMPaswd->ActiveTable->Post();
              Session->RemovePassword(123456);
              DMPaswd->ActiveTable->Close();
            }
           else{MessageBox(NULL,\"密码出错,累积三次将关闭系统\",\"密码输入信息\",MB_OK);
                cout=DM1->PasDTable->FieldByName(\"出错次数\")->Value;
                cout++;
                DM1->PasDTable->Edit();
                DM1->PasDTable->FieldByName(\"出错次数\")->Value=cout;
                DM1->PasDTable->Post();

                if(DM1->PasDTable->FieldByName(\"出错次数\")->Value
                   < DM1->PasDTable->FieldByName(\"出错限制\")->Value)
                  {passwdfm->Edit1->Text=\"\";
                   passwdfm->Edit2->Text=\"\";
                   passwdfm->ActiveControl=Edit1;
                   }
                 else
                 { MessageBox(NULL,\"登录失败次数超过限额,请与管理员联系\",                    \"密码输入信息\",MB_OK);
                   Application->Terminate();
                  }
               }
        }

   else//无该用户
           {MessageBox(NULL,\"无该用户\",\"密码输入信息\",MB_OK);
            passwdfm->Edit1->Text=\"\";
            passwdfm->Edit2->Text=\"\";
            passwdfm->ActiveControl=Edit1;
           }
    }
}

3、密码修改
    一般用户只能修改自己的密码,当用户选择该功能时,提示用户输入一次旧密码,两次新密码。用户可以按清除键重新输入。当用户输入完成后,先从活动表找出
该用户ID,再按ID寻找用户资料表找到该用户,先比较旧密码,错误提示从新修改,正
确则完成修改。

4、超级用户可以设置/修改用户资料表中的所有资料及密码初始化。 

阅读(343) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~