-
c语言入门之简单的用户密码管理系统
一、功能
提供软件的一般用户管理系统
二、设计思路及程序实现
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、超级用户可以设置/修改用户资料表中的所有资料及密码初始化。
提供软件的一般用户管理系统
二、设计思路及程序实现
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、超级用户可以设置/修改用户资料表中的所有资料及密码初始化。
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
JavaScript判断两个数组相等的四类方法
js如何操作video标签
React实战--利用甘特图和看板,强化Paas平
【记录】正则替换的偏方
前端下载 Blob 类型整理
抽象语法树AST必知必会
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程