如何开发网吧计费程序? 敬请各位高手们不吝赐教。(200分)

  • 主题发起人 主题发起人 gzhn
  • 开始时间 开始时间
G

gzhn

Unregistered / Unconfirmed
GUEST, unregistred user!
目前我正在编一个网吧计费程序,现遇到几个问题,想请教各位编程高手指导和建议,
200分送上,谢谢。
问题一:想用ADO组件开发,请问使用何种数据库好?是PARADOX 7或是ACCESS?或是其它数据库?
问题二:有一个DB表主要是用来保存计费数据的,比如有20台电脑,就有20条记录,每条记录为一台电脑上网时间的计费情况
字段如下: 字段名为:

卡号、电脑编号、状态、是否在计费、开始时间、已用时间、剩余时间、限时、单价、
上机费用、其它费用、费用合计、用户名、是否已结帐

如果有数台电脑同时处在计时计费状态,如何用计时器来分别保存每台电脑上机时间的变化?或是其它比较理想的方法?
我遇到的问题是:当几台电脑同时计时时,只有其中一台反映了计时的变化,也就说只有当前记录的数据保存,当记录指针移动到下一条或其它条记录时,刚才的记录就没有反映时间的变化?
该如何解决? 如有解答,请在2天之内回复,不甚感谢!
 
1,建议用ACCESS
2.不太明白你的意思,客户机登录后,服务器应该按服务器上的,时间记录一条,下机时用这个时间算出后,算出费用,
当然是同时记费,没有数据保存问题
 
呵,下机时,你把服务器端的按钮按一下,停止计费,然后,你可以把两个时间进行相减呀,不要
时时,不费资源了!
 
只用一个计时器就可以做到。方法是,设置每台机器的计时状态。

在计时器中运行:
查询每台机器的计时状态
计时中的机器运行时间加上timer

在计时器外进行计时状态的更改。

这样,既保证计时的实时性,又保证了计时的不可更改性。
 
请问menxin和netameng先生:通过在菜单中执行下面过程时,程序死机,如有时间,
请帮分析一下,好吗?

procedure Tmainform.Timer2Timer(Sender: TObject);
var counttime,sjfy:currency;
Hour, Min, Sec, MSec:word;
ch:TLocateOptions;
kssj,yysj,SYSJ:TdateTIME;
begin
timer2.Enabled:=true;
ch:=[loCaseInsensitive];
with wg_data.tb_main do
begin
first;
while not eof do
begin
if locate('状态;是否在计费',VarArrayOf(['运行',true]),ch)=true then
begin
edit;
Fieldbyname('开始时间').asdatetime:= starttime;
fieldbyname('已用时间').asdatetime:=DateTimePicker1.dateTime-starttime;
DecodeTime(fieldbyname('已用时间').asdatetime,Hour, Min, Sec, MSec);
min:=1+min;
sec:=5+sec;
counttime:=hour*60+min;
fieldbyname('剩余时间').asdatetime:=staytime-fieldbyname('已用时间').asdatetime;
fieldbyname('上机费用').ascurrency:=(counttime*fieldbyname('单价').ascurrency*0.01);
post;
if locate('限时',fieldbyname('已用时间').asdatetime,ch)=true then
begin
kssj:=Fieldbyname('开始时间').asdatetime;
yysj:=fieldbyname('已用时间').asdatetime;
sysj:=fieldbyname('剩余时间').asdatetime;
sjfy:=fieldbyname('上机费用').ascurrency;
Timer2.Enabled:=false;
if messagebox(application.mainform.Handle,pchar('限时时间已到,是否要延时?'),pchar('提示'),mB_OKCANCEL+MB_ICONINFORMATION+MB_DEFBUTTON2)=IDOK THEN
BEGIN
Timer2.Enabled:=true;
edit;
fieldbyname('状态').asstring:='运行';
Fieldbyname('是否在计费').asboolean:=true;
Fieldbyname('开始时间').asdatetime:=kssj+starttime;
fieldbyname('已用时间').asdatetime:=yysj+DateTimePicker1.Time-starttime;
DecodeTime(fieldbyname('已用时间').asdatetime,Hour, Min, Sec, MSec);
min:=1+min;
sec:=5+sec;
counttime:=hour*60+min;
fieldbyname('剩余时间').asdatetime:=sysj+staytime-fieldbyname('已用时间').asdatetime;
fieldbyname('上机费用').ascurrency:=sjfy+(counttime*fieldbyname('单价').ascurrency*0.01);
post;
END
else
begin
Timer2.Enabled:=false;
edit;
fieldbyname('状态').asstring:='待机';
Fieldbyname('是否在计费').asboolean:=false;
post;
end;
end;
end;
next;
end;
end;
end;
 
我也正在替学校机房写这东东,我是把他分为客户端和服务端,用UDP通信,
这样就可以随意的控制客户机并可以记录其登陆时间和离开时间了。
如要源码请联系:beamgx@yahoo.com.cn
 
beamgx老兄:
你好!
谢谢你的热情帮助,我想能否请你传一份源码给我拜读,好吗?
 
beamgx兄,能否赐在下一读?jetpower@163.com
 
你是否尝试用过三层开发解决.CORBA可能是一个好的选择.
 
netameng先生、beamgx兄:
谢谢你们对我的启发和建议,再加上本人的努力,问题已得到解决,再次谢谢各位。
 
多人接受答案了。
 

Similar threads

回复
0
查看
885
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部