1、*实践教学* 兰州理工大学计算机与通信学院 2013年秋季学期 Java 课程设计 题 目:足球联赛积分管理系统 专业班级: 姓 名: 学 号: 指导教师: 成 绩: 摘 要足球联赛采用主客场双循环赛制,胜一场得3分,平局各得1分,负一场得0分,联赛排名以积分多者在前,当两队(或多队)积分相同时,则净胜球(即进球数与失球数之差)多者在前,若净胜球相同,则进球数多者在前,若仍相同,则抽签或踢附加赛决定名次(这在联赛结束后进行,联赛未结束则两队名次并列,本程序不做这方面要求)。该设计以足球联赛为背景,设计足球联赛积分管理系统程序。通过对该题目的具体设计分析,可以对面向对象程序设计的思想更加深入理解
2、,可以达到熟练掌握Java语言的基本知识和技能,基本掌握面向对象程序设计的基本思路和方法,能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。同时对程序设计风格有全面的强调,提高解决实际问题的能力。并且通过与数据库的连接,深化对数据库编程的理解和运用。关键词:面向对象;Java;数据库编程;数据库序 言通过足球联赛积分管理系统的设计,培养学生面向对象程序设计的思想,要求学生达到熟练掌握Java语言的基本知识和技能,基本掌握面向对象程序设计的基本思路和方法,能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。同时强调好的程序设计风格,提高解决实际问题的能力。由于联赛中参赛的队
3、伍数是固定的,因此可用对象数组来实现(也可以用链表结构)。每输入两个队的比赛成绩,则相应的队的有关数据(比赛场数,赢的场数,平的场数,负的场数,进球数,失球数,积分等)即可进行修改,比赛成绩录入完成,调用联赛排序方法(对象数组作为参数)排出名次并输出。目 录摘要1序言1正文3一.系统分析与设计3系统分析3系统设计3系统类的描述4二.详细设计5系统模块设计5 数据库概念结构设计6数据库逻辑模型结构设计7使用ODBC建立WINDOW数据源的方法8三.系统测试11四.软件使用说明书13设计总结14参考文献15致谢16源代码23一.系统分析与设计 系统分析 足球联赛积分管理系统是一个以足球联赛为背景,
4、设计足球联赛积分管理系统程序。采用主客场双循环赛制,胜一场得3分,平局各得1分,负一场得0分,联赛排名以积分多者在前,当两队(或多队)积分相同时,则净胜球(即进球数与失球数之差)多者在前,若净胜球相同,则进球数多者在前,若仍相同,则抽签或踢附加赛决定名次。面向对象程序开发语言采用JAVA,数据库管理系统采用Microsoft Access 2003,集成开发环境使用eclipse。该管理系统是以自主设计为主,通过对该系统的具体设计分析,可以对面向对象程序设计的思想更加深入理解,基本掌握面向对象程序设计的基本思路和方法,能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。系统设计 在对
5、该系统有初步的规划之后,我们应该着手处理如何初步规划该系统的各主要模块以及基本的方法,前面已经提到,我们使用面向对象程序设计的思路,而且运用数据库编程的理论,所以我们应该按照具体的思路来设计相应的应用,以下简要概述该系统的具体设计:(1).比赛过程的管理:包括一场比赛的基本信息的录入,如参赛双方的球队名称、比赛结果、进球情况等;(2).球队基本信息查询:查询球队的基本信息,输入球队名称,对比查找已有数据库,匹配到该球队,则输出球队的的进球数,胜负场次情况等;(3).积分榜查询:所有的输入结束后,按照联赛的积分规则,排列数据库中的几组关键数据,查询各个球队的名次; .系统类的描述(a).Main
6、Frame类实现了主窗体;成员函数:private void initialize()成员变量:private JFrame frmZ; public static TextArea resultText;(b).LastTime实现了最后一轮比赛的窗口及主场、客场和其各自进球数的输入;成员函数:public static void Lasttime()成员变量:private final JPanel contentPanel = new JPanel(); private JTextField zhuchangname; private JTextField kechangname; pr
7、ivate JTextField zhuchang; private JTextField kechang;(c).Search实现了队各个队伍比赛情况的查询;成员函数:public static void search()成员变量:private final JPanel contentPanel = new JPanel(); private JTextField textField;(d).FootBean类申明成员变量ArrayListHashMap listspublic class FootBean public static ArrayListHashMap lists = ne
8、w ArrayListHashMap();(e).AccessConnection类实现了数据库的连接;成员函数:public void GetInfo()public void SetInfo()private Statement excuteUpdate()public void SetScore()public String Search(String name)public String Sort()public String OutInfo()成员变量:public int i = 1 ; public String SQL_insert ; public Connection co
9、nn; public Statement sql; public ArrayListHashMap lists; public ResultSet rs; public static String name; public PreparedStatement ps; public byte b;(f).五个类之间的关系如下所示:图 各个类之间关系流程图 二.详细设计针对系统的局部构思,可以设计系统的功能模块如下所示: 系统模块设计; 数据库概念结构设计; 数据库逻辑结构设计; 数据库物理结构设计;系统模块设计 图 系统模块图主窗体比赛过程球队信息积分信息输入主队输入进球输入队名得分胜利场次输球
10、场次平局场次得分榜进球榜输入客队输入进球 图 主窗体模块图.数据库概念结构设计球队进行名称得分总进球主队客队主队进球客队进球比赛轮次进球输赢 图 数据库模块图.数据库逻辑模型结构设计表 逻辑模型设计球队表(Team)字段名数据类型宽度主码非空外码描述nameVARCHAR20是是否球队名称winVARCHAR30否否否胜利场次loseVARCHAR20否否否失败场次表 逻辑模型设计比赛进程表(Course)字段名数据类型宽度主码非空外码描述PLACEINT否是否名次nameVARCHAR20是是否球队名称timesINT否是否轮次WinINT否是否胜利场次flatINT否是否平局场次loseI
11、NT否是否失败场次inNumINT否是否总进球数scoreINT否是否积分 使用ODBC建立WINDOW数据源的方法:开始控制面板管理工具数据源(ODBC)用户DSN或系统DSN点添加找到Microsoft Access Driver (*.mdb),选中,再点完成自定义数据源名称,可创建一个新的或选择已经有的Access数据库(.mdb)其它可以不选确定确定到此数据源已经建立成功连接数据库代码(部分):import class AccessConnection public int i = 1 ;public String SQL_insert ;public Connection conn
12、;public Statement sql;public ArrayListHashMap lists = new ArrayListHashMap();public ResultSet rs;public static String name =;public PreparedStatement ps= null;public byte b = new byte2;public void GetInfo()try (); catch(Exception e) try conn=(jdbc:odbc:redsun,);sql= ();rs = (SELECT * FROM football )
13、;while()HashMap temp = new HashMap(); (name,(name).toString();(lose, (lose)+);(win, (win)+);(flat, (flat)+);(in, (inNum)+);(score, (score)+);(times, (times)+);(temp);= lists;();if(conn !=null)数据库连接正常); catch (Exception e) finally 三、系统测试 四.软件使用说明书使用ODBC建立WINDOW数据源:开始控制面板管理工具数据源(ODBC)用户DSN或系统DSN点添加找到M
14、icrosoft Access Driver (*.mdb),选中,再点完成自定义数据源名称,可创建一个新的或选择已经有的Access数据库(.mdb)其它可以不选确定确定到此数据源已经建立成功(1) 由结果菜单中的最后一次输入菜单,输入最近一轮的比赛情况,包括比赛队名和各队的进球数;(2) 由排序菜单可查看比赛的积分表排序(递减排序),包括每个队的比赛场数,赢的场数,平的场数,负的场数,进球数,失球数,积分;(3) 由查询菜单输入要查询的队名,可查看该对的比赛成绩。 设计总结经历这次的课程设计,对自己的学习有很多帮助,特别是对面向对象程序设计的思想、方法以及具体实现有了较为深刻的体会。在平时
15、的很少有那么多的时间去学习java,这次的课程设计使我有了一个相对比较集中的时间去练习我的编程,特别是我的动手能力有了极大的提高,因为这次的课程设计几乎涉及到了java语言程序设计的整本书的重要内容,让我从中受益,有了一次巩固知识的机会。同时还让自己平时不怎么注意的问题得到了自己足够的关注,为以后写程序奠定下了坚实的基础,让自己对这门课的课程有了更深刻的认识。这次写完程序后,等到自己能顺利运行,中间经历了重重困难,一步一步的调试程序,经历了上百次的失败。不过,最后在程序顺利运行的那一刻,所有付出都有了回报。 通过对该系统的具体设计分析,使我对面向对象程序设计的思想更加深入理解,我基本上掌握了J
16、ava语言的基本知识和技能和面向对象程序设计的基本思路和方法,能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。同时对程序设计风格有全面的强调,提高解决实际问题的能力。并且通过与数据库的连接,深化对数据库编程的理解和运用。 由于我们还没有学数据库这门课,所以我对数据库的操作基本上是清零状态,在网上搜了好多方法,数据库的连接,数据查找,数据库的升级。虽然对于数据库我知之甚深少,但是通过这次课设,让我对数据库产生了极大的兴趣,同时也认识到了数据库在软件编程中的重要地位。最后,用一句话总结这次的课程设计发现问题并解决它。参考文献1曲朝阳,杨杰明等.Java程序设计. 北京: 清华大学出版
17、社,2耿祥以,张跃平.Java大学生实用教程. 北京: 电子工业出版社, 3明日科技.Java经典编程.北京:清华大学出版社,4李尊朝,苏军.Java语言程序设计.北京:中国铁道出版社,5王博. 面向对象的建模、设计技术与方法. 北京希望电脑公司,1990. 致谢首先,我要感谢学校给我们提供了此次课程设计的机会,能让同学们在一起学习与研究,让我们有机会对所学的理论知识进行实践。 其次,我还要特别感谢我的辅导老师王燕老师,在她的精心辅导和帮助下,我的设计才得以顺利完成,并使所学知识得以真正的应用。对她为我的设计所提出的宝贵意见表示忠心的感谢! 最后、在设计过程中,也得到了许多同学的宝贵建议,同时
18、还到许多校友的支持和帮助,在此一并致以诚挚的谢意。源代码:Package student;import class AccessConnection public int i = 1 ;public String SQL_insert ;public Connection conn;public Statement sql;public ArrayListHashMaplists=newArrayListHashMap();public ResultSet rs;public static String name =;public PreparedStatement ps= null;publ
19、ic byte b = new byte2;public void GetInfo()try (); catch(Exception e) try conn = (jdbc:odbc:redsun,);sql= ();rs = (SELECT * FROM football );while()HashMap temp = new HashMap();(name, (name).toString();(lose, (lose)+);(win, (win)+);(flat, (flat)+);(in, (inNum)+);(score, (score)+);(times, (times)+);(t
20、emp);= lists;();if(conn !=null)数据库连接正常); catch (Exception e) finally public void SetInfo(String zhuchang,String kechang,int zhu,int ke)String a=;int b = 0;GetInfo();tryconn = (jdbc:odbc:redsun,);boolean flag=false;for(int i =0 ;ike)b = win).toString()+1;a = update football SET win=+ b + WHERE name =
21、+name).toString()+;else if(zhu=ke)b = flat).toString()+1;a = update football SET flat=+ b + WHERE name =+name).toString()+;elseb = lose).toString()+1;a = update football SET lose=+ b + WHERE name =+name).toString()+; ps=(a); (); b = times).toString()+1; a = update football SET times=+ b + WHERE name
22、 =+name).toString()+; ps=(a); (); int c = in).toString()+zhu; String d = update football SET inNum=+ c + WHERE name =+name).toString()+; PreparedStatement px=(d); (); if(!flag)Statement stmtl=();if(zhuke)(insert into football values (+zhuchang+,1,0,0,+zhu+,3,1);else if(zhu=ke)(insert into football v
23、alues (+zhuchang+,0,0,1,+zhu+,1,1);else(insert into football values (+zhuchang+,0,1,0,+zhu+,0,1);flag=false;for(int i =0 ;iifname).toString().equals(kechang)flag=true;if(zhuke)b = win).toString()+1;a = update football SET win=+ b + WHERE name =+name).toString()+;else if(zhu=ke)b = flat).toString()+1
24、;a = update football SET flat=+ b + WHERE name =+name).toString()+;elseb = lose).toString()+1;a = update football SET lose=+ b + WHERE name =+name).toString()+; ps=(a); (); b = times).toString()+1; a = update football SET times=+ b + WHERE name =+name).toString()+; ps=(a); (); int c = in).toString()
25、+ke; String x = update football SET inNum=+ c + WHERE name =+name).toString()+; ps=(x); (); if(!flag)Statement stmtl=();if(zhuke)(insert into football values (+kechang+,1,0,0,+ke+,3,1);else if(zhu=ke)(insert into football values (+kechang+,0,0,1,+ke+,1,1);else(insert into football values (+kechang+,
26、0,1,0,+ke+,0,1);();catch(Exception e)SetScore();private Statement excuteUpdate() oString()+; ps=(a); (); (); catch (Exception e) et(name).toString().equals(name)temp = (i).get(name).toString()+ 得分: +(i).get(score).toString()+ 胜球场次:+(i).get(win).toString()+ 输球场次:+(i).get(lose).toString()+ 平局场次:+(i).g
27、et(flat).toString();return temp;public String Sort()GetInfo();b0 =0x0d ;b1 =0x0a;ArrayListHashMaptemps=newArrayListHashMap();for(int i= 0 ;i();i+)HashMap temp = new HashMap();for(int j = i ; j();j+)temp = (i);if(score).toString()(j).get(score).toString()HashMap s =(j);(i, s);(j,temp);String sum=;for
28、(int i = 0;i();i+)String temp ;temp = (i).get(name).toString()+ 得分 +(i).get(score).toString()+ 进球数:+(i).get(in).toString()+ 胜球场次:+(i).get(win).toString()+ 输球场次:+(i).get(lose).toString()+ 平局场次:+(i).get(flat).toString()+new String(b);sum =sum+temp;return sum;public String OutInfo()String sum=;GetInfo(
29、);for(int i = 0;i();i+)String temp ;temp = (i).get(name).toString()+得分: +(i).get(score).toString()+t+进球数:+(i).get(in).toString()+t+胜球场次:+(i).get(win).toString()+ 输球场次:+(i).get(lose).toString()+ 平局场次:+(i).get(flat).toString()+new String(b);sum =sum+temp;return sum;package student;import class MainFra
30、me private JFrame frmZ;public static TextArea resultText;public static void main(String args) (new Runnable() public void run() try MainFrame window = new MainFrame(); catch (Exception e)(););public MainFrame() initialize();private void initialize() frmZ = new JFrame();(足球积分管理系统);(100, 100, 510, 229
31、);etLayout(null);resultText = new TextArea();(0, 0, 494, 170);().add(resultText);JMenuBar menuBar = new JMenuBar();(menuBar);JMenu menu = new JMenu(结果);(menu);JMenuItem menuItem_2 = new JMenuItem(最后一次比赛成绩);(new ActionListener() public void actionPerformed(ActionEvent arg0) (););(menuItem_2);JMenu me
32、nu_1 = new JMenu(查询);(menu_1);JMenuItem menuItem_1 = new JMenuItem(分数查询);(new ActionListener() public void actionPerformed(ActionEvent arg0) (););(menuItem_1);JMenu menu_2 = new JMenu(排序);(menu_2);JMenuItem menuItem = new JMenuItem(递减排序);(new ActionListener() public void actionPerformed(ActionEvent
33、arg0) (new AccessConnection().Sort(););(menuItem);package student;import class LastTime extends JDialog private final JPanel contentPanel = new JPanel();private JTextField zhuchangname;private JTextField kechangname;private JTextField zhuchang;private JTextField kechang;public static void Lasttime()
34、 try LastTime dialog = new LastTime();(true); catch (Exception e) ();public LastTime() setTitle(最后一次比赛成绩);setBounds(100, 100, 389, 174);getContentPane().setLayout(new BorderLayout();(new EmptyBorder(5, 5, 5, 5);getContentPane().add(contentPanel, ;(null);JLabel label = new JLabel(主场);(20, 29, 54, 15)
35、;(label);zhuchangname = new JTextField();(58, 26, 66, 21);(zhuchangname);(10);JLabel label_1 = new JLabel(客场);(186, 29, 54, 15);(label_1);kechangname = new JTextField();(239, 26, 66, 21);(kechangname);(10);JLabel label_2 = new JLabel(进球数);(10, 66, 54, 15);(label_2);zhuchang = new JTextField();(58, 63, 66, 21);(zhuchang);(10);JLabel label_3 = new JLabel(进球数);(186, 66, 54, 15);(label_3);kechang = new JT