最新VF课程设计点名系统-VF课程设计-VisualFoxPro课程设计-VFP课程设计.doc

上传人:1595****071 文档编号:48044401 上传时间:2022-10-04 格式:DOC 页数:70 大小:584.50KB
返回 下载 相关 举报
最新VF课程设计点名系统-VF课程设计-VisualFoxPro课程设计-VFP课程设计.doc_第1页
第1页 / 共70页
最新VF课程设计点名系统-VF课程设计-VisualFoxPro课程设计-VFP课程设计.doc_第2页
第2页 / 共70页
点击查看更多>>
资源描述

《最新VF课程设计点名系统-VF课程设计-VisualFoxPro课程设计-VFP课程设计.doc》由会员分享,可在线阅读,更多相关《最新VF课程设计点名系统-VF课程设计-VisualFoxPro课程设计-VFP课程设计.doc(70页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateVF课程设计点名系统-VF课程设计-VisualFoxPro课程设计-VFP课程设计课程设计说明书模版点名系统方案设计1、课程设计的目的数据库基础及应用是一门实用性很强的学科,是进行软件开发的主要基础。只有进行实际操作,才能将理论知识和实际应用有机地结合起来,锻炼学生分析解决问题得能力,提高学生实际运用的技能,为日后工作中的软件开发打下良好的基础。VFP是微软公司推出

2、的关系型数据库管理系统,它是一种地形的第四代计算机语言,VFP全面支持可视化编程和面向对象的编程,是最为使用的数据库管理系统和中小型数据库应用系统的软件开发之一,它为数据库结构和应用软件开发而设计,是功能强大的面向对象的软件。本课程设计结合数据库内容,运用VFP设计,使学生掌握数据库基础内容。2、需求分析2.1需求在大学课堂中,课堂提问是上课环节中不可缺少的部分,也是教师与学生课堂互动,交流,最直接的方式。但在大学的课堂中缺存在一些问题。对于学生来说,现在在大学生心理普遍的思想是:“千万别点我!”,一旦被老师点到则:“哎呀妈呀!今天点子真背!那么多人,怎么就点到我了呢?!。还有一种情况就是,有

3、些同学每节课都被提问,有些同学整个学期都得不到一次提问机会。 对于教师来说,同样存在一些提问上的问题。老师每次提问之前都会拿着点名表看了又看:“点谁好呢?”面对几百人的课堂想在其中“公平的”选出回答问题的同学,这是令我们教师非常头疼的事情。针对上述问题,提出程序设计需求如下:(1)此程序可以公平的选出提问的同学(2)此程序可以排除掉已经被提问过的同学(3)此程序可以从提问次数少的同学中选一同学(4)此程序可以为多个班级的同学提供点名服务(5)此程序最后可以打印出一个学期整体提问次数和分数(6)此程序可以提供最多的点名次数不少于15次2.2分析首先,内部程序需要班级名次表作为点名表;对于公平的提

4、问这一需求,可以使用VF自带的随机数函数,随机数函数可以返回一个随机值,将这个随机值作为学号来进行提问。每个班级每节课都配置一张提问表,这样就可以为多个班级多个课程提供点名服务。其次,对于“排除提问过的同学”这一需求可以这样满足:将点名表增加一个特殊的字段,把提问过的同学对应的字段做标记,用判断语句判断如果特殊字段已经做了标记则下次不在提问。对于“从提问次数少的同学中选一个”需求可以这样满足:在点名表中增加一个次数字段,每次点名到时,将次数字段增加1次,点名时先中表中找到次数字段最少的同学提问,在使用随机函数随机选出一名同学。最后,在程序中增加报表功能,报表中包括次次数、总分等满足需求,对于“

5、次数不少于15次”的需求,可以将表增加序列次数字段,每次提问都将获得的分数存放到相应的次数中。3、设计方案论证3.1系统结构3.2核心算法3.2.1随机数算法在本程序中多次用到了随机函数,在VF中的rand()函数只能返回(0,1)之间的随机数,并不能返回我们需要的“学号”,因此我们必须对rand()函数做适当的操作,使其返回我们需要的“学号”。分析,假如一个班级有40名同学,那么随机数算法给我们返回的数的范围一定是在040之间。假如一个班级有100名同学,那么随机数算法给我们返回的数的范围一定是在0100之间。因此根据数学算法,将rand()进行变形。X=int(10000*rand()%(

6、max-mix)+mix)其中,max为序列的最大值,mix为序列的最小值,X为返回的随机数。如,一个班级有40人,则max的值就为40,mix的值就为1。则X返回的随机数一定在040之间。3.2.2随机查找算法在随机输出“学号”时,有一种情况是我们没有考虑到的:当2个或者很多个同学回答的都没被提问过。换句话说,有n个同学的次数字段相同!那么我们就需要从这些回答次数相同的同学中随机的选择一个!具体算法程序如下,其中X为查找的次数字段。located for cishu=Xif found()skip int(10000*rand()%(mixx-1)+1)contendifif found()

7、显示此名同学的信息,定位指针elsego toplocated for cishu=0if found()显示此名同学的信息,定位指针endifendif下面的流程图会帮助理解随机查找算法图1:随机查找算法流程图3.2.3中介表思想在需求中教师不只是教一个班级,还有很多个班级,很多课要教,对点名模块的设计绝对不能只对一个表操作,一定要有很多张表,且可以随意切换,用户选择哪张表,就点哪张表内的同学。首先,将用户选择的表所对应的表名存进一张“中介表”中;点名时在从“中介表”中“拿”出对应的表名,再在点名模块中打开这张表进行操作,思想体现如下:biao=thisform.text1.valueuse

8、 mediatablereplace c with biao其中,biao中存放的是用户想点名的表的名字;mediatable为“中介表”;将biao中的内容存放在mediatable的C字段中,每次在使用点名模块点名的时候,都必须打开所有对应的表。use mediatablebiao=cclose mediatable use &biao点名主程序3.2.4临时表和数据环境问题在生成报表设计时,通过用户输入想生成报表的点名表的表名生成报表。但点名表都是用户自行创建的,此表当然也不在数据环境中,报表操作时,表必须在当前的数据环境中,为了解决这一问题,可以将“临时表”、“中介表”思想联合到一起,

9、首先新建一个名为“baobiao“的报表和一个叫“baobiao”的临时表,将表“baobiao“加入当前数据环境中,生成报表时运行如下代码:set talk off set safety offbiao=thisform.text1.valueuse baobiaodele all &逻辑删除所有记录zap &物理删除所有记录append from &biao fields xh,xm,cishu,zongfen &追加表项report form baobiao to print preview &浏览报表thisform.releaseuse &biao首先将表“baobiao“的内容删除

10、,然后将用户选择的表中相关字段的内容加载到报表“baobiao“中,并浏览报表“baobiao“中的内容。3.3表结构设计3.3.1 Student 表1:student表结构字段名类型宽度备注xhXmcishuFirstSeconddfourthzongfen数值型字符型数值型数值型数值型数值型数值型81032223用于存放学生的学号用于存放学生的姓名用于存放回答次数用于存放回答次数用于存放回答次数用于存放回答次数用于存放总分3.3.2 Login表2:login表的结构字段名类型长度备注namepassword字符字符1010用于存放用于的登录名用于存放登录的密码3.3.2mediatab

11、le表3:mediatable的结构字段名类型长度备注ABCD字符字符字符字符10101010用于存放中介变量的临时字段用于存放中介变量的临时字段用于存放中介变量的临时字段用于存放中介变量的临时字段3.4表单设计3.4.1登录框图2:登录框的表单设计其中的控件信息如下表所示:表4:登录框模块中的控件控件名属性名属性值备注Label1Label2Text1captionCaption用户名密码提示输入用户名提示输入密码Value接收用户名续表4:Test2Command1Command2Command2valueCaptionCaption登录清除接收用户密码登录按钮清除按钮Caption退出退

12、出按钮以下是登录框各个按钮的click事件:表5:登录框代码表登录清除退出name=alltrim(thisform.text1.value)password=alltrim(thisform.text2.value)use login &在login表里查找locate for login.name=name and login.password=passwordif found()thisform.releasedo form 主页面 &打开主页面elsemessagebox(用户名或密码不正确,提示)thisform.text2.value=thisform.text1.value=th

13、isform.text1.setfocusEndifthisform.text1.value=thisform.text2.value=Thisform.release3.4.2普通点名图5:普通点名的表单设计单击“下一个”按钮,可以显示随机函数返回的随机数。“下一个”按钮的click事件代码为:use mediatablego topa0=val(mediatable.a) &将从中介表接收的值存进当前变量b0=val(mediatable.b)thisform.label1.caption=alltr(str(10000*rand()%(b0-a0)+a0) &随机数算法3.4.2普通设置

14、图6:普通设计的表单设计 此表单可以将起始值,终止值存如程序中,单击“确定”按钮,完成设置。“确定”按钮的click事件的代码为:aa=thisform.text1.valuebb=thisform.text2.valuereplace a with aa &将获得的初始值存进表中replace b with bbmessagebox(设置成功,提示)thisform.release3.4.3高级点名图7:高级点名的表单设计 单击“随便选一个”按钮可以随机挑选一名同学。“随便选一个”按钮的click事件代码为:use mediatable biao=c thisform.label6.capt

15、ion=正在使用+allt(mediatable.c)+表 &显示当前使用的表 use mediatable xh=0 publ X use &biao &利用宏替换打开表 mixx=recc() &将表中的记录数赋给变量mixx x=int(10000*rand()%(mixx-1)+1) &随机产生随机数 locate for xh=xif found() thisform.label1.caption=请+allt(str(xh)+号+allt(xm)+同学回答问题 replace cishu with cishu+1 &将表中的cishu字段+1 thisform.label2.cap

16、tion=请为+allt(str(xh)+号同学打分 thisform.label5.caption=未打分 endif pingjun=(first+secondd+third+fourth+fifth+sixth+seventh+ +thirtieth)/30 int(pingjun) &计算平均分 thisform.label3.caption=这名同学已经获得+allt(str(cishu)+次提问的机会,平均分为+allt(str(pingjun)+分 单击“从没点到的同学选一个”按钮可以随机挑选出一个同学。“从没点到的同学选一个”按钮的click事件代码为:use mediatab

17、lebiao=mediatable.cthisform.label6.caption=正在使用+allt(mediatable.c)+表use mediatablexh=0use &biao &利用宏替换打开表 go topmixx=recc() &将表中的记录数赋给变量mixxstr(10000*rand()%(mixx-1)+1) &随机产生随机数loca for cishu=0if found()skip int(10000*rand()%(mixx-1)+1) &向下条随机数个记录contendifif found() thisform.label1.caption=请+allt(st

18、r(xh)+号+allt(xm)+同学回答问题 replace cishu with cishu+1 thisform.label2.caption=请为+allt(str(xh)+号同学打分 thisform.label5.caption=未打分elseendifpingjun=(first+secondd+third+fourth+fifth+sixth+seventh+eighth +thirtieth)/30int(pingjun)thisform.label3.caption=这名同学已经获得+allt(str(cishu)+次提问的机会,平均分为+allt(str(pingjun)

19、+分if eof()=.T. &如果指针定位到表尾,说明没有查找到thisform.label3.caption=同学们至少被提问了一次,请选择左侧提问一个次数少的同学thisform.label1.caption=endif单击“从次数少的同学中选一个”按钮可以将随机挑选一个回答次数少的同学。“从次数少的同学中选一个”按钮的click事件代码为:use mediatablebiao=mediatable.cthisform.label6.caption=正在使用+allt(mediatable.c)+表use mediatableuse &biao &利用宏替换打开表go topmixx=r

20、ecc() &将表中的记录数赋给变量mixxmix=cishuskipdo while .not.eof() &利用while循环找到cishu字段最少的值if cishumixmix=cishuendifskipenddogo toploca for cishu=mix &查找次数少的同学if found()skip int(10000*rand()%(mixx-1)+1) &向下条随机数个指针contendifif found() thisform.label1.caption=请+allt(str(xh)+号+allt(xm)+同学回答问题 replace cishu with cish

21、u+1 thisform.label2.caption=请为+allt(str(xh)+号同学打分 thisform.label5.caption=未打分elsego toploca for cishu=mix if found() thisform.label1.caption=请+allt(str(xh)+号+allt(xm)+同学回答问题 replace cishu with cishu+1 thisform.label2.caption=请为+allt(str(xh)+号同学打分 thisform.label5.caption=未打分 endifendif pingjun=(first

22、+secondd+third+fourth+fifth+sixth+seventh+eighttwentynint+thirtieth)/30int(pingjun)thisform.label3.caption=这名同学已经获得+allt(str(cishu)+次提问的机会,平均分为+allt(str(pingjun)+分“打分条”按钮组可以设置同学获得的分数。“打分条”的click事件代码为:do case case this.value=1 thisform.label5.caption=该同学将获得1分 &每次点击时,在label5上显示状态 case this.value=2 thi

23、sform.label5.caption=该同学将获得2分 case this.value=3 thisform.label5.caption=该同学将获得3分 case this.value=4 thisform.label5.caption=该同学将获得4分 case this.value=5 thisform.label5.caption=该同学将获得5分endcase“打分”按钮的click事件代码为:n=thisform.optiongroup1.value &将选项按钮组的返回值赋给ndo case case cishu=1 &将次数对应的字段值赋予对应的分数 replace fi

24、rst with n case cishu=2 replace secondd with n (省略) case cishu=30 replace thirtieth with nendcasethisform.label5.caption=打分成功3.4.4选择表图8:选择表的表单设计 单击“使用”按钮可以将想要点名的“表”输入进程序。“使用”按钮的click事件代码为:biao=thisform.text1.valueuse mediatablereplace c with biao &将用户的表名传递给中介表wait 选择成功 windows at 30,120 timeout 1thi

25、sform.releaseclose tables3.4.5选择同学图9:打分的表单设计点击“打分”按钮给同学打分。“打分”按钮的click事件代码为:xx=val(thisform.text1.value) locate for xh=xx if found () replace cishu with cishu+1 &将当前cishu字段+1 else messagebox(未找到,提示) endifn=thisform.optiongroup1.valuedo case case cishu=1 replace first with ncase cishu=2replace second

26、d with ncase cishu=3replace third with ncase cishu=4replace fourth with ncase cishu=5replace fifth with n(省略)case cishu=30replace thirtieth with nendcasewait 打分成功 windows at 30,120 timeout 1close tablesthisform.release3.4.6查询表图10:查询的表单设计“查询”按钮的click事件代码为:thisform.grid1.recordsource=thisform.text1.va

27、lue3.4.7生成报表图11:生成报表的表单设计“生成”按钮的click事件代码为:set talk off &关闭安全提示set safety off &关闭安全提示biao=thisform.text1.valueuse baobiaodele all &逻辑删除所有记录zap &物理删除所有记录append from &biao fields xh,xm,cishu,zongfen &将用户所输入表中的内容追加到中介表中report form baobiao to print preview &阅览中介表(报表)thisform.releaseuse &biao3.4.8修改表图11:

28、编辑的表单设计各个按钮的click事件如下:代码表3.4.8确定添加修改删除publ biaobiao=alltrim(thisform.text1.value)thisform.grid1.recordsource=biaogo bottomappend blankeditthisform.refresheditthisform.refreshtempstr=messagebox(确定要删除这个同学吗?,4+32+256,删除记录)if tempstr=6deletepackthisform.grid1.recordsource=学生thisform.refreshendif3.5菜单设计表

29、2:主菜单一级菜单二级菜单过程代码文件退出Quit点名普通点名高级点名添加表修改表查询生成报表Do form 普通点名Do form 高级点名Do form添加表Do form修改表Do form查询Do form生成报表编辑3.6表设计3.6.1中介表表3:mediatableABCD3.6.2登录表表4:loginNamepassword王诗洋123admin123123admin3.6.3点名表表5:studentXhXmcishuFirstSeconddThirthFourthzongfen1李蕾2汤勤书3李纯漪4鞠振东5赵晓宇6赵海年4、运行结果与反馈4.1运行结果4.1.1登录模块

30、输入用户名和密码点击“登录”按钮,如图12所示。图12:登录模块运行结果4.1.2普通点名模块打开菜单-点名-普通点名,点击“设置”如图13所示,并且设置随机数范围,点击“确定”观察到设置成功,回到普通点名模块,点击“下一个”观察到有在范围内生成的随机数如图14所示:图13:设置随机数范围图14:产生的在范围内的随机数4.1.3高级点名模块选择“高级点名”,高级点名主窗体打开,程序提示先选择表,根据提示选择想要点名的表,如图15所示:分别点击“随便选一个”,“从没点到的同学中选一个”,“从次数少的同学中选择一个”按钮,并且测试打分项目,如图16,17.18所示:图16:随便选一名同学图17:从

31、没点到的同学中选一个图18:成功为同学打分点击“给主要回答问题的同学打分”如图19所示:图19:成功给主动回答问题的同学打分4.1.4生成报表模块点击编辑“报表”按钮,在文本框中输入想要生成报表的表名,点击“确定”按钮,如图20所示:图20:生成报表模块4.2反馈 通过设计,现在所呈现的效果已基本达到预期效果,用VF制作的点名系统系统提供了点名功能,但是仍还有许多不足之处,例如没有考虑到用户权限问题。我认为完善数据库功能,让内部信息直接和网络上的数据库服务器上传下载数据,实时同步消息,期末汇总成分数表,这些问题在以后的学习中我会更多注意。5、设计体会通过这次的课程设计,我收获了很多。在设计的过

32、程中,我对课本的内容有了进一步的了解,编程及调试程序的能力都得到了较大的提高。在写第一个模块还是比较轻松的,但我觉得第二个模块对我的能力的提高更有帮助,每个模块都调试了n多次,经常报错,当时真的很想砸电脑,不过当我写完了之后又非常地高兴很有成就感,从而促使我继续下去。整体感觉可以,但在表的创建和查看方面还应该加强。整个系统花了大概3个星期的时间,其中遇到问题能够耐下心来解决真的很不容易,VF是一个非常适合开发数据库的软件,其中自身自带的数据库语言也方便了我对学生表的查找。之后我会继续对点名系统完善,将这个系统的功能更加的完善,如,增加后端数据库服务器,在WEB端使用,水平移植到android系统上,等等。6、参考文献 1 范立南,张 宇. Visual FoxPro程序设计与应用教程(第二版)M. 北京: 科学出版社, 2014.12 萨师煊 王 珊数据库系统概论M北京:高等教育出版社,2000年2月第三版3 刘 志, 杜小慧. 21天学会Visual FoxProM. 北京: 北京大学出版社, 2010.1:123-130-

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁