ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:231.70KB ,
资源ID:23081678      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/23081678.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(报告书吕文泊.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

报告书吕文泊.docx

1、报告书吕文泊Harbin Institute of Technology at Weihai数据结构课程设计报告设计题目: 运动会综合应用系统 院 系: 计算机科学与技术 班 级: 0604202 学 号: 060420201 设 计 者: 吕文泊 哈尔滨工业大学(威海)二零零八年九月数据结构课程设计报告软硬件运行环境硬件要求:内存最小为64M,建议使用128M及以上显示器分辨率最小为800*600,建议分辨率1 024*768CPU 主频Pentium(166)或更高硬盘剩余空间最小1G,建议1G以上 软件要求:操作系统推荐使用Windows 2000,XP或更高版本,也可以在Windows

2、 98下运行。,建议安装 PowerBuilder10.0 SQL Server2000或更高版本1 项目研究背景与意义由于运动会以往都是人工报名,人工记录成绩,人工排名,耗费人力,物力,而且出错率较高,不能及时得到排名,拖延了最后闭幕式的召开。研发运动会管理系统,把一些工作交给计算机来做,提高效率,降低出错率。 运动会管理系统的开发工作是由我三人完成的,包括项目需求分析,项目的可行性研究,到具体的系统编程实现,老师提出要求,学生解决问题。本系统经过多次试验运行,收到了良好的效果,大大减轻了人力劳动,降低了出错率,经过事实中发现新问题并得到及时维护。2 问题及难点所在(1)建立工作岗位、录入工

3、作人员,运动员报名表录入,输入记录成绩,生成秩序册等项次关键的多重链表文件(2)实现设置工作岗位、录入工作人员,运动员报名表录入,输入记录成绩写及录入。(3)根据不同功能需求显示的参赛人员的不同信息字段。运用同一数据窗口根据选择项目所属田径赛及教职工学生的不同,灵活增删不同字段。(4)在录入成绩方面可能出现已检录却未能参加比赛等情况,此时需在录入中增加“强制更新为未检录状态选项”。(5)报名单输入:包括运动员姓名、单位、组别、参赛项目等信息。(6)报名单审查:报名单输入是难免会有错误的,必须经过审查。在审查之后,如果有错,必须出现提示,给出出错信息,并根据不同的错误,给用户提供不同的修改方法。

4、(7)运动员编号:运动员编号要求同一单位的同一组别的运动员号码必须连续,不同单位、不同组别可以不连续,也可连续.(8)径赛分组 :按照比赛规则,对各项目的参赛人员进行分组。对于短跑项目,将对各组别各项目的每个小组进行跑道划分;对于长跑项目,只编排运动员比赛序号,并将编排结果直接存入径赛决赛名单。3 算法设计的思想(所用到的数据结构)检录操作主要涉及到数据库信息提取、项目优先顺序设定及打印内容筛选。数据库提取主要是由数据库自动实现。检录则根据检录状态将尚未检录项按线性表遍历排列在首选位置。设有批量设置功能,可以将当前项目人员检录信息提取到数组中,按照要求遍历批量设置所有人员检录状态,并返回到当前

5、显示界面中并仍可进行人工微调。录入成绩与检录操作基本功能一致。主要难点在于通过模式匹配模拟实现录入成绩格式的规范检查。鉴于各个项目的成绩单位及计法的不同,在数据库中自己拟定存储各项目成绩格式,在程序运行中运用查找的模式匹配检查输入项的格式。重点在于成绩中包含几种常用符号(如逗号,单撇号)及数字的混合,需经检查确定正确后由字符格式转为数字类型存储。4 算法的流程图5 算法的设计与分析(1) 检录窗口功能说明自动全部签到int ii=dw_chk.rowcount( )int jfor j=1 to i dw_chk.setitem( j, checky_checkup, 1)next自动分道st

6、ring tpfendaotpfendao=dw_chk.object.checky_checkup.primaryint sort,i,upper,jupper=upperbound(tpfendao)j=0for i=1 to upper if 1=tpfendaoi then /1表示选择到 j+ sortj=i /获得签到的所在行 end ifnext/排序int sec,tempfor i=1 to j sec=myrand(i,j) temp=sortsec sortsec=sorti sorti=temp dw_chk.object.checky_daoci.primarysor

7、ti=string(i)next手动调整分道dw_chk.settaborder( checky_daoci,1)最终提交完成/检查是否已禁止更新检录if true=checked_manage.ifchecked(ddlb_1.text) then messagebox(,禁止更新检录信息) returnend if/int ii=dw_chk.update()if (1=i) then checked_manage.setchecked(ddlb_1.text)else messagebox(string(sqlca.sqldbcode),保存数据失败:+ sqlca.sqlerrtext

8、) end ifddlb_1.postevent(selectionchanged)打印已签到人员名单if ?=dw_chk.Object.DataWindow.Table.Filter then dw_chk.Object.DataWindow.Table.Filter=1=1end ifdw_chk.Object.DataWindow.Table.Filter=dw_chk.Object.DataWindow.Table.Filter+ and checky_checkup=1dw_chk.filter( )(2) 录入成绩显示数据/uo可用this.enabled=truecbx_upd

9、ate.checked=false/初始化函数类scored_manage.info=inforesetcontent( )/获得所需访问表信息修改数据对象string sqlfromwheredw_score.dataobject=dataw_scoreinputdw_score.settransobject(sqlca)sqlfromwhere=sqlfromwhere+= from +info.check+ t, +info.signup+ signup/设置 where子句if info.flag=false then /第二赛 /检录签到 seccheckup字段 sqlfromwh

10、ere+= where t.code=signup.code and t.seccheckup=1 and t.checkup=1 and t.item=signup.item and signup.groupm = +info.groupm + and signup.item=+ info.item +else /第一赛 sqlfromwhere+= where t.checkup=1 and t.code=signup.code and t.item=signup.item and signup.groupm = +info.groupm + and signup.item=+info.i

11、tem +end if /检录签到 checkup字段/销毁部分列if 田赛 =info.tianjing then dw_score.Modify(destroy column checky_sgroup) dw_score.Modify(destroy checky_sgroup_t) dw_score.Modify(destroy column checky_daoci) dw_score.Modify(destroy checky_daoci_t)else if false=info.flag then /径赛第二赛销毁checky_sgroup dw_score.Modify(des

12、troy column checky_sgroup) dw_score.Modify(destroy checky_sgroup_t) end ifend if/dw_check显示数据/设置更新表dw_score.Object.DataWindow.Table.UpdateTable=info.checkif 2人3足跑=info.item then /2人3足跑检录 若有一人未到则不能参加比赛 成绩和签到道次记录在code小的一人中(以第一人为查询录成绩) 自动更新到第二人中 string errensz /只有一赛 /检录到 errensz=select b.code,b.name+ +

13、c.name,2人3足跑, ch.sgroup,ch.daoci,ch.score,b.dep from checkthy ch,errensanzu b,errensanzu c where ch.item=2人3足跑 and ch.checkup=1 and ch.code=b.code and b.tongdui=c.tongdui and c.groupm=b.groupm and b.codec.code and b.groupm=+info.groupm + dw_score.modify( DataWindow.Table.Select=+errensz+) dw_score.o

14、bject.checky_score.dbname=info.check+.+score /重新绑定更新字段else if info.flag=false then /第二赛 dw_score.modify( DataWindow.Table.Select=+ select t.code,signup.name,t.item,t.daoci,t.secscore,signup.dep +sqlfromwhere+) dw_score.object.checky_score.dbname=info.check+.+secscore /重新绑定更新字段 else if 田赛=info.tianji

15、ng then dw_score.modify( DataWindow.Table.Select=+ select t.code,signup.name,t.item,t.score,signup.dep +sqlfromwhere+) else dw_score.modify( DataWindow.Table.Select=+ select t.code,signup.name,t.item,t.sgroup,t.daoci,t.score,signup.dep +sqlfromwhere+) end if dw_score.object.checky_score.dbname=info.

16、check+.+score end ifend if/为小组下拉列表框添加内容if 径赛=info.tianjing and true=info.flag then /若是分组项目则为小组列表框添加各小组 / /添加小组 string sql sql=select distinct t.sgroup +sqlfromwhere declare xiaozu dynamic cursor for sqlsa; prepare sqlsa from :sql; open dynamic xiaozu; string tpsgroup ddlb_score.reset( ) fetch xiaozu

17、 into :tpsgroup; do while sqlca.sqlcode=0 ddlb_score.additem( tpsgroup) fetch xiaozu into :tpsgroup; loop close xiaozu;end ifddlb_score.additem(全部)/默认选择全部dw_score.retrieve( )ddlb_score.text=全部ddlb_score.postevent(selectionchanged)/显示数据格式string geshiselect danwei into :geshi from itemsyangshi where i

18、tem=:info.item;checksqlcode()geshi+= +setyangshi( )st_geshi.text=geshi6 运行结果与分析(测试)检录窗口录入成绩窗口调试分析:(1) 运行时提示“Bad runtime function reference”错误信息,引用了错误的运行时函数。原因:引用的函数所属对象尚未创建。解决:引用前先创建对象。(2) 运行时提示“Double or Real expression has overflowed”错误信息,双精度型或实型表达式溢出。原因:函数返回错误范围内的值。解决:规范函数返回值的范围。(3)运行时提示“Field na

19、me assignment not supported”,不支持这种字段赋值。原因:字段类型不匹配。解决:使用正确类型。7 总结(收获与体会)一、收获1 要学会具体问题具体分析在着手开始编写代码的时候,我已经将教材还有龙书看过一遍了,但是在实际动手的时候,才发现并不是像书上说的那么清楚明白,语言的特性与书上举例用的语言特性有许多不同,这时就不能生搬硬套书上的算法,要结合语言的特点,采用书上的思想,这样才能把问题解决,其中我主要负责的那一个检录板块牵扯到一个自动分道,如何能实现运算效率最高,起初的算法为将n个数字存储在一数组中首先随机分配1n间一个数字抽中后该数字后存储空间前移,再随机分配1n-

20、1间一个数字直至分配结束。但是此算法效率很低,重新设计算法后改为,数组arry1n保存1n,首先随机分配1n一个数字x将arryx 与arry1交换,再分配2n一个数字x将arryx 与arry2交换,直至结束。改进算法效率明显高于之前的算法(减少了循环及赋值次数),这样便使得运算的效率大大提高,而且保证了概率绝对一样。2 设计数据结构的重要性在我编写代码的过程中,最常出现的现象就是反复修改数据结构,甚至在进行优化的时候还回过头去修改中间代码的数据结构。这就导致了我编写代码效率的降低,还有由于数据结构的反复修改,使得整个工程维护起来极其困难。这就说明数据结构的设计在整个设计阶段是十分重要的,没

21、有一个设计良好的数据结构,代码编写阶段就不会顺利的进行。3 交流和沟通我们在开发初期遇到的很多问题都是通过与同学交流和沟通解决的。同学间无私、耐心的讲解不仅让整个课程设计进展顺利,也让我们每一个人都学到了很多。二、感想这次课程设计历时二个星期多左右,对我来说真的是受益匪浅,通过课程设计,发现自己的很多不足,自己知识的很多漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还急需提高。这次的课程设计也让我看到了团队的力量,我认为我们的工作是一个团队的工作,团队需要个人,个人也离不开团队,必须发扬团结协作的精神,对我而言,知识上的收获重要,精神上的丰收更加可喜。因为它让我知道了学无止境的道理

22、。我们每一个人永远不能满足于现有的成就,人生就像在爬山,一座山峰的后面还有更高的山峰在等着你。挫折是一份财富,经历是一份拥有。这次课程设计必将成为我人生旅途上一个非常美好的回忆!8 附:源代码(1)各类数据结构用于在不同对象间交换数据分组信息项目信息结构(2)检查该项目是否已检录/说明/传入参数为全部 第?组 info需要预先设置/返回值 true已检录/ false未检录/string checkupzustring sqlqiandao /无论是否有决赛都将分组boolean rtnif 径赛=info.tianjing and true=info.flag then /若是径赛第一赛则从

23、fstchecked串中分离各小组 此时传入数据为第?组 或 全部 /返回检录日志 select fstchecked into :checkupzu from item where groupm=:info.groupm and item=:info.item; if isnull(checkupzu) then return false /若无数据则直接返回false 未检录 end if /检查是否所有小组都已检录 if 全部=xiaozu then string sql sql=select distinct ch.sgroup from +info.check+ ch,+info.s

24、ignup+ sign where ch.item=sign.item and ch.code=sign.code and sign.groupm=+info.groupm+ and sign.item=+info.item+ declare allxiaozu dynamic cursor for sqlsa; prepare sqlsa from :sql; open dynamic allxiaozu; string tpsgroup fetch allxiaozu into :tpsgroup; do while sqlca.sqlcode=0 if 0=pos(checkupzu,t

25、psgroup,1) then /若未找到则表示存在小组为检录 close allxiaozu; return false end if fetch allxiaozu into :tpsgroup; loop close allxiaozu; return true /所有小组均已检录 end if /检查该小组是否已检录 string qcxz if 0=pos(checkupzu,xiaozu,1) then return false else return true end if /此时不需用到传入参数xiaozuelse/其他情况全部从secchecked中直接通过1判断 selec

26、t secchecked into :checkupzu from item where groupm=:info.groupm and item=:info.item; if isnull(checkupzu) then checkupzu= end if if 1=checkupzu then return true /已检录 else return false /未检录 end ifend if(3)将更改后数据更新至数据库/将该项目所有成绩排序编号paixu secpaixu/直接更新数据库/调用之前手动确定已录完分数 ifscored()/预先设置info/string zdflag

27、=,zdscore=if true=info.flag then /第一赛 score flag /zdflag=flag zdscore=scoreelse /第二赛 secscore secflag /zdflag=secflag zdscore=secscoreend if/根据人数排名次string sql/string strcode,strscoresql=select ch.code,ch.+zdscore+ from +info.check+ ch,+info.signup+ signup where ch.code=signup.code and ch.item=signup

28、.item and signup.groupm=+info.groupm+ and signup.item=+info.item+if true=info.flag then /第一赛 sql+= and ch.checkup=1 /设定条件else /第二赛 sql+= and ch.seccheckup=1 and ch.checkup=1 end if/设定排序方式int tempzj /保存排序方式select zengjian into :tempzj from itemsyangshi where item=:info.item;checksqlcode()if 1=tempzj then /越大者越优秀 sql+= order by +zdscore+ DESCelse /越小越优秀 sql+= order by +zdscore+ ASCend if/读取数据 按分数优先顺序读取code scoredeclare sort dynamic cursor for sqlsa;prepare sqlsa from :sql;open dynami

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1