学生成绩管理系统(VFP)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学生成绩管理系统(V F P) -标准化文件发布号:(9556-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII
摘要:
学生成绩管理系统是典型的信息管理系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。
对于前者要求建立起数据一致性和完整性强、数据安全性好的库。
而对于后者则要求应用程序功能完备,易使用等特点。
本文简要介绍了本学校学生成绩管理的情况和系统的实现过程,阐述了课题来源,系统及需求分析,系统规划,设计及实现情况。
关键字:控件、窗体、域。
Abstract:
Student’s achievement administrative system is a typical information management system(know as MIS), Its development include backstage supporter the foundation and maintain and front the twoes respects of development of application programs of data mainly. As to the former require set up data consistency and integrality strong, data security kind storehouse. Require application program not to be complete, easy to use characteristic of waiting for function the latter.
This text has recommended a situation of student’s achievement management of institute and systematic realization course briefly, Having explained the subject source, the system and demand analyse, the system is planned, Design and realize the situation.
Key word: Accuse of one, window body, land.
目录
摘要 (2)
一前言 (3)
二课题来源 (4)
三系统及需求分析 (4)
(一)、系统需求 (4)
(二)、可行性分析 (4)
(三)、VFP5.0以上的中文版概述 (5)
四系统规划 (6)
(一)、项目规划 (6)
(二)、功能框图 (7)
(三)、规划数据库 (7)
五系统设计和实现 (9)
(一)、数据分析与项目的建
立 (9)
(二)、数据库设
计 (9)
(三)、模块设
计 (10)
(四)、系统性能测
试 (31)
六结束语 (31)
参考文献 (32)
附录 (3)
3
一前言
Visual FoxPro(简称VFP)是Windows平台下的新一代数据库管理系统,它具有优美的图形用户界面(GUI)、面向对象的开发方式、客户/服务品的数据连接以及通过OLE的数据访问工具等特点。
最新推出了VFP6.0 、VFP7.0,它在 VFP5.0的基础上更加重了项目管理器、向导、生成器、查询与视图、OLE连接、Active X集成、帮助系统制作、数据导入和导出等方面的功能。
“学生成绩管理系统”就是在这样一个优秀的数据库管理系统下开发而成的,可以在VFP5.0以上的版本上运行,也可以生成自身的.EXE文件运行。
本系统的特点是:易用性、先进性和广泛性强,可用性和实用性高,良好的用户界面,几乎没有专业和业余的区别,普通用户只要懂得使用WINDOWS操作系统及VFP 数据库管理就能使用该系统。
本书以怎样建立学生成绩管理系统为主线,全面而系统地介绍了系统的各种功能模块的建立和操作方法。
全书分为六章,全面系统地介绍了在VFP数据库管
理系统中建立学生成绩管理的项目管理器及其使用,数据表与数据库的建立,查询与视图,表单设计,报表,工作环境的设置方法与步骤等内容。
“学生成绩管理系统”是目前学校应该普遍需要使用的学生管理系统之一,鉴于这种情况,提出问题、分析问题,也是我这次毕业论文设计的基本目的。
二课题来源
计算机已经成为我们学习和工作的得力助手,今天,计算机的价格已经十分低廉,性能却有了长足的进步。
它已经被应用于许多领域,计算机之所以如此流行的原因主要有以下几个方面:
首先,计算机可以代替人工进行许多繁杂的劳动;
其次,计算机可以节省许多资源;
第三,计算机可以大大的提高人们的工作效率;
第四,计算机可以使敏感文档更加安全,等等。
由于我校每个学期都要进行期终考试,每期的考试成绩又要进行登记入册,原来学校是由教务处的一位老师专门管理这件事,主要是进行手写登记,费时又费心,而且有时还出现很多错误登记。
现在我校学生成绩管理水平还停留在纸介质的基础上,这样的机制已经不能适应时代的发展,因为它浪费了许多人力和物力,在信息时代这种传统的管理方法必然被计算机为基础的信息管理所取代。
作为计算机应用的一部分,使用计算机对学生成绩进行管理,具有着手工管理所无法比拟的优点。
例如:不易出错、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。
这些优点能够极大地提高学生成绩管理的效率,也是学校的科学化、正规化管理,与世界接轨的重要条件。
因此,开发这样一套管理软件成为很有必要的事情。
三系统及需求分析
(一)、系统需求
·尽量采用学校现有软硬件环境,及先进的管理系统开发方案,从而达到充分利用学校现有资源,提高系统开发水平和应用效果的目的。
·系统应符合学校学生成绩管理的规定,满足对学校学生成绩管理的需要,并达到操作过程中的直观、方便、实用、安全等要求。
·系统采用模块化程序设计方法,既便于系统功能的各种组合和修改,又便于未参与开发的技术维护人员补充、维护。
·系统应具备数据库维护功能,及时根据用户需求进行数据的添加、删除、修改、备份等操作。
通过调查,要求系统需要有以下功能:
1、由于操作人员的计算机知识普遍较差,要求有良好的人机界面,可以存储历届的学生成绩,安全、高效;
2、原始数据修改简单方便;
3、数据查询方便;
4、删除数据方便简单,数据稳定性好;
5、数据计算自动完成,尽量减少人工干预;
6、强大的报表打印功能;
7、退出系统。
(二)、可行性分析
由于本系统管理的对象单一,且每个班级的学生数据内容基本是一致的,涉及的计算中心过程不是很复杂。
因此,比较适合于采用数据库管理。
在存储量、速度方面都能满足数据库运行的要求。
在技术难度方面,由于有指导老师和相关参考文献,特别是网上资料,以及学校给我提供的各种数据要求,完全可以实现。
VFP5.0以上的中文版作为一个关系型数据库系统,它提供了面向对象的编程技术,可简化数据库管理,使开发应用程序这项艰辛的工作就象堆积木那样简单方便。
另外,用VFP5.0以上的中文版开发的应用程序可以独立运行于Windows平台。
(三)、VFP5.0以上的中文版概述
1、概述
VFP5.0以上的中文版,它是运行于Windows 9X/2000及Windows NT平台的32位的数据库系统,充分发挥了32位微处理器强大的32位数据处理性能。
它功能强大,直观易用,支持客户/服务器结构和面向对象编程,提供多种可视化编程工具,支持最新Internet技术,WWW数据库的设计,最新流行的ActiveX 等。
VFP5.0以上的中文版完全支持OOP(面向对象)的应用程序设计方法,VFP 使用了真正的类,包括继承性,封装性和多态性。
用可视方式创建类、查看类及类代码;利用表单向导进行专业级界面设计;对表关系进行可视化查看;可利用OLE自动化来包含其他软件(如Excel、Word)中的对象并使用这些软件。
通过VisualFoxPro对象和事件模型,用户可以快速创建和实现无模式(modeless)的应用程序;利用生成器和工具栏,开发人员可以快速开发应用
程序,而省去编写大量的代码、定义繁多的属性。
总之,VFP5.0以上的中文版是一种适用于专业人员的开发工具。
2、数据库概念的发展
在FoxPro2.X中一个表就是数据库,实际上是真正的数据库中表的概念。
在Visual FoxPro中,数据库指的是可以存储一个或者多个表(.DBF)及视图的关系数据库,这才是真正的关系型数据库的概念。
对于一个大型的信息管理系统,它很可能需要对不同的用户各自创建一个大型的文件系统,它包括许多表,而属于一个用户的一套表与属于另一个用户的一套表实际上是相同的,只是名称有所不同,而在FoxPro2.X中,需要建立大量的代码来区别和维护属于不同用户的一套表,这套表的数量可能是非常庞大的,维护编码也是非常庞大的。
然而VisualFoxPor中引入的真正的数据库的概念,使这一问题的解决变得非常的容易,设计人员只要为不同的用户创建不同的数据库,然后在这些数据库下建立用户自己的表就可以很容易对每个用户进行区别和维护了。
而且,这样的数据库的关系能力更加强大,更加稳定可靠。
3、其他新特性
VisualFoxPor5.0的面向对象编程,一个很重要的部分是通过使用类体现出来的,类具有对象的继承、封装的特性和一切使用对象编程的优点。
可以大大简化编程,在本系统的设计中就充分利用了这种优点(如:自动转换中英文输入法的gstextbox的自定义,VisualFoxPor5.0自带的可视类库WIASTYLE.VCX中的searchclass类等等),可以按照需要给自己的数据库定制相应的菜单样和工具栏。
重新设计了项目管理器(ProjectManager),其最简单的用途是作为一种组织工具,保存属于特定应用程序所有文件的列表,而且根据文件类型将
这些文件进行划分。
它所提供的多页框界面,使对项目文件的添加、建立和编程更加容易。
1998年最新推出了VFP6.0中文版,它在VFP5.0的基础上更加重了项目的管理器、向导、生成器、查询与视图、OLE连接、Active X集成、帮助系统制作、数据导入和导出等方面的功能。
可以与OFFICE软件集成。
四系统规划
(一)、项目规划
学生成绩管理系统是一个典型的数据库应用程序,由用户设置模块、数据处理模块、成绩输入模块、成绩管理模块、成绩查询模块、报表打印模块等部分组成,特规划功能模块如下:
1、用户设置模块
该模块主要包括添加用户、修改密码和删除用户。
2、数据处理模块
该模块的主要功能是建立登分册和负责录入学生数据。
(1)建立登分册:是指建立考试的名称。
(2)学生管理:主要负责录入学生的信息,如录入学生的学号、年级、班次、姓名和性别。
由于数据量大,所以该模块的设计也发点应从方便用户操作的角度出发,如采用中英文自动切换。
3、成绩输入模块
该模块的主要功能是负责录入学生的成绩,并且可以选择要输入成绩的科目。
4、成绩管理
该模块的主要功能是对学生成绩自动核算,总分、排名。
5、成绩查询模块
查询模块是一个数据库系统中所必须的模块。
方便学校对每个学生的学生成绩查询和对每个班全部学生成绩的查询。
6、报表打印模块
该模块包括打印成绩和打印设置两个子菜单。
(1)打印成绩模块:打印学生平时及毕业要打印他们的数据,于是设置了打印学生个人成绩,打印班级学生成绩和打印班级平均分的报表,以便学生对平时成绩的查询及毕业入档时学生成绩打印入册的原始凭证。
(2)页面设置模块:是对打印页面进行设置,如果没有安装打印机,将会提示安装打印机,此时应该点“否”并选“忽略”,否则系统将会产生错误。
7、退出功能模块
退出功能模块用于结束所有操作,退出学生成绩管理系统。
根据以上分析,本系统将建立以下功能模块。
学生成绩管理系统主界面
用户设置
添加用户
修改密码
删除用户
数据处理
建立登分册
学生管理
成绩输入
成绩管理
成绩查询
打印报表
打印成绩
页面设置
退出
(二)、功能框图
根据系统功能要求,可以将系统分解成几个功能模块来分别设计,功能模块如下图:
(三)、规划数据库
1、分析数据需求
数据库是管理系统的基础,只有建立了反映实际情况的数据库,才可能提供各种有价值的信息,为决策作出依据。
在学生成绩管理系统中建立的数据库为:成绩库
2、确定数据库
由于VFP5.0的以上版本的数据库管理比较完善,在设计数据库时,不同主题的信息应存储在不同的表中,并遵循下列规则:
(1)同一信息只保存一次;
(2)防止删除有用信息;
只有在同一信息只保存一次的前提下,才能减少数据冗余性和出错的可能性,而是为了防止删除有用的信息,最好的解决方法仍然是把不同主题的信息放在不同的表中。
根据以上分析,学生成绩管理数据库中建立了以下几个表:学生表、考试库、课程表、用户。
(1)学生表
①学生表的结构。
字段名类型宽度小数
学号字符型11
年级字符型 4
考号字符型8
班次字符型10
姓名字符型8
性别字符型 3
②学生表的记录。
假设在学生表中输入3条记录,则为:
学号年级考号班次姓名性别
20041928 高一12912 321 谭仲杰
男
20041086 高一10207 321 文淑华
女
20041553 高一12607 321 王俊敏
女
(2)考试库
①考试库的结构。
字段名类型宽度小数名称字符型50
时间字符型8
②考试库的记录。
假设在考试库中输入2条记录,则为:
名称时间
2004年高一期末成绩20050112
2004年高二期末成绩20050112
(3)课程表
①课程表的结构。
字段名类型宽度小数
科目字符型20
最高分数值型 3
②课程表的记录。
假设在课程表中输入3条记录,则为:
科目最高分
语文115
数学98
历史96
(4)用户
①用户的结构。
字段名类型宽度小数
用户名字符型16
密码字符型16
②用户的记录。
假设在用户中输入2条记录,则为:
用户名密码
admin 1
yxl 123456
五系统设计和实现
(一)、数据分析与项目的建立
1、数据分析主要是分析各种数据的用途及相互之间的关联,分析数据的类型、数量发生频度和使用频度,并具体弄清楚每个数据所需的范围和位数及来源的时间性,为数据库、文件设计及输出、输入设计提供依据,也为制定合理的数据处理方法提供依据。
编码是一项基础工作,编码必须唯一,编码设计的目的是为了便于数据的存储和检索,提高处理的效率和精度,节省处理时间和减少存储空间且方便使用。
2、项目的建立
项目管理器是“项目”二个字的含义指的就是我们想要编制的应用程序。
成名思义,项目管理器就是用于建立应用程序的集成开发环境,它帮助我们设计、修
改、运行一些应用程序级件。
为了开发“学生成绩管理系统”,首先就要启动项目管理器,创建一个新项目。
启动项目管理器,创建新项目——学生成绩管理系统的操作步骤是:
第1步:启动Microsoft Visual FoxPro6.0,进入“Microsoft Visual FoxPro”开发环境。
第2步:单击“文件”,单击“新建”,弹出“新建”窗口。
第3步:选中“项目”,单击“新建文件”按钮,弹出“创建”窗口。
第4步:把所有要开发的“学生成绩管理系统”项目保存在一个文件中,本系统保存在E:\学生成绩管理系统目录下,在“项目文件”里输入“学生成绩管理系统”,作为该项目的文件名。
在“存为类型”中选取“项目”,单击“保存”按钮,弹出“项目管理器”窗口。
(二)、数据库设计
1、怎样建立“学生成绩管理系统”中的数据库?
在Visual FoxPro6.0中,数据库由表、视图以及它们之间的关系集合而成。
创建一个新数据库的操作步骤如下:
第1步:在项目管理器窗口中,选中“数据”选项卡,单击选中“数据库”图标。
第2步:单击“新建”按钮,再单击“新建数据库”,弹出“创建”窗口,在“数据库名”框中输入“成绩库”,作为学生成绩管理的数据库文件名,在“存为类型”栏中,选中“数据库”,并将该文件保存在E:学生成绩管理系统\data中。
第3步:单击“保存”按钮,弹出“数据库设计器—成绩库”窗口,显示出了一空的数据库设计窗口,并且“数据库设计器”变为有效。
至此,我们创建了一个空的学生成绩管理数据库。
2、怎样创建数据库中的表?
下面我们在成绩库中创建学生表、考试库、课程表、用户。
(1)建立学生表
建立学生表的操作步骤如下:
第1步:在“数据库设计器”窗口的工作表中,单击鼠标右键,弱出一个“命令”菜单。
第2步:单击“新建表”,弹出“新建表”窗口。
第3步:单击“新建表”按钮,弹出“创建”窗口,在“保存在”框中,选中“data”文件夹,在“输入表中”中输入“学生表”,在“存为类型”框中,选中“表/DBF”。
第4步:单击“保存”按钮,弹出“表设计器—学生表.DBF”窗口,在“字段”选项卡中,输入学生表每个字段的字段名、类型、宽度、小数位数,完成表的结构。
第6步:单击“否”按钮,返回到“数据库设计器—成绩库”窗口。
至此,在“数据库设计器—成绩库”窗口中,可以看到创建了一个“学生表”。
(2)建立考试库、用户、课程表的操作方法跟建立学生表的操作方法相同。
(三)、模块设计
1、用户登录窗口功能模块
如果没有进行特殊设置,每次进入系统都将
显示登录界面(如右图),它对操作员进行口令
验证,防止非法用户进入系统,任意增加、修改
和删除数据。
在选择或输入用户并提供正确的密
码后,点“确定”按钮即可进入系统,点“取消”
放弃登录,退出系统。
如果不能提供正确密码,
在点“确定”按钮后会有相应提示,如果连续
三次都输入了错误的密码,系统将自行关闭。
2、用户设置模块,在本模块中了建立三个子模块,即添加用户、修改密码、删除用户。
(1)添加用户功能模块。
其程序代码如下:
Command1.click
use 用户 excl
public u1,pw1
u1=allt(thisform.text1.value)
pw1=allt(thisform.text2.value)
if empty(thisform.text1.value)
messagebox ("用户名不能为空!",48+0,"添加新
用户")
thisform.text1.setfocus
else
locate for allt(用户名)==u1
if found()
messagebox("用户名已经存在,请输入其他用户名!",48+0,"添加新用户")
thisform.text1.setfocus
else
if thisform.text2.value==thisform.text3.value
tempstr=''
for i=1 to len(trim(pw1))
tempchr=bitxor(asc(subs(pw1,i,1)),123)
tempstr=tempstr+chr(tempchr)
endfor
dimension b(1,2)
b[1,1]=u1
b[1,2]=tempstr
append from array b
messagebox("成功添加新用户!",64+0,"添加新用户")
release thisform
else
messagebox("请输入相同密码!", 48+0,"添加新用户")
thisform.text3.setfocus
endif
endif
endif
command2.click
release thisform
text3.KeyPress
LPARAMETERS nKeyCode, nShiftAltCtrl
if nkeycode=13&&enter
mand1.click
endif
(2)修改密码功能模块。
其程序代码如下:
Combo1.InteractiveChange
thisform.refresh
Text1.KeyPress
LPARAMETERS nKeyCode, nShiftAltCtrl
if nkeycode=13
mand1.click
endif
Command1.Click
public u
u=allt(bo1.value)
tempstr=''
for i=1 to len(allt(trim(thisform.text1.value)))
tempchr=bitxor(asc(subs(thisform.text1.value,i,1)),123)
tempstr=tempstr+chr(tempchr)
endfor
locate for allt(用户名)==allt(bo1.value) and allt(密码)==tempstr
if found()
do form changepw2
else
messagebox("密码有误,请重新输入!",48+0,"修改密码")
thisform.text1.setfocus
endif
Command2.Click
release thisform
Form1.Init
*main.ole1.simpletext=this.caption
use 用户 excl
Text2.KeyPress
LPARAMETERS nKeyCode, nShiftAltCtrl
if nkeycode=13&&enter
mand1.click
endif
Command1.Click
use 用户 excl
public pw
pw=allt(thisform.text1.value)
if pw==allt(thisform.text2.value)
tempstr=''
for i=1 to len(trim(pw))
tempchr=bitxor(asc(subs(pw,i,1)),123)
tempstr=tempstr+chr(tempchr)
endfor
loca for allt(用户名)==allt(u)
if found() then
repl 密码 with tempstr
release thisform
messagebox ("密码修改成功!",64+0,"修改密码")
endif
else
messagebox ("密码未被确认,请输入相同密码!", 48+0,"修改密码")
thisform.text2.setfocus
endif
Command2.Click
release thisform
Form1.Init
main.ole1.simpletext=this.caption
Form1.Unload
main.ole1.simpletext="修改密码"
release pw
return
(3)删除用户功能模块。
其程序代码如下:
Form1.Init
main.ole1.simpletext=this.caption
Combo1.InteractiveChange
thisform.refresh
Command1.Click
if reccount()<=1
messagebox("无法删除最后一个用户!",48+0,"删
除用户")
else
tempstr=''
for i=1 to len(trim(thisform.text1.value))
tempchr=bitxor(asc(subs(thisform.text1.value,i,1)),123) tempstr=tempstr+chr(tempchr)
endfor
locate for allt(用户名)==allt(bo1.value)
if found() and allt(密码)==tempstr
a=messagebox("确实要删除此用户吗",32+1,"删除用户")
if a=1
delete
pack
messagebox("成功删除用户!",64+0,"删除")
bo1.value=""
thisform.text1.value=""
endif
else
messagebox("密码有误,请重新输入!",48+0,"删除用户")
thisform.text1.setfocus
endif
endif
Command1.GotFocus
this.picture=mypath+"picture\删除focus.bmp"
Command1.LostFocus
this.picture=mypath+"picture\删除but.bmp"
Command2.Click
release thisform
Command2.LostFocus
this.picture=mypath+"picture\取消.bmp"
Command2.GotFocus
this.picture=mypath+"picture\取消focus.bmp"
Text1.KeyPress
LPARAMETERS nKeyCode, nShiftAltCtrl
if nkeycode=13
mand1.click
endif
3、数据处理模块
数据处理菜单下面的子菜单有:建立登分册和学生管理。
(1)建立登分册,是指建立考试的名称。
其程序代码如下:
Form1.Init
thisform.text1.setfocus
this.autocenter=.t.
Command1.Click
sjk=allt(thisform.text1.value)
if empty(sjk)
MESSAGEBOX("请输入考试名称")
thisform.text1.setfocus
return
endif
sjk="data\"+sjk
clear
set path to data
close data all
use 学生表 in a
copy to &sjk
use &sjk
use 课程表
jls=recc()
for i=1 to jls
use 课程表
kemu=科目
ALTER TABLE (sjk) ADD &kemu n(3)
close data all
endfor
ALTER TABLE (sjk) ADD 总分 n(4)
ALTER TABLE (sjk) ADD 班名 n(5)
ALTER TABLE (sjk) ADD 校名 n(5)
close data all
messagebox(sjk+"已建立",0,"成绩管理")
Command2.Click
use data\考试库
filedbf=allt(thisform.text1.value)+".dbf"
if file(filedbf) then
loca for allt(名称)==filedbf
if found()
messagebox("此考试库己存在!",0,"成绩管理")
else
appe blank
repl 名称 with filedbf
messagebox(filedbf+"也成功添加到考试库!",0,"成绩管理")
endif
else
messagebox("请先建立成绩表!",0,"成绩管理")
thisform.text1.setfocus
endif
Command3.Click
thisform.release
Command4.Click
daan=messagebox("此操作将清空考试库里的成绩项目!",4+32,"成绩管理") if daan=6 then
use data\考试库
endif
(2)学生管理。
主要负责录入学生的信息,如录入学生的学号、年级、班次、姓名和性别。
其程序代码如下:
Command1.Click
mand3.enabled=.t.
mand4.enabled=.t.
go top
thisform.refresh
this.enabled=.f.
mand2.enabled=.f.
thisform.grid1.setfocus
Command1.Refresh
if reccount()=0
this.enabled=.f.
endif
Command2.Click
mand3.enabled=.t.
mand4.enabled=.t.
skip -1
if recno()=1
go top
this.enabled=.f.
mand1.enabled=.f.
endif
thisform.refresh
thisform.grid1.setfocus
Command2.Refresh
if reccount()=0
this.enabled=.f.
endif
Command3.Refresh
if reccount()=0
this.enabled=.f.
endif
Command3.Click
mand1.enabled=.t.
mand2.enabled=.t.
skip +1
if eof()
go bottom
this.enabled=.f.
mand4.enabled=.f.
endif
thisform.refresh
thisform.grid1.setfocus
Command4.Refresh
if reccount()=0
this.enabled=.f.
endif
Command4.Click
mand1.enabled=.t.
mand2.enabled=.t.
go bottom
thisform.refresh
this.enabled=.f.
mand3.enabled=.f.
thisform.grid1.setfocus
Command5.Click
del=messagebox("清空此学生表中所有数据吗"
,32+4,"修改记录")
if del=6 then
use in 学生表
use data\学生表 excl
zap
use data\学生表 share
endif
Command6.Click
Thisform.closable=.F.
del=messagebox("添加学生吗",32+4,"添加记录")
if del=6
xingm=allt(thisform.text1.value)
xingb=bo1.value
nianj=bo2.value
banc=allt(thisform.text3.value)
if not empty(xingm) and not empty(xingb) and not empty(nianj) then calc max(学号) to xiaoh
appe blank
repl 姓名 with xingm
repl 性别 with xingb
repl 年级 with nianj
repl 班次 with banc
repl 学号 with allt(str(val(xiaoh)+1))
else
messagebox("任何一项不能为空!",0,"添加记录")
thisform.text1.setfocus
return
endif
thisform.grid1.recordsource=""
thisform.grid1.recordsource="学生表"
thisform.refresh
endif
thisform.grid1.setfocus
Command9.Click
del=messagebox("删除当前记录吗",32+4,"删除记录")
if del=6
nrec=recn()
thisform.grid1.recordsource=""
use in 学生表
use data\学生表 excl
thisform.text1.value=recn()
go nrec
delete
pack
if nrec>recn()
go nrec-1
else
go nrec
endif
thisform.refresh
thisform.grid1.recordsource="学生表"
thisform.grid1.recordsourcetype=1
thisform.grid1.setfocus
endif
Command9.Refresh
if reccount()=0
this.enabled=.f.
endif
Command7.Refresh
if reccount()=0
this.enabled=.f.
endif
Command7.Click
Thisform.closable=.F.
del=messagebox("修改此学生信息吗",32+4,"修改记录")
if del=6
xingm=allt(thisform.text1.value)
xingb=bo1.value
nianj=bo2.value
banc=allt(thisform.text3.value)
xiaoh=allt(thisform.text2.value)
if not empty(xingm) and not empty(xingb) and not empty(nianj) then repl 姓名 with xingm
repl 性别 with xingb
repl 年级 with nianj
repl 班次 with banc
repl 学号 with allt(str(val(xiaoh)+1))
else
messagebox("任何一项不能为空!",0,"修改记录")
thisform.text1.setfocus
return
endif
thisform.refresh
endif
thisform.grid1.setfocus
Thisform.refresh
Combo1.Init
this.value=this.list(1)
Combo2.Click
thisform.text2.value=this.value
Combo2.Init
this.value=this.list(1)
Text1.GotFocus
thisform.text1.value=姓名
bo1.value=性别
bo2.value=年级
thisform.text3.value=班次
thisform.text2.value=学号
Text1.Click
thisform.text1.value=姓名
bo1.value=性别
bo2.value=年级
thisform.text3.value=班次
thisform.text2.value=学号
Text1.GotFocus
thisform.text1.value=姓名
bo1.value=性别
bo2.value=年级
thisform.text3.value=班次
thisform.text2.value=学号
Command10.Click
del=messagebox("此操作将更新原来所有的学号",32+4,"批量添加学号")
if not del=6
return
endif
xiaoh=allt(thisform.text4.value)
numt=.t.
if len(xiaoh)<>8 then
messagebox("现在学号的长度为"+allt(str(len(xiaoh)))+"位长度必须为8位",0)
return
endif
if subs(xiaoh,1,1)="0"
messagebox("学号第一位不能为0",0)
return
endif
for i=1 to len(xiaoh)
if not ISDIGIT(subs(xiaoh,i,1))
numt=.f.
exit
endif
endfor
if not numt then
messagebox("学号必须为数字!",0)
return
endif
repl all 学号 with allt(str(val(xiaoh)+recn()-1))
Text4.Init
this.value=allt(str(year(date())))+"0001"
Command8.Click
release thisform
4、成绩输入。
该模块的主要功能是负责录入学生的成绩,并且可以选择要输入成绩的科目。
其程序代码如下:
Form1.Init
this.autocenter=.t.
Command1.Click
mypath=sys(5)+sys(2003)
zaigrid=.f.
if empty(thisform.list1.value)
messagebox("请选择成绩表!
",0,thisform.list1.value)
return
endif
sjk=mypath+"\data\"+thisform.list1.value
use &sjk
thisform.release
do form shuru1
shuru1.show
Command2.Click
thisform.release
List1.Init
close data all
if used("考试库") then
use in 考试库
endif
use "data\考试库.dbf"
for i=1 to recc()
go i
this.additem (名称)
endfor
this.value=this.list(1)
use in 考试库
Form1.Init
thisform.cont.setall("value",1)
thisform.width=750
this.autocenter=.t.
*this.showwindow=2
Command1.Click
mypath=sys(5)+sys(2003)
zaigrid=.f.
*close data all
*sele b
FOR EACH oProj IN thisform.objects
if upper()=upper("grid1") then thisform.removeobject("grid1")
endif
ENDFOR
thisform.addobject("grid1","grid")
thisform.grid1.visible=.f.
with thisform.grid1
*.recordsource=JUSTFNAME(sjk)
*RecordSourceType=2
.top=100
.left=10
.width=thisform.width-40
.height = 250
*.column1.enabled=.f.
check=""
FOR I=1 TO THISFORM.cont.ControlCount
if THISFORM.cont.Controls(i).value=1
check=check+" "+THISFORM.cont.Controls(i).caption
endif
endfor
for i=1 to .ColumnCount
if .columns(i).header1.caption$check
.columns(i).enabled=.t.
else
.columns(i).enabled=.f.
endif
endfor
endwith
thisform.grid1.visible=.t.
thisform.grid1.setfocus
thisform.refresh
mand3.enabled=.t.
mand4.enabled=.t.
Command2.Click
use
thisform.release
Command3.Click
daan=messagebox("此操作将要清空已输入成绩中的所有数据!",32+4,"清空数据")
if daan=7 then
return
endif
check="语文数学英语物理化学生物地理政治历史"
for i=1 to fcount()
if fiel(i)$check then
kemu=fiel(i)
repl all &kemu with 0
endif
endfor
Command4.Click
daan=messagebox("此操作将要清空已输入成绩中的所有数据,并产生测试数据!",32+4,"测试")
if daan=7 then
return
endif
check="语文数学英语物理化学生物地理政治历史"
for i=1 to fcount()
if fiel(i)$check then
kemu=fiel(i)
repl all &kemu with rand()*100
endif
endfor
5、成绩管理。
该模块的主要功能是对学生成绩的核算,总分、排名。
其程序代码如下:
Command1.Click
CLOSE data all
mypath=sys(5)+sys(2003)
sjk=mypath+"\data\"+thisform.list1.value
IF file(sjk)
IF DATE()-FDATE(sjk)>=0
tianshu=allt(str(date()-
FDATE(sjk)))
Message="此表修改的日期离今天有"+tianshu+"天"
MESSAGEBOX(message,0)
daan= MESSAGEBOX("数据库表正确吗(y/n)",4+32,"hao")
ELSE
daan=6
ENDIF
* ENDIF
IF daan=6
ELSE
MESSAGEBOX("",0,"数据库表不对,请重新打开")
return
CLOSE all data
ENDIF
ELSE
MESSAGEBOX("",0,"数据库表不存在,请打开数据库!")
return
ENDIF
SET excl on
* close data all
SET safe off
SET talk off
USE &sjk &&下面这段程序排班名
zonghe=""
for i=1 to fcount()
if fiel(i)$"语文数学英语物理化学生物地理历史政治"
zonghe=zonghe+"+"+fiel(i)
endif
endfor
if empty(zonghe)
messagebox("没有找到单科成绩字段,请重新打开数据库!",0,"成绩管理")
return
else
zonghe=allt(zonghe)
zonghe=subs(zonghe,2)
endif
wait zonghe
REPL all 总分 with &zonghe
USE &sjk &&下面这段程序排班名
SORT on 班次,总分/d to abcdexyz_.dbf
USE abcdexyz_.dbf
COPY to &sjk
USE &sjk
repl all 班名 with 0
ERAS abcdexyz_.dbf
GO 1
qsb=班次
do while .t.
N=1
DO while .t.
REPL 班名 with n
skip
N=n+1
IF 班次<>qsb
qsb=班次
EXIT
ENDIF
ENDDO
IF eof()
EXIT
ENDIF
enddo
&&结束排班名
&& 下面排校名
USE &sjk
SORT on 总分/d to abcdexyz_.dbf USE abcdexyz_.dbf
REPL all 校名 with recn() SORT on 班次,校名 to &sjk
USE &sjk
&& 结束排校名。