[JAVA]通讯录管理系统代码

import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import javax.swing.*;
import javax.swing.table.*;
import java.util.Vector;

class GUI implements ActionListener, ItemListener{

	JFrame jf;
	JButton binsert, bdelete, bsearch;
	JTextField tfname, tfnum;
	JLabel lname, lsex, lnum;
	JRadioButton rbman, rbwoman;
	ButtonGroup bgsex;
	JTable table;
	DefaultTableModel defaultTableModel;
	JScrollPane sp;
	Vector vdata, vcolumn;
	Connection conn;
	Statement stmt;
	ResultSet rs;
	
	
	public GUI() throws Exception {
		
		SqlConnection();
		
		jf = new JFrame("通讯录管理");
		binsert = new JButton("添加");
		bdelete = new JButton("删除");
		bsearch = new JButton("搜索");
		tfname = new JTextField(15);
		tfnum = new JTextField(15);
		lname = new JLabel("姓名");
		lsex = new JLabel("性别");
		lnum = new JLabel("电话号码");
		rbman = new JRadioButton("男");
		rbwoman = new JRadioButton("女");
		bgsex = new ButtonGroup();
		bgsex.add(rbman);
		bgsex.add(rbwoman);
		vdata = new Vector();
		vcolumn = new Vector();
		
		JPanel jp1 = new JPanel();
		JPanel jp2 = new JPanel();
		
		jf.setSize(600, 350);
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jf.setResizable(false);
		jf.setLayout(new BorderLayout());
		
		jp1.add(lname);
		jp1.add(tfname);
		jp1.add(lsex);
		jp1.add(rbman);
		jp1.add(rbwoman);
		jp1.add(lnum);
		jp1.add(tfnum);
		
		jf.add(jp1, BorderLayout.NORTH);
		
		jp2.add(binsert);
		jp2.add(bdelete);
		jp2.add(bsearch);
		
		jf.add(jp2, BorderLayout.SOUTH);
		
		vcolumn.add("姓名");
		vcolumn.add("性别");
		vcolumn.add("电话号码");
		
		selectData("select * from exam");
		defaultTableModel = new DefaultTableModel(vdata, vcolumn);
		table = new JTable(defaultTableModel);
		sp = new JScrollPane(table);
		jf.add(sp);
		
		binsert.addActionListener(this);
		bdelete.addActionListener(this);
		bsearch.addActionListener(this);
		
		jf.setVisible(true);
		
	}
	
	
	public void selectData(String sql) throws SQLException {
		rs = stmt.executeQuery(sql);
		while (rs.next()) {
			Vector vrow = new Vector();
			vrow.add(rs.getString(1));
			vrow.add(rs.getString(2));
			vrow.add(rs.getInt(3));
			vdata.add(vrow);
		}
	}
	
	
	public void SqlConnection() throws Exception {

		Class.forName("com.mysql.cj.jdbc.Driver");
		String url = "jdbc:mysql://localhost:3306/exam?serverTimezone=UTC";
		String name = "root";
		String password = "123456";
		conn = DriverManager.getConnection(url, name, password);
		stmt = conn.createStatement();
		
	}
	
	
	public void actionPerformed(ActionEvent e) {
		
		
		if (e.getSource() == binsert) {
			
			// 插入
			String gender = null;
			if (rbman.isSelected()) {
				gender = rbman.getText();
			} else {
				gender = rbwoman.getText();
			}
			try {
				PreparedStatement pstmt = conn.prepareStatement("insert into exam values(?,?,?)");
				pstmt.setString(1, tfname.getText());
				pstmt.setString(2, gender);
				pstmt.setInt(3, Integer.parseInt(tfnum.getText()));
				pstmt.executeUpdate();
			} catch (SQLException e1) {
				e1.printStackTrace();
			}
			
			Vector vector = new Vector();
			vector.add(tfname.getText());
			vector.add(gender);
			vector.add(tfnum.getText());
			
			defaultTableModel.addRow(vector);
			table.setModel(defaultTableModel);
			
			tfname.setText("");
			tfnum.setText("");
			rbman.setSelected(false);
			rbwoman.setSelected(false);
			
		} else if(e.getSource() == bdelete) {
			
			//删除
			int i = table.getSelectedRow();
			try {
				PreparedStatement pstmt = conn.prepareStatement("delete from exam where name=?");
				pstmt.setString(1, table.getValueAt(i, 0) + "");
				pstmt.executeUpdate();
			}catch (SQLException e1) {
				e1.printStackTrace();
			}
			defaultTableModel.removeRow(i);
			
		} else if(e.getSource() == bsearch) {
			
			//根据姓名查询
			vdata.removeAllElements();
			try {
				if(tfname.getText().equals("")) {
					selectData("select * from exam");
				} else {
					PreparedStatement pstmt = conn.prepareStatement("select * from exam where name=?");
					pstmt.setString(1, tfname.getText());
					rs = pstmt.executeQuery();
					while (rs.next()) {
						Vector vrow = new Vector();
						vrow.add(rs.getString(1));
						vrow.add(rs.getString(2));
						vrow.add(rs.getInt(3));
						vdata.add(vrow);
					}
				}
				
			} catch(SQLException e1) {
				e1.printStackTrace();
			}
			
			defaultTableModel = new DefaultTableModel(vdata, vcolumn);
			table.setModel(defaultTableModel);
			
			tfname.setText("");
			tfnum.setText("");
			rbman.setSelected(false);
			rbwoman.setSelected(false);
			
		}
		
	}
	
	
	public void itemStateChanged(ItemEvent e) {}
	
	
}

public class Main{
	public static void main(String[] args){
		GUI gui = new GUI();
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现了以下要求说明的功能: 1.要求使用GUI,采用 Swing 技术数据存储采用文件系统(可以是文本 文件、xml 文件、vCard 文件或其他自定义格式文件,但不能是 Excel 文件)。不 使用数据库。 2. 通讯录中每个项目包括: ( 1)基本信息:姓名、手机号码、电子邮箱、生日、所属组、备注、像片。 ( 2)工作单位:国家、省份、城市、地址、工作单位、所属部门、职位、 邮编、电话、传真 ( 3)网络信息:个人主页、即时通信工具及号码、备用邮箱 ( 4)家庭资料:国家、省份、城市、地址、邮编、电话 3 .通讯录数据的录入功能:输入并存储新的通讯录数据,输入时如果有同 名或同电话号码时,应该给出提示。 4 .通讯录数据的查询功能: ( 1)默认列出所有条目。 ( 2)模糊查询,可以按:姓名、电话号码、手机、姓名的汉语拼音的声母 或全拼查询。支持模糊查询即输入部分数据后,可以查询出符合条件的全部条目。 如:输入“张”,列出所有名字中有“张”的条目;输入“ 2645”列出电话中有 该 4个数字的所有条目;输入“xl ”,列出声母为该 2 个字母的所有条目 ( 3)指定分组后,列出某分组的所有条目 说明:查询结果如果有多个条目,应按照姓名排序,并使用姓或姓的第一 个汉语拼音的字母分类。 5 .删除和修改功能:查询到一个条目后,可以删除该条目或修改条目内容。 6 .通信录内容的导入和导出功能。要求能够以CSV 格式和 vCard 格式导入 和导出通讯录的全部内容。并能够与主流手机或其他通讯录软件交换数据。 7 .通讯录显示设置,可以设置在显示查询结果时,一个条目可以显示或不 显示哪些内容。 注意:本系统实现了读取和保存csv文件,同时csv文件中只保存了图片的路径。
源码实现了如下功能: 1.2 系统功能分析 1.2.1 基本功能 支持以下信息的录入: (1)基本信息:姓名、手机号码、电话、电子邮箱、生日、所属组、备注、相片 (2)工作单位:国家、省份、城市、地址、工作单位、所属部门、职位、邮编、电话、传真 (3)网络信息:个人主页、即时通信工具及号码、备用邮箱 (4)家庭资料:国家、省份、城市、地址、邮编、电话 1.2.2 查询功能 (1)默认显示所有条目 (2)模糊查询:可以按姓名、姓名的汉语拼音的声母或全拼查询。支持模糊查询,即输入部分数据后,可以查询出符合条件的全部条目。如:输入“张”,列出所有名字中有“张”的条目;输入“xl”,列出声母为该2个字母的所有条目。 (写该实验报告时,暂未实现按手机号码、电话号码查询。) (3)指定分组后,列出某分组的所有条目。查询结果如果有多个条目,应按照姓名排序,并使用姓或姓的第一个汉语拼音的字母分类。 1.2.3 删除和修改功能 (1)选中单个联系人后,可以修改其内容,可以删除该联系人 (2)选中一个分组后,可以删除该分组,同时删除分组下的全部联系人 (3)支持情况账户下的所有联系人数据 1.2.4 导入和导出 支持将账户下的所有文本文档联系人数据导出为CSV格式文件,支持将CSV文件导入到账户,并能够与主流手机或其他通讯录软件交换数据。 1.2.5 通讯录的显示 显示查询结果,可以设置一个条目可以显示或不显示哪些内容。 1.2.6 通讯录数据的录入 对于新建联系人,保存时如果有同名或同电话号码时,给出提示。 1.2.7 联系人星标 支持一键收藏联系人,联系人加星标后更加方便于用户查找与管理。 【系统设计文档】、【系统需求分析文档】、【系统实验报告】、【答辩展示PPT】另见我的资源……
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值