我的编程空间,编程开发者的网络收藏夹
学习永远不晚

《Java》图书管理系统(已升级)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

《Java》图书管理系统(已升级)

目录

前言

效果展示

 功能模块

书架

定义书的类

 创建书架

 用户

User用户类

AdminUser管理员

NormalUser普通用户 

 功能

接口

FindOperation 查找图书

 AddOperation添加图书

 DelOperation删除图书

BorrowOperation借阅图书 

DisOperation 打印图书 

 RetOperation归还图书

 ExitOperation退出系统

 整合

 总结

升级 

源码 (更新后的)

BookList

Book        

BookList

Main

Main

Operation

IOperation

AddOperation

BorrowOperation

DelOperation

DisOperation

ExitOperation

FindOperation

FindType

Notice

RetOperation

Finishing

user

User

Administratoruser

Ordinaryuser


 这是一个对于Java中知识点的类,抽象类,封装,继承,多态,接口等进行的一个简单的代码练习,对于实际的图书管理系统还需要一点的优化


前言

效果展示

我们先来看看效果

首先是我们的管理员端:

 再下是我们的普通用户端:

 功能模块

 我们先试着模块化出来功能合计

简单的登录

管理端

  ·查阅图书

  ·增加图书

  ·删除图书

  ·打印图书

  ·退出系统

用户端

  ·查阅图书

  ·借阅图书

  ·归还图书

  ·退出

 我们先将类中的功能创建好 

 IOperation为我们所有功能的接口 很多童鞋就疑惑为何要这么做,我们直接将其定义到一个类中不可以吗,答案是可以的!,但是我们为了链接知识点 所以将其进行分化!

书架

定义书的类

我们先来定义一个书的类,首先一本书有书名、作者、价格、类型以及是否已被借出

​public class Book {    private String name;//书名    private String  author;//作者    private int price;//价格    private String type;//类型    private boolean isBorrwed;//是否借出}​

因为这些都是private类型 所以我们还需要提供一个方法来提供给使用者来调用

教大家快捷方法为Alt+Insert

 

​  public Book(String name, String author, int price, String type) {        this.name = name;        this.author = author;        this.price = price;        this.type = type;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getAuthor() {        return author;    }    public void setAuthor(String author) {        this.author = author;    }    public int getPrice() {        return price;    }    public void setPrice(int price) {        this.price = price;    }    public String getType() {        return type;    }    public void setType(String type) {        this.type = type;    }    public boolean isBorrwed() {        return isBorrwed;    }    public void setBorrwed(boolean borrwed) {        isBorrwed = borrwed;    }    @Override    public String toString() {        return "book{" +                "  书名='" + name + '\'' +                ", 作者='" + author + '\'' +                ", 价格=" + price +                ", 类型='" + type + '\'' +                ((isBorrwed==true)?", 已被借出":", 未被借出") +                '}';    }​

 创建书架

 我们创建一个BookList类当做书架,用来存放我们的书籍

​public class BookList {    private Book[] books=new Book[10];    private int BookSize;    public  BookList(){        books[0]=new Book("三国演义","罗贯中",17,"小说");        books[1]=new Book("西游记","吴承恩",47,"小说");        books[2]=new Book("水浒传","施耐庵",37,"小说");        this.BookSize=3;    }    public int getBookSize() {        return BookSize;    }    public void setBookSize(int bookSize) {        BookSize = bookSize;    }        public Book getpos(int pos){        return books[pos];    }        public void setBooks(int pos,Book book){        this.books[pos]=book;    }}​

 我们现在可以看到已经对书架进行了初始化,现在书架上的书有三国演义、西游记、水浒传

 用户

User用户类

我们要使用User来实现多态继承

public abstract class User {    protected String name;    protected IOperation[] iOperations;    public User(String name){        this.name=name;    }    public abstract int menu();    public void dowork(int choice, BookList bookList){        iOperations[choice].work(bookList);    }}

AdminUser管理员

管理员要实现的功能为查找、新增、删除、打印、退出系统

public class AdminUser extends User{    public AdminUser(String name){        super(name);        this.iOperations =new IOperation[]{                new Exitoperation(),                new Findoperation(),                new Addoperation(),                new Deloperation(),                new Displayoperation()        };    }    public int menu(){        System.out.println("=======管理员菜单=======");        System.out.println("Hai!"+this.name+" 欢迎来到图书馆");        System.out.println("1.查找图书");        System.out.println("2.新增图书");        System.out.println("3.删除图书");        System.out.println("4.显示图书");        System.out.println("0.退出系统");        System.out.println("====================");        Scanner scanner=new Scanner(System.in);        return scanner.nextInt();    }}

 AdminUser类继承了User用户类,并且实现了管理员对应的功能

NormalUser普通用户 

 普通用户要实现的功能为查找、借阅、归还、退出系统

public class NormalUser extends User {    public NormalUser(String name){        super(name);        this.iOperations =new IOperation[]{                new Exitoperation(),                new Findoperation(),                new Borrowoperation(),                new Retoperation()        };    }    public int menu(){        System.out.println("=======用户菜单=======");        System.out.println("Hai!"+this.name+" 欢迎来到图书馆");        System.out.println("1.查找图书");        System.out.println("2.借阅图书");        System.out.println("3.归还图书");        System.out.println("0.退出系统");        System.out.println("====================");        Scanner scanner=new Scanner(System.in);        return scanner.nextInt();        }    }

 功能

接口

public interface IOperation {    Scanner scanner=new Scanner(System.in);    public void work(BookList bookList);}

FindOperation 查找图书

 我们此功能实现是非常简单的,保存好用户要查找的图书并且使用类name.equals()来查找图书即可

public class Findoperation implements IOperation{    public void work(BookList booklist) {        System.out.println("查找图书");        System.out.println("请输入你要查找的书名");        String name=scanner.nextLine();        int size=booklist.getBookSize();        for (int i = 0; i < size; i++) {            Book book= booklist.getpos(i);            if(name.equals(book.getName())){                System.out.println("找到了你要查找的书 信息如下");                System.out.println(book);                return ;            }        }        System.out.println("没有找到你要查找的书");    }}

 AddOperation添加图书

我们要给已存在的书架加入一本书,将新书存放到顺序表之后即可

public class Addoperation implements IOperation{    public void work(BookList booklist) {        System.out.println("添加图书");        System.out.println("请输入图书的名字");        String name=scanner.nextLine();        System.out.println("请输入图书的作者");        String author=scanner.nextLine();        System.out.println("请输入图书的类别");        String type=scanner.nextLine();        System.out.println("请输入图书的价格");        int price=scanner.nextInt();        Book book=new Book(name,author,price,type);        int size=booklist.getBookSize();        booklist.setBooks(size,book);        booklist.setBookSize(++size);        System.out.println("新增图书成功");    }}

 需要注意的地方是我们一定要切记添加图书后记得要改变bookSize的值

 DelOperation删除图书

此功能的实现与查找类似,在查找的基础上增加了删除,需要用到的知识点为顺序表的删除,删除需要将后续的书前移,并且将最后一个置为 空

public class Deloperation implements IOperation{    public void work(BookList booklist) {        System.out.println("删除图书");        System.out.println("请输入要删除的图书的名字");        String name=scanner.nextLine();        int size= booklist.getBookSize();        for (int i = 0; i < size; i++) {            Book book= booklist.getpos(i);            if(name.equals(book.getName())){                while(i

 切记将书架的最后一位置为空避免泄露,需要注意到的还是要将bookSize的值进行修改

BorrowOperation借阅图书 

首先利用查找的原理找到我们要寻找的书,找到后修改其状态即可

public class Borrowoperation implements IOperation {    public void work(BookList booklist) {        System.out.println("借阅图书");        System.out.println("请输入你要借的书名");        String name=scanner.nextLine();        int size=booklist.getBookSize();        for (int i = 0; i 

需要注意的是记得将要借阅的书类型修改为true 

DisOperation 打印图书 

按照顺序表原理依次打印即可

public class Displayoperation implements IOperation{    public void work(BookList booklist) {        System.out.println("打印图书");        int size= booklist.getBookSize();        for (int i = 0; i < size; i++) {            Book book= booklist.getpos(i);            System.out.println(book);        }    }}

 RetOperation归还图书

 首先要查找书库是否存在此书,如果存在将其类型修改为false

public class Retoperation implements IOperation{    public void work(BookList booklist) {        System.out.println("归还图书");        System.out.println("请输入你要归还的书名");        String name=scanner.nextLine();        int size=booklist.getBookSize();        for (int i = 0; i 

 ExitOperation退出系统

退出系统

public class Exitoperation implements IOperation{    public void work(BookList booklist) {        System.out.println("退出系统");        System.exit(0);    }}

 整合

我们需要使用Main来将所有的功能进行串联

public class Main {    public static User login(){        System.out.println("请输入你的姓名");        Scanner scanner=new Scanner(System.in);        String name=scanner.next();        System.out.println("请输入你的身份 1--》管理员 0--》普通用户");        int choice=scanner.nextInt();        if(choice==1){            return new AdminUser(name);        }else if(choice==0) {            return new NormalUser(name);        }        else {            System.out.println("输入错误,退出系统");            return null;        }    }    public static void main(String[] args) {        BookList bookList=new BookList();        User user=login();//发生了向上转型        while(true){        int choice=user.menu();//发生了动态绑定 多态        //根据choice调用合适的操作        user.dowork(choice,bookList);    }    }}

 我们来看一下代码写完之后的所有文件

 总结

我们现在实现的还是比较简易的,后期将结合MySQL来进行优化,并且在代码实现中也有很多业务上的处理没有实现,后期将会进行修正,感谢大家的支持

升级 

        我们对本图书馆进行了升级,升级内容如下

 管理员系统:

用户系统:

 

升级后的目录

对于其他的升级都是次要的 ,来重点讲解一下使用类型排序,首先我们分析到对于数据的排序是使用到方法Arrays.sort(),但是对于我们Book的排序呢,首先我深入研究了一下sort排序内部,发现 他是在依靠c来实现排序

以下代码为JDK内置排序原码 

    public static  void sort(T[] a, int fromIndex, int toIndex,    Comparator c) {        if (c == null) {            sort(a, fromIndex, toIndex);        } else {            rangeCheck(a.length, fromIndex, toIndex);            if (LegacyMergeSort.userRequested)                legacyMergeSort(a, fromIndex, toIndex, c);            else                TimSort.sort(a, fromIndex, toIndex, c, null, 0, 0);        }    }

我们进入Comparator来观察一下

 

我们发现它是一个接口  我来给大家解读一下

Compares its two arguments for order. Returns a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.

比较它的两个参数的顺序。当第一个参数小于、等于或大于第二个参数时,返回一个负整数、零或正整数。

我们可以得到 这个接口为一个公共接口比较器,所以我们可以得到,通过类接入接口我们就可以做一个属于自己的比较器!有了以上分析 开搞

class A implements Comparator {    @Override    public int compare(Book o1, Book o2) {       int a= o1.getType().compareTo(o2.getType());       return a;    }}

搞好这个比较器类型就可以实现一下我们的图书整理功能了(使用书的其他类型也可以实现,可以加入多个比较器)

public class Finishing implements IOperation{    @Override    public void work(BookList booklist) {        A a=new A();        System.out.println("整理图书(按照类型)");        Arrays.sort(booklist.books,0,booklist.getBookSize(),a);        System.out.println("整理完成!");    }}

这样便实现了我们的图书整理功能,再接入给管理员用户就可以使用啦

ps:其他功能实现起来非常简单,稍加分析即可写入 就不做讲解了,很多老铁想让我发一下所有源码,满足老铁们

源码 (更新后的)(绿色为包名,紫色为类,橙色为接口)

BookList

Book        

package BoolList;public class Book {    private String name;//书名    private String author;//作者    private String type;//类型    private int price;//价格    private boolean isBorrwed;//状态    public Book(String name, String author, int price , String type ) {        this.name = name;        this.author = author;        this.type = type;        this.price = price;    }    public String getType() {        return type;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public boolean isBorrwed() {        return isBorrwed;    }    public void setBorrwed(boolean borrwed) {        isBorrwed = borrwed;    }    @Override    public String toString() {        return "Book{" +                "name='" + name + '\'' +                ", author='" + author + '\'' +                ", type='" + type + '\'' +                ", price=" + price +                (isBorrwed==true?"已被借出":"未被借出")+                '}';    }}

BookList

package BoolList;public class BookList {    public Book[] books=new Book[10];    private int BookSize=0;    public BookList() {        books[0]=new Book("三国演义","罗贯中",17,"小说");        books[1]=new Book("西游记","吴承恩",47,"小说");        books[2]=new Book("水浒传","施耐庵",37,"小说");        BookSize=3;    }    public void setBooks(int pos,Book books) {        this.books[pos]=books;    }    public Book getBooks(int pos) {        return books[pos];    }    public int getBookSize() {        return BookSize;    }    public void setBookSize(int bookSize) {        BookSize = bookSize;    }}

Main

Main

package Main;import BoolList.Book;import BoolList.BookList;import User.*;import java.util.Scanner;public class Main {    public static User func(){        System.out.println("欢迎来到冰激凌图书馆!");        System.out.println("请问怎么称呼您?");        Scanner scanner=new Scanner(System.in);        String name=scanner.nextLine();        System.out.println("请问您的身份为?  1-》管理员 0-》普通用户");        int usersize=scanner.nextInt();        if(usersize==1){            return new Administratoruser(name);        }else {            return new Ordinaryuser(name);        }    }    public static void main(String[] args) {        Needtoknow();        BookList bookList=new BookList();        User user=func();        while(true){            int count=user.mune();            user.dowork(count,bookList);        }    }    public static void Needtoknow(){        System.out.println("**************************");        System.out.println("        入馆需知(新)");        System.out.println("本图书馆开放时间为9.00-24.00");        System.out.println("**************************");    }}

Operation

IOperation

import BoolList.BookList;public interface IOperation {    public void work(BookList booklist);}

AddOperation

package Operation;import BoolList.Book;import BoolList.BookList;import java.util.Scanner;public class AddOperation implements IOperation {    @Override    public void work(BookList booklist) {        System.out.println("新增图书");        System.out.println("请输入图书的名字");        Scanner scanner=new Scanner(System.in);        String name=scanner.nextLine();        System.out.println("请输入图书的作者");        String author=scanner.nextLine();        System.out.println("请输入图书的类别");        String type=scanner.nextLine();        System.out.println("请输入图书的价格");        int price=scanner.nextInt();        Book book=new Book(name,author,price,type);        int size=booklist.getBookSize();        booklist.setBooks(size,book);        booklist.setBookSize(++size);        System.out.println("新增图书成功");    }}

BorrowOperation

package Operation;import BoolList.BookList;import java.util.Scanner;public class BorrowOperation implements IOperation{    @Override    public void work(BookList booklist) {        System.out.println("借阅图书");        System.out.println("请输入你要借阅的书名  例如:三国演义");        Scanner scanner=new Scanner(System.in);        String name=scanner.nextLine();        int siz=booklist.getBookSize();        for (int i = 0; i < siz; i++) {            if(name.equals(booklist.getBooks(i).getName())){                booklist.getBooks(i).setBorrwed(true);                System.out.println("成功借阅 ,现在图书信息如下:");                System.out.println(booklist.getBooks(i));                return ;            }        }        System.out.println("未找到你要查找的书!!!");    }}

DelOperation

package Operation;import BoolList.Book;import BoolList.BookList;import java.util.Scanner;public class DelOperation implements IOperation{    @Override    public void work(BookList booklist) {        System.out.println("删除图书");        System.out.println("请输入你要删除的书名  例如:三国演义");        Scanner scanner=new Scanner(System.in);        String name=scanner.nextLine();        for (int i = 0; i < booklist.getBookSize();i++) {            if(name.equals(booklist.getBooks(i).getName())){                while(i

DisOperation

package Operation;import BoolList.Book;import BoolList.BookList;public class DisOperation implements IOperation{    @Override    public void work(BookList booklist) {        System.out.println("打印图书");        int ret= booklist.getBookSize();        for (int i = 0; i 

ExitOperation

package Operation;import BoolList.Book;import BoolList.BookList;public class ExitOperation implements IOperation{    @Override    public void work(BookList booklist) {        System.out.println("退出登录");        System.exit(0);    }}

FindOperation

package Operation;import BoolList.Book;import BoolList.BookList;import java.util.Scanner;public class FindOperation implements IOperation{    @Override    public void work(BookList booklist) {        System.out.println("查询图书");        System.out.println("请输入你要查找的书名  例如:三国演义");        Scanner scanner=new Scanner(System.in);        String name=scanner.nextLine();        for (int i = 0; i 

FindType

package Operation;import BoolList.BookList;import java.util.Scanner;public class FindType implements IOperation{    @Override    public void work(BookList booklist) {        System.out.println("查询图书(类型查找)");        System.out.println("请输入你要查找的类型  例如:小说");        Scanner scanner=new Scanner(System.in);        String name=scanner.nextLine();        int flg=0;        System.out.println("查找信息如下:");        for (int i = 0; i 

Notice

package Operation;import BoolList.BookList;import java.util.Scanner;public class Notice implements IOperation{    @Override    public void work(BookList booklist) {        System.out.println("*****************************");        System.out.println("图书馆通知栏:");        System.out.println("热烈祝贺二十大的召开!");        System.out.println("国家图书馆第十八届文津图书奖正式启动");        System.out.println("本图书馆开放时间为9.00-24.00");        System.out.println("*****************************");    }}

RetOperation

package Operation;import BoolList.Book;import BoolList.BookList;import java.util.Scanner;public class RetOperation implements IOperation{    @Override    public void work(BookList booklist) {        System.out.println("归还图书");        System.out.println("请输入你要归还的书名  例如:三国演义");        Scanner scanner=new Scanner(System.in);        String name=scanner.nextLine();        for (int i = 0; i 

Finishing

package Operation;import BoolList.Book;import BoolList.BookList;import java.util.Arrays;import java.util.Comparator;class A implements Comparator {    @Override    public int compare(Book o1, Book o2) {       int a= o1.getType().compareTo(o2.getType());       return a;    }}public class Finishing implements IOperation{    @Override    public void work(BookList booklist) {        A a=new A();        System.out.println("整理图书(按照类型)");        Arrays.sort(booklist.books,0,booklist.getBookSize(),a);        System.out.println("整理完成!");    }}

user

User

package User;import BoolList.Book;import BoolList.BookList;import Operation.IOperation;public abstract class User {    protected String name;    protected IOperation[] iOperations;    public User(String name) {        this.name = name;    }    public abstract int mune();    public void dowork(int pos, BookList book){        iOperations[pos].work(book);    }}

Administratoruser

package User;import Operation.*;import java.util.Scanner;public class Administratoruser extends User{    public Administratoruser(String name) {        super(name);        this.iOperations= new IOperation[]{                new ExitOperation(),                new FindOperation(),                new FindType(),                new AddOperation(),                new DelOperation(),                new DisOperation(),                new Finishing()        };    }    @Override    public int mune() {        System.out.println("hello 尊敬的管理员:"+this.name+" 欢迎来到冰激凌图书馆");        System.out.println("======================");        System.out.println("1.查阅图书");        System.out.println("2.类型查找(新)");        System.out.println("3.增加图书");        System.out.println("4.删除图书");        System.out.println("5.显示图书");        System.out.println("6.整理图书(新)");        System.out.println("0.退出登录");        System.out.println("======================");        System.out.println("请输入您的操作");        Scanner scanner=new Scanner(System.in);        int input=scanner.nextInt();        return input;    }}

Ordinaryuser

package User;import Operation.*;import java.util.Scanner;public class Ordinaryuser extends User {        public Ordinaryuser(String name){            super(name);            this.iOperations=new IOperation[]{                    new ExitOperation(),                    new FindType(),                    new BorrowOperation(),                    new RetOperation(),                    new Notice(),                    new DisOperation()            };        }    @Override    public int mune() {        System.out.println("=======用户菜单=======");        System.out.println("hello 尊敬用户:"+this.name+" 欢迎来到冰激凌图书馆");        System.out.println("1.查找图书(类型)(新)");        System.out.println("2.借阅图书");        System.out.println("3.归还图书");        System.out.println("4.查看通知(新)");        System.out.println("5.查看书架(新)");        System.out.println("0.退出登录");        System.out.println("====================");        System.out.println("请输入您的操作:");        Scanner scanner=new Scanner(System.in);        return scanner.nextInt();    }}

好了 !再次感谢各位支持

来源地址:https://blog.csdn.net/m0_69996872/article/details/127589425

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

《Java》图书管理系统(已升级)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

java如何实现图书管理系统

小编给大家分享一下java如何实现图书管理系统,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、背景介绍通过一段时间java编程的学习,需要一个比较综合的实例来进
2023-06-14

Java怎么实现图书管理系统

本篇内容主要讲解“Java怎么实现图书管理系统”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java怎么实现图书管理系统”吧!一、项目简述功能包括(管理员和学生角色): 管理员和学生登录,图书管
2023-06-21

怎么用Java实现图书管理系统

这篇文章主要讲解了“怎么用Java实现图书管理系统”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Java实现图书管理系统”吧!目录设计准备一、系统开发目的和意义二、系统总体设计主页:系
2023-06-20

Django之图书管理系统

出版社的增删改查 展示出版社列表:   1. 创建一个表结构:        2. 再配合那俩条命令即可创建一个press表       创建出版社函数,并在url中进行配置       创建HTML页面,展示出版社的表    for循环 
2023-01-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录