当前位置:文档之家› java课程设计-通讯录系统

java课程设计-通讯录系统

目录第一章设计分析 (2)1.1 需求分析 (2)1.2 功能设计 (2)第二章概要设计 (3)2.1 程序设计 (3)2.2 功能设计 (4)第三章软件环境介绍 (5)3. 1 开发环境 (5)3. 2 开发工具 (5)3. 3 MySql数据设计 (6)第四章测试运行 (7)4.1 程序运行界面 (7)4.2 新建功能 (7)4.3 修改功能 (8)4.4 顺序显示 (8)4.5 分组显示 (9)4.6 搜索功能 (9)第五章总结与分析 (10)第七章参考文献 (11)第八章程序源代码 (12)8.1 类PhoneNumber (12)8.2 类Operation (15)8.3 类Searcher (19)1.1 需求分析现在各大手机都有自己的、各种通讯录程序,但是这些公司都有自己的版权,我们也不可能得到这些源代码!而且这些公司的程序也相当复杂,仅从日常应用方面来说,对于初学java的我们也无法理解,就需要我们开发一个简单易懂的电话号码查询系统程序。

1.2 功能设计本程序的构建参照了手机通讯录,其功能是:有电话录入,修改,增加,删除,按姓名查询,按电话号码查询,按部门查询,按部门显示,显示所有电话号码信息,打印等功能。

2.1 程序设计在本程序设计过程中用到了父类JFrame、JTable、JPanel、JMenuBar、JMenuItem、JButton。

JMenuBar用来创建主菜单JMenuItem创建子菜单JFrame创建框架JTable创建表格部分JScorollPane向文本框添加滚动条JMenuItem创建功能键JButton添加触发按钮。

编写BufferReader()方法实现待分析文件中数据的读取。

编写readLine()方法实现数据的读取。

编写Select()法实现查询。

编写rankVector()方法实现排序编写addNumber()方法实现新建编写removeNumber()方法实现删除编写modifyPhoneNumber()方法实现修改利用actionPerformed ()方法做为事件监听器。

编写J_fenxi()实现构造。

2.2 功能设计主页面以分组形式显示电话号码的详细信息,满足了用户浏览通讯录时分组查看电话号码的要求,同时提供电话号码、姓名、分组、QQ、Email的详细查询及模糊查询功能,方便用户快速查找相关的号码信息。

具体要求如下:(1)新增功能:点击菜单栏中的编辑选项,选择新增功能,可添加号码详细信息(2)删除功能:选中号码信息,点击菜单栏中的编辑选项,选择删除功能(3)修改功能:选中号码信息,点击菜单栏中的编辑选项,选择修改功能,点击要修改的单元格所在的行即可修改(4)查询功能:主页面搜索栏可根据号码、姓名、分组等进行搜索(5)退出程序:点击菜单栏中的文件选项,选择关闭功能图2-1 功能结构图第三章软件环境介绍3. 1 开发环境本次项目的软件环境基于开源软件的使用基础上开发的,所以使用的开发环境是:前台使用JSP+CSS开发,后台使用JSP + MySQL做为基础,使用JavaBean 对数据进行存取。

如图3-1所示:图3-1 前台与后台关系3. 2 开发工具①集成开发环境:MyEclipse 2014;②服务器:Apache Tomcat 7.0;③数据库:MySQL 5.6;④数据库管理系统:Navicat MySQL 8.0;⑤JavaBean开发使用:JDK 7.03. 3 MySql数据设计表3-1 数据表第四章测试运行4.1 程序运行界面电话号码查询系统一共分为3部分,分别是菜单栏、查询栏、显示框。

菜单栏由“文件”、“编辑”、“视图”组成,“文件”菜单有关闭功能键,“编辑”菜单有新建、删除、修改功能键,“视图”菜单有顺序显示和分类显示。

如图4-1所示图4-1 运行界面4.2 新建功能选择编辑—新建功能,填写号码信息后点击确定后即可保存。

图4-2 新增页面4.3 修改功能点击要修改的单元格所在的行,然后点击编辑修改键开始修改信息,点击确定后即可保存。

图4-3 修改页面4.4 顺序显示手机号码按从小到大的顺序排列显示。

图4-4 顺序显示页面4.5 分组显示按分组的类别显示,同分组的元素在一起。

图4-5 分组显示页面4.6 搜索功能可以按照手机号码,姓名、分组等进行搜索。

图4-6 搜索页面第五章总结与分析通过完成一个小程序,不仅发现了自己在java知识中的不足,对java更加了解,还能够增加自己的变成经验,增强对逻辑思维的运用能力。

在本次课程设计的过程中,详细阐述了整个网站的设计思路,并对各部分设计周期进行了详尽的分析,最终达成了一个完整的设计方案;在文章的最后,还根据数据库系统的调试结果,提出了可以进一步改进的部分,以便在以后的学习工作中得到更好的完善。

以及在投入实际应用后网站可以更加稳定可靠的工作。

通过这段时间的课程设计,完成了“电话号码查询系统”的设计,更重要的是又复习了一遍JSP知识,看了许多关于JSP的书,不仅丰富了知识,而且从中学到了编程思想,相信通过这次课程设计,对以后的学习和程序设计会有很大的帮助。

第七章参考文献[1] 张志峰等,《JSP程序设计实训与案例教程》,清华大学出版社.2013[2] 荣钦科技,《JSP动态网站开发与实例》,清华大学出版社.2012[3] 黄梯云,《管理信息系统》,高等教育出版社. 2013[4] 曾凡奇等:《基于Internet的管理信息系统》,中国财政经济出版社,2011[5] 易荣华:《管理信息系统》,高等教育出版社,2014[6] 张靖:《管理信息系统》,高等教育出版社,2013[7]张国锋:《管理信息系统》,机械工业出版社,2012第八章程序源代码8.1 类PhoneNumberpublic class PhoneNumber {private String Number;private String Name;private String Partition;private String QQNumber;private String Email;public PhoneNumber() {}public String getNumber(){return Number;}public String getName(){return Name;}public String getPartition() {return Partition;}public String getQQNumber() {return QQNumber;}public String getEmail() {return Email;}public String getPretreatment( int Style ) { String Key = null;switch ( Style ) {case 1:Key = getNumber();break;case 2:Key = getName();break;case 3:Key = getPartition();break;}return Key;}class NumberException extends Exception {public String warningString(){return"电话号码不符合编码规则!";}}public boolean isNumeric( String str ) {Pattern pattern = pile("[0-9]*");return pattern.matcher(str).matches();}public boolean setNumber( String number ) {number.trim();String Str = number.substring( 0, 3 );try {if( !isNumeric( number ) )throw new NumberException();}catch ( NumberException e ) {JOptionPane.showMessageDialog( null, e.warningString()+"号码为:"+number );return false;}try {if ( number.length() != 11 )throw new NumberException();}catch ( NumberException e ){JOptionPane.showMessageDialog( null, e.warningString()+"号码为:"+number );return false;}try {int num = Integer.parseInt( Str );if ( num < 130 || num > 139 ){num /= 10;if( num != 15 || num != 18 )throw new NumberException();}Number = number;return true;}catch ( NumberException e ) {JOptionPane.showMessageDialog( null, e.warningString()+"号码为:"+number );return false;}}public boolean setName( String name ) {name.trim();Name = name;return true;}public boolean setPartition( String Str ) {Str.trim();Partition = Str;return true;}public boolean setQQNumber( String qqnumber ) {qqnumber.trim();QQNumber = qqnumber;return true;}class EmailException extends Exception {public String warningString() {return"电子邮箱格式错误!";}}public boolean setEmail( String email ) {email.trim();String Str = email.substring( email.length()-4 );try {if ( !Str.equals(".com") )throw new EmailException();if ( email.indexOf('@') < 1 )throw new EmailException();Email = email;return true;}catch ( EmailException e ) {JOptionPane.showMessageDialog( null, e.warningString() );return false;}}/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stub}}8.2 类Operationpublic class Operation extends PhoneNumber {public Vector<PhoneNumber> PhoneNumberList;public Operation() {PhoneNumberList = new Vector<PhoneNumber>();}public Vector<PhoneNumber> getPhoneNumberList() {return PhoneNumberList;}class OperatingException extends Exception {public String warningString() {return"操作失败!";}}public Vector<PhoneNumber> Select( String KeyStr, int Style ) { String Key = KeyStr.trim();Vector<PhoneNumber> tempPhoneNumberList = new Vector<PhoneNumber>();for ( int pt = 0; pt < PhoneNumberList.size(); pt++ ) {String preKey =PhoneNumberList.elementAt(pt).getPretreatment(Style);if ( preKey.equals(Key) )tempPhoneNumberList.addElement( PhoneNumberList.elementAt(pt) );}return tempPhoneNumberList;}public boolean addNumber( PhoneNumber phoneNumber, int Index ) { try {if ( PhoneNumberList.contains(phoneNumber) )throw new OperatingException();}catch ( OperatingException e ) {JOptionPane.showMessageDialog( null, e.warningString() );return false;}try {for ( int pt = 0; pt < PhoneNumberList.size(); pt++ )if( PhoneNumberList.elementAt(pt).getNumber().equals(phoneNumber.getNumbe r()) )throw new OperatingException();if ( Index >= PhoneNumberList.size() )Index = PhoneNumberList.size();PhoneNumberList.insertElementAt( phoneNumber, Index );return true;}catch ( OperatingException e ) {JOptionPane.showMessageDialog( null, e.warningString() );return false;}}public boolean removeNumber( String phoneNumber ) {try {int Index = 0;for ( int pt = 0; pt < PhoneNumberList.size(); pt++ )if( PhoneNumberList.elementAt(pt).getNumber().equals(phoneNumber) )Index = pt;if ( Index >= PhoneNumberList.size() )throw new OperatingException();PhoneNumberList.removeElementAt(Index);return true;}catch ( OperatingException e ) {JOptionPane.showMessageDialog( null, e.warningString() );return false;}}public boolean modifyPhoneNumber( PhoneNumber phoneNumber ) { try {if ( PhoneNumberList.contains(phoneNumber) )throw new OperatingException();int Index = 0;for ( int pt = 0; pt < PhoneNumberList.size(); pt++ )if( PhoneNumberList.elementAt(pt).getNumber().equals(phoneNumber.getNumbe r()) ) {PhoneNumberList.removeElementAt(pt);PhoneNumberList.addElement( phoneNumber );}}catch ( OperatingException e ) {JOptionPane.showMessageDialog( null, e.warningString() );return false;}try {if ( !PhoneNumberList.contains(phoneNumber) )throw new OperatingException();return true;}catch ( OperatingException e ) {JOptionPane.showMessageDialog( null, e.warningString() );return false;}}public Vector<PhoneNumber> sortPhoneNumber( Vector<PhoneNumber> phoneNumberList, String KeyStr ) {Vector<PhoneNumber> tempPhoneNumberList = new Vector<PhoneNumber>( 10, 3 );for ( int Index = 0; Index < phoneNumberList.size(); Index++ ) if( phoneNumberList.elementAt(Index).getPartition().equals(KeyStr) )tempPhoneNumberList.addElement( phoneNumberList.elementAt(Index) );return tempPhoneNumberList;}public Vector<PhoneNumber> rankVector( Vector<PhoneNumber> phoneNumberList ) {Vector<PhoneNumber> tempPhoneNumberList = new Vector<PhoneNumber>();tempPhoneNumberList.addElement( phoneNumberList.elementAt(0));for ( int Index = 0; Index < phoneNumberList.size(); Index++ ) {int pt;boolean flag = true;for ( pt = 0; pt < tempPhoneNumberList.size(); pt++ ) {if( phoneNumberList.elementAt(Index).getNumber().compareTo(tempPhoneNumbe rList.elementAt(pt).getNumber()) < 0 )break;}for ( int i = 0; i < tempPhoneNumberList.size(); i++ )if( tempPhoneNumberList.elementAt(i).getNumber().equals(phoneNumberList.e lementAt(Index).getNumber()) )flag = false;if ( flag )tempPhoneNumberList.insertElementAt( phoneNumberList.elementAt(Index ), pt );}return tempPhoneNumberList;}public static void main(String[] args) {// TODO Auto-generated method stub}}8.3 类Searcherpublic class extends JFrame {public DefaultTableModel Data;public JTable View;public JButton button;public JComboBox combobox;public JFrame app;public Operation operation;public JMenuBar MenuBar;public JTextField textField;public JMenuItem[][] MenuItem = {{ new JMenuItem("关闭(C)") },{ new JMenuItem("新建(N)"), new JMenuItem("删除(D)"), new JMenuItem("修改(M)") },{ new JMenuItem("顺序显示(O)"), new JMenuItem("分类显示(S)") } };public Searcher() {super("Searcher");operation = new Operation();MenuBar = new JMenuBar();setJMenuBar(MenuBar);Container c = getContentPane();c.setLayout(new FlowLayout());Data = new DefaultTableModel( 1, 5 );View = new JTable( Data );View.setValueAt( "号码", 0, 0 );View.setValueAt( "姓名", 0, 1 );View.setValueAt( "分组", 0, 2 );View.setValueAt( "QQ", 0, 3 );View.setValueAt( "Email", 0, 4 );View.setPreferredScrollableViewportSize( new Dimension( 300, 150 ) );View.setAutoResizeMode( JTable.AUTO_RESIZE_OFF );JScrollPane spane = new JScrollPane( View );spane.setLayout( new ScrollPaneLayout() );View.setVisible( true );JMenu[] Menu = { new JMenu("文件(F)"), new JMenu("编辑(E)"), new JMenu("视图(V)") };char[][] MenuChar = { { 'F', 'E', 'V' }, { 'C' }, { 'N', 'D', 'M' }, { 'O', 'S' } };int Index, IndexI;for (Index = 0; Index < Menu.length; Index++) {MenuBar.add(Menu[Index]);Menu[Index].setMnemonic(MenuChar[0][Index]);for(IndexI = 0; IndexI < MenuItem[Index].length; IndexI++) {Menu[Index].add(MenuItem[Index][IndexI]);MenuItem[Index][IndexI].setMnemonic(MenuChar[Index + 1][IndexI]);MenuItem[Index][IndexI].setAccelerator(KeyStroke.getKeyStroke("ctrl" + MenuChar[Index + 1][IndexI]));}}Menu[1].insertSeparator(1);Menu[2].insertSeparator(1);JPanel panel = new JPanel();JPanel panel2 =new JPanel();textField = new JTextField( 20 );textField.setEditable( true );String[] s = { "号码", "姓名", "分组" };combobox = new JComboBox( s );button = new JButton("搜索");panel.setLayout( new BoxLayout(panel, BoxLayout.X_AXIS) );panel.add( combobox );panel.add( textField );panel.add( button );panel2.setLayout( new BoxLayout(panel2, BoxLayout.X_AXIS) );panel2.add( View );c.add( panel );c.add( panel2 );panel.setVisible( true );panel.setVisible( true );c.add( spane );String path = "Data.txt";try {FileReader fr=new FileReader(path);BufferedReader reader=new BufferedReader(fr);String tempStr = new String();tempStr = reader.readLine();PhoneNumber[] phoneNumber = new PhoneNumber[5];for ( int pt = 0; tempStr != null; pt++ ) {phoneNumber[pt] = new PhoneNumber();Vector<String> rowData = new Vector<String>(5);phoneNumber[pt].setNumber( tempStr );rowData.addElement( tempStr );tempStr = reader.readLine();phoneNumber[pt].setName( tempStr );rowData.addElement( tempStr );tempStr = reader.readLine();phoneNumber[pt].setPartition( tempStr );rowData.addElement( tempStr );tempStr = reader.readLine();phoneNumber[pt].setQQNumber( tempStr );rowData.addElement( tempStr );tempStr = reader.readLine();phoneNumber[pt].setEmail( tempStr );rowData.addElement( tempStr );Data.addRow( rowData );operation.PhoneNumberList.addElement( phoneNumber[pt] );tempStr = reader.readLine();}reader.close();}catch ( IOException e ) {JOptionPane.showMessageDialog( null, e );}button.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {int Style = combobox.getSelectedIndex()+1;String KeyStr = textField.getText();Vector<PhoneNumber> phoneNumberList =operation.Select(KeyStr, Style );int flag = Data.getRowCount()-1;for ( int i = 0; i < flag; i++ )Data.removeRow( Data.getRowCount()-1 );for (int pt = 0; pt < phoneNumberList.size(); pt++) {Vector<String> rowData = new Vector<String>(5);rowData.addElement(phoneNumberList.elementAt(pt).getNumber());rowData.addElement(phoneNumberList.elementAt(pt).getName());rowData.addElement(phoneNumberList.elementAt(pt).getPartition());rowData.addElement(phoneNumberList.elementAt(pt).getQQNumber());rowData.addElement(phoneNumberList.elementAt(pt).getEmail());Data.addRow(rowData);}View.repaint();}});MenuItem[0][0].addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {JMenuItem Item = (JMenuItem) e.getSource();System.exit(0);}});MenuItem[1][0].addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {class J_Table extends JFrame {public DefaultTableModel m_data;public JTable m_view;public PhoneNumber phoneNumber;public J_Table() {super("新建");phoneNumber = new PhoneNumber();m_data = new DefaultTableModel();m_view = new JTable(m_data);m_view.setPreferredScrollableViewportSize(newDimension(240, 480));Container c = getContentPane();c.setLayout(new FlowLayout());JButton b = new JButton("确定");c.add(b);Vector<String> columnData = new Vector<String>(5);columnData.addElement("姓名:");columnData.addElement("号码:");columnData.addElement("分组:");columnData.addElement("QQ:");columnData.addElement("Email:");m_data.addColumn("标签", columnData);m_data.addColumn("内容", (Vector) null);c.add(m_view);b.addActionListener(new ActionListener() {public void actionPerformed(java.awt.event.ActionEvent e) {JButton bb = (JButton) e.getSource();phoneNumber.setName((String)m_data.getValueAt(0, 1));phoneNumber.setNumber((String)m_data.getValueAt(1, 1));phoneNumber.setPartition((String)m_data.getValueAt(2, 1));phoneNumber.setQQNumber((String)m_data.getValueAt(3, 1));phoneNumber.setEmail((String)m_data.getValueAt(4, 1));operation.addNumber(phoneNumber, operation.PhoneNumberList.size());Vector<String> rowData = new Vector<String>(5);rowData.addElement( phoneNumber.getNumber() );rowData.addElement( phoneNumber.getName() );rowData.addElement( phoneNumber.getPartition() );rowData.addElement( phoneNumber.getQQNumber() );rowData.addElement( phoneNumber.getEmail() );Data.addRow( rowData );}});}}J_Table table = new J_Table();table.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);table.setSize(200, 200);table.setVisible( true );table.repaint();}});MenuItem[1][1].addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {int rEdit = View.getSelectedRow();String KeyStr = (String) Data.getValueAt(rEdit, 0);operation.removeNumber(KeyStr);Data.removeRow( rEdit );}});MenuItem[1][2].addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {class J_Table extends JFrame {public DefaultTableModel m_data;public JTable m_view;public PhoneNumber phoneNumber;public J_Table() {super("修改");phoneNumber = new PhoneNumber();m_data = new DefaultTableModel();m_view = new JTable(m_data);m_view.setPreferredScrollableViewportSize(new Dimension(240, 480));Container c = getContentPane();c.setLayout(new FlowLayout());JButton b = new JButton("确定");c.add(b);Vector<String> columnData = new Vector<String>(5);columnData.addElement("号码:");columnData.addElement("姓名:");columnData.addElement("分组:");columnData.addElement("QQ:");columnData.addElement("Email:");Vector<String> columnContent = new Vector<String>(5);int rEdit = View.getSelectedRow();columnContent.addElement((String)View.getValueAt(rEdit, 0));columnContent.addElement((String)View.getValueAt(rEdit, 1));columnContent.addElement((String)View.getValueAt(rEdit, 2));columnContent.addElement((String)View.getValueAt(rEdit, 3));columnContent.addElement((String)View.getValueAt(rEdit, 4));m_data.addColumn( "标签", columnData);m_data.addColumn((Object)"内容", columnContent);c.add(m_view);m_view.repaint();b.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {JButton bb = (JButton) e.getSource();phoneNumber.setNumber((String)m_data.getValueAt(0, 1));phoneNumber.setName((String)m_data.getValueAt(1, 1));phoneNumber.setPartition((String)m_data.getValueAt(2, 1));phoneNumber.setQQNumber((String)m_data.getValueAt(3, 1));phoneNumber.setEmail((String)m_data.getValueAt(4, 1));operation.modifyPhoneNumber(phoneNumber);Vector<String> columnContent = new Vector<String>(5);int rEdit = View.getSelectedRow();columnContent.addElement((String)m_data.getValueAt(0, 1));columnContent.addElement((String)m_data.getValueAt(1, 1));columnContent.addElement((String)m_data.getValueAt(2, 1));columnContent.addElement((String)m_data.getValueAt(3, 1));columnContent.addElement((String)m_data.getValueAt(4, 1));Data.removeRow( rEdit );Data.insertRow( rEdit, columnContent );m_view.repaint();}});}}J_Table table = new J_Table();table.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);table.setSize(200, 200);table.setVisible(true);}});MenuItem[2][0].addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {int flag = Data.getRowCount()-1;for ( int Index = 0; Index < flag; Index++ )Data.removeRow( 1 );Vector<PhoneNumber> tempPhoneNumberList = new Vector<PhoneNumber>();tempPhoneNumberList = operation.rankVector(operation.PhoneNumberList);for( int pt = 0; pt < tempPhoneNumberList.size(); pt++ ) {Vector<String> rowData = new Vector<String>( 5 );rowData.addElement( tempPhoneNumberList.elementAt(pt).getNumber() );rowData.addElement( tempPhoneNumberList.elementAt(pt).getName() );rowData.addElement( tempPhoneNumberList.elementAt(pt).getPartition() );rowData.addElement( tempPhoneNumberList.elementAt(pt).getQQNumber() );rowData.addElement( tempPhoneNumberList.elementAt(pt).getEmail() );Data.addRow( rowData );}View.repaint();}});MenuItem[2][1].addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {Vector<String> PartitionSet = new Vector<String>();Vector<PhoneNumber> tempPhoneNumberList = new Vector<PhoneNumber>();PartitionSet.addElement( operation.PhoneNumberList.elementAt(0).getP artition() );for (int pt = 0; pt < operation.PhoneNumberList.size(); pt++) {boolean signal = true;for (int i = 0; i < PartitionSet.size(); i++){if(operation.PhoneNumberList.elementAt(pt).getPartition().equals(Partitio nSet.elementAt(i)))signal = false;}if ( signal )PartitionSet.addElement(operation.PhoneNumberList.elementAt(pt).getP artition());}for (int i = 0; i < PartitionSet.size(); i++) {for(int pt = 0; pt < operation.PhoneNumberList.size(); pt++)if(operation.PhoneNumberList.elementAt(pt).getPartition().equals(Partitio nSet.elementAt(i)))tempPhoneNumberList.addElement(operation.PhoneNumberList.elementAt(p t));}int flag = Data.getRowCount()-1;for ( int Index = 0; Index < flag; Index++ )Data.removeRow( 1 );for ( int pt = 0; pt < operation.PhoneNumberList.size(); pt++ ) {Vector<String> rowData = new Vector<String>( 5 );rowData.addElement( tempPhoneNumberList.elementAt(pt).getNumber() );rowData.addElement( tempPhoneNumberList.elementAt(pt).getName() );rowData.addElement( tempPhoneNumberList.elementAt(pt).getPartition() );rowData.addElement( tempPhoneNumberList.elementAt(pt).getQQNumber() );rowData.addElement( tempPhoneNumberList.elementAt(pt).getEmail() );Data.addRow( rowData );}View.repaint();}});}public static void main( String[] args ) {Searcher searcher = new Searcher();searcher.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );searcher.setSize( 480, 300 );searcher.setVisible( true );}}。

相关主题