### 图书管理系统中还书功能的核心代码解析 #### 一、背景介绍 图书管理系统作为学习Windows应用程序开发的经典案例,不仅能够帮助开发者理解数据库操作的基本原理,还能深入掌握用户界面设计与交互逻辑。本文将详细解析一个图书管理系统中的还书功能核心代码,并对该段代码的关键部分进行深入解读。 #### 二、代码解析 该段代码实现了图书管理系统的还书功能,主要包括以下几个步骤: 1. **获取当前选中的书籍信息**:通过`dataGridView1.CurrentRow.Index`获取当前选中行的索引,进而获取该行中的书籍名称和读者编号。 2. **提示用户确认还书**:使用`MessageBox.Show()`弹出对话框询问用户是否确定归还所选书籍。 3. **执行还书操作**: - 构建SQL命令对象,并设置存储过程的名称为`prcReturn`。 - 添加参数:`@rid`用于传递读者编号,`@bid`用于传递书籍编号。 - 调用`DatabaseAccess`类的`ExeStoredProcedure`方法执行存储过程。 4. **更新数据视图**: - 清空数据集`mySet`。 - 重新查询并填充数据集`mySet`,以便更新界面显示的数据。 5. **计算逾期天数**: - 获取当前时间。 - 遍历数据集`mySet`中的每一行记录,计算每本书的借阅日期与当前日期之间的差值。 - 如果书籍逾期,计算逾期天数,并更新到数据集中。 #### 三、关键代码分析 ##### 1. 获取书籍信息 ```csharp int n = dataGridView1.CurrentRow.Index; string bookName = mySet.Tables["borrowInf"].Rows[n][""].ToString().Trim(); ``` - `dataGridView1.CurrentRow.Index`:获取当前选中行的索引。 - `mySet.Tables["borrowInf"].Rows[n][""]`:获取该行的某个字段(此处为空字符串,实际使用时应替换为具体字段名)。 ##### 2. 用户确认还书 ```csharp string Msg = "要归还" + bookName + "吗?"; DialogResult result = MessageBox.Show(Msg, "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question); ``` - 使用`MessageBox.Show()`弹窗询问用户是否确定还书。 ##### 3. 执行还书操作 ```csharp // 创建SQL命令对象 SqlCommand command = new SqlCommand(); // 设置存储过程类型 command.CommandType = CommandType.StoredProcedure; // 设置存储过程名称 command.CommandText = "prcReturn"; // 添加参数 SqlParameter para1 = new SqlParameter("@rid", SqlDbType.NVarChar, 10); para1.Value = readNo; command.Parameters.Add(para1); SqlParameter para2 = new SqlParameter("@bid", SqlDbType.NVarChar, 20); para2.Value = bookNo; command.Parameters.Add(para2); // 调用存储过程 dba.ExeStoredProcedure(command); ``` - 使用`SqlCommand`对象创建并设置SQL命令,包括命令类型、命令文本以及参数等。 - 调用`DatabaseAccess`类的`ExeStoredProcedure`方法执行存储过程,实现还书操作。 ##### 4. 更新数据视图 ```csharp mySet.Clear(); commandString = "select * from borrowInf where 读者号='" + readNo + "'"; mySet.Clear(); mySet = dba.FillDataset(commandString, "borrowInf"); dataGridView1.DataSource = mySet.Tables["borrowInf"]; ``` - 清空数据集`mySet`。 - 重新查询并填充数据集`mySet`。 - 更新界面显示的数据。 ##### 5. 计算逾期天数 ```csharp DateTime d1 = DateTime.Now; for (int i = 0; i < yjss; i++) { DateTime d2 = (DateTime)mySet.Tables["borrowInf"].Rows[i]["借阅日期"]; TimeSpan t = d1 - d2; int jsts = (int)t.TotalDays; int cqts = jsts - kjts; if (cqts > 0) { mySet.Tables["borrowInf"].Rows[i]["逾期天数"] = cqts; } else { mySet.Tables["borrowInf"].Rows[i]["逾期天数"] = 0; } } ``` - 获取当前时间`d1`。 - 遍历数据集中的每一行,计算借阅日期与当前日期之差,得出逾期天数。 - 更新数据集中的“逾期天数”字段。 #### 四、总结 通过上述代码的详细解析,我们可以看出图书管理系统中的还书功能不仅涉及基本的数据库操作,还需要处理诸如用户交互、数据展示等细节问题。这对于学习Windows应用程序开发来说是非常有价值的实践案例。此外,该段代码还展示了如何通过存储过程来执行复杂的业务逻辑,提高了代码的可维护性和扩展性。
private void buttonReturn_Click(object sender, EventArgs e)
{
DatabaseAccess dba = new DatabaseAccess();
string commandString;
int n = dataGridView1.CurrentRow.Index;
//询问是否真的要归还该书
string bookName = mySet.Tables["借阅信息表"].Rows[n]["书名"].ToString().Trim();
string Msg = "真的要归还“" + bookName + "”这本书吗?";
DialogResult result = MessageBox.Show(Msg, "询问", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
//回答“是”
if (result == DialogResult.Yes)
{
//取输入的图书编号和读者编号
string bookNo = mySet.Tables["borrowInf"].Rows[n]["图书编号"].ToString();
string readNo = textBoxReaderNo.Text.Trim();
//创建命令对象
SqlCommand command = new SqlCommand();
//指定命令类型为存储过程类型
command.CommandType = CommandType.StoredProcedure;
//在命令文本指定存储过程的名字
command.CommandText = "prcReturn";
//实例化调用存储过程的实参
SqlParameter para1 = new SqlParameter("@rid", SqlDbType.NVarChar, 10);
para1.Value = readNo;
command.Parameters.Add(para1);
SqlParameter para2 = new SqlParameter("@bid", SqlDbType.NVarChar, 20);
para2.Value = bookNo;
command.Parameters.Add(para2);
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 代码审计知识点整理-Java.zip
- 从 Python 访问 Java 类.zip
- 交互式 JavaScript 沙箱.zip
- 交互式 JavaScript API 参考.zip
- 使用SSM框架的Java Web项目-电商后台管理.zip
- ffmpeg、ffplay、ffprobe
- 与 FrontendMasters 课程 JavaScript 和 React 模式相关的 repo.zip
- win11系统有ie浏览器,打开ie浏览器自动跳转edge浏览器解决方案
- 基于Spark的新闻推荐系统源码+文档说明(高分项目)
- 27个常用分布函数详细汇总-名称+类别+用途+概率密度曲线+公式-PPT版本