1.问题描述:机房管理系统是根据学校机房具体情况而编写的简单数据管理系统。
2.机房里的机器信息和学习情况是一个很庞杂的信息,为了方便对电脑的信息进行管理而需要设计一种有效的管理系统。其实现功能主要包括以下几点:1.1信息操作功能。 电脑信息的添加、修改和删除;电脑信息包括:编号,价格,品牌,日期,电脑序列号,机房信息的添加、修改和删除;机房分配信息包括:机房,周次,星期几,课次,课程,辅导教师,。1.2查询功能。可以通过学号来查询学生基本信息,通过学号和学期查询学生的成绩,通过课程号查询该课程的信息。1.3打印功能。打印和预览当前所示显示的信息。
3、解决方案。用Microsoft visual foxpro创建数据库来实现数据的存储,用Visual Fox设计一个管理平台,并通过Visual foxpro所提供的管理器来与数据库连接,实现所需功能要求。其中visual foxpro数据库中创建3个主要数据表:电脑信息表,维修记录表,机房分配信息表。这3个数据表的结构如图。这几个表中,电脑编号和机房编号内容都是惟一的,分别是电脑信息表和机房分配信息中的主关键字。因此为便于用户操作,需要一个专业数据字典。该数据字典作为一个数据表special。 主要功能:1 用户登陆密码验证,支持用户添加与删除,用户权限限制2 电脑备案和查询3 维修备案和查询4 机房使用备案,查询,调度等5 打印报表 该系统一共包括15个主要表单(.scx),4个表(.dbf)和3个报表(.frx)。 表单分别为: 关于作者(aboutauthor.scx) 关于系统(aboutserve.scx) 机房调整时用做填加(add.scx) 添加用户(adduser.scx) 电脑备案(computerstore.scx) 删除用户(deluser.scx) 主操作界面(mainform.scx) 修改机房安排(modificationschedule.scx) 密码验证(password.scx) 电脑查询(querycomputer.scx) 维修查询(queryrepair.scx) 机房安排查询(queryschedule.scx) 维修备案(repairstore.scx) 机房安排备案(schedulestore.scx) 欢迎界面(welcome.scx) 数据文件夹下的表分别为: 电脑备案(Computer.dbf) 维修备案(repair.dbf) 机房安排(schedule.dbf) 用户信息(userregister.dbf) 报表分别为: 电脑报表(computer.frx) 维修报表(repair.frx) 机房报表(schedule.frx) 关系模式computer(编号,品牌,日期,价格,电脑序列号) 维修记录(编号,维修费,日期,备注) 机房管理(机房,周次,星期几,课次,课程,辅导教师,)
4、解决实例。学生信息管理系统用Visual foxpro在Windows2000开发,整个系统是一个多文档应用程序框架,并通过vf来访问数据库,其界面设计和各模块接口分述如下。界面设计原则。界面设计时除了包括对菜单、应用程序图标以及“关于…”对话框等界面元素进行构思外,主要考虑以下四方面:界面的简化,界面元素的联动,多个操作方式,界面的美学要求。如下图。系统界面设计。将系统总体界面定为主窗体下调用各个独立的窗体。每个独立窗体之间不会发生交错的效果。
5、源程序当进入机房管理系统时首先映入眼帘的是欢迎界面,其中的主要编码是在欢迎界面(welcome.scx)的计时器的Timer事件代码: If a>=1 Do form password to showform This.enabled=.f. If showform=.f. Clear events Release thisform Else do form mainform thisform.release EndifElse a=a+1Endif其中showform是来自密码验证(password.scx)中Unload事件 Return this.showform通过判断showform的真假来确认是否允许进入主界面,而真正确定其值又是由是否通过了密码验证。密码验证是通过密码验证(password.scx)中的确定按钮(command1)click事件 Private uPassword &&保存用户密码变量 select Userregister uPassword =Alltrim(thisForm.Text1.Value) _user=Alltrim(ThisForm.Combo1.Value) Locate For Alltrim(用户名)=Alltrim(ThisForm.Combo1.Value) IF Found() AND uPassword=Alltrim(密码) Thisform.showform=.t. release thisform Else If n< 3 messagebox("密码错误,请重新输入",0+48,"提示信息") thisform.text1.value="" thisform.text1.setfocus n=n+1 Else messagebox("密码错误,禁止进入系统",0+16,"严重警告") thisform.release Endif Endif需要特别注意的是在上述程序中有一个变量并没有使用只是简单的赋了初值(_user),其实它令有别用.在进入主操作界面(mainform.scx)时,在Load事件中 if _user="guest" do mainmenu1.mpr with this,.t. else do mainmenu.mpr with this,.t. endif thisform.windowstate=2通过判断其值,来执行不同的菜单程序从而达到限制用户权限的目的.在主操作界面(mainform.scx)的QueryUnLoad事件中 ask=messagebox("确实要退出系统吗?",4+32+256,"学生管理系统") if ask=6 close all release all clear events else NODEFAULT endif来确认是否退出退出. 在用户设置菜单中添加用户(adduser.scx)的确定(Command1)Click事件 public u1,pw1 u1=thisform.text1.value pw1=thisform.text2.value if empty(thisform.text1.value) messagebox ("用户名不能为空!",48+0,"添加新用户") thisform.text1.setfocus else locate for upper(用户.用户名)=upper(allt(thisform.text1.value)) if found() messagebox("用户名已经存在,请输入其他用户名!",48+0,"添加新用户") thisform.text1.setfocus else if thisform.text2.value==thisform.text3.value dimension b(1,4) b[1,1]=u1 b[1,2]=pw1 b[1,3]="" b[1,4]=.T. append from array b messagebox("成功添加新用户!",64+0,"添加新用户") release thisform else messagebox("请输入相同密码!", 48+0,"添加新用户") thisform.text3.setfocus endif endif endif 在删除用户(deluser.scx)的确定(Command1)Click事件中 if reccount()<=1 messagebox("无法删除最后一个用户!",48+0,"删除用户") else locate for 用户.用户名=thisform.combo1.value if found() and Alltrim(thisForm.Text1.Value)=allt(密码) a=messagebox("确实要删除此用户吗?",32+1,"删除用户") if a=1 delete all for 用户名=thisform.combo1.value pack messagebox("成功删除用户!",64+0,"删除") thisform.combo1.value="" thisform.text1.value="" endif else messagebox("密码有误,请重新输入!",48+0,"删除用户") thisform.text1.setfocus endif endif在电脑备案(computerstore.scx)的Init事件中public ncount all to ngo nthisform.text1.value=品牌thisform.text2.value=日期thisform.text3.value=价格thisform.text4.setfocus初始化为最后记录的一部分值.添加(command3)的Click事件中insert into computer values (thisform.text4.value,thisform.text1.value,thisform.text2.value,thisform.text3.value,thisform.text5.v alue,thisform.edit1.value)thisform.text4.value=""thisform.text5.value=""thisform.edit1.value=""thisform.text4.setfocus来实现添加到表的末尾. 在电脑查询(querycomputer.scx)中查询(command1)的Click事件中 public n select computer locate for 编号=thisform.text1.value if found() thisform.text2.value=品牌 thisform.text3.value=日期 thisform.text4.value=价格 thisform.text5.value=电脑序列号 thisform.edit1.value=备注 select repair sum 维修费 for 编号=thisform.text1.value to n clear thisform.text6.value=n else messagebox("所查询的电脑不存在"+chr(10)+chr(13)+chr(13)+"请确认你输入的编号是否正确",0+32,"提示信息") thisform.text1.value="" thisform.text1.setfocus endif 在完成查询的同时也作到了对维修费用的统计.还用命令按钮组(commandgroup1)的Click事件 do case case this.value=1 select computer if recno()>1 skip -1 go recno() endif thisform.text1.value=编号 thisform.text2.value=品牌 thisform.text3.value=日期 thisform.text4.value=价格 thisform.text5.value=电脑序列号 thisform.edit1.value=备注 select repair sum 维修费 for 编号=thisform.text1.value to n clear thisform.text6.value=n thisform.refresh case this.value=2 select computer if recno()
这个小系统编写起来也不难,何况是用visual Fox编写,建议初学编程的人采用Visual Fox,Visual Basic写程序。因为即使用窗口拖拽控件,上述两门语言也比C系统的语言强(C,C++,C#)。