继明哥的否定之后,java泰又出新作!明哥接码!
上次做那個系統是swing+jdbc實現的,無奈被明哥一句否定,數據庫連接完全體現不了數據結構的作用,哎,這就是向小弟施加壓力呀。人無壓力不出油,經過10天的努力,終于李剛的通訊錄更新為1.1版本!
以下為設計思路,以及具體報告
————————————————————————————————————————————————————
李剛的通訊錄設計實驗報告
——信管1132班江錦泰
1)題目
李剛是一愛折騰的人,當然愛折騰的人均有夢想,他想當中國的蓋次呢??刹?#xff0c;現在個人好友信息多了,復雜了,他想制作一個個人通訊錄的制作管理軟件。 剛好這個學期學了數據結構課,所以他準備使用數據結構知識來實現了。并考慮使用雙向鏈表作數據結構。并制定了初步要求:(1)每個好友信息包含姓名、性別、住址、郵編、幾歲、電話、QQ、微信帳號、生日等。
(2)作為一個完整的系統,應具有友好的界面和較強的容錯能力
2)需求分析
一、運到相關數據結構基礎——雙鏈表
二、不能運動數據庫,即需要用到文件IO流,把人物信息記錄到相關文件當中
三、需要有增刪查基本功能
四、良好的交互界面
四、較好的容錯能力
3)概念結構設計
人物={姓名、性別、住址、郵編、幾歲、電話、QQ、微信帳號、生日}
姓名為碼,電話為碼(key)
4)邏輯結構設計
一、雙鏈表,具體比較難實現,所以開展聯想,雙鏈表—>樹—>以樹為數據結構的集合(以下簡稱樹集)。
二、信息存到樹集。
三、樹集存到data文件
四、文件—>樹集—>改動數據—>文件
5)物理結構設計
一、建立data文件
二、構造人物類
三、構造樹集成為人物類的集合
四、構造良好的交互界面
6)系統實現與測試
簡單的一個包,AddressListTreeSet為樹集
Person類里面含有人物屬性集合
ShowJFrame為主界面
dat為存放人物信息的文件
這是主界面,左邊是一個JList姓氏導航,下面是一個功能面板,其中,按姓名查找與按電話號碼查找會讀取姓名框與電話框的內容
單擊導航框會跳轉
添加按鈕作用,如果任何一個輸入為空,會報錯,支持輸入不知道
點擊下來橫杠,點擊按姓名查找會進行查詢
電話號碼同理不做效果圖
刪除效果,選中任意一個,進行刪除,結束后讀入data
7)優缺點自我評價
一、AddressList1.1失去了1.0版本的界面美化性,也減少了界面的層數二、缺少了修改功能,因實現比較復雜,時間又不可允許,故..
三、自己沒有充分利用好時間,總是在晚上編程
四、圖形交互界面以及數據結構部分內容還是不扎實,做的時候經常要看書,看CSDN,缺少效率
8)代碼展示,放碼過去!明哥接碼!
package com.friend;import java.io.Serializable; import java.util.Comparator;public class PersonClass implements Comparable<PersonClass>,Comparator<PersonClass>,Serializable{/*** */private static final long serialVersionUID = -262413201900983336L;String name,phonecode,sex,address,zip_code,old,qq,blog,birthday;public PersonClass(String name,String phonecode,String sex,String address,String zip_code,String old,String qq,String blog,String birthday){this.name=name;this.phonecode=phonecode;this.sex=sex;this.address=address;this.zip_code=zip_code;this.old=old;this.qq=qq;this.blog=blog;this.birthday=birthday;}public PersonClass(String element[]){name=element[0];phonecode=element[1];sex=element[2];address=element[3];zip_code=element[4];old=element[5];qq=element[6];blog=element[7];birthday=element[8];System.out.print(birthday);}public Object[] toArray(){Object[] vars = new Object[9];vars[0]=name;vars[1]=this.phonecode;vars[2]=this.sex;vars[3]=this.address;vars[4]=this.zip_code;vars[5]=this.old;vars[6]=this.qq;vars[7]=this.blog;vars[8]=this.birthday;return vars;}public String index(){return this.name.substring(0, 1);}@Overridepublic int compareTo(PersonClass o) {// TODO 自動生成的方法存根if(this.name!=o.name){return this.name.compareTo(o.name);}if(this.phonecode!=o.phonecode){return this.phonecode.compareTo(o.phonecode);}if(this.sex!=o.sex){return this.sex.compareTo(o.sex);}if(this.address!=o.address){return this.address.compareTo(o.address);}if(this.zip_code!=o.zip_code){return this.zip_code.compareTo(o.zip_code);}if(this.old!=o.old){return this.old.compareTo(o.old);}if(this.qq!=o.qq){return this.qq.compareTo(o.qq);}if(this.blog!=o.blog){return this.blog.compareTo(o.blog);}return this.birthday.compareTo(o.birthday);}@Overridepublic int compare(PersonClass o1, PersonClass o2) {// TODO 自動生成的方法存根return o1.name.compareTo(o2.name);}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPhonecode() {return phonecode;}public void setPhonecode(String phonecode) {this.phonecode = phonecode;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getZip_code() {return zip_code;}public void setZip_code(String zip_code) {this.zip_code = zip_code;}public String getOld() {return old;}public void setOld(String old) {this.old = old;}public String getQq() {return qq;}public void setQq(String qq) {this.qq = qq;}public String getBlog() {return blog;}public void setBlog(String blog) {this.blog = blog;}public String getBirthday() {return birthday;}public void setBirthday(String birthday) {this.birthday = birthday;}}class IndexComparator implements Comparator<PersonClass>{public int compare(PersonClass f1, PersonClass f2){return f1.index().compareTo(f2.index());} }class CodeComparator implements Comparator<PersonClass>{public int compare(PersonClass f1, PersonClass f2){return f1.phonecode.compareTo(f2.phonecode);} }package com.friend;import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.Comparator; import java.util.Iterator; import java.util.TreeSet;public class AddressListTreeSet extends TreeSet<PersonClass>{/*** */private static final long serialVersionUID = -673031400092308095L;private String filename;public AddressListTreeSet(String filename){super();this.filename=filename;this.readFromFile();}public void readFromFile(){try{FileInputStream fin = new FileInputStream(this.filename);ObjectInputStream objin=new ObjectInputStream(fin);while(true)try{this.add((PersonClass)objin.readObject());}catch (Exception e){break;}objin.close();fin.close();}catch (IOException ioe){System.out.print("集合為空");}}public void writeToFile(){try{FileOutputStream fout = new FileOutputStream(this.filename);ObjectOutputStream objout= new ObjectOutputStream(fout);Iterator<PersonClass>it=this.iterator();while(it.hasNext()){PersonClass f=it.next();System.out.print(f.toString());objout.writeObject(f);}objout.close();fout.close();System.out.print("寫入成功");}catch(IOException ioe){System.out.print(ioe);}}public PersonClass search(PersonClass x,Comparator<PersonClass> c){Iterator<PersonClass>it= this.iterator();while(it.hasNext()){PersonClass f= it.next();if(c.compare(f,x)==0)return f;}return null;} }
package com.friend;import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import java.util.Comparator; import java.util.Iterator;import javax.swing.DefaultComboBoxModel; import javax.swing.DefaultListModel; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JSplitPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.ListSelectionModel; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.table.DefaultTableModel;public class ShowJFrame extends JFrame implements ListSelectionListener, ActionListener,WindowListener{/*** */private static final long serialVersionUID = -7933446592390771790L;private AddressListTreeSet book;private JList<String> list;private DefaultListModel<String> listModel;private JTable table;private DefaultTableModel tableModel;private JComboBox<Object> combobox_name;private DefaultComboBoxModel<Object> comboModel;private JTextField text_code;private JTextField text_sex;private JTextField text_address;private JTextField text_zipcode;private JTextField text_old;private JTextField text_qq;private JTextField text_blog;private JTextField text_birth;public ShowJFrame(String filename){super("通訊錄");this.setBounds(250,100,941,362);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.addWindowListener(this);JSplitPane split_h=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);split_h.setDividerLocation(40);this.getContentPane().add(split_h);JSplitPane split_v=new JSplitPane(JSplitPane.VERTICAL_SPLIT);split_v.setDividerLocation(180);this.book= new AddressListTreeSet(filename);this.listModel=new DefaultListModel<String>();this.listModel.addElement("全部");this.list=new JList<String>(listModel);this.list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);this.list.addListSelectionListener(this);split_h.add(new JScrollPane(this.list));split_h.add(split_v);String[] columns={"姓名","電話號碼","性別","地址","郵編","年齡","QQ","微信帳號","生日" // name,phonecode,sex,address,zip_code,old,qq,blog,birthday};this.tableModel=new DefaultTableModel(columns,0);this.table=new JTable(tableModel);this.list.setSelectedIndex(0);split_v.add(new JScrollPane(table));JPanel friendpanel=new JPanel(new GridLayout(2,1));split_v.add(friendpanel);JPanel panels[]={new JPanel(),new JPanel()};for(int i=0;i<panels.length;i++){friendpanel.add(panels[i]);}panels[0].add(new JLabel(columns[0]));this.comboModel=new DefaultComboBoxModel<Object>();combobox_name=new JComboBox<Object>(this.comboModel);combobox_name.setEnabled(true);combobox_name.setEditable(true);panels[0].add(combobox_name);panels[0].add(new JLabel(columns[1]));this.text_code=new JTextField("12345678901",12);panels[0].add(text_code);panels[0].add(new JLabel(columns[2]));this.text_sex=new JTextField("男",2);panels[0].add(text_sex);panels[0].add(new JLabel(columns[3]));this.text_address=new JTextField("12345678901",25);panels[0].add(text_address);panels[0].add(new JLabel(columns[4]));this.text_zipcode=new JTextField("521000",6);panels[0].add(text_zipcode);panels[0].add(new JLabel(columns[5]));this.text_old=new JTextField("21",2);panels[0].add(text_old);panels[0].add(new JLabel(columns[6]));this.text_qq=new JTextField("12345678901",12);panels[0].add(text_qq);panels[0].add(new JLabel(columns[7]));this.text_blog=new JTextField("12345678901",12);panels[0].add(text_blog);panels[0].add(new JLabel(columns[8]));this.text_birth=new JTextField("12345678901",12);panels[0].add(text_birth);this.addIndex();String buttonstr[]={"添加","按姓名查找","按電話號碼查找","刪除行"};JButton buttons[]=new JButton[buttonstr.length];for(int i=0;i<buttons.length;i++){buttons[i]=new JButton(buttonstr[i]);panels[1].add(buttons[i]);buttons[i].addActionListener(this);}this.setVisible(true);}private void addIndex(){Iterator<PersonClass>it=this.book.iterator();while(it.hasNext()){String indexstr=it.next().index();if(!this.listModel.contains(indexstr)){this.listModel.addElement(indexstr);this.comboModel.addElement(indexstr);}}}@Overridepublic void windowOpened(WindowEvent e) {}@Overridepublic void windowClosing(WindowEvent e) {this.book.writeToFile();System.out.print("寫出程序啟動");}@Overridepublic void windowClosed(WindowEvent e) {}@Overridepublic void windowIconified(WindowEvent e) {}@Overridepublic void windowDeiconified(WindowEvent e) {}@Overridepublic void windowActivated(WindowEvent e) {}@Overridepublic void windowDeactivated(WindowEvent e) {}@Overridepublic void actionPerformed(ActionEvent e) {String name=(String)combobox_name.getSelectedItem();String code=text_code.getText();String sex=text_sex.getText();String address=text_address.getText();String zipcode=text_zipcode.getText();String old=text_old.getText();String qq=text_qq.getText();String blog=text_blog.getText();String birth=text_birth.getText();if(e.getActionCommand().equals("添加")){PersonClass f = new PersonClass(name,code,sex,address,zipcode,old,qq,blog,birth);if(name==null){JOptionPane.showMessageDialog(this, "不能添加姓名為空對象");}else if(!name.equals("")){this.book.add(f);String surname=f.index();if(list.getSelectedValue().equals(surname))tableModel.addRow(f.toArray());else{if(!listModel.contains(surname)){listModel.addElement(surname);comboModel.addElement(surname);}list.setSelectedValue(surname, true);}}else {JOptionPane.showMessageDialog(this, "不能添加姓名空串或重復對象"+f.toString());}}if(!this.book.isEmpty()&&e.getActionCommand().endsWith("查找")){for(int i=tableModel.getRowCount()-1;i>=0;i--)this.tableModel.removeRow(i);if(e.getActionCommand().equals("按姓名查找"))this.addAll(new PersonClass(name,"","","","","","","",""),new PersonClass(name,"","","","","","","",""));else{PersonClass find=this.book.search(new PersonClass("",code,"","","","","","",""), new CodeComparator());if(find!=null)this.tableModel.addRow(find.toArray());}return;}if(e.getActionCommand().equals("刪除行")){if(this.book.isEmpty())JOptionPane.showMessageDialog(this,"表格空,不能刪除數據項。");else{int i=table.getSelectedRow();if(i==-1)JOptionPane.showMessageDialog(this,"請選擇數據項");else{name=(String)table.getValueAt(i, 0);int yes=JOptionPane.showConfirmDialog(null, "刪除\""+name+"\"行?");if(yes==0){code=(String)table.getValueAt(i, 1);sex=(String)table.getValueAt(i, 2);address=(String)table.getValueAt(i, 3);zipcode=(String)table.getValueAt(i, 4);old=(String)table.getValueAt(i, 5);qq=(String)table.getValueAt(i, 6);blog=(String)table.getValueAt(i, 7);birth=(String)table.getValueAt(i, 8);System.out.print(birth);PersonClass f=new PersonClass(name,code,sex,address,zipcode,old,qq,blog,birth);this.book.remove(f);tableModel.removeRow(i);if(this.book.search(f, new IndexComparator())==null){listModel.removeElement(f.index());comboModel.removeElement(f.index());}}}}}}@Overridepublic void valueChanged(ListSelectionEvent e) {String surname=(String)list.getSelectedValue();if(!this.book.isEmpty()&&surname!=null&&surname!=""){for(int i= this.tableModel.getRowCount()-1;i>=0;i--)this.tableModel.removeRow(i);if(surname=="全部")this.addAll();else this.addAll(new PersonClass(surname,"","","","","","","",""),new IndexComparator());}}private void addAll(PersonClass friend,Comparator<PersonClass> c){Iterator<PersonClass> it =this.book.iterator();while(it.hasNext()){PersonClass f= it.next();if(c==null||c.compare(friend,f)==0)this.tableModel.addRow(f.toArray());}}private void addAll(){this.addAll(null,null);}public static void main(String args[]){new ShowJFrame("E:\\作業本\\AddressList1.1\\src\\data\\通訊錄.dat");} }
總結
以上是生活随笔為你收集整理的继明哥的否定之后,java泰又出新作!明哥接码!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: excel取消保护(忘记密码)
- 下一篇: 错题本 (并查集) acwing 408