图书馆管理系统简介
来源:互联网 发布:述茫的爱爱上你我傻乎 编辑:程序博客网 时间:2024/04/29 11:49
----------------
设计到很简单的几个功能,用户注册,修改密码,借书,还书,添加书籍,修改书籍,删除书籍,查找书籍
以及对用户的管理即管理员可以对非管理员进行增删改操作.
首先分析下框架
典型的三层架构:每个实体对应一个类 此处涉及到了books,borrow,users类.
此后就是数据库操作类database了.所有的数据库相关操做都在这个类里封装了.
下面具体讲解下
users类.
public class Users
{
#region 私有成员
private string _userID; //用户编号
#endregion 私有成员
#region 属性
public string UserID
{
set
{
this._userID = value;
}
get
{
return this._userID;
}
}
该类中会有如上的成员和属性,对应的都是数据库中表的字段.还包含了对user类的业务操作判断用户存在性等等
//根据UserID和UserPassword判断密码是否正确
//输入:
// XUserID - 用户编号;
//输出:
// 用户存在:返回True;
// 用户不在:返回False;
public bool CheckPassword(string XUserID)
{
SqlParameter[] Params = new SqlParameter[1];
DataBase DB = new DataBase();
Params[0] = DB.MakeInParam("@UserID", SqlDbType.VarChar, 50, XUserID); //教工姓名
SqlDataReader DR = DB.RunProcGetReader("Proc_UsersDetail", Params);
if (!DR.Read())
{
return false;
}
else
{
this._userPassword = DR["UserPassword"].ToString();
this._userPower = int.Parse(DR["UserPower"].ToString());
return true;
}
}
//向Users表中添加用户信息(采用存储过程)
//输出:
// 插入成功:返回True;
// 插入失败:返回False;
public bool InsertByProc()
{
SqlParameter[] Params = new SqlParameter[8];
DataBase DB = new DataBase();
Params[0] = DB.MakeInParam("@UserID", SqlDbType.VarChar, 50, UserID); //用户编号
Params[1] = DB.MakeInParam("@UserPassword", SqlDbType.VarChar,50, UserPassword); //用户密码
Params[2] = DB.MakeInParam("@UserPower", SqlDbType.SmallInt, 2, UserPower); //用户权限
Params[3] = DB.MakeInParam("@UserName", SqlDbType.VarChar, 50, UserName); //用户姓名
Params[4] = DB.MakeInParam("@UserSex", SqlDbType.Bit,1, UserSex); //用户性别
Params[5] = DB.MakeInParam("@UserDepart", SqlDbType.VarChar,50, UserDepart); //用户系院
Params[6] = DB.MakeInParam("@UserTelephone", SqlDbType.VarChar, 50, UserTelephone); //用户电话
Params[7] = DB.MakeInParam("@UserEMail", SqlDbType.VarChar, 50, UserEMail); //用户EMail
int Count = -1;
Count = DB.RunProc("Proc_UsersAdd", Params);
if (Count > 0)
return true;
else return false;
}
//更新用户的信息
public bool UpdateByProc(string XUserID)
{
SqlParameter[] Params = new SqlParameter[6];
DataBase DB = new DataBase();//Dababase类 用来和数据库打交道
Params[0] = DB.MakeInParam("@UserID", SqlDbType.VarChar, 50, XUserID); //用户编号
Params[1] = DB.MakeInParam("@UserPower", SqlDbType.SmallInt, 2, UserPower); //用户权限
Params[2] = DB.MakeInParam("@UserName", SqlDbType.VarChar, 50, UserName); //用户姓名
Params[3] = DB.MakeInParam("@UserDepart", SqlDbType.VarChar, 50, UserDepart); //用户系院
Params[4] = DB.MakeInParam("@UserTelephone", SqlDbType.VarChar, 50, UserTelephone); //用户电话
Params[5] = DB.MakeInParam("@UserEMail", SqlDbType.VarChar, 50, UserEMail); //用户EMail
int Count = -1;
Count = DB.RunProc("Proc_UsersModify", Params);
if (Count > 0)
return true;
else return false;
}
---------------------------------------------------------
-下面是具体的database类
using System;
using System.Data;
using System.Collections;
using System.Data.SqlClient;
using System.Configuration;
namespace MyLibrary.DataAccessLayer
{
// 数据库接口类
public class DataBase
{
//私有变量,数据库连接
protected SqlConnection Connection;
protected string ConnectionString;
//构造函数
public DataBase()
{
ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
}
//保护方法,打开数据库连接
private void Open()
{
//判断数据库连接是否存在
if (Connection == null)
{
//不存在,新建并打开
Connection = new SqlConnection(ConnectionString);
Connection.Open();
}
else
{
//存在,判断是否处于关闭状态
if (Connection.State.Equals(ConnectionState.Closed))
Connection.Open(); //连接处于关闭状态,重新打开
}
}
//公有方法,关闭数据库连接
public void Close()
{
if (Connection.State.Equals(ConnectionState.Open))
{
Connection.Close(); //连接处于打开状态,关闭连接
}
}
/// <summary>
/// 析构函数,释放非托管资源
/// </summary>
~DataBase()
{
try
{
if (Connection != null)
Connection.Close();
}
catch{}
try
{
Dispose();
}
catch{}
}
//公有方法,释放资源
public void Dispose()
{
if (Connection != null) // 确保连接被关闭
{
Connection.Dispose();
Connection = null;
}
}
//公有方法,根据Sql语句,返回是否查询到记录
public bool GetRecord(string XSqlString)
{
Open();
SqlDataAdapter adapter = new SqlDataAdapter(XSqlString, Connection);
DataSet dataset = new DataSet();
adapter.Fill(dataset);
Close();
if (dataset.Tables[0].Rows.Count > 0)
{
return true;
}
else
{
return false;
}
}
//公有方法,返回Sql语句获得的数据值
//SqlString的格式:select count(*) from XXX where ...
// select max(XXX) from YYY where ...
public int GetRecordCount(string XSqlString)
{
string SCount;
Open();
SqlCommand Cmd = new SqlCommand(XSqlString,Connection);
SCount = Cmd.ExecuteScalar().ToString().Trim();
if (SCount=="")
SCount="0";
Close();
return Convert.ToInt32(SCount);
}
//公有方法,根据XWhere更新数据表XTableName中的某些纪录
//XTableName--表名
//XHT--哈希表,键为字段名,值为字段值
public DataSet AdvancedSearch(string XTableName, Hashtable XHT)
{
int Count = 0;
string Fields = "";
foreach(DictionaryEntry Item in XHT)
{
if (Count != 0)
{
Fields += " and ";
}
Fields += Item.Key.ToString();
Fields += " like '%";
Fields += Item.Value.ToString();
Fields += "%'";
Count++;
}
Fields += " ";
string SqlString = "select * from " + XTableName + " where " + Fields;
Open();
SqlDataAdapter Adapter = new SqlDataAdapter(SqlString, Connection);
DataSet Ds = new DataSet();
Adapter.Fill(Ds);
Close();
return Ds;
}
//私有方法,获得一个用来调用存储过程的SqlCommand
//输入:
// ProcName - 存储过程名
// Params - 用来调用存储过程的参数表
private SqlCommand CreateCommand(string ProcName, SqlParameter[] Prams)
{
Open();
SqlCommand Cmd = new SqlCommand(ProcName, Connection);
Cmd.CommandType = CommandType.StoredProcedure;
if (Prams != null)
{
foreach (SqlParameter Parameter in Prams)
Cmd.Parameters.Add(Parameter);
}
return Cmd;
}
//公有方法,实例化一个用于调用存储过程的参数
//输入:
// ParamName - 参数名称
// DbType - 参数类型
// Size - 参数大小
// Direction - 传递方向
// Value - 值
public SqlParameter MakeParam(string ParamName, SqlDbType DbType, Int32 Size, ParameterDirection Direction, object Value)
{
SqlParameter Param;
if(Size > 0)
Param = new SqlParameter(ParamName, DbType, Size);
else Param = new SqlParameter(ParamName, DbType);
Param.Direction = Direction;
if (Value != null)
Param.Value = Value;
return Param;
}
//公有方法,实例化一个用于调用存储过程的输入参数
//输入:
// ParamName - 参数名称
// DbType - 参数类型
// Size - 参数大小
// Value - 值
public SqlParameter MakeInParam(string ParamName, SqlDbType DbType, int Size, object Value)
{
return MakeParam(ParamName, DbType, Size, ParameterDirection.Input, Value);
}
//公有方法,调用存储过程(不带参数)
//输入:
// ProcName存储过程名
//输出:
// 对Update、Insert、Delete操作返回影响到的行数,其他情况为-1
public int RunProc(string ProcName)
{
int Count = -1;
SqlCommand Cmd = CreateCommand(ProcName, null);
Count = Cmd.ExecuteNonQuery();
Close();
return Count;
}
//公有方法,调用存储过程(带参数)
//输入:
// ProcName - 存储过程名
// Params - 用来调用存储过程的参数表
//输出:
// 对Update、Insert、Delete操作返回影响到的行数,其他情况为-1
public int RunProc(string ProcName, SqlParameter[] Params)
{
int Count = -1;
SqlCommand Cmd = CreateCommand(ProcName, Params);
Count = Cmd.ExecuteNonQuery();
Close();
return Count;
}
//公有方法,调用存储过程(不带参数)
//输入:
// ProcName存储过程名
//输出:
// 将执行结果以SqlDataReader返回
//注意:使用后主意调用SqlDataReader.Close()方法
public SqlDataReader RunProcGetReader(string ProcName)
{
SqlCommand Cmd = CreateCommand(ProcName, null);
return Cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
}
//公有方法,调用存储过程(带参数)
//输入:
// ProcName - 存储过程名
// Params - 存储过程需要的参数
//输出:
// 将执行结果以SqlDataReader返回
//注意:使用后主意调用SqlDataReader.Close()方法
public SqlDataReader RunProcGetReader(string ProcName, SqlParameter[] Params)
{
SqlCommand Cmd = CreateCommand(ProcName, Params);
return Cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
}
//公有方法,调用存储过程(带参数)
//输入:
// ProcName - 存储过程名
// Params - 存储过程需要的参数
//输出:
// 将执行结果以SqlDataReader返回
//注意:使用后主意调用SqlDataReader.Close()方法
public int RunProcGetCount(string ProcName, SqlParameter[] Params)
{
SqlCommand Cmd = CreateCommand(ProcName, Params);
string SCount;
SCount = Cmd.ExecuteScalar().ToString().Trim();
if (SCount == "")
SCount = "0";
Close();
return Convert.ToInt32(SCount);
}
//公有方法,调用存储过程(不带参数)
//输入:
// ProcName存储过程名
//输出:
// 将执行结果以DataSet返回
public DataSet GetDataSet(string ProcName)
{
Open();
SqlDataAdapter adapter = new SqlDataAdapter(ProcName, Connection);
DataSet dataset = new DataSet();
adapter.Fill(dataset);
Close();
return dataset;
}
//公有方法,调用存储过程(不带参数)
//输入:
// ProcName存储过程名
//输出:
// 将执行结果以DataSet返回
public DataSet GetDataSet(string ProcName, SqlParameter[] Params)
{
Open();
SqlCommand Cmd = CreateCommand(ProcName, Params);
SqlDataAdapter adapter = new SqlDataAdapter(Cmd);
DataSet dataset = new DataSet();
adapter.Fill(dataset);
Close();
return dataset;
}
}
}
---------------------------------------------------------------------
GetSafeData.cs类
---------------------
/// <summary>
/// 从数据库中安全获取数据,即当数据库中的数据为NULL时,保证读取不发生异常。
/// </summary>
public class GetSafeData
{
#region DataRow
/// <summary>
/// 从一个DataRow中,安全得到列colname中的值:值为字符串类型
/// </summary>
/// <param name="row">数据行对象</param>
/// <param name="colname">列名</param>
/// <returns>如果值存在,返回;否则,返回System.String.Empty</returns>
public static string ValidateDataRow_S(DataRow row,string colname)
{
if(row[colname]!=DBNull.Value)
return row[colname].ToString();
else
return System.String.Empty;
}
/// <summary>
/// 从一个DataRow中,安全得到列colname中的值:值为整数类型
/// </summary>
/// <param name="row">数据行对象</param>
/// <param name="colname">列名</param>
/// <returns>如果值存在,返回;否则,返回System.Int32.MinValue</returns>
public static int ValidateDataRow_N(DataRow row,string colname)
{
if(row[colname]!=DBNull.Value)
return Convert.ToInt32(row[colname]);
else
return System.Int32.MinValue;
}
/// <summary>
/// 从一个DataRow中,安全得到列colname中的值:值为布尔类型
/// </summary>
/// <param name="row">数据行对象</param>
/// <param name="colname">列名</param>
/// <returns>如果值存在,返回;否则,返回System.Int32.MinValue</returns>
public static bool ValidateDataRow_B(DataRow row, string colname)
{
if (row[colname] != DBNull.Value)
return Convert.ToBoolean(row[colname]);
else
return false;
}
/// <summary>
/// 从一个DataRow中,安全得到列colname中的值:值为浮点数类型
/// </summary>
/// <param name="row">数据行对象</param>
/// <param name="colname">列名</param>
/// <returns>如果值存在,返回;否则,返回System.Double.MinValue</returns>
public static double ValidateDataRow_F(DataRow row,string colname)
{
if(row[colname]!=DBNull.Value)
return Convert.ToDouble(row[colname]);
else
return System.Double.MinValue;
}
/// <summary>
/// 从一个DataRow中,安全得到列colname中的值:值为时间类型
/// </summary>
/// <param name="row">数据行对象</param>
/// <param name="colname">列名</param>
/// <returns>如果值存在,返回;否则,返回System.DateTime.MinValue;</returns>
public static DateTime ValidateDataRow_T(DataRow row,string colname)
{
if(row[colname]!=DBNull.Value)
return Convert.ToDateTime(row[colname]);
else
return System.DateTime.MinValue;
}
#endregion DataRow
}
------------------------------------------------
SQLString类
----------------------
//对传递过来的字符串进行处理的类
public class SQLString
{
//公有静态方法,将SQL字符串里面的(')转换成('')
public static String GetSafeSqlString(String XStr)
{
return XStr.Replace("'","''");
}
//公有静态方法,将SQL字符串里面的(')转换成(''),再在字符串的两边加上(')
public static String GetQuotedString(String XStr)
{
return ("'" + GetSafeSqlString(XStr) + "'");
}
}
---------------------------------------------------------------
具体代码可到
http://download.csdn.net/source/2905188 下载
- 图书馆管理系统简介
- 图书馆管理系统
- 图书馆管理系统
- 图书馆管理系统
- 图书馆管理系统
- 图书馆管理系统
- 图书馆管理系统
- 图书馆管理系统
- 征战图书馆管理系统!
- 小型图书馆管理系统
- 智能图书馆管理系统
- 图书馆管理系统
- 图书馆管理系统源代码
- 图书馆管理系统
- 图书馆管理系统
- 图书馆管理系统代码
- 图书馆管理系统项目
- 图书馆管理系统
- 二三层交换原理
- 天行健,君子以自强不息;地势坤,君子以厚德载物
- VC中GlobalAlloc,GlobalLock,GlobalUnlock的使用及其说明
- 现实世界的Windows Azure: 与IMPACTA总裁,Kevin Lam的访谈
- 病毒的常识@@@@@@@@
- 图书馆管理系统简介
- ATL中修改文本控件的文本颜色
- 利用VS2005进行dump文件调试
- oracle xml数据类型常见操作
- Oracle学习笔记——PL/SQL编程基础
- 恢复IE为默认下载工具
- 微软计划改进IE浏览器隐私功能
- 联想网御管理层1500万完成MBO
- JS响应键盘操作(支持firefox)