以Java为例,实现一个简单的命令行图书管理系统,包括添加图书、删除图书、查找图书等功能。

时间:2024-11-20 16:22:40
import java.util.Scanner; class Book { private String title; private String author; private String isbn; public Book(String title, String author, String isbn) { this.title = title; this.author = author; this.isbn = isbn; } // Getters and setters omitted for brevity } public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入书名:"); String title = scanner.nextLine(); System.out.println("请输入作者:"); String author = scanner.nextLine(); System.out.println("请输入ISBN编号:"); String isbn = scanner.nextLine(); Book book = new Book(title, author, isbn); // 后续步骤... } } ``` #### 1.2 将图书信息存储到文件或数据库中 一旦我们有了`Book`对象,下一步就是将其保存起来以便日后使用。这里有两种常见的方法:直接写入文本文件或者使用数据库进行管理。为了简单起见,我们这里选择前者。我们可以创建一个名为`books.txt`的文件,并将每本新添加的书籍按照一定格式写入其中。 ```java import java.io.FileWriter; import java.io.IOException; // ... 前面的代码保持不变 ... try (FileWriter writer = new FileWriter("books.txt", true)) { writer.write(book.getTitle() + "," + book.getAuthor() + "," + book.getIsbn() + " "); } catch (IOException e) { e.printStackTrace(); } ``` 请注意,上述示例仅展示了最基本的错误处理方式。实际应用中可能需要更复杂的逻辑来确保数据完整性和安全性。 ### 2. 删除图书 #### 2.1 根据书名查找图书 要删除一本书之前,首先得找到它。这意味着我们需要遍历整个`books.txt`文件,检查每一行是否匹配给定的书名。如果找到了匹配项,则记录下该行的索引位置以便稍后删除。 ```java import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; // ... 前面的代码保持不变 ... public static int findBookIndexByTitle(String title) throws IOException { List<String> lines = new ArrayList<>(); try (BufferedReader reader = new BufferedReader(new FileReader("books.txt"))) { String line; while ((line = reader.readLine()) != null) { lines.add(line); } } for (int i = 0; i < lines.size(); i++) { if (lines.get(i).startsWith(title)) { return i; } } return -1; // Not found } ``` #### 2.2 从文件或数据库中删除图书信息 一旦我们知道了要删除的书籍所在的位置,接下来就可以执行实际的删除操作了。同样地,这里以文本文件为例说明过程。我们会重新打开`books.txt`,但是这次是以覆盖模式写入除了目标行之外的所有内容。 ```java import java.io.RandomAccessFile; import java.nio.channels.FileChannel; import java.nio.channels.FileLock; // ... 前面的代码保持不变 ... public static void deleteBook(String title) { int index = findBookIndexByTitle(title); if (index == -1) { System.out.println("未找到指定书籍!"); return; } try (RandomAccessFile raf = new RandomAccessFile("books.txt", "rw"); FileChannel channel = raf.getChannel(); FileLock lock = channel.lock()) { raf.seek(0); // Move to the beginning of the file StringBuilder sb = new StringBuilder(); for (int i = 0; i < lines.size(); i++) { if (i != index) { sb.append(lines.get(i)).append(" "); } } raf.setLength(0); // Truncate the file raf.write(sb.toString().getBytes()); // Write back modified content } catch (IOException e) { e.printStackTrace(); } } ``` 请注意,上述代码片段使用了`RandomAccessFile`和`FileChannel`来实现对文件的安全访问。这样做可以防止多个进程同时修改同一个文件导致的数据竞争问题。当然,如果你打算部署到生产环境,可能还需要考虑更多因素如事务支持、并发控制等。 ### 3. 查找图书 #### 3.1 根据书名在文件或数据库中查找图书 查找功能其实已经在删除部分有所涉及,即通过遍历整个`books.txt`文件来搜索特定书名的书籍。不过,为了让这部分内容更加独立清晰,我们可以将其封装成一个单独的方法。 ```java public static Book findBookByTitle(String title) throws IOException { int index = findBookIndexByTitle(title); if (index == -1) { return null; // Not found } else { String[] parts = lines.get(index).split(","); return new Book(parts[0], parts[1], parts[2]); } } ``` #### 3.2 输出查找结果 最后一步就是向用户展示查找结果啦!根据前面的方法返回的结果,我们可以很容易地打印出相关信息。如果找到了对应的书籍,则显示其详细信息;否则提示用户没有找到匹配项。 ```java public static void displaySearchResult(String title) { try { Book book = findBookByTitle(title); if (book != null) { System.out.println("找到书籍:"); System.out.println("书名: " + book.getTitle()); System.out.println("作者: " + book.getAuthor()); System.out.println("ISBN: " + book.getIsbn()); } else { System.out.println("未找到指定书籍!"); } } catch (IOException e) { e.printStackTrace(); } } ``` --- 好了,以上就是关于如何使用Java构建一个简单的命令行图书管理系统的详细介绍。希望通过这篇博客能够激发你对编程的兴趣,并且鼓励你去尝试自己动手实现这样一个有趣的小项目。记住,实践是最好的老师!加油吧,未来的程序员们!????????