- 设计要点:设计并编程实现一个好友信息管理的小系统。系统应包含每位好友的全部信息,包括姓名、性别、生日、爱好、联系方式、性格特点等。系统实现对好友信息进行增、删、改、查、生日提醒、统计计算等功能。
- 题目要求:
- 需求分析:
本阶段是整个软件开发过程中最重要的环节。通过了解实际运行的系统或与用户交谈,明确系统要完成的任务是什么。
本次课程设计主要:开发一个简易的好友信息管理系统,首要任务是完成增、删、改、查的基本操作,如有余力的情况下可以考虑生日提醒,统计分析之类的加分项!
该程序主要功能需求如下:
1. 用户登录
用户输入自己的用户名及密码登录到好友管理系统中,如果登陆成功,进入到管理系统的页面,如果登录失败,则提示重新输入密码。
2. 添加记录
用户可以通过添加按钮添加已存数据库之外的新的好友记录,点击添加记录按钮后,系统将跳出新窗口,用来填写新记录的信息,添加完成后点击完成按钮,窗口调回好友信息管理系统主页面。
3. 删除记录
首先用户通过查询功能找到要删除的记录,选定记录后,点击删除记录按钮删除该记录。
4. 显示所有记录
点击查询按钮,直接显示出所有的好友信息记录,也可以按照不同的类别,将记录显示出来。(选做)
5. 修改记录
首先用户通过查询功能找到要修改的记录,选定记录后,点击修改记录按钮修改该记录。
6. 查询记录
用户选定查询的类别,输入查询的信息,点击查询按钮,将把用户的信息显示到查询框下的文本框中。
7. 备份记录
通过点击备份按钮,系统将自动的把用户的所有记录信息打包备份。(选做)
8. 退出
当用户不在对通信录进行操作的时候,可以通过点击退出按钮退出系统。
另外如果想要得到更好的成绩,还需要考虑如何实现好友生日的提醒,以及一份让人眼前一亮的小功能。
用户点击登陆或注册按钮进入系统,已有用户可直接登录
生日提醒功能提醒好友生日
点击查询按钮显示所有数据
点击编辑菜单添加好友信息 点击完成按钮完成添加
点击编辑菜单进行好友删除 点击完成按钮完成删除
点击编辑菜单进行修改信息 点击完成按钮完成修改
点击编辑菜单进行统计 弹出窗口显示好友数量
用户注册界面 点击注册按钮完成注册
- 详细设计与实现
用户登陆窗口
用户输入自己的用户名及密码登录到好友管理系统中,如果登陆成功,进入到管理系统的页面,如果登录失败,则提示重新输入密码。
class MyWindow extends JFrame{ActionListener a1=new ActionListener() {public void actionPerformed(ActionEvent e) {String url = "jdbc:Access:///D:/demoTable.accdb";try {Class.forName("com.hxtt.sql.access.AccessDriver");Connection conn = DriverManager.getConnection(url);Statement stat = conn.createStatement();stat =conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);ResultSet rs=stat.executeQuery("select * from demo1");rs.moveToInsertRow();String a_t1=t1.getText().toString();String a_t2=new String (t2.getPassword());while(rs.next()) {if(a_t1.equals(rs.getString(2))&&a_t2.equals(rs.getString(3))){ Login w2=new Login("好友信息管理系统");dispose();flag=1;w2.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {JOptionPane.showConfirmDialog(new JFrame().getContentPane(), "是否保存?", "系统信息",JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);}});}else if(t1.getText().length()==0) {JOptionPane.showMessageDialog(null, "请输入账号", "Warning",JOptionPane.ERROR_MESSAGE);flag=2; break;}else if(t2.getPassword().length==0) {JOptionPane.showMessageDialog(null, "请输入密码", "Warning",JOptionPane.ERROR_MESSAGE); flag=3;break;}}if(flag==0) {JOptionPane.showMessageDialog(null, "您输入的账号或密码有误,请重新输入!", "Warning",JOptionPane.ERROR_MESSAGE);}try{rs.insertRow();}catch(Exception e6){};conn.close();} catch (ClassNotFoundException | SQLException e1) {e1.printStackTrace();}}};
…
若用户第一次使用,需要先通过注册再来进行登陆操作
ActionListener a2=new ActionListener() {public void actionPerformed(ActionEvent e) {Register w1=new Register("注册系统");setEnabled(false);w1.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {setEnabled(true); }});}};class Register extends JFrame{ActionListener a1=new ActionListener() {public void actionPerformed(ActionEvent e) {String url = "jdbc:Access:///D:/demoTable.accdb"; try {Class.forName("com.hxtt.sql.access.AccessDriver"); Connection conn =DriverManager.getConnection(url); Statement stat = conn.createStatement();stat =conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);ResultSet rs=stat.executeQuery("select * from demo1");rs.moveToInsertRow();String a_t1=t1.getText().toString();String a_t2=new String (t2.getPassword());String a_t3=new String (t3.getPassword());while(rs.next()) {if(a_t1.equals(rs.getString(2))) {flag=1;}}if(flag==1) {JOptionPane.showMessageDialog(null, "账户已存在!", "Warning",JOptionPane.ERROR_MESSAGE);}rs.moveToInsertRow();if(t1.getText().length()==0||t2.getPassword().length==0||t3.getPassword().length==0){JOptionPane.showMessageDialog(null, "内容不可以为空", "Warning",JOptionPane.ERROR_MESSAGE); }else if(a_t2.equals(a_t3)&&flag==0){JOptionPane.showMessageDialog(null, "注册成功!╮(╯▽╰)╭", "Success",JOptionPane.PLAIN_MESSAGE);rs.updateString(2,a_t1);rs.updateString(3,a_t2);}else if(Integer.parseInt(a_t2)!=Integer.parseInt(a_t3)&&flag==0){JOptionPane.showMessageDialog(null, "密码输入不一致,请重新输入", "Warning",JOptionPane.ERROR_MESSAGE);}try{rs.insertRow();}catch(Exception e6){};conn.close();}catch (ClassNotFoundException | SQLException e1) {e1.printStackTrace();}}};
class Login extends JFrame{Box v1=Box.createVerticalBox();JPanel jp=new JPanel();JButton b1;JMenuBar mb;JMenu m1,m2;JMenuItem item1,item2;JMenuItem item3,item4,item5,item6;JLabel l1=new JLabel("查找学生");JTextField t1=new JTextField();JTextArea ta1=new JTextArea();JTable table;JScrollPane jsp;Object[][] a;Object[] name={"序号","姓名","性别","生日","爱好","联系方式","性格特点"};DefaultTableModel model; ActionListener a1=new ActionListener() {public void actionPerformed(ActionEvent e) {Add w3=new Add("添加好友信息");}};ActionListener a2=new ActionListener() {public void actionPerformed(ActionEvent e) {Delete w4=new Delete("删除好友信息");}};ActionListener a3=new ActionListener() {public void actionPerformed(ActionEvent e) {Revise w5=new Revise("修改好友信息");}};ActionListener a4=new ActionListener() {public void actionPerformed(ActionEvent e) {JOptionPane.showConfirmDialog(new JFrame().getContentPane(), "是否保存?", "系统信息",JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);}};
- 显示所有数据
点击查询按钮,直接显示出所有的好友信息记录
ActionListener a5=new ActionListener() {public void actionPerformed(ActionEvent e) {int i=0;String url = "jdbc:Access:///D:/demoTable.accdb";try {Class.forName("com.hxtt.sql.access.AccessDriver");Connection conn =DriverManager.getConnection(url);Statement stat = conn.createStatement();stat =conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);ResultSet rs=stat.executeQuery("select * from demo2");rs.moveToInsertRow();rs.last();int lastNumber=rs.getRow();a=new Object[lastNumber][7];int k=0;rs.beforeFirst();if(t1.getText().length()==0) {while(rs.next()) {a[k][0]=rs.getString(1);……a[k][6]=rs.getString(7);k++;}table=new JTable(a,name);table.setEnabled(false); table.setRowHeight(28);add(new JScrollPane(table),BorderLayout.CENTER);validate();}String a_t1=t1.getText().toString();
- 姓名查找
用户选定查询的类别,输入查询的信息,点击查询按钮,将把用户的信息显示到查询框下的文本框中。(在此只展示姓名的查询方法)
while(rs.next()) {if(a_t1.equals(rs.getString("姓名"))&&a_t1.length()!=0){a[i][0]=rs.getString(1);……a[i][6]=rs.getString(7);i++;table=new JTable(a,name);table.setEnabled(false); table.setRowHeight(28);add(new JScrollPane(table),BorderLayout.CENTER);validate();}}try{rs.insertRow();}catch(Exception e6){};conn.close();}catch (ClassNotFoundException | SQLException e1) {e1.printStackTrace();}}};ActionListener a6=new ActionListener() {public void actionPerformed(ActionEvent e) {int i=0,j=0;String url = "jdbc:Access:///D:/demoTable.accdb";try {Class.forName("com.hxtt.sql.access.AccessDriver");Connection conn =DriverManager.getConnection(url);Statement stat = conn.createStatement();stat = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);ResultSet rs=stat.executeQuery("select * from demo2");rs.moveToInsertRow();String a_t1="男";String a_t2="女";rs.beforeFirst();while(rs.next()) {if(a_t1.equals(rs.getString("性别"))){i++;}if(a_t2.equals(rs.getString("性别"))){j++;}}rs.last();int lastNumber=rs.getRow();JOptionPane.showMessageDialog(null,"您一共存有"+lastNumber+"个好友的信息,其中男生有"+i+"个,女生有"+j+"个。");try{rs.insertRow();}catch(Exception e6){};conn.close();} catch (ClassNotFoundException | SQLException e1) {e1.printStackTrace();}}};Login(String s){setTitle(s);Date time1=new Date();SimpleDateFormat s1=new SimpleDateFormat("MM-dd");mb=new JMenuBar();m1=new JMenu("文件");m2=new JMenu("编辑");b1=new JButton("查找");item1=new JMenuItem("打开",new ImageIcon("open.gif"));……item6=new JMenuItem("统计");item1.setAccelerator(KeyStroke.getKeyStroke('0'));……item6.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W, InputEvent.CTRL_MASK));b1.registerKeyboardAction(a5, KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0),JComponent.WHEN_IN_FOCUSED_WINDOW);
if(s1.format(time1).equals(rs.getString(4))) {if(k==i) {JOptionPane.showMessageDialog(null, "您的好友"+rs.getString(2)+"今天过生日哟!╮(╯▽╰)╭"); }}}table=new JTable(a,name);table.setEnabled(false); table.setRowHeight(28);getContentPane().removeAll();add(control,BorderLayout.SOUTH);add(new JScrollPane(table),BorderLayout.CENTER);validate();try{rs.insertRow();}catch(Exception e6){};conn.close();}catch (ClassNotFoundException | SQLException e1) {e1.printStackTrace();}}}
- 添加好友信息
用户可以添加已存数据库之外的新的好友记录,点击添加记录菜单后,系统将跳出新窗口,用来填写新记录的信息,添加完成后点击完成按钮,窗口调回好友信息管理系统主页面。
class Add extends JFrame{JButton b1=new JButton("完成");JLabel l1=new JLabel("(*)姓名:"),……l6=new JLabel("性格特点:"),l7=new JLabel("注:*为必填项");JTextField t1=new JTextField(20),……t6=new JTextField(20);ActionListener a1=new ActionListener() {public void actionPerformed(ActionEvent e) {String url = "jdbc:Access:///D:/demoTable.accdb";try {Class.forName("com.hxtt.sql.access.AccessDriver");Connection conn =DriverManager.getConnection(url);Statement stat = conn.createStatement();stat =conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);ResultSet rs=stat.executeQuery("select * from demo2");rs.moveToInsertRow();String a_t1=t1.getText().toString();……String a_t6=t6.getText().toString();rs.updateString("姓名",a_t1);……rs.updateString("性格特点",a_t6);t1.setText("添加成功!");try{rs.insertRow();}catch(Exception e6){};conn.close();}catch (ClassNotFoundException | SQLException e1) {e1.printStackTrace();}};};
- 删除好友信息
首先用户通过查询功能找到要删除的记录,选定记录后,点击删除记录按钮删除该记录。
class Delete extends JFrame{int i=0,flag=0;JButton b1=new JButton("完成");JLabel l1=new JLabel("序号"),l2=new JLabel("姓名");JTextField t1=new JTextField(20),t2=new JTextField(20);ActionListener a1=new ActionListener() {public void actionPerformed(ActionEvent e) {String url = "jdbc:Access:///D:/demoTable.accdb";try {Class.forName("com.hxtt.sql.access.AccessDriver");Connection conn =DriverManager.getConnection(url);Statement stat = conn.createStatement();stat = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);ResultSet rs=stat.executeQuery("select * from demo2");rs.moveToInsertRow();String a_t1=t1.getText().toString();String a_t2=t2.getText().toString();while(rs.next()) {i++;if(a_t1.equals(rs.getString("序号"))&&a_t2.equals(rs.getString("姓"))) {String a_t4=" ";rs.absolute(i);rs.updateString(2,a_t4);……rs.updateString(7,a_t4);t1.setText("删除成功!");rs.updateRow();}else if(a_t1!=rs.getString("序号")) {if(a_t1.equals(rs.getString("序号"))) {flag=3;break;}else {flag=2;}}else if(a_t1.equals(rs.getString("序号"))&&a_t2.equals(rs.getString("姓名"))==false) {flag=3;}}if(flag==2) {t1.setText("序号错误!");}else if(flag==3) {t2.setText("姓名错误!");}try{rs.insertRow();}catch(Exception e6){};conn.close();}catch (ClassNotFoundException | SQLException e1) {e1.printStackTrace();}};};
- 修改好友信息
首先用户通过查询功能找到要修改的记录,选定记录后,点击修改记录按钮修改该记录。
class Revise extends JFrame{int i=0;JButton b1=new JButton("完成");JLabel l1=new JLabel("姓名:"),……l7=new JLabel("序号:");JTextField t1=new JTextField(20),……t7=new JTextField(20);ActionListener a1=new ActionListener() {public void actionPerformed(ActionEvent e) {String url = "jdbc:Access:///D:/demoTable.accdb";try {Class.forName("com.hxtt.sql.access.AccessDriver");Connection conn =DriverManager.getConnection(url);Statement stat = conn.createStatement();stat = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);ResultSet rs=stat.executeQuery("select * from demo2");rs.moveToInsertRow();String a_t1=t1.getText().toString();……String a=t7.getText().toString();while(rs.next()) {i++;if(a.equals(rs.getString(1))) {rs.absolute(i);rs.updateString(2,a_t1);……rs.updateString(7,a_t6);t7.setText("修改成功!");rs.updateRow();}}try{rs.insertRow();}catch(Exception e6){};conn.close();}catch (ClassNotFoundException | SQLException e1) {e1.printStackTrace();}};};
import java.io.UnsupportedEncodingException;import java.awt.*;import java.awt.event.*;import java.math.*;import javax.swing.*;import javax.swing.table.DefaultTableModel;import java.sql.*;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Timer;import java.util.TimerTask;public class Example {public static void main(String[] args) {// TODO Auto-generated method stubMyWindow win=new MyWindow("好友管理系统");}}class MyWindow extends JFrame{int flag=0;Box v1,v2,v3,v4,v5;JButton b1=new JButton("登录");JButton b2=new JButton("注册");JLabel l=new JLabel("欢迎来到好友管理系统");JLabel l1=new JLabel("账号:");JLabel l2=new JLabel("密码: ");JTextField t1=new JTextField(16);JPasswordField t2= new JPasswordField(16);ActionListener a1=new ActionListener() {public void actionPerformed(ActionEvent e) {//t1.setText("请输入账号");String url = "jdbc:Access:///D:/demoTable.accdb";try {Class.forName("com.hxtt.sql.access.AccessDriver");Connection conn = DriverManager.getConnection(url);Statement stat = conn.createStatement();stat = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);ResultSet rs=stat.executeQuery("select * from demo1");rs.moveToInsertRow();String a_t1=t1.getText().toString();String a_t2=new String (t2.getPassword());while(rs.next()) {if(a_t1.equals(rs.getString(2))&&a_t2.equals(rs.getString(3))){ //从rs中取出记录的password字段,和传入的参数pass做比较Login w2=new Login("好友信息管理系统");dispose();flag=1;w2.addWindowListener(new WindowAdapter() { //添加首界面的关闭事件:public void windowClosing(WindowEvent e) { //添加事件:JOptionPane.showConfirmDialog(new JFrame().getContentPane(), "是否保存?", "系统信息",JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); } });}else if(t1.getText().length()==0) {JOptionPane.showMessageDialog(null, "请输入账号", "Warning",JOptionPane.ERROR_MESSAGE);flag=2; break;}else if(t2.getPassword().length==0) {JOptionPane.showMessageDialog(null, "请输入密码", "Warning",JOptionPane.ERROR_MESSAGE); flag=3;break;}}if(flag==0) {JOptionPane.showMessageDialog(null, "您输入的账号或密码有误,请重新输入!", "Warning",JOptionPane.ERROR_MESSAGE);}try{rs.insertRow();}catch(Exception e6){};conn.close();} catch (ClassNotFoundException | SQLException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}};ActionListener a2=new ActionListener() {public void actionPerformed(ActionEvent e) {Register w1=new Register("注册系统");setEnabled(false);w1.addWindowListener(new WindowAdapter() { //添加首界面的关闭事件:public void windowClosing(WindowEvent e) { //添加事件:setEnabled(true);//将主界面再设置为可操作的} });}};MyWindow(String s){ImageIcon img1 = new ImageIcon("./src/p1.gif"); //相对路径获取图片 JLabel imgLabel = new JLabel(img1); //创建图片标签this.getLayeredPane().add(imgLabel, new Integer(Integer.MIN_VALUE));//为标签设置为容器最底层;getLayeredPane()作用是为容器添加深度,允许组件互相重叠;Integer.MIN_VALUE最底层imgLabel.setSize(img1.getIconWidth(), img1.getIconHeight());Container cp=getContentPane(); //获取顶级容器((JPanel)cp).setOpaque(false); //设置透明以使底层背景图片显示 cp.setLayout(null);t2.setEchoChar('*');setTitle(s);v5=Box.createHorizontalBox();v5.add(l);l.setFont(new Font("宋体",Font.PLAIN,30));//显示时间JPanel control=new JPanel(); //窗体底部面板control.setLayout(new BoxLayout(control,BoxLayout.X_AXIS)); //设置布局管理器final JLabel time=new JLabel("显示时间"); //显示时间标签Timer timer=new Timer();timer.schedule(new TimerTask() {public void run() {Date d=new Date();SimpleDateFormat s=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");time.setText(s.format(d));}}, 0, 1000);//time.setBorder(BorderFactory.createEtchedBorder()); //设置边框Component cop=(Component) Box.createHorizontalGlue(); //创建一个不可见的组件,该组件可沿水平方向扩展control.add(cop); //在面板中添加该不可见组件control.add(time); //在面板中添加时间标签 control.setOpaque(false);v2=Box.createHorizontalBox();v2.add(l1);v2.add(Box.createHorizontalStrut(3));v2.add(t1);v3=Box.createHorizontalBox();v3.add(l2);v3.add(Box.createHorizontalStrut(10));v3.add(t2);v4=Box.createHorizontalBox();v4.add(Box.createHorizontalGlue());v4.add(b1);v4.add(Box.createHorizontalStrut(10));v4.add(b2);v4.add(Box.createHorizontalGlue());v1=Box.createVerticalBox();v1.add(Box.createVerticalStrut(80));v1.add(l);v1.add(Box.createVerticalStrut(30));v1.add(v2);v1.add(Box.createVerticalStrut(10));v1.add(v3);v1.add(Box.createVerticalStrut(20));v1.add(v4);v1.add(Box.createVerticalStrut(70));v1.add(control,BorderLayout.SOUTH); //获取窗口的内容面板,将自定义面板添加进去setLayout(new FlowLayout());add(v1);validate();setSize(650,433);setVisible(true);setResizable(false);this.setLocationRelativeTo(null);b1.addActionListener(a1);b2.addActionListener(a2);setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);}}//注册窗口class Register extends JFrame{int flag=0;Box v1,v2,v3,v4,v5;JLabel l1=new JLabel("新账号:");JLabel l2=new JLabel("密码:");JLabel l3=new JLabel("确认:");JTextField t1=new JTextField(16);JPasswordField t2=new JPasswordField(16),t3=new JPasswordField(16);JButton b1=new JButton("完 成 注 册");ActionListener a1=new ActionListener() {public void actionPerformed(ActionEvent e) {// url表示需要连接的数据源的位置,此时使用的是JDBC-ODBC桥的连接方式,url是"jdbc:odbc:数据源名"String url = "jdbc:Access:///D:/demoTable.accdb";//数据库连接字符串try {Class.forName("com.hxtt.sql.access.AccessDriver");//加载驱动类,不同数据库软件驱动类不同Connection conn =DriverManager.getConnection(url);//声明连接对象,用类DriverManager调用它的静态方法getConnection创建这个连接Statement stat = conn.createStatement();//创建执行数据库操作对象stat = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);ResultSet rs=stat.executeQuery("select * from demo1");rs.moveToInsertRow();String a_t1=t1.getText().toString();String a_t2=new String (t2.getPassword());String a_t3=new String (t3.getPassword());while(rs.next()) {if(a_t1.equals(rs.getString(2))) {flag=1;}}if(flag==1) {JOptionPane.showMessageDialog(null, "账户已存在!", "Warning",JOptionPane.ERROR_MESSAGE);}rs.moveToInsertRow();//rs.next()改变了游标的位置,通过这个回到插入行if(t1.getText().length()==0||t2.getPassword().length==0||t3.getPassword().length==0){JOptionPane.showMessageDialog(null, "内容不可以为空", "Warning",JOptionPane.ERROR_MESSAGE); }else if(a_t2.equals(a_t3)&&flag==0){JOptionPane.showMessageDialog(null, "注册成功!╮(╯▽╰)╭", "Success",JOptionPane.PLAIN_MESSAGE);rs.updateString(2,a_t1);//向第二列字段填入数据rs.updateString(3,a_t2);//向第三列字段填入数据 }else if(Integer.parseInt(a_t2)!=Integer.parseInt(a_t3)&&flag==0){JOptionPane.showMessageDialog(null, "密码输入不一致,请重新输入", "Warning",JOptionPane.ERROR_MESSAGE);}try{rs.insertRow();}catch(Exception e6){};conn.close();} catch (ClassNotFoundException | SQLException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}};Register(String s){setTitle(s);v1=Box.createHorizontalBox();v1.add(l1);l1.setFont(new Font("黑体",Font.PLAIN,20));v1.add(Box.createHorizontalStrut(0));v1.add(t1);v2=Box.createHorizontalBox();v2.add(l2);l2.setFont(new Font("黑体",Font.PLAIN,20));v2.add(Box.createHorizontalStrut(20));v2.add(t2);v3=Box.createHorizontalBox();v3.add(l3);l3.setFont(new Font("黑体",Font.PLAIN,20));v3.add(Box.createHorizontalStrut(20));v3.add(t3);v4=Box.createHorizontalBox();v4.add(b1);v5=Box.createVerticalBox();v5.add(Box.createVerticalStrut(80));v5.add(v1);v5.add(Box.createVerticalStrut(10));v5.add(v2);v5.add(Box.createVerticalStrut(10));v5.add(v3);v5.add(Box.createVerticalStrut(10));v5.add(v4);setLayout(new FlowLayout());add(v5);validate();setSize(650,400);setVisible(true);setResizable(false);this.setLocationRelativeTo(null);b1.addActionListener(a1);setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);}}//登录主窗口class Login extends JFrame{Box v1=Box.createVerticalBox();JPanel jp=new JPanel();JButton b1;JMenuBar mb;JMenu m1,m2;JMenuItem item1,item2;JMenuItem item3,item4,item5,item6;JLabel l1=new JLabel(" 查找学生");JTextField t1=new JTextField();JTextArea ta1=new JTextArea();JTable table;JScrollPane jsp;Object[][] a;Object[] name={"序号","姓名","性别","生日","爱好","联系方式","性格特点"};DefaultTableModel model;//用DefaultTableModel类创建表格ActionListener a1=new ActionListener() {public void actionPerformed(ActionEvent e) {Add w3=new Add("添加好友信息"); }};ActionListener a2=new ActionListener() {public void actionPerformed(ActionEvent e) {Delete w4=new Delete("删除好友信息"); }};ActionListener a3=new ActionListener() {public void actionPerformed(ActionEvent e) {Revise w5=new Revise("修改好友信息"); }};ActionListener a4=new ActionListener() {public void actionPerformed(ActionEvent e) {JOptionPane.showConfirmDialog(new JFrame().getContentPane(), "是否保存?", "系统信息",JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); }};//显示所有数据ActionListener a5=new ActionListener() {public void actionPerformed(ActionEvent e) {//当输入框为0时,点击按钮主页面显示所有数据int i=0;String url = "jdbc:Access:///D:/demoTable.accdb";try {Class.forName("com.hxtt.sql.access.AccessDriver");Connection conn =DriverManager.getConnection(url);Statement stat = conn.createStatement();stat = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);ResultSet rs=stat.executeQuery("select * from demo2");rs.moveToInsertRow();rs.last();//指针移到最后一条后面int lastNumber=rs.getRow();a=new Object[lastNumber][7];int k=0;rs.beforeFirst();//指针移到第一条前面if(t1.getText().length()==0) {while(rs.next()) {a[k][0]=rs.getString(1);a[k][1]=rs.getString(2);a[k][2]=rs.getString(3);a[k][3]=rs.getString(4);a[k][4]=rs.getString(5);a[k][5]=rs.getString(6);a[k][6]=rs.getString(7);k++;}table=new JTable(a,name);table.setEnabled(false);//设置表格为不可编辑table.setRowHeight(28);// getContentPane().removeAll();add(new JScrollPane(table),BorderLayout.CENTER);validate();}String a_t1=t1.getText().toString();//通过姓名查找while(rs.next()) {if(a_t1.equals(rs.getString("姓名"))&&a_t1.length()!=0){a[i][0]=rs.getString(1);a[i][1]=rs.getString(2);a[i][2]=rs.getString(3);a[i][3]=rs.getString(4);a[i][4]=rs.getString(5);a[i][5]=rs.getString(6);a[i][6]=rs.getString(7);i++;table=new JTable(a,name);table.setEnabled(false);//设置表格为不可编辑table.setRowHeight(28);// getContentPane().removeAll();add(new JScrollPane(table),BorderLayout.CENTER);validate();}}//性别查找rs.beforeFirst();while(rs.next()) {if(a_t1.equals(rs.getString("性别"))&&a_t1.length()!=0){ a[i][0]=rs.getString(1);a[i][1]=rs.getString(2);a[i][2]=rs.getString(3);a[i][3]=rs.getString(4);a[i][4]=rs.getString(5);a[i][5]=rs.getString(6);a[i][6]=rs.getString(7);i++;table=new JTable(a,name);table.setEnabled(false);//设置表格为不可编辑table.setRowHeight(28);// getContentPane().removeAll();add(new JScrollPane(table),BorderLayout.CENTER);validate();}}//生日查询rs.beforeFirst();while(rs.next()) {if(a_t1.equals(rs.getString("生日"))&&a_t1.length()!=0){a[i][0]=rs.getString(1);a[i][1]=rs.getString(2);a[i][2]=rs.getString(3);a[i][3]=rs.getString(4);a[i][4]=rs.getString(5);a[i][5]=rs.getString(6);a[i][6]=rs.getString(7);i++;table=new JTable(a,name);table.setEnabled(false);//设置表格为不可编辑table.setRowHeight(28);// getContentPane().removeAll();add(new JScrollPane(table),BorderLayout.CENTER);validate();}}//爱好查询rs.beforeFirst();while(rs.next()) {if(a_t1.equals(rs.getString("爱好"))&&a_t1.length()!=0){a[i][0]=rs.getString(1);a[i][1]=rs.getString(2);a[i][2]=rs.getString(3);a[i][3]=rs.getString(4);a[i][4]=rs.getString(5);a[i][5]=rs.getString(6);a[i][6]=rs.getString(7);i++;table=new JTable(a,name);table.setEnabled(false);//设置表格为不可编辑table.setRowHeight(28);// getContentPane().removeAll();add(new JScrollPane(table),BorderLayout.CENTER);validate();}}//联系方式查询rs.beforeFirst();while(rs.next()) {if(a_t1.equals(rs.getString("联系方式"))&&a_t1.length()!=0){a[i][0]=rs.getString(1);a[i][1]=rs.getString(2);a[i][2]=rs.getString(3);a[i][3]=rs.getString(4);a[i][4]=rs.getString(5);a[i][5]=rs.getString(6);a[i][6]=rs.getString(7);i++;table=new JTable(a,name);table.setEnabled(false);//设置表格为不可编辑table.setRowHeight(28);// getContentPane().removeAll();add(new JScrollPane(table),BorderLayout.CENTER);validate();}}//性格特点rs.beforeFirst();while(rs.next()) {if(a_t1.equals(rs.getString("性格特点"))&&a_t1.length()!=0){a[i][0]=rs.getString(1);a[i][1]=rs.getString(2);a[i][2]=rs.getString(3);a[i][3]=rs.getString(4);a[i][4]=rs.getString(5);a[i][5]=rs.getString(6);a[i][6]=rs.getString(7);i++;table=new JTable(a,name);table.setEnabled(false);//设置表格为不可编辑table.setRowHeight(28);// getContentPane().removeAll();add(new JScrollPane(table),BorderLayout.CENTER);validate();}}try{rs.insertRow();}catch(Exception e6){};conn.close();} catch (ClassNotFoundException | SQLException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}};ActionListener a6=new ActionListener() {public void actionPerformed(ActionEvent e) {int i=0,j=0;String url = "jdbc:Access:///D:/demoTable.accdb";try {Class.forName("com.hxtt.sql.access.AccessDriver");Connection conn =DriverManager.getConnection(url);Statement stat = conn.createStatement();stat = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);ResultSet rs=stat.executeQuery("select * from demo2");rs.moveToInsertRow();String a_t1="男";String a_t2="女";rs.beforeFirst();while(rs.next()) {if(a_t1.equals(rs.getString("性别"))){i++;}if(a_t2.equals(rs.getString("性别"))){j++;}}rs.last();//指针移到最后一条后面int lastNumber=rs.getRow();JOptionPane.showMessageDialog(null,"您一共存有"+lastNumber+"个好友的信息,其中男生有"+i+"个,女生有"+j+"个。"); try{rs.insertRow();}catch(Exception e6){};conn.close();} catch (ClassNotFoundException | SQLException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}};Login(String s){setTitle(s);Date time1=new Date();SimpleDateFormat s1=new SimpleDateFormat("MM-dd");mb=new JMenuBar();m1=new JMenu("文件");m2=new JMenu("编辑");b1=new JButton("查找");item1=new JMenuItem("打开",new ImageIcon("open.gif"));item2=new JMenuItem("保存",new ImageIcon("save.gif"));item3=new JMenuItem("添加");item4=new JMenuItem("删除");item5=new JMenuItem("修改");item6=new JMenuItem("统计");item1.setAccelerator(KeyStroke.getKeyStroke('0'));item2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK));item3.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D, InputEvent.CTRL_MASK));item4.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, InputEvent.CTRL_MASK));item5.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z, InputEvent.CTRL_MASK));item6.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W, InputEvent.CTRL_MASK));b1.registerKeyboardAction(a5, KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0),JComponent.WHEN_IN_FOCUSED_WINDOW);//显示时间JPanel control=new JPanel(); //窗体底部面板control.setLayout(new BoxLayout(control,BoxLayout.X_AXIS)); //设置布局管理器final JLabel time=new JLabel("显示时间"); //显示时间标签Timer timer=new Timer();timer.schedule(new TimerTask() {public void run() {Date d=new Date();SimpleDateFormat s=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");time.setText(s.format(d));}}, 0, 1000);//time.setBorder(BorderFactory.createEtchedBorder()); //设置边框Component cop=(Component) Box.createHorizontalGlue(); //创建一个不可见的组件,该组件可沿水平方向扩展control.add(cop); //在面板中添加该不可见组件control.add(time); //在面板中添加时间标签m1.add(item1);m1.addSeparator();m1.add(item2);m2.add(item3);m2.addSeparator();m2.add(item4);m2.addSeparator();m2.add(item5);m2.addSeparator();m2.add(item6);mb.add(m1);mb.add(m2);mb.add(l1);mb.add(t1);mb.add(b1);jsp=new JScrollPane(table);jsp.setPreferredSize(new Dimension(980,500));//设置jsp的长和宽setJMenuBar(mb);v1.add(jsp);v1.add(ta1);jp.add(v1);jp.add(control,BorderLayout.SOUTH); //获取窗口的内容面板,将自定义面板添加进去jp.setLayout(new FlowLayout());add(jp);b1.addActionListener(a5);item3.addActionListener(a1);item4.addActionListener(a2);item5.addActionListener(a3);item6.addActionListener(a6);item2.addActionListener(a4);setSize(1000,600);setVisible(true);setResizable(false);this.setLocationRelativeTo(null);validate();setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);String url = "jdbc:Access:///D:/demoTable.accdb";try {Class.forName("com.hxtt.sql.access.AccessDriver");Connection conn =DriverManager.getConnection(url);Statement stat = conn.createStatement();stat = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);ResultSet rs=stat.executeQuery("select * from demo2");rs.moveToInsertRow();rs.last();//指针移到最后一条后面int lastNumber=rs.getRow();a=new Object[lastNumber][7];int k=0,i=0;rs.beforeFirst();//指针移到第一条前面while(rs.next()) {a[k][0]=rs.getString(1);a[k][1]=rs.getString(2);a[k][2]=rs.getString(3);a[k][3]=rs.getString(4);a[k][4]=rs.getString(5);a[k][5]=rs.getString(6);a[k][6]=rs.getString(7);k++;i++;//好友生日提醒(伪)if(s1.format(time1).equals(rs.getString(4))) {if(k==i) {JOptionPane.showMessageDialog(null, "您的好友"+rs.getString(2)+"今天过生日哟!╮(╯▽╰)╭"); }}}table=new JTable(a,name);table.setEnabled(false);//设置表格为不可编辑table.setRowHeight(28);getContentPane().removeAll();add(control,BorderLayout.SOUTH);add(new JScrollPane(table),BorderLayout.CENTER);validate();try{rs.insertRow();}catch(Exception e6){};conn.close();} catch (ClassNotFoundException | SQLException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}}//添加好友信息class Add extends JFrame{Box v1,v2,v3,v4,v5,v6,v7;JButton b1=new JButton("完成");JLabel l1=new JLabel("(*)姓名:"),l2=new JLabel("(*)性别:"),l3=new JLabel("(*)生日:"),l4=new JLabel(" 爱好:"),l5=new JLabel("联系方式:"),l6=new JLabel("性格特点:"),l7=new JLabel("注:*为必填项");JTextField t1=new JTextField(20),t2=new JTextField(20),t3=new JTextField(20),t4=new JTextField(20),t5=new JTextField(20),t6=new JTextField(20);ActionListener a1=new ActionListener() {public void actionPerformed(ActionEvent e) {String url = "jdbc:Access:///D:/demoTable.accdb";try {Class.forName("com.hxtt.sql.access.AccessDriver");Connection conn =DriverManager.getConnection(url);Statement stat = conn.createStatement();stat = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);ResultSet rs=stat.executeQuery("select * from demo2");rs.moveToInsertRow();String a_t1=t1.getText().toString();String a_t2=t2.getText().toString();String a_t3=t3.getText().toString();String a_t4=t4.getText().toString();String a_t5=t5.getText().toString();String a_t6=t6.getText().toString();rs.updateString("姓名",a_t1);rs.updateString("性别",a_t2);rs.updateString("生日",a_t3);rs.updateString("爱好",a_t4);rs.updateString("联系方式",a_t5);rs.updateString("性格特点",a_t6);t1.setText("添加成功!");try{rs.insertRow();}catch(Exception e6){};conn.close();} catch (ClassNotFoundException | SQLException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}};};Add(String s){setTitle(s);v1=Box.createHorizontalBox();v1.add(l1);l1.setFont(new Font("黑体",Font.PLAIN,20));v1.add(Box.createHorizontalStrut(10));v1.add(t1);v2=Box.createHorizontalBox();v2.add(l2);l2.setFont(new Font("黑体",Font.PLAIN,20));v2.add(Box.createHorizontalStrut(10));v2.add(t2);v3=Box.createHorizontalBox();v3.add(l3);l3.setFont(new Font("黑体",Font.PLAIN,20));v3.add(Box.createHorizontalStrut(10));v3.add(t3);v4=Box.createHorizontalBox();v4.add(l4);l4.setFont(new Font("黑体",Font.PLAIN,20));v4.add(Box.createHorizontalStrut(10));v4.add(t4);v5=Box.createHorizontalBox();v5.add(l5);l5.setFont(new Font("黑体",Font.PLAIN,20));v5.add(Box.createHorizontalStrut(0));v5.add(t5);v6=Box.createHorizontalBox();v6.add(l6);l6.setFont(new Font("黑体",Font.PLAIN,20));v1.add(Box.createHorizontalStrut(10));v6.add(t6);v7=Box.createVerticalBox();v7.add(Box.createVerticalStrut(30));v7.add(v1);v7.add(Box.createVerticalStrut(10));v7.add(v2);v7.add(Box.createVerticalStrut(10));v7.add(v3);v7.add(Box.createVerticalStrut(10));v7.add(v4);v7.add(Box.createVerticalStrut(10));v7.add(v5);v7.add(Box.createVerticalStrut(10));v7.add(v6);v7.add(Box.createVerticalStrut(25));v7.add(l7);l7.setFont(new Font("黑体",Font.PLAIN,20));l7.setForeground(Color.red);v7.add(Box.createVerticalStrut(15));v7.add(b1);setLayout(new FlowLayout());add(v7);setSize(400,400);setVisible(true);setResizable(false);b1.addActionListener(a1);this.setLocationRelativeTo(null);}}//删除好友信息class Delete extends JFrame{int i=0,flag=0;Box v1,v2,v3;JButton b1=new JButton("完成");JLabel l1=new JLabel("序号"),l2=new JLabel("姓名");JTextField t1=new JTextField(20),t2=new JTextField(20);ActionListener a1=new ActionListener() {public void actionPerformed(ActionEvent e) {String url = "jdbc:Access:///D:/demoTable.accdb";try {Class.forName("com.hxtt.sql.access.AccessDriver");Connection conn =DriverManager.getConnection(url);Statement stat = conn.createStatement();stat = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);ResultSet rs=stat.executeQuery("select * from demo2");rs.moveToInsertRow();String a_t1=t1.getText().toString();String a_t2=t2.getText().toString();while(rs.next()) {i++;if(a_t1.equals(rs.getString("序号"))&&a_t2.equals(rs.getString("姓名"))) {String a_t4=" ";rs.absolute(i);rs.updateString(2,a_t4);rs.updateString(3,a_t4);rs.updateString(4,a_t4);rs.updateString(5,a_t4);rs.updateString(6,a_t4);rs.updateString(7,a_t4);t1.setText("删除成功!");rs.updateRow();}else if(a_t1!=rs.getString("序号")) {if(a_t1.equals(rs.getString("序号"))) {flag=3;break;}else {flag=2;}}else if(a_t1.equals(rs.getString("序号"))&&a_t2.equals(rs.getString("姓名"))==false) {flag=3;}}if(flag==2) {t1.setText("序号错误!");}else if(flag==3) {t2.setText("姓名错误!");}try{rs.insertRow();}catch(Exception e6){};conn.close();} catch (ClassNotFoundException | SQLException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}};};Delete(String s){setTitle(s);v1=Box.createHorizontalBox();v1.add(l1);v1.add(Box.createHorizontalStrut(10));v1.add(t1);v2=Box.createHorizontalBox();v2.add(l2);v2.add(Box.createHorizontalStrut(10));v2.add(t2);v3=Box.createVerticalBox();v3.add(Box.createVerticalStrut(50));v3.add(v1);v3.add(Box.createVerticalStrut(10));v3.add(v2);v3.add(Box.createVerticalStrut(10));v3.add(b1);setLayout(new FlowLayout());add(v3);setSize(400,250);setVisible(true);setResizable(false);b1.addActionListener(a1);this.setLocationRelativeTo(null);}}//修改好友信息class Revise extends JFrame{int i=0;Box v1,v2,v3,v4,v5,v6,v7,v8;JButton b1=new JButton("完成");JLabel l1=new JLabel(" 姓名:"),l2=new JLabel(" 性别:"),l3=new JLabel(" 生日:"),l4=new JLabel(" 爱好:"),l5=new JLabel("联系方式:"),l6=new JLabel("性格特点:"),l7=new JLabel(" 序号:");JTextField t1=new JTextField(20),t2=new JTextField(20),t3=new JTextField(20),t4=new JTextField(20),t5=new JTextField(20),t6=new JTextField(20),t7=new JTextField(20);ActionListener a1=new ActionListener() {public void actionPerformed(ActionEvent e) {String url = "jdbc:Access:///D:/demoTable.accdb";try {Class.forName("com.hxtt.sql.access.AccessDriver");Connection conn =DriverManager.getConnection(url);Statement stat = conn.createStatement();stat = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);ResultSet rs=stat.executeQuery("select * from demo2");rs.moveToInsertRow();String a_t1=t1.getText().toString();String a_t2=t2.getText().toString();String a_t3=t3.getText().toString();String a_t4=t4.getText().toString();String a_t5=t5.getText().toString();String a_t6=t6.getText().toString();String a=t7.getText().toString();while(rs.next()) {i++;if(a.equals(rs.getString(1))) {rs.absolute(i);rs.updateString(2,a_t1);rs.updateString(3,a_t2);rs.updateString(4,a_t3);rs.updateString(5,a_t4);rs.updateString(6,a_t5);rs.updateString(7,a_t6);t7.setText("修改成功!");rs.updateRow();}}try{rs.insertRow();}catch(Exception e6){};conn.close();} catch (ClassNotFoundException | SQLException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}};};Revise(String s){setTitle(s);v8=Box.createHorizontalBox();v8.add(l7);l7.setFont(new Font("黑体",Font.PLAIN,20));v8.add(Box.createHorizontalStrut(10));v8.add(t7);v1=Box.createHorizontalBox();v1.add(l1);l1.setFont(new Font("黑体",Font.PLAIN,20));v1.add(Box.createHorizontalStrut(10));v1.add(t1);v2=Box.createHorizontalBox();v2.add(l2);l2.setFont(new Font("黑体",Font.PLAIN,20));v2.add(Box.createHorizontalStrut(10));v2.add(t2);v3=Box.createHorizontalBox();v3.add(l3);l3.setFont(new Font("黑体",Font.PLAIN,20));v3.add(Box.createHorizontalStrut(10));v3.add(t3);v4=Box.createHorizontalBox();v4.add(l4);l4.setFont(new Font("黑体",Font.PLAIN,20));v4.add(Box.createHorizontalStrut(10));v4.add(t4);v5=Box.createHorizontalBox();v5.add(l5);l5.setFont(new Font("黑体",Font.PLAIN,20));v5.add(Box.createHorizontalStrut(0));v5.add(t5);v6=Box.createHorizontalBox();v6.add(l6);l6.setFont(new Font("黑体",Font.PLAIN,20));v1.add(Box.createHorizontalStrut(10));v6.add(t6);v7=Box.createVerticalBox();v7.add(Box.createVerticalStrut(20));v7.add(v8);v7.add(Box.createVerticalStrut(10));v7.add(v1);v7.add(Box.createVerticalStrut(10));v7.add(v2);v7.add(Box.createVerticalStrut(10));v7.add(v3);v7.add(Box.createVerticalStrut(10));v7.add(v4);v7.add(Box.createVerticalStrut(10));v7.add(v5);v7.add(Box.createVerticalStrut(10));v7.add(v6);v7.add(Box.createVerticalStrut(30));v7.add(b1);setLayout(new FlowLayout());add(v7);setSize(400,400);setVisible(true);setResizable(false);b1.addActionListener(a1);this.setLocationRelativeTo(null);}}
…
- 开发环境与开发工具
- 开发环境
操作系统:Windows 10
运行环境:JDK 1.8
选择依据:JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。
- 开发工具 Eclipse Access
选择依据:
Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。Eclipse小巧,占用资源也少,速度快,功能强大。
Access支持ODBC(开发数据库互连,Open Data Base Connectivity),利用Access强大的DDE(动态数据交换)和OLE(对象的联接和嵌入)特性,可以在一个数据表中嵌入位图、声音、Excel表格、Word文档,还可以建立动态的数据库报表和窗体等。