我发现自己蛮强的(小臭美下),什么东西不管我以前是否接触过,只要给我点时间,我都有信心去把它做好..
本来我是做测试的,但无奈测试部就我一个,势单力薄,很多和测试相关的东西实施起来都不顺利,还时不时要接受开发老大下发给我的编程任务(不过我的心态也还好,就当学习,充实自己).上次让我帮他把一个VC的串口升级工具美化一下,加上动态背景...这次是把一个序列号打印程序加些功能,像用户登录,用户的权限管理,新建用户,删除用户,修改密码这些功能...其实我对VC一点都不熟,每次是用到哪就去学,能用C写就尽量用C去写,反正在VC里也执行..
void Dialog_login::OnOK()
{
// TODO: Add extra validation here
#if 1
char iniFilePath[256];
GetModuleFileName(NULL,iniFilePath,sizeof(iniFilePath));
for(int i=strlen(iniFilePath)-1;i>=0;i--)
{
if(iniFilePath[i]=='\\')
{
strcpy(iniFilePath+i+1,"Syscfg.ini");
//dialog_login.m_user_name
//将用户名和密码定义为结构体
/*char User_Name[20];
char User_Password[20];*/
struct user
{
char user_name[20];
char user_password[20];
}userinfo[3]={{"user","user"},{"usr","password"},{"Admin","1234"}};
FILE *fp;
int i;
if((fp=fopen("usrinfo.cfg","wb"))==NULL)
{
MessageBox("cannot open user information file","Error",MB_OKCANCEL | MB_ICONWARNING);
return;
}
for(i=0;i<3;i++)
{
if(fwrite(&userinfo[i],sizeof(struct user),1,fp)!=1)
MessageBox("file write error","Error",MB_OKCANCEL | MB_ICONWARNING);
} // 调试用
fclose(fp);
GetDlgItem(IDC_EDIT_USER_NAME)->GetWindowText(m_user_name);
GetDlgItem(IDC_EDIT_PASSWORD)->GetWindowText(m_user_password);
//用户信息从文件中读出来再和m_user_name,m_user_password比较
if((fp=fopen("usrinfo.cfg","rb"))==NULL)
{
MessageBox("cannot open user information file","Error",MB_OKCANCEL | MB_ICONWARNING);
return;
}
for(i=0;i<3;i++)
{
fread(&userinfo[i],sizeof(struct user),1,fp);
if(!memcmp(m_user_name,userinfo[i].user_name,strlen(m_user_name))&&
!memcmp(m_user_password,userinfo[i].user_password,strlen(m_user_password)))
{
break;
}
if(feof(fp))
{
/*CString s ;
s.Format("%d",i );
AfxMessageBox(s); */
fclose(fp);
MessageBox("Password or User name Error!","Error",MB_OKCANCEL | MB_ICONWARNING);
return;
}
}
fclose(fp);
/*GetPrivateProfileString("User", "User_Name", "Admin",User_Name,sizeof(User_Name), iniFilePath);
GetPrivateProfileString("User", "User_Password", "1234",User_Password,sizeof(User_Password), iniFilePath);*/
//CString m_user_name;
//CString dialog_login
//dialog_login.IDD_DIALOG_LOGIN
//CEdit* pEditFileName = (CEdit*)GetDlgItem( IDC_EDIT_PASSWORD );
//pEditFileName->SetWindowText( "1234");
//SetDlgItemText(IDC_EDIT_USER_NAME,dialog_login.m_user_name);
/* GetDlgItem(IDC_EDIT_PASSWORD)->GetWindowText(m_user_password);
if(strcmp(m_user_password,User_Password))
{
MessageBox("Password or User name Error!","Error",MB_OKCANCEL | MB_ICONWARNING);
return;
}
else
{
break;主要是想实现一个从文件中读用户名和密码,然后并进行比较,用户输入的是否正确...
}*/
}
}
#endif
CDialog::OnOK();
}
框架是那个开发老大已经搭好的,我主要写一些实现..今天就写了一个,主要是想实现一个从文件中读用户名和密码,然后进行比较,用户的信息是否正确...紫色部分的代码是我写的,其实做为测试人员,我自己看了自己写的代码都觉得太不健壮了...不过对自己来说还是学到点东西...
1.fclose(fp);这句话,我的整个程序就因为这句话而一直导致辞功能不能实现..先对文件中草药写数据后如果不关闭文件指针,文件指针会一直指向EOF,所以进入下边的循环时就一直在第一层出不去,其实当时我通过AfxMessageBox(s);这个调试信息知道程序是在文件操作上出了问题,刚开始还一直怀疑程序的逻辑
2.如何在VC在查看变量的值,以前我调试时只会看VC中加打印语句,今天也是上网搜了才有结果...以后可以常用..CString s ;
s.Format("%d",i );
AfxMessageBox(s);
3.对数据的存储,有想过用二维数组,有想过用链表,还有我认为最方便的结构体...不过这个数据量小,如果数据量大,只能用数据库了,数据的关联存储和查找(不大熟)...
还有一点担心,接下来还有几天苦战,不知道这种数据结构能不能行,其实结构体和链表我用纯C做过类似的程序...但是要在VC的可视化界面下显示,还是有点没底...因为太想做好了....