Java日记本(包含数据库操作)
功能介绍
登录界面
这是程序的入口,包括用户头像、账号、密码、记住密码、自动登录、注册账号、找回密码几大部分。
1.1头像
1.这是用户登录之后显示头像的区域。
2.当用户在输入账户的过程中,会动态的进行匹配(注册了的账号,显示对应的头像;否则显示为空白)。
3.无论用户是否点击记住密码,登录界面都会自动的记录头像与账号,在打开软件的时候进行显示。
4.信息本身记录在user表中。
5.下次登录的信息记录在password.properties文件中。
1.2账号
此区域是用户账号的输入区域。
无论用户是否点击记住密码,登录界面都会自动的记录头像与账号,在打开软件的时候进行显示。
账号长度会进行限制,在8-11位之间。
4.账号的输入是动态的,包括动态的检测合法性、匹配头像。
5.信息本身记录在user表中。
6.下次登录的信息记录在password.properties文件中。
1.3密码
这是用户输入密码的区域,将与账号进行匹配。
如果用户点击了记住密码,登录界面会记住密码,,在打开软件的时候进行显示。
3.信息本身记录在user表中。
4.下次登录的信息记录在password.properties文件中。
1.4记住密码
是否记住密码的选项,决定下一次登录是否自动的显示密码。
2.信息本身记录在password.properties文件中。
1.5自动登录
1.是否自动登录的选项,决定下一次是否自动登录。
2.信息本身记录在password.properties文件中。
3.用户通过返回的形式,进行账号的切换。
1.6注册账号
用户进行注册账号的入口。
1.7忘记密码
用户找回密码的选项。
注册账号界面
用户在这个界面完成新用户的注册。
2.1账号
用户注册的账号,只能是8-11位的数字。
2.2密码
用户设置的密码8-11位。
2.3头像
用户设置的头像。
2.4注册按钮
进行注册,这里会进行输入不完整的检测、账号已存在的检测、账号不符合要求的检测。
2.5关闭按钮
退出注册页面。
找回密码
用户用户的密码找回,因为涉及到短信下发,需要钱,所以就是这样的一个方式进行找回。
选择页面
当登录成功之后,会进入到这个页面,进行写或者查的选择。
4.1写
进入到写的界面。
4.2查
进入到查的页面。
4.3返回
返回到登录页面,进行重新的登录。
4.4退出
退出本软件。
写
该页面是进行写日记的主界面。
5.1提示栏
事件
提示内容
进入到写界面
欢迎使用写日记系统!
保存时未输入文章内容
您尚未输入文章内容
编号不是整数
编号应该为整数
成功保存
保存成功!
5.2编号
日记的编号,作为文章的主键。
5.3标题
日记的标题。
5.4天气
进行天气选择。
5.5心情
用户进行心情的选择。
5.6日期
用户进行日期的选择,默认为当前时间。
5.7返回
返回到上一级。
5.8保存
进行文章保存。
5.9插入图片
进行图片的插入。
5.10日记编辑区域
有丰富的日记编辑功能,比如复制、粘贴、剪切、对齐方式、标号、字体颜色、字体背景颜色、段落、字体、字体大小、加粗、斜体、下划线、中划线、分割线等等。
5.11头像更换
单击头像可以进行头像的更换。
5.12头像栏
进行用户头像的显示。
5.13用户信息栏
显示用户的信息。
6、查
有对日记进行过滤的条件,包括全文、心情、天气、日期。
6.1编号
对用户查阅的日记的标号进行显示。
6.2标题
对用户查阅的日记的标题进行显示。
6.3天气
对用户查阅的日记的天气进行显示。
6.4心情
对用户查阅的日记的心情进行显示。
6.5日期
对用户查阅的日记的日期进行显示。
6.6返回
返回上一级菜单。
6.7查找结果
对查找结果进行显示。
6.8全文查找
根据关键字搜索库中文章。
6.9心情查找
根据心情进行查找。
6.10天气查找
根据天气进行查找。
6.11时间查找
根据时间段进行查找。
注:全文查找与心情、天气、日期是独立开来的。
心情、天气、日期是求交集的。
交互系统
7.1抖动交互
进行用户反馈时,会有窗口抖动进行提示。
7.2提示栏
进行用户反馈时,会有提示栏
进行提示。
部分源码
package application;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;import application.choice.Choice;
import application.forget.Forget;
import application.register.Register;
import application.tool.FileTools;
import application.tool.JDBCTools;
import application.tool.StringTools;
import application.write.Writer;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.fxml.FXMLLoader;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.control.Label;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.MouseEvent;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import javafx.stage.StageStyle;public class Main extends Application {private String tempPath = ".//temp//";private ImageView logoImage;private CheckBox checkPassword;private TextField accountField;private TextField passwordField;private double xOffset = 0;private double yOffset = 0;private Properties pass = new Properties(); private FileInputStream passwordFile;private Connection con = null;private PreparedStatement ps = null;private ResultSet rs = null;private Button login;private boolean isAutoLog = false;double startX ;double startY ;private CheckBox autoLog;private Stage primaryStage;private Label hint;@Overridepublic void start(Stage primaryStage) {try {// 加载fxmlParent root = FXMLLoader.load(getClass().getResource("/application/LoginUI.fxml"));hint = (Label) root.lookup("#hint");passwordField = (PasswordField) root.lookup("#passwordField");accountField = (TextField) root.lookup("#accountField");logoImage = (ImageView) root.lookup("#logoImage");login = (Button) root.lookup("#login");autoLog = (CheckBox)root.lookup("#autoLog");this.primaryStage = primaryStage;WebView log = (WebView) root.lookup("#log");if (log != null) {File file = new File("edulion//edulion.html");if (file.exists()) {WebEngine webEngine = log.getEngine();try {webEngine.load(file.toURL().toString());} catch (MalformedURLException e) {e.printStackTrace();}}}//读取本地信息try {passwordFile = new FileInputStream("password.properties");pass.load(passwordFile);} catch (IOException e1) {e1.printStackTrace();}// 记住密码checkPassword = (CheckBox) root.lookup("#checkPassword");//显示历史信息setUsername();setInofor();// 加载cssScene scene = new Scene(root);scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());primaryStage.setTitle("YiMi日记本");primaryStage.setScene(scene);primaryStage.initStyle(StageStyle.UNDECORATED);// 设定窗口无边框// 可拖动root.setOnMousePressed((MouseEvent event) -> {event.consume();xOffset = event.getScreenX();startX = primaryStage.getX();startY = primaryStage.getY();yOffset = event.getScreenY();//System.out.println(xOffset + ":" + yOffset);});//root.setOnMouseDragEnteredroot.setOnMouseDragged((MouseEvent event) -> {//System.out.println(event.getSceneX() + "-" + event.getSceneY());double xx = event.getScreenX();double yy = event.getScreenY();double x = xx - xOffset + startX;double y = yy - yOffset + startY;primaryStage.setX(x);primaryStage.setY(y);});// 关闭窗口ImageView iv = (ImageView) root.lookup("#closeWindow");if (iv != null) {iv.setOnMouseClicked((MouseEvent event) -> {System.out.println("12121");primaryStage.close();});}// 关闭窗口Label find = (Label) root.lookup("#find");if (find != null) {find.setOnMouseClicked((MouseEvent event) -> {new Forget().start(new Stage());});}//设置头像if( !accountField.getText().equals("") ) {setLogo();}// 账号改事件 if( accountField != null ) {accountField.textProperty().addListener(new ChangeListener<String>() {@Overridepublic void changed(ObservableValue<? extends String> observable, String oldValue,String newValue) {if( !newValue .equals("") && StringTools.matchs(newValue, "\\d{8,11}")) {System.out.println("444444444444");setLogo();setInofor(); }}});}//登录if (login != null) {login.setOnMouseClicked((MouseEvent event) -> {logIn();});}Label register = (Label) root.lookup("#register");if (register != null) {register.setOnMouseClicked((MouseEvent event) -> {Register r = new Register();r.start(new Stage());});}passwordFile.close();primaryStage.setResizable(false);if(isAutoLog == false) primaryStage.show();} catch (Exception e) {e.printStackTrace();}}public void logIn() {String sql = "select * from user where username = ? and password = ?";try {con = JDBCTools.getConnection("jdbc.properties");ps = con.prepareStatement(sql);ps.setString(1, accountField.getText() == null ? "" : accountField.getText());ps.setString(2, passwordField.getText() == null ? "" : passwordField.getText());rs = ps.executeQuery();if (rs.next()) {hint.setOpacity(0);User user = new User();user.setUser(rs.getString(1));System.out.println(user.getUser());user.setPassword(rs.getString(2));Choice c = new Choice(user,primaryStage);c.show();primaryStage.close();} else {Shake.warn(primaryStage);hint.setText("账号错误或者密码错误!请重试!");hint.setOpacity(1);}saveInfor();} catch (SQLException | ClassNotFoundException | IOException e) {// TODO 自动生成的 catch 块e.printStackTrace();} finally {JDBCTools.release(ps, null, rs);}}public void setUsername() {if( !pass.getProperty("username").equals("") ) {accountField.setText(pass.getProperty("username"));}}public void setInofor() { try {passwordFile = new FileInputStream("password.properties");pass.load(passwordFile);System.out.println("888" + pass.getProperty("isSave"));if( pass.getProperty("isSave").equals("1") ) {if( !pass.getProperty("password").equals("") ) {passwordField.setText(pass.getProperty("password"));//自动登录if( pass.getProperty("autoLog").equals("1")) {autoLog.setSelected(true);logIn();} else {autoLog.setSelected(false);}}checkPassword.setSelected(true);}} catch (IOException e) {e.printStackTrace();} finally {try {passwordFile.close();} catch (IOException e) {e.printStackTrace();}}}public void saveInfor() {try {FileOutputStream passwordFile = new FileOutputStream("password.properties");pass.setProperty("username", accountField.getText());if(autoLog.isSelected() ) {pass.setProperty("autoLog","1");isAutoLog = true;} else {pass.setProperty("autoLog","0");}if( checkPassword.isSelected() ) {pass.setProperty("password", passwordField.getText());} else {}if( checkPassword.isSelected() ) {pass.setProperty("isSave","1");} else {pass.setProperty("isSave","0");}pass.store(passwordFile, null);} catch (IOException e1) {e1.printStackTrace();} finally {try {passwordFile.close();} catch (IOException e) {// TODO 自动生成的 catch 块e.printStackTrace();}}}public void setLogo() {String sql = "select count(*) from user where username = ?";try {con = JDBCTools.getConnection("jdbc.properties");ps = con.prepareStatement(sql);ps.setString(1, accountField.getText() == null ? "" : accountField.getText());rs = ps.executeQuery();rs.next();int i = rs.getInt(1);if (i == 1 ) {sql = "select img from user where username = ?";JDBCTools.release(ps, null, rs);ps = con.prepareStatement(sql);ps.setString(1, accountField.getText());FileTools.readDB2Image(con, tempPath + accountField.getText() + ".jpg", ps);FileInputStream f = new FileInputStream(tempPath+ accountField.getText() + ".jpg");logoImage.setImage(new Image(f));f.close();} else {logoImage.setImage(null);}saveInfor();} catch (IOException e) {} catch (SQLException e) {// TODO 自动生成的 catch 块e.printStackTrace();} catch (ClassNotFoundException e) {// TODO 自动生成的 catch 块e.printStackTrace();} finally {JDBCTools.release(ps, null, rs);}}private Writer Writer() {return null;}public static void main(String[] args) {launch(args);}
}
其它
- 源码下载
关注下方公众号,选择开源项目菜单
欢迎加入交流群:451826376
更多信息:www.itcourse.top
Java日记本(包含数据库操作)相关推荐
- JSP详细篇——Java Web的数据库操作
Java Web的数据库操作 JDBC技术 JDBC简介 JDBC是Java程序曹祖数据库的API,也是Java程序与数据库交互的一门技术.JDBC是java操作数据库的规范,由一组用Java语言编写 ...
- C++、Python、Java的MySQL数据库操作
C++.Python.Java 的MySQL数据库操作 简介 提供MySQL安装说明,以及在C++.Python.Java编程中的MySQL数据库环境配置,并且分别利用这三种语言对基础的MySQL数据 ...
- 利用Java存储过程简化数据库操作
利用Java存储过程沟通SQL.XML.Java.J2EE和Web服务. 存储过程(stored procedure)允许将运行于数据库层中的持久性逻辑与运行于中间层中的商务逻辑有效地分离开来. ...
- 小博老师解析Java核心技术 ——JDBC数据库操作类封装
2019独角兽企业重金招聘Python工程师标准>>> [引言] 我们在学习Java编程时,连接数据库技术(JDBC)是一项必备技能,我们经常需要读取或操作持久性存储的结构化数据.那 ...
- Java后端之数据库操作事务回滚
什么是事物 事物是应用程序中一系列操作,事物完成是指所有的操作都完成,事物不完成是指一个操作也不能完成,事物结束有两种情况,当事务中的所有步骤全部完成时,事务提交,如果一个步骤失败,则发生回滚操作,撤 ...
- java中的数据库操作_Java中数据库操作的流程介绍
1.java数据库操作基本流程 a .数据库连接1.Drivermanager 链接数据库 String className,url,uid,pwd; className="oracle.j ...
- java监听数据库操作_第十六篇——JDBC操作数据库之监听器
JavaWeb应用中,很多的地方都和session有关.因此session相关的事件监听器,在日常工作中非常有用. 有时候我们需要统计当前在线的人数和访问人数总数,此时就可以使用监听器技术来很简单的实 ...
- JAVA 连接MYSQL数据库操作
String strCon = "jdbc:mysql://122.114.147.148:3306/ddd"; //连接字符串String strUser = "数据库 ...
- java web 数据库操作_Java Web----Java Web的数据库操作(二)
Java Web的数据库操作 三.JDBC操作数据库 上一篇介绍了JDBC API,之后就可以通过API来操作数据库,实现对数据库的CRUD操作了. 下面仅以示例 的方式对数据库操作进行说明 1. 添 ...
最新文章
- Spring Boot注入自定义properties文件配置
- nginx 反向代理和负载均衡
- 真执着 卡巴斯基和Palo Alto找到了BlackEnergy和ExPetr的相似代码
- jmeter(五)几种不同的content-type方式
- 影响u盘传输速度和使用寿命的几大因素
- Linux下PortSentry的配置
- Java Double类parseDouble()方法的示例
- 在esx server VI里导入其它虚拟机
- threadlocal的set()方法中的内存回收
- java无穷大 inf_java – 为什么浮点数无穷大,不像NaN,等于?
- ZOJ 1730 圆桌换序
- form表单提交和重置小结
- 中兴c语言 面试题,华为,英飞凌,中兴硬件工程师面试题
- 520用Java制作一个表白app
- 小程序电子名片免费制作
- Hi3559A Hi3519A Hi3556A算力对比
- X射线检测系统市场现状及未来发展趋势
- 深圳中院判决:利用网络爬虫技术抓取他人数据构成不正当竞争
- 网易不进垃圾箱html,腾讯QQ、网易126、163邮箱发送邮件进入垃圾箱及收不到邮件怎么办?...
- 【微动弹性带方法——续鞍点】