鏈接
- 從頭做一個基於B/S的 ASP.NET圖書館管理系統課設,持續更新~(開篇)
- 從頭做圖書館管理系統課設,css3輪播圖,導航欄,持續更新~(前端篇1)
- 從頭做圖書館管理系統課設,登陸佈局+登陸框毛玻璃效果,持續更新~(前端篇2)
寫在前面:
在課程設計過程中,前端設計完成後需要進行後臺功能的實現,在這個階段,我們需要準備Visual studio,我使用的2017,因爲2017提供免費的社區版不需要付費,功能完全能夠滿足現階段的所有任務。
vs2017:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=Community&rel=15
也可以在此下載歷代版本:https://msdn.itellyou.cn/
(嚴重安利這個網站,你進去會愛上他的)
這篇文章有點長,主要是代碼量大,文字內容很少所以不用害怕這麼長啊看不完之類的
三層架構的自我介紹:
1.我是誰
我是一個經典的設計架構,在很多很多年以前,我就被提出並且得到了長期的廣泛的使用,我比很多看這篇博客的人年齡都大。我將整個業務應用劃分爲:界面層(User Interface layer)、業務邏輯層(Business Logic Layer)、數據訪問層(Data access layer)。
這是我的自拍(圖片引自百度百科)
2.我在哪
我是一個最基礎的概念,在任何一個編程課程中都可能提及,就好像你問“加減法是大學哪門課程”,大部分的軟件都能看到我的身影或者我的親戚們的身影,比如我的兄弟MVC和我的很多很多兒子孫子。我的小夥伴之一微軟公司推薦的分層式結構一般分爲三層,從下至上分別爲:數據訪問層、業務邏輯層(又或稱爲領域層)、表示層(表示層就是界面層)。
3.我的人生價值
我的人生價值和終極理想是區分層次的目的即爲了“高內聚低耦合”的思想。
(以上純屬搞笑如有需求請參閱百度百科三層架構)
課程設計中三層架構的實現
1.首先創建主項目(表示層)
文件 - 新建 - 項目
選擇 web 先前版本 -ASP.NET空網站
2.首先創建類庫
在解決方案處單機右鍵 添加-類庫-.NET Framwork 名稱爲Model
再同理創建兩個分別爲BLL DAL(千萬不要選錯了點成 Standard類庫會缺少很多引用)效果如下
3.對模型層操作
很多人可能會問了,三層架構這個模型層也沒有啊爲什麼要有這麼一個東西的存在,其實很簡單,模型層就是將數據庫中的每一張表中的對象抽象出來,你可以把模型層理解爲是溝通三層的橋樑,主要就是信息交互作用
我是栗子:
1.我是數據表:
2.我是模型層:
在Model中創建一個Book.cs
我就是和數據庫中每一個對象的屬性一一對應的,如果數據庫中的數據結構發生改變只要我和數據訪問層改變,就可以了。
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
namespace Model
{
public class Book
{
//圖書編號
public int ID { get; set; }
//圖書名稱
public string Name { get; set; }
//圖書作者
public string Writer { get; set; }
//圖書簡介
public string Introduce { get; set; }
//圖書類別
public string Type { get; set; }
//圖書價格
public string Money { get; set; }
//圖書數量
public string Count { get; set; }
//圖書銷量
public string Sales { get; set; }
//圖書時間
public string Time { get; set; }
//圖書圖片
public string PictureUrl { get; set; }
}
}
4.創建數據訪問層
數據訪問層的主要作用就是訪問數據庫並以數據模型或者其他需要的形式返回
- 首先我們添加一個微軟官方的SqlHelper幫助類 點我
- 在數據訪問層DAL中我們創建一個對應的BookDAL.cs 並在DAL上右鍵 添加 - 引用 選擇Model
- 在BookDAL.cs中 引用using Model; using System.Data;
完整代碼:
using System.Data.SqlClient;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using Model;
using System.Data;
public class BookDAL
{
#region 添加圖書
//添加圖書
public static bool BookAdd(Book book)
{
string sql = "insert into book (name,type,writer,introduce,money,count,sales,time,pictureUrl) values ('" + book.Name + "',"+book.Type+",'"+book.Writer+"','" + book.Introduce + "','" + book.Money + "'," + book.Count + "," + "0" + ",'" + DateTime.Now + "','"+book.PictureUrl+"')";
int result = SqlHelper.ExecuteNonQuery(SqlHelper.GetConnSting(), CommandType.Text, sql, null);
if (result == 0)
{
return false;
}
else
{
return true;
}
}
#endregion
#region 修改圖書信息
public static bool BookUpdate(Book book)
{
string sql = "update book set name='" + book.Name + "',writer='"+book.Writer+ "',introduce='" + book.Introduce + "',type=" + book.Type + ",money='" + book.Money + "',count=" + book.Count +" where ID="+book.ID;
int result = SqlHelper.ExecuteNonQuery(SqlHelper.GetConnSting(), CommandType.Text, sql, null);
if (result == 0)
{
return false;
}
else
{
return true;
}
}
#endregion
#region 下架圖書
public static bool BookDelete(Book book)
{
string sql = "delete from book where ID="+book.ID;
int result = SqlHelper.ExecuteNonQuery(SqlHelper.GetConnSting(), CommandType.Text, sql, null);
if (result == 0)
{
return false;
}
else
{
return true;
}
}
#endregion
#region 查詢圖書
/// 通過編號查詢圖書
public static Book GetBookByID(string ID)
{
Book book = new Book();
string sql = "select * from [book] where ID='" + ID + "'";
SqlDataReader dr = SqlHelper.ExecuteReader(SqlHelper.GetConnSting(), CommandType.Text, sql, null);
while (dr.Read())
{
book.ID = Convert.ToInt16(dr[0]);
book.Name = Convert.ToString(dr[1]);
book.Writer = Convert.ToString(dr[2]);
book.Introduce = Convert.ToString(dr[3]);
book.Type = Convert.ToString(dr[4]);
book.Money = Convert.ToString(dr[5]);
book.Count = Convert.ToString(dr[6]);
book.Sales = Convert.ToString(dr[7]);
book.Time = Convert.ToString(dr[8]);
book.PictureUrl = Convert.ToString(dr[9]);
}
if (book == null)
{
return null;
}
else
{
return book;
}
}
//通過圖書名稱查詢圖書
public static DataSet GetBookByName(string name)
{
Book book = new Book();
DataSet ds = new DataSet();
string sql = "select from [book] where name like'%" + name + "%'";
ds = SqlHelper.ExecuteDataset(SqlHelper.GetConnSting(), CommandType.Text, sql, null);
return ds;
}
/// <summary>
/// 獲取所有圖書並返回dataset
/// </summary>
/// <param name="type">獲取圖書的種類</param>
/// <param name="orderby">按什麼排序</param>
/// <param name="order">正序倒敘</param>
/// <param name="num">獲取的數量</param>
/// <returns></returns>
public static DataSet GetAllBookByDs(string name,string type,string orderby,string order,string num)
{
Book book = new Book();
DataSet ds = new DataSet();
string sql;
if (num == null)
{
sql = "select * from [book] where 1=1 ";
}
else
{
sql = "select top "+num+" * from [book] where 1=1 ";
}
if (type != null)
{
sql += "and type="+type;
}
if (name != null)
{
sql += " and name like '%" + name + "%'";
}
if (orderby != null)
{
sql += " order by " + orderby;
}
if (order != null)
{
sql += " " + order;
}
ds = SqlHelper.ExecuteDataset(SqlHelper.GetConnSting(), CommandType.Text, sql, null);
return ds;
}
//獲取所有特殊分類的圖書並返回dataset
public static DataSet GetAllBookByType(string type,string order)
{
Book book = new Book();
DataSet ds = new DataSet();
string sql = "select * from [book] where type ="+type;
ds = SqlHelper.ExecuteDataset(SqlHelper.GetConnSting(), CommandType.Text, sql, null);
return ds;
}
//獲取首頁的暢銷圖書
public static DataSet Get4SalesBookByDs()
{
Book book = new Book();
DataSet ds = new DataSet();
string sql = "select top 4 * from [book] order by sales desc";
ds = SqlHelper.ExecuteDataset(SqlHelper.GetConnSting(), CommandType.Text, sql, null);
return ds;
}
//獲取首頁的新書
public static DataSet Get4TimeBookByDs()
{
Book book = new Book();
DataSet ds = new DataSet();
string sql = "select top 4 * from [book] order by time desc";
ds = SqlHelper.ExecuteDataset(SqlHelper.GetConnSting(), CommandType.Text, sql, null);
return ds;
}
#endregion
}
5.創建BLL業務邏輯層
業務邏輯層主要負責頁面的邏輯處理和DAL返回的數據處理加工作爲中間層使用,如果無特殊需求可簡寫爲如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Model;
using System.Data;
namespace BLL
{
public class BookBLL
{
//添加圖書
public bool BookAdd(Book book)
{
return BookDAL.BookAdd(book);
}
//更新圖書信息
public bool BookUpdate(Book book)
{
return BookDAL.BookUpdate(book);
}
//刪除圖書
public bool BookDelete(Book book)
{
return BookDAL.BookDelete(book);
}
//獲取所有圖書並返回dataset
public DataSet GetAllBookByDs(string name,string type, string orderby, string order, string num)
{
return BookDAL.GetAllBookByDs(name,type,orderby,order,num);
}
//獲取首頁的暢銷圖書
public DataSet Get4SalesBookByDs()
{
return BookDAL.Get4SalesBookByDs();
}
//獲取首頁的新書上架
public DataSet Get4TimeBookByDs()
{
return BookDAL.Get4TimeBookByDs();
}
//通過ID獲取圖書詳細信息
public Book GetBookByID(string id)
{
return BookDAL.GetBookByID(id);
}
//通過種類獲取所有圖書
public DataSet GetAllBookByType(string type,string order)
{
return BookDAL.GetAllBookByType(type,order);
}
public DataSet GetBookByName(string name)
{
return BookDAL.GetBookByName(name);
}
}
}