资源描述
《Java程序课程设计》
实验报告
题目: 排球比赛记分系统
专业: 软件工程
班级: 2015级
组别:
组长: 岑海佳
成员: 1515080101岑海佳、1515080127张圣华
完成日期: 2017.10.8
小组分工:
组 长
岑海佳
负责
主要页面设计及部分代码
组 员
张圣华
负责
部分代码设计
广西师范学院
目录
摘要……………………………………………………………………………………3
一、系统设计要求……………………………………………………………………4
二、系统需求分析……………………………………………………………………4
2.1功能需求……………………………………………………………………4
2.2性能需求……………………………………………………………………5
三、系统详细设计……………………………………………………………………6
3.1程序流图……………………………… ……………………………………6
3.2本系统运行界面…………………… ………………………………………7
四、设计总结和体会…………………………………………………………………9
五、参考文献…………………………………………………………………………9
代码附录……………………………………………………………………………10
摘要
随着计算机技术的发展,人们对计算机智能化的需求越来越大,对软件的实用性、速度等性能的要求也越来越高。未来各项赛事的举办肯定越来越科技化,传统手工记录赛事结果的记录也越来越满足不了大众需求,而且随着计算机的普及,信息处理量的逐渐扩大,各种工作都逐渐由手工转为自动化,将使许多复杂、繁琐、且需要很多人力的工作变得简单。在本课程设计中,我们就排球比赛记分系统进行科技化的更新,借此隐射到全部体育赛事中。
工具软件利用eclipse开发工具以及记事本记录方式来开发这个排球比赛记分系统。该系统要满足的是排球比赛记录人员记录简单化需求,通过电子化记录使得赛事结果更加安全可靠。此系统也很好的注重用户体验舒适度,力求为用户营造更良好的体验环境
关键字:排球比赛记分系统,Eclipse EE,记事本
一、系统设计要求
编写一个能够对排球比赛实时统计比分和显示比分的程序。排球竞赛规则规定:排球竞赛为五局三胜制,每局比赛中得够25分并且领先对方2分以上的一方将获得一局胜利,先获得三局胜利的一方将获得比赛的胜利。若比赛中出现24:24的比分,则一方必须领先对方2分方可结束一局。若双方前四局的比分为2:2,则将进行第五局的比赛,第五局比赛中得够15分并且领先对方2分以上的一方将获得胜利。若比赛中出现14:14的比分,则一方必须领先对方2分方可结束比赛。
设计一个程序,分别用两个按钮来输入比赛一方的得分。根据比赛进展,用两个固定的按钮输入比赛双方的得分,如果一方得分,则按下对应的按钮一次,GUI界面上的分数将增加1分。当完成一局比赛时,程序自动将比赛得分清零,并且相应地将获得本局胜利一方的局分增加1分。若一方获得三局比赛的胜利,则程序自动显示获胜一方的名称。
二、系统需求分析
排球计分系统是专门针对排球的一款计分系统,在符合排球规则的情况下轻松计分。应用此系统可以代替人工计分过程,大大减少了由于人员操作引起的错误。可以使排球计分达到真正的公正性、公开性。同时又方便了计分人员的记录操作,系统处理性强。
2.1功能需求:
(一) 能自由选择任意两支比赛队伍,并且显示它们对应的队旗图像,提高用户体验舒适度;
(二) 能选择任意比赛场次,并通过对应按钮为特定队伍进行得分加分;
(三) 更换场次比分自动清零,重新计分;
(四) 对得分进行判断,如果某只队伍符合胜利规则,则自动弹出胜利提示框;
(五) 能选择保存赛程的比分,以供回顾使用。
2.2性能需求:
为了保证系统能够长期、安全、稳定、可靠、高效的运行,本系统应该满足以下的性能需求。
2.2.1 准确性和及时性
系统处理的准确性和及时性是系统的必要性能。系统应能及时而且准确的根据用户权限及所输入的信息做出响应。由于本系统的查询功能对于整个系统的功能和性能完成举足轻重。作为系统的很多数据来源,而赛程比分对于整个赛事来说至关重要,我们需要保证这个系统能很好的保存比赛结果,这个要求在很大程度上决定了系统的成败。在系统开发过程中,必须采用一定的方法保证系统数据的准确性和及时性。
2.2.2 易用性
本系统是直接面对用户的,而用户往往对计算机并不是非常熟悉。这就要求系统能够提供良好的用户接口,易用的人机交互界面。要实现这一点,就要求系统应该尽量使用用户熟悉的术语和中文信息的界面,从而保证系统的易用性。
三、系统详细设计
3.1程序流图:本系统主要实现功能为比赛分数的累加及存储功能,下图3.1.1和图3.2分别为这两个功能的程序流图:
开始
某队得分
点击对应按钮
实现分数累加一
存入系统数据
否
判断是否满足
结束条件
是
结束
图3.1.1分累加流程图
开始
否
是否保存数据
是
保存文件
结束
图3.1.2 数据保存流程图
3.2本系统运行界面:
本系统各部分页面如下各图所示:
图3.2.1主窗口页面
图3.2.2选择比赛队伍窗口
3.2.3选择比赛场次页面
图3.2.4保存页面
四、设计总结和体会
二十一世纪是一个高速、快捷的年代。在这个高速发展的年代里,我们必须顺应社会发展,简化工作环节,提高工作效率,而且易学、易用,满足客户需求。
这次系统的设计从最开始的可行性研究,需求分析,到系统的总体设计,详细设计,再到编码、测试等的一个整体过程,使我们真正明白了要做一个软件的难度,特别是要做一个真正可用的软件,就更难了。在老师和同学的帮助下,我们把以往所学的知识结合起来,利用Eclipse开发工具,完成了本次课程设计,尽量使它能满足各个方面的要求。当然,我们的个人能力有限,还有很多不足的地方,敬请谅解。
在这次课程设计过程中我遇到了不少的难题,界面设计问题,函数使用与实现问题,消息处理问题等等。其中,最关键的是在最初对系统的需求分析做的不透彻,导致后续设计工作乃至编码时的修改工作量变大。所以,通过这次课程设计我深刻体会到软件工程还是必须学精通点、学透彻点。
通过这次课程设计,我学会了如何对所学课程综合运用,eclipse的使用也有了更进一步了解。总体来说,课程设计让我学了不少知识。
我认为课程设计是我们学习生涯中相当重要的一课,除了验证学生的学习成果外,也是训练一个人独立思考及解决问题的能力.在这里,我要感谢指导老师和同学在这次课程设计中对我的帮助。
五、参考文献:
JAVA 2实用教程(第4版)耿祥义 张跃平 编著 清华大学出版社
附录:程序代码清单
package ziyou;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
public class jiem extends JFrame {
/**
*
*/
int countAdd1= 0;
int countAdd2= 0;
String str1[] = {"国家", "中国", "美国", "英国"};
String str2[] = {"国家", "俄罗斯", "德国", "法国"};
String str3[]={"场次","第一场","第二场","第三场","第四场","第五场"};
private static final long serialVersionUID = 1L;
private JButton insert = new JButton();
private JButton de = new JButton();
private JButton Add1 = new JButton("ADD");
private JButton Add2 = new JButton("ADD");
private JButton sava = new JButton("Sava");
private JLabel VS = new JLabel("VS");
private JLabel kong = new JLabel(" : ");
private JLabel kong2 = new JLabel(" ");
private JLabel kong3 = new JLabel(" ");
private JLabel kong4 = new JLabel(" ");
private JTextField text1=new JTextField(5);
private JTextField text2=new JTextField(5);
@SuppressWarnings({ "rawtypes", "unchecked" })
private JComboBox jcb= new JComboBox(str1); //下拉框
@SuppressWarnings({ "rawtypes", "unchecked" })
private JComboBox jcb1= new JComboBox(str2); //下拉框
@SuppressWarnings({ "rawtypes", "unchecked" })
private JComboBox jcb2= new JComboBox(str3); //下拉框
public jiem(){
Panel panel =new Panel();
//panel.setLayout(null);
Panel panel2=new Panel();
Panel panel3=new Panel();
//***************窗体属性*****************
this.setResizable(false);
this.setTitle("排球记分系统");//标题设置
this.setBounds(200,100,500,600);//前面两个数据代表位置,后面两个代表大小
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
ImageIcon background = new ImageIcon("D:\\ziyou\\TuPian\\7.jpg");
// 把背景图片显示在一个标签里面
JLabel label = new JLabel(background);
// 把标签的大小位置设置为图片刚好填充整个面板
label.setBounds(0, 0, this.getWidth(), this.getHeight());
// 把内容窗格转化为JPanel,否则不能用方法setOpaque()来使内容窗格透明
JPanel imagePanel = (JPanel) this.getContentPane();
imagePanel.setOpaque(false);
// 把背景图片添加到分层窗格的最底层作为背景
this.getLayeredPane().add(label, new Integer(Integer.MIN_VALUE));
//***********第一行********************************
Dimension preferredSize = new Dimension(100,100);//设置尺寸
insert.setPreferredSize(preferredSize);
de.setPreferredSize(preferredSize);
VS.setFont(new Font("",1,30));//设置字体大小
panel.add(jcb);
panel.add(insert);
//insert.setBounds(10,10,100,10);
panel.add(VS);
panel.add(de);
panel.add(jcb1);
this.add(panel, BorderLayout.NORTH);
//jcb.setSelectedIndex(1);
//***********第一行********************************
//***********第二行********************************
setLayout(new FlowLayout());
panel2.add(jcb2);
panel2.add(kong4);
panel2.add(text1);
panel2.add(kong);
panel2.add(text2);
panel2.add(kong3);
panel2.add(sava);
this.add(panel2,BorderLayout.NORTH);
//***********第二行********************************
//***********第三行******************************
setLayout(new FlowLayout());
Dimension preferredSize1 = new Dimension(70,30);//设置尺寸
Add1.setPreferredSize(preferredSize1);
Add2.setPreferredSize(preferredSize1);
panel3.add(Add1);
panel3.add(kong2);
panel3.add(Add2);
this.add(panel3,BorderLayout.NORTH);
//*************************************************
//**************ADD1 分数*******************************
Add1.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
countAdd1++;
methodAdd1();
}
}
);
//***********ADD2 分数*******************************
Add2.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
countAdd2++;
methodAdd2();
}
}
);
//***************下拉框触发一************************************
jcb.addItemListener(new ItemListener()
{
@Override
public void itemStateChanged(ItemEvent e)
{
//如果选中了一个
if ((String) jcb.getSelectedItem()==str1[0]){
insert.setIcon(new ImageIcon("D:\\ziyou\\TuPian\\8.jpg"));}
if ((String) jcb.getSelectedItem()==str1[1]){
insert.setIcon(new ImageIcon("D:\\ziyou\\TuPian\\1.jpg"));}
if ((String) jcb.getSelectedItem()==str1[2]) {
insert.setIcon(new ImageIcon("D:\\ziyou\\TuPian\\2.jpg"));}
if ((String) jcb.getSelectedItem()==str1[3]) {
insert.setIcon(new ImageIcon("D:\\ziyou\\TuPian\\3.jpg"));}
}
});
//******************************************************************
//**********************下拉框触发二***********************************
jcb1.addItemListener(new ItemListener()
{
@Override
public void itemStateChanged(ItemEvent e)
{
//如果选中了一个
if ((String) jcb1.getSelectedItem()==str2[0]){
de.setIcon(new ImageIcon("D:\\ziyou\\TuPian\\8.jpg"));}
if ((String) jcb1.getSelectedItem()==str2[1]){
de.setIcon(new ImageIcon("D:\\ziyou\\TuPian\\4.jpg"));}
if ((String) jcb1.getSelectedItem()==str2[2]) {
de.setIcon(new ImageIcon("D:\\ziyou\\TuPian\\5.jpg"));}
if ((String) jcb1.getSelectedItem()==str2[3]) {
de.setIcon(new ImageIcon("D:\\ziyou\\TuPian\\6.jpg"));}
}
});
//**********************************************************************
//***************保存数据*************************
sava.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
sava();
@SuppressWarnings("unused")
int res=JOptionPane.showConfirmDialog(null, "正在保存", "是否保存", JOptionPane.YES_NO_OPTION);
}
}
);
//*******************************************************
this.setVisible(true);
}
//**********触发1***************************
public void methodAdd1(){
String s=String.valueOf(countAdd1);
text1.setText(s);
}
//**********触发2************************************
public void methodAdd2(){
String s=String.valueOf(countAdd2);
text2.setText(s);
}
//****************************************************
public void sava(){
FileOutputStream fop = null;
File file;
String content = (String) jcb.getSelectedItem()+"vs"+(String) jcb1.getSelectedItem()+" "+(String) jcb2.getSelectedItem()+" "+text1.getText().toString()+":"+text2.getText().toString();
try {
file = new File("D:\\ziyou\\Sava Data",(String) jcb.getSelectedItem()+"vs"+(String) jcb1.getSelectedItem()+(String) jcb2.getSelectedItem()+".txt");
fop = new FileOutputStream(file);
if (!file.exists()) {
file.createNewFile();
}
// get the content in bytes
byte[] contentInBytes = content.getBytes();
fop.write(contentInBytes);
fop.flush();
fop.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fop != null) {
fop.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
15
展开阅读全文