C#实现图书管理系统

C# 实现图书管理系统

在本篇攻略中,我们将演示如何使用 C# 实现一个图书管理系统。该系统的功能如下:

  • 添加图书:包括书名、作者、出版社、出版日期、价格等信息;
  • 删除图书;
  • 修改图书信息;
  • 查询图书信息:查询所有图书或根据书名或作者进行模糊查询;
  • 显示所有图书;

技术栈

  • C#:一种面向对象的编程语言;
  • Windows Forms:一种基于 Windows 操作系统的用户界面开发工具;
  • SQLite:一种轻量级的关系型数据库管理系统;

准备工作

在开始编码前,我们需要先安装 Visual Studio,Visual Studio 自带 .NET Framework 和 Windows Forms,也可通过 NuGet 安装 SQLite 数据库。

创建数据库

为了保存图书信息,我们需要创建一个数据库。在 Visual Studio 中做如下操作:

  1. 在“解决方案资源管理器”中右键点击“添加”;
  2. 在“添加新项”对话框中选择“Data”选项卡;
  3. 选择当地数据库文件并设置其名称(如“BookManager.db”);
  4. 打开新建的 .db 文件;
  5. 运行以下 SQL 命令以创建“Book”表:
CREATE TABLE "Book" (
    "Id"    INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    "Name"  TEXT NOT NULL,
    "Author"    TEXT NOT NULL,
    "Press" TEXT NOT NULL,
    "PublishDate"   TEXT NOT NULL,
    "Price" INTEGER NOT NULL
);

编辑界面

在 Visual Studio 中创建 Windows Forms 应用程序,并创建以下表单:

  • MainForm:主界面,包括菜单栏、工具栏、工作区、状态栏等;
  • AddBookForm: 添加书籍界面,包括书籍的各项基本信息;
  • ModifyBookForm:修改书籍信息界面,可修改已存在的书籍的基本信息;
  • QueryBookForm:查询书籍信息界面,可选择并根据书名或作者进行查询;
  • AboutForm:关于软件,作者信息等;

实现功能

添加书籍

实现添加书籍的功能时,需要实现以下步骤:

  1. 打开“AddBookForm”表单;
  2. 用户输入书籍的各项基本信息;
  3. 用户点击“确定”按钮,将书籍信息插入到“Book”表格中;
  4. 返回主界面;

以下为代码示例:

// 打开添加书籍的表单
private void tsb_AddBook_Click(object sender, EventArgs e)
{
    AddBookForm addBookForm = new AddBookForm();
    addBookForm.ShowDialog();
}

// 在“AddBookForm”确定按钮被点击时,将新书籍信息插入到数据库中
private void btn_OK_Click(object sender, EventArgs e)
{
    using (SQLiteConnection cn = new SQLiteConnection("Data Source=BookManager.db"))
    {
        cn.Open();

        string sql = @"INSERT INTO Book (Name, Author, Press, PublishDate, Price) 
                       VALUES (@Name, @Author, @Press, @PublishDate, @Price)";
        using (SQLiteCommand cmd = new SQLiteCommand(sql, cn))
        {
            cmd.Parameters.AddWithValue("@Name", txt_Name.Text.Trim());
            cmd.Parameters.AddWithValue("@Author", txt_Author.Text.Trim());
            cmd.Parameters.AddWithValue("@Press", txt_Press.Text.Trim());
            cmd.Parameters.AddWithValue("@PublishDate", dtp_Date.Value.ToString("yyyy-MM-dd"));
            cmd.Parameters.AddWithValue("@Price", txt_Price.Text.Trim());
            cmd.ExecuteNonQuery();
        }
    }

    MessageBox.Show("添加成功!");

    this.Close();
}

删除书籍

实现删除书籍的功能时,需要实现以下步骤:

  1. 用户在“MainForm”中选择一本书;
  2. 用户点击“删除”按钮;
  3. 将该书籍信息从“Book”表格中删除;
  4. 刷新书籍列表;

以下为代码示例:

// 在“MainForm”表单的“删除”按钮被点击时,删除选定的书籍
private void tsb_DeleteBook_Click(object sender, EventArgs e)
{
    if (dgv_Books.SelectedRows.Count == 0)
    {
        MessageBox.Show("请先选择要删除的书籍。");
        return;
    }

    int bookId = (int)dgv_Books.SelectedRows[0].Cells["Id"].Value;
    string bookName = dgv_Books.SelectedRows[0].Cells["Name"].Value.ToString();

    if (MessageBox.Show($"确认删除『{bookName}』吗?", "警告", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
    {
        using (SQLiteConnection cn = new SQLiteConnection("Data Source=BookManager.db"))
        {
            cn.Open();

            string sql = @"DELETE FROM Book WHERE Id=@Id";
            using (SQLiteCommand cmd = new SQLiteCommand(sql, cn))
            {
                cmd.Parameters.AddWithValue("@Id", bookId);
                cmd.ExecuteNonQuery();
            }
        }

        MessageBox.Show("删除成功!");
        BindMyData();
    }
}

修改书籍信息

实现修改书籍信息的功能时,需要实现以下步骤:

  1. 用户在“MainForm”中选择一本书;
  2. 用户点击“修改”按钮;
  3. 打开“ModifyBookForm”表格,并显示该书籍的信息;
  4. 用户修改并提交新的书籍信息;
  5. “Book”表中该书籍的信息会被更新;
  6. 返回主界面;

以下为代码示例:

// 在“MainForm”表单的“修改”按钮被点击时,打开新的“ModifyBookForm”表单
private void tsb_ModifyBook_Click(object sender, EventArgs e)
{
    if (dgv_Books.SelectedRows.Count == 0)
    {
        MessageBox.Show("请先选择要修改的书籍。");
        return;
    }

    int bookId = (int)dgv_Books.SelectedRows[0].Cells["Id"].Value;
    string bookName = dgv_Books.SelectedRows[0].Cells["Name"].Value.ToString();

    ModifyBookForm modifyBookForm = new ModifyBookForm(bookId);
    modifyBookForm.ShowDialog();

    BindMyData();
}

// 在“ModifyBookForm”表单的“确认”按钮被点击时,将新的书籍信息写入数据库
private void btn_OK_Click(object sender, EventArgs e)
{
    using (SQLiteConnection cn = new SQLiteConnection("Data Source=BookManager.db"))
    {
        cn.Open();

        string sql = @"UPDATE Book SET Name=@Name, Author=@Author, Press=@Press, PublishDate=@PublishDate, Price=@Price WHERE Id=@Id";
        using (SQLiteCommand cmd = new SQLiteCommand(sql, cn))
        {
            cmd.Parameters.AddWithValue("@Id", bookId);
            cmd.Parameters.AddWithValue("@Name", txt_Name.Text.Trim());
            cmd.Parameters.AddWithValue("@Author", txt_Author.Text.Trim());
            cmd.Parameters.AddWithValue("@Press", txt_Press.Text.Trim());
            cmd.Parameters.AddWithValue("@PublishDate", dtp_Date.Value.ToString("yyyy-MM-dd"));
            cmd.Parameters.AddWithValue("@Price", txt_Price.Text.Trim());
            cmd.ExecuteNonQuery();
        }
    }

    MessageBox.Show("修改成功!");
    this.Close();
}

查询书籍信息

实现查询书籍信息的功能时,需要实现以下步骤:

  1. 打开“QueryBookForm”表单;
  2. 用户选择以书名或者作者进行查询;
  3. 根据用户选择及输入,从“Book”表格中查询所需的书籍信息;
  4. 显示查询结果;

以下为代码示例:

// 在“MainForm”表单的“查询”按钮被点击时,打开新的“QueryBookForm”表单
private void tsb_QueryBook_Click(object sender, EventArgs e)
{
    QueryBookForm queryBookForm = new QueryBookForm();
    queryBookForm.ShowDialog();
}

// 在“QueryBookForm”表单的“查询”按钮被点击时,查询符合条件的书籍并更新“MainForm”中的显示结果
private void btn_Query_Click(object sender, EventArgs e)
{
    string mode;
    if (rb_Name.Checked)
    {
        mode = "Name";
    }
    else
    {
        mode = "Author";
    }

    using (SQLiteConnection cn = new SQLiteConnection("Data Source=BookManager.db"))
    {
        cn.Open();
        string sql = $"SELECT * FROM Book WHERE {mode} LIKE '%' || @Keyword || '%'";
        using (SQLiteCommand cmd = new SQLiteCommand(sql, cn))
        {
            cmd.Parameters.AddWithValue("@Keyword", txt_Keyword.Text.Trim());
            using (SQLiteDataAdapter adapter = new SQLiteDataAdapter(cmd))
            {
                DataTable table = new DataTable();
                adapter.Fill(table);
                dgv_Books.DataSource = table;
            }
        }
    }

    MessageBox.Show("查询完毕。");
}

显示所有书籍信息

实现显示所有书籍信息的功能时,需要实现以下步骤:

  1. 从“Book”表格中读取所有书籍的信息;
  2. 在“MainForm”中显示所有书籍的列表;

以下为代码示例:

// “MainForm”打开时刷新书籍列表
private void MainForm_Load(object sender, EventArgs e)
{
    BindMyData();
}

// 更新书籍列表
private void BindMyData()
{
    using (SQLiteConnection cn = new SQLiteConnection("Data Source=BookManager.db"))
    {
        cn.Open();
        string sql = @"SELECT * FROM Book";
        using (SQLiteCommand cmd = new SQLiteCommand(sql, cn))
        {
            using (SQLiteDataAdapter adapter = new SQLiteDataAdapter(cmd))
            {
                DataTable table = new DataTable();
                adapter.Fill(table);
                dgv_Books.DataSource = table;
            }
        }
    }
}

结语

以上为本篇攻略的 C# 实现图书管理系统的完整攻略。通过本文,我们可以快速地了解图书管理系统的相关实现原理和代码,同时,也可以进一步掌握利用 C# 进行 Desktop 应用开发的技巧。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现图书管理系统 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • 用C#生成不重复的随机数的代码

    下面是关于使用C#生成不重复的随机数的完整攻略及示例: 生成不重复的随机数概述 在C#中生成随机数是很常见的需求,但如果要生成不重复的随机数则需要使用一些特殊的技巧。 首先,我们需要生成一个可重复的种子值seed。种子值可以用系统时间、Guid、随机数等值生成。可以使用new Random(seed)初始化Random对象来进行后续的随机数生成操作。 其次,…

    C# 2023年6月1日
    00
  • Aspx/Asp.net 防注入程序 V1.0

    “Aspx/Asp.net 防注入程序 V1.0”是一款用于防范SQL注入攻击的程序,其主要功能是对用户输入的信息进行过滤和保护,避免恶意攻击。下面是使用该程序的完整攻略: 步骤一:下载安装程序 首先需要到程序官网(例如GitHub)上下载“Aspx/Asp.net 防注入程序 V1.0”的安装程序,然后按照提示进行安装,安装完成后就可以开始使用该程序。 步…

    C# 2023年6月3日
    00
  • 混合语言编程—C#使用原生的Directx和OpenGL绘图的方法

    概述 混合语言编程指的是使用不同语言编写的程序相互合作,完成视觉效果加强和功能的增强等需求。在本攻略中,我们将介绍如何使用C#语言使用原生的Directx和OpenGL库进行绘图。 必要条件 在开始使用C#语言绘制图形之前,你需要安装.NET Framework 4.5或更高版本。这将为你提供运行时环境和开发工具。同时,要在C#中访问Directx和Open…

    C# 2023年6月6日
    00
  • .Net创建型设计模式之工厂方法模式(Factory Method)

    .Net创建型设计模式之工厂方法模式(Factory Method) 工厂方法模式是一种常用的创建型设计模式。该模式通过定义一个抽象工厂方法来把实例的创建延迟到其子类。工厂方法模式中,客户端调用创建对象时只需使用工厂方法,而无需关心具体的对象是如何创建的。这样就可以将客户端代码与具体对象的创建和组装过程解耦。 使用场景 工厂方法模式适用于需要大量创建对象的场…

    C# 2023年5月31日
    00
  • C#温故而知新系列教程之闭包

    C#温故而知新系列教程之闭包 什么是闭包 闭包(Closure),是指一个函数(或者委托)及其相关信息的引用组合而成的实体。在C#中,闭包可以理解为一个函数以及该函数所引用的外部变量组合成的一个实体。 假设有一个函数AddValue(),可以接受一个整型参数,并返回一个函数,该返回的函数内部可以将接受的参数与之前的参数累加并返回累加的结果。使用闭包,可以将之…

    C# 2023年6月1日
    00
  • 解决ASP.NET Core中使用漏桶算法限流的问题

    解决ASP.NET Core中使用漏桶算法限流的问题 在ASP.NET Core应用程序中,限流是一种常见的技术,用于控制应用程序的流量并防止过载。漏桶算法是一种常见的限流算法,它可以平滑地限制请求的速率。在本攻略中,我们将详细讲解如何在ASP.NET Core中使用漏桶算法限流,并提供两个示例说明。 步骤一:安装NuGet包 要使用漏桶算法限流,您需要安装…

    C# 2023年5月17日
    00
  • Asp.Net Cache缓存使用代码

    接下来我将为您讲解Asp.Net Cache缓存使用代码的完整攻略。 Asp.Net Cache缓存简介 首先,我们来了解一下Asp.Net Cache缓存。 缓存是一种常见的优化技术,通过将经常使用的数据缓存到内存中,以提高系统的性能和响应速度。而Asp.Net提供了一个Cache对象来实现缓存功能。 Asp.Net的Cache对象是一个全局对象,可以在所…

    C# 2023年5月31日
    00
  • C#开发中经常用的加密解密方法示例

    下面是“C#开发中经常用的加密解密方法示例”的完整攻略: 1. 加密解密方法 在C#开发中经常用到的加密解密方法有:哈希加密、对称加密和非对称加密。 哈希加密 哈希加密是指将任意长度的二进制值映射成固定长度的较小二进制值的过程,其特点是不可逆。C#中经常使用的哈希加密方法有MD5、SHA1、SHA256等。下面是一个MD5加密的示例代码: using Sys…

    C# 2023年6月7日
    00
合作推广
合作推广
分享本页
返回顶部