需求分析
通訊錄信息管理系統的功能總結起來,共需要以下幾個方面:
1、通訊錄中聯繫人的增加、保存功能
2、聯繫人的信息檢索功能,包括對聯繫人的信息排序(如:按年齡排序),精確查找,條件查詢等快捷功能
3、聯繫人信息修改與刪除功能,通過本系統可快速修改聯繫人信息,批量刪除和全部刪除。
結構設計
根據對系統的需求分析,本系統將分爲 3 個模塊:
- 輸入信息管理: 管理聯繫人的基本信息錄入。
- 查詢信息管理:查詢聯繫人的基本信息,包括聯繫人的信息排序查詢(如:按年齡排序),精確查找,條件查詢等(如:性別、年齡、姓名等)。
- 修改信息管理: 修改聯繫人的基本信息,包括姓名,年齡、聯繫方式等。
功能結構圖
功能流程以及工作流描述
1、錄入聯繫人信息
系統操作人員打開輸入信息加界面,輸入相關的信息(姓名、年齡、性別、電話、地址、其他等),在數據庫中添加相關數據。
2、查詢聯繫人信息
條件查詢:根據姓名,性別,年齡等條件查詢出聯繫人的相關信息。年齡排序查詢:根據年齡排序查詢聯繫人的相關信息。姓名排序查詢:根據姓名排序查詢聯繫人的相關信息。查詢全部:查詢所有聯繫人的相關信息。
3、刪除聯繫人信息
根據姓名刪除該聯繫人的相關信息、刪除全部聯繫人的相關信息,確定刪除後,在數據庫中刪除該信息。
4、修改聯繫人信息
根據姓名對聯繫人的相關信息進行修改,包括姓名、年齡、性別、電話、地址、其他等
數據庫設計
此係統使用的是MySQL數據庫,由於此係統需要的數據量不是很大, 所以選擇比較簡便的MySQL數據庫。此係統的數據庫名稱是 day2,創建語句如下:
Create database day2;
數據表的設計
數據庫中只有1個表,即是聯繫人表(ziliao),設計要求如下表所示。
數據表 Student 的數據庫操作語句是:
create table ziliao( sname varchar(20) , sage int, sex varchar(30), telephone varchar(20), address varchar(50), other varchar(50) );
程序
源碼下載鏈接:
https://download.csdn.net/download/m0_37738838/10575962
package menu;
import javax.swing.*;
import java.io.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
public class Menu extends JFrame{
TextField text1=new TextField(50);
TextField text2=new TextField(50);
TextField text3=new TextField(50);
TextField text4=new TextField(50);
TextField text5=new TextField(50);
TextField text6=new TextField(50);
TextField t1=new TextField(50);
TextField t2=new TextField(50);
TextField t3=new TextField(50);
TextField t4=new TextField(50);
TextField t5=new TextField(50);
TextField t6=new TextField(50);
TextField ta1=new TextField(5);
TextField ta2=new TextField(5);
TextField ta3=new TextField(5);
TextArea txt1 =new TextArea(50,50);
JButton b1=new JButton("清除");
JButton b2=new JButton("保存");
JButton b3=new JButton("修改");
JButton b4=new JButton("刪除");
JButton b5=new JButton("查詢");
Label l1=new Label(" 輸入姓名 :");
Label l2=new Label(" 輸入年齡 :");
Label l3=new Label(" 輸入性別 :");
Label l4=new Label(" 輸入電話 :");
Label l5=new Label(" 輸入地址 :");
Label l6=new Label(" 輸入其他 :");
Label a1=new Label(" 輸入姓名 :");
Label a2=new Label(" 輸入年齡 :");
Label a3=new Label(" 輸入性別 :");
Label a4=new Label(" 輸入電話 :");
Label a5=new Label(" 輸入地址 :");
Label a6=new Label(" 輸入其他 :");
Label a7=new Label("(輸入姓名即可刪除)");
Label la1=new Label("姓名:");
Label la2=new Label("年齡:");
Label la3=new Label("性別:");
Label la4=new Label(" ");
Label la8=new Label(" ");
Label la9=new Label(" ");
Label la11=new Label(" ");
Label la12=new Label(" ");
Label la5=new Label("");
Label la6=new Label("");
Label la7=new Label("");
JMenuBar bar;
JMenu file,sear,dele,order;
JMenuItem name,sex,age,show,clear,sall,dall,oage,oname;
JPanel ff=new JPanel();
JPanel f1=new JPanel();
JPanel f2=new JPanel();
JPanel f3=new JPanel();
JPanel f4=new JPanel();
JPanel f5=new JPanel();
JTabbedPane Tpan=new JTabbedPane();//定義分頁面板對象
public Menu() //構造方法實現圖形化界面
{
super("通訊錄");//用jframe設置title
ff=(JPanel)this.getContentPane();//ff對象獲取框架
text1.setBounds(50, 50, 130, 20);
text2.setBounds(50, 70, 130, 20);
f1.setVisible(true);
f1.setBounds(0, 0, 300, 200);
f1.setLayout(new FlowLayout());//設置頁面的佈局
f1.add(l1);
f1.add(text1);
f1.add(l2);
f1.add(text2);
f1.add(l3);
f1.add(text3);
f1.add(l4);
f1.add(text4);
f1.add(l5);
f1.add(text5);
f1.add(l6);
f1.add(text6);
f1.add(b1);
f1.add(b2);
f2.setLayout(new BorderLayout(10,50)); //設計f2的佈局
bar=new JMenuBar();
sear=new JMenu("查找");
file=new JMenu("文件");
order=new JMenu("排序");
dele=new JMenu("刪除");
name =new JMenuItem("姓名");
sex =new JMenuItem("性別");
age =new JMenuItem("年齡");
show =new JMenuItem("顯示");
clear=new JMenuItem("清空");
sall =new JMenuItem("查找全部");
dall =new JMenuItem("刪除全部");
oage =new JMenuItem("年齡排序");
oname=new JMenuItem("姓名排序");
bar.add(file);
bar.add(order);
bar.add(sear);
bar.add(dele);
sear.add(sall);
order.add(oage);
order.add(oname);
dele.add(dall);
file.add(show);
file.add(clear);
setJMenuBar(bar);//現實或隱藏此組件
setVisible(true);
//設置文本框
f2.add(txt1,BorderLayout.CENTER);
f2.add(bar ,BorderLayout.NORTH);
f2.add(f4 ,BorderLayout.WEST);
f2.add(la5 ,BorderLayout.EAST);
f2.add(la6 ,BorderLayout.SOUTH);
//****************************************************************************
b1.addActionListener(new clean());
b2.addActionListener(new sav());
b3.addActionListener(new alter());
b4.addActionListener(new delec());
b5.addActionListener(new search()); //添加相應的監聽者
show.addActionListener(new shower());
sall.addActionListener(new shower());
dall.addActionListener(new dall());
clear.addActionListener(new clean());
oname.addActionListener(new order());
oage.addActionListener(new order());
//*************************************************************************************
ff.add(Tpan);//把兩個容器放到分頁面板tpan中然後放入同一個容器ff中
Tpan.add(f1,0);
Tpan.add(f2,1);
Tpan.add(f3,2);
Tpan.setTitleAt(0, "輸入信息");
Tpan.setTitleAt(1, "查看信息");
Tpan.setTitleAt(2, "修改信息");
Tpan.setSelectedIndex(0); //設置初始頁
//設置第三個面板***********************************************************************************
f1.setLayout(new FlowLayout());
f3.add(a1); f3.add(t1);
f3.add(a2); f3.add(t2);
f3.add(a3); f3.add(t3);
f3.add(a4); f3.add(t4);
f3.add(a5); f3.add(t5);
f3.add(a6); f3.add(t6);
f3.add(b3); f3.add(b4);
f3.add(a7);
//****************設置第二個中的West面板************************************************
f4.setLayout(new GridLayout(4,5));
f4.add(la1);f4.add(ta1);
f4.add(la2);f4.add(ta2);
f4.add(la3);f4.add(ta3);
f4.add(la4);f4.add(b5);
f4.add(la7);
f4.add(la8);f4.add(la9);
f4.add(la11);f4.add(la12);
txt1.setSize(50, 50);
/////////***************************************************************************
setSize(500,400);
show();
}
class clean implements ActionListener{ //實現“清除”功能
public void actionPerformed(ActionEvent e){
Object source=e.getSource();
if(source==b1)
text1.setText("");
text2.setText("");
text3.setText("");
text4.setText("");
text5.setText("");
text6.setText("");
txt1 .setText("");
}
}
class dall implements ActionListener{ //類dall實現刪除全部數據
public void actionPerformed(ActionEvent e)
{
String driver="com.mysql.jdbc.Driver";
//jdbc協議:數據庫子協議:主機:端口/連接的數據庫
String url="jdbc:mysql://localhost:3306/day2";
String use="root";
String password="root";
try{ //加載驅動程序
// 通過得到字節碼對象的方式加載靜態代碼塊,從而註冊驅動程序
Class.forName(driver); //建立連接
Connection con=DriverManager.getConnection(url,use,password);//執行sql語句
Statement stmt=con.createStatement();
String sql="delete from ziliao";
stmt.executeUpdate(sql);
}
catch(Exception ce)
{
ce.printStackTrace();
}
}
}
class shower implements ActionListener{ //類shower用來實現將數據從文件讀如到文本區域中
public void actionPerformed(ActionEvent e)
{
Object source=e.getSource();
String driver="com.mysql.jdbc.Driver";
String url="jdbc:mysql://localhost:3306/day2";
String use="root";
String password="root";
if(source==show | source==sall)
{
try
{
Class.forName(driver);
Connection con=DriverManager.getConnection(url,use,password);
Statement stmt=con.createStatement();
String sql="select * from ziliao ";
ResultSet rs=stmt.executeQuery(sql);
txt1 .setText("");
while(rs.next())
{
txt1.insertText("其他: "+rs.getObject(6)+"\n\n\n",0);
txt1.insertText("地址: "+rs.getString(5)+"\n",0);
txt1.insertText("電話: "+rs.getString(4)+"\n",0);
txt1.insertText("性別: "+rs.getString(3)+"\n",0);
txt1.insertText("年齡: "+rs.getString(2)+"\n",0);
txt1.insertText("姓名: "+rs.getString(1)+"\n",0);
}
rs.close();
stmt.close();
}
catch(Exception ce)
{
ce.printStackTrace();
}
}
}}
class order implements ActionListener{ //order 用來實現排序功能
public void actionPerformed(ActionEvent e)
{
Object source=e.getSource();
String driver="com.mysql.jdbc.Driver";
String url="jdbc:mysql://localhost:3306/day2";
String use="root";
String password="root";
if(source==oname)
{
try
{
Class.forName(driver);
Connection con=DriverManager.getConnection(url,use,password);
Statement stmt=con.createStatement();
String sql="select * from ziliao order by sname";
ResultSet rs=stmt.executeQuery(sql);
txt1 .setText("");
while(rs.next())
{
txt1.insertText("其他: "+rs.getObject(6)+"\n\n\n",0);
txt1.insertText("地址: "+rs.getString(5)+"\n",0);
txt1.insertText("電話: "+rs.getString(4)+"\n",0);
txt1.insertText("性別: "+rs.getString(3)+"\n",0);
txt1.insertText("年齡: "+rs.getString(2)+"\n",0);
txt1.insertText("姓名: "+rs.getString(1)+"\n",0);
}
rs.close();
stmt.close();
}
catch(Exception ce)
{
ce.printStackTrace();
}
}
if(source==oage)
{
try
{
Class.forName(driver);
Connection con=DriverManager.getConnection(url,use,password);
Statement stmt=con.createStatement();
String sql="select * from ziliao order by sage desc";
ResultSet rs=stmt.executeQuery(sql);
txt1 .setText("");
while(rs.next())
{
txt1.insertText("其他: "+rs.getObject(6)+"\n\n\n",0);
txt1.insertText("地址: "+rs.getString(5)+"\n",0);
txt1.insertText("電話: "+rs.getString(4)+"\n",0);
txt1.insertText("性別: "+rs.getString(3)+"\n",0);
txt1.insertText("年齡: "+rs.getString(2)+"\n",0);
txt1.insertText("姓名: "+rs.getString(1)+"\n",0);
}
rs.close();
stmt.close();
}
catch(Exception ce)
{
ce.printStackTrace();
}
}
}}
class sav implements ActionListener{ //類sav用來實現將數據讀入到數據庫中
public void actionPerformed(ActionEvent e)
{
String driver="com.mysql.jdbc.Driver";
String url="jdbc:mysql://localhost:3306/day2";
String use="root";
String password="root";
try
{
Class.forName(driver);
Connection con=DriverManager.getConnection(url,use,password);
Statement stmt=con.createStatement();
String sql="insert into ziliao values('"+text1.getText()+"','"+text2.getText()+"','"+text3.getText()+"','"+text4.getText()+"','"+text5.getText()+"','"+text6.getText()+"')";
if (text1.getText().length() == 0|text2.getText().length() ==0|text3.getText().length() == 0|text4.getText().length() == 0|text5.getText().length() == 0|text6.getText().length() == 0)
{
String t="錯誤";
String d="請輸入整信息後保存";
int dtype=JOptionPane.PLAIN_MESSAGE;
dtype=JOptionPane.WARNING_MESSAGE; //錯誤的處理
JOptionPane.showMessageDialog(null,d,t,dtype);
text1.setText("");
text2.setText("");
text3.setText("");
text4.setText("");
text5.setText("");
text6.setText("");
}
else if(text3.getText().equals("男")||text3.getText().equals("女")){
stmt.executeUpdate(sql);
String t="成功";
String d="保存成功";
int dtype=JOptionPane.PLAIN_MESSAGE;
dtype=JOptionPane.WARNING_MESSAGE;
JOptionPane.showMessageDialog(null,d,t,dtype);
text1.setText("");
text2.setText("");
text3.setText("");
text4.setText("");
text5.setText("");
text6.setText("");
}
else {
String t="錯誤";
String d="請重新輸入性別";
int dtype=JOptionPane.PLAIN_MESSAGE;
dtype=JOptionPane.WARNING_MESSAGE; //錯誤的處理
JOptionPane.showMessageDialog(null,d,t,dtype);
text3.setText("");
}
}
catch(SQLException ex) // 捕捉異常
{
String t="錯誤";
String d="年齡、電話應爲數字";
int dtype=JOptionPane.PLAIN_MESSAGE;
dtype=JOptionPane.WARNING_MESSAGE; //錯誤的處理
JOptionPane.showMessageDialog(null,d,t,dtype);
while (ex != null)
{
ex = ex.getNextException();
}
}
catch(Exception ce)
{
ce.printStackTrace();
}
}
}
class alter implements ActionListener{ //修改按鈕
public void actionPerformed(ActionEvent e) // 處理修改按鈕的ActionEvent
{
String driver="com.mysql.jdbc.Driver";
String url="jdbc:mysql://localhost:3306/day2";
String use="root";
String password="root";
try
{
try {
Class.forName(driver);
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
}
Connection con=DriverManager.getConnection(url,use,password);
Statement stmt=con.createStatement();
if (t1.getText().length() == 0)
{
String t="錯誤";
String d="姓名爲必填項目";
int dtype=JOptionPane.PLAIN_MESSAGE;
dtype=JOptionPane.WARNING_MESSAGE;
JOptionPane.showMessageDialog(null,d,t,dtype);
}
else {
if (t2.getText().length() != 0)
stmt.executeUpdate("update ziliao set sage='" +
t2.getText() + "' where sname='" +
t1.getText() + "'"); // 更新表中姓名相關的年齡記錄
if (t3.getText().length() != 0)
stmt.executeUpdate("update ziliao set sex='" +
t3.getText() + "' where sname='" +
t1.getText() + "'"); // 更新表中姓名相關的性別記錄
if (t4.getText().length() != 0)
stmt.executeUpdate("update ziliao set telephone='" +
t4.getText() + "' where name='" +
t1.getText() + "'"); // 更新表中與姓名相關的電話記錄
if (t5.getText().length() != 0)
stmt.executeUpdate("update ziliao set address='" +
t5.getText() + "' where sname='" +
t1.getText() + "'"); // 更新表中與姓名相關的地址的記錄
if (t6.getText().length() != 0)
stmt.executeUpdate("update ziliao set other='" +
t6.getText() + "' where sname='" +
t1.getText() + "'"); // 更新表中與姓名相關的其他的記錄
}
if (t2.getText().length() == 0 &t3.getText().length() == 0 &t4.getText().length() == 0&t5.getText().length() == 0&t6.getText().length() == 0)
{
String t="錯誤";
String d="修改不成功請重新輸入";
int dtype=JOptionPane.PLAIN_MESSAGE;
dtype=JOptionPane.WARNING_MESSAGE;
JOptionPane.showMessageDialog(null,d,t,dtype);
t1.setText("");
t2.setText("");
t3.setText("");
t4.setText("");
t5.setText("");
t6.setText("");
}
else {
String t="成功";
String d="修改成功";
int dtype=JOptionPane.PLAIN_MESSAGE;
dtype=JOptionPane.WARNING_MESSAGE;
JOptionPane.showMessageDialog(null,d,t,dtype);
t1.setText("");
t2.setText("");
t3.setText("");
t4.setText("");
t5.setText("");
t6.setText("");
}
}
catch(SQLException ex) // 捕捉異常
{
String t="錯誤";
String d="修改類型錯誤電話年齡爲數字";
int dtype=JOptionPane.PLAIN_MESSAGE;
dtype=JOptionPane.WARNING_MESSAGE;
JOptionPane.showMessageDialog(null,d,t,dtype);
t1.setText("");
t2.setText("");
t3.setText("");
t4.setText("");
t5.setText("");
t6.setText("");
}
}
}
class delec implements ActionListener
{
public void actionPerformed(ActionEvent e) // 處理修改按鈕的ActionEvent
{
String driver="com.mysql.jdbc.Driver";
String url="jdbc:mysql://localhost:3306/day2";
String use="root";
String password="root";
try
{
Class.forName(driver); // 實例化JDBC-ODBC橋的驅動
Connection con=DriverManager.getConnection(url,use,password); // 連接數據庫
String sql="select sname from ziliao";
Statement stmt=con.createStatement();
ResultSet rs = stmt.executeQuery(sql);
if (rs.next()==false) // 判斷數據庫中是否有要刪除的記錄,如沒有則顯示提示框
{
t1.setText("");
String t="提示";
String d="沒有您要刪除的記錄";
int dtype=JOptionPane.PLAIN_MESSAGE;
dtype=JOptionPane.WARNING_MESSAGE;
JOptionPane.showMessageDialog(null,d,t,dtype);
}
else
{
String sql2="delete from ziliao where sname='"+t1.getText()+"'";
stmt.executeUpdate(sql2); // 刪除表中對應姓名的數據記錄
// 清空信息框
t1.setText("");
t2.setText("");
t3.setText("");
t4.setText("");
t5.setText("");
t6.setText("");
String t="提示";
String d="刪除記錄成功";
int dtype=JOptionPane.PLAIN_MESSAGE;
dtype=JOptionPane.WARNING_MESSAGE;
JOptionPane.showMessageDialog(null,d,t,dtype);
}
}
catch(SQLException ex) // 捕捉異常
{
while (ex != null)
{
ex = ex.getNextException();
}
}
catch(Exception ex )
{
ex.printStackTrace();
}
}
}
class search implements ActionListener
{
public void actionPerformed(ActionEvent e) // 處理查詢按鈕的ActionEvent
{
String driver="com.mysql.jdbc.Driver";
String url="jdbc:mysql://localhost:3306/day2";
String use="root";
String password="root";
try
{
Class.forName(driver); // 實例化JDBC-ODBC橋的驅動
Connection con=DriverManager.getConnection(url,use,password); // 連接數據庫
String sql = null;
Statement stmt=con.createStatement();
if (ta1.getText().length() == 0&ta2.getText().length() == 0&ta3.getText().length() == 0)
{
String t="錯誤";
String d="您沒有輸入要查詢的項目";
int dtype=JOptionPane.PLAIN_MESSAGE;
dtype=JOptionPane.WARNING_MESSAGE;
JOptionPane.showMessageDialog(null,d,t,dtype);
}
else {
if (ta1.getText().length() != 0)
sql="select * from ziliao where sname='" +
ta1.getText() + "'"; // 查詢表中相關姓名的記錄
if (ta2.getText().length() != 0)
sql="select * from ziliao where sage='" +
ta2.getText() + "'"; // 查詢表中相關年齡的記錄
if (ta3.getText().length() != 0)
sql="select * from ziliao where sex='" +
ta3.getText() + "'"; // 查詢表中相關性別的記錄
}
ResultSet rs = stmt.executeQuery(sql);
while(rs.next())
{
txt1 .setText("");
txt1.insertText("其他: "+rs.getObject(6)+"\n\n\n",0);
txt1.insertText("地址: "+rs.getString(5)+"\n",0);
txt1.insertText("電話: "+rs.getString(4)+"\n",0);
txt1.insertText("性別: "+rs.getString(3)+"\n",0);
txt1.insertText("年齡: "+rs.getString(2)+"\n",0);
txt1.insertText("姓名: "+rs.getString(1)+"\n",0);
}
rs.close();
stmt.close();
if (txt1.getText().length() == 0)
{
String t="錯誤";
String d="表中沒有你要查詢的記錄";
int dtype=JOptionPane.PLAIN_MESSAGE;
dtype=JOptionPane.WARNING_MESSAGE;
JOptionPane.showMessageDialog(null,d,t,dtype);
ta1.setText("");
ta2.setText("");
ta3.setText("");
}
else {
String t="成功";
String d="查找成功";
int dtype=JOptionPane.PLAIN_MESSAGE;
dtype=JOptionPane.WARNING_MESSAGE;
JOptionPane.showMessageDialog(null,d,t,dtype);
ta1.setText("");
ta2.setText("");
ta3.setText("");
}
}
catch(SQLException ex) // 捕捉異常
{
while (ex != null)
{
ex = ex.getNextException();
}
}
catch(Exception ex )
{
ex.printStackTrace();
}
}
}
public static void main(String args[])
{
Menu app=new Menu();
app.addWindowListener
(
new WindowAdapter()
{
public void windowClosing(WindowEvent e){System.exit(0);}
}
);
}
}
效果
輸入信息管理系統主界面模塊
我們將錄入四個人的聯繫信息作爲演示
查詢信息管理模塊
修改信息管理模塊
刪除信息管理模塊