简单的用户密码管理系统 一、功能 提供软件的一般用户管理系统 二、设计思路及程序实现 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、超级用户可以设置/修改用户资料表中的所有资料及密码初始化。