• 用哈希表实现图书管理系统


    学校Java课的课程实验之一。

    用到的数据结构:哈希表

    题目要求:

    1. 建立的图书类包含如下信息:编号、书名、作者、出版社、出版日期。

    2. 能够实现根据以下关键字查询图书:编号、书名、作者、出版社。

    3. 能够实现图书信息的录入、删除和修改。

    4.录入的图书至少要有10本以上。

    5.具有图形用户界面.

    功能介绍:

    录入、删除、修改图书;

    按编号、书名、作者、出版社查询图书。

    界面设计:

    主界面(会的不多,所以用了最简易的流式布局):

    检索模块:

    从四个检索字段中选择一种,输入检索词,点击“检索”按钮后会在右边的文本框中显示检索到的内容。

    录入/修改模块:

    在主窗口中点击“录入”,可在弹出的“录入对话框”中输入图书信息,点击“确定”后,录入的信息将显示在状态框里,并且在图书列表中追加了新录入的图书。

    删除模块:

    在主窗口中点击“删除”,可在弹出的“删除对话框”中输入书名,点击“确定”后,该名字的图书将从图书馆删除。

    类的设计:

    MyDate类 被Book类引用

    Book类   被Library类引用

    Library类 被Gui类引用

    Gui类   图形界面,引用以上三个类

    辅助类MyDate的实现

     1 public class MyDate
     2 {
     3     //data members
     4     private int year;
     5     private int month;
     6     private int day;
     7     //methods
     8     public MyDate(){this(1995,2,28);}
     9     public MyDate(int year, int month, int day)
    10     {
    11         this.year = year;
    12         this.month = month;
    13         this.day = day;
    14     }
    15     public void set_year(int year)
    16     {
    17         this.year = year;
    18     }
    19     public void set_month(int month)
    20     {
    21         this.month = month;
    22     }
    23     public void set_day(int day)
    24     {
    25         this.day = day;
    26     }
    27 
    28     public void set_date(int year, int month, int day)
    29     {
    30         this.year = year;
    31         this.month = month;
    32         this.day = day;
    33     }
    34 
    35     public int get_year()
    36     {
    37         return year;
    38     }
    39     public int get_month()
    40     {
    41         return month;
    42     }
    43     public int get_day()
    44     {
    45         return day;
    46     }
    47 
    48     public String toString()
    49     {
    50         return (year+"/"+month+"/"+day);
    51     }
    52 }
    MyDate.java

    书类Book的实现

     1 import java.util.*;
     2 public class Book{
     3     static int count=0;
     4     private int num;
     5     private String title;
     6     private Vector<String> author;
     7     private String publisher;
     8     private MyDate date;
     9 
    10     public int getNum()
    11     {return num;}
    12     public String getTitle()
    13     {return title;}
    14     public Vector<String> getAuthor()
    15     {return author;}
    16     public String getPublisher()
    17     {return publisher;}
    18     public MyDate getDate()
    19     {return date;}
    20 
    21     //can not set num
    22     public void setTitle(String title)
    23     {this.title=title;}
    24     private void setAuthor(Vector<String> author)
    25     {this.author=author;}
    26     public void setPublisher(String publisher)
    27     {this.publisher=publisher;}
    28     public void setDate(MyDate date)
    29     {this.date=date;}
    30 
    31     public Book()
    32     {
    33         this("???","???",new MyDate());
    34         count++;
    35         this.num=count;
    36     }
    37     public Book(String title, String publisher, MyDate date)
    38     {
    39         count++;
    40         this.num=count;
    41         this.title=title;
    42         this.author=new Vector<String>();
    43         this.publisher=publisher;
    44         this.date=date;
    45     }
    46 
    47     @Override
    48     public String toString()
    49     {
    50         return (num+"\"+title+"\"+author+"\"+publisher+"\"+date+"
    ");
    51     }
    52 
    53     public void addAuthor(String anAuthor)
    54     {author.add(anAuthor);}
    55 }
    Book.java

    图书馆类Library.java

      1 import java.util.*;
      2 public class Library{
      3     private Hashtable<Integer, Book> numList;//num is unique, and the other three are probably not
      4     private Hashtable<String, Book> titleList;//regard the books with the same name different
      5     private Hashtable<String, Vector<Book>> authorList;
      6     private Hashtable<String, Vector<Book>> publisherList;
      7 
      8     public Library()
      9     {
     10         numList=new Hashtable<Integer, Book>();
     11         titleList=new Hashtable<String, Book>();
     12         authorList=new Hashtable<String, Vector<Book>>();
     13         publisherList=new Hashtable<String, Vector<Book>>();
     14     }
     15 
     16     @Override
     17     public String toString()
     18     {
     19         return ("图书馆现有 "+numList.size()+" 本书");
     20     }
     21 
     22     public void addBook(Book aBook)
     23     {
     24         numList.put(new Integer(aBook.getNum()),aBook);
     25 
     26         titleList.put(aBook.getTitle(),aBook);
     27 
     28         for(String anAuthor: aBook.getAuthor())
     29         {
     30             if(!authorList.containsKey(anAuthor))
     31                 authorList.put(anAuthor, new Vector<Book>());
     32             (authorList.get(anAuthor)).add(aBook);
     33         }
     34 
     35         if(!publisherList.containsKey(aBook.getPublisher()))
     36             publisherList.put(aBook.getPublisher(), new Vector<Book>());
     37         (publisherList.get(aBook.getPublisher())).add(aBook);
     38     }
     39 
     40     private void removeBook(Book aBook)
     41     {//be called by the same name public method
     42         numList.remove(new Integer(aBook.getNum()));
     43         
     44         titleList.remove(aBook.getTitle());
     45 
     46         (publisherList.get(aBook.getPublisher())).remove(aBook);
     47         if((publisherList.get(aBook.getPublisher())).isEmpty())
     48             publisherList.remove(aBook.getPublisher());
     49 
     50         for(String anAuthor: aBook.getAuthor())
     51         {
     52             (authorList.get(aBook.getAuthor())).remove(aBook);
     53             if((authorList.get(aBook.getAuthor())).isEmpty())
     54                 authorList.remove(aBook.getAuthor());
     55         }
     56     }
     57 
     58     public String removeBook(String aTitle)
     59     {
     60         String result="";
     61         if(titleList.get(aTitle)==null)
     62         {
     63             result="这本书不存在";
     64         }
     65         else
     66         {
     67             result="您已经删除 "+titleList.get(aTitle).toString();
     68             removeBook(titleList.get(aTitle));//call the function with the same name
     69         }
     70         return result;
     71     }
     72     public String modifyBook(String aTitle,String anAuthor,String aPublisher,MyDate aDate)
     73     {
     74         titleList.get(aTitle).addAuthor(anAuthor);
     75         titleList.get(aTitle).setPublisher(aPublisher);
     76         titleList.get(aTitle).setDate(aDate);
     77         String result="您已经修改 "+titleList.get(aTitle).toString();
     78         return result;
     79     }
     80 
     81 
     82     public String listBooksWithNum(int aNum)
     83     {
     84         String result="";
     85         Book book=numList.get(aNum);
     86         result+=book;
     87         return result;
     88     }
     89     public String listBooksWithTitle(String aTitle)
     90     {
     91         String result="";
     92         Book book=titleList.get(aTitle);
     93         result+=book;
     94         return result;
     95     }
     96     public String listBooksWithTitle()
     97     {
     98         String result="";
     99         Enumeration<String> titles=titleList.keys();
    100         while(titles.hasMoreElements())
    101         {result+=titles.nextElement();}    
    102         return result;
    103     }
    104     public String listBooksWithAuthor(String anAuthor)
    105     {
    106         String result="";
    107         Iterator<Book> books=(authorList.get(anAuthor)).iterator();
    108         while(books.hasNext())
    109         {result+=books.next();}    
    110         return result;
    111     }
    112     public String listBooksWithPublisher(String aPublisher)
    113     {
    114         String result="";
    115         Vector<Book> books=publisherList.get(aPublisher);
    116         for(Book book: books)
    117             result+=book;
    118         return result;
    119     }
    120     public String listAllBooks()
    121     {
    122         return(numList.toString());
    123     }
    124 }

    图形界面类的实现

      1 import java.awt.*;
      2 import java.awt.event.*;
      3 import javax.swing.*;
      4 import java.util.*;
      5 public class Gui
      6 {
      7     static Library lib=new Library();
      8     static String result="";
      9     public static void main(String[] args)
     10     {
     11         Board mybox=new Board();
     12 
     13         Book aBook=new Book("Java 程序设计","清华大学出版社",new MyDate(1999,2,10));
     14         aBook.addAuthor("郑莉");
     15         lib.addBook(aBook);
     16 
     17         aBook=new Book("C语言程序设计", "清华大学出版社", new MyDate(2005,3,20));
     18         aBook.addAuthor("谭浩强");
     19         lib.addBook(aBook);
     20         
     21         aBook=new Book("计算机原理简明教程", "北京理工大学出版社", new MyDate(2009,5,22));
     22         aBook.addAuthor("王铁峰");
     23         lib.addBook(aBook);
     24         
     25         aBook=new Book("数理语言学", "商务印书馆", new MyDate(2010,5,6));
     26         aBook.addAuthor("冯志伟");
     27         lib.addBook(aBook);
     28         
     29         aBook=new Book("大学英语通用翻译教程", "对外经济贸易大学出版社", new MyDate(2012,11,18));
     30         aBook.addAuthor("余静娴");
     31         lib.addBook(aBook);
     32         
     33         aBook=new Book("考研词汇分频速记", "西安交通大学出版社", new MyDate(2013,6,20));
     34         aBook.addAuthor("俞敏洪");
     35         lib.addBook(aBook);
     36         
     37         aBook=new Book("计算机组成原理", "高等教育出版社", new MyDate(2008,4,20));
     38         aBook.addAuthor("唐朔飞");
     39         lib.addBook(aBook);
     40         
     41         aBook=new Book("马克思主义基本原理概论", "高等教育出版社", new MyDate(2013,3,24));
     42         aBook.addAuthor("本书编写组");
     43         lib.addBook(aBook);
     44         
     45         aBook=new Book("数据结构", "清华大学出版社", new MyDate(2013,8,20));
     46         aBook.addAuthor("邓俊辉");
     47         lib.addBook(aBook);
     48         
     49         aBook=new Book("概率论基础教程", "机械工业出版社", new MyDate(2005,12,26));
     50         aBook.addAuthor("Sheldon Ross");
     51         lib.addBook(aBook);
     52 
     53 
     54 
     55 
     56         result= lib.toString()+"
    "+lib.listAllBooks();
     57         
     58         mybox.addWindowListener(new WindowAdapter()
     59         {
     60             public void windowClosing(WindowEvent e)
     61             {System.exit(0);}
     62         });
     63     }
     64 }
     65 
     66 class Board extends JFrame implements ActionListener//主面板
     67 {
     68     public static final int Width=300;
     69     public static final int Height=200;
     70     String proList[]={"编号","书名","作者","出版社"};
     71     JTextField keywd;
     72     static JTextArea state_text;
     73     static JTextArea result_text;
     74     static int flg=0;//类变量标记录入/修改
     75     JComboBox comboBox;
     76     JButton submit,record,delete,change;
     77     JLabel keyword,type;
     78     public Board()
     79     {
     80         setSize(Width,Height);
     81         setTitle("图书馆");
     82         Container conPane=getContentPane();
     83         conPane.setLayout(new FlowLayout());
     84         
     85         comboBox=new JComboBox(proList);
     86         type=new JLabel("查询类别");
     87         conPane.add(type);
     88         conPane.add(comboBox);
     89 
     90         keyword=new JLabel("检索关键字");
     91         keywd=new JTextField(10);
     92         conPane.add(keyword);
     93         conPane.add(keywd);
     94 
     95         submit=new JButton("检索");
     96         submit.addActionListener(this);
     97         conPane.add(submit);
     98 
     99         record=new JButton("录入");
    100         record.addActionListener(this);
    101         conPane.add(record);
    102 
    103         delete=new JButton("删除");
    104         delete.addActionListener(this);
    105         conPane.add(delete);
    106 
    107         change=new JButton("修改");
    108         change.addActionListener(this);
    109         conPane.add(change);
    110 
    111         state_text=new JTextArea(5,20);
    112         state_text.setLineWrap(true);
    113         conPane.add(state_text);
    114 
    115         result_text=new JTextArea(20,40);
    116         result_text.setLineWrap(true);
    117         conPane.add(result_text);
    118         conPane.setVisible(true);
    119 
    120         this.setVisible(true);
    121         this.pack();
    122     }
    123     
    124     public void actionPerformed(ActionEvent e)
    125     {
    126         if(e.getSource()==submit)
    127         {
    128             String state="以关键字 "+comboBox.getSelectedItem().toString()+" 查询:"+"
    ";
    129             state += "您输入的关键字为: "+keywd.getText();
    130             state_text.setText(state);
    131             String search_result="";
    132             search_result+="以下是您要查找的书:"+"
    ";
    133             if(comboBox.getSelectedIndex()==0)
    134             {
    135                 search_result+=Gui.lib.listBooksWithNum(Integer.parseInt(keywd.getText()));
    136             }
    137             else if(comboBox.getSelectedIndex()==1)
    138             {
    139                 search_result+=Gui.lib.listBooksWithTitle(keywd.getText());
    140             }
    141             else if(comboBox.getSelectedIndex()==2)
    142             {
    143                 search_result+=Gui.lib.listBooksWithAuthor(keywd.getText());
    144             }
    145             else if(comboBox.getSelectedIndex()==3)
    146             {
    147                 search_result+=Gui.lib.listBooksWithPublisher(keywd.getText());
    148             }
    149             result_text.setText(search_result);
    150         }
    151 
    152         if(e.getSource()==record)
    153         {
    154             MyDialog recording=new MyDialog(this,"录入");
    155             flg=1;
    156             recording.setVisible(true);
    157         }
    158         else if(e.getSource()==delete)
    159         {
    160             DeDialog deleting=new DeDialog(this,"删除");
    161             deleting.setVisible(true);
    162         }
    163         else if(e.getSource()==change)
    164         {
    165             MyDialog changing=new MyDialog(this,"修改");
    166             flg=2;
    167             changing.setVisible(true);
    168         }
    169     }
    170     public static void returnName(String s)
    171     {
    172         state_text.setText(s);
    173         result_text.setText("现在图书馆里有的书: "+"
    "+Gui.result);
    174     }
    175 }
    176 class MyDialog extends JDialog implements ActionListener//录入、修改的对话框
    177 {
    178     JLabel title,author,publisher,date;
    179     JTextField text_title,text_author,text_publisher,text_date_year,text_date_month,text_date_day;
    180     JButton done;
    181     MyDialog(JFrame F,String s)
    182     {
    183         super(F,s,true);
    184         Container con=this.getContentPane();
    185         con.setLayout(new FlowLayout()); 
    186         setModal(false);
    187         done=new JButton("确定");
    188         done.addActionListener(this);
    189 
    190         title=new JLabel("书名");
    191         text_title=new JTextField(10);
    192         text_title.setEditable(true);
    193         con.add(title);
    194         con.add(text_title);
    195         
    196         author=new JLabel("作者");
    197         text_author=new JTextField(10);
    198         text_author.setEditable(true);
    199         con.add(author);
    200         con.add(text_author);
    201 
    202         publisher=new JLabel("出版社");
    203         text_publisher=new JTextField(10);
    204         text_publisher.setEditable(true);
    205         con.add(publisher);
    206         con.add(text_publisher);
    207 
    208         date=new JLabel("出版日期(年/月/日)");
    209         con.add(date);
    210 
    211         text_date_year=new JTextField(3);
    212         text_date_year.setEditable(true);
    213         con.add(text_date_year);
    214 
    215         text_date_month=new JTextField(3);
    216         text_date_month.setEditable(true);
    217         con.add(text_date_month);
    218 
    219         text_date_day=new JTextField(3);
    220         text_date_day.setEditable(true);
    221         con.add(text_date_day);
    222 
    223         con.add(done);
    224         con.setVisible(true);
    225         this.pack();
    226     }
    227     public void actionPerformed(ActionEvent e)
    228     {
    229         if(Board.flg==1)//录入
    230         {
    231             MyDate aDate=new MyDate(Integer.parseInt(text_date_year.getText()),
    232                 Integer.parseInt(text_date_month.getText()),Integer.parseInt(text_date_day.getText()));
    233             Book aBook=new Book(text_title.getText(),text_publisher.getText(), aDate);            aBook.addAuthor(text_author.getText());
    234             Gui.lib.addBook(aBook);
    235             Gui.result= Gui.lib.toString()+"
    "+Gui.lib.listAllBooks();
    236             Board.returnName("您已添加 "+"
    "+aBook.toString()+" 到图书馆中");
    237         }
    238         else if(Board.flg==2)//修改
    239         {
    240             MyDate aDate=new MyDate(Integer.parseInt(text_date_year.getText()),
    241                 Integer.parseInt(text_date_month.getText()),Integer.parseInt(text_date_day.getText()));
    242             String s=Gui.lib.modifyBook(text_title.getText(),text_author.getText(),text_publisher.getText(),aDate);
    243             Gui.result= Gui.lib.toString()+"
    "+Gui.lib.listAllBooks();
    244             Board.returnName(s);
    245         }
    246         setVisible(true);
    247         dispose();
    248     }
    249 }
    250 class DeDialog extends JDialog implements ActionListener//删除的对话框
    251 {
    252     JLabel title;
    253     static JTextField text_title;
    254     JButton done;
    255     DeDialog(JFrame F, String s)
    256     {
    257         super(F,s,true);
    258         Container con=this.getContentPane();
    259         con.setLayout(new FlowLayout());
    260         con.setSize(300,500);
    261         setModal(false);
    262         done=new JButton("确定");
    263         done.addActionListener(this);
    264 
    265         title=new JLabel("书名");
    266         text_title=new JTextField(10);
    267         text_title.setEditable(true);
    268         con.add(title);
    269         con.add(text_title);
    270         
    271         con.add(done);
    272         con.setVisible(true);
    273         this.pack();
    274     }
    275     public void actionPerformed(ActionEvent e)
    276     {        
    277         String s=Gui.lib.removeBook(DeDialog.text_title.getText());
    278         Gui.result= Gui.lib.toString()+"
    "+Gui.lib.listAllBooks();
    279         Board.returnName(s);    
    280         setVisible(true);
    281         dispose();
    282         
    283     }
    284 }
    Gui.java

    学习过程的参考资料:

    Java语言程序设计/郑莉/清华大学出版社

      微学苑Java教程 http://www.weixueyuan.net/view/6055.html

  • 相关阅读:
    【译】可扩展前端2  —  常见模式
    【译】可扩展前端1  —  架构基础
    【译】The Clean Architecture
    获取页面元素位置
    vue高价组件的使用
    gif动态图片转精灵图
    消除 transition 闪屏
    移动端 -- 如何去掉元素被触摸时产生的半透明灰色遮罩?
    解决手机移动端触屏版web页面长时间按住页面出现闪退的问题
    移动端滑动慢,卡顿
  • 原文地址:https://www.cnblogs.com/helenawang/p/4444734.html
Copyright © 2020-2023  润新知