系统需求与设计:
在开始编码之前,我们需要明确系统的基本需求。我们的系统应该能够:
- 存储书籍的基本信息,如书名、作者、出版社、出版时间和定价。
- 允许用户通过控制台界面添加新书籍。
- 允许用户编辑和删除现有书籍信息。
- 将书籍信息保存到文件中,并在程序启动时加载。
基于这些需求,我们设计了一个包含书籍类(Book)和程序主类(Program)的系统。书籍类负责存储单本书籍的信息,而程序主类则包含用户界面和业务逻辑。
实现细节:
我们的系统使用C#语言编写,涉及到的主要技术点包括文件操作、控制台输入输出和基本的类设计。以下是代码实现的关键部分:
-
书籍类(Book):
我们定义了一个书籍类,包含书名、作者、出版社、出版时间和定价等属性。同时,我们重写了ToString
方法,以便在控制台中打印书籍的详细信息。 -
主程序(Program):
主程序类包含Main
方法,这是程序的入口点。在这里,我们加载书籍数据,显示菜单,并根据用户的选择执行相应的操作。 -
加载和保存书籍数据(LoadBooks和SaveBooks):
我们定义了LoadBooks
方法来从文件中加载书籍数据,并定义了SaveBooks
方法来保存当前的书籍列表到文件中。这些方法使用文件流和字符串操作来实现。 -
添加书籍(AddBook):
AddBook
方法允许用户输入新书籍的信息,并将其添加到书籍列表中。之后,调用SaveBooks
方法将更新后的书籍列表保存到文件。 -
编辑书籍(EditBook):
EditBook
方法允许用户选择并编辑现有书籍的信息。如果找到对应的书籍,用户可以更新书籍的各个字段。 -
删除书籍(DeleteBook):
DeleteBook
方法允许用户删除书籍列表中的特定书籍,并更新文件中的数据。
代码实现
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
namespace P3_2
{
internal class Program
{
// 主程序入口点
static void Main(string[] args)
{
string filePath = "books.txt"; // 定义书籍信息存储的文件路径
List<Book> books = LoadBooks(filePath); // 从文件加载书籍信息
bool exit = false; // 控制程序退出的布尔变量
// 主循环,显示菜单并处理用户输入
while (!exit)
{
Console.WriteLine("1. 查看书籍信息");
Console.WriteLine("2. 添加书籍");
Console.WriteLine("3. 编辑书籍");
Console.WriteLine("4. 删除书籍");
Console.WriteLine("5. 退出");
Console.Write("请选择操作:");
int choice = Convert.ToInt32(Console.ReadLine()); // 获取用户选择
// 根据用户选择执行相应的操作
switch (choice)
{
case 1:
foreach (var book in books)
{
Console.WriteLine(book); // 打印每本书的详细信息
}
break;
case 2:
AddBook(ref books, filePath); // 添加新书籍
break;