图3.4 图书入库界面
在窗体的左边的分组框中添加标签和文本框,用来接收管理员输入的图书信息,以便保存到数据库中。在右边的分组框中添加DataGridView控件,可以显示数据库中的图书信息,新添加的图书信息也可以显示出来。
3.5 图书更新界面
图书更新界面用于方便管理员管理图书信息,实现图书信息修改、删除等操作。界面设计如图3.5所示
图 3.5 图书更新界面
管理员可以在DataGridView控件中直接修改数据,也可以通过右边的分组框实现图书信息的修改。
8
3.6 图书借阅界面
根据图书馆中已有的图书信息,用户可以通过图书证号实现借阅。界面设计如图3.6所示
图 3.6 图书借阅界面
4通用类的生成
本系统的主要操作都需要与数据库发生交互,为了提高代码的重用性和规范性,把与数据库交互的功能单独放在一个类中,在该类中实现数据库的增加、删除、修改、查询等通用功能。
4.1 连接数据库
(1)定义数据库连接字符串,代码如下:
Private static string ConnectString = \(local)\\\\sqlexpress;DataBase=BookManage.mdf\(2)创建Connection对象,代码如下:
SqlConnection con = new SqlConnection(ConnectString); (3)打开连接,代码如下:
con.Open();
(4)关闭连接,代码如下:
con.Close();
Source=
9
4.2 操作数据库中的数据
using System;
using System.Collections.Generic; using System.Linq; using System.Text; using System.Data;
using System.Data.SqlClient; namespace BookManage { class DataAccess
{ private static string ConnectString = @\
=A20\\SQLEXPRESS;AttachDbFilename=F:\\BookManage\\data\\BookManage.mdf;Integrated Security=False\;//数据库连接字符串 ///
///
public static DataTable GetDataSetByTableName(string table)
{using (SqlConnection con = new SqlConnection(ConnectString))//创建数据库连接对象
{ string sql = \ + table + \;//查询sql语句
try
{SqlDataAdapter adapter = new SqlDataAdapter(sql, con);//创建适配器对象
DataSet ds = new DataSet();//创建数据集对象 adapter.Fill(ds, \);//填充数据集 return ds.Tables[0];//返回数据表 } catch (SqlException ex)
{ throw new Exception(ex.Message); ;}}} public static DataSet GetDataSetBySql(string sql) { using (SqlConnection con = new SqlConnection(ConnectString))//创建数据库连接对象
{ SqlDataAdapter adapter = new SqlDataAdapter(sql,con);//创建适配器对象
DataSet ds = new DataSet();//创建数据集对象 try
{ adapter.Fill(ds);//填充数据集 return ds;//返回数据集 } catch (SqlException ex)
{throw new Exception(ex.Message)} }
public static SqlDataReader GetDataReaderByID(int id) {using (SqlConnection con = new SqlConnection(ConnectString))
10
{string sql = \ + id;//sql语句
try
{SqlCommand comm = new SqlCommand(sql, con);//创建Command对象
con.Open();//打开连接
SqlDataReader reader = comm.ExecuteReader();//创建DataReader对象
reader.Read();//读取数据
return reader;//返回DataReader} catch (SqlException ex)
{throw new Exception(ex.Message); }}
public static bool UpdateDataTable(string sql)
{using (SqlConnection con = new SqlConnection(ConnectString)) { try
{con.Open();//打开连接
SqlCommand comm = new SqlCommand(sql, con);//创建Command对象
if (comm.ExecuteNonQuery() > 0) //执行更新 {return true;} else
{return false;}}
catch (SqlException ex)
{throw new Exception(ex.Message);}}}
public static void UpdateDataSet(DataSet ds,string sql) { using (SqlConnection con = new SqlConnection(ConnectString)) {try
{ SqlDataAdapter adapter = new SqlDataAdapter(sql, con);//创建适配器
SqlCommandBuilder builder = new SqlCommandBuilder(adapter);//根据适配器自动生成表单
adapter.Update(ds, \);//更新数据库} catch (SqlException ex)
{ throw new Exception(ex.Message);}}}}}
4.3 用户登录代码、图书查询代码等的实现
以上代码的实现都是C#语言和Sql语言的使用,此处由于代码篇幅较长,此处不再说明,祥见附录。
11