好友信息管理系统

发布时间:2025-12-09 17:10:25 浏览次数:4

  • 设计要点:设计并编程实现一个好友信息管理的小系统。系统应包含每位好友的全部信息,包括姓名、性别、生日、爱好、联系方式、性格特点等。系统实现对好友信息进行增、删、改、查、生日提醒、统计计算等功能。
  • 题目要求
  • 需求分析
        本阶段是整个软件开发过程中最重要的环节。通过了解实际运行的系统或与用户交谈,明确系统要完成的任务是什么。
        本次课程设计主要:开发一个简易的好友信息管理系统,首要任务是完成增、删、改、查的基本操作,如有余力的情况下可以考虑生日提醒,统计分析之类的加分项!
    该程序主要功能需求如下:
    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文档,还可以建立动态的数据库报表和窗体等。

需要做网站?需要网络推广?欢迎咨询客户经理 13272073477