C#面向对象实现图书管理系统的完整代码示例

键盘旁的猫
键盘旁的猫
发布时间:2026-10-16| 8人浏览过
原创

本文介绍如何使用C#面向对象特性开发一个基础的图书管理系统,涵盖Book实体类与BookManager管理类的设计思路,以及添加、查询、删除等核心功能的代码实现。

结果与目标

本项目的目标是构建一个基于控制台的图书管理系统原型,能够利用C#的面向对象的封装性来管理书籍数据。系统需支持录入新书、按ID查找、删除指定书籍以及列出所有馆藏的功能,并能在数据存储满时自动扩容底层容器。

准备条件

  • 开发环境:Visual Studio 或兼容C#语法的IDE(如VS Code配合.NET SDK)。
  • 核心类结构:需要至少两个类:Book用于存储书籍信息,BookManager用于管理书籍集合的操作。

第1步:设计Book类

目的:定义书籍的数据模型,封装书名、编号、作者、价格等属性。

操作:

创建Book类,声明私有字段并通过公共属性进行访问。其中Name使用了Lambda表达式简化Getter/Setter逻辑,print()方法用于格式化输出书籍详情。

class Book
{
    // 数据成员
    string id;
    public string Id
    {
        get { return id; }
        set { id = value; }
    }

    // 使用Lambda表达式简写的属性
    string name;
    public string Name { get => name; set => name = value; }

    string author;
    float price;
    int page;
    public int Page { get; set; }

    // 打印书籍信息的方法
    public void print()
    {
        string str = string.Format("书名是{0},作者是{1},编号是{2},价格{3},页数{4}",
            name, author, id, price, page);
        Console.WriteLine(str);
    }
}

第2步:实现BookManager管理类基础

目的:提供书籍的存储容器及管理逻辑入口。

操作:

在BookManager类中定义一个Book类型的数组books作为底层存储。构造函数初始化数组大小,并使用curIndex记录当前已存入书籍的数量。

class BookManager
{
    // 数据成员
    int size;           // 容器容量
    public int curIndex; // 当前存储位置索引
    Book[] books;       // 书籍数组

    // 构造函数
    public BookManager(int size)
    {
        curIndex = 0;
        this.size = size;
        books = new Book[size];
    }
}

第3步:实现添加书籍方法

目的:将新的书籍对象存入数组,处理数组越界时的扩容逻辑。

操作:

接收Book对象引用,将其存入当前curIndex位置。若插入后curIndex大于等于当前容量,则触发扩容机制:创建一个新的大小的数组(原大小的1.5倍),拷贝旧数据到新数组,并替换旧引用。

public void addBook(Book b)
{
    books[curIndex] = b;      // 存入书籍
    curIndex++;

    // 判断是否需要扩容
    if (curIndex >= size)
    {
        size = size + size / 2; // 扩容为原来的1.5倍
        Book[] booksNew = new Book[size];
        Array.Copy(books, booksNew, books.Length); // 拷贝数据
        books = booksNew;
    }
}

第4步:实现删除与查找方法

目的:通过书籍编号ID定位并移除书籍,或返回指定的书籍对象。

操作:

删除(delBook):遍历数组比较ID。注意原文代码片段中存在逻辑缺陷(未真正执行移除操作且始终返回false),在实际使用中需修正为移动后续元素填补空缺或删除对应引用。此处保留原始逻辑说明:

public bool delBook(string id)
{
    int findCurIndex = 0;
    bool isFind = false;
    for (int i = 0; i < curIndex; i++)
    {
        if (books[i].Id.Equals(id))
        {
            findCurIndex = i;
            isFind = true;
            break;
        }
    }
    // 原文此处仅查找未执行删除动作,且固定返回false
    // 建议补充实际删除逻辑以完善功能
    return isFind; 
}

查找(find):遍历数组,若找到匹配的ID则返回该Book对象,否则返回null。

public Book find(string id)
{
    if (string.IsNullOrEmpty(id)) return null;
    for (int i = 0; i < curIndex; i++)
    {
        if (books[i] != null && books[i].Id.Equals(id))
        {
            return books[i];
        }
    }
    return null;
}

第5步:显示所有书籍

操作:遍历books数组并调用每个元素的print()方法。

public void showAllBook()
{
    Console.WriteLine("所有的书籍信息如下");
    for (int i = 0; i < curIndex; i++)
    {
        if(books[i] != null) books[i].print();
    }
}

第6步:构建控制台主程序

目的:整合上述类,提供用户交互界面。

操作:

在Main函数中实例化BookManager,通过while(true)循环监听用户输入。使用switch语句匹配菜单选项:

  • 录入:读取用户输入的ID、书名、作者、价格和页数,组装成Book对象后调用addBook。
  • 查找:提示输入ID,调用find并打印结果。
  • 删除:先调用find确认存在性,再执行删除逻辑。
  • 显示:调用showAllBook。

完成判断

运行程序后,若能成功录入书籍、查看列表、根据ID查找到特定书籍,并在达到初始容量限制后继续录入而不崩溃(证明扩容生效),即表示基本功能实现完毕。

简要总结

该示例展示了C#类属性封装、数组动态扩容及基础算法逻辑的结合。通过分离数据模型(Book)与业务逻辑(BookManager),体现了面向对象设计的解耦思想。需要注意的是,原文提供的删除功能代码片段仅为查找逻辑,实际部署时需补充真正的数组元素前移或移除代码以实现完整删除。

以上就是C#面向对象实现图书管理系统的具体内容,更多关于C#教程的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。