资源描述
《JAVA程序设计》
课程设计报告
设计题目: 运动会成绩管理系统
学院名称: 信息工程学院
专业班级: 13计本2
姓 名: 杨昀
学 号: 1312210239
目录
一 需求分析。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。3
二 概要设计。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。3
三 详细设计。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。3
3.1 数据库设计。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。3
3.2 模块及窗体设计。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。3
3.2.1 数据库模块设计。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。4
3.2.2 用户登录识别模块。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。5
3.2.3主页面模块。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。5
3.2.4 运动员信息浏览模块。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。6
3.2.5添加运动员信息模块。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。6
3.2.6运动员信息查询修改模块。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。7
3.2.7运动员信息查删除模块。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。8
3.3 主要程序代码。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。8
四 软件测试。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。15
五 总结。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。23
参考资料:.......................................................24
一 需求分析
本系统的主要目的就是实现运动会成绩管理,使运动会成绩管理工作更加容易,从而提高工作效率,降低管理成本.
系统中需要对拥护身份进行管理,采取登陆进入系统的形式.
二 概要设计
/************************************************************************
概要设计阶段主要是粗略描述整个软件的框架,并从业务的角度描述软件的模块、工作流程等。项目的成功取决于设计的好坏,而概要设计则是整个设计的关键部分。概要设计的主要任务是将用户的需求划分为不同的功能,然后将这些功能细分成模块,并给模块一些规则约束,以达到各个模块之间可以相互交流的目的。概要设计关乎到系统的整体架构,因此想做好一个概要设计,不仅仅要熟悉用户的业务流程,还要具备相当丰富的设计经验。
2.1 概要设计的原则
概要设计是根据系统分析的需求和工作环境的情况对整个软件的总体结构进行大致的设计。概要设计要坚持以下几个原则。
(1)细分原则:软件系统都是由很多不同的模块组成,当设计一套软件时,要先将所有的功能分解。解决复杂问题的方法是将其分解成几个小问题,一个个来解决。
(2)提高代码重用性:在面向对象设计中,首先考虑的就是代码的重用,一个好的设计,将来在升级换代时不需要太大的改动,节省了人力物力。
(3)从上而下层层分析:概要设计要从整体出发,逐个剖析软件的功能,从上而下,先分析系统总的功能,然后一步步细分,直到最小的功能模块。
(4)一致性原则:概要设计要求所有功能模块在定义时使用统一的规范。
(5)提高独立性,减少耦合:各个模块与模块之间尽量减少关联,否则修改一个地方就会引起其他多处的变动,不符合面向对象的原则。一般情况下,对类封装后,只允许对类进行扩展,而不能修改,而封装的类必须具有单一职责,既理论情况下不允许两个类共同完成一个功能。
(6)模块的大小要尽量适中:不是结构算法越复杂的模块越好,模块的大小要根据实际工作目标和其他类的耦合紧密程度来决定。经验表明,一个模块的规模不应过大,模块的总行数应控制在10~100行的范围内,最好为30~60行,这样理解和阅读都较方便。过长的模块往往是分解不充分的表现,会增加阅读理解的难度;但小规模太多也会使模块之间联系变得复杂,增大系统在模块调用时传递信息所花费的开销。
由于概要设计是整个设计的重中之重,牵一发而动全身,所以要努力做一个好的概要设计,才能在今后软件开发过程中不再反复。现在软件行业流行模式化驱动设计,将一些市场上比较成功的模式拿来用在自己的设计中。
2.2 将用户需求模块化
根据概要设计的原则来分析一下本项目的用户需求,并最终转化成用程序语言描述的模块。什么样的需求才是一个模块?模块应该具备如下3个特征。
(1)输入和输出:模块必须能被调用并且正确的返回调用,而且调用都是相对一个对象而言,这是模块独立性的一个体现。
(2)处理功能:模块必须可以对调用的输入数据进行灵活的处理,并为输出准备好处理结果。
(3)程序代码:用来实现模块功能的源代码。
2.3 确定系统最终模块
概要设计中最重要的就是确定此项目包括哪些模块。根据上两节讲述的设计原则和模块特征,将用户需求转化为下面的模块。
**************************************************************************/
2.4 UML用例图
1.管理员权限
2.系统流程图
2.5 模块设计
1 数据库设计模块
2 用户登录识别模块
3主页面模块
4运动员信息浏览模块
5 运动员信息添加模块
6运动员信息查询修改模块
7运动员信息删除模块
三 详细设计
3.1 数据库设计
数据库名称:yangyun
表名:tablename
运动员信息表:
学号(INT型)
姓名(varchar)
班级(varchar)
项目名(varchar)
成绩(varchar)
1312210101
杨昀
13计本
100米
11.2S
1312210102
马凯
13金融
跳高
2.6M
1312210103
马嘉岐
14电子
50米短跑
14S
1312210104
刘飞
12英语
铅球
5M
1312210105
王青山
13信管
跳远
2.2米
1312210106
李连杰
14网络
1*400
45S
1312210107
任宇锴
13计本
跳高
2.8M
1312210108
乔欢
14网络
跳远
3.2M
1312210109
李小龙
15信管
4*400男子接力
40S
1312210110
周杰伦
13音乐
跳远
3.5M
1312210111
周星星
14表演
跳高
2.9M
1312210112
王泽林
15生物
铅球
6M
1312210113
刘德华
15表演
跳远
3.4M
1312210114
赵一德
13计本
跳远
3M
1312210115
周小华
14英语
跳高
2.5M
1312210116
王晶晶
15生物
4*400女子接力
50S
1312210117
刘华
15信管
铅球
6.9M
1312210118
刘毅
14英语
4*400男子接力
43S
1312210119
王缓缓
14网络
铅球
6.3M
3.2 模块及窗体设计
3.2.1 数据库模块设计
将数据库的连接包装在一个lianjie类中,以便其他模块能够轻松调用,避免每次重写数据库连接代码。
下表是他的基本属性
文件名
成员变量
成员方法
lianjie.java
Connection conn
PreparedStatement ps;
Statement stmt
ResultSet rs
Public static int shanchu(String )
public static int xiugai(String)
public static int zhucezh()
3.2.2 用户登录识别模块
代码封装在类Denlu,下表是他的基本属性
文件名
控件
成员方法
Denlu.java
JLabel label1=new JLabel("管理员登录:");
JLabel label2=new JLabel("管理员:");
TextField name
JLabel label3=new JLabel(" 密码:");
JPasswordField mima
JButton button1=new JButton("登录");
JButton button2=new JButton("取消");
public Denlu()
3.2.3 主页面
以下是它的基本属性
文件名
控件名称
Jiemian.java
JButton button1_0=new JButton("运动员信息浏览");
JButton button1_1=new JButton("添加运动员信息");
JButton button1_2=new JButton("查询修改运动员信息");
JButton button1_3=new JButton("删除运动员信息");
JButton button1_4=new JButton("退出系统");
3.2.4运动员信息浏览
基本属性如下
文件名
控件名
Chakansuoyou.java
JTable table;
JButton button4_0=new JButton("刷新");
JButton button4_1=new JButton("返回主页");
3.2.5 添加运动员信息
基本属性如下
文件名
控件名
Tianjia.java
TextField num=new TextField(20);
TextField name=new TextField(20);
TextField banji=new TextField(20);
TextField xiangmuming=new TextField(20);
TextField chengji=new TextField(20);
Label label1_0,label1_1,label1_2,label1_3,label1_4,label1_5;
JButton button1_0=new JButton("添加");
JButton button1_1=new JButton("取消");
3.2.6运动员信息的查询与修改
基本属性如下
文件名
控件名
Chagai.java
TextField num=new TextField(20);
TextField name=new TextField(20);
TextField banji=new TextField(20);
TextField xiangmuming=new TextField(20);
TextField chengji=new TextField(20);
Label label1_0,label1_1,label1_2,label1_3,label1_4,label1_5;
JButton button1_0=new JButton("修改");
JButton button1_1=new JButton("取消");
JButton button1_2=new JButton("查询");
3.2.7删除运动员信息
3.3主要程序代码
1.登陆主页:
public class Denlu extends JFrame{
TextField name=new TextField(20);
JPasswordField mima=new JPasswordField(15);
JFrame f=new JFrame("榆林学院运动会成绩管理系统");
public Denlu(){
f.setBounds(450,200,400,300);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setResizable(false);
f.setLayout(null);
JLabel label1=new JLabel("管理员登录:");
JLabel label2=new JLabel("管理员:");
JLabel label3=new JLabel(" 密 码:");
label1.setFont(new Font("Serif",Font.BOLD,20));
label1.setBounds(0,0,300,50);
label2.setFont(new Font("Serif",Font.BOLD,15));
label3.setFont(new Font("Serif",Font.BOLD,15));
JButton button1=new JButton("登录");
JButton button2=new JButton("取消");
BHandler h=new BHandler();
button1.addActionListener(h);
button2.addActionListener(h);
JPanel p1=new JPanel();
JPanel p2=new JPanel();
JPanel p3=new JPanel();
f.add(label1);
p1.setBounds(0,60,380,30);
p1.add(label2);
p1.add(name);
p2.setBounds(0,90,380,30);
p2.add(label3);
p2.add(mima);
p3.setBounds(0,150,420,40);
p3.add(button1);
p3.add(button2);
f.add(p1);
f.add(p2);
f.add(p3);
f.setVisible(true);
}
public static void main(String[] args) {
Denlu a=new Denlu();
}
public class BHandler implements ActionListener {
public void actionPerformed (ActionEvent event) {
if(event.getActionCommand()=="登录")
{
if(name.getText().equals("yangyun")&&mima.getText().equals("123"))
{
Jiemian zhuce=new Jiemian();
}
else
JOptionPane.showMessageDialog(Denlu.this,"卡号或者密码不正确!");
}
else
{
f.dispose();
}
}
}
}
2.主界面:
public class Jiemian extends JFrame{
JFrame f=new JFrame("运动会成绩管理系统界面");
public Jiemian(){
JLabel label1;
f.setBounds(400,150,600,450);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setResizable(false);
f.setLayout(null);
label1=new JLabel("欢迎进入榆林学院运动会成绩管理系统",SwingConstants.CENTER);
label1.setFont(new Font("Serif",Font.BOLD,25));
JButton button1_0=new JButton("运动员信息浏览");
JButton button1_1=new JButton("添加运动员信息");
JButton button1_2=new JButton("查询修改运动员信息");
JButton button1_3=new JButton("删除运动员信息");
JButton button1_4=new JButton("退 出 系 统");
BHandler h=new BHandler();
button1_0.addActionListener(h);
button1_0.setFont(new Font("宋体", Font.BOLD, 20));
button1_0.setSize(400,35);
button1_1.addActionListener(h);
button1_1.setFont(new Font("宋体", Font.BOLD, 20));
button1_1.setSize(400,35);
button1_2.addActionListener(h);
button1_2.setFont(new Font("宋体", Font.BOLD, 20));
button1_2.setSize(400,35);
button1_3.addActionListener(h);
button1_3.setFont(new Font("宋体", Font.BOLD, 20));
button1_3.setSize(400,35);
button1_4.addActionListener(h);
button1_4.setFont(new Font("宋体", Font.BOLD, 20));
button1_4.setSize(400,35);
JPanel p0=new JPanel();
JPanel p1=new JPanel();
JPanel p2=new JPanel();
JPanel p3=new JPanel();
JPanel p4=new JPanel();
JPanel p5=new JPanel();
p0.setBounds(0,0,600,60);
p0.add(label1);
p1.setLayout(null);
p1.setBounds(100,60,600,40);
p1.add(button1_0);
p2.setLayout(null);
p2.setBounds(100,120,600,40);
p2.add(button1_1);
p3.setLayout(null);
p3.setBounds(100,180,600,40);
p3.add(button1_2);
p4.setLayout(null);
p4.setBounds(100,240,600,40);
p4.add(button1_3);
p5.setLayout(null);
p5.setBounds(100,300,600,40);
p5.add(button1_4);
f.add(p0);
f.add(p1);
f.add(p2);
f.add(p3);
f.add(p4);
f.add(p5);
f.setVisible(true);
}
private class BHandler implements ActionListener {
public void actionPerformed (ActionEvent event) {
if(event.getActionCommand()=="运动员信息浏览")
{Chakansuoyou a=new Chakansuoyou(); }
else if(event.getActionCommand()=="添加运动员信息")
{ Tianjia b=new Tianjia();}
else if(event.getActionCommand()=="查询修改运动员信息")
{ Chagai b=new Chagai();}
else if(event.getActionCommand()=="删除运动员信息")
{ Shanchu b=new Shanchu();}
else if(event.getActionCommand()=="退 出 系 统")
{ f.dispose();}
}
}
}
3.运动员信息浏览:
public class Chakansuoyou extends JFrame{
JFrame f=new JFrame("查看所有运动员信息");
public static Object[][] data=new Object[30][5];
JTable table;
String[] lieming={"学 号","姓 名","班 级","项目名","成绩"};
public Chakansuoyou(){
f.setBounds(400,150,600,450);
//f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//f.setResizable(false);
f.setLayout(null);
table=new JTable(data,lieming);
table.setEnabled(false); //表格不可编辑
JButton button4_0=new JButton("刷新");
JButton button4_1=new JButton("返回主页");
BHandler h=new BHandler();
button4_0.addActionListener(h);
button4_1.addActionListener(h);
JPanel p1=new JPanel();
JPanel p2=new JPanel();
p1.setBounds(0,0,600,40);
p1.add(button4_0);
p1.add(button4_1);
p2.setBounds(0,44,600,410);
p2.add(new JScrollPane(table));
f.add(p1);
f.add(p2);
f.setVisible(true);
}
private class BHandler implements ActionListener {
public void actionPerformed (ActionEvent event) {
if(event.getActionCommand()=="刷新")
{
int h=0,l=0;
//data=new Object[30][5];
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/yangyun","root","");
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery("select * from tablename");
while(rs.next()){
System.out.println(rs.getString("Uname"));
data[h][l++]=rs.getString("ID");
data[h][l++]=rs.getString("Uname");
data[h][l++]=rs.getString("Ubanji");
data[h][l++]=rs.getString("Uxiangmuming");
data[h][l++]=rs.getString("Uchengji");
h++;l=0;
}
rs.close();
stmt.close();
conn.close();
table=new JTable(data,lieming);
f.setVisible(true);
} catch(Exception sqle){
System.err.println(sqle);
JOptionPane.showMessageDialog(Chakansuoyou.this,"系统故障,请稍后在试!");
}
}
else
f.dispose();
}
}
}
4运动员信息添加:
public class Tianjia extends JFrame{
JFrame f=new JFrame("添加运动员");
TextField num=new TextField(20);
TextField name=new TextField(20);
TextField banji=new TextField(20);
TextField xiangmuming=new TextField(20);
TextField chengji=new TextField(20);
public Tianjia(){ //添加运动员
JLabel label1_0,label1_1,label1_2,label1_3,label1_4,label1_5;
JPanel p1,p2,p3,p4,p1_0,p1_1,p1_2,p1_3,p1_4,p1_5,p1_6;
f.setBounds(400,150,600,450);
//f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setResizable(false);
f.setLayout(null);
JButton button1_0=new JButton("添加");
JButton button1_1=new JButton("取消");
BHandler h=new BHandler();
button1_0.addActionListener(h);
button1_1.addActionListener(h);
label1_0=new JLabel("请输入要添加的运动员信息",SwingConstants.CENTER);
label1_0.setFont(new Font("Serif",Font.BOLD,25));
label1_1=new JLabel("学 号:",SwingConstants.CENTER);
label1_1.setFont(new Font("Serif",Font.BOLD,15));
label1_2=new JLabel("姓 名:",SwingConstants.CENTER);
label1_2.setFont(new Font("Serif",Font.BOLD,15));
label1_3=new JLabel("班 级:",SwingConstants.CENTER);
label1_3.setFont(new Font("Serif",Font.BOLD,15));
label1_4=new JLabel("项目名:",SwingConstants.CENTER);
label1_4.setFont(new Font("Serif",Font.BOLD,15));
label1_5=new JLabel("成 绩:",SwingConstants.CENTER);
label1_5.setFont(new Font("Serif",Font.BOLD,15));
p1_0=new JPanel();
p1_0.setBounds(0,0,400,80);
p1_0.add(label1_0);
p1_1=new JPanel();
p1_1.setBounds(0,80,550,50);
p1_1.add(label1_1);
p1_1.add(num);
p1_2=new JPanel();
p1_2.setBounds(0,130,550,50);
p1_2.add(label1_2);
p1_2.add(name);
p1_3=new JPanel();
p1_3.setBounds(0,180,550,50);
//p1_3.setBackground(Color.blue);
p1_3.add(label1_3);
p1_3.add(banji);
p1_4=new JPanel();
p1_4.setBounds(0,230,550,50);
p1_4.add(label1_4);
p1_4.add(xiangmuming);
p1_5=new JPanel();
p1_5.setBounds(0,280,550,50);
p1_5.add(label1_5);
p1_5.add(chengji);
p1_6=new JPanel();
p1_6.setBounds(0,330,600,50);
p1_6.add(button1_0);
p1_6.add(button1_1);
f.add(p1_0);
f.add(p1_1);
f.add(p1_2);
f.add(p1_3);
f.add(p1_4);
f.add(p1_5);
f.add(p1_6);
f.setVisible(true);
}
private class BHandler implements ActionListener {
public void actionPerformed (ActionEvent event) {
if(event.getActionCommand()=="添加")
{int q;
q=Lianjie.zhucezh(num.getText(),name.getText(),banji.getText(),xiangmuming.getText(),chengji.getText());
if(q==1)
JOptionPane.showMessageDialog(Tianjia.this,"添加成功!");
else
JOptionPane.showMessageDialog(Tianjia.this,"系统故障,请稍后在试!");
}
else
{
f.dispose();
}
}
}
}
5.运动员信息查询与修改:
public class Chagai extends JFrame{
JFrame f=new JFrame("修改运动员信息");
TextField num=new TextField(20);
TextField name=new TextField(20);
TextField banji=new TextField(20);
TextField xiangmuming=new TextField(20);
TextField chengji=new TextField(20);
public Chagai(){
JLabel label1_0,label1_1,label1_2,label1_3,label1_4,label1_5;
JPanel p1,p2,p3,p4,p1_0,p1_1,p1_2,p1_3,p1_4,p1_5,p1_6;
f.setBounds(400,150,600,450);
//f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setResizable(false);
f.setLayout(null)
展开阅读全文