运动会成绩管理系统JAVA_第1页
运动会成绩管理系统JAVA_第2页
运动会成绩管理系统JAVA_第3页
运动会成绩管理系统JAVA_第4页
运动会成绩管理系统JAVA_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一、开发背景.3二、系统描述.3三、详细设计.5 1、模块功能.5 1.1、系统人员管理模块.5 1.2、运动员管理模块.6 1.3、运动员成绩管理模块.6 2、数据库结构设计.7 3、界面及代码设计.9 3.1、登录子系统开发.9 3.2、系统用户管理模块.11 3.3、运动员信息管理模块.15 3.4、运动员成绩管理模块.17四、心得体会.20五、参考文献.21一、开发背景当前,运动会已经在全国普遍开展,许多学校每年都定期的举行不同规模的田径运动会。但是,在运动会举行过程中一直存在着参赛人数多,项目设置复杂,时间安排紧凑等问题,而且这些问题能否解决直接关系着运动会的成功与否。另一方面,人们

2、对于比赛结果的实时性、准确性、安全性、可靠性的要求也越来越高,而这些要求是人工操作很难实现的。同时竞赛组织者要尽量减少人为因素的干扰,减少赛场作弊行为的发生,还要为参赛的教练员和运动员及时准确地提供竞赛的相关信息,辅助进行竞赛的决策指导。因此,计算机技术的融入就成为一种必然,而且逐渐成为运动会信息管理的核心所在。 根据调查,现在全国已经有不少学校在田径运动会举办过程中采用了现代化的计算机技术进行运动会的系统管理,有的已经达到了一个相当高的水平。但是我们发现这些运动会管理系统的设计和实现标准不一,参差不齐,而且更多的情况下这些系统只是实现了对运动会的分数统计等功能,在提供运动会的整个举办过程中的

3、人性化、自动化服务等方面还有许多不足和欠缺。我们小组根据当前学校运动会的开展组织情况,结合运动会的组织原则和相关规定,运用现代计算机技术,以全新的模式设计开发了适合田径运动会的校级运动会管理系统。 采用了本运动会管理系统后,运动员在比赛前由院系统一输入个人信息即可,这样就方便了运动员的报名,有错误时可以及时汇报修改。裁判员单独对各自的项目进行管理,保证上了比赛的公正、公平。每个项目都有单独的帐号和密码对应,以保证成绩录入人员对自己管辖范围的唯一性和确定性。在成绩查询界面中可以准确及时的查询到各参赛队伍、各项目、各运动员的个人信息、比赛成绩、排名、和团体加分的情况。以上运动会中各环节组织和编排工

4、作的系统实现,使大量繁琐的人工组织编排任务通过简单方便的操作便可以实现,大大减轻了运动会组织人员的劳动强度,节省了大量物力、人力、财力,提高了工作效率,保证了数据的实时性、准确性、安全性、可靠性,充分体现出了现代化的计算机技术在信息采集、处理、和管理等方面的无可比拟的优越性。2、 系统描述 本系统采用软件工程原理,使用面向对象的Java编程环境编写校级运动会管理系统,利用SQL Server数据库技术,对数据库进行了全面的开发。系统主要包括前台应用程序的开发以及后台数据库的建立和维护两个方面,实现了运动员成绩数据库的创建及运动员成绩的输入、统计、浏览和维护,使得系统具有界面友好,功能强大,易于

5、维护的特点。本校级运动会管理系统在功能实现方面主要分为以下几点:1) 运动员个人信息管理模块。运动员管理与普通的用户管理基本类似,包括用户的添加、修改、编辑和删除功能,参赛项目的维护。例如有的运动员临时因伤不能参寒,有的又调整为可以参加某个项目(虽然严格说来,不允许运动员临时更改参赛项目,但需要在系统中留有余地)。2) 运动员成绩管理模块。操作员可以对成绩进行录入,一旦提交则只能查看不能修改管理员可以查看成绩并调整成绩,因为前场工作人员可能犯错,需要管理员进行更改,但日志中要对此更改进行记录。运动员可以通过终端查看运动成绩。3) 权限管理模块。管理员可以对操作人员进行信息维护,如增加前场成绩录

6、入人员,或者某位成绩录入人员调离岗位则取消其权限。对于运动员可以匿名查询某个项目的成绩。综合以上情况,设计系统体系结构如图1所示。 应用层 模块 代理层 数据库接口层 图1 应用层提供诸如GUI的显示、事件的处理等;代理层是分离上层和具体数据库访问层的,也可以称为业条层,这样的目的是当数据库发生变更时,可以将程序的改动缩减到最小。数据库接口层是与具体的数据库进行交互,对数据进行提取、存入操作。模块包是与数据库实体相对应的类定义,也可以说与数据库中的每条记录相对应。3、 详细设计 1、模块功能 1.1、系统人员管理模块 该模块实现系统人员的添加、修改、查询和删除,先在数据库中添加管理员帐户。管理

7、员在用户管理方面拥有一切权限,而普通用户只有修改个人密码、查询个人信息、运动会比赛信息、比赛成绩及获奖情况的权限。如图2所示。 系统人员管理模块系统操作员信息的输入系统操作员信息的修改系统操作员信息的删除系统操作员信息的查询 图2 1.2、运动员管理模块 该模块由管理员对运动员个人信息的录入、修改及删除功能。普通用户可以实现对运动员个人信息的查询功能。其功能层次如图3所示。 运动员管理模块运动员信息的输入运动员信息的修改运动员信息的删除运动员信息的查询 图3 1.3、运动员成绩管理模块 该模块实现管理员录入运动员的成绩、查询成绩、修改成绩删除查询到的成绩信息以及普通用户查询成绩。其功能层次图如

8、图4所示。 运动员成绩管理模块运动员成绩的输入运动员成绩的修改运动员成绩的删除运动员成绩的查询 图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)本条记录是否有效表3 运动员个人信息表(Sportor)列名数据类型可否为空说明SportorIdVARCHAR(20)NOT NULL运动员编号NameVARCHAR(50)NOT NULL运动员名称GenderVARCHAR(1)性别。M男,F女WeightFLOAT体重,单位KgHeigthFLOAT身高,单位cmAgeINT年龄GradeINT等级voidVARCHAR(1)是否参赛标志。Y为无效,已经被删除。N为有效,参加本次比赛表4 系统用户信息(SysUser)列名数据类型可否为空说明SysUserIdVARCHAR

10、(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)是否生效 3、界面及代码设计 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();/系统人员管理模块 new SysUserManagement

12、();/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.getUserRole( jcmbIdentify

13、.getSelectedItem().toString().trim() );System.out.println("UserName:" + UserName + " Password:" +Password + " " + "Role :" + role);if( role = EnumRole.NOROLE )JOptionPane.showMessageDialog(null,"用户角色未设定,请单击匿名登录访问系统!","错误",JOptionPane.ERROR_

14、MESSAGE);return;else if( role = EnumRole.NOTSUPPORT )JOptionPane.showMessageDialog(null,"用户角色不支持,请联系管理员!","错误",JOptionPane.ERROR_MESSAGE);return;else if( role = EnumRole.SYSADMINISTRATOR )/连接数据库,验证是否管理人员RoleAccessProxy roleProxy = new RoleAccessProxy();if( roleProxy.ValidateUserE

15、xist(UserName,Password,RoleIdMapRoleName.SYSADMIN) = true )JOptionPane.showMessageDialog(null,"登录成功!","正确",JOptionPane.INFORMATION_MESSAGE);elseJOptionPane.showMessageDialog(null,"用户角色不支持,请联系管理员!","错误",JOptionPane.ERROR_MESSAGE);System.exit( - 1 );else if( rol

16、e = EnumRole.SYSOPERATOR )/连接数据库,验证是否系统操作人员并转到相应界面RoleAccessProxy roleProxy = new RoleAccessProxy();if( roleProxy.ValidateUserExist(UserName,Password,RoleIdMapRoleName.SYSOPERATOR) = true )JOptionPane.showMessageDialog(null,"登录成功!","正确",JOptionPane.INFORMATION_MESSAGE);elseJOptio

17、nPane.showMessageDialog(null,"用户角色不支持,请联系管理员!","错误",JOptionPane.ERROR_MESSAGE);return;elseJOptionPane.showMessageDialog(null,"发生未知错误!","错误",JOptionPane.ERROR_MESSAGE );return;else if( (JButton)e.getSource() = jbtAnonymous )System.out.println("Anonymous&qu

18、ot;);elseSystem.out.println("Unsupported!");catch(Exception ex)System.out.println("Unknow Exception: "+ ex.getMessage() );当用户输入用户名、密码和登录身份后,会通过RoleAccessProxy类进行底层访问,查看用户登录信息是否正确!代码如下:RoleAcessProxy roleProxy=new RoleAccessProxy();If(roleProxy.ValidateUserExist(UserName,Password,

19、RoleIdMapRoleName.SYSADMIN)=true) JOptionPane.showMessageDialog(null,"登录成功!","正确",JOptionPane.INFORMATION_MESSAGE);Else JOptionPane.showMessageDialog(null,"用户角色不支持,请联系管理员!","错误",JOptionPane.ERROR_MESSAGE); System.exi(-1); 3.2、系统用户管理模块 系统用户管理模块是实现对本系统中的操作人员管理人员

20、的权限分配、个人信息修改、密码设定、删除等功能,其运行界面如图6所示。 图6系统用户管理的界面相对复杂一些,其中最左边是一个列表框,用来显示列表式的数据,在这里就是本系统中的用户。右侧面板主要是当选中左侧列表中的某个用户时显示该用户的对应信息,可以对用户数据进行编辑、删除等操作。主要代码如下:/为用户列表提取数据SysUserProxy sysUserProxy = new SysUserProxy(); vecSysUsers = sysUserProxy.getAllSysUsers();trysysUserProxy.closeDbConnection();catch(SQLExcept

21、ion 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 ListItemChange() );UserOperAction btnEvtHandle = new UserOperAction();t

22、his.btnDelSysUser.addActionListener(btnEvtHandle);this.btnUpdateUser.addActionListener(btnEvtHandle);class ListItemChange implements ItemListenerpublic void itemStateChanged(ItemEvent e)java.awt.List lstCtrl = (java.awt.List)e.getSource();String str = lstCtrl.getSelectedItem();if( str = null | str =

23、 "")return;String result = str.split("s"); /分解成TokenString sysUserId = result2;SysUserProxy sysUserProxy = new SysUserProxy();SysUser instanceSysUser = sysUserProxy.getUserById(sysUserId);txtSysUserId.setText( instanceSysUser.getSysUserId() );txtSysUserName.setText( instanceSysUs

24、er.getName() );if( instanceSysUser.getGender().equals( "M") )cmbGender.setSelectedIndex(0);else if( instanceSysUser.getGender().equals("F")cmbGender.setSelectedIndex(1);txtSysUserPassword.setText( instanceSysUser.getPassword() );txtRetrySysUserPassword.setText( instanceSysUser.ge

25、tPassword() );if( instanceSysUser.getRoleId().equals(RoleIdMapRoleName.SYSADMIN )cmbSysUserRole.setSelectedIndex(0);else if(instanceSysUser.getRoleId().equals(RoleIdMapRoleName.SYSOPERATOR) )cmbSysUserRole.setSelectedIndex(1);elsecmbSysUserRole.setSelectedIndex(2);if( instanceSysUser.getVoid().equal

26、s("Y")chkSysUserVoid.setSelected(true);elsechkSysUserVoid.setSelected(false);trysysUserProxy.closeDbConnection();catch(SQLException ex)class UserOperAction implements ActionListenerpublic void actionPerformed(ActionEvent e)if( e.getSource() = (JButton)btnDelSysUser )/删除系统用户String userId =

27、txtSysUserId.getText();String finalSql = "DELETEFROM SysUser WHERE SYSUSERID='"+userId+"'"SysUserProxy sysUserProxy = new SysUserProxy(); sysUserProxy.UpdateUserById(finalSql);JOptionPane.showMessageDialog(null,"删除成功!","成功",JOptionPane.INFORMATION_MESS

28、AGE);else if( e.getSource() = (JButton)btnUpdateUser )/更新现有用户String userId = txtSysUserId.getText();String userName = txtSysUserName.getText();String Gender;if( cmbGender.getSelectedItem().toString().equals("男")Gender = "M"elseGender = "F"String Pass;if( txtSysUserPassw

29、ord.getText().equals(txtRetrySysUserPassword.getText() )Pass = txtSysUserPassword.getText();elseJOptionPane.showMessageDialog(null,"密码不匹配","错误",JOptionPane.ERROR_MESSAGE);return;String userRole;if( cmbSysUserRole.getSelectedItem().toString().equals("系统管理员")userRole = Ro

30、leIdMapRoleName.SYSADMIN;else if(cmbSysUserRole.getSelectedItem().toString().equals("系统操作员") )userRole = RoleIdMapRoleName.SYSOPERATOR;elseuserRole = ""String Void;if( chkSysUserVoid.isSelected() = true)Void = "Y"elseVoid = "N"String finalSql = "UPDATE SY

31、SUSER SET NAME='" + userName + "', "+"PASSWORD = '" + Pass + "', GENDER='" + Gender + "', "+"ROLEID='" + userRole + "', VOID='" + Void + "' WHERE " +"SYSUSERID='" + userId

32、 + "'"SysUserProxy sysUserProxy = new SysUserProxy(); sysUserProxy.UpdateUserById(finalSql);JOptionPane.showMessageDialog(null,"更新成功!","成功",JOptionPane.INFORMATION_MESSAGE);单击“更新用户”按妞,则触发相应事件,调用SysUserProxy类实现更新操作。与登录子系统中的RoleAccessProxy类相类似,SysUserProxy也是对数据访问进行了封包

33、,使上层应用无须与底层直接接。这样增强了系统的可移植性和可扩展性。关于SysUserProxy类的代码在此处省略。3.3、运动员信息管理模块 运动员信息管理模块主要实现对人员个人信息的维护,其界面布局与系统用户管理模块类似,如图7所示。 图7实现此模块的主要代码如下:class UserOperAction implements ActionListenerpublic void actionPerformed(ActionEvent e)if( e.getSource() = (JButton)btnAddUser )/增加系统用户/*课后作业*/JOptionPane.showMessag

34、eDialog(null,"新增成功!","成功",JOptionPane.INFORMATION_MESSAGE);return;else if( e.getSource() = (JButton)btnUpdateUser )/更新现有用户String userId = txtUserId.getText();String userName = txtUserName.getText();String Gender;if( cmbGender.getSelectedItem().toString().equals("男")Gend

35、er = "M"elseGender = "F"float weight = 0.0f;if( txtUserWeight.getText() != null && txtUserWeight.getText() != "")weight = Float.parseFloat(txtUserWeight.getText();float height = 0.0f;if( txtUserHeight.getText() != null && txtUserHeight.getText() != "

36、;")height = Float.parseFloat( txtUserHeight.getText() );int age = 0;if( txtUserAge.getText() != null && txtUserAge.getText() != "")age = Integer.parseInt( txtUserAge.getText() );int grade = 0;if( txtUserGrade.getText() != null && txtUserGrade.getText() != "")

37、grade = Integer.parseInt( txtUserGrade.getText() );String Void;if( chkSysUserVoid.isSelected() = true)Void = "Y"elseVoid = "N"String finalSql = "" finalSql = "UPDATE sportor "+" SET NAME='" + userName +"',GENDER='"+Gender + &quo

38、t;', "+" WEIGHT=" + weight + ", HEIGHT =" + height + ", " + " AGE = " + age +", " + " GRADE = " + grade + ",VOID='" + Void + "' "+"WHERE SPORTORID='"+ userId + "'" SportorProx

39、y UserProxy = new SportorProxy(); UserProxy .UpdateUserById(finalSql);JOptionPane.showMessageDialog(null,"更新成功!","成功",JOptionPane.INFORMATION_MESSAGE);return;else if(e.getSource() = (JButton)btnDelUser)String userId = txtUserId.getText();String finalSql = "DELETEFROM sportor

40、 WHERE SPORTORID='"+userId+"'"SportorProxy UserProxy = new SportorProxy(); UserProxy.UpdateUserById(finalSql);lstUserList.removeAll();InitCtlData();JOptionPane.showMessageDialog(null,"删除成功!","成功",JOptionPane.INFORMATION_MESSAGE);return; 3.4、运动员成绩管理模块 这一功能模块

41、在结构上采用三级连动方式,即一级菜单的动作触发二级菜单的响应,二级菜单的动作影响三级菜单的显示。基于这个依据,设计界面如图8所示。 图8主要代码如下:class ListItemChange implements ItemListenerpublic void itemStateChanged(ItemEvent e)if( e.getSource() = (java.awt.List)lstSportItems )/初始化界面txtScore1.setText( "" );txtScore2.setText( "" );txtScore3.setTex

42、t( "" );txtScore4.setText( "" );txtScore5.setText( "" );txtScore6.setText( "" );chkValid.setSelected(false);java.awt.List lstCtrl = (java.awt.List)e.getSource();String str = lstCtrl.getSelectedItem();if( str = null | str = "")return;String result = s

43、tr.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 Sp

44、ortorProxy();Vector vecSportor = sportProxy.getSportUsersBySql(sqlQuery);lstSportors.removeAll();for( int i = 0; i < vecSportor.size(); i + )lstSportors.add(SportsMan)vecSportor.elementAt(i).getName() + ""+ (SportsMan)vecSportor.elementAt(i).getSportorId();trysportProxy.closeDbConnectio

45、n();catch(SQLException sqlEx)else if( e.getSource() = (java.awt.List)lstSportors )/初始化界面txtScore1.setText( "" );txtScore2.setText( "" );txtScore3.setText( "" );txtScore4.setText( "" );txtScore5.setText( "" );txtScore6.setText( "" );chkValid

46、.setSelected(false);/显示成绩String str = lstSportors.getSelectedItem();if( str = null | str = "")return;String result = str.split("s"); /分解成TokenString SportorId = result2;str = lstSportItems.getSelectedItem();if( str = null | str = "" )return;result = str.split("s&qu

47、ot;);String SportItemId = result2;ItemAttendProxy itemAttendProxy = new ItemAttendProxy();ItemAttend itemAttend = itemAttendProxy.getSportItemById(SportItemId,SportorId);tryitemAttendProxy.closeDbConnection();catch(SQLException ex)if( itemAttend.getVoid().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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论