VFP课程设计脚本范例.docx
VFP课程设计脚本设计范例利用项目管理器组织、设计并连编一个学生成绩管理系统应用程序。要求如下:1.系 统由数据库、表单、报表、菜单和程序组成;2.系统中有一个数据库,数据库中包括三个 数据表:学生表、课程表、成绩表,学生表中包括4个班,每个班35名学生,课程表中包 括4门课程,成绩表至少有20条记录;3.系统能够通过菜单实现数据维护、浏览、查询、 报表、退出等基本功能;可以自行设计使系统具有更强的功能;4.要求应用程序主窗口拥 有非VFP系统默认的标题和图标,进入系统时应设置具备口令检查功能的主界面,该口令在 进入系统后可以通过菜单中的相关命令来修改;5.项目中所有文件名均应冠以自己的姓名 (中文或拼音均可),以免与其他同学混淆。附:数据库要求一览表(1)建立三张数据表,其要求如下表所示:表 名字段名字段类型与 长度字段规则与说 明默认值标题学 生 表XHC(8)81991001学号XMC(8)姓名XBC(2)性别只能是 男或女女性别CSRQD年龄在18至 22岁之间出生年月BJC(10)班级课程 表KCHC(4)课程编号KCMC(14)课程名称XFN(3,1)学分大于0"1学分JSC(8)任课教师成绩表XHC(8)学号KCHC(4)课程号CJN(5,1)成绩大于0"60成绩(2)建立索引:数据表名称索引名称索引类型索引表达式学生表No主索引XHName普通索引XM课程表Sub_No主索引KCHSub_name普通索引KCM成绩表Student主索引XH+KCH+STR(CJ,4,1)Mark普通索引CJ(3) 建立学生表与成绩表、课程表与成绩表的关联,关键字是分别是XH字段和KCH字段。VFP 课程设计指导编目行试愕 连项进调和改桐览加代 码,并编制相 关的程 收件 和查询计览单观用单计设浏表外表设器计御单在单计中数环设查表1表设器用据境计本出表先向,完设基输报用导做再善计本入单先向 ,完设基输表用导做再善设计系统菜单设计主界面设计主程序定的设表输,引关 确库,据,录索久 据成数构记立永1 库数组计结A建和系规确统功实形,项件统系本和的主文系划定基能现式费目注意:(1)所有文件放在同一个文件夹中,只在主程序中给出其路径,其它地方调用时一律只写文件名;(2) 项目中用到的所有图片、可视类库文件都应复制到该文件夹中,以免项目移动后找不到; 添加代码时要细心,膛免产生语怯错误和文件名不一致的问题。VFP禧雀段开稽构框图报 表系统维护实既功能:open数据库,use各数据表,翊宙敏现调出表设计器,对各表结构进行修改。XS表,KC表,CJ表迎功能:do form执行各表单,通过表单来实现 表中记录的更新(修改、删除、增加)。XS 械,KC 坯,CJ 坯实51功能;modi foim调出表单设计器,对各表单进行修改(如:更改外观、添加控件)。xsm, kc 建,cjm浏 览查查询学生-J撤询成绩棉生一览表!漫程一览表甘成绩一览表实现功能:do form执行查询表单,这两个表单都是用数据环境直接生成表格,再添加一个查找按钮即可。实®功能:mo(U report修改报表,"咳嗥课退出行退出表单或直接用命令退出均可。VFP课程设计难点分析之一主界面和退出表单的设计一.主界面的设计1.(1)Name = Form1Caption = 主界面Picture = "sj128.bmp"Icon = 大自然.ico“Height = 454MaxButton = .F.WindowType = 0AutoCenter = .T.Width = 633MinButton = .F.WindowState = 0Closable = .F.(2)命令按钮:共有三个命令按钮,其属性分别如下:Name = “Command1“Name = “Command2“Name = “Command3“Caption = 开始Caption = 确 定“Caption = 退出Visible = .F.(3)文本框:1个,用来接受口令,其主要属性为:Name = "Textl"PasswordChar = *(4)标签:共2个,一个显示设计者,一个用来提示输入口令,其主要属性分别为:Name = “Label1“Name = “Label2“Caption = "Designed by Shi Jun “Caption = 请输入口令:Visible = .F.(5)时钟控件:共3个,Timer1用来控制Image2和Image3的移动,另2个用来控制Lablel1 的颜色变化。Name = "Timerl"Name = "Timer2"Name = "Timer3"Interval = 200Interval = 1230Interval = 843(6)图象控件:共3个,Imagel是图片显示的主标题,另2个是欢迎图片。Name = "Imagel"Name = "Image2"Name = "Image3"Picture =”标 题.bmp”Picture = "welcome.bmp"Picture = "welcome.bmp"(7)多媒体控件:在主界面表单运行过程中用来播放背景音乐。Name = "SoundPlayerl”SoundFile="D:SJRVFP 课程设计FIVE.MID”2.事件代码:commandl 的 Click事件THISFORM.LABEL3.VISIBLE二.T.THISFORM.TEXTl.VISIBLE二.T.THISFORM.COMMANDl.VISIBLE二.F.THISFORM.COMMAND2.VISIBLE二.T.command2 的Click事件IF UPPER(THISFORM.TEXTl.VALUE)二passwDO主菜单.MPRTHISFORM.RELEASEELSEMessageBox(" 口令不对,您无权使用本系统! ", 0+l6+0," 设置口令)THISFORM.REFRESHENDIFcommand3 的 Click事件clear eventsset sysmenu to defaTHISFORM.RELEASEtimerl 的 Timer事件if thisform.image2.left<0thisform.image2.visible=.f.thisform.image3.visible=.t.thisform.image3.left=thisform.image3.left+l0if thisform.image3.leftthisform.widththisform.image3.widththisform.image3.visible=.f.thisform.image2.visible=.t.thisform.image3.left=0thisform.image2.left=thisform.width-thisform.image2.widthendifelsethisform.image2.left=thisform.image2.left-10endiftimer2 的 Timer事件thisform.label5.forecolor=rgb(255,0,0)timer3 的 Timer事件thisform.label5.forecolor=rgb(0,0,255)1.退出表单的组成对象Name = Form1Caption = 退出系统"Picture = "sj038.bmp"Icon = 大自然.ico“Height = 454MaxButton = .F.WindowType = 0AutoCenter = .T.Width = 633MinButton = .F.WindowState = 0Closable = .F.(1)表单:其主要属性的设置如下:二.退出表单的设计(2)标签:共7个,属性如下:Name =“Label1“Label2"Label3Label4Label5Label6Label7Caption =欢迎你/J、再次使用Visible = .F.(3) 时钟控件:1个,控制标签的依次出现。Name = "Timerl"Interval = 600(4) 图象控件:1个,控制表单的退出,起退出按钮的作用。Name = "Imagel"Picture = "D:SJRVFP 课程设计quitcmdr.bmp"2.事件代码:表单的Activate事件public i,ji=1Image1 的 Click 事件nA=MessageBox("真想退出本系统吗?",4+32+0,'退出系统')if nA=6clear eventsquitelsethisform.releaseendifLabel1 的 Click 事件if i=8for k=1 to 7j=str(k,1)thisform.label&j.visible=.f.endfori=1elsej=str(i,1)thisform.label&j.visible=.t.do while i<8i=i+1exitenddoendifTimerl 的 Timer 事件thisform.labell.clickVFP课程设计难点分析之二浏览成绩表单的设计一.表单的组成对象本表单由一个包含3个页面的页框组成,主要用来浏览成绩表中的统计信息。1.表单主要属性为:Name = "browecj"Caption = 浏览成绩情况Icon = 大自然.ico“AutoCenter = .T.2.页框主要属性为:Name = Pageframe1PageCount = 3Pagel.Name = "Pagel"Page2.Name = Page2Page3.Name = Page3Pagel.Caption = 学生成 绩概况Page2.Caption = 按班 级浏览Page3.Caption = 按课程 浏览(1)页面1的组成:男生女生计律机 (3)页面3的组成面中组合框的主要属性为1RowSourceType = 1S02英语王者师3. 0 73. 00体育马老师4. 5 93. 00S045. 0 91. 005 76. 0099英教19 9英教299央1吾课程号|课程名祢任课教师学分平均分是高分最低分计算机刘老师3. 5 73.40大学语文卢老师5 73.405 74.805 69. 20am="Combol".|班级名称|班缀人数平均分最高分最值分J|990浏览成绩情况浏览成绩情况冬灌季*成授竟表学生成绩概况班级名称:学生成绩概况按班级浏览按课程浏览备门落擘生戒插整素按班级浏览技课程浏览最低分:J课程名林:平均分:最高分RowSource ="计算机,英语,体育,大学语文“二.事件代码do sumcj.prg页框 pageframel 中Pagel 的 Activate事件thisform.pageframe1.page1.text1.value=c1thisform.pageframe1.page1.text2.value=c2thisform.pageframe1.page1.text3.value=c3thisform.pageframe1.page1.text4.value=c4thisform.pageframe1.page1.text5.value=c5thisform.pageframe1.page1.text6.value=c6thisform.pageframe1.page1.text7.value=c7page2中组合框 combol 的InteractiveChange 事件cc1=this.valuedo clacj.prgthisform.pageframe1.page2.text2.value=cc2thisform.pageframe1.page2.text3.value=cc3thisform.pageframe1.page2.text4.value=cc4do cla_cj.qprthisform.pageframe1.page2.grid1.recordsource=class_cj”thisform.pageframe1.page2.refreshpage3中组合框 combol 的InteractiveChange 事件sc1=this.valuedo subcj.prgthisform.pageframe1.page3.text2.value=sc2thisform.pageframe1.page3.text3.value=sc3thisform.pageframe1.page3.text4.value=sc4do sub_cj.qprthisform.pageframe1.page3.grid1.recordsource="sub_cjthisform.pageframe1.page3.refresh三.程序文件和查询文件的内容clacj.prgcla_cj.qprcalculate avg(cj) to clcalculate avg(cj) for xb="男 to c3calculate avg(cj) for xb="女 to c4calculate avg(cj) for bj="99 英教 2" to c2calculate avg(cj) for bj="99 英语"to c5calculate avg(cj) for bj="99 英教 1" to c7calculate avg(cj) for bj="99 日语”to c6 use close data public cc2,cc3,cc4open data 数据 testuse xscjset filter to bj=cc1calculate avg(cj) to cc2calculate avg(cj) for xb="男”to cc3calculate avg(cj) for xb="女”to cc4 set filter to useSELECT表cj.kch AS课程号,表kc.kcm AS课程名称,;表kc.js AS任课教师,表kc.xf AS学分,AVG(表cj.cj) as平均分,MAX(表 cj.cj) as 最高分,MIN(表 cj.cj) as 最低分;FROM 数据 test!表 xs INNER JOIN 数据 test!表 cj;INNER JOIN 数据 test!表 kc ;ON 表 kc.kch =表 cj.kch ;ON 表 xs.xh =表 cj.xh;WHERE 表 xs.bj = CC1;GROUP BY 表 cj.kch;ORDER BY 表 cj.kch;INTO TABLE class cj.dbfsubcj.prgclose datapublic sc2,sc3,sc4open data 数据 testuse xscjset filter to kcm=sc1calculate avg(cj) to sc2 calculate max(cj) to sc3 calculate min(cj) to sc4 set filter tousesub_cj.qprSELECT表xs.bj AS班级名称,COUNT(表xs.xh) as班级人数,;AVG(表 cj.cj) as 平均分,MAX(表 cj.cj) as 最高分,;MIN(表 cj.cj) as 最低分;FROM 数据 test!表 xs INNER JOIN 数据 test!表 cj;INNER JOIN 数据 test!表 kc ;ON 表 kc.kch =表 cj.kch ;ON 表 xs.xh =表 cj.xh;WHERE 表 kc.kcm = SC1;GROUP BY 表 xs.bj;ORDER BY 表 xs.bj;INTO TABLE sub_cj.dbfVFP课程设计难点分析之三一浏览学生表单的设计一.表单的组成对象本表单由一个包含2个页面的页框组成,主要用来浏览成绩表中的统计信息。1.表单 主要属性为:Name = "browexs"Caption = 浏览学生情况Icon ="大自然.ico“AutoCenter = .T.2.页框 主要属性为:(1)页面1的组成:Name = "Pageframel"PageCount = 2Pagel.Name = "Pagel"Page2.Name = "Page2"Pagel.Caption ="全体学生概况“Page2.Caption 各班学生基本情况RowSourceType = 1RowSource = "99英语,99日语,99英教1,99英教2二.事件代码pageframel 中 Pagel 的 Activate 事件Page2 中 combo1 的 InteractiveChange 事件do sumstud.prgthisform.pageframe1.page1.text1.valu e=s1thisform.pageframe1.page1.text2.value=s2thisform.pageframe1.page1.text3.value=s3thisform.pageframe1.page1.text4.value=s4thisform.pageframe1.page1.text5.value=s5thisform.pageframe1.page1.text6.value=s6thisform.pageframe1.page1.text7.value=s7cs1=this.valuedo clastud.prgthisform.pageframe1.page2.text2.value=cs2thisform.pageframe1.page2.text3.value=cs3thisform.pageframe1.page2.text4.value=cs4do student.qprthisform.pageframe1.page2.grid2.recordsource="xs”thisform.pageframe1.page2.refresh三.程序文件和查询文件的内容sumstud.prgclastud.prgstudent.qprclose dataclose dataSELECT 表 xs.xh as 学号,;public s1,s2,s3,s4,s5,s6,s7public cs2,cs3,cs4表xs.xm as姓名,;open data 数据 testopen data 数据 test表xs.xb as性别,;use 表 xsuse 表 xs表xs.csrq as出生日期,;count to s1set filter to bj=cs1表xs.bj as班级;count for xb=男 to s3count to cs2FROM 数据 test!表 xs;count for xb=女 to s4count for xb="男”to cs3WHERE 表 xs.bj =cs1;count for bj="99 英教 2" to s2count for xb="女”to cs4ORDER BY 表 xs.xh;count for bj="99 英语”to s5set filter toINTO TABLE xscount for bj="99 英教 1" to s7 usecount for bj="99 日语"to s6useVFP课程设计难点分析之四一一设置口令表单集的设计1.表单集Formsetl的组成对象:(1)检查密码表单:其主要属性的设置如下:Name = "Formcheck"Caption = 检查密码Icon = 大自然.icoHeight = 210WindowState = 0AutoCenter = .T.Width = 380Visible = .T.BackColor =RGB(0,128,128)形 状:1 个,主要属性为:Name = "Shape1" Curvature=20文本框:1个,用来接受所输入的密码,其主要属性为:Name = "Text1" PasswordChar = *标签:1个,主要属性为:Name = Label1 Caption = 请输入系统密码:命令按钮:2个,“确定”按钮的功能调用“修改表单”来修改系统中的所有表单,“修改”按钮的功能是调用“授权修改”表单来修改系统密码:Name = "CMDcheckconfirm"Name = "CMDchange"Caption ="确定"Caption ="修改"(2)授权修改表单:其主要属性的设置如下:Name = "Formaw"Caption ="授权修改"Icon ="大自然.ico"Height = 210Visible = .F.AutoCenter = .T.Width = 380WindowState = 0BackColor = RGB(0,64,64)形 状:1 个,主要属性为:Name = "Shapel" Curvature=20文本框:1个,用来接受所输入的密码,其主要属性为:Name = "Textl" PasswordChar = "*"标 签:1个,主要属性为:Name = "Label1" Caption ="请输入授权密码:命令按钮:1个,其功能是调出修改密码表单,Name = "CMDawconfirm" Caption ="确定(3)修改密码表单:其主要属性的设置如下:Name = "Formchange" Caption ="修改密码" Icon ="大自然.ico"Height = 250AutoCenter = .T.Visible = .F.Width = 375WindowState = 0BackColor = RGB(128,0,64)标签:2个,分别为:Name = "Label1"Name = "Label2"Caption ="请输入新的系统密码:"Caption ="请确认所输入的密码:"形 状:1 个,主要属性为:Name = "Shapel" Curvature=20文本框:2个,用来接受所输入的新密码,其主要属性为:Name = "Text1"Name = "Text2"PasswordChar = "*"PasswordChar = "*"ForeColor = RGB(0,0,255)ForeColor = RGB(255,0,0)BackColor = RGB(255,255,255)BackColor = RGB(255,255,255)命令按钮:2个,“确定”按钮的功能是将新密码写入密码表,“返回”按钮的功能是退回到第一张表单:Name = "CMDchangconfirm"Name = "CMDreturn"Caption ="确定"Caption ="返回"2.事件代码cmdcheckconfirm的Click事件if upper(alltrim(thisform.text1.value)=passw+"0" thisformset.release do form修改表单 elseMessageBox("密码不对,你无权修改本系统表单!",0+16+0, ' 口令检查') if n<3 n=n+1 thisform.refresh else thisformset.releaseendifendifcmdchange 的Click事件thisform.visible=.f.thisformset.formaw.visible=.t.cmdawconfirm的Click事件if upper(alltrim(thisform.text1.value)=passw+9thisformset.formchange.visible=.t.thisform.visible=.f.elseMessageBox("密码不对,你无权修改本系统口令!,0+16+0, ' 口令检查') thisformset.releaseendifcmdchangconfirm的Click事件IF thisform.Text2.value!= " .and. thisform.Text1.value=;thisform.Text2.valuepassw=upper(alltrim(thisform.Text2.value)MessageBox("密码修改成功!,0+64+0,设置密码)use passw.dbfappend blankreplace password with passwreplace changedate with date() usethisformset.releaseelseMessageBox(密码有错,请重新输入!,0+16+0,输入密码) thisform.refreshendifcmdreturn的Click事件thisform.visible=.f.thisformset.formcheck.visible=.t.7.主菜单组成学生成绩管理系统系统维护促)浏览但)查询Q)报表© 帮助QI)退出遂) 建®学生表0)疑护表记录虹 课程表(B)修改表单G成绩表(cF学生成绩管理系统系统维护曷 浏览 查询Q)报表© 帮助QI)退出Q0学生一览表打印预览冬) 页面设置(V) 打印课程一览表1成绩一览表