当前位置:首页 >> IT/计算机 >>

图书管理系统设计与实现


图书管理系统的设计 图书管理系统的设计
一、 1. 2. 二、 1. 2. 3. 三、 1. 2. 3. 系统分析 ................................................................................................................................

.............. 2 开发背景 .............................................................................................................................................. 2 需求分析 .............................................................................................................................................. 2 系统设计 .............................................................................................................................................. 2 系统总体结构 ...................................................................................................................................... 2 数据库设计 .......................................................................................................................................... 3 编码设计 .............................................................................................................................................. 4 系统实施 .............................................................................................................................................. 4 登录 ...................................................................................................................................................... 4 系统主界面 .......................................................................................................................................... 5 书库管理 .............................................................................................................................................. 6 1) 新书登记: .................................................................................................................................. 6 2) 借书/还书: ................................................................................................................................. 9 1) 缴费 ............................................................................................................................................ 15 2) 书籍挂失: ................................................................................................................................ 18 3) 图书信息查询: ........................................................................................................................ 22 借书信息查询: ........................................................................................................................ 23 借阅证管理: .................................................................................................................................... 24 1) 办理借阅证: ............................................................................................................................ 24 2) 借阅证信息查询: .................................................................................................................... 26 3) 借阅证挂失: ............................................................................................................................ 26 系统/其它: ....................................................................................................................................... 28 1) 添加账号: ................................................................................................................................ 28 2) 修改密码: ................................................................................................................................ 30 3) 退出: ........................................................................................................................................ 31 总结(体会、经验与教训) ............................................................................................................ 31

4) 4.

5.

四、

一、 系统分析
1. 开发背景
随着人们知识层次的提高,图书馆成为日常生活中不可缺少的一部分。而图书馆的存 数量和业务量庞大,仅仅靠传统的记账式管理是不可行的。图书馆管理系统应运而生,逐 渐成为信息化建设的重要组成部分。图书馆管理系统为学校或社会型图书馆的管理员提供 所有借阅者的详细信息,以及馆内库存的详细情况,对借书和还书两大功能进行合理操纵 并登记。

2. 需求分析
经过仔细分析系统需求之后,本图书管理系统主要完成的主要功能如下: 进入系统前需要身份验证、用户名、密码,输入正确后方可进入。 用户可以根据需要进行书库管理。 用户可以进行借书证的办理、查询、挂失等操作。 用户可以添加账户和修改密码。

身份验证:提供系统的访问控制功能。 书库管理:包括新书登记、借书、还书、书籍挂失、图书信息查询、借书信息查询等 功能。 借阅证管理:提供办理借阅证、借阅证信息查询、借阅证挂失功能。 系统管理功能:包括添加账号、修改密码和退出系统等功能。

二、 系统设计
1. 系统总体结构
通过对图书管理系统的功能分析,可以定义出系统的功能模块图如下:

2. 数据库设计
管理员基本信息表 字段名称 数据类型 WorkID int User_Name VARCHAR(24) Password VARCHAR(24) 图书信息表 字段名称 Book_ID Book_Name Writer Press Price InLibrary_Date Total_Amount Now_Amount 数据类型 VARCHAR(50) VARCHAR(50) VARCHAR(50) VARCHAR(50) float datetime int int 可否为空 NOT NULL NOT NULL NOT NULL 可否为空 NOT NULL NOT NULL NOT NULL NOT NULL NOT NULL NOT NULL NOT NULL NOT NULL 数据类型 VARCHAR(50) VARCHAR(50) VARCHAR(50) 可否为空 NOT NULL NOT NULL NOT NULL 约束条件 主键 无 无 约束条件 主键 无 无 无 无 无 无 无 约束条件 主键 无 无 说明 成员 ID 姓名 密码 说明 书籍 ID 书名 作者 出版社 单价 入库时间 总量 现存量 说明 借阅卡 ID 姓名 性别

借阅卡信息表 字段名称 Proof_ID Name Sex

Birth_Time Address ID_Number Tel_Number Now_Borrow_Amount

datetime VARCHAR(50) VARCHAR(50) VARCHAR(50) int

NOT NULL NOT NULL NOT NULL NOT NULL NOT NULL 可否为空 NOT NULL NOT NULL NOT NULL NOT NULL

无 无 无 无 无

出生日期 地址 身份证号 电话号码 现借书量 说明 借书 ID 借书卡 ID 书籍 ID 借出时间

借书信息表 字段名称 数据类型 BorrowID int Proof_ID VARCHAR(50) Book_ID VARCHAR(50) Borrow_Date datetime 罚单信息表 字段名称 数据类型 Puni_ID int Proof_ID VARCHAR(50) Book_ID VARCHAR(50) Borrow_Date Return_Date Puni_Money datetime datetime float

约束条件 主键 外键(Proof_Info) 外键(Book_Info) 无 约束条件 主键 无 无 无 无 无

可否为空 NOT NULL NOT NULL NOT NULL NOT NULL NOT NULL NOT NULL

说明 罚单 ID 借书卡 ID 书籍 ID 借出时间 还书时间 罚金

3. 编码设计
WorkID,BorrowID,Puni_ID 都设置了标识规范,增加记录时自动加 1,保持其唯 一性。 Borrow_Date,Return_Date,InLibrary_Date 都设置成 datetime 类型,插入记录时自 动获取当前日期,不需要管理员输入日期。 Proof_ID,Book_ID,ID_Number,Tel_Number,Proof_ID 由于它们只是代表一个标 识,不是一个表示大小的数字,所以用 VARCHAR 类型,用 int 或 long 可能会有溢 出现象。

三、 系统实施
1. 登录
功能说明:验证管理员的用户名和密码是否正确,正确则进入主界面。 源代码: 头文件:using System.Data.SqlClient; 连接数据库:
SqlConnection con = new SqlConnection("server=20100310-1827\\SQLEXPRESS;database=Library;Integrated Security=True");

程序主体:

private void button_exit_Click(object sender, EventArgs e)//退出 { Application.Exit(); } private void button_log_Click(object sender, EventArgs e)//登录 { if (this.UserName.Text.Trim() == "" || this.PassWord.Text.Trim() == "") MessageBox.Show("用户名和密码都不能为空!"); if (con.State == ConnectionState.Closed) con.Open(); String str = "select count(*) from Admin_Info where User_Name='" + this.UserName.Text.Trim() + "' and Password='" + this.PassWord.Text + "'"; SqlCommand com = new SqlCommand(str, con); int i = Convert.ToInt32(com.ExecuteScalar()); if (i > 0) { Form2 form2 = new Form2();//系统主界面 form2.Show(); this.Visible = false; } else { MessageBox.Show("用户名或密码输入有误,请重新输入!"); this.UserName.Text = ""; this.PassWord.Text = ""; } }

界面演示: 登录名和密码正确的话进入系统主界面 (图一) 登录名或者密码不正确的话会弹出提 ; 示对话框,并将用户名、密码栏置空(图二) ;如果用户名或者密码有空,弹出对话框并将 用户名、密码栏置空(图三) 。

图1

图2

图3

图4

2. 系统主界面
功能说明:选择各个功能模块 源代码:
private void Form2_FormClosing(object sender, FormClosingEventArgs e) { Application.Exit(); } private void button_exit_Click(object sender, EventArgs e) { Application.Exit(); } private void button_new_book_Click(object sender, EventArgs e) { Form3 form3 = new Form3();//新书登记 form3.Show(); }

//初始化对应界面,和上面类似,不再赘述

…… 界面演示:如图 4

3. 书库管理 1) 新书登记: 新书登记:
功能说明: 入库的实现过程是首先要输入书籍的各种信息,包括书的书号、书名、作者、出版社、 价钱、总量、现存量等,这里书的数量由两个变量来记录,总量代表图书馆中这种这种书 的总量,现存量是目前正在管中的量,两者之差就是被读者借出去的数量。其中每个信息 不能有遗漏或者格式不正确,因为这是每一本书的基本信息,在函数的实现过程中有检验 的功能。然后判断图书馆中是否存在这种图书,如果存在,那么时间简单的把库存的数量 加上新加入的数量,如果不存在,那么就要新建记录。 源代码: 连接数据库:
SqlDataAdapter da = new SqlDataAdapter(); DataSet ds = new DataSet();

程序主体:
//主界面调用的每个模块的返回按钮都是隐藏本体,以后不再写出返回按钮的操作带代码 private void button_back_Click(object sender, EventArgs e)//返回 { this.Visible = false; } private void button_in_Click(object sender, EventArgs e)//入库 { int res; //检验输入数据是否合法 if (this.textBox_book_no.Text.Trim() == ""||this.textBox_name .Text .Trim ()=="" ||this.comboBox_press .Text .Trim ()==""||this.textBox_price .Text .Trim ()=="" ||this.textBox_total .Text .Trim ()==""||this.textBox_writer .Text .Trim ()=="") { MessageBox.Show ("请正确填写要求的数据!", "新书入库登记"); this.textBox_book_no.Text = ""; this.textBox_name.Text = ""; this.comboBox_press .Text = ""; this.textBox_price.Text = ""; this.textBox_total.Text = ""; this.textBox_writer.Text = ""; } //判断书库中是否有该书,有,仅把数量加进去,没有,加进一条新的记录 else { if (con.State == ConnectionState.Closed) con.Open(); String str1 = "select Total_Amount from Book_Info where Book_ID='" + this.textBox_book_no.Text.Trim() + "'"; SqlCommand com1 = new SqlCommand(str1, con); int total_num = Convert.ToInt32(com1.ExecuteScalar()); String str2 = "select Now_Amount from Book_Info where Book_ID='" + this.textBox_book_no.Text.Trim() + "'"; SqlCommand com2 = new SqlCommand(str2, con);

int now_num = Convert.ToInt32(com2.ExecuteScalar()); int num1 = Convert.ToInt32(this.textBox_total.Text); total_num += num1; now_num += num1; String str = "select count(*) from Book_Info where Book_ID='" + this.textBox_book_no.Text.Trim() + "'"; SqlCommand com = new SqlCommand(str, con); int i = Convert.ToInt32(com.ExecuteScalar()); if (i > 0) { String str3 = "update dbo.Book_Info set Total_Amount= '" + total_num.ToString ().Trim () +"' ,Now_Amount='" + now_num.ToString() .Trim () + "'where Book_ID='" + this.textBox_book_no.Text.Trim() + "'"; da.UpdateCommand = new SqlCommand(str3, con); res=da.UpdateCommand.ExecuteNonQuery(); if(res>0) MessageBox.Show("新书入库成功!","新书登记"); else MessageBox.Show("新书入库失败!", "新书登记"); } else { String bookid = this.textBox_book_no.Text .ToString().Trim(); String name = this.textBox_name.Text .ToString().Trim(); String writer = this.textBox_writer.Text .ToString().Trim(); String press = this.comboBox_press .Text .ToString().Trim(); float price =(float) Convert.ToDouble (this.textBox_price.Text .ToString().Trim()); String dt = DateTime.Now.ToString(); int totalaccount = Convert.ToInt32(total_num.ToString().Trim()); int nowacount =Convert .ToInt32 (now_num.ToString().Trim()); String str3 = "insert into dbo.Book_Info (Book_ID,Book_Name,Writer,Press,Price,"+ "InLibrary_Date,Total_Amount,Now_Amount) " +"values ('"+bookid+"','"+name+"','" +writer+"','"+press+"','"+price+"','" + dt + "','"+totalaccount+"','"+nowacount+"')"; da.InsertCommand = new SqlCommand(str3, con); res=da.InsertCommand.ExecuteNonQuery(); if (res > 0) MessageBox.Show("新书入库成功!", "新书登记"); else MessageBox.Show("新书入库失败!", "新书登记"); } con.Close(); } } //主界面调用的每个模块的关闭按钮都是隐藏本体,以后不再写出关闭按钮的操作带代码 private void Form3_FormClosing(object sender, FormClosingEventArgs e) { this.Visible = false; } private void button_check_Click(object sender, EventArgs e)//查询 { if (con.State == ConnectionState.Closed) con.Open(); int i; String str1; ds.Tables.Clear(); if (this.textBox_book_no.Text.Trim() == "" && this.textBox_name.Text.Trim() == "" && this.comboBox_press .Text.Trim() == "" && this.textBox_price.Text.Trim() == "" && this.textBox_total.Text.Trim() == "" && this.textBox_writer.Text.Trim() == "") { MessageBox.Show("请填写任一项进行查询!", "新书入库登记"); }

else { if (this.textBox_book_no.Text != "")//按书号查找 { String str = "select count(*) from dbo.Book_Info where Book_ID='" + this.textBox_book_no.Text.ToString().Trim() + "'"; da.SelectCommand = new SqlCommand(str, con); i = Convert.ToInt32(da.SelectCommand.ExecuteScalar()); if (i > 0) { str1 = "select * from dbo.Book_Info where Book_ID='" + this.textBox_book_no.Text.ToString().Trim() + "'"; da.SelectCommand = new SqlCommand(str1, con); da.Fill(ds, "selectifo2"); dataGridView_result.DataSource = ds.Tables["selectifo2"]; dataGridView_result.Refresh(); } else { MessageBox.Show("不存在此记录!"); } } else if (this.textBox_name.Text != "")//按书名查找 { ……// //和上面类似 // } else if (this.textBox_writer.Text != "")//按作者查找 { //和上面类似 ……// // } else if (this.textBox_price.Text != "")//按单价查找 { ……// //和上面类似 // } else if (this.comboBox_press.Text != "")//按出版社查找 { ……// //和上面类似 // } else if (this.textBox_total.Text != "")//按总量查找 { ……// //和上面类似 // } } con.Close(); } //更新的代码操作就是将控件内容置空,每个模块都是,所以以后的更新操作不再给出具体代码 private void button_update_Click(object sender, EventArgs e)//更新 { this.textBox_book_no.Text = ""; this.textBox_name.Text = ""; this.comboBox_press .Text = ""; this.textBox_price.Text = ""; this.textBox_total.Text = ""; this.textBox_writer.Text = ""; } private void dataGridView_result_CellClick(object sender, DataGridViewCellEventArgs e) { int i = dataGridView_result.CurrentRow.Index;//dataGridView当前选中行 this.textBox_book_no.Text = ds.Tables["selectifo2"].Rows[i][0].ToString(); this.textBox_name.Text = ds.Tables["selectifo2"].Rows[i][1].ToString(); this.textBox_writer.Text = ds.Tables["selectifo2"].Rows[i][2].ToString(); this.textBox_price.Text = ds.Tables["selectifo2"].Rows[i][4].ToString();

this.comboBox_press.Text = ds.Tables["selectifo2"].Rows[i][3].ToString(); } }

运行结果: 运行前数据库中 Book_Info 表中的数据:

图5 如果信息有没填的,点击“入库”会弹出如下对话框,图 6:

图6 图7 图8 图9 填入书号后点击“查询”在 DataGridView 控件里会显示按书号查询的结果,图 7: 在 DataGridView 控件里点击一条记录会在上面的 textBox 和 ComboBox 控件里显示该 书的信息,图 8: 输入总量:8,点击“入库”会在数据库中看到书号是 787121030462 的书籍的总量由 20 变到 28 本,现存量由 20(图 5)变到 28 本(图 10) 。并弹出图 9 对话框:

图 10 图 11 如果入库的书籍在数据库中没有的话,在 Book_Info 表中则增加一条新的记录:

图 13 图 14 “刷新”按钮就是将 textBox 和 ComboBox 控件里的信息清空: “查询”可以在 textBox 和 ComboBox 控件里填写任一项来查询,如果同时填有多项, 则按前面的一项查询。 “返回”则返回到主界面窗口。
图 12

2) 借书 还书: 借书/还书: 还书
功能说明:借书/还书管理是图书管理系统中的最重要的模块,包括了查询书籍、显示 借阅信息、借书、还书等功能。 源代码:
private void button_check_books_Click(object sender, EventArgs e)

{ Form5 form5 = new Form5();//查询书籍 form5.Show(); } private void button_borrow_Click(object sender, EventArgs e) { if (this.textBox_book_no.Text.Trim() == "" || this.textBox_proof_no.Text.Trim() == "") { MessageBox.Show("请正确填写要求的数据!", "借书/还书管理"); this.textBox_book_no.Text = ""; this.textBox_proof_no.Text = ""; } else { //判断借书人是否有资格 if (con.State == ConnectionState.Closed) con.Open(); String str = "select count(*) from dbo.Proof_Info where Proof_ID='" + this.textBox_proof_no.Text.Trim() + "'"; SqlCommand com = new SqlCommand(str, con); int i = Convert.ToInt32(com.ExecuteScalar()); if (i > 0) { ds.Tables.Clear(); //检查该读者已借书中是否有超期的 String str1 = "select * from dbo.Borrow_Info where Proof_ID='"+ this.textBox_proof_no .Text .Trim ()+"'"; da.SelectCommand = new SqlCommand(str1, con); da.Fill(ds,"borrow"); bool BORROW = true; float punish = (float)0.0; String str9 = "select * from dbo.Punish_Info where Proof_ID='" + this.textBox_proof_no.Text.Trim() + "'"; da.SelectCommand = new SqlCommand(str9, con); da.Fill(ds, "borrow1"); for (int p = 0; p < ds.Tables["borrow1"].Rows.Count; p++) { BORROW = false; float punishment = (float)Convert.ToDouble(ds.Tables["borrow1"].Rows[p][5]); punish += punishment; } for (int j = 0; j < ds.Tables["borrow"].Rows.Count; j++) { DateTime dt1 = Convert.ToDateTime(ds.Tables["borrow"].Rows[j][3]); DateTime dt2 = DateTime.Now; TimeSpan ts = dt2-dt1; int day = ts.Days; if (day > 30) { BORROW =false; punish+=(float)0.1*(day-30); } } if (!BORROW) { MessageBox.Show("您已欠费"+punish+"元,请先缴费!", "借书/还书"); } else { //检查该读者所借图书数量,是否达到个人限度 String str2 = "select Now_Borrow_Amount from dbo.Proof_Info where Proof_ID='" +

this.textBox_proof_no.Text.Trim() + "'"; SqlCommand com1 = new SqlCommand(str2, con); int total_num = Convert.ToInt32(com1.ExecuteScalar()); String str3 = "select Now_Amount from Book_Info where Book_ID='" + this.textBox_book_no.Text.Trim() + "'"; SqlCommand com2 = new SqlCommand(str3, con); int now_num = Convert.ToInt32(com2.ExecuteScalar()); if (total_num == 8)//不满足借书条件 { MessageBox.Show("该读者的借书数量已达到8本!", "借书/还书"); } else//满足借书条件 { ds.Tables.Clear(); //判断书号是否正确 String str4 = "select count(*) from dbo.Book_Info where Book_ID='" + this.textBox_book_no.Text.Trim() + "'"; SqlCommand com3 = new SqlCommand(str4, con); int j = Convert.ToInt32(com3.ExecuteScalar()); if (j > 0)//输入书号正确 { total_num++;//Proof_Info表中借书数量加1 String str5 = "update dbo.Proof_Info set Now_Borrow_Amount= '" + total_num.ToString().Trim() + "'where Proof_ID='" + this.textBox_proof_no.Text.Trim() + "'"; da.UpdateCommand = new SqlCommand(str5, con); da.UpdateCommand.ExecuteNonQuery(); //BookInfo表中NowAmount减1 now_num--; String str6 = "update dbo.Book_Info set Now_Amount= '" + now_num.ToString().Trim() + "'where Book_ID='" + this.textBox_book_no.Text.Trim() + "'"; da.UpdateCommand = new SqlCommand(str6, con); da.UpdateCommand.ExecuteNonQuery(); //将借书信息保存到借书信息表中 String bookid = this.textBox_book_no.Text.ToString().Trim(); String proofid = this.textBox_proof_no.Text.ToString().Trim(); String dt = DateTime.Now.ToString(); String str7 = "insert into dbo.Borrow_Info (Proof_ID,Book_ID,Borrow_Date) " + "values ('" + proofid + "','" + bookid + "','" + dt + "')"; da.InsertCommand = new SqlCommand(str7, con); int res=da.InsertCommand.ExecuteNonQuery(); if (res > 0) MessageBox.Show("借书成功!", "借书/还书"); else MessageBox.Show("借书失败!", "借书/还书"); //将该读者的借阅信息显示在DataGridView控件中 String str8 = "select * from dbo.Borrow_Info where Proof_ID='" + this.textBox_proof_no.Text.ToString().Trim() + "'"; da.SelectCommand = new SqlCommand(str8, con); da.Fill(ds, "selectifo"); //在dataGridView控件中显示该读者的借书信息 dataGridView_result.DataSource = ds.Tables["selectifo"]; dataGridView_result.Refresh(); } else//输入书号不正确 { MessageBox.Show("输入书号不正确!", "借书/还书"); this.textBox_book_no.Text = ""; } }//满足借书条件 }//if(!BORROW)

}// if (i > 0) else { MessageBox.Show("数据库中没有这个人的信息!", "借书/还书"); } con.Close(); } } private void button_return_Click(object sender, EventArgs e)//还书 { if (this.textBox_book_no.Text.Trim() == "" || this.textBox_proof_no.Text.Trim() == "") { MessageBox.Show("请正确填写要求的数据!", "借书/还书管理"); this.textBox_book_no.Text = ""; this.textBox_proof_no.Text = ""; } else { //判断还书人是否有资格 if (con.State == ConnectionState.Closed) con.Open(); String str = "select count(*) from dbo.Proof_Info where Proof_ID='" + this.textBox_proof_no.Text.Trim() + "'"; SqlCommand com = new SqlCommand(str, con); int i = Convert.ToInt32(com.ExecuteScalar()); if (i > 0) { //判断书号是否正确 String str1 = "select count(*) from dbo.Book_Info where Book_ID='" + this.textBox_book_no.Text.Trim() + "'"; SqlCommand com1 = new SqlCommand(str1, con); int j = Convert.ToInt32(com1.ExecuteScalar()); if (j > 0)//输入书号正确 { ds.Tables.Clear(); //判断该书是否过期 String str2 = "select Borrow_Date from dbo.Borrow_Info where Proof_ID='" + this.textBox_proof_no.Text.Trim() + "'and Book_ID='" + this.textBox_book_no.Text.Trim() + "'"; da.SelectCommand = new SqlCommand(str2 ,con); DateTime dt1 = Convert.ToDateTime(da.SelectCommand .ExecuteScalar()); DateTime dt2 = DateTime.Now; TimeSpan ts = dt2.Subtract(dt1); int day = ts.Days; float punish=(float) 0.0; if (day > 30) { String str10 = "select * from dbo.Punish_Info where Proof_ID='" + this.textBox_proof_no.Text.ToString().Trim() + "'"; da.SelectCommand = new SqlCommand(str10, con); da.Fill(ds, "borrow2"); for (int p = 0; p < ds.Tables["borrow2"].Rows.Count; p++) { float punishment = (float)Convert.ToDouble(ds.Tables["borrow2"].Rows[p][5]); punish += punishment; } punish += (float)0.1*(day - 30) ; MessageBox.Show("该读者已欠费" + punish + "元", "借书/还书"); //在Punish_Info表中保存欠费信息 String str9 = "insert into dbo.Punish_Info(Proof_ID,Book_ID,"+ "Borrow_Date,Return_Date,Puni_Money)" +

"values ('" + this.textBox_proof_no.Text.Trim() + "','" + this.textBox_book_no.Text.Trim() + "','" + dt1.ToString() + "','" + dt2.ToString() + "','" + punish + "')"; da.InsertCommand = new SqlCommand(str9, con); da.InsertCommand.ExecuteNonQuery(); } String str3 = "select Now_Borrow_Amount from dbo.Proof_Info where Proof_ID='" + this.textBox_proof_no.Text.Trim() + "'"; SqlCommand com3 = new SqlCommand(str3, con); int total_num = Convert.ToInt32(com3.ExecuteScalar()); String str4 = "select Now_Amount from Book_Info where Book_ID='" + this.textBox_book_no.Text.Trim() + "'"; SqlCommand com4 = new SqlCommand(str4, con); int now_num = Convert.ToInt32(com4.ExecuteScalar()); total_num--;//Proof_Info表中借书数量减1 String str5 = "update dbo.Proof_Info set Now_Borrow_Amount= '" + total_num.ToString().Trim() + "'where Proof_ID='" + this.textBox_proof_no.Text.Trim() + "'"; da.UpdateCommand = new SqlCommand(str5, con); da.UpdateCommand.ExecuteNonQuery(); //BookInfo表中NowAmount加1 now_num++; String str6 = "update dbo.Book_Info set Now_Amount= '" + now_num.ToString().Trim() + "'where Book_ID='" + this.textBox_book_no.Text.Trim() + "'"; da.UpdateCommand = new SqlCommand(str6, con); da.UpdateCommand.ExecuteNonQuery(); //将借书信息在借书信息表中删除 String bookid = this.textBox_book_no.Text.ToString().Trim(); String proofid = this.textBox_proof_no.Text.ToString().Trim(); String dt = DateTime.Now.ToString(); String str7 = "delete from dbo.Borrow_Info where Proof_ID='" + this.textBox_proof_no.Text.ToString().Trim() + "' and Book_ID='" + this.textBox_book_no.Text.ToString().Trim() + "'"; da.InsertCommand = new SqlCommand(str7, con); int res=da.InsertCommand.ExecuteNonQuery(); if (res > 0) MessageBox.Show("还书成功!", "借书/还书"); else MessageBox.Show("还书失败!", "借书/还书"); //将该读者的借阅信息显示在DataGridView控件中 String str8 = "select * from dbo.Borrow_Info where Proof_ID='" + this.textBox_proof_no.Text.ToString().Trim() + "'"; da.SelectCommand = new SqlCommand(str8, con); da.Fill(ds, "selectifo1"); dataGridView_result.DataSource = ds.Tables["selectifo1"]; dataGridView_result.Refresh(); }//if(i>0) else//输入书号不正确 { MessageBox.Show("输入书号不正确!", "借书/还书"); this.textBox_book_no.Text = ""; } }//if (i > 0) else { MessageBox.Show("数据库中不存在该读者!","借书/还书"); this.textBox_proof_no.Text = ""; } } }

界面演示: 数据库中 Proof_Info 表中有如下信息:

借书成功的条件有 4 条: 借阅证号和图书证号都不能为空,否则点击借书或者还书的时候会弹出“请正 确填写要求的数据!”的对话框。 该读者已借阅量不能超过 8 本,否则会弹出提示对话框。如图 15、16。 Borrow_Info 表中 0700705206 读者已借了 8 本书,再借会弹出提示框:

图 15 图 16 借阅证号和图书号数据库中要存在, 否则会提示借阅证号或者图书号不存在的 信息。如图 17、18。

图 17 图 18 该读者已借的书籍中没有逾期的书目并且 Punish_Info 表中该读者没有欠费记 录,否则会弹出该读者已欠费的提示对话框。如图 21、22 Punish_Info 表中信息如图 19:

图 19 图 20 Borrow_Info 表中信息如图 20: Proof_ID 是 070505204 的读者有欠费记录,他借书时会弹出如图 21 对话框:

图 21 图 22 Proof_ID 是 070505204 的读者已借书中有逾期的, 他借书时会弹出如图 22 对话框: Proof_ID 是 070505204 的读者可以借书:图 23

图 23 这时候会看到 Book_Info 表中刚借的那本书的现存量少了一本:图 24

图 24 Borrow_Info 表中多了一条记录:

图 25 图 26 Proof_Info 表中 0700705206 的读者现借书量多了一本:图 26 还书成功的条件有 2 条: 借阅证号和图书证号都不能为空,否则点击借书或者还书的时候会弹出“请正 确填写要求的数据!”的对话框。 借阅证号和图书证号数据库中要存在, 否则会提示借阅证号或者图书证号不存 在的信息。 (和借书时一样的要求,不再赘述。 ) 如果有逾期的或者欠费记录的会提示已欠费,但可以正常还书。如图 27、28。 Proof_ID 是 070505206 的读者还书时会弹出如下对话框:

图 27 图 28 点击借书或者还书后在 DataGridView 里会显示该读者的借阅信息。 (如图 23) “刷新”和前面一样,将 textBox 控件置空( “刷新”都是将 textBox 控件置空,以 后不再对刷新按钮加以叙述) 。 “查询书籍” 可以按照书号查询, 查询结果将显示在 DataGridView 控件中。 “返回” 则返回“借书/还书”界面。如图 29。

图 29 “返回”则返回系统主界面。“返回”都是返回调用它的界面,以后不再对返回按 ( 钮加以叙述。 )

1) 缴费
功能说明:可以根据借阅证号码查询该读者的欠费纪录,并在 DataGridView 里显 示查询结果。缴费成功的话,应该在 Punish_Info 表中删除欠费记录。 源代码:
private void button_ok_Click(object sender, EventArgs e)//缴费 { this.Size = new Size(554, 296); if (this.textBox_book_no.Text == "" || this.textBox_money.Text == "" || this.textBox_proof_no.Text == "")

{ MessageBox.Show("请输入正确信息!", "缴费"); } else { //判断借阅证号是否正确 if (con.State == ConnectionState.Closed) con.Open(); String str = "select count(*) from dbo.Proof_Info where Proof_ID='" + this.textBox_proof_no.Text.ToString ().Trim() + "'"; SqlCommand com = new SqlCommand(str, con); int i = Convert.ToInt32(com.ExecuteScalar()); if (i > 0) { //判断书号是否正确 String str1 = "select count(*) from dbo.Book_Info where Book_ID='" + this.textBox_book_no.Text.ToString().Trim() + "'"; SqlCommand com3 = new SqlCommand(str1, con); int j = Convert.ToInt32(com3.ExecuteScalar()); if (j > 0)//输入书号正确 { ds.Tables.Clear(); String str2 = "select * from dbo.Punish_Info where Proof_ID='" + this.textBox_proof_no.Text.ToString().Trim() + "' and Book_ID='" + this.textBox_book_no.Text.ToString().Trim() + "'"; da.SelectCommand = new SqlCommand(str2, con); da.Fill(ds, "borrow1"); float punish =(float) 0.0; for (int k = 0; k < ds.Tables["borrow1"].Rows.Count; k++) { float punishment = (float)Convert.ToDouble(ds.Tables["borrow1"].Rows[k][5]); punish += punishment; } if ((float)Convert.ToDouble(this.textBox_money.Text) == punish) { String str3 = "delete from dbo.Punish_Info where Proof_ID='" + this.textBox_proof_no.Text.ToString().Trim() + "' and Book_ID='" + this.textBox_book_no.Text.ToString().Trim() + "'"; da.DeleteCommand = new SqlCommand(str3, con); int res=da.DeleteCommand.ExecuteNonQuery (); if (res > 0) this.label5.Text = "缴费成功!"; else this.label5.Text = "缴费失败!"; } else if ((float)Convert.ToDouble(this.textBox_money.Text)< punish) { String str5 = "select Puni_Money from dbo.Punish_Info where Proof_ID='" + this.textBox_proof_no.Text.ToString().Trim() + "' and Book_ID='" + this.textBox_book_no.Text.Trim() + "'"; SqlCommand com2 = new SqlCommand(str5, con); float money =(float ) Convert.ToDouble (com2.ExecuteScalar()); float rest = punish - (float)Convert.ToDouble(this.textBox_money.Text); String str4 = "update dbo.Punish_Info set Puni_Money= '" + rest .ToString()+ "'where Proof_ID='" + this.textBox_proof_no.Text.Trim() + "'and Book_ID='" + this.textBox_book_no.Text.Trim() + "'"; da.UpdateCommand = new SqlCommand(str4, con); int res1=da.UpdateCommand.ExecuteNonQuery(); if(res1>0) this.label5.Text = "该读者还欠费" + rest + "元"; else this.label5.Text = "缴费失败!";

} else if ((float)Convert.ToDouble(this.textBox_money.Text) > punish) { String str6 = "select Puni_Money from dbo.Punish_Info where Proof_ID='" + this.textBox_proof_no.Text.ToString().Trim() + "' and Book_ID='" + this.textBox_book_no.Text.Trim() + "'"; SqlCommand com2 = new SqlCommand(str6, con); float money = (float)Convert.ToDouble(com2.ExecuteScalar()); float rest1 = (float)Convert.ToDouble(this.textBox_money.Text) - punish; String str7 = "delete from dbo.Punish_Info where Proof_ID='" + this.textBox_proof_no.Text.ToString().Trim() + "' and Book_ID='" + this.textBox_book_no.Text.ToString().Trim() + "'"; da.DeleteCommand = new SqlCommand(str7, con); int res2=da.DeleteCommand.ExecuteNonQuery(); if(res2 >0) this.label5.Text = "应找零" + rest1 + "元"; else this.label5.Text = "缴费失败!"; } } else { MessageBox.Show("数据库中没有这本书!", "缴费"); } } else { MessageBox.Show("数据库中没有该读者!","缴费"); } con.Close(); } } private void button_check_Click(object sender, EventArgs e)//查询欠费情况 { if (this.textBox_proof_no.Text == "") { this.label5.Text = "借阅证号不能为空!"; } else { if (con.State == ConnectionState.Closed) con.Open(); String str = "select count(*) from dbo.Proof_Info where Proof_ID='" + this.textBox_proof_no.Text.Trim() + "'"; SqlCommand com = new SqlCommand(str, con); int i = Convert.ToInt32(com.ExecuteScalar()); if (i > 0) { ds.Tables.Clear(); str = "select * from dbo.Punish_Info where Proof_ID='" + this.textBox_proof_no.Text.ToString().Trim() + "'"; da.SelectCommand = new SqlCommand(str, con); da.Fill(ds, "borrow3"); float punish = (float)0.0; for (int p = 0; p < ds.Tables["borrow3"].Rows.Count; p++) { float punishment = (float)Convert.ToDouble(ds.Tables["borrow3"].Rows[p][5]); punish += punishment; } this.label5.Text = "该读者已欠费" + punish + "元"; dataGridView1.DataSource = ds.Tables["borrow3"];

dataGridView1.Refresh(); } else { this.label5.Text = "数据库中没有该读者!"; } this.Size = new Size(554, 504); con.Close(); } }

界面演示: 输入借阅证号 070505204,查询该读者的欠费信息:

图 30 图 31 Punish_Info 表中的欠费纪录如图 19,输入借阅证号、书号、缴费金额,缴费,三项 不能有空。如果缴费金额多于欠费金额,会提示应找零,图 33,Punish_Info 表中已 删除此读者此本书的的欠费记录。如果少了,会提示还欠费多少,图 31,图 32, Punish_Info 表中的记录会更新,如果正好,则提示缴费成功,图 34。

图 33

图 34

图 32

2) 书籍挂失: 书籍挂失:
功能说明:输入书号和借阅证号,挂失后可显示罚款金额。可以显示读者的借阅信 息,挂失的这本书的信息。罚款金额=书的单价*3+这本书逾期罚款。程序验证输入 数据是否正确,书号和借阅证号不能为空,数据库中应该有相应的书号和借阅证号 的记录,输入错误会有相应提示,这里不再赘述。 源代码:
private void button_book_info_Click(object sender, EventArgs e)//书籍信息 { this.Size = new Size(568, 206); if (this.textBox_book_no.Text.Trim() == "") { MessageBox.Show("书号不能为空!", "书籍挂失"); this.textBox_book_no.Text = ""; } else { if (con.State == ConnectionState.Closed) con.Open(); //判断该书籍是否存在 String str = "select count(*) from dbo.Book_Info where Book_ID='" +

this.textBox_book_no.Text.ToString().Trim() + "'"; da.SelectCommand = new SqlCommand(str, con); int i = Convert.ToInt32(da.SelectCommand.ExecuteScalar()); if (i > 0) { String str1 = "select * from dbo.Book_Info where Book_ID='" + this.textBox_book_no.Text.ToString().Trim() + "'"; da.SelectCommand = new SqlCommand(str1, con); da.Fill(ds, "selectifo4"); String str2, str3, str4, str5, str6, str7, str8, str9; str2 = ds.Tables["selectifo4"].Rows[0][0].ToString(); str3 = ds.Tables["selectifo4"].Rows[0][1].ToString(); str4 = ds.Tables["selectifo4"].Rows[0][2].ToString(); str5 = ds.Tables["selectifo4"].Rows[0][3].ToString(); str6 = ds.Tables["selectifo4"].Rows[0][4].ToString(); str7 = ds.Tables["selectifo4"].Rows[0][5].ToString(); str8 = ds.Tables["selectifo4"].Rows[0][6].ToString(); str9 = ds.Tables["selectifo4"].Rows[0][7].ToString(); Form7 form7 = new Form7(str2, str3, str4, str5, str6, str7, str8, str9); form7.Show(); } else { MessageBox.Show("不存在此书!"); } con.Close(); } } private void button_lost_Click(object sender, EventArgs e)//挂失 { this.Size = new Size(568, 206); //判断输入数据是否为空 if (this.textBox_book_no.Text.Trim() == "" || this.textBox_proof_no.Text.Trim() == "") { MessageBox.Show("请正确填写要求的数据!", "新书入库登记"); this.textBox_book_no.Text = ""; this.textBox_proof_no.Text = ""; } else { if (con.State == ConnectionState.Closed) con.Open(); //判断该读者是否存在 String str = "select count(*) from dbo.Proof_Info where Proof_ID='" + this.textBox_proof_no.Text.Trim() + "'"; SqlCommand com = new SqlCommand(str, con); int i = Convert.ToInt32(com.ExecuteScalar()); if (i > 0) { //判断该书是否存在 String str1 = "select count(*) from dbo.Book_Info where Book_ID='" + this.textBox_book_no.Text.Trim() + "'"; SqlCommand com1 = new SqlCommand(str1, con); int j = Convert.ToInt32(com1.ExecuteScalar()); if(j>0) { //记录因丢失书籍造成的罚金信息 float punish = 0.00F; //记录图书挂失日期 String str2 = "select Borrow_Date from dbo.Borrow_Info where Proof_ID='" + this.textBox_proof_no.Text.ToString().Trim() + "'and Book_ID='" + this.textBox_book_no.Text.Trim() + "'";

da.SelectCommand = new SqlCommand(str2, con); DateTime dt1 = Convert.ToDateTime(da.SelectCommand.ExecuteScalar()); DateTime dt2 = DateTime.Now; TimeSpan ts = dt2 - dt1; int day = ts.Days; //超期,予以罚款 if (day >30) { //30天为超值期限,一天缴纳罚款0.1元 punish += (float)(0.1 * (day - 30)); } //无论是否超期,先还书 String str3 = "select Now_Borrow_Amount from dbo.Proof_Info where Proof_ID='" + this.textBox_proof_no.Text.Trim() + "'"; SqlCommand com2 = new SqlCommand(str3, con); int total_num = Convert.ToInt32(com2.ExecuteScalar()); String str4 = "select Now_Amount from Book_Info where Book_ID='" + this.textBox_book_no.Text.Trim() + "'"; SqlCommand com3 = new SqlCommand(str4, con); int now_num = Convert.ToInt32(com3.ExecuteScalar()); total_num--;//Proof_Info表中借书数量减1 String str5 = "update dbo.Proof_Info set Now_Borrow_Amount= '" + total_num.ToString().Trim() + "'where Proof_ID='" + this.textBox_proof_no.Text.Trim() + "'"; da.UpdateCommand = new SqlCommand(str5, con); da.UpdateCommand.ExecuteNonQuery(); //将借书信息在借书信息表中删除 String bookid = this.textBox_book_no.Text.ToString().Trim(); String proofid = this.textBox_proof_no.Text.ToString().Trim(); String str7 = "delete from dbo.Borrow_Info where Proof_ID='" + this.textBox_proof_no.Text.ToString().Trim() + "' and Book_ID='" + this.textBox_book_no.Text.ToString().Trim() + "'"; da.DeleteCommand= new SqlCommand(str7, con); da.DeleteCommand.ExecuteNonQuery(); //查询书籍信息,书库藏书总量减1 String str8 = "select Total_Amount from Book_Info where Book_ID='" + this.textBox_book_no.Text.Trim() + "'"; SqlCommand com4 = new SqlCommand(str8, con); int total = Convert.ToInt32(com4.ExecuteScalar()); total--; String str9 = "update dbo.Book_Info set Total_Amount= '" + total.ToString().Trim() + "'where Book_ID='" + this.textBox_book_no .Text .Trim() + "'"; da.UpdateCommand = new SqlCommand(str9, con); da.UpdateCommand.ExecuteNonQuery(); //查询价格信息,计算罚款金额 String str10 = "select Price from dbo.Book_Info where Book_ID='" + this.textBox_book_no.Text.Trim() + "'"; SqlCommand com5 = new SqlCommand(str10, con); int price = Convert.ToInt32(com5.ExecuteScalar()); punish += price * 3; //将罚款信息存入罚款信息表中 String str11 = "insert into dbo.Punish_Info(Proof_ID,Book_ID,Borrow_Date,"+ "Return_Date,Puni_Money)"+"values ('" + proofid + "','" + bookid + "','" + dt1 + "','"+dt2+"','"+punish +"')"; da.InsertCommand = new SqlCommand(str11, con); int res=da.InsertCommand.ExecuteNonQuery(); label5.Text = punish.ToString(); if(res>0) MessageBox.Show("挂失成功!","图书挂失"); else MessageBox.Show("挂失失败!", "图书挂失"); }

else { MessageBox.Show("该书不存在!","图书挂失"); } } else { MessageBox.Show("不存在改读者!","图书挂失"); } } con.Close(); } private void button_borrow_info_Click(object sender, EventArgs e)//借阅信息 { if (this.textBox_proof_no.Text.Trim() == "") { MessageBox.Show("借阅证号不能为空!", "书籍挂失"); this.textBox_proof_no.Text = ""; } else { if (con.State == ConnectionState.Closed) con.Open(); ds.Tables.Clear(); String str1 = "select count(*) from dbo.Proof_Info where Proof_ID='" + this.textBox_proof_no.Text.Trim() + "'"; SqlCommand com = new SqlCommand(str1, con); int i = Convert.ToInt32(com.ExecuteScalar()); if (i > 0) { String str = "select * from dbo.Borrow_Info where Proof_ID='" + this.textBox_proof_no.Text.Trim() + "'"; da.SelectCommand = new SqlCommand(str, con); da.Fill(ds, "borrowinfo"); dataGridView1.DataSource = ds.Tables["borrowinfo"]; dataGridView1.Refresh(); con.Close(); this.Size = new Size(568, 391); } else { MessageBox.Show("数据库中不存在该读者!","书籍挂失"); } } }

界面演示: 挂失前 Borrow_Info 表中有如与 35 信息:

图 35 挂失信息如图 36,提示罚款金额: 显示借阅信息:图 37

图 36

图 37 图 38 挂失成功后再 Punish_Info 表中增加了一条记录:图 38 : Proof_Info 表中该读者的借书总量减 1:图 39

图 39 图 40 Book_Info 表中书号为 787302132172 的书的总量少了一本(结合图 24) :图 40 显示书籍信息:图 41

图 41

图 42

3) 图书信息查询: 图书信息查询:
功能说明:在书号、书名、出版社、作者中任选一项进行查询,如果输入多项, 则按前面一项查询。 源代码:
private void button_check_Click(object sender, EventArgs e) { if (con.State == ConnectionState.Closed) con.Open(); int i; if (this.textBox_book_no.Text != "")//按书号查找 { …… } else if (this.textBox_book_name .Text != "")//按书名查找 { ……

} else if (this.textBox_press.Text != "")//按出版社查找 { …… } else if (this.textBox_writer.Text != "")//按作者查找 { …… } con.Close(); }

界面演示: 按出版社查询结果:图 42

4) 借书信息查询: 借书信息查询:
功能说明:可以按借阅证号或者姓名查询。查询结果在 DataGridView 里显示。 源代码:
private void button_check_Click(object sender, EventArgs e)//查询 { if (con.State == ConnectionState.Closed) con.Open(); int i; String str2 = "select count(*) from dbo.Proof_Info where Proof_ID='" + this.textBox_proof_no.Text.ToString().Trim() + "'"; da.SelectCommand = new SqlCommand(str2, con); int j = Convert.ToInt32(da.SelectCommand.ExecuteScalar()); if (j > 0) { ds.Tables.Clear(); if (this.textBox_proof_no.Text != "")//按借阅证号查找 { …… } } else//按姓名查找 { …… } con.Close(); }

界面演示: 输入借阅证号,显示借阅信息:

图 43

4. 借阅证管理: 借阅证管理: 1) 办理借阅证: 办理借阅证:
功能说明:填写借阅证号、姓名、性别、出生年月、身份证号、家庭住址、电话 号码信息,要求借阅证号、身份证号在 Proof_Info 表中不能有重复,不能 有空信息。即要求一个身份证号只能办一个借阅证,借阅证不能在 Proof_Info 表中时主键,不能重复,否则会提示相应信息。可以按借阅证 号或者身份证号查询读者信息。 源代码:
private void button_make_Click(object sender, EventArgs e) { if (con.State == ConnectionState.Closed) con.Open(); this.Size = new Size(452, 345); this.dataGridView1.Visible = false; //检验输入数据是否合法 if (this.textBox_proof_no.Text == "" || this.textBox_name.Text == "" || this.textBox_ID.Text == ""|| this.textBox_address.Text == "" || this.textBox_tel.Text == "" || this.dateTimePicker1.Text == null || (this.radioButton_man.Checked == false && this.radioButton_women.Checked == false)) { MessageBox.Show("请正确填写信息!", "办理借阅证"); } else { //查看是否已经有该借阅证号 String str = "select count(*) from dbo.Proof_Info where Proof_ID='" + this.textBox_proof_no.Text.ToString().Trim() + "'"; da.SelectCommand = new SqlCommand(str, con); int i = Convert.ToInt32(da.SelectCommand.ExecuteScalar()); if (i <=0) { //查看该读者是否已经办过借阅证 String str1 = "select count(*) from dbo.Proof_Info where ID_Number='" + this.textBox_ID .Text.ToString().Trim() + "'"; da.SelectCommand = new SqlCommand(str1, con); int j = Convert.ToInt32(da.SelectCommand.ExecuteScalar()); if (j <= 0) { //办理借阅证 String proofid = this.textBox_proof_no.Text; String name = this.textBox_name.Text; String sex; if (this.radioButton_women.Checked == true) sex = "女"; else sex = "男"; String birth = this.dateTimePicker1.Value.Date.ToString(); String id = this.textBox_ID.Text.Trim(); String address = this.textBox_address.Text.Trim(); String tel = this.textBox_tel.Text.Trim(); //插入Proof_Info表中 String str2 = "insert into dbo.Proof_Info " + "values ('" + proofid + "','" + name + "','" + sex + "','" + birth + "','" + address + "','" + id + "','" + tel + "','" + 0 + "')";

da.InsertCommand = new SqlCommand(str2, con); int res =da.InsertCommand.ExecuteNonQuery(); if (res>0) MessageBox.Show("办理借阅证成功!","办理借阅证"); else MessageBox.Show("办理借阅证失败!", "办理借阅证"); } else MessageBox.Show("该读者已经办过一张借阅证,按照规定不能再办!","办理借阅证"); } else MessageBox.Show("已存在此借阅证号!"); } con.Close(); } private void Form11_Load(object sender, EventArgs e) { this.Size = new Size(452,345); this.dataGridView1.Visible = false; } private void button_check_Click(object sender, EventArgs e) { if (con.State == ConnectionState.Closed) con.Open(); this.Size = new Size(473,499); this.dataGridView1.Visible = true; if (this.textBox_proof_no.Text != "")//按借阅证号查 { ……. . } else if (this.textBox_ID.Text != "")//按身份证号查找 { …… } con.Close(); }

界面演示: 办理前 Proof_Info 表中有如图 44 信息:

图 44 办理借阅证信息如图 45: 办理后 Proof_Info 表中有如图 46 信息:

图 45

图 46 图 47 图 48 如果借阅证号或者次身份证号已办理过一张借阅证会分别弹出如图 47、 信息: 48

2) 借阅证信息查询: 借阅证信息查询:
功能说明:按借阅证号查询借阅证信息,查询结果显示在 DataGridView 里。 源代码:
private void button_check_Click(object sender, EventArgs e)// 按借阅证号查询查询 { …… }

界面演示:图 48

图 48

图 49

3) 借阅证挂失: 借阅证挂失:
功能说明:在 Proof_Info 表中删除该借阅证信息,前提是该读者借出的书要先归还, 不能有欠费记录,否则会提示相应信息。可以显示借阅证信息。 源代码:
private void button_show_Click(object sender, EventArgs e) { if (con.State == ConnectionState.Closed) con.Open(); if (this.textBox_proof_no.Text == "") { MessageBox.Show("借阅证号不能为空!", "查看借阅证信息"); } else { String str = "select count(*) from dbo.Proof_Info where Proof_ID='" + this.textBox_proof_no.Text.ToString().Trim() + "'"; da.SelectCommand = new SqlCommand(str, con); int i = Convert.ToInt32(da.SelectCommand.ExecuteScalar()); if (i >0) { String str1 = "select * from dbo.Proof_Info where Proof_ID='" + this.textBox_proof_no.Text.ToString().Trim() + "'"; da.SelectCommand = new SqlCommand(str1, con); da.Fill(ds, "check3"); String str2, str3, str4, str5, str6, str7, str8, str9; str2 = ds.Tables["check3"].Rows[0][0].ToString(); str3 = ds.Tables["check3"].Rows[0][1].ToString(); str4 = ds.Tables["check3"].Rows[0][2].ToString(); str5 = ds.Tables["check3"].Rows[0][3].ToString(); str6 = ds.Tables["check3"].Rows[0][4].ToString(); str7 = ds.Tables["check3"].Rows[0][5].ToString(); str8 = ds.Tables["check3"].Rows[0][6].ToString(); str9 = ds.Tables["check3"].Rows[0][7].ToString(); Form8 form8 = new Form8(str2, str3, str4, str5, str7, str8, str6, str9); form8.Show(); } else {

MessageBox.Show("不存在该读者!", "查看借阅证信息"); } } con.Close(); } private void button_lost_Click(object sender, EventArgs e)//挂失 { if (con.State == ConnectionState.Closed) con.Open(); String str = "select count(*) from dbo.Proof_Info where Proof_ID='" + this.textBox_proof_no.Text.ToString().Trim() + "'"; da.SelectCommand = new SqlCommand(str, con); int i = Convert.ToInt32(da.SelectCommand.ExecuteScalar()); if (i > 0) { //挂失,删除该借阅证的记录信息 //还有书籍未还的,要先还书 String str1 = "select Now_Borrow_Amount from dbo.Proof_Info where Proof_ID='" + this.textBox_proof_no.Text.ToString().Trim() + "'"; da.SelectCommand = new SqlCommand(str1, con); int j = Convert.ToInt32(da.SelectCommand.ExecuteScalar()); if (j > 0) { MessageBox.Show("请先将借出的书归还!", "借阅证挂失"); } else { //检查该读者已借书中是否有超期的 String str2 = "select * from dbo.Borrow_Info where Proof_ID='" + this.textBox_proof_no.Text.Trim() + "'"; da.SelectCommand = new SqlCommand(str2, con); da.Fill(ds, "borrow"); bool BORROW = true; float punish = (float)0.0; String str3 = "select * from dbo.Punish_Info where Proof_ID='" + this.textBox_proof_no.Text.Trim() + "'"; da.SelectCommand = new SqlCommand(str3, con); da.Fill(ds, "borrow1"); for (int p = 0; p < ds.Tables["borrow1"].Rows.Count; p++) { BORROW = false; float punishment = (float)Convert.ToDouble(ds.Tables["borrow1"].Rows[p][5]); punish += punishment; } for (int k = 0; k < ds.Tables["borrow"].Rows.Count;k++) { DateTime dt1 = Convert.ToDateTime(ds.Tables["borrow"].Rows[k][3]); DateTime dt2 = DateTime.Now; TimeSpan ts = dt2 - dt1; int day = ts.Days; if (day > 30) { BORROW = false; punish += (float)0.1 * (day - 30); } } if (!BORROW) { MessageBox.Show("您已欠费" + punish + "元,请先缴费!", "借阅证挂失"); } else

{ String str4 = "delete from dbo.Proof_Info where Proof_ID='" + this.textBox_proof_no.Text.ToString().Trim() + "'"; da.DeleteCommand = new SqlCommand(str4, con); int res=da.DeleteCommand.ExecuteNonQuery(); if(res>0) MessageBox.Show("挂失成功!", "借阅证挂失"); else MessageBox.Show("挂失失败!", "借阅证挂失"); } } } else { MessageBox.Show("数据库中没有该人信息!","借阅证挂失"); } con.Close(); }

界面演示: 挂失前 Proof_Info 表中信息如图 46。 挂失借阅证信息:图 49 挂失后 Proof_Info 表中信息如下,删除了挂失的借阅证信息:

图 50 如果有欠费记录或者有书没还的会有如下提示信息:图 51、52

图 51 图 52 显示借阅证信息(图 53) :

图 53

5. 系统 其它: 系统/其它: 其它 1) 添加账号: 添加账号:
功能说明:向 Admini_Info 表中添加一个新的管理员。用户名和密码的组合不能重 复。但用户名可以重复,密码可以重复。确认密码和密码不同的会有提示信息。 源代码:
private void button_add_Click(object sender, EventArgs e)//添加

{ if (con.State == ConnectionState.Closed) con.Open(); this.label4.Text = ""; if (this.textBox_user_name.Text == "" || this.textBox_pwd1.Text == "" || this.textBox_pwd2.Text == "") this.label5.Text = "用户名或密码不能为空!"; else //检查密码和确认密码是否一致 if (this.textBox_pwd1.Text == this.textBox_pwd2.Text) { //检查此用户名和密码是否已注册 String str = "select count(*) from dbo.Admin_Info where User_Name='" + this.textBox_user_name.Text.Trim() + "'and Password='" + this.textBox_pwd1.Text.Trim() + "'"; SqlCommand com = new SqlCommand(str, con); int i = Convert.ToInt32(com.ExecuteScalar()); if (i > 0) this.label5.Text = "此用户名和密码已注册!请重新输入。"; else { //保存到Admin_Info表中 String str1 = "insert into dbo.Admin_Info(User_Name,Password) values ('" + this.textBox_user_name.Text.Trim() + "','" + this.textBox_pwd1.Text.Trim() + "')"; da.InsertCommand = new SqlCommand(str1, con); da.InsertCommand.ExecuteNonQuery(); MessageBox.Show("添加账号成功!", "添加账号"); } } else { this.label5.Text = "输入密码不一致,请重新输入!"; this.textBox_pwd1.Text = ""; this.textBox_pwd2.Text = ""; } con.Close(); }

界面演示: 添加前 Admin_Info 表中信息如下(图 54) :

图 54 图 55 图 56 添加新管理员信息(图 55) : 添加后 Admin_Info 表中增加一个管理员(图 56) : 确认密码和密码会有提示信息(图 57) :

图 57 图 58 用户名和密码重复的会提示图 58 信息:

2) 修改密码: 修改密码:
功能说明:在 Admin_Info 表中修改管理员的密码。要求被修改的管理员必须有记 录,确认密码和密码必须一样,否则会有提示信息。 源代码:
private void button_ok_Click(object sender, EventArgs e) { if (con.State == ConnectionState.Closed) con.Open(); this.label5.Text = ""; if (this.textBox_user_name.Text == "" || this.textBox_pwd1.Text == "" || this.textBox_pwd2.Text == "" ||this.textBox_pwd .Text =="") this.label5.Text = "请认真填写信息!"; //检查该用户是否存在 String str = "select count(*) from dbo.Admin_Info where User_Name='" + this.textBox_user_name.Text.Trim() + "'and Password='" + this.textBox_pwd.Text.Trim() + "'"; SqlCommand com = new SqlCommand(str, con); int i = Convert.ToInt32(com.ExecuteScalar()); if (i > 0) { //检查修改密码和确认密码是否一致 if (this.textBox_pwd1.Text == this.textBox_pwd2.Text) { String str1 = "update dbo.Admin_Info set Password='" + this.textBox_pwd1.Text.Trim() + "' where User_Name='" + this.textBox_user_name.Text.Trim() + "' and Password='" + this.textBox_pwd.Text.Trim() + "'"; da.UpdateCommand = new SqlCommand(str1, con); da.UpdateCommand.ExecuteNonQuery(); this.label5.Text = "密码修改成功!"; } else { this.label5.Text = "修改密码和确认密码不一致!请重新输入。"; this.textBox_pwd1.Text = ""; this.textBox_pwd2.Text = ""; } } else { this.label5.Text = "该用户不存在!请重新输入!"; this.textBox_user_name.Text ="" ; this.textBox_pwd1.Text = "" ; this.textBox_pwd2.Text =""; this.textBox_pwd .Text =""; } con.Close();

界面演示: 修改前 Admin_Info 表中信息如图 56。 修改密码信息如图 59:

图 59 图 60 修改后 Admin_Info 表中信息如图 60。第二条记录的密码由 222 改为了 123。

3) 退出: 退出:
退出系统。

总结(体会、经验与教训) 四、 总结(体会、经验与教训)
通过本次课设,对数据库、c#语言有理更深的认识。程序中还有很多地方需要改 进、完善。在程序中某些查询结果的显示信息不实很合理,书号编码也不是很合理,同一 种书编成一个号码,这样,如果同一个读者借阅了相同的两本书,那么在还书的时候换一 本书,Borrow_Info 表中就将两条借阅记录都删除了,但是如果一本书一个编号的话,在入 库的时候管理员的工作量会很大。在缴费时,也有点麻烦。读者只能一本一本的消除罚款 记录,因为有时读者可能不能一次将罚款补请,所以不能一次将读者所有的欠费记录都删 除。这三点是我认为程序的不足之处。编程实现过程中,第一个入库功能做了将近一天, 对数据库的增加、删除、修改、查询都熟悉了,后面的那些功能就是这几个功能的组合, 锻炼的就是逻辑思维能力了。过程中遇到很多问题,比如向表中插入现在时间、计算两个 日期相距的天数。做出这样一个简单的系统,收获还是不小的。不在于我们对 c#、对数据 库学习了多少,而过程才是真正磨练我们的学习的能力的。


相关文章:
毕业设计论文(图书管理系统的设计与实现).doc
毕业设计论文(图书管理系统设计与实现).doc_管理学_高等教育_教育专区。毕业设计论文 毕业论文中文摘要 图书管理系统是智能办公系统(IOA)的重要组成部分,因此,图书...
图书管理系统的设计与实现毕业论文
图书管理系统设计与实现毕业论文_IT/计算机_专业资料。图书管理系统设计与实现毕业论文江阴职业技术学院毕业论文课 题: 图书管理系统设计与实现 图书管理系统的...
图书管理系统的设计与实现论文
南京工程学院 毕业设计说明书(论文) 作院专题者: 系: 业: 目: 学号: 计算机工程学院 计算机科学与技术 图书管理系统设计与实现 指导者: (姓名) (专业技术...
基于WEB的图书管理系统设计与实现--优秀毕业论文
基于WEB的图书管理系统设计与实现--优秀毕业论文_管理学_高等教育_教育专区。一篇完整的优秀毕业设计论文,供广大学习者参考,也可作为教学案例使用。...
图书管理系统的设计与实现
中南大学本 科生毕业论文 题 目: 面向网络图书管理系统设计与实现王 亚宁牛丽娜数学院电政 081 2010 年 4 月 学生姓名: 指导老师: 学专院: 业: 完成时间:...
图书管理系统的设计与实现
江苏农牧科技职业学院毕业论文(设计) 图书管理系统设计与实现作者 孙鑫 指导教师 朱帅 【摘要】图书馆借阅信息管理系统应该能够为用户提供充足的信息和快捷的查询 ...
图书管理系统的设计与实现
四川师范大学本科毕业设计 图书管理系统设计与实现 学生姓名 学号 邓飞 所在系 专业名称 班级 计算机科学与技术系 计算机科学与技术 2008 级计科(网络)1 班 ...
基于JSP的图书管理系统的设计与实现
分类号: 学校代码: 学号: 本科生毕业论文 基于 JSP 的图书管理系统设计与实现 Design and Development of Books Management System Based on JSP 所在院(系):...
图书管理系统设计与实现
第2章 2.1 应用需求分析 图书管理系统需求分析 图书馆管理系统开发的总的设计目标是实现图书管理的系统化、规范化和自动化, 实现对图书资料的集中统一的管理。本...
图书管理系统的设计与实现(标准格式论文)
27 第 4 页 摘 要 本课题设计实现了基于 Web 的图书管理系统,该系统采用现今比较流行的 ASP.NET 语言,结合 SQL Server 数据库,实现图书的借阅、查询、...
更多相关标签:
图书馆管理系统 | 图书馆管理系统设计 | 图书管理系统设计 | 图书管理系统 | 英文翻译 | 系统设计与实现 | 如何设计图书管理系统 | 图书管理系统设计思路 |