C# 实现简单的图书管理系统(控制台版)

简介: 图书管理系统案例,基于C#实现,支持增删改查功能,使用List存储图书信息,包含书名、作者、价格等字段,适用于控制台操作。

图书管理系统支持添加、查询、修改、删除图书信息,用 List 存储数据。

案例:图书管理系统

public class Book
{
    public int Id { get; set; }
    public string Title { get; set; } // 书名
    public string Author { get; set; } // 作者
    public decimal Price { get; set; } // 价格
    public string Category { get; set; } // 分类
    public override string ToString()
    {
        return $"ID:{Id} | 书名:{Title} | 作者:{Author} | 价格:{Price:C} | 分类:{Category}";
    }
}
public class BookManager
{
    private static List<Book> _books = new List<Book>();
    private static int _nextId = 1; // 自增ID
    // 添加图书
    public static void AddBook()
    {
        Book book = new Book();
        book.Id = _nextId++;
        Console.Write("请输入书名:");
        book.Title = Console.ReadLine()?.Trim() ?? "";
        Console.Write("请输入作者:");
        book.Author = Console.ReadLine()?.Trim() ?? "";
        Console.Write("请输入价格:");
        decimal.TryParse(Console.ReadLine()?.Trim(), out decimal price);
        book.Price = price;
        Console.Write("请输入分类:");
        book.Category = Console.ReadLine()?.Trim() ?? "";
        _books.Add(book);
        Console.WriteLine("图书添加成功!");
    }
    // 查询所有图书
    public static void QueryAllBooks()
    {
        if (_books.Count == 0)
        {
            Console.WriteLine("暂无图书信息!");
            return;
        }
        Console.WriteLine("=== 所有图书信息 ===");
        foreach (var book in _books)
        {
            Console.WriteLine(book);
        }
    }
    // 按书名查询图书
    public static void QueryBookByTitle()
    {
        Console.Write("请输入要查询的书名关键词:");
        string keyword = Console.ReadLine()?.Trim() ?? "";
        var result = _books.Where(b => b.Title.Contains(keyword, StringComparison.OrdinalIgnoreCase)).ToList();
        if (result.Count == 0)
        {
            Console.WriteLine("未找到匹配的图书!");
            return;
        }
        Console.WriteLine($"=== 找到 {result.Count} 本匹配图书 ===");
        foreach (var book in result)
        {
            Console.WriteLine(book);
        }
    }
    // 删除图书
    public static void DeleteBook()
    {
        Console.Write("请输入要删除的图书ID:");
        if (!int.TryParse(Console.ReadLine()?.Trim(), out int id))
        {
            Console.WriteLine("无效的ID!");
            return;
        }
        Book book = _books.FirstOrDefault(b => b.Id == id);
        if (book == null)
        {
            Console.WriteLine("未找到该ID的图书!");
            return;
        }
        _books.Remove(book);
        Console.WriteLine("图书删除成功!");
    }
    // 显示菜单
    public static void ShowMenu()
    {
        Console.WriteLine("\n=== 图书管理系统 ===");
        Console.WriteLine("1. 添加图书");
        Console.WriteLine("2. 查询所有图书");
        Console.WriteLine("3. 按书名查询图书");
        Console.WriteLine("4. 删除图书");
        Console.WriteLine("5. 退出系统");
        Console.Write("请选择操作(1-5):");
    }
    public static void Main(string[] args)
    {
        while (true)
        {
            ShowMenu();
            string choice = Console.ReadLine()?.Trim() ?? "";
            switch (choice)
            {
                case "1":
                    AddBook();
                    break;
                case "2":
                    QueryAllBooks();
                    break;
                case "3":
                    QueryBookByTitle();
                    break;
                case "4":
                    DeleteBook();
                    break;
                case "5":
                    Console.WriteLine("退出系统!");
                    return;
                default:
                    Console.WriteLine("无效操作,请重新选择!");
                    break;
            }
        }
    }
}
相关文章
|
2天前
|
安全 C#
C# 泛型:实现类型安全的通用代码
泛型通过类型参数(如T)实现类型通用性,可定义不指定具体类型的类或方法,使用时再确定类型。示例中,Swap&lt;T&gt;方法可交换任意同类型变量,List&lt;T&gt;集合避免装箱拆箱,提升性能与安全。
|
2天前
|
C#
C# 字符串操作:常用方法汇总(含案例)
C# 提供丰富的字符串操作方法,如拼接、截取、替换和判断等。本文通过工具类案例演示如何高效处理字符串,提升开发效率与代码可读性。
|
2天前
|
C#
C# 枚举(Enum):规范常量定义
枚举用于定义命名常量,提升代码可读性与维护性。示例中定义订单状态枚举,演示赋值、转换、解析及遍历操作,避免使用魔法数字,使逻辑更清晰易懂。
|
2天前
|
C#
C# 继承:复用父类功能的核心技巧
C# 中通过“:”实现继承,子类可复用并重写父类的虚方法。Student 继承 Person,重写 Introduce 方法,既调用父类逻辑,又扩展个性行为,体现多态特性。
|
2天前
|
C#
C# 日期时间操作:格式化与计算
DateTime类用于处理日期时间操作,支持格式化输出、加减计算及获取特定日期(如本月第一天)。示例代码展示了常用功能:格式化、计算日期差、增减天数等,便于高效处理时间数据。
|
2天前
|
C#
C# 文件操作:读取与写入文本文件
`File`类提供文件操作静态方法,适合快速读写;大文件推荐使用`StreamReader/StreamWriter`以降低内存占用。示例展示了文本文件的写入、追加与读取操作,支持自动创建目录,建议处理路径时注意权限并优先使用相对路径。
|
2天前
|
C#
C# 异常处理:try-catch-finally 避免程序崩溃
异常处理用于捕获运行时错误(如空引用、文件不存在),确保程序稳定。通过 `try` 包裹可能出错的代码,`catch` 捕获并处理异常,`finally` 确保资源释放等操作始终执行,提升代码健壮性。
|
2天前
|
C# 数据安全/隐私保护
C# 正则表达式:快速匹配与验证
正则表达式用于字符串模式匹配,如手机号、邮箱、密码验证等。C# 通过 `System.Text.RegularExpressions` 命名空间中的 `Regex` 类实现。本文示例展示了使用 `RegexHelper` 工具类进行常见验证:`IsPhoneNumber` 验证中国大陆手机号(1开头,共11位);`IsEmail` 校验邮箱格式;`IsValidPassword` 判断密码是否包含字母和数字且长度为8-20位;`ExtractNumbers` 提取字符串中所有数字。代码简洁高效,适用于数据校验与文本处理场景。
|
2天前
|
JSON C# 数据格式
C# JSON 序列化与反序列化:Newtonsoft.Json 用法
JSON是前后端交互常用格式,Newtonsoft.Json(Json.NET)是C#中最流行的JSON处理库。本文介绍如何使用它实现对象与JSON字符串的序列化和反序列化,并提供封装工具类及调用示例,便于在项目中快速集成与使用。
|
2天前
|
存储 安全 C#
C# 数组与集合:List<T> 最常用场景
数组长度固定,集合(List&lt;T&gt;)可动态增删,支持泛型与类型安全。常用操作包括添加、删除、遍历和查询元素,是开发中首选的动态数据存储方式。

热门文章

最新文章