集中上机实习报告实验题目用java实现简单功能的学生通讯录实验题目用java实现简单功能的学生通讯录;需求分析和系统设计需求分析要实现的功能分析:通过题目可知要设计一个学生通讯录,要求实现简单的通信录管理,能够输入通信录卡片(实现增、删、改等功能),能够分组,并能够实现按名字(或其他方式)查询功能;实现界面:可以是DOS界面,功能按提示方式输入实现;可以是Windows界面,功能用菜单形式,输入界面用对话框形式。
概要设计为了实现实现通讯录界面,需要完成对电话簿的添加,删除,修改功能,因此只需要完成对这三个按钮事件的处理。
这三个按钮同样可以用一个监听器类来实现事件的监听。
区分他们的方法同样是根据按钮标题的不同来区分,当鼠标单击列表组件时,显示不同人员的联系信息,所以需要为列表组件添加鼠标事件监听器。
算法分析在实现功能时只用了简单的面向对象的设计方法,在处理多个按钮事件时,区分按钮的关键是按钮的标题区分,我用了按钮命令事件处理,并用if else 来区分“添加”,“删除”,“修改”这三个按钮。
界面上放入一个列表主件,一个“姓名:”的标签和一个输入姓名的编辑框,一个“电话:”的标签和一个联系电话的编辑框,一个“地址:”的标签和一个地址的编辑框,还有“添加:”、“删除:”、“修改:”等按钮,及对mouseClicked 事件的监听类。
构造了JFrame mainFrm 为主窗口,JTextField name 为姓名输入框,JTextField tel 为电话输入框,JTextField add 为地址输入框,JList dataList 为列表组建,String[] ming 为姓名数组,String[] phone 为电话数组,String[] addr 为地址数组。
在实现过程中,定义PhoneBook类继承了MouseAdapter类与ActionListener接口,就可以用Book类来实现按钮命令监听器和鼠标事件监听器。
如果出现错误操作,会在控制台出现异常,且操作无效。
模块划分与说明学生表流程图1,进入通讯录后先在姓名输入框内输入姓名如xx,在电话输入框内输入联系电话,在地址输入框内输入地址;2,点击“添加”按钮,姓名xx出现在面板左侧的列表中;3,(1)继续1,2,步骤可向学生通讯录中添加更多学生信息如yy;(2)可对已添加的学生信息进行修改,如将xx的电话号改变:在列表中点击xx姓名,对xx信息进行修改,最后点击“修改”按钮,修改后的信息被保存;(3)可对已添加的学生信息进行删除操作,如将xx的信息删除:在列表中点击xx姓名,然后点击“删除”按钮,即可将学生信息删除;总体图:流程图:添加模块流程图:程序源代码package通讯录;import java.awt.*;import java.awt.event.*;import javax.swing.*;class Book extends MouseAdapter implements ActionListener {public static final int WIDTH=600;public static final int HIGTH=400;JFrame mainFrm;JTextField name;JTextField tel;JTextField add;JList dataList;String[] ming;String[] phone;String[] addr;int n=0;void book(){mainFrm=new JFrame();mainFrm.setTitle("学生通讯录");mainFrm.setSize(500,300);mainFrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container contentPane=mainFrm.getContentPane();ming=new String[10];phone=new String[10];addr=new String[10];dataList=new JList(ming);dataList.setSelectedIndex(1);dataList.getSelectedValue();JPanel P1=new JPanel();JPanel P2=new JPanel();JPanel P3=new JPanel();P1.setSize(400,200);contentPane.add(P1,BorderLayout.WEST); contentPane.add(P2,BorderLayout.CENTER); contentPane.add(P3,BorderLayout.NORTH);P1.add(dataList);P2.setLayout(new GridLayout(3,1));JLabel l1=new JLabel("姓名:");name=new JTextField();JLabel l2=new JLabel("电话:");tel=new JTextField();JLabel l3=new JLabel("地址:");add=new JTextField();P2.add(l1);P2.add(name);P2.add(l2);P2.add(tel);P2.add(l3);P2.add(add);JButton b=new JButton("添加");b.addActionListener(this);P3.add(b);b=new JButton("删除");b.addActionListener(this);P3.add(b);b=new JButton("修改");b.addActionListener(this);P3.add(b);dataList.addMouseListener(this);mainFrm.setVisible(true);}public void actionPerformed(ActionEvent e) {if(e.getActionCommand()=="添加"){n++;ming[n]=name.getText();phone[n]=tel.getText();addr[n]=add.getText();dataList.setListData(ming);}else if(e.getActionCommand()=="删除") {int t=dataList.getSelectedIndex();for(int i=t;i<=n;i++){ming[i]=ming[i+1];phone[i]=phone[i+1];addr[i]=addr[i+1];}n--;name.setText("");tel.setText("");add.setText("");dataList.setListData(ming);}else if(e.getActionCommand()=="修改"){int t=dataList.getSelectedIndex();ming[t]=name.getText();phone[t]=tel.getText();addr[t]=add.getText();dataList.setListData(ming);}}public void mouseClicked(MouseEvent e){int i=dataList.locationToIndex(e.getPoint());name.setText(ming[i]);tel.setText(phone[i]);add.setText(addr[i]);}}public class Tongxunlu {/*** @param args*/public static void main(String[] args) {Book h=new Book();h.book();}}结果截图初始窗口:添加:继续添加:删除:修改:实验心得Java布局管理是新学的内容,因为对窗口感兴趣,所以写代码的时候也不觉得烦躁,借鉴了书上的内容,构造框架窗口时使用了javaw.swing包,构造了主框架MainFrm;用JLabel(“”)设置了三个标签,分别为:“姓名”“电话”“地址”;并使用了JTextField进行单行文本输入;对“添加”“删除”“修改”这三个功能选项,则导入了java.awt包,与java.awt.event包,使用了JBonton进行按钮设置,并对这三个按钮进行addMouseListener监听,当发生mouseClicked事件时,事件监听器会传递给容器进行处理;列表我使用了列表框组件JList,并将学生姓名添加在列表中,本来想用组合框组件JComboBox,觉得这样比较节省空间,但想到这样不方便根据姓名查询,所以还是用了列表框组件。
我的总布局管理器使用的是边界布局管理器,在五个位置中,我选择了WEST,CENTER和NORTH这三个面板分别放了列表组件,输入面板与按钮面板。
输入面板使用了网格布局管理器GirdLayout(3,1)使输入呈三行一列;按钮面板则是用的流布局管理器(默认)依次为“添加”“删除”“修改”。
这次实验收获非常大,对第六章的加深了理解,更动手实践了有关事件监听器的操作,这让本来在上课时听得懵懂的内容如事件监听器的响应等理解的更深刻了,书上介绍的三种布局管理器也得到了实际的应用,上课时没注意到的组件也应用到了实验中。
总体来说,受益匪浅。