目录

1、简介
2、代码
(1)ManageSystem类
(2)book类
3、测试程序运行结果截图
(1)登录和创建
(2)输出
(3)查找
(4)插入
(5)删除
(6)修改
(7)排序
(8)计数
(9)导出
(10)读入
(11)菜单
4、存在的问题与思考
基于线性表的图书管理系统 1、项目简介
顺序表是线性表的顺序存储结构,是指用一组连续的存储单元依次存放线性表的数据元素。在顺序存储结构下,逻辑关系相邻的两个元素在物理位置上也相邻,这是顺序表的特点。
顺序表适宜于做查找这样的静态操作,顺序存储的优点是存储密度大,存储空间利用率高。缺点是插入或删除元素时不方便,需要移动大量元素o(n),预先分配空间需按大空间分配,利用不充分,表容量难以扩充。
要完成这个题目,主要是建立图书信息的存储。本项目采用线性表的顺序存储结构。以图书信息为例,本项目的数据是一组图书信息,每条图书信息由图书ISBN号、图书名称、作者名称、出版社名称等信息组成,这组图书信息具有相同特性,属于同一数据对象,相邻元素之间存在序偶关系,这些数据具有线性表中数据元素的性质,所以该系统的数据采用线性表来存储。本图书管理系统分为两个结构体,一个是图书结构体,用于存放图书的基本信息,另一个是图书管理结构体,实现管理图书的功能。图书的存储结构用ArrayList实现。
具体存储操作:在ManageSystem类中获取一本书籍的具体信息,通过book类初始化方法实例化为一个book实例,然后存入ManageSystem类中的ArrayList列表中。
2、项目代码 (1)ManageSystem类package dataStructure;
import java.io.*;
import java.util.*;
public class ManageSystem {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        ArrayListlibrary = new ArrayList<>();
        // 判断登录是否成功
        String LibName = null;
        boolean login = false;
        String[] admin = {"a","b","c","d"};
        String[] password = {"a","b","c","d"};
        while (!login){
            System.out.print("请输入图书管理系统名字:");
             LibName = sc.nextLine();
            System.out.print("请输入图书管理系统密码:");
            String LibPW = sc.nextLine();
            for (String s: admin){
                if (s.equals(LibName) && password[Arrays.binarySearch(admin,s)].equals(LibPW)){
                    library=create();
                    System.out.println("登录成功!当前图书管理系统:"+LibName);
                    System.out.println();
                    login=true;
                }
            }
            if (!login) System.out.println("登录失败!账号或密码有误,请重新输入!");
        }
        boolean exist = true;
        while(exist){
            System.out.println("当前图书管理系统:"+LibName);
            System.out.println(
                    "1、输出图书信息表\n"+
                            "2、查找图书\n"+
                            "3、插入图书信息\n"+
                            "4、删除图书信息\n"+
                            "5、修改指定图书信息\n"+
                            "6、图书排序\n"+
                            "7、图书数量统计\n"+
                            "8、导出图书信息\n"+
                            "9、读入图书信息\n");
            System.out.print("请输入你的选择(输入-1退出系统):");
            if (!sc.hasNextInt()) {
                String string = sc.next();
                System.out.println("输入有误!");
                System.out.println();
            }else {
                int how = sc.nextInt();
                switch(how){
                    case -1:
                        exist = false;
                        break;
                    case 1://显示:输出
                        output(library);
                        break;
                    case 2: //根据ISBN或书名查找图书
                        search(library);
                        break;
                    case 3: //插入
                        book insert = insert();
                        library.add(insert);
                        break;
                    case 4: //根据ISBN号删除图书信息
                        library = delete(library);
                        break;
                    case 5: //根据ISBN修改价格
                        change(library);
                        break;
                    case 6://按照价格排序
                        compare(library);
                        break;
                    case 7: //计数
                        System.out.println("图书馆内一共有" + calculate(library) + "册图书。");
                        break;
                    case 8: //导出
                        try{
                            outputData(library);
                        } catch (IOException e){}
                        break;
                    case 9: //读入
                        try{
                            library=importData(library);
                        } catch (IOException e){}
                        break;
                }
                System.out.println();
            }
        }
    }
    public static ArrayListcreate(){
        ArrayListlibrary = new ArrayList<>();
        printTitle();
        return library;
    }
    public static void output(ArrayListlibrary){
        printTitle();
        for(book b: library){
            printContent(b);
        }
    }
    public static void search(ArrayListlibrary){
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入您想查询的书籍的ISBN号或名称:");
        String search = sc.nextLine();
        boolean flag = false;
        for(book b : library) {//原本判断条件里面有break,但是考虑到可能有多本相同的图书入库,需要全部输出,因而删除break
            if (search.equals(b.getISBN()) || search.equals(b.getName())) {
                if (!flag){
                    System.out.println("您所查询的图书信息为:");
                    printTitle();
                    flag=true;
                }
                printContent(b);
            }
        }
        if (!flag){
            System.out.println("抱歉!未能找到您想查询的图书。");
        }
    }
    // 0000000010 微观经济学 王陆 中国人民出版社 2003-04-28 54.00 经济类 在架上
    public static book insert(){
        Scanner sc = new Scanner(System.in);
        printTitle();
        System.out.println("请输入新增的书籍的具体信息:");
        String all = sc.nextLine();
        String[] content = all.split(" ");
        book a = new book(content[0],content[1],content[2],content[3],content[4],Double.parseDouble(content[5]),content[6],content[7]);
        System.out.println("书籍加入成功!");
        return a;
    }
    public static ArrayListdelete(ArrayListlibrary) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入您想删除的书籍的ISBN号:");
        String delete = sc.nextLine();
        boolean flag = false;
        for (int i = 0; i< library.size(); i++) {
            book b = library.get(i);
            if (delete.equals(b.getISBN()) && b.getIson().equals("在架上")) {
                printTitle();
                printContent(b);
                library.remove(i);
                flag = true;
                System.out.println("删除成功!");
                break;
            }
        }
        if (!flag) {
            System.out.println("删除失败!失败原因可能有:1、未能找到您想删除的图书;2、该书不在架上。");
        }
        return library;
    }
    public static ArrayListchange(ArrayListlibrary){
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入您想修改价格的图书的ISBN号:");
        String ISBN = sc.nextLine().trim();
        double c = 0;
        boolean right = true;
        for(book a: library){
            if(ISBN.equals(a.getISBN())){
                if (right){
                    System.out.print("请输入修改的价格:");
                    c = sc.nextDouble();
                    right = false;
                }
                a.setPrice(c);
            }
        }
        if(right){
            System.out.println("对不起,找不到您想修改的图书。");
        }
        else {
            System.out.println("修改成功!");
        }
        return library;
    }
    public static void compare(ArrayListlibrary){
        ArrayListcpLibrary = new ArrayList<>(library.size());
        for (book o:library) cpLibrary.add(o);
        cpLibrary.sort(book::compareTo);
        output(cpLibrary);
    }
    public static int calculate(ArrayListlibrary){
        return library.size();
    }
    public static void outputData(ArrayListlibrary) throws IOException {
        File file = new File("book.txt");
        if (file.exists()){
            file.delete();
        }
        file.createNewFile();
        OutputStream fos = new FileOutputStream(file);
        for (book a:library) {
            String str = a.getISBN()+"\t"+a.getName()+"\t"+a.getAuthor()+"\t"+a.getPublish()+"\t"+a.getDate()+"\t"+a.getPrice()+"\t"+a.getType()+"\t"+a.getIson()+"\n";
            fos.write(str.getBytes("UTF-8"));
        }
        fos.close();
        System.out.println("已成功输出至book.txt文件。");
    }
    public static ArrayListimportData(ArrayListlibrary) throws IOException {
        File file = new File("book.txt");
        FileInputStream fis = new FileInputStream(file);
        InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
        BufferedReader br = new BufferedReader(isr);
        String len;
        while((len = br.readLine()) != null) {
            String[] content = len.split("\t");
            book a = new book(content[0],content[1],content[2],content[3],content[4],Double.parseDouble(content[5]),content[6],content[7]);
            library.add(a);
        }
        fis.close();
        System.out.println("已成功导入。");
        return library;
    }
    public static void printTitle(){
        String[] title = {"ISBN","书籍名称","作者","出版社","出版日期","价格","类型","状态"};
        for(int i=0;i               package dataStructure;
public class book implements Comparable{
    private String ISBN;
    private String name;
    private String author;
    private String publish;
    private String date;
    private double price;
    private String type;
    private String ison;
    public String getISBN() {
        return ISBN;
    }
    public void setISBN(String ISBN) {
        this.ISBN = ISBN;
    }
    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 String getPublish() {
        return publish;
    }
    public void setPublish(String publish) {
        this.publish = publish;
    }
    public String getDate() {
        return date;
    }
    public void setDate(String date) {
        this.date = date;
    }
    public double getPrice() {
        return price;
    }
    public void setPrice(double price) {
        this.price = price;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public String getIson() {
        return ison;
    }
    public void setIson(String ison) {
        this.ison = ison;
    }
    public book(String ISBN,String name,String author,String publish,String date,double price,String type,String ison){
        this.ISBN = ISBN;
        this.name = name;
        this.author = author;
        this.publish = publish;
        this.date = date;
        this.price = price;
        this.type = type;
        this.ison = ison;
    }
    public int compareTo(book o){
        return Double.compare(getPrice(), o.getPrice());
    }
} | ISBN | name | author | publish | date | price | type | ison | 
| 0000000001 | 大学计算机基础 | 陈建勋 | 高等教育出版社 | 2007-08-10 | 58.00 | 计算机类 | 在架上 | 
| 0000000002 | C语言 | 王远林 | 电子工业出版社 | 2000-04-12 | 48.00 | 计算机类 | 已借阅 | 
| 0000000003 | 组织行为学 | 刘烨 | 中国人民出版社 | 1997-09-28 | 76.00 | 管理类 | 在架上 | 
| 0000000004 | 管理学 | 高敏 | 清华大学出版社 | 2020-05-01 | 57.00 | 管理类 | 已借阅 | 
| 0000000005 | 统计学 | 贺天 | 北京大学出版社 | 2018-03-23 | 38.00 | 数统类 | 正在订购 | 
| 0000000006 | 概率论 | 李毅 | 中国工业出版社 | 2004-05-16 | 39.00 | 数统类 | 在架上 | 
| 0000000007 | 糖尿病的正确饮食 | 钟娅 | 中国轻工出版社 | 2020-10-01 | 89.00 | 医学类 | 在架上 | 
| 0000000008 | 人体构造 | 黄远 | 河北科学出版社 | 2016-08-13 | 99.00 | 医学类 | 正在订购 | 
| 0000000009 | 宏观经济学 | 刘叶 | 清华大学出版社 | 2015-03-10 | 67.00 | 经济类 | 正在订购 | 
| 0000000010 | 微观经济学 | 王陆 | 中国人民出版社 | 2003-04-28 | 54.00 | 经济类 | 已借阅 | 
| 0000000010 | 微观经济学 | 王陆 | 中国人民出版社 | 2003-04-28 | 54.00 | 经济类 | 已借阅 | 







(7)排序
 (8)计数
(8)计数



(1)没有考虑完整异常情况:由于时间原因,在编写代码的时候基本只考虑了输入正确的情况,除了文件导入导出外没有考虑异常情况的处理(try-catch)。但是在代码编写过程中,尽量把可以考虑的情况考虑进去,如在执行功能选择switch语句前,判断输入是否为整数,如果不为整数就输出报错,输入为整数才获取输入,进入switch语句,尽可能保持无异常情况的发生。
(2)功能不够丰富:由于时间原因,完成了基本的要求后只增加了登录功能,其余都是在原有代码基础上进行修改,使得交互更加舒适。
(3)交互效果有待提高:由于没有时间将系统以可视化的方式展现,希望能够在命令行的演示下尽量提高交互效果。在调整交互效果的过程中除了加入很多提示信息,修改图书信息表示方式(尽量模仿表格方式)外,在适当的地方加入了空行以达到分割显示的效果。
(4)没能活用现有类对程序进行简化:我们在考虑“图书出版日期”这一属性时,曾经考虑过采用Date类进行记录,但是由于它的toString方法是转换成一个16进制的数值字符串,不方便在别的方法中进行调用,所以我们直接采用了String类进行记录。但这样不利于后期的改进,对于一些时间记录上的处理也会更麻烦。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
网页标题:基于线性表的图书管理系统(java)-创新互联
网页网址:http://www.scyingshan.cn/article/dgpiid.html

 建站
建站
 咨询
咨询 售后
售后
 建站咨询
建站咨询 
 