数据库作品
一、ER图:

二、需求分析
- 功能

-
功能概述
① 星球船长、星球船员注册模块。
② 登录模块(根据不同的身份登录,出现的界面不同)。
③ 星球酋长:查看星球运行情况、管理星船、管理船长。
④ 星船船长:星船基本信息管理、战士管理,武器管理。
⑤ 战士查看和修改个人信息。
-
功能分析:
- 星球酋长:先注册账号,登录账号。进入管理界面,管理界面分为:管理星球运行情况、管理星船信息、管理船长。
- 星球船长:星船信息管理、战士管理、武器管理。
- 战士:注册信息后,选择战士身份登录查看信息。
-
功能实现:
① 注册模块:
- 星球酋长的账号密码保存在数据库中,直接可以登陆,不需要注册。
- 星球船长、战士实现账号注册,并保存到相应的数据库表中。
② 登录模块:根据用户选择不同的身份(星球酋长、星球船长、战士),验证不同表的信息进行登录。
③ 战士查看个人信息模块:根据战士输入的账号和密码,验证成功后显示整个战士的个人的所有信息。
④ 星球船长管理模块:
星球船长管理:分为战士管理和武器管理
- 战士管理:添加战士信息、删除战士信息、修改战士信息、搜索战士信息(实现战士表的渲染和战士添加)
- 武器管理:添加武器信息、删除武器信息、修改武器信息、搜索武器信息(实现武器表的渲染和武器添加。)
5、星球酋长管理模块:
星球信息:实现星球表的渲染,修改、增加、删除、查询表中的数据。
星船管理:实现星船表的渲染和星船添加
船长管理:实现船长表的渲染和船长的任命。
查询:实现查询星船表、船长表、战士表、武器表的信息,查询结果分页显示。
管理信息同步:(事务处理:service)
- 添加或者删除战士,则星船表的战士数量也随之变化;
- 添加或者删除星船,则星球表的星球数量也随之变化;
三、MVC设计模式


四、java知识回顾
JFrame:
-
setLocationRelative(null)//设置居中显示
-
setExtendedState(JFrame.MAXIMIZED_BOTH);//设置JFrame最大化
-
JOptionPane.showMessageDialog(null, “Messge”);//信息提示框
-
JOptionPane.showConfirmDialog(null, “Messge”);//信息确认框
debug
-
F6 继续下一步
-
F8 执行到下一个断点 假如没有的话执行完
-
F5进入方法内部
-
Ctrl+shift+i 查看表达式结果
-
Debug过程中,能够动态地修改变量的值
String
-
String、StringBuffer、StringBuilder的区别和联系
-
String是不可变的,在源码中是被final修饰的。
-
StringBuilder和StringBuffer一样,都是继承自抽象类AbstractStringBuilder类,也是一个可变的字符序列。
-
不过,StringBuilder不是线程安全的,这是和StringBuffer的主要区别。
-
StringBuilder的效率是比StringBuffer高的,StringBuilder未使用同步锁,所以效率提高。
通过源码可以知道,StringBuffer在拼接字符串时,使用了同步锁(synchronized),所以安全性提高,
synchronized的锁是this锁,就是用当前类来当锁
-
StringBuilder的层次结构如下:

-
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的容量到真实内容大小;
-
-
replaceFirst(“and”,“where”) 把字符串里出现的第一个and替换成where
-
获取JPasswordField里的文字时用的是
passwordText.getPassword()//passwordText是密码框的名字
-
获取JTextField里的文字时用的是
userText.getText();//userText是文本框的名字
windowBuilder:
-
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和表头都可以正常显示了。
-
Jtable:
table.getSelectedRow()//获取选中行;getValueAt(row, column)//获取某行某列的值
格式转化:
- string转为int用Integer.valueOf(string)或者Integer.psrseInt()
MD5加密和解密
-
在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; } } } -
在需要加密的界面,如注册界面
//在注册界面对密码进行加密 MD5 md5=new MD5(); String mdpassword=md5.getMD5String(ispassword); //ispassword是未加密的密码,mdpassword是加密后的密码 -
在登录界面把输入的密码加密,方便对比,判断密码是否正确
//与注册界面一样的操作,对密码进行加密 MD5 md5=new MD5(); String mdpassword=md5.getMD5String(password);
List、Set、Map
— List 有序,可重复
- ArrayList
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程不安全,效率高 - Vector
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程安全,效率低 - LinkedList
优点: 底层数据结构是链表,查询慢,增删快。
缺点: 线程不安全,效率高
—Set 无序,唯一
-
HashSet
底层数据结构是哈希表。(无序,唯一)
如何来保证元素唯一性?
1.依赖两个方法:hashCode()和equals() -
LinkedHashSet
底层数据结构是链表和哈希表。(FIFO插入有序,唯一)
1.由链表保证元素有序
2.由哈希表保证元素唯一 -
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的方法不是同步的。这是两者最主要的区别。
数据库脑图

2万+

被折叠的 条评论
为什么被折叠?



