




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一、开发背景3二、系统描述3三、详细设计51、模块功能51.1、系统人员管理模块51.2、运动员管理模块61.3、运动员成绩管理模块62、数据库结构设计73、界面及代码设计93.1、登录子系统开发93.2、系统用户管理模块113.3、运动员信息管理模块153.4、运动员成绩管理模块17四、心得体会20五、参考文献211一、开发背景当前,运动会已经在全国普遍开展, 许多学校每年都定期的举行不同规模的田径运动会。但是,在运动会举行过程中一直存在着参赛人数多, 项目设置复杂,时间安排紧凑等问题, 而且这些问题能否解决直接关系着运动会的成功与否。 另一方面,人们对于比赛结果的实时性、准确性、安全性、可
2、靠性的要求也越来越高,而这些要求是人工操作很难实现的。 同时竞赛组织者要尽量减少人为因素的干扰,减少赛场作弊行为的发生, 还要为参赛的教练员和运动员及时准确地提供竞赛的相关信息, 辅助进行竞赛的决策指导。 因此,计算机技术的融入就成为一种必然,而且逐渐成为运动会信息管理的核心所在。根据调查,现在全国已经有不少学校在田径运动会举办过程中采用了现代化的计算机技术进行运动会的系统管理,有的已经达到了一个相当高的水平。但是我们发现这些运动会管理系统的设计和实现标准不一,参差不齐,而且更多的情况下这些系统只是实现了对运动会的分数统计等功能,在提供运动会的整个举办过程中的人性化、 自动化服务等方面还有许多
3、不足和欠缺。我们小组根据当前学校运动会的开展组织情况, 结合运动会的组织原则和相关规定,运用现代计算机技术,以全新的模式设计开发了适合田径运动会的校级运动会管理系统。采用了本运动会管理系统后,运动员在比赛前由院系统一输入个人信息即可,这样就方便了运动员的报名, 有错误时可以及时汇报修改。 裁判员单独对各自的项目进行管理, 保证上了比赛的公正、 公平。每个项目都有单独的帐号和密码对应,以保证成绩录入人员对自己管辖范围的唯一性和确定性。 在成绩查询界面中可以准确及时的查询到各参赛队伍、 各项目、各运动员的个人信息、 比赛成绩、排名、和团体加分的情况。 以上运动会中各环节组织和编排工作的系统实现,使
4、大量繁琐的人工组织编排任务通过简单方便的操作便可以实现, 大大减轻了运动会组织人员的劳动强度,节省了大量物力、人力、财力,提高了工作效率,保证了数据的实时性、准确性、安全性、可靠性,充分体现出了现代化的计算机技术在信息采集、处理、和管理等方面的无可比拟的优越性。二、系统描述2本系统采用软件工程原理,使用面向对象的Java 编程环境编写校级运动会管理系统,利用SQL Server 数据库技术,对数据库进行了全面的开发。系统主要包括前台应用程序的开发以及后台数据库的建立和维护两个方面,实现了运动员成绩数据库的创建及运动员成绩的输入、统计、浏览和维护, 使得系统具有界面友好,功能强大,易于维护的特点
5、。本校级运动会管理系统在功能实现方面主要分为以下几点:1)运动员个人信息管理模块。运动员管理与普通的用户管理基本类似,包括用户的添加、修改、编辑和删除功能,参赛项目的维护。例如有的运动员临时因伤不能参寒, 有的又调整为可以参加某个项目 (虽然严格说来, 不允许运动员临时更改参赛项目,但需要在系统中留有余地) 。2)运动员成绩管理模块。操作员可以对成绩进行录入,一旦提交则只能查看不能修改管理员可以查看成绩并调整成绩, 因为前场工作人员可能犯错, 需要管理员进行更改, 但日志中要对此更改进行记录。 运动员可以通过终端查看运动成绩。3)权限管理模块。管理员可以对操作人员进行信息维护,如增加前场成绩录
6、入人员,或者某位成绩录入人员调离岗位则取消其权限。对于运动员可以匿名查询某个项目的成绩。综合以上情况,设计系统体系结构如图1 所示。应用层模块代理层数据库接口层图 13应用层提供诸如 GUI 的显示、事件的处理等;代理层是分离上层和具体数据库访问层的, 也可以称为业条层, 这样的目的是当数据库发生变更时, 可以将程序的改动缩减到最小。 数据库接口层是与具体的数据库进行交互, 对数据进行提取、存入操作。模块包是与数据库实体相对应的类定义, 也可以说与数据库中的每条记录相对应。三、详细设计1、模块功能1.1、系统人员管理模块该模块实现系统人员的添加、 修改、查询和删除, 先在数据库中添加管理员帐户
7、。管理员在用户管理方面拥有一切权限, 而普通用户只有修改个人密码、查询个人信息、运动会比赛信息、比赛成绩及获奖情况的权限。如图2 所示。系统人员管理模块系系系系统统统统操操操操作作作作员员员员信信信信息息息息的的的的输修删查入改除询图 241.2、运动员管理模块该模块由管理员对运动员个人信息的录入、修改及删除功能。普通用户可以实现对运动员个人信息的查询功能。其功能层次如图3 所示。运动员管理模块运运运运动动动动员员员员信信信信息息息息的的的的输修删查入改除询图 31.3、运动员成绩管理模块该模块实现管理员录入运动员的成绩、查询成绩、修改成绩删除查询到的成绩信息以及普通用户查询成绩。其功能层次图
8、如图4 所示。5运动员成绩管理模块运运运运动动动动员员员员成成成成绩绩绩绩的的的的输修删查入改除询图 42、数据库结构设计表 1 运动会项目表 (SportItems)列名数据类型可否为空说明ItemIdVARCHAR(20)NOT NULL体育项目编号ItemNameVARCHAR(50)NOT NULL项目名称ItemTypeVARCHAR(50)所属的运动类别voidVARCHAR(1)是否有效表 2 运动员参赛项目表 (ItemAttend)列名数据类型可否为空说明SportorIdVARCHAR(20)NOT NULL运动员编号ItemIdVARCHAR(20)NOT NULL体育项
9、目编号ScoreVARCHAR(50)成绩voidVARCHAR(1)本条记录是否有效6表 3 运动员个人信息表 (Sportor)列名数据类型可否为空说明SportorIdVARCHAR(20)NOT NULL运动员编号NameVARCHAR(50)NOT NULL运动员名称GenderVARCHAR(1)性别。 M 男,F 女WeightFLOAT体重,单位 KgHeigthFLOAT身高,单位 cmAgeINT年龄GradeINT等级voidVARCHAR(1)是否参赛标志。 Y为无效,已经被删除。 N 为有效,参加本次比赛表 4 系统用户信息 (SysUser)列名数据类型可否为空说明
10、SysUserIdVARCHAR(20)NOT NULL系统用户的编号NameVARCHAR(20)NOT NULL姓名PasswordVARCHAR(50)NOT NULL密码GenderVARCHAR(1)性别RoleIdVARCHAR(20)所属于的角色voidVARCHAR(1)用户是否有效表 5 系统用户角色 (Roles)列名数据类型可否为空说明RoleIdVARCHAR(20)NOT NULL角色编号RoleNameVARCHAR(50)角色名称voidVARCHAR(1)是否生效73 、界面及代码设计3.1、登录子系统开发由于每个系统中都涉及登录子系统, 因此在这里并不进行过多
11、介绍,只提供一个登录子系统的框架, 登录成功后程序的流程应根据登录用户的身份来区别对待。登录系统的界面如图 5 所示。图 5主要代码如下:public static void main(String args) / TODO Auto-generated method stub /* 根据需要,打开下面运行开关 */* 主登录窗口界面StartApp mainForm = new StartApp();mainForm.InitUI();*/运动员管理模块/new SportorManagement();/运动员成绩管理模块new SportorScoreManagement();/系统人员管
12、理模块new SysUserManagement();8/public class LoginEvtHandle implements ActionListenerpublic void actionPerformed(ActionEvent e)tryif( (JButton)e.getSource() = jbtLogin )/根据用户登录身份,转向对应的界面String UserName = jtxtUser.getText().trim();String Password = jtxtPass.getText().toString();EnumRole role = UserRole.
13、getUserRole( jcmbIdentify.getSelectedItem().toString().trim() );System.out.println(UserName: + UserName + Password: +Password + + Role : + role);if( role = EnumRole.NOROLE )JOptionPane.showMessageDialog(null, 用户角色未设定,请单击匿名登录访问系统! , 错误 ,JOptionPane.ERROR_MESSAGE);return;else if( role = EnumRole.NOTSU
14、PPORT ) JOptionPane.showMessageDialog(null, 用户角色不支持,请联系管理员! , 错误 ,JOptionPane.ERROR_MESSAGE);return;else if( role = EnumRole.SYSADMINISTRATOR )/连接数据库,验证是否管理人员RoleAccessProxy roleProxy = new RoleAccessProxy();if( roleProxy.ValidateUserExist(UserName,Password,RoleIdMapRoleName.SYSADMIN) = true )JOptio
15、nPane.showMessageDialog(null, 登 录 成 功 ! , 正 确,JOptionPane.INFORMA TION_MESSAGE);else JOptionPane.showMessageDialog(null, 用户角色不支持,请联系管理员! , 错误 ,JOptionPane.ERROR_MESSAGE);System.exit( - 1 );else if( role = EnumRole.SYSOPERATOR )/连接数据库,验证是否系统操作人员并转到相应界面RoleAccessProxy roleProxy = new RoleAccessProxy()
16、;if( roleProxy.ValidateUserExist(UserName,Password,RoleIdMapRoleName.SYSOPERATOR)= true )9JOptionPane.showMessageDialog(null, 登 录 成 功 ! , 正 确,JOptionPane.INFORMA TION_MESSAGE);elseJOptionPane.showMessageDialog(null, 用户角色不支持,请联系管理员! , 错误 ,JOptionPane.ERROR_MESSAGE);return;elseJOptionPane.showMessageD
17、ialog(null, 发 生 未知 错误! , 错 误 ,JOptionPane.ERROR_MESSAGE );return;else if( (JButton)e.getSource() = jbtAnonymous )System.out.println(Anonymous);elseSystem.out.println(Unsupported!);catch(Exception ex)System.out.println(Unknow Exception: + ex.getMessage() );当用户输入用户名、密码和登录身份后,会通过RoleAccessProxy类进行底层访问,
18、查看用户登录信息是否正确!代码如下:RoleAcessProxy roleProxy=new RoleAccessProxy(); If(roleProxy.ValidateUserExist(UserName,Password,RoleIdMapRoleName.SYSADMIN)=true)JOptionPane.showMessageDialog(null,登录成功!,正确,JOptionPane.INFORMA TION_MESSAGE);ElseJOptionPane.showMessageDialog(null,用 户 角 色 不 支 持 , 请 联 系 管 理 员 ! , 错 误
19、,JOptionPane.ERROR_MESSAGE);System.exi(-1);3.2、系统用户管理模块10系统用户管理模块是实现对本系统中的操作人员管理人员的权限分配、个人信息修改、密码设定、删除等功能,其运行界面如图6 所示。图 6系统用户管理的界面相对复杂一些, 其中最左边是一个列表框, 用来显示列表式的数据,在这里就是本系统中的用户。 右侧面板主要是当选中左侧列表中的某个用户时显示该用户的对应信息,可以对用户数据进行编辑、删除等操作。主要代码如下:/为用户列表提取数据SysUserProxy sysUserProxy = new SysUserProxy();vecSysUser
20、s = sysUserProxy.getAllSysUsers();trysysUserProxy.closeDbConnection();catch(SQLException ex)for( int i = 0; i vecSysUsers.size(); i + )lstUserList.add(SysUser)vecSysUsers.elementAt(i).getName() + + (SysUser)vecSysUsers.elementAt(i).getSysUserId();/* 为控件注册事件*/this.lstUserList.addItemListener( new Lis
21、tItemChange() );UserOperAction btnEvtHandle = new UserOperAction();this.btnDelSysUser.addActionListener(btnEvtHandle);this.btnUpdateUser.addActionListener(btnEvtHandle);11class ListItemChange implements ItemListenerpublic void itemStateChanged(ItemEvent e)java.awt.List lstCtrl = (java.awt.List)e.get
22、Source();String str = lstCtrl.getSelectedItem();if( str = null | str = )return;String result = str.split(s); /分解成 TokenString sysUserId = result2;SysUserProxy sysUserProxy = new SysUserProxy();SysUser instanceSysUser = sysUserProxy.getUserById(sysUserId); txtSysUserId.setText( instanceSysUser.getSys
23、UserId() ); txtSysUserName.setText( instanceSysUser.getName() ); if( instanceSysUser.getGender().equals( M) )cmbGender.setSelectedIndex(0);else if( instanceSysUser.getGender().equals(F)cmbGender.setSelectedIndex(1);txtSysUserPassword.setText( instanceSysUser.getPassword() ); txtRetrySysUserPassword.
24、setText( instanceSysUser.getPassword() );if( instanceSysUser.getRoleId().equals(RoleIdMapRoleName.SYSADMIN )cmbSysUserRole.setSelectedIndex(0);elseif(instanceSysUser.getRoleId().equals(RoleIdMapRoleName.SYSOPERATOR) )cmbSysUserRole.setSelectedIndex(1);elsecmbSysUserRole.setSelectedIndex(2);if( insta
25、nceSysUser.getVoid().equals(Y)chkSysUserVoid.setSelected(true);elsechkSysUserVoid.setSelected(false);trysysUserProxy.closeDbConnection();catch(SQLException ex)class UserOperAction implements ActionListenerpublic void actionPerformed(ActionEvent e)12if( e.getSource() = (JButton)btnDelSysUser )/删除系统用户
26、String userId = txtSysUserId.getText();StringfinalSql=DELETEFROMSysUserWHERESYSUSERID=+userId+;SysUserProxy sysUserProxy = new SysUserProxy();sysUserProxy.UpdateUserById(finalSql);JOptionPane.showMessageDialog(null,删除成功!,成功,JOptionPane.INFORMA TION_MESSAGE);else if( e.getSource() = (JButton)btnUpdat
27、eUser )/更新现有用户String userId = txtSysUserId.getText();String userName = txtSysUserName.getText();String Gender;if( cmbGender.getSelectedItem().toString().equals( 男 )Gender = M;elseGender = F;String Pass;if( txtSysUserPassword.getText().equals(txtRetrySysUserPassword.getText() )Pass = txtSysUserPasswo
28、rd.getText();elseJOptionPane.showMessageDialog(null, 密 码 不 匹 配 , 错 误 ,JOptionPane.ERROR_MESSAGE);return;String userRole;if( cmbSysUserRole.getSelectedItem().toString().equals( 系统管理员 )userRole = RoleIdMapRoleName.SYSADMIN;else if(cmbSysUserRole.getSelectedItem().toString().equals( 系统操作员 ) )userRole =
29、 RoleIdMapRoleName.SYSOPERA TOR;elseuserRole = ;String Void;if( chkSysUserV oid.isSelected() = true)Void = Y;elseVoid = N;String finalSql = UPDATE SYSUSER SET NAME= + userName + , + PASSWORD = + Pass + , GENDER= + Gender + , + ROLEID= + userRole + , VOID= + V oid + WHERE + SYSUSERID= + userId + ;13S
30、ysUserProxy sysUserProxy = new SysUserProxy();sysUserProxy.UpdateUserById(finalSql);JOptionPane.showMessageDialog(null,更新成功!,成功,JOptionPane.INFORMA TION_MESSAGE);单击“更新用户”按妞,则触发相应事件,调用 SysUserProxy类实现更新操作。与登录子系统中的 RoleAccessProxy 类相类似, SysUserProxy也是对数据访问进行了封包,使上层应用无须与底层直接接。 这样增强了系统的可移植性和可扩展性。关于 SysU
31、serProxy 类的代码在此处省略。3.3、运动员信息管理模块运动员信息管理模块主要实现对人员个人信息的维护, 其界面布局与系统用户管理模块类似,如图 7 所示。图 7实现此模块的主要代码如下:class UserOperAction implements ActionListenerpublic void actionPerformed(ActionEvent e)if( e.getSource() = (JButton)btnAddUser )/增加系统用户/* 课后作业 */JOptionPane.showMessageDialog(null, 新 增 成 功 ! , 成 功 ,JOp
32、tionPane.INFORMA TION_MESSAGE);return;else if( e.getSource() = (JButton)btnUpdateUser )14/更新现有用户String userId = txtUserId.getText();String userName = txtUserName.getText();String Gender;if( cmbGender.getSelectedItem().toString().equals( 男 )Gender = M;elseGender = F;float weight = 0.0f;if( txtUserWei
33、ght.getText() != null & txtUserWeight.getText() != )weight = Float.parseFloat(txtUserWeight.getText();float height = 0.0f;if( txtUserHeight.getText() != null & txtUserHeight.getText() != )height = Float.parseFloat( txtUserHeight.getText() );int age = 0;if( txtUserAge.getText() != null & txtUserAge.g
34、etText() != )age = Integer.parseInt( txtUserAge.getText() );int grade = 0;if( txtUserGrade.getText() != null & txtUserGrade.getText() != )grade = Integer.parseInt( txtUserGrade.getText() );String Void;if( chkSysUserV oid.isSelected() = true)Void = Y;elseVoid = N;String finalSql = ;finalSql = UPDATE
35、sportor + SET NAME= + userName +,GENDER=+Gender + , + WEIGHT= + weight + , HEIGHT = + height + , + AGE = + age +, + GRADE = + grade + ,VOID= +Void + +WHERE SPORTORID=+ userId + ;SportorProxy UserProxy = new SportorProxy();UserProxy .UpdateUserById(finalSql);JOptionPane.showMessageDialog(null,更新成功!,成
36、功,JOptionPane.INFORMA TION_MESSAGE);return;else if(e.getSource() = (JButton)btnDelUser)String userId = txtUserId.getText();String finalSql = DELETE FROM sportor WHERE SPORTORID=+userId+;SportorProxy UserProxy = new SportorProxy();15UserProxy.UpdateUserById(finalSql);lstUserList.removeAll();InitCtlDa
37、ta();JOptionPane.showMessageDialog(null,删除成功!,成功,JOptionPane.INFORMA TION_MESSAGE);return;3.4、运动员成绩管理模块这一功能模块在结构上采用三级连动方式,即一级菜单的动作触发二级菜单的响应,二级菜单的动作影响三级菜单的显示。基于这个依据, 设计界面如图8 所示。图 8主要代码如下:class ListItemChange implements ItemListenerpublic void itemStateChanged(ItemEvent e)if( e.getSource() = (java.awt
38、.List)lstSportItems )/初始化界面txtScore1.setText( );txtScore2.setText( );txtScore3.setText( );txtScore4.setText( );txtScore5.setText( );txtScore6.setText( );chkValid.setSelected(false);java.awt.List lstCtrl = (java.awt.List)e.getSource();16String str = lstCtrl.getSelectedItem();if( str = null | str = )r
39、eturn;String result = str.split(s); /分解成 TokenString itemId = result2;String sqlQuery = SELECT , a.sportorid + FROM sportor a,itemAttend b + WHERE b.itemid = + itemId + and + b.sportorid = a.sportorid ;SportorProxy sportProxy = new SportorProxy();Vector vecSportor = sportProxy.getSportUsersByS
40、ql(sqlQuery); lstSportors.removeAll();for( int i = 0; i vecSportor.size(); i + ) lstSportors.add(SportsMan)vecSportor.elementAt(i).getName() + + (SportsMan)vecSportor.elementAt(i).getSportorId();trysportProxy.closeDbConnection();catch(SQLException sqlEx)else if( e.getSource() = (java.awt.List)lstSpo
41、rtors )/初始化界面txtScore1.setText( );txtScore2.setText( );txtScore3.setText( );txtScore4.setText( );txtScore5.setText( );txtScore6.setText( );chkValid.setSelected(false);/显示成绩String str = lstSportors.getSelectedItem();if( str = null | str = )return;String result = str.split(s); /分解成 TokenString Sportor
42、Id = result2;str = lstSportItems.getSelectedItem();if( str = null | str = )return;result = str.split(s);17String SportItemId = result2;ItemAttendProxy itemAttendProxy = new ItemAttendProxy();ItemAttend itemAttend = itemAttendProxy.getSportItemById(SportItemId,SportorId);tryitemAttendProxy.closeDbCon
43、nection();catch(SQLException ex)if( itemAttend.getV oid().equals(Y) )chkValid.setSelected(true);elsechkValid.setSelected(false);String scores = itemAttend.getScore().split(s);switch(scores.length)case 1:txtScore1.setText( scores0 );break;case 3:txtScore1.setText( scores0 );txtScore2.setText( scores2 );break;case 5:txtScore1.setText( scores0 );txtScore2.setText( scores2 );txtScore3.setText( scores4 );break;case 7:txtScore1.setText( scores0 );txtScore2.setText( scores2 );txtScor
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- iqc岗位职责是什么
- 全球健康医疗大数据产业发展报告
- 外贸业务员入职培训汇报
- 企业管理创新实践案例分享
- 传统文化与现代设计的融合
- 团队冲突解决与矛盾调解
- 京剧元素在现代珠宝设计中的表现力
- 企业数字化转型路径探讨
- 产品设计与研发战略
- 全球化背景下的企业发展策略
- 2025年漂浮式风电市场现状调研及前景趋势预测报告
- 2024年装卸作业规范试题及答案
- 建设工程临时用电管理制度
- 如何撰写一份出色的学生会纪检部申请书
- 人教版三年级美术教育教学计划
- 《休闲农业》课件 项目四 休闲农业项目策划
- 2024年高中化学 专题2 化学反应速率与化学平衡 第一单元 化学反应速率 第2课时 影响化学反应速率的因素教学实录 苏教版选修4
- 山西省省直部分事业单位2025年公开招聘工作人员(十四)历年高频重点模拟试卷提升(共500题附带答案详解)
- (一模)哈三中2025届高三第一次模拟考试 语文试题(含答案)
- 事故隐患内部报告奖励制度
- 《阿Q正传》(课件)2023-2024高二语文选择性必修下册
评论
0/150
提交评论