C#面向对象实现图书管理系统的完整代码示例
本文介绍如何使用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#教程的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













