基于Java+SQL Server2008开发的(CS界面)个人财物管理系统
一、需求分析
个人财务管理系统是智能化简单化个人管理的重要的组成部分。并且随着计算机技术的飞速发展,计算机在管理方面应用的旁及,利用计算机来实现个人财务管理势在必行。本文首先介绍了个人财务管理系统的开发目的,其次对个人财务管理系统的需求分析做了详细的描述。接着,又对系统数据库设计和功能结构的划分做了详细论述。然后又对个人财务管理系统的实现做了详尽的说明。在报告的最后给出了项目的测试结果以及结果分析。
本系统是对个人的收支情况做一个简单的管理,其中宝库哦个人信息管理以及收支信息管理。 其中,个人信息管理包括用户对自己的信息进行增删查改的一些操作,同样,收支信息管理包括用户对收支情况的信息进行增删查改的管理
(一) 系统业务需求
该系统具体需求应该有用户登录模块,用户修改信息模块,用户修改信息模块,收支查询模块,收支删除模块,收支添加模块,收支修改模块。
(二)系统技术目标
该系统的目标主要是能对个人信息以及收支信息进行较快的增删查改,同时也能对收支信息进行各种方式的查询。
(三)系统的具体需求
根据以上对系统的任务和目标的分析,系统的具体需求如下:
个人信息:用户名(唯一),密码,姓名,性别,出生日期,工作,身份证号,电话号码
收支信息:收支编号(唯一),收支日期,收支方式,收支项目,收入金额,支出金额,,总金额。
二、软件功能结构分析
由需求分析可知,软件的功能应包括:个人信息管理,收支信息管理。其中,个人信息应包括,个人信息的增删查该,登录时候验证功能。收支信息管理应包括对对收支信息的各种方式查询,以及对收支信息的增加,修改以及删除功能。当然,每个用户应对应其各自的收支信息。
(一)个人信息功能
在登录界面用户输入用户名以及密码,如果用户与密码都输入正确则可以登录进系统,如果其中任何一项与数据库中的数据不匹配则要求重新输入。当用户没有账户时候,可以点击登录界面的注册按钮注册。成功进入系统后,可以进行个人信息的查询以及修改。
具体流程图如下:
(二)收支管理功能
用户登录成功后进入主界面后可以选择查询方式,全部查询:查询用户所有收入支出的信息;收入查询:查询用户收入信息;支出查询:查询用户支出信息;按日期查询:查询用户当天的收入支出信息。用户也可以对收入支出信息进行修改和删除以及添加。
具体流程图如下:
三、数据库设计
经过以上的需求的分析以及系统功能的分析,需要建立出该系统数据库的各种模型,为建立一个好的,完善的数据库做准备。
(一)概念模型
由于该系统涉及的较少,只涉及到用户以及财务管理,所以设计比较简单。一个用户可以有多条收支记录,所以用户表与收支表是一对多的关系。通过PowerDesigner工具设计出的概念数据模型如下:
其对应的E-R模型如下图:
(二)逻辑模型
1.联系转换
一个用户可以有多条记录,而一条记录只能对应一个用户,所以用户与记录之间是一对多的关系。
2.其逻辑结构设计如下:
个人信息(用户名,密码,姓名,性别,出生日期,工作,身份证号,电话号码)
收支信息(收支编号,收支日期,收支方式,收支项目,收入金额,支出金额,总金额)
3.关系模式
个人信息(用户名,密码,姓名,性别,出生日期,工作,身份证号,电话号码)
收支信息(收支编号,收支日期,收支方式,收支项目,收入金额,支出金额,总金额)
(三)物理模型
通过PowerDesigner中的概念模型生成物理模型如下:
(四) 表结构设计
1.用户表:
- 收支信息表
四、软件代码设计
本系统是对个人财政的管理,下面给出具体的功能模块以及代码实现。
(一)功能模块
1.登录界面模块
说明:
(1)该界面为登录界面,如果没有账户,则可以点击注册按钮注册。
(2)当用户输入的用户名或者密码输入错误时,会提示用户名或者密码输入错误。
(3)当点击登录时,如果用户名以及密码都正确则会提示登录成功,并跳转到主界面。
2.用户注册模块
说明:
(1)该界面为用户注册模块
(2)用户填入信息,其中用户名唯一,当用户名重复时会提示“用户名已存在,请重新输入”
3.主界面模块
说明:
(1)该界面为用户主信息界面
(2)用户可以有多种查询方式:全部查询(查询全部收支信息)、收入查询(只查询收入信息)、支出管理(只查询支出信息)、日期查询(查询当天收支信息)
(3)显示用户所有的收入总计、支出总计以及收入支出总计
4.个人信息显示模块
说明:
(1)该界面为用户显示模块
(2)用户如果不想使用该系统可以注销掉自己的账户
5.个人信息修改模块
说明:
(1)修改界面与个人信息查询界面在同一模块
(2)用户名不能修改
6.收支信息插入模块
说明:
(1)该界面为添加收支信息界面
(2)当点击主界面的插入按钮时候,会跳转到该界面
(3)收支编号不能重复
7.收支信息修改界面
说明:
(1)该界面为收支信息修改界面
(2)当点击主界面中的修改按钮时(必须选中一行),跳转到该界面
(3)收支编号不能修改
8.收支信息删除界面
说明:
(1)该功能与在主界面上
(2)选中一行,然后点击删除,即可提示删除成功
(二)代码实现
1.登录界面主要功能实现(Login.java)
jb1.addActionListener(new ActionListener() {//登陆按钮public void actionPerformed(ActionEvent e) {jLabel5.setVisible(false);String ad = jf1.getText();String pass = jf2.getText();int i=0;String sc = "select userName,passWord from admin where userName='"+ad+"'";try {ResultSet rs = st.executeQuery(sc);while (rs.next()) {i++;String userName = rs.getString("userName");System.out.println(userName+"sdgdfgdf");String password = rs.getString("passWord");if (!ad.equals(userName)||userName.equals("")) {jLabel5.setVisible(true);} else if (!pass.equals(password)) {jLabel6.setVisible(true);} else {JOptionPane.showMessageDialog(null, "登陆成功!");Show show = new Show();show.s=jf1.getText();show.setVisible(true);setVisible(false);}}System.out.println(i+"sdfd");} catch (SQLException ex) {Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);}if(i==0){jLabel5.setVisible(true);}}});
说明:该代码实现了登录界面的登录、判断用户名与密码输入是否正确。当用户名或者密码输入错误的时候会提示用户名或者密码错误。同时还添加了一个注册按钮让没有账户的用户注册账户。
2.用户注册功能实现(UserInsert.java)
jb1.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {try {String s1 = jf1.getText();//y用户名String s2 = jf2.getText();//姓名String s12 = jf7.getText();//密码String s3 = (String) jcb.getSelectedItem();//性别String s5 = jf4.getText();//职业String s6 = jf5.getText();//身份证号码String s7 = jf6.getText();//电话号码String s8 = (String) jcb1.getSelectedItem();String s9 = (String) jcb2.getSelectedItem();String s10 = (String) jcb3.getSelectedItem();String s11 = s8 + "-" + s9 + "-" + s10;//出生日期ResultSet rs;String str ="select userName from admin where userName='"+s1+"'";rs = st.executeQuery(str);int i=0;while (rs.next()) {i++;}if (i == 0) {if (s6.length() != 18 || s7.length() != 11) {if (s6.length() != 18) {jLabel5.setVisible(true);}if (s7.length() != 11) {jLabel14.setVisible(true);}} else {String sql = "insert into admin Values ('" + s1 + "','" + s12 + "','" + s2 + "','" + s3 + "','" + s11 + "','" + s7 + "','" + s5 + "','" + s6 + "')";st.executeUpdate(sql);JOptionPane.showMessageDialog(null, "注册成功");setVisible(false);}}else{jLabel15.setVisible(true);} } catch (SQLException ex) {Logger.getLogger(UserInsert.class.getName()).log(Level.SEVERE, null, ex); }}});
说明:该代码实现了个人信息的注册,其中用户名唯一,重复会给出提示“用户名已存在”,并且判断身份证与电话号码填写的格式是否正确。
3.主界面模块
注:(函数内部具体代码会在附件给出,此出不给出具体具体实现代码)
(1)全部查询实现函数(Show.java)
jb1.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {..............}});
(2)收入查询实现函数(Show.java)
jb2.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {..............}});
(3)支出查询实现函数(Show.java)
b3.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {..............}});
(4)日期查询实现函数(Show.java)
4.个人信息查询功能模块(Show.java)
jb4.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {..............}});
5.个人信息修改功能模块(User.java)
jb2.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {..............}});
6.个人信息删除功能模块(User.java)
Jb3.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {..............}});
7.收支信息插入功能模块(UserInsert.java)
jb1.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {..............}});
8.收支信息添加功能模块(Insert.java)
jb1.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {..............}});
9.收支信息删除功能模块(show.java)
Jb7.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {..............}});
五、总结
通过该课程设计,我认识到软件设计是基于需求分析和可行性分析的基础上的,软件设计阶段需要合理的分析需求分析中的细节部分的实现,既要考虑到关键处代码的可实现性,又要考虑到开发过程中遇到的问题。刚开始觉得该 项目建立的数据库比较简单,没有认真进行需求分析,所有导致后面举步维艰。后来重新进行需求分析,一步一步来,最终完成了该课程设计。软件设计是把需求分析中的问题抽象化,又要把抽象化了的需求形象的从预期的实现中体现出来。 本小组的个人财务管理系统系统的设计实现了预期的功能,对个人消费进行记录,个人的收入进行统计,对个人收支进行汇总并给出相应的理财提示信息。在这次的个人财务管理系统设计中将理论知识应用到实际中使得对理论知识的理解有了更进一步的理解,如果仅仅只是运用理论知识,是远远不够的。必须理论联系实际,才能很好的将各门课程学好,并用于实际案例中。
这次设计使我的编程水平提高了一大步。由于这次设计涉及到数据库,我的学到了不少编程工具与数据库连接的知识,对数据库的操作有了进一步的了解。这次设计对我的综合能力是一次很好的锻炼,自己的能力和知识还很有限。所以今后我的学习道路还是很漫长的。
附件:部分程序代码清单
(1)数据库连接
public void initializeDB() {String url = "jdbc:sqlserver://localhost:1433; DatabaseName=MyMoney";String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";String user = "sa";String pwd = "zq7108392";try {Class.forName(driver);//加载驱动System.out.println("驱动加载成功");} catch (ClassNotFoundException event) {System.out.print("无法创建驱动程式实体!");}try {con = DriverManager.getConnection(url, user, pwd);System.out.println("引入数据库成功");st = con.createStatement();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
(2)Show.java
public void setDay(JComboBox year, JComboBox month, JComboBox day) {int y = Integer.parseInt(year.getSelectedItem().toString());int m = Integer.parseInt(month.getSelectedItem().toString());Calendar c = Calendar.getInstance();c.set(Calendar.YEAR, y);c.set(Calendar.MONTH, m - 1);int days = c.getActualMaximum(Calendar.DAY_OF_MONTH);day.setModel(new DefaultComboBoxModel(getModel(1, days)));}public String[] getModel(int start, int end) {String[] m = new String[end - start + 1];for (int i = 0; i < m.length; i++) {m[i] = String.valueOf(i + start);}return m;
}
private void jbox1ItemStateChanged(java.awt.event.ItemEvent evt) { // TODO add your handling code here:setDay(jbox1, jbox2, jbox3);} private void jbox2ItemStateChanged(java.awt.event.ItemEvent evt) { // TODO add your handling code here:setDay(jbox1, jbox2, jbox3);}
public void init() {setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {int isTrue = JOptionPane.showConfirmDialog(null, "确定退出?", "退出", JOptionPane.YES_NO_OPTION);if (isTrue == JOptionPane.YES_NO_OPTION) {System.exit(0);}}});jb1.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {ResultSet rs;
// ResultSetMetaData rsmd;String[] data = new String[7];int numT;double sum = 0;double sum1 = 0;double sum2 = 0;DefaultTableModel model = (DefaultTableModel) jTable1.getModel();numT = model.getRowCount();//获取当前已有行数while (numT > 0) {//如果是全体刷新表格需要移除之前的所有数据行model.removeRow(0);numT--;}try {String sql = "select incomeID,date,type,project,inMoney,outMoney,sumMoney from MyMoney where userName='" + s + "'";rs = st.executeQuery(sql);while (rs.next()) {data[0] = rs.getString(1).trim();data[1] = rs.getString(2).trim();data[2] = rs.getString(3).trim();data[3] = rs.getString(4).trim();data[4] = rs.getString(5).trim();data[5] = rs.getString(6).trim();data[6] = rs.getString(7).trim();model.addRow(data);sum = sum + Double.parseDouble(data[4].trim());sum1 = sum1 + Double.parseDouble(data[5].trim());sum2 = sum2 + Double.parseDouble(data[6].trim());}jf1.setText(sum + " ");jf2.setText(sum1 + " ");jf3.setText(sum2 + " ");} catch (Exception e1) {e1.printStackTrace();} finally {//jdbchelper.close();}jTable1.setModel(model);}});jb2.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {ResultSet rs;ResultSetMetaData rsmd;String[] data = new String[7];int numT;DefaultTableModel model = (DefaultTableModel) jTable1.getModel();numT = model.getRowCount();//获取当前已有行数while (numT > 0) {//如果是全体刷新表格需要移除之前的所有数据行model.removeRow(0);numT--;}try {String sql = "select incomeID,date,type,project,inMoney,outMoney,sumMoney from MyMoney where type='收入' and userName='" + s + "'";rs = st.executeQuery(sql);while (rs.next()) {data[0] = rs.getString(1).trim();data[1] = rs.getString(2).trim();data[2] = rs.getString(3).trim();data[3] = rs.getString(4).trim();data[4] = rs.getString(5).trim();data[5] = rs.getString(6).trim();data[6] = rs.getString(7).trim();model.addRow(data);}} catch (Exception e1) {e1.printStackTrace();} finally {}jTable1.setModel(model);}});jb3.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {ResultSet rs;ResultSetMetaData rsmd;String[] data = new String[7];int numT;DefaultTableModel model = (DefaultTableModel) jTable1.getModel();numT = model.getRowCount();//获取当前已有行数while (numT > 0) {//如果是全体刷新表格需要移除之前的所有数据行model.removeRow(0);numT--;}try {String sql = "select incomeID,date,type,project,inMoney,outMoney,sumMoney from MyMoney where type='支出'and userName='" + s + "'";rs = st.executeQuery(sql);while (rs.next()) {data[0] = rs.getString(1).trim();data[1] = rs.getString(2).trim();data[2] = rs.getString(3).trim();data[3] = rs.getString(4).trim();data[4] = rs.getString(5).trim();data[5] = rs.getString(6).trim();data[6] = rs.getString(7).trim();model.addRow(data);}} catch (Exception e1) {e1.printStackTrace();} finally {//jdbchelper.close();}jTable1.setModel(model);}});jb4.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {String s1 = (String) jbox1.getSelectedItem();String s2 = (String) jbox2.getSelectedItem();String s3 = (String) jbox3.getSelectedItem();String s4 = s1 + "-" + s2 + "-" + s3;ResultSet rs;String[] data = new String[7];int numT;DefaultTableModel model = (DefaultTableModel) jTable1.getModel();numT = model.getRowCount();//获取当前已有行数while (numT > 0) {//如果是全体刷新表格需要移除之前的所有数据行model.removeRow(0);numT--;}try {String sql = "select incomeID,date,type,project,inMoney,outMoney,sumMoney from MyMoney where date='" + s4 + "' and userName='" + s + "'";rs = st.executeQuery(sql);while (rs.next()) {data[0] = rs.getString(1).trim();data[1] = rs.getString(2).trim();data[2] = rs.getString(3).trim();data[3] = rs.getString(4).trim();data[4] = rs.getString(5).trim();data[5] = rs.getString(6).trim();data[6] = rs.getString(7).trim();model.addRow(data);}} catch (Exception e1) {e1.printStackTrace();} finally {}jTable1.setModel(model);}});jb5.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {int isTrue = JOptionPane.showConfirmDialog(null, "确定返回登录界面?", "退出", JOptionPane.YES_NO_OPTION);if (isTrue == JOptionPane.YES_NO_OPTION) {Login login = new Login();login.setVisible(true);setVisible(false);}}});jb6.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {int row = jTable1.getSelectedRow();if (row == -1) {JOptionPane.showMessageDialog(null, "请在表中选择一行!");} else {Update up = new Update();JTextField[] jtf = up.returnJTF();JComboBox[] jcb = up.returnJBOX();jtf[0].setText(jTable1.getValueAt(row, 2).toString());jtf[1].setText(jTable1.getValueAt(row, 3).toString());jtf[2].setText(jTable1.getValueAt(row, 4).toString());jtf[3].setText(jTable1.getValueAt(row, 5).toString());jtf[4].setText(jTable1.getValueAt(row, 6).toString());jtf[5].setText(jTable1.getValueAt(row, 0).toString());jcb[0].setSelectedItem(jTable1.getValueAt(row, 3).toString());String birthday = jTable1.getValueAt(row, 1).toString();up.setVisible(true);String year = birthday.substring(0, 4);String month = birthday.substring(5, 7);String day = birthday.substring(8, 10);jcb[0].setSelectedItem(year);jcb[1].setSelectedItem(month);jcb[2].setSelectedItem(day);}}});jb7.addActionListener(new ActionListener() {//删除功能public void actionPerformed(ActionEvent e) {int row = jTable1.getSelectedRow();if (row == -1) {JOptionPane.showMessageDialog(null, "请在表中选择一行!");} else {try {String s = jTable1.getValueAt(row, 0).toString();String str = "delete from MyMoney where incomeID='" + s + "'";st.executeUpdate(str);JOptionPane.showMessageDialog(null, "删除成功");} catch (SQLException ex) {Logger.getLogger(Show.class.getName()).log(Level.SEVERE, null, ex);}}}});jb8.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {Insert insert = new Insert();insert.s = s;insert.setVisible(true);}});jb9.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {try {User user = new User();JTextField[] jtf = user.returnJTF();JComboBox[] jcb = user.returnJBOX();user.setVisible(true);ResultSet rs;String str = "select * from admin where userName='" + s + "'";rs = st.executeQuery(str);while (rs.next()) {String s1 = rs.getString("userName");String s2 = rs.getString("password");String s3 = rs.getString("name");String s4 = rs.getString("sex");String s5 = rs.getString("brithday");String s6 = rs.getString("tel");String s7 = rs.getString("job");String s8 = rs.getString("identify");jtf[0].setText(s1);//用户名jtf[5].setText(s2);//密码jtf[1].setText(s3);//姓名jcb[3].setSelectedItem(s4);//性别//生日String year = s5.substring(0, 4);String month = s5.substring(5, 7);String day = s5.substring(8, 10);jcb[0].setSelectedItem(year);jcb[1].setSelectedItem(month);jcb[2].setSelectedItem(day);jtf[2].setText(s7);//职业jtf[3].setText(s8);//身份证号码jtf[4].setText(s6);//电话号码}} catch (SQLException ex) {Logger.getLogger(Show.class.getName()).log(Level.SEVERE, null, ex);}}});}
(3)Insert.java
public void init() {setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {int isTrue = JOptionPane.showConfirmDialog(null, "确定退出?", "退出", JOptionPane.YES_NO_OPTION);if (isTrue == JOptionPane.YES_NO_OPTION) {System.exit(0);}}});jb1.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {try {String s1 = (String) jbox1.getSelectedItem();//年String s2 = (String) jbox2.getSelectedItem();//月String s3 = (String) jbox3.getSelectedItem();//日String s4 = s1 + "-" + s2 + "-" + s3;//合体String s5 = jf1.getText();//收支类型String s6 = jf2.getText();//收支项目String s7 = jf3.getText();//收入数目String s8 = jf4.getText();//支付数目String s9 = jf5.getText();//总计数目String s0 = jf6.getText();//收支编号ResultSet rs;String sql ="select incomeID from MyMoney where incomeID='"+s0+"'";rs = st.executeQuery(sql);int i=0;while (rs.next()) {i++;}if (i == 0) {String str = "insert into MyMoney VALUES('" + s0 + "','" + s + "','" + s4 + "','" + s5 + "','" + s6 + "','" + s7 + "','" + s8 + "','" + s9 + "')";st.executeUpdate(str);JOptionPane.showMessageDialog(null, "插入成功");setVisible(false);}else {jLabel11.setVisible(true);//JOptionPane.showMessageDialog(null, "编号重复,请重新输入");}} catch (SQLException ex) {Logger.getLogger(Insert.class.getName()).log(Level.SEVERE, null, ex);}}});}
(4)Update.java
public JTextField[] returnJTF() {JTextField[] jtf = new JTextField[6];jtf[0] = jf1;jtf[1] = jf2;jtf[2] = jf3;jtf[3] = jf4;jtf[4] = jf5;jtf[5] = jf6;return jtf;}public JComboBox[] returnJBOX() {JComboBox[] jbox = new JComboBox[3];jbox[0] = jbox1;jbox[1] = jbox2;jbox[2] = jbox3;return jbox;}public void init() {setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {int isTrue = JOptionPane.showConfirmDialog(null, "确定退出?", "退出", JOptionPane.YES_NO_OPTION);if (isTrue == JOptionPane.YES_NO_OPTION) {System.exit(0);}}});addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent we) {dispose();}});jb2.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {int isTrue = JOptionPane.showConfirmDialog(null, "确定返回?", "退出", JOptionPane.YES_NO_OPTION);if (isTrue == JOptionPane.YES_NO_OPTION) {setVisible(false);}}});jb1.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {try {String s1 = (String) jbox1.getSelectedItem();String s2 = (String) jbox2.getSelectedItem();String s3 = (String) jbox3.getSelectedItem();String s4 = s1 + "-" + s2 + "-" + s3;String s5 = jf1.getText();String s6 = jf2.getText();String s7 = jf3.getText();String s8 = jf4.getText();String s9 = jf5.getText();String s0 = jf6.getText();String str = "update MyMoney set date='" + s4 + "' ,type='" + s5 + "' , project='" + s6 + "' , inMoney='" + s7 + "' , outMoney='" + s8 + "' , sumMoney='" + s9 + "' where incomeID='" + s0 + "';";st.executeUpdate(str);JOptionPane.showMessageDialog(null, "修改成功");setVisible(false);} catch (SQLException ex) {Logger.getLogger(Update.class.getName()).log(Level.SEVERE, null, ex);}}});jb2.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {int isTrue = JOptionPane.showConfirmDialog(null, "确定返回?", "退出", JOptionPane.YES_NO_OPTION);if (isTrue == JOptionPane.YES_NO_OPTION) {setVisible(false);}}});}public void setDay(JComboBox year,JComboBox month,JComboBox day){int y=Integer.parseInt(year.getSelectedItem().toString());int m=Integer.parseInt(month.getSelectedItem().toString());Calendar c=Calendar.getInstance();c.set(Calendar.YEAR,y);c.set(Calendar.MONTH,m-1);int days=c.getActualMaximum(Calendar.DAY_OF_MONTH);day.setModel(new DefaultComboBoxModel(getModel(1, days)));}public String[] getModel(int start, int end) {String[] m = new String[end - start + 1];for (int i = 0; i < m.length; i++) {m[i] = String.valueOf(i + start);}return m;}
(5)User.java
Public void init() {jb1.addactionlistener(new actionlistener() {public void actionperformed(actionevent e) {int istrue = joptionpane.showconfirmdialog(null, "确定返回?", "退出", joptionpane.yes_no_option);if (istrue == joptionpane.yes_no_option) {setvisible(false);}}});jb2.addactionlistener(new actionlistener() {public void actionperformed(actionevent e) {try {string s1 = (string) jcombobox1.getselecteditem();string s2 = (string) jcombobox2.getselecteditem();string s3 = (string) jcombobox3.getselecteditem();string s4 = s1 + "-" + s2 + "-" + s3;//出生日期string s5 = jf1.gettext();//用户名string s6 = jf2.gettext();//姓名string s7 = jf3.gettext();//密码string s8 = jf4.gettext();//职业string s9 = jf5.gettext();//身份证号码string s0 = jf6.gettext();//电话号码string s11 = (string) jcb.getselecteditem();string str = "update admin set password='" + s7 + "',name='" + s6 + "',sex='" + s11 + "',brithday='" + s4 + "',tel='" + s0 + "',job='" + s8 + "',identify='" + s9 + "' where username='" + s5 + "'";st.executeupdate(str);joptionpane.showmessagedialog(null, "修改成功");setvisible(false);} catch (sqlexception ex) {logger.getlogger(user.class.getname()).log(level.severe, null, ex);}}});jb3.addactionlistener(new actionlistener() {public void actionperformed(actionevent e) {try {string s=jf1.gettext();string str1 = "delete from mymoney where username='" + s + "'";string str = "delete from admin where username='"+s+"'";st.executeupdate(str1);st.executeupdate(str);joptionpane.showmessagedialog(null, "删除成功");setvisible(false);show.setvisible(false);login login=new login();login.setvisible(true);} catch (sqlexception ex) {logger.getlogger(user.class.getname()).log(level.severe, null, ex);}}});}
(6)UserInsert.java
public void init() {jb1.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {try {String s1 = jf1.getText();//y用户名String s2 = jf2.getText();//姓名String s12 = jf7.getText();//密码String s3 = (String) jcb.getSelectedItem();//性别String s5 = jf4.getText();//职业String s6 = jf5.getText();//身份证号码String s7 = jf6.getText();//电话号码String s8 = (String) jcb1.getSelectedItem();String s9 = (String) jcb2.getSelectedItem();String s10 = (String) jcb3.getSelectedItem();String s11 = s8 + "-" + s9 + "-" + s10;//出生日期ResultSet rs;String str ="select userName from admin where userName='"+s1+"'";rs = st.executeQuery(str);int i=0;while (rs.next()) {i++;}if (i == 0) {if (s6.length() != 18 || s7.length() != 11) {if (s6.length() != 18) {jLabel5.setVisible(true);}if (s7.length() != 11) {jLabel14.setVisible(true);}} else {String sql = "insert into admin Values ('" + s1 + "','" + s12 + "','" + s2 + "','" + s3 + "','" + s11 + "','" + s7 + "','" + s5 + "','" + s6 + "')";st.executeUpdate(sql);JOptionPane.showMessageDialog(null, "注册成功");setVisible(false);}}else{jLabel15.setVisible(true);}} catch (SQLException ex) {Logger.getLogger(UserInsert.class.getName()).log(Level.SEVERE, null, ex);}}});}
相关文章:

基于Java+SQL Server2008开发的(CS界面)个人财物管理系统
一、需求分析 个人财务管理系统是智能化简单化个人管理的重要的组成部分。并且随着计算机技术的飞速发展,计算机在管理方面应用的旁及,利用计算机来实现个人财务管理势在必行。本文首先介绍了个人财务管理系统的开发目的,其次对个人财务管理…...

15年408计算机网络
第一题: 解析: 接收方使用POP3向邮件服务器读取邮件,使用的TCP连接,TCP向上层提供的是面向连接的,可靠的数据传输服务。 第二题: 解析:物理层-不归零编码和曼彻斯特编码 编码1:电平在…...

C++ const关键字
const 1. 修饰变量(包括函数参数 函数返回值) const int v0 10; v0 0; // error 不能修改const修饰的变量 2. 修饰指针 int v1 10; int v2 20; int v3 30; 2.1 常量指针 const 在指针左边,左定值,即不能通过指针修改该…...

python爬虫案例——腾讯网新闻标题(异步加载网站数据抓取,post请求)(6)
文章目录 前言1、任务目标2、抓取流程2.1 分析网页2.2 编写代码2.3 思路分析前言 本篇案例主要讲解异步加载网站如何分析网页接口,以及如何观察post请求URL的参数,网站数据并不难抓取,主要是将要抓取的数据接口分析清楚,才能根据需求编写想要的代码。 1、任务目标 目标网…...

LeetCode416:分割等和子集
题目链接:416. 分割等和子集 - 力扣(LeetCode) 代码如下: class Solution { public:bool canPartition(vector<int>& nums) {int m nums.size();vector<int> dp(10010, 0);int sum 0;for(int i 0; i < m;…...

自定义异常注解处理框架
首先我们定义两个用于检验string和List的注解 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/*** author caiyi.yu* 自定义非空判断*/ Target(Elemen…...

【小程序】微信小程序课程 -3 快速上手之常用方法
目录 1、 对话框 1.1 模态对话框 1.2 消息对话框 2、 存储 2.1 同步 2.1.1 同步保存数据 2.1.2 同步获取数据 2.1.3 同步删除数据 2.1.4 同步清空数据 2.2 异步 2.2.1 异步保存数据 2.2.2 异步获取数据 2.2.3 异步删除数据 2.2.4 异步清空数据 3、 上拉加载更多…...

iOS 小组件
基本知识 时间轴 小组件通过AppIntentTimelineProvider进行 UI 刷新 struct Provider: AppIntentTimelineProvider {func placeholder(in context: Context) -> SimpleEntry {// 添加占位的(选择添加的时候使用)// todo}func snapshot(for configu…...

【2.使用VBA自动填充Excel工作表】
目录 前言什么是VBA如何使用Excel中的VBA简单基础入门控制台输出信息定义过程(功能)定义变量常用的数据类型Set循环For To 我的需求开发过程效果演示文件情况测试填充源文件测试填充目标文件 全部完整的代码sheet1中的代码,对应A公司工作表Us…...

算法记录——链表
2.链表 2.1判断是否是回文链表 1.方法一:利用栈反转链表 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode…...

EasyExcel实现百万数据批量导出
当数据量比较大时,例如数据量达到百万级,传统的一次读取到内存中在写入excel文件的方法便不再适用了,可能会导致内存溢出;而且一次性将数据写入一张sheet工作表也不太好。 但我们可以选择数据分片的方式批量写入多个工作表。 测试…...

兆易GD32E508的SHRTIM配置 主从定时器 产生2对相位可调互补PWM 带死区
如有技术问题及技术需求请加作者微信! GD32E5系列MCU是基于Arm Cortex-M33处理器的32位通用微控制器。Cortex-M33处理器基于Armv8架构,处理器主频最高可达180MHz,支持强大的可扩展指令集,包括通用数据处理I/O控制任务、增强的数据处理位域操作、DSP和浮点运算器(FPU)。 GD…...

数据归组工具
利用C#将数据 [ {"name":"A","fzh":1}, {"name":"A","fzh":2}, {"name":"A","fzh":3}, {"name":"B","fzh":4}, {"name":"B",&…...

JavaScript 中的闭包的形成及使用场景
JavaScript 中的闭包 闭包(Closure) 是 JavaScript 中一个非常重要且独特的概念,它指的是 函数能够记住并访问其词法作用域内的变量,即使这个函数在其词法作用域之外执行。 通俗地说,闭包是 一个函数可以“记住”它在…...

后端返回内容有换行标识,前端如何识别换行
<br/>的话 用 v-html \n 可以用css样式 white-space: pre-wrap 后端返回结果 前端...

服务器被挂马,导致网站首页被更改怎么解决
当服务器被挂马并导致网站首页被篡改时,说明服务器或网站的安全性遭到破坏。为了修复并防止未来的攻击,你可以按照以下步骤进行操作: 1. 立即下线网站 目的:防止恶意软件进一步传播,保护用户数据和防止攻击者继续对网…...

Android 利用OSMdroid开发GIS
1、地址 Github地址:https://gitee.com/mirrors/osmdroid Git地址: GitCode - 全球开发者的开源社区,开源代码托管平台 Git下载包地址:Releases osmdroid/osmdroid GitHub 新建项目 osmdroid在线: (1)…...

一文上手skywalking【上】
一、skywalking预览 1.1 skywalking 概述 Apache SkyWalking, 适用于分布式系统的应用程序性能监控工具,专为微服务、云原生和基于容器的 (Kubernetes) 架构而设计。官方地址: https://skywalking.apache.org/ 适用于分布式系统的应用程…...

【JavaScript】JQuery基础知识及应用
一、JQuery的导入方法 https://editor.csdn.net/md/?articleId132214798 二、JQuery介绍 JQuery(JQ):JS的一个类库(方法库:包含了大量的、有助于项目开发的属性和方法) 第一代版本1.xx.xx: 1.11.3 兼容所有浏览器的࿰…...

初始爬虫9
1.元素定位后的操作 “find_element“仅仅能够获取元素,不能够直接获取其中的数据,如果需要获取数据需要使用以下方法”。下面列出了两个方法: 获取文本 element.text 通过定位获取的标签对象的 text 属性,获取文本内容 获取属性…...

从细胞到临床:表观组学分析技术在精准医疗中的角色
中国科学院等科研院所的顶尖人才发起,专注于多组学、互作组、生物医学等领域的研究与服务。在Nature等国际知名期刊发表多篇论文,提供实验整体打包、免费SCI论文润色等四大优势服务。在表观组学分析技术方面,提供DAP-seq、ATAC-seq、H3K4me3 …...

带你0到1之QT编程:二十、QT与MySQL喜结连理,构建数据库应用开发
此为QT编程的第二十谈!关注我,带你快速学习QT编程的学习路线! 每一篇的技术点都是很很重要!很重要!很重要!但不冗余! 我们通常采取总-分-总和生活化的讲解方式来阐述一个知识点! …...

梯度下降法及其性能评估
梯度下降法 梯度下降法是一种一阶迭代优化算法,用于寻找函数的局部最小值。在机器学习中,它通常用来最小化损失函数(也称为成本函数或误差函数),以提高模型对数据的拟合程度。梯度下降法的基本思想是沿着目标函数当前…...

906. 超级回文数
1. 题目 906. 超级回文数 2. 解题思路 题目意思很简单,在给定范围中找到所有满足,它本身是回文,且它的平方也是回文的数字个数。 这题需要注意题目给定的范围,后面很有用: 因为回文范围是有限的,那么我…...

代码随想录算法训练营||二叉树
前/中/后序遍历 递归方式 参考文章 题目 思路:其实递归方式的前中后序遍历的方式都差不多,区别是在父节点的遍历时间。 前序代码 class Solution {public List<Integer> preorderTraversal(TreeNode root) {List<Integer> result new…...

线上报名小程序怎么做
在这个数字化、智能化的时代,信息技术的发展正以前所未有的速度改变着我们的生活。无论是学习、工作还是娱乐,互联网都成为了我们不可或缺的一部分。而在线上报名这一领域,小程序的出现更是为广大用户带来了前所未有的便捷与高效。今天&#…...

【测试岗】手撕代码 - 零钱兑换
322. 零钱兑换 题目描述 给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。 你可以认为每种…...

菱形继承的类对父类的初始化、组合、多态、多态的原理等的介绍
文章目录 前言一、菱形继承的类对父类的初始化二、组合三、 多态1. 构成多态2. 虚函数3. 虚函数的重写4. 虚函数重写的两个例外1. 协变2. 析构函数的重写 5. C11 final 和 override1. final2. override 6. 设计不想被继承的类7. 重载、覆盖(重写)、 隐藏…...

React Native 在 build 的时候如果出现 `babel.config.js` 配置文件的错误
React Native 在 build 的时候如果出现以下错误, 就是 babel.config.js 配置文件的错误. Showing Recent Issues node:internal/process/promises:289triggerUncaughtException(err, true /* fromPromise */);^Error: .plugins[0][1] must be an object, false, or undefineda…...

【Linux】包管理器、vim详解及简单配置
🚀个人主页:小羊 🚀所属专栏:Linux 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 前言一、包管理器1.1 apt1.2 yum 二、Linux编辑器——vim2.1 vim的三种模式2.2 vim普通模式常用命令2.2.1 移动…...