数据库作品

数据库作品

一、ER图:

在这里插入图片描述

二、需求分析

  1. 功能

在这里插入图片描述

  1. 功能概述

    星球船长星球船员注册模块。

    ② 登录模块(根据不同的身份登录,出现的界面不同)。

    ③ 星球酋长:查看星球运行情况管理星船管理船长

    ④ 星船船长:星船基本信息管理战士管理武器管理

    ⑤ 战士查看和修改个人信息。

  2. 功能分析:

    1. 星球酋长:先注册账号,登录账号。进入管理界面,管理界面分为:管理星球运行情况、管理星船信息、管理船长。
    2. 星球船长:星船信息管理、战士管理、武器管理。
    3. 战士:注册信息后,选择战士身份登录查看信息。
  3. 功能实现:

    注册模块

    1. 星球酋长的账号密码保存在数据库中,直接可以登陆,不需要注册。
    2. 星球船长、战士实现账号注册,并保存到相应的数据库表中。

    登录模块:根据用户选择不同的身份(星球酋长星球船长、战士),验证不同表的信息进行登录。

    战士查看个人信息模块:根据战士输入的账号和密码,验证成功后显示整个战士的个人的所有信息。

    星球船长管理模块

    星球船长管理:分为战士管理和武器管理

    1. 战士管理:添加战士信息、删除战士信息、修改战士信息、搜索战士信息(实现战士表的渲染战士添加
    2. 武器管理:添加武器信息、删除武器信息、修改武器信息、搜索武器信息(实现武器表的渲染武器添加。)

    5、星球酋长管理模块:

    星球信息:实现星球表的渲染,修改、增加、删除、查询表中的数据。

    星船管理:实现星船表的渲染星船添加

    船长管理:实现船长表的渲染船长的任命

    查询:实现查询星船表、船长表、战士表、武器表的信息,查询结果分页显示

    管理信息同步:(事务处理:service)

    1. 添加或者删除战士,则星船表的战士数量也随之变化;
    2. 添加或者删除星船,则星球表的星球数量也随之变化;

三、MVC设计模式

在这里插入图片描述

在这里插入图片描述

四、java知识回顾

JFrame:
  1. setLocationRelative(null)//设置居中显示

  2. setExtendedState(JFrame.MAXIMIZED_BOTH);//设置JFrame最大化

  3. JOptionPane.showMessageDialog(null, “Messge”);//信息提示框

  4. JOptionPane.showConfirmDialog(null, “Messge”);//信息确认框

debug
  1. F6 继续下一步

  2. F8 执行到下一个断点 假如没有的话执行完

  3. F5进入方法内部

  4. Ctrl+shift+i 查看表达式结果

  5. Debug过程中,能够动态地修改变量的值

String
  1. String、StringBuffer、StringBuilder的区别和联系

    1. String是不可变的,在源码中是被final修饰的。

    2. StringBuilder和StringBuffer一样,都是继承自抽象类AbstractStringBuilder类,也是一个可变的字符序列。

    3. 不过,StringBuilder不是线程安全的,这是和StringBuffer的主要区别。

    4. StringBuilder的效率是比StringBuffer高的,StringBuilder未使用同步锁,所以效率提高。

      通过源码可以知道,StringBuffer在拼接字符串时,使用了同步锁(synchronized),所以安全性提高,

      synchronized的锁是this锁,就是用当前类来当锁

    5. StringBuilder的层次结构如下:img

    6. StringBuilder的常用方法和StringBuffer的一样。列出如下:
      (1)构造函数

      StringBuilder有四个构造函数:

      StringBuilder() value内容为空,并设置容量为16个字节;
      StringBuilder(CharSequece seq)  使用seq初始化,容量在此基础上加16;
      StringBuilder(int capacity) 设置特定容量;
      StringBuilder(String str)  使用str初始化,容量str大小的基础上加16;
      

      (2)append方法

      由于继承了Appendable接口,所以要实现append方法,StringBuilder类对几乎所有的基本类型都重载了append方法:

      append(boolean b)
      append(char c)
      append(char[] str)
      append(char[] str,int offset,int len)
      append(CharSequence s)
      append(CharSequence s,int start,int end)
      append(double d)
      append(float f)
      append(int i)
      append(long lng)
      append(Object obj)
      append(String str)
      append(StringBuffer sb)
      

      (3)insert方法

      insert方法可以控制插入的起始位置,也几乎对所有的基本类型都重载了insert方法:

      insert(int offser,boolean b)
      insert(int offset,char c)
      insert(int offset,char[] str)
      insert(int index,char[] str,int offset,int len)
      insert(int dsfOffset,CharSequence s)
      insert(int dsfOffset,CharSequence s,int start,int end)
      insert(int offset,double d)
      insert(int offset,float f)
      insert(int offset,int i)
      insert(int offset,long l)
      insert(int offset,Object obj)
      insert(int offset,String str)
      

      (4)其它会改变内容的方法

      上面的那些方法会增加StringBuilder的内容,还有一些方法可以改变StringBuilder的内容:

      StringBuilder delete(int start,int end) 删除从start到end(不包含)之间的内容;
      StringBuilder deleteCharAt(int index) 删除index位置的字符;
      StringBuilder replace(int start,int end,String str) 用str中的字符替换value中从start到end位置的子序列;
      StringBuilder reverse() 反转;
      void setCharAt(int index,char ch) 使用ch替换位置index处的字符;
      void setLength(int newLength) 可能会改变内容(添加'\0');
      

      (5)其它常用方法

      下面这些方法不会改变内容:

      int capacity() 返回value的大小即容量;
      int length() 返回内容的大小,即count;
      char charAt(int index) 返回位置index处的字符;
      void ensureCapacity(int minimumCapacity) 确保容量至少是minimumCapacity;
      void getChars(int srcBegin,int srcEnd,char[] dst,int dstBegin) 返回srcBegin到srcEnd的字符到dst;
      int indexOf(String str) 返回str第一次出现的位置;
      int indexOf(String str,int fromIndex) 返回从fromIndex开始str第一次出现的位置;
      int lastIndexOf(String str) 返回str最后出现的位置;
      int lastIndexOf(String str,int fromIndex) 返回从fromIndex开始最后一次出现str的位置;
      CharSequence subSequence(int start,int end) 返回字符子序列;
      String substring(int start) 返回子串;
      String substring(int start,int end) 返回子串;
      String toString() 返回value形成的字符串;
      void trimToSize() 缩小value的容量到真实内容大小;
      
      
  2. replaceFirst(“and”,“where”) 把字符串里出现的第一个and替换成where

  3. 获取JPasswordField里的文字时用的是

  passwordText.getPassword()//passwordText是密码框的名字
  1. 获取JTextField里的文字时用的是

    userText.getText();//userText是文本框的名字
    
windowBuilder:
  1. JAVA windoesBuilder 中运用JTable显示数据库数据:

    1、用JScrollPane承接Table,不用JPanel等;

    2、用JScrollPane的构造函数构建,或者用scrollPanel.setViewportView(table)😭scrollPane.setRowHeaderView(table);无效)

    不用scrollPanel.add(table);

    3、承接Table的父容器的布局管理器不能设置为null,其实,对于JScrollPane的布局,有专门的

    scroll的布局,也可以用,简便的话,不设置布局;不要Null;

    至此,Table和表头都可以正常显示了。

  2. Jtable:

    table.getSelectedRow()//获取选中行;getValueAt(row, column)//获取某行某列的值

格式转化:
  1. string转为int用Integer.valueOf(string)或者Integer.psrseInt()
MD5加密和解密
  1. 在util包里创建一个MD5.java

    package com.imooc.util;
    
    import java.io.UnsupportedEncodingException;
    import java.math.BigInteger;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    
    public class MD5 {
    
    	public static String getMD5String(String str) {
            try {
                // 生成一个MD5加密计算摘要
                MessageDigest md = MessageDigest.getInstance("MD5");
                // 计算md5函数
                md.update(str.getBytes());
                // digest()最后确定返回md5 hash值,返回值为8位字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符
                // BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值
                //一个byte是八位二进制,也就是2位十六进制字符(2的8次方等于16的2次方)
                return new BigInteger(1, md.digest()).toString(16);
            } catch (Exception e) {
               e.printStackTrace();
               return null;
            }
        }
    
    }
    
  2. 在需要加密的界面,如注册界面

    //在注册界面对密码进行加密
    MD5 md5=new MD5();
    String mdpassword=md5.getMD5String(ispassword);
    //ispassword是未加密的密码,mdpassword是加密后的密码
    
  3. 在登录界面把输入的密码加密,方便对比,判断密码是否正确

    //与注册界面一样的操作,对密码进行加密
    MD5 md5=new MD5();
    String mdpassword=md5.getMD5String(password);
    
List、Set、Map
— List 有序,可重复
  1. ArrayList
    优点: 底层数据结构是数组,查询快,增删慢
    缺点: 线程不安全,效率高
  2. Vector
    优点: 底层数据结构是数组,查询快,增删慢
    缺点: 线程安全,效率低
  3. LinkedList
    优点: 底层数据结构是链表,查询慢,增删快
    缺点: 线程不安全,效率高
—Set 无序,唯一
  1. HashSet

    底层数据结构是哈希表。(无序,唯一)
    如何来保证元素唯一性?
    1.依赖两个方法:hashCode()和equals()

  2. LinkedHashSet
    底层数据结构是链表和哈希表。(FIFO插入有序,唯一)
    1.由链表保证元素有序
    2.由哈希表保证元素唯一

  3. TreeSet
    底层数据结构是红黑树。(唯一,有序)

    1.如何保证元素排序的呢?
    自然排序
    比较器排序
    2.如何保证元素唯一性的呢?
    根据比较的返回值是否是0来决定

针对Collection集合我们到底使用谁呢?(掌握)

唯一吗?

是:Set

排序吗?

是:TreeSet或LinkedHashSet
否:HashSet
如果你知道是Set,但是不知道是哪个Set,就用HashSet。
否:List

要安全吗?

是:Vector
否:ArrayList或者LinkedList

查询多:ArrayList
增删多:LinkedList
如果你知道是List,但是不知道是哪个List,就用ArrayList。
如果你知道是Collection集合,但是不知道使用谁,就用ArrayList。
如果你知道用集合,就用ArrayList。

Map接口有三个比较重要的实现类,分别是HashMap、TreeMap和HashTable。

  • TreeMap是有序的,HashMap和HashTable是无序的。
  • Hashtable的方法是同步的,HashMap的方法不是同步的。这是两者最主要的区别。

数据库脑图

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值