小弟正在做毕业设计遇一问题,那位想帮助以下!(100分)

  • 主题发起人 主题发起人 fan27
  • 开始时间 开始时间
F

fan27

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.BitBtn1Click(Sender: TObject);
var pwdfile:textfile;
pwdstr:string;
begin
if checkbox1.Checked =true then assignfile(pwdfile,'f:/data/管理员.cfg')
else assignfile(pwdfile,'f:/data/学生.cfg');
reset(pwdfile);
readln(pwdfile,pwdstr);
closefile(pwdfile);
times:=times+1;
if edit1.Text=pwdstr then
begin
if checkbox1.Checked =true then form6.show
else form7.show;
end;
else
begin
if MessageDlg('密码输入错误。是否退出? ',mtConfirmation,[mbYes,mbNo],0)
=mrYes then Close
else if times<3 then edit1.SetFocus
else
begin
MessageDlg('对不起,密码输入严重错误!请退出。', mtInformation,[mbOk],0);
application.Terminate;
end;
end;
end;
这段代码的times:=times+1;这句过不去,请问是怎么会事?
 
times定义了没有?
 
times怎么定义?
 
你想让它表示什么含义?全局变量,局部变量?
 
应该是局部变量?
 
那么在
pwdstr:string;
begin
之间加上一句 times:integer;不就行了(反正你不能对一个变量没有定义)
 
我倒是觉得不管怎么说,密码好歹至少应该用个xor加个密后放在注册表里吧?
 
你的times应该是一个全局变量:原因如下:
1.在delphi 中如果不对变量初始化,那么该变量的初始值是一个随机数,可能是一也可能是其他值
所以要控制密码输入次数必须要对times初始化。而在该按钮的单击事件初始化是不可能的。达不到
控制密码次数的目的。
2。times的初始化应该在form1 的oncreat 事件中进行。
3。times 的说明应该在该程序的开头。语句
var
form1:tform1;
的后面
加一句
times:byte;
 
以上的问题解决了,可是
if checkbox1.Checked =true then assignfile(pwdfile,'f:/data/管理员.cfg')
else assignfile(pwdfile,'f:/data/学生.cfg');
reset(pwdfile);
readln(pwdfile,pwdstr);
closefile(pwdfile);
文件建立不了,怎样建立?是否有更好的解决方法?
 
检查文件的路径文件名对不对!
 
路径没有问题,CFG文件是带有项目选项的的配置文件?
 

//把你的代码改为下面的代码:

{$I-} //必须加
Var
Times : Word;
procedure TForm1.BitBtn1Click(Sender: TObject);
{
第一次运行:
checkbox1点中,在Edit1中输入管理员的口令,
再按BitBtn1,建立文件“管理员.cfg”。
第二次运行:
checkbox1不点中,在Edit1中输入学生的口令,
再按BitBtn1,建立文件“学生.cfg”。
再运行时:
必须正确输入“管理员”或“学生”的密码。
}
Var
pwdfile:textfile;
pwdstr:string;
begin
SetLengTh(pwdstr,119);

pwdstr:='f:/data';
mkdir(pwdstr);
if (ioresult<>0) then
asm nop end;

if (checkbox1.Checked) then
pwdstr:='f:/data/管理员.cfg'
else
pwdstr:='f:/data/学生.cfg';
assignfile(pwdfile,pwdstr);
If (FileExists(pwdstr)) Then
Begin
reset(pwdfile);
readln(pwdfile,pwdstr);
End Else
Begin
ReWrite(pwdfile);
pwdstr:=Trim(edit1.Text);
WriteLn(pwdfile,pwdstr);
End;
closefile(pwdfile);

times:=times+1; { 密码输入次数 }

if (Trim(edit1.Text)=pwdstr) then
begin
if (checkbox1.Checked) then
form6.show
else
form7.show;
end else
begin
if MessageDlg('密码输入错误。是否退出? ',
mtConfirmation,[mbYes,mbNo],0)
=mrYes then
Close
else
if times<3 then
edit1.SetFocus
else
begin
MessageDlg('对不起,密码输入严重错误!请退出。',
mtInformation,
[mbOk],0);
application.Terminate;
end;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Times:=0;
end;
 

喔!忘了:

请拿分来!!! ^_^ ^_^ ^_^
 
FileExists(filename)文件是否存在(filename为文件名,包括路径和扩展名)
filecreate(filename);创建文件
 
呵呵
我这里有一本书《Delphi5数据库开发技术》
书中有个例子(一个图书馆维护的)和你给的代码一模一样啊[:P]
如果你看的也是这样的一个例子,那你仔细看一下后面的代码
在另外一个
Procedure TForm1.BitBtn3Click(Sender: Tobject);
中有对times的定义
因此我推断程序中的times也应该是在那里声明的
(不晓得你看的是不是我说的这本,反正我看的时候发现过不少错误
所以以后就不看了)

 
另外恕我多嘴
这东西当毕业设计实在。。。。。。
多考虑
 

愤怒:

怎么还不给分!!!???
 
我也多嘴一下 我一般是用数据表存放用户名和密文的 另外这个数据文件本身还有加密
 
接受答案了.
 
后退
顶部