课程设计报告格式 - 副本

时间:2024.3.19

重庆科技学院

Java平台与应用开发》

课程设计报告

   

院(系):_电气与信息工程_ 专业班级:    计科1301        

学生姓名:    张永富        学    号:   2013441476      

设计地点(单位)______          I301__  _______ _   _

设计题目:_数字魔板游戏程序设计、学籍管理程序设计____   

        完成日期:  20##年 07月 10日

       

指导教师评语: ___________________ ___________________

__________________________________________________________________________

_____________________________________________________________            

成绩(五级记分制):______ __________
          指导教师(签字):________  ________

重庆科技学院

课程设计任务书

设计题目:数字魔板游戏程序设计 

系主任:                          指导教师:王双明 游明英 陈承源 王成敏

                      20##年 6月 20日

重庆科技学院

课程设计任务书

设计题目:学籍管理程序设计

系主任:                          指导教师:王双明 游明英 陈承源 王成敏

                      20##年 6月 20日

摘要

       在java语言火热的惊天,我们身边的应用程序也越来越多。能用好java编程语言,写出一个功能完善的应用程序是每个程序员必要的基本功。

这本实验中,做了魔板,和学籍管理两个题目。其中用到了java的swing组件。及其组件的属性设置,监听器的注册和编写。数据用了SQL server 2008储存。在魔板中用到了对按钮的操作,通过对按钮的Text属性的改变来达到交换的效果。还用到了系统函数来计时。判断游戏成功后弹出对话框显示和储存玩家信息。游戏等级是通过菜单选择4X4或3X3两种不同的难度。在学籍管理系统中,同样的用到了卡片布局来达到不同功能面板之间的切换。在进入系统之前会有个身份验证,通过不同账号会得到不同的操作面板。最终把数据保存到数据库中。为简化代码,本系统在数据库中编写了触发器来辅助本系统。有些地方在不能判断用户是否输入合法。界面的布局没有主题,但各个组件布局合理,功能完备。

关键词:SQL swing 监听器 布局 面板

目录

摘要    3

任务书一:数字魔板游戏程序设计    5

1 设计内容和要求    5

1.1 内容    5

1.2 要求    5

2 需求分析    6

2.1 界面需求    6

2.2 逻辑需求    6

2.3 数据库需求    6

3 数据库设计    7

3.1 逻辑结构设计    7

4 主程序设计    8

4.1 主界面设计    8

4.2 游戏面板    11

4.3 游戏结果对话框    16

4.4 数据库连接    19

任务书二:学籍管理程序设计    20

5 设计内容和要求    20

5.1 内容    20

5.2 要求    20

6 需求分析    21

6.1 界面需求    21

6.2 逻辑需求    21

6.3 数据库需求    22

7 数据库设计    23

7.1 逻辑结构设计    23

7.2 触发器    25

8 主程序设计    28

8.1 登录界面    28

8.2 管理员界面    30

8.3 学生界面    33

8.4 录入面板    35

8.5 查找面板    39

8.6 修改面板    44

8.7 删除面板    48

8.8 数据库连接    48

总结    50

结论    51

参考文献    52

致谢    53

任务书一:数字魔板游戏程序设计

1 设计内容和要求

1.1 内容

设计一个GUI界面的数字魔板游戏程序,魔板由4´4或3´3个方格组成,其中一个格子是空的,对于4´4的魔板,其他格子里随机放置15个编号为1-15的方块;对于3´3的魔板,其他格子里随机放置8个编号为1-8的方块。用鼠标单击任何与空各自相邻的方块可以把该方块移入空格子,通过不断移动方块,可以将方块一行一行按数字顺序依次排列。

1.2 要求

通过“级别”菜单来选择魔板是由4´4还是由3´3个方格组成。记录每次游戏完成所花费的时间,当发现方块一行一行按数字顺序依次排列时,将显示保存成绩对话框,用户可以选择是否将自己所花费的时间作为成绩记录下来,成绩可以保存在文件或数据库中。

2 需求分析

2.1 界面需求

界面中要能选择游戏的难度,选择后开始游戏。当成功完成游戏后弹出结果对话框,结果对话框中显示游戏等级及所用时间,要就玩家输入玩家姓名。然后储存到数据库中对应的游戏记录表中。游戏时能点击非空白方块,使得周围的空白方块与此交换,以此操作达到满足游戏胜利条件。

2.2 逻辑需求

初始化主界面,添加菜单栏,用卡片布局加载两个等级的游戏面板,用标签挡住。在点击菜单对应选项是,触发事件,设置对应等级游戏面板可见,并开始计时。游戏用对应个数的按钮来实现,当点击时修改对应的Text属性,来达到游戏效果。当游戏完成是,结束计时新建一个结果对话框,把游戏信息写到对话框中。对话框中要求填写玩家信息,点击OK保存到数据库。

2.3 数据库需求

    建立一个储存游戏结果信息的数据库,数据库中有两个表,分别储存两个等级游戏的记录。其中的信息包括玩家姓名、玩家游戏用时等。

3 数据库设计

3.1 逻辑结构设计

图3.1 魔板游戏数据库物理模型

建立两个表,game1存的是3X3等级游戏的游戏记录,game2存的是4X4等级的游戏记录.其对于数据属性为:姓名 varchar(10)、用时 varchar(10)  notnull。

4 主程序设计

4.1 主界面设计

图4.1 魔板主界面

关键代码:

publicclass Player extends JFrame implements ActionListener {

    privatestaticfinallongserialVersionUID = 7586443060505861249L;

       test   game1=null

       test1 game2=null;   

       JMenuBar bar;

       JMenu fileMenu;

       JMenuItem game3x3,game4x4;     

       Container con=null

       CardLayout card=null;         

       JLabel label=null;           

       JPanel pCenter;     

       public Player()

       {

         this.setTitle("魔板");

         this.setResizable(false);

        game3x3=new JMenuItem("挑战3x3");

        game4x4 =new JMenuItem("挑战4x4");            

         bar=new JMenuBar();                 

         fileMenu=new JMenu("菜单选项");      

         fileMenu.add(game3x3);

         fileMenu.add(game4x4);    

         bar.add(fileMenu);

         setJMenuBar(bar);    

         label=new JLabel("接受挑战",JLabel.CENTER);

         label.setFont(new Font("TimesRoman",Font.BOLD,24));

         label.setForeground(Color.red);          

         game3x3.addActionListener(this);

         game4x4.addActionListener(this);

         card=new CardLayout();

         con=getContentPane();

         pCenter=new JPanel();

         pCenter.setLayout(card);        

         game1=new test();

         game2=new test1();     

         pCenter.add("欢迎语界面",label);

         pCenter.add("game1",game1);

         pCenter.add("game2",game2);    

         con.add(pCenter,BorderLayout.CENTER);

         con.validate();

         addWindowListener(new WindowAdapter()

                        { publicvoid windowClosing(WindowEvent e)

                           {

                              System.exit(0);

                         }

                        });

        setVisible(true);

        setBounds(100,50,420,380);

        validate();

       }  

      publicvoid actionPerformed(ActionEvent e)

       {

        

         if(e.getSource()==game3x3)//游戏开始

           {

            pCenter.remove(game1);

            pCenter.add("game1",game1);

            this.game1=new test();

            card.show(pCenter,"game1");

           }

        

         elseif(e.getSource()==game4x4) //游戏开始

           {

            pCenter.remove(game2);

            pCenter.add("game2",game2);

            this.game2=new test1();

          

            card.show(pCenter,"game2");

           }    

       } 

      publicstaticvoid main(String args[])

       {

         new Player();

       }

}

4.2 游戏面板

图4.2 魔板游戏3X3难度

关键代码:

publicclass test extends JPanel implements ActionListener

{

    privatestaticfinallongserialVersionUID = 1L;

    Color c1=Color.LIGHT_GRAY;//背景1

    Color c2=Color.WHITE;//背景2

    Font f=new Font(Font.MONOSPACED,Font.BOLD,40);//字体

    long starttime,endtime;

    int time;

    String[] values={"1","2","3","4","5","6","7","","8"};

    JButton b1=new JButton();

    JButton b2=new JButton();

    JButton b3=new JButton();

    JButton b4=new JButton();

    JButton b5=new JButton();

    JButton b6=new JButton();

    JButton b7=new JButton();

    JButton b8=new JButton();

    JButton b9=new JButton();

    JButton[][] V={{b1,b2,b3},{b4,b5,b6},{b7,b8,b9}};

    public test()

    {  

       Integer k = 1;

       ArrayList<Integer> lst=test2.GetNum(9);

       this.setLayout(new GridLayout(3,3));//网格布局

       for(int i=0;i<V.length;i++)

       {

           for(int j=0;j<V[i].length;j++)

           {

              Integer x=(int) lst.get(k-1);

              V[i][j].setText(values[x-1]);

              V[i][j].setBackground(c2);

              V[i][j].setFont(f);

              V[i][j].addActionListener(this);

              add(V[i][j]);

              if(V[i][j].getText()=="")

              {

                  V[i][j].setBackground(c1);

              }

              k++;

           }

       }

      

       this.setSize(500, 515);//设置大小

       this.setLocation(450,200);//定位

       this.setVisible(true);

       starttime=System.currentTimeMillis();

    }

    public  int success()

    {//判断是否成功

       Integer  b=1;

       for(int i=0;i<V.length;i++)

       {

           for(int j=0;j<V[i].length;j++)

           {

              if(i==V.length-1&&j==(V[0].length-1))

              {

                  for(;b>=0;b--)

                  {

                     System.out.println(b);

                  }

              }

              else

              {

    if(V[i][j].getText()==""||!Integer.valueOf(V[i][j].getText()).equals(b))

    {

       return 0;

    }

                  b++;

              }

           }

       }

       return 1;

    }

    publicvoid actionPerformed(ActionEvent ev)

    {//游戏动作

       int a=-1;

       int b=-1;

       for(int i=0;i<V.length;i++)

       {

           for(int j=0;j<V[i].length;j++)

           {

              if(V[i][j].equals(ev.getSource()))

              {

                  a=i;

                  b=j;

              }

             

           }

       }

       if((a-1)>=0&&V[a-1][b].getText()=="")

       {

           V[a-1][b].setText(V[a][b].getText());

           V[a-1][b].setBackground(c2);

           V[a][b].setText("");

           V[a][b].setBackground(c1);

       }

       if((a+1)<V.length&&V[a+1][b].getText()=="")

       {

           V[a+1][b].setText(V[a][b].getText());

           V[a+1][b].setBackground(c2);

           V[a][b].setText("");

           V[a][b].setBackground(c1);

       }

       if((b-1)>=0&&V[a][b-1].getText()=="")

       {

           V[a][b-1].setText(V[a][b].getText());

           V[a][b-1].setBackground(c2);

           V[a][b].setText("");

           V[a][b].setBackground(c1);

       }

       if((b+1)<V.length&&V[a][b+1].getText()=="")

       {

           V[a][b+1].setText(V[a][b].getText());

           V[a][b+1].setBackground(c2);

           V[a][b].setBackground(c1);

           V[a][b].setText("");

       }

       if(this.success()==1)

       {

           int a1 = 0,b1 = 0;

           for(int i=0;i<V.length;i++)

           {

              a1=i;

              for(int j=0;j<V[i].length;j++)

              {

                  b1=j;

                  V[i][j].removeActionListener(this);

              }

           }

           V[a1][b1].setText("OK");

            endtime=System.currentTimeMillis();

            time=(int) ((endtime-starttime)/1000);

            System.out.println(endtime);

            System.out.println(starttime);

            Gameinfo G=new Gameinfo();

            G.time.setText("3x3用时   "+time/60+":"+time%60);

            G.setVisible(true);

       }

    }

}

4.3 游戏结果对话框

图4.3 魔板游戏完成

关键代码:

publicclass Gameinfo extends JDialog implements ActionListener {

    privatestaticfinallongserialVersionUID = 1329376948651052086L;

       JTextField 姓名;

       JButton OK;

       JLabel time;

         public Gameinfo()

         {

       姓名=new JTextField(10); 

          OK=new JButton("OK");

          OK.addActionListener(this);

        

          time= new JLabel("用时   00:00",JLabel.CENTER);

          Box box0=Box.createHorizontalBox();

          box0.add(time);

          Box box1=Box.createHorizontalBox();   

          box1.add(new JLabel("姓名",JLabel.CENTER));

          box1.add(姓名);

          Box boxH=Box.createVerticalBox();  

          boxH.add(box0);

          boxH.add(box1);

          boxH.add(Box.createVerticalGlue());//使垂直Box内的组件靠上对齐

          JPanel pCenter=new JPanel();

          pCenter.add(boxH);

          pCenter.add(OK);

          Container con=getContentPane();

          con.add(pCenter,BorderLayout.CENTER);

          con.validate();

          setVisible(false);

          setBounds(150,100,150,150);

          this.setResizable(false);

          addWindowListener(new WindowAdapter()

                           { publicvoid windowClosing(WindowEvent e)

                              {

                                setVisible(false);

                            }

                           });

         }

        publicvoid actionPerformed(ActionEvent e)

         {

            if(e.getSource()==OK)

            {

              String 姓名= this.姓名.getText();

              String 用时=this.time.getText().substring(7, this.time.getText().length());

              Data db=new Data();

              int m=this.time.getText().charAt(0)=='3'?1:2;

              String sql="insert into  game"+m+" values('"+姓名+"','"+用时+"')";

              System.out.print(sql);

              try {

                         db.stmt =db.con.createStatement();

                         db.stmt.execute(sql);

                         db.con.close();

                         db.stmt.close();

                         this.dispose();

                     } catch (SQLException e1) {

                         e1.printStackTrace();

                     }

            }

         }

}

4.4 数据库连接

图4.4 数据库连接

关键代码:

publicclass Data {

       Connection con;

       String connectionUrl= "jdbc:sqlserver://127.0.0.1;database=game;user=sa;password=123456;";

       Statement stmt;

       public  Data(){

        try {//加载数据库驱动

            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

            System.out.println("加载数据库驱动成功");

        } catch (ClassNotFoundException e) {

            e.printStackTrace();

        }

           try {//通过URL连接获取数据库对象

            con= DriverManager.getConnection(connectionUrl);

            System.out.println("获取数据库对象成功");       

            Statement stmt = con.createStatement();           

        } catch (SQLException e) {

            e.printStackTrace();

        }

       }}

任务书二:学籍管理程序设计

5 设计内容和要求

5.1 内容

设计C/S模式的学籍管理程序,该程序实现以下功能:学生可以查看自己的基本信息,可以修改电话、Email地址、QQ号等信息;管理员可以注册新的学生、修改学生基本信息、查询学生基本信息、删除学生基本信息等。程序数据采用数据库保存。

5.2 要求

学生基本信息至少包括:学号、姓名、班级、专业、性别、年级、出生日期、电话、Email地址、QQ号、状态(如休学、在读、毕业、退学等)。 保存管理员修改学生基本信息或删除学生基本信息的操作记录(含操作时间)。注册新的学生后,其学号不能被修改。实现查询时,可设计按多种条件进行查询,如可按学号查询、按姓名查询、按专业查询等。录入学生信息时,“专业”应该是从列表框或组合框中选择。

6 需求分析

6.1 界面需求

首先要有登录界面,用户输入用户名、密码,验证成功后进入对应界面。学生登录后进入学生主界面,通过菜单的个人信息选项进入个人信息界面。学生在个人信息界面可点击查询个人信息查看自己基本信息。个人信息界面可直接修改学生个人信息,点击提交保存到数据库,但可修改项是固定。当管理员用管理员账号在登陆页面验证通过后,跳转到管理员界面。管理员界面有管理菜单,菜单中有修改、录入、查找、删除等菜单项,通过点击设置对应的面板可见。在录入面板中,有可以录入学生的基本信息的文本行或者下拉框,以及保存按钮。在修改面板中,管理员输入要修改学生的学号就可以查看对应学生的信息。然后可以直接更改,点击保存,保存修改到数据库。在删除面板,管理员通过输入要删除的学生学号即可浏览到这个学生的信息,通过点击删除,删除学生。在查找对话框中,管理员可以通过学号查询、姓名查询、专业查询这几个选项来查找,查找结果显示在文本区域中,方便管理员运用。

6.2 逻辑需求

在登陆界面上,要通过获取数据库信息和用户输入信息比对,得到角色信息,在由角色判断进入学生界面还是管理员界面。当验证通过是关闭登陆界面,弹出对应角色界面。当管理员进入管理员界面后,对菜单项注册监听器,编写事件使得管理员通过菜单中的对应选项来获得对应操作面板或对话框。在进入管理员界面的是后管理员界面加载菜单,用卡片布局加载相应功能面板,且设置在欢迎标签后面。菜单中的监听事件编写中要设置对应面板显示即可。在录入面板中添加学生对应各个信息文本框或下拉框,添加保存按钮和重置按钮。对保存按钮注册监听器,编写事件得到填写的学生信息打开数据库并保存进去。对重置按钮注册监听器,编写事件,重置学生信息文本行。在删除面板中同样添加学生对应各个信息文本行或者下拉框设置为不可编辑,出来学号文本行,添加确认删除、开始删除按钮和重置按钮。为开始删除按钮注册监听器,编写事件,获取管理员输入的学号,执行数据库查寻语句,找获得的结果给面板中对应文本行货下拉框。为确认删除注册监听器,编写事件,执行数据库删除语句,弹出删除成功的对话框。重置与上相同。修改界面与录入界面大同,但按钮是开始修改、确定修改、重置,和删除大同。在查找界面中添加三个文本行一个文本区域三个对应搜索的按钮,对每个按钮注册监听器,编写事件,当按下对应按钮是,获取对应文本框中的信息,执行数据库查询,返回结果给文本区域。

6.3 数据库需求

       需要建立数据库,其中包括学生信息表、修改删除记录表、角色信息表。其中学生基本信息表用来储存学生的基本信息,比如学号、姓名、专业等。修改删除记录表用于记录对学生信息的修改删除操作。对角色信息表存储的登录账号、密码、角色,用于登录验证。

7 数据库设计

7.1 逻辑结构设计

图7.1学籍管理数据库物理模型

建立三个表,student_info存的是学生的基本信息,Record存的是修改删除记录,Login存的是登录信息。其各表的数据属性为:

表7.1 Login表属性

表7.2 Record表属性

表7.3 student_info属性

7.2 触发器

create trigger Update_Record //修改记录插入记录表

on student_info 

for update as 

declare @学号 char(10),@姓名 varchar(10),@班级 varchar(10),@专业 varchar(10),@性别 varchar(5),@年级 varchar(10),@出生日期 varchar(10),@电话 varchar(15),@Email地址 varchar(50),@QQ号 varchar(15),@状态 varchar(10)

declare @学号 char(10),@姓名 varchar(10),@班级 varchar(10),@专业 varchar(10),@性别 varchar(5),@年级 varchar(10),@出生日期 varchar(10),@电话 varchar(15),@Email地址 varchar(50),@QQ号 varchar(15),@状态 varchar(10)

begin

begin

   

    select  @学号=学号,@姓名=姓名,@班级=班级,@专业=专业,@性别=性别,@年级=年级,@出生日期=出生日期,@电话=电话,@Email地址=Email地址,@QQ号=QQ号,@状态=状态 from   deleted

    select  @学号=学号,@姓名=姓名,@班级=班级,@专业=专业,@性别=性别,@年级=年级,@出生日期=出生日期,@电话=电话,@Email地址=Email地址,@QQ号=QQ号,@状态=状态 from   inserted

end

insert into Record values(@学号,@学号,@姓名,@姓名,@班级,@班级,@专业,@专业,@性别,@性别,@年级,@年级,@出生日期,@出生日期,@电话,@电话,@Email地址,@Email地址,@QQ号,@QQ号,@状态,@状态,current_timestamp)

end

go

create trigger SetLogin //登记录入学生账号到登录表

on student_info 

for insert as 

declare @学号 char(10)

begin

begin

   

    select  @学号=学号 from inserd

    end

insert into Login values(@学号,'123456',2)

end

go

create trigger rSetLogin //删除记录插入记录表

on student_info 

for update as 

declare @学号 char(10),@学号 char(10)

begin

begin

    select @学号=学号 from deleted

    select  @学号=学号 from inserd

    end

update Login set ID=@学号 where Login.ID=@学号

end

go

create trigger Update_Record2

on student_info 

for delete as 

declare @学号 char(10),@姓名 varchar(10),@班级 varchar(10),@专业 varchar(10),@性别 varchar(5),@年级 varchar(10),@出生日期 varchar(10),@电话 varchar(15),@Email地址 varchar(50),@QQ号 varchar(15),@状态 varchar(10)

declare @学号 char(10),@姓名 varchar(10),@班级 varchar(10),@专业 varchar(10),@性别 varchar(5),@年级 varchar(10),@出生日期 varchar(10),@电话 varchar(15),@Email地址 varchar(50),@QQ号 varchar(15),@状态 varchar(10)

begin

begin

   

    select  @学号=学号,@姓名=姓名,@班级=班级,@专业=专业,@性别=性别,@年级=年级,@出生日期=出生日期,@电话=电话,@Email地址=Email地址,@QQ号=QQ号,@状态=状态 from   deleted

   

end

insert into Record values(@学号,@学号,@姓名,@姓名,@班级,@班级,@专业,@专业,@性别,@性别,@年级,@年级,@出生日期,@出生日期,@电话,@电话,@Email地址,@Email地址,@QQ号,@QQ号,@状态,@状态,current_timestamp)

end

8 主程序设计

8.1 登录界面

图8.1 登录界面

关键代码:

    publicvoid actionPerformed(ActionEvent e) {

    if(e.getSource()==jb1)

    {

       if(jTextField.getText().length()==10)

       {

           data db=new data();

           String sql="";

           String ID = null;

           String psd="";

           String p="";

           try {

              sql="select * from Login where  ID ='"+jTextField.getText()+"'";

              System.out.print(sql);

              db.stmt =db.con.createStatement();

              ResultSet rs = db.stmt.executeQuery(sql);

               while(rs.next())

               {

                  ID=rs.getString(1);

                  psd=rs.getString(2);

                  p=rs.getString(3);         

               }

               System.out.print(p.equals("1"));

               db.con.close();

              db.stmt.close();

              if(p.equals("1"))

              {

                  new StudentManager();

                  this.setVisible(false);

              }

              if(p.equals("2"))

              {

                  new StudentUser(ID);

                  this.setVisible(false);

              }

           } catch (SQLException e2) {

              String warning="数据库错误";

               JOptionPane.showMessageDialog(this,warning,"警告",JOptionPane.WARNING_MESSAGE);

           }

       }

       else

       {

           String warning="学号不正确";

           OptionPane.showMessageDialog(this,warning,"警告",JOptionPane.WARNING_MESSAGE);

       }

    }

    if(e.getSource()==jb2)

    {

       jTextField.setText("");

       jPasswordField.setText("");

    }

    }

}

8.2 管理员界面

图8.2 管理员主界面

关键代码:

publicclass StudentManager extends JFrame implements ActionListener {

    privatestaticfinallongserialVersionUID = -7326233253264350793L;

    StudentSituation 基本信息录入=null;          //创建基本信息录入界面

       ModifySituation  基本信息修改=null;          //创建基本信息修改界面

       Inquest          基本信息查询=null;

       Delete           基本信息删除=null;

       JMenuBar bar;

       JMenu fileMenu;

       JMenuItem 录入,修改,查询,删除;     

       Container con=null;

       CardLayout card=null;                        //卡片式布局

       JLabel label=null;                            //欢迎语标签

       JPanel pCenter;

       public StudentManager()

       {

         this.setResizable(false);

         this.setTitle("欢迎进入学籍管理系统");

         录入=new JMenuItem("录入学生基本信息");

         修改=new JMenuItem("修改学生基本信息");

         查询=new JMenuItem("查询学生基本信息");

         删除=new JMenuItem("删除学生基本信息");

         bar=new JMenuBar();

         fileMenu=new JMenu("菜单选项");

         fileMenu.add(录入);

         fileMenu.add(修改);

         fileMenu.add(查询);

         fileMenu.add(删除);

         bar.add(fileMenu);

         setJMenuBar(bar);

         label=new JLabel("欢迎使用学生基本信息管理系统",JLabel.CENTER);

         label.setFont(new Font("TimesRoman",Font.BOLD,24));

         label.setForeground(Color.red);

         录入.addActionListener(this);

         修改.addActionListener(this);

         查询.addActionListener(this);

         删除.addActionListener(this);

         card=new CardLayout();

         con=getContentPane();

         pCenter=new JPanel();

         pCenter.setLayout(card);

         基本信息录入=new StudentSituation();

         基本信息修改=new ModifySituation();

         基本信息查询=new Inquest(this);

         基本信息删除=new Delete();

         pCenter.add("欢迎语界面",label);

         pCenter.add("录入界面",基本信息录入);

         pCenter.add("修改界面",基本信息修改);   

         pCenter.add("删除界面",基本信息删除);

         con.add(pCenter,BorderLayout.CENTER);

         con.validate();

         addWindowListener(new WindowAdapter()

                        { publicvoid windowClosing(WindowEvent e)

                           {

                              System.exit(0);

                         }

                        });

        setVisible(true);

        setBounds(100,50,420,380);

        validate();

       }

}

8.3 学生界面

图8.3 学生主界面

关键代码:

public class StudentUser extends JFrame implements ActionListener {

       private static final long serialVersionUID = -7358646499267869222L;

       ModifySituation  基本信息=null;          //创建基本信息修改界面

       JMenuBar bar;

       JMenu fileMenu;

       JMenuItem 个人信息;     

       Container con=null;

       CardLayout card=null;                        //卡片式布局

       JLabel label=null;                            //欢迎语标签

       JPanel pCenter;

       public StudentUser(String sNo)

       {

         this.setTitle("欢迎进入学籍管理系统");

         个人信息=new JMenuItem("个人基本信息");

         bar=new JMenuBar();

         fileMenu=new JMenu("菜单选项");

         fileMenu.add(个人信息);

         bar.add(fileMenu);

         setJMenuBar(bar);

         label=new JLabel("欢迎使用学生基本信息管理系统",JLabel.CENTER);

         label.setFont(new Font("TimesRoman",Font.BOLD,24));

         label.setForeground(Color.red);

         个人信息.addActionListener(this);

         card=new CardLayout();

         con=getContentPane();

         pCenter=new JPanel();

         pCenter.setLayout(card);

         基本信息=new ModifySituation();

         基本信息.开始修改.setText("查看个人信息");

         基本信息.学号.setText(sNo);

         基本信息.学号.setEnabled(false);

         基本信息.姓名.setEnabled(false);

         基本信息.班级.setEnabled(false);

         基本信息.专业.setEnabled(false);

         基本信息.年级.setEnabled(false);      

         基本信息.状态.setEnabled(false);

         基本信息.重置.setEnabled(false);

         pCenter.add("欢迎语界面",label);

         pCenter.add("修改界面",基本信息);   

         con.add(pCenter,BorderLayout.CENTER);

         con.validate();

         addWindowListener(new WindowAdapter()

                        { public void windowClosing(WindowEvent e)

                           {

                              System.exit(0);

                         }

                        });

        setVisible(true);

        setBounds(100,50,420,380);

        validate();

       }

}

8.4 录入面板

图8.4 录入面板

关键代码:

publicclass StudentSituation extends JPanel implements ActionListener

{

    privatestaticfinallongserialVersionUID = 1L;

    JTextField 学号,姓名,班级,性别,年级,出生日期,电话,Email地址,QQ号,状态;    

    JRadioButton 男,女;

    ButtonGroup group=null;

    JButton 录入,重置;

      JComboBox 专业;

      public StudentSituation()

      {

       String nations[]={"计算机","物理学","石油","安全","英语","建筑"};

       专业= new JComboBox(nations);

       专业.setMaximumRowCount(5);

       专业.setSelectedIndex(-1);

       专业.setEditable(true);

       录入=new JButton("录入");

       录入.addActionListener(this);

       重置=new JButton("重置");

       重置.addActionListener(this);

       学号=new JTextField(10);

       姓名=new JTextField(10);

       班级=new JTextField(10);

       性别=new JTextField(10);

       年级=new JTextField(10);

       出生日期=new JTextField(10);

       电话=new JTextField(10);

       Email地址=new JTextField(10);

       QQ号=new JTextField(10);

       状态=new JTextField(10);

       group=new ButtonGroup();

       男=new JRadioButton("男",true);

       女=new JRadioButton("女",false);

       group.add(男);

       group.add(女);

       Box box1=Box.createHorizontalBox();      

       box1.add(new JLabel("学号:",JLabel.CENTER));

       box1.add(学号);

       Box box2=Box.createHorizontalBox();

       box2.add(new JLabel("姓名:",JLabel.CENTER));

       box2.add(姓名);

       Box box3=Box.createHorizontalBox();

       box3.add(new JLabel("性别:",JLabel.CENTER));

       box3.add(男);

       box3.add(女);

       Box box4=Box.createHorizontalBox();

       box4.add(new JLabel("专业",JLabel.CENTER));

       box4.add(专业);

       Box box5=Box.createHorizontalBox();

       box5.add(new JLabel("班级:",JLabel.CENTER));

       box5.add(班级);

       Box box6=Box.createHorizontalBox();

       box6.add(new JLabel("年级:",JLabel.CENTER));

       box6.add(年级);

       Box box7=Box.createHorizontalBox();

       box7.add(new JLabel("出生日期:",JLabel.CENTER));

       box7.add(出生日期);

       Box box8=Box.createHorizontalBox();

       box8.add(new JLabel("电话:",JLabel.CENTER));

       box8.add(电话);

       Box box9=Box.createHorizontalBox();

       box9.add(new JLabel("Email地址:",JLabel.CENTER));

       box9.add(Email地址);

       Box box10=Box.createHorizontalBox();

       box10.add(new JLabel("QQ号:",JLabel.CENTER));

       box10.add(QQ号);

       Box box11=Box.createHorizontalBox();

       box11.add(new JLabel("状态:",JLabel.CENTER));

       box11.add(状态);

       Box boxH=Box.createVerticalBox();

       boxH.add(box1);

       boxH.add(box2);

       boxH.add(box3);

       boxH.add(box4);

       boxH.add(box5);

       boxH.add(box6);

       boxH.add(box7);

       boxH.add(box8);

       boxH.add(box9);

       boxH.add(box10);

       boxH.add(box11);

       boxH.add(Box.createVerticalGlue());//垂直Box容器内的组件靠上对齐

       JPanel pCenter=new JPanel();

       pCenter.add(boxH);

       setLayout(new BorderLayout());

       add(pCenter,BorderLayout.CENTER);

       JPanel pSouth=new JPanel();

       pSouth.add(录入);

       pSouth.add(重置);

       add(pSouth,BorderLayout.SOUTH);

       validate();

      }

}

8.5 查找面板

图8.5查询对话框

关键代码:

        publicvoid actionPerformed(ActionEvent e)

         {

            if(e.getSource()==学号查询)

            {

              jta.setText("");

              data db=new data();

              String rString="";

              String sql="";

               jta.append(rString);

               if(学号.getText().length()>0)

               {        

                     try {

                    sql="select * from student_info where 学号='"+学号.getText()+"'";

                     System.out.print(sql);

                    db.stmt =db.con.createStatement();

                    ResultSet rs = db.stmt.executeQuery(sql);

                   while(rs.next())

                      {

                      rString="学号|-->(";

                      rString+=rs.getString(1);

                      rString+=")姓名|-->(";

                      rString+=rs.getString(2);

                       rString+=")专业|-->(";

                      rString+=rs.getString(4);

                       rString+=")性别|-->(";

                       rString+=rs.getString(5);

                       rString+=")|";

                       rString+='\n';

                      jta.append(rString);

                      }

                     db.con.close();

                     db.stmt.close();

                     } catch (SQLException e2) {

                         jta.setText("");

                         String warning="无";

                          jta.append(warning);

                  }

          }

       else

       {

           jta.setText("");

           String warning="学号为空";

           jta.append(warning);

       }

            }

            if(e.getSource()==姓名查询)

            {

              jta.setText("");

              data db=new data();

              String rString="";

              String sql="";

               jta.append(rString);

               if(姓名.getText().length()>0)

               {        

                     try {

                    sql="select * from student_info where 姓名='"+姓名.getText()+"'";

                     System.out.print(sql);

                     db.stmt =db.con.createStatement();

                     ResultSet rs = db.stmt.executeQuery(sql);

                      while(rs.next())

                      {

                      rString="学号|-->(";

                      rString+=rs.getString(1);

                      rString+=")姓名|-->(";

                     rString+=rs.getString(2);

                      rString+=")专业|-->(";

                     rString+=rs.getString(4)

                      rString+=")性别|-->(";

                     rString+=rs.getString(5);

                      rString+=")|";

                      rString+='\n';

                      jta.append(rString);

                      }

                     db.con.close();

                     db.stmt.close();

                     } catch (SQLException e2) {

                         jta.setText("");

                         String warning="无";

                          jta.append(warning);

                          }

          }

                  else

                  {

                     jta.setText("");

                     String warning="姓名为空";

                     jta.append(warning);

                    

                  }

            }

            if(e.getSource()==专业查询)

            {

              jta.setText("");

              data db=new data();

              String rString="";

              String sql="";

               jta.append(rString);

               if(专业.getSelectedItem()!=null)

               {        

                     try {

                     sql="select * from student_info where 专业='"+专业.getSelectedItem()+"'";

                     System.out.print(sql);

                     db.stmt =db.con.createStatement();

                     ResultSet rs = db.stmt.executeQuery(sql);

                      while(rs.next())

                      {

                      rString="学号|-->(";

                      rString+=rs.getString(1);

                      rString+=")姓名|-->(";

                     rString+=rs.getString(2);

                      rString+=")专业|-->(";

                     rString+=rs.getString(4);

                      rString+=")性别|-->(";

                     rString+=rs.getString(5);

                      rString+=")|";

                      rString+='\n';

                      jta.append(rString);

                      }

                     db.con.close();

                     db.stmt.close();

                     } catch (SQLException e2) {

                         jta.setText("");

                         String warning="无";

                          jta.append(warning);

                     }

          }

                  else

                  {

                     jta.setText("");

                     String warning="专业为空";

                     jta.append(warning);

                    

                  }

            }

            

         }

}

8.6 修改面板

图8.6 修改面板

代码:

public void actionPerformed(ActionEvent e)

 {

           String sql="";

           String sex="";

           if(e.getSource()==开始修改)

             {

              data db=new data();

                if(学号.getText().length()==10)  //如果已输入学号

                   {   

                             确认修改.setEnabled(true); 

                            try {

                              sql="select * from student_info where "+学号.getText()+" =学号 ";

                            System.out.print(sql);

                            db.stmt =db.con.createStatement();

                            ResultSet rs = db.stmt.executeQuery(sql);

                             while(rs.next())

                             {

                              学号.setText(rs.getString(1));

                               姓名.setText(rs.getString(2));

                               班级.setText(rs.getString(3));

                               专业.setSelectedItem(rs.getString(4));

                               sex=rs.getString(5);

                               年级.setText(rs.getString(6));

                               出生日期.setText(rs.getString(7));

                               电话.setText(rs.getString(8));

                               Email地址.setText(rs.getString(9));

                               QQ号.setText(rs.getString(10));

                               状态.setText(rs.getString(11));

                                学号.setEditable(false);

                                if(sex=="男")

                                   {

                                       this.男.setSelected(true);

                                       this.女.setSelected(false);

                                   }

                                else

                                   {

                                       this.男.setSelected(false);

                                       this.女.setSelected(true);

                                    }

                             }

                            db.con.close();

                            db.stmt.close();

                        

                            } catch (SQLException e2) {

                            }

                    }

               else

                   {

                     String warning="必须要输入合法学号!(10位数字)";

                     JOptionPane.showMessageDialog(this,warning,"警告",JOptionPane.WARNING_MESSAGE);

                   }

             }

           if(e.getSource()==确认修改)

           {

              data db=new data(); 

              

                if(男.isSelected())

                   {

                   sex="男";

                   }

                else

                   {

                    sex="女";

                   }

              try {

                  sql= "update  student_info set  姓名='"+姓名.getText()+"',班级='"+班级.getText()+"',专业='"+专业.getSelectedItem()+"',性别='"+sex+"',年级='"+年级.getText()+"',出生日期='"+出生日期.getText()+"',电话='"+电话.getText()+"',Email地址='"+Email地址.getText()+"',QQ号='"+QQ号.getText()+"',状态='"+状态.getText()+"'" +"  where 学号='"+学号.getText()+"'";

          

                  System.out.print(sql);

                  db.stmt =db.con.createStatement();

                  if(db.stmt.execute(sql))

                  {

                     new SQLException();

                  }

                  String warning="修改成功";

                  JOptionPane.showMessageDialog(this,warning,"警告",JOptionPane.WARNING_MESSAGE);

              } catch (SQLException e1) {

                  String warning="数据库错误";

                   JOptionPane.showMessageDialog(this,warning,"警告",JOptionPane.WARNING_MESSAGE);

              }

             

           }

           if(e.getSource()==重置)

             {

             

              this.确认修改.setEnabled(false);

              this.专业.setSelectedIndex(-1);

              学号.setEditable(true);

               学号.setText(null);

               姓名.setText(null);

               班级.setText(null);            

               年级.setText(null);

               出生日期.setText(null);

               电话.setText(null);

               Email地址.setText(null);

               QQ号.setText(null);

               状态.setText(null);

             }

         }

      

8.7 删除面板

图8.7删除面板

关键代码:同上

8.8 数据库连接

代码:

publicclass data {

    Connection con;

    String connectionUrl= "jdbc:sqlserver://127.0.0.1;database=student;user=sa;password=123456;";

    Statement stmt;

    public  data(){

    try {//加载数据库驱动

        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

        System.out.println("加载数据库驱动成功");

    } catch (ClassNotFoundException e) {

        e.printStackTrace();

    }

     try {//通过URL连接获取数据库对象

        con= DriverManager.getConnection(connectionUrl);

        System.out.println("获取数据库对象成功");       

        Statement stmt = con.createStatement();

    } catch (SQLException e) {

        e.printStackTrace();

    }

   

    }

总结

在本次实验中运用了课堂上学习的课本知识,让我们得到了充分的实践锻炼。更加直观的去了解java编程语言的规则及其用途。也完成了这个魔板游戏编写的任务。其中实现了游戏难度切换,游戏时间计算,游戏结果录入数据库等功能。在完成此任务的同时,提高了自己的java编程水平。但在魔板游戏中没有对其界面美化,没有主题的突出,也没有游戏的其他设置。由这个题目我自己尝试写了一个拼图的游戏,结果圆满完成。就是应为有魔板游戏的基础,编写拼图也就变得轻而易举了。但在学籍管理系统设计中就是要用到我们全面的java编程知识,连接数据库、事件监听等。最重要的是在页面布局上要实用。不过在完成的作品中看到了不足就是,没有操作错误的提醒,也没有数据库为空的提醒。所以要想以后有所作为就要一步一步打好基础,积少成多,厚积薄发。

结论

完成魔板游戏的编写的主要前提就是学会java 图形界面中的监听器的使用,再者就是在做这个题目要要有个基本的思路,还有数据库的连接也是必不可少的一步分。最后魔板游戏能让玩家通过选择不同的难度开始游戏,通过对空白块的点击来完成游戏,并记录玩家姓名和游戏记录。完成了实验题目要求。学生学籍管理系统功能全部完成,可分管理员和学生登录,有不同的操作,都是基于数据库上的。

参考文献

[1] BruceEckel. Java编程思想[M].北京:机械工业出版社

[2] 清宏计算机工作室. JAVA编程技巧[M].北京: 机械工业出版社

[3] 耿祥义,张跃平. JAVA实用教程[M].北京: 清华大学出版社

[4] 萨师煊,王珊. 数据库系统概论[M].北京: 高等教育出版社

[5] 陈道蓄.Java程序设计实用教程(第四版).北京:电子工业出版社

致谢

     经过两周的不懈努力,终于在同学和老师的帮助下完成了魔板和学籍管理系统的设计。感谢校方给予我这样一次机会,能够独立地完成一个课程设计,并在这个过程当中,给予我们各种方便,使我们在这学期快要结束的时候,能够将学到的知识应用到实践中,增强了我们实践操作和动手应用能力,提高了独立思考的能力。感谢所有任课老师和所有同学给自己的指导和帮助,是他们教会了我专业知识。正是由于他们,我才能完成这次任务,在此向他们表示我由衷的谢意。感谢我的老师在课程设计上给予我的指导、提供给我的支持和帮助,这是我能顺利完成这次设计的主要原因,更重要的是老师帮我解决了许多技术上的难题,让我能把系统做得更加完善。在此期间,我不仅学到了许多新的知识,而且也开阔了视野,提高了自己的设计能力。其次,我要感谢帮助过我的同学,他们也为我解决了不少我不太明白的设计上的难题。

更多相关推荐:
课程设计报告书格式

信息工程学院网页设计与制作课程设计报告书指导教师专业班级姓名学号日期20xx年6月4日20xx年6月10日网页设计与制作课程设计一设计目的网页设计与制作课程设计是在学生学习网页设计与制作课程后结合HTML语言P...

课程设计报告格式

课程名称课程设计题目院别矿业与安全工程学院专业安全技术及管理姓名学号同组人员指导教师段汉文目录第一章系统设计分析311设计要求312总体设计3第二章硬件电路设计及实现321电源模块32115V电源电路322光电...

C语言课程设计报告格式要求与范例

C语言程序设计课程设计报告专业电子信息工程自动化班级电信0904姓名陈列慧指导教师彭琼丁雄20xx年12月30日C语言程序课程设计任务书一设计题目职工信息管理系统二设计目的1熟练掌握C语言课程中所学的理论知识2...

课程设计报告Word格式要求

课程设计报告题目姓名专业班级学号设计成绩指导教师设计完成日期20xx年月日课程设计任务书题目系部专业班级学生姓名学号月日至月日共周指导教师签字系主任签字年月日目录摘要引言11正文格式说明22图表及公式的格式说明...

课程设计报告格式

《课程设计报告》的格式要求撰写课程设计报告参考格式:题目(居中,小三号黑体字)学生姓名(学号)(学生姓名之间两格)(一律采用五号宋体)电子科学与技术专业(空四格)指导教师:(一律采用五号宋体)【摘要】:(五号宋…

项目管理课程设计报告格式

一课程设计的目的与要求项目管理课程设计是对学生进行基本理论专业知识和基本技能的综合训练是培养学生独立工作能力的重要教学环节通过该环节目的是为了使学生能掌握现代项目管理的技能提高分析问题解决问题的能力根据自己的学...

课程设计报告格式

单片机应用设计课程设计题目院别专业机械电子工程姓名学号同组人员指导教师杨永日期20xx12520xx1216单片机应用设计课程设计设计题目输入题目后请删除本行文字摘要下面给出示例写报告时请删除本设计设计智能寻迹...

操作系统课程设计试验报告格式

四川大学操作系统课程设计报告学院专业年级组编号组成员软件学院第X组乔心轲姓名0743111340学号张雯姓名XXXXXXXX学号康小芳姓名XXXXXXXX学号提交时间20xx年月日指导教师评阅成绩XXX1XXX...

课程设计报告格式要求

科学技术学院SCIENCEampTECHNOLOGYCOLLEGEOFNANCHANGUNIVERSITY课程设计报告REPORTONCURRICULUMDESIGN题目学科部系专业班级学号学生姓名指导教师起讫...

课程设计报告写作格式规范

电气信息工程系课程设计报告写作规范吉林建筑大学城建学院20xx年10月20日1课程设计报告撰写的内容与要求11题目题目应简短明确有概括性并能恰当准确的反映本报告的研究内容题目不超过25个字除非确有必要一般不设副...

课程设计报告格式

操作系统课程设计报告题目操作系统中经典算法模拟姓名专业班级学号指导教师李海霞信息工程学院二0一五年十二月二十五日目录实验一Windows中线程与线程同步3实验二进程调度6实验三银行家算法8实验四请求页式存储管理...

课程设计报告格式

浙江科技学院嵌入式系统BEDA技术与应用课程设计报告课题名称院系部专业班级姓名学号指导教师年月日基于MAXII系列CPLD的微波炉控制器芯片设计自动化与电气工程学院郑玉珍目录1绪论12设计目的3设计要求4设计思...

课程设计报告格式(46篇)