如何做系统登陆?

lostmoon 2010-02-24 05:50:07
有几个表单, FrmWec是一进入软件时显示的欢迎界面,FrmLog是用户登陆窗体,FrmMain是登陆成功后的主窗体.

如果按照这个步骤,做一个较好的登陆程序? 我原来用的是show和Hide的方式,觉得很不妥.


请给写个成熟的,大众化的代码.
...全文
271 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
buding79 2010-02-25
  • 打赏
  • 举报
回复
这个我觉得主要是看你了。
是先显示登陆,后显示主界面。
还是先显示主界面,还是再登陆,看你的控制了。

我写的程序是先登录的,直接写在program单元,写在最前。
//登陆
if frmlogin=nil then frmLogin:=tfrmLogin.Create(nil);
try
if not(frmLogin.ShowModal = mrok) then
begin
exit;
end;
finally
frmLogin.Free;
end;

Application.Initialize;
7年 2010-02-25
  • 打赏
  • 举报
回复
用SHOWMODEL,无非就是登陆成功显示主窗体呗。
「已注销」 2010-02-25
  • 打赏
  • 举报
回复
我的一点代码,仅供参考

procedure TFrmLogin.btnLoginClick(Sender: TObject);
var
Id: string;
password: string;
begin
if cbbUser.Items.Count = 0 then Exit;
id := PComboxID(cbbUser.Items.Objects[cbbUser.ItemIndex])._ID;
if Trim(edtPwd.Text)='' then
begin
UErrorMsgBox('密码不允许为空!');
edtPwd.SetFocus;
Exit;
end;
if qryUser.Locate('Us_ID', id, [loCaseInsensitive]) then
begin
password := qryUser.FieldByName('Us_Password').AsString;
if Trim(edtPwd.Text)<> password then
begin
UErrorMsgBox('密码错误,请重新输入!');
edtPwd.Clear;
edtPwd.SetFocus;
Exit;
end;
end;
with qryUser do
begin
with gUserInfo do
begin
_UserID:=FieldByName('Us_ID').AsInteger;
_UserName :=FieldByName('Us_Name').AsString;

end;
Close;
end;
ModalResult := mrOk;
end;

欢迎界面在工程文件里写即可。
yct0605 2010-02-25
  • 打赏
  • 举报
回复
一闪而过的窗体写在工程文件里面
yct0605 2010-02-25
  • 打赏
  • 举报
回复

1. 登录窗体先显示,登录后显示主窗体

用两个窗口举例如下:
FORM1是主窗体,FORM2是动态生成的登陆窗体(project - > options中的forms页面,把form2从左边拖到右边去),form2上面有两个按钮,一个是登陆,一个是取消,对应代码分别如下:

form2的代码:

unit Unit2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm2 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
ModalResult := mrOk;
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
ModalResult := mrCancel;
end;

end.

然后在工程文件中,默认为project1.pas, 代码如下:

program Project1;

uses
Forms,
Controls,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
Application.Initialize;
Form2 := TForm2.Create(nil);
try
if Form2.ShowModal = mrOk then begin
Application.CreateForm(TForm1, Form1);
Application.Run;
end;
finally
Form2.Free;
end;
end.

运行,查看效果,会发现程序先出现的是form2,当点击了登陆按钮,可以显示主窗体,否则程序结束。至于你说的数据连接窗口,同样的方法,自己编码控制吧。

2 .两个窗体一起闪烁,两个窗口一起显示,登录窗体在主窗体上方显示,也就是说层叠的, 不过得登录了之后才能使主窗体活动

form1中代码如下:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Form2 := TForm2.Create(nil);
Form1.Show;
try
if Form2.ShowModal <> mrOk then
Application.Terminate;
finally
Form2.Free;
end;
end;

end.

工程文件的代码如下:

program Project2;

uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
Application.Initialize;

Application.CreateForm(TForm1, Form1);

Application.Run;
end.

form2的代码如下:

unit Unit2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm2 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
ModalResult := mrOk;
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
ModalResult := mrCancel;
end;

end.
学生学籍管理系统需求分析报告 §1 概述 编写说明: 本章描述本软件开发的背景,系统目标,用户的业务情况,以便于需求理解。 § 1.1背景 传统的学校学籍管理方法、由于分散管理,易发生数据丢失,劳动强度高,速度慢。使用计算机可以高速、快捷地完成以上工作。特别是在计算机联网后,数据在网上传递,可以实现数据共享,避免重复劳动,规范教学管理行为,从而提高了管理效率和水平。学籍管理信息系统以计算机为工具,通过对教务管理所需的信息管理,把管理人员从繁琐的数据计算处理中解脱出来,从而全面提高教学质量。 § 1.2系统目标 学籍管理信息系统以计算机为工具,通过对教务管理所需的信息管理,把管理人员从繁琐的数据计算处理中解脱出来,使其有更多的精力从事教务管理政策的研究实施,教学计划的制定执行和教学质量的监督检查,从而全面提高教学质量。 § 1.3业务模式 本系统是运行在WindowsXP等操作系统环境下的多台计算机构成的局域网, 现在学校各部门分别使用不同数据库,各部门之间的信息还不能实现网上共享。由于学校的各个部门都需要一些学生的基本信息,所以各个部门都有一份学生档案。一个部门的改动,将导致其他各部门必须修改,否则,学生的信息将不一致。 高校学生学籍管理系统将采用B/S模式,学生的信息由各用户在规定的权限下在各自的工作站上录入,统一保存在系统服务器上,既可集中管理,有可让各部门管理自己负责的信息。信息上网后各用户可查询,调用,达到全校信息共享。 §2用户需求 编写说明: 此系统专门为高校学籍管理所设置。本节主要描述用户需求的使用范围,功能要求信息采集与各部门的使用权限 § 2.1使用范围 按西安交通大学城市学院学生学籍状况的系统管理(本科生用学年学分制)。 系统中保留4个年级学生的信息,学生毕业一年后信息转储,但随时可以查询,输出。 § 2.2功能要求 •学生档案管理: 学生的一般情况,及奖励,处分情况; •学生成绩管理: 学习成绩,补考成绩; •学籍处理: 学生留降级处理,休复学处理,退学处理; •日常教务管理: 日常报表,如通知书,补考通知书等,学生学习成绩的各种分类统计; •毕业生学籍处理: 结业处理,毕业处理,授位处理,学籍卡片等。 § 2.3信息采集与各部门的使用权限 每学期考试完毕由各系录入成绩,然后由教务科收集。为了信息的安全和数据的权威性,对于网上信息的使用权限和责任规定如下: 数据收集前的系统权限 学生档案 学生奖惩 学生成绩 学籍处理 补考成绩 教学计划管理 各种等级考试 学生工作处 0 ? 0 ? ? ? ? ? ? 各系 ? ? 0 ? ? ? ? ? 教务科 ? ? ? 0 ? 0 ? ? 0 ? 师资科 ? ? ? ? ? 0 ? ? 院长办公室 ? ? ? ? ? ? ? 注:0、登录,修改,处理权。 ?、查询权 § 2.4数据完整性、正确性: 1、 可按某学生某学年考试及补考成绩,自动生成该学生是否升留降级,退学。 2、 可按某学生在校期间累计重修科目门数和成绩自动生成该学生是否结业,毕业,授位。 3、 可按某学生因非成绩原因所引起的学籍变更作自动处理。 4、 可按每学期各年级班学生考试成绩自动生成补考名单,科目。 5、 可按每学期各年级学生考试成绩自动生成某课程统计分析表。 6、可按同一年级学习成绩进行同一课程不同班级间成绩比较 § 2.5 性能需求 因为学籍管理系统存储学生信息,所以数据库系统应该具有备份和恢复功能,保证学生数据库的长期完整性和正确性。另一方面,作为系统的服务器应该能够长期无故障的运行,而且能够便于管理员的操作。安全性要求比较高,对业务逻辑必须封装,避免有人登陆他没权限的网页,避免黑客从数据流中截取敏感数据。 § 2.6 其他需求 普通用户的需求:对于只有查看权限的用户,一般是通过上网浏览学校网页来查看数据的。 各部门管理员:能够对系统进行设置,以适应不同用户的需求。对不同系的管理员分配不同的权限,教务处系统管理员具有最高的管理权限。 § 2.7用户平台要求 系统主要使用于高校的局域网, WinXP等环境下,Java,Vc,Vb连接数据库,本系统需要DBMS放学生学籍数据库。可进行查询,修改、处理等。 §3 业务逻辑和数据流图 本系统暂不考虑与其他系统交换数据,而是作为一个独立的系统。但是,他应该能够向学校的上级主管部门提交学生的信息。 § 3.1业务流程与业务逻辑

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧