首先是分爲七層:
實體層:Enitity
數據訪問層:DAL
連接DAL的接口層:IDAL
業務邏輯處理層:BLL
連接BLL的接口處:IBLL
通過反射連接BLL,DAL,UI的抽象工廠層:Factory
引用邏輯爲其他六層都引用實體層Enitity,DAL引用IDAL;BLL引用IBLL,Factory,IDAL;UI引用Factory,IBLL,DAL,BLL。
首先是實體層Enitity的代碼:
UserLevel
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Enitity
{
//登錄用戶實體層
public class UserLevel
{
//用戶ID
private int userid;
public int UserID
{
get { return userid; }
set { userid = value; }
}
//用戶密碼
private string userpwd;
public string UserPwd
{
get { return userpwd; }
set { userpwd = value; }
}
//用戶級別
private string userlevel;
public string Userlevel
{
get { return userlevel; }
set { userlevel = value; }
}
//全局變量
private static int useridall;
public static int UserIdall
{
get { return useridall; }
set { useridall = value; }
}
}
}
UserOnWork
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Enitity
{
/// <summary>
/// 管理者正在工作實體
/// </summary>
public class UserOnWork
{
/// <summary>
/// 管理者ID字段
/// </summary>
private int manId;
/// <summary>
/// 管理者ID屬性
/// </summary>
public int ManId
{
get { return manId; }
set { manId = value; }
}
/// <summary>
/// 管理姓名字段
/// </summary>
private string name;
/// <summary>
///管理者 姓名屬性
/// </summary>
public string Name
{
get { return name; }
set { name = value; }
}
/// <summary>
/// 管理者等級字段
/// </summary>
private string level;
/// <summary>
/// 管理者等級屬性
/// </summary>
public string Level
{
get { return level; }
set { level = value; }
}
/// <summary>
/// 上機日期字段
/// </summary>
private DateTime onDate;
/// <summary>
/// 上機日期屬性
/// </summary>
public DateTime Ondate
{
get { return onDate; }
set { onDate = value; }
}
/// <summary>
/// 上機時間字段
/// </summary>
private DateTime onTime;
/// <summary>
/// 上機上機屬性
/// </summary>
public DateTime OnTime
{
get { return onTime; }
set { onTime = value; }
}
/// <summary>
/// 計算機名字段
/// </summary>
private string computer;
/// <summary>
/// 計算機名屬性
/// </summary>
public string Computer
{
get { return computer; }
set { computer = value; }
}
}
}
Managerial
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Enitity
{
/// <summary>
/// 管理者實體
/// </summary>
public class Managerial
{
/// <summary>
/// 管理者ID字段
/// </summary>
private int manId;
/// <summary>
/// 管理者ID屬性
/// </summary>
public int ManId
{
get { return manId; }
set { manId = value; }
}
/// <summary>
/// 管理姓名字段
/// </summary>
private string name;
/// <summary>
///管理者 姓名屬性
/// </summary>
public string Name
{
get { return name; }
set { name = value; }
}
/// <summary>
/// 管理者等級字段
/// </summary>
private string level;
/// <summary>
/// 管理者等級屬性
/// </summary>
public string Level
{
get { return level; }
set { level = value; }
}
/// <summary>
/// 管理者狀態字段
/// </summary>
private string state;
/// <summary>
/// 管理者狀態屬性
/// </summary>
public string State
{
get { return state; }
set { state = value; }
}
}
}
StudentOnLine
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Enitity
{
/// <summary>
/// 學生正在上機實體
/// </summary>
public class StudentOnLine
{
/// <summary>
/// 卡號字段
/// </summary>
private int studentCardno;
/// <summary>
/// 卡號屬性
/// </summary>
public int StudentCardno
{
get { return studentCardno; }
set { studentCardno = value; }
}
/// <summary>
/// 類型字段
/// </summary>
private string studentLevel;
/// <summary>
/// 類型屬性
/// </summary>
public string StudentLevel
{
get { return studentLevel; }
set { studentLevel = value; }
}
/// <summary>
/// 上機日期字段
/// </summary>
private DateTime onDate;
/// <summary>
/// 上機日期屬性
/// </summary>
public DateTime OnDate
{
get { return onDate; }
set { onDate = value; }
}
/// <summary>
/// 上機時間字段
/// </summary>
private string onTime;
/// <summary>
/// 上機時間屬性
/// </summary>
public string OnTime
{
get { return onTime; }
set { onTime = value; }
}
/// <summary>
/// 電腦名字段
/// </summary>
private string computer;
/// <summary>
/// 電腦名屬性
/// </summary>
public string Computer
{
get { return computer; }
set { computer = value; }
}
private double nowCash;
/// <summary>
/// 當前餘額屬性
/// </summary>
public double NowCash
{
get { return nowCash; }
set { nowCash = value; }
}
}
}
RegistrationCardno
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Enitity
{
/// <summary>
/// 卡號註冊實體
/// </summary>
public class RegistrationCardno
{
/// <summary>
/// 卡號字段
/// </summary>
private int studentCardno;
/// <summary>
/// 卡號屬性
/// </summary>
public int StudentCardno
{
get { return studentCardno; }
set { studentCardno = value; }
}
/// <summary>
/// 餘額字段
/// </summary>
private double studentbalanc;
/// <summary>
/// 餘額屬性
/// </summary>
public double Studentbalance
{
get { return studentbalanc; }
set { studentbalanc = value; }
}
/// <summary>
/// 開卡金額字段
/// </summary>
private int initialamount;
public int Initialamount
{
get { return initialamount; }
set { initialamount = value; }
}
/// <summary>
/// 卡號類型字段
/// </summary>
private string studentLeve;
public string StudentLeve
{
get { return studentLeve; }
set { studentLeve = value; }
}
/// <summary>
/// 卡號使用狀態字段
/// </summary>
private string state;
public string State
{
get { return state; }
set { state = value; }
}
/// <summary>
/// 操作員ID
/// </summary>
private int opertionID;
public int OpertionID
{
get { return opertionID; }
set { opertionID = value; }
}
/// <summary>
/// 結賬狀態
/// </summary>
private string accountsState;
public string AccountsState
{
get { return accountsState; }
set { accountsState = value; }
}
}
}
抽象工廠層Factory的代碼:
FactoryBLL
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace Factory
{
/// <summary>
/// 創建業務層工廠
/// </summary>
public class FactoryBLL
{
//獲取配置文件,要實例化的程序集名稱。
string StrDB = System.Configuration.ConfigurationManager.AppSettings["FU"];
/// <summary>
///應用反射獲得BLL層操作 。
///缺點:數據類型是死的,不同數據類型的工廠調用需要在調用處強制轉換。
/// </summary>
/// <param name="CreatClassName">要實例化的類</param>
/// <returns>BLL層類</returns>
public object CreateUser(string CreatClassName)
{
//具體要實例化的類
string ClassName = StrDB + "." + CreatClassName;
//利用反射返回要實例化的具體類
return (object)Assembly.Load(StrDB).CreateInstance(ClassName);
}
}
}
FactoryDAL:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace Factory
{
/// <summary>
/// 創建數據庫層查詢功能
/// </summary>
public class FactoryDAL
{
//獲取配置文件,要實例化的程序集名稱。
string StrDB = System.Configuration.ConfigurationManager.AppSettings["DB"];
/// <summary>
///應用反射獲得DAL層操作,來返回D層的登錄查詢類。
///缺點:數據類型是死的,不同數據類型的工廠調用需要在調用處強制轉換。
/// </summary>
/// <param name="CreatClassName">要實例化的類</param>
/// <returns>d層具體查詢</returns>
public object CreateUser(string CreatClassName)
{
//具體要實例化的類
string ClassName = StrDB + "." + CreatClassName;
//利用反射返回要實例化的具體類
return (object)Assembly.Load(StrDB).CreateInstance(ClassName);
}
}
}
FactoryUI:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Factory
{
/// <summary>
/// 創建UI層窗體,通用工廠。
/// </summary>
public class FactoryUI
{
/// <summary>
/// 創建窗體
/// </summary>
/// <param name="CreatFrom">窗體名稱</param>
/// <returns>一個窗體實例</returns>
public Form CreatFrom(string CreatFrom)
{
#region 顯示管理員窗體
//獲取配置文件
string StrDB = System.Configuration.ConfigurationManager.AppSettings["UI"];
string ClassName = StrDB + "." + CreatFrom;//具體要實例化的窗體
return (Form)Assembly.Load(StrDB).CreateInstance(ClassName);
#endregion
}
}
}
如果System.Configuration.ConfigurationManager報錯,請引用程序集裏的System.Configuration,這樣就會沒有問題了。
如果Form報錯,請引用程序集的System.Windows.Forms,在顯示錯誤修正裏有這個選項。
數據訪問接口層IDAL:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//引用
using Enitity;
using System.Data;
namespace IDAL
{
//登錄接口
public interface LoginIDAL
{
/// <summary>
/// 判斷用戶是否存在,判斷用戶等級
/// </summary>
/// <param name="userLevel">用戶</param>
/// <returns></returns>
DataTable SelectUserLevel(UserLevel userLevel);
/// <summary>
/// 獲取管理者賬號的使用狀態
/// </summary>
/// <param name="managerial">管理者實體</param>
/// <returns></returns>
DataTable SelectState(Managerial managerial);
/// <summary>
/// 判斷管理者是否已經登錄
/// </summary>
/// <param name="OnWork">管理者</param>
/// <returns></returns>
DataTable SelectOnUser(UserOnWork OnWork);
/// <summary>
/// 查詢卡號信息
/// </summary>
/// <param name="StudentCardno">卡號實體</param>
/// <returns>整個表的卡號信息</returns>
DataTable SelectStuCardno(RegistrationCardno StudentCardno);
/// <summary>
/// 判斷學生是否已經登錄
/// </summary>
/// <param name="OnStudent">學生</param>
/// <returns>臨時表</returns>
DataTable SelectOnStudent(StudentOnLine OnStudent);
/// <summary>
/// 基礎信息
/// </summary>
/// <param name="BasitInfo">基礎信息實體</param>
/// <returns>整個基礎信息表</returns>
DataTable SelectBasitInfo();
/// <summary>
/// 向正在上機的學生表插入數據
/// </summary>
/// <param name="StudentOnlies"></param>
/// <returns></returns>
int InsertStudentOnLie(StudentOnLine StudentOnlies);
/// <summary>
/// 向正在值班的管理者表插入管理者信息
/// </summary>
/// <param name="UserOnWork">管理者</param>
/// <returns>整型</returns>
int InsertUser(UserOnWork UserOnWork);
}
}
數據訪問DAL層:
SQLHelper
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//引用
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
namespace DAL
{
/// <summary>
/// 操作查詢====數據訪問層
/// </summary>
public class SQLHelper
{
//定義數據庫連接操作,指定在數控上的操作類型。
//定義數據庫讀取操作
private SqlConnection conn = null;//連接
private SqlCommand cmd = null;//命令
private SqlDataReader sdr = null;//數據集
/// <summary>
/// 數據庫連接,初始化類的時候鏈接數據庫!
/// </summary>
public SQLHelper()
{
//通過配置文件,獲取數據庫的賬號密碼
string connStr = ConfigurationManager.AppSettings["connStr"];
conn = new SqlConnection(connStr);//鏈接數據
}
/// <summary>
/// 判斷數據庫狀態
/// </summary>
/// <returns>是否打開</returns>
private SqlConnection GetConn()
{
//判斷狀態是否爲空打開狀態
if (conn.State == ConnectionState.Closed)
{
conn.Open();//打開
}//end if
return conn;
}
/// <summary>
/// 執行不帶參數的數據庫操作或儲存過程
/// </summary>
/// <param name="cmdText">增刪改操作</param>
/// <param name="ct">命令類型</param>
/// <returns>返回受影響的行數</returns>
public int ExecuteNonQuery(string cmdText, CommandType ct)
{
//受影響的行數
int res;
//執行SQL命令
cmd = new SqlCommand(cmdText, GetConn());
//命令的類型
cmd.CommandType = ct;
//受影響的行數
res = cmd.ExecuteNonQuery();
//使用完之後釋放連接
if (conn.State == ConnectionState.Open)
{
conn.Close();
}
return res;
}
/// <summary>
/// 執行帶參數的數據庫操作或儲存過程
/// </summary>
/// <param name="cmdText">增刪改操作</param>
/// <param name="ct">命令類型</param>
/// <returns>返回受影響的行數</returns>
public int ExecuteNonQuery(string cmdText, SqlParameter[] paras, CommandType ct)
{
int res;
using (cmd = new SqlCommand(cmdText, GetConn()))
{
cmd.CommandType = ct;
cmd.Parameters.AddRange(paras);
res = cmd.ExecuteNonQuery();
}
return res;
}
/// <summary>
/// 執行不帶參數的SQL查詢語句或儲存過程
/// </summary>
/// <param name="cmdText">查詢sql語句或儲存過程</param>
/// <param name="ct">命令類型</param>
/// <returns>返回受影響行數</returns>
public DataTable ExecuteQuery(string cmdText, CommandType ct)
{
//存儲讀取到的內容
DataTable dt = new DataTable();
cmd = new SqlCommand(cmdText, GetConn());
cmd.CommandType = ct;
//
using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
dt.Load(sdr);//向DataTable填充值
}
return dt;//把表裏的內容返回給本方法
}
/// <summary>
/// 執行帶參數的sql語句查詢或儲存過程
/// </summary>
/// <param name="cmdText">查詢SQL語句或儲存過程</param>
/// <param name="paras">參數集合</param>
/// <param name="ct">命令類型</param>
/// <returns>返回受影響的行數</returns>
public DataTable ExecuteQuery(string cmdText, SqlParameter[] paras, CommandType ct)
{
DataTable dt = new DataTable();
cmd = new SqlCommand(cmdText, GetConn());
cmd.CommandType = ct;
cmd.Parameters.AddRange(paras);
using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
dt.Load(sdr);
}
return dt;
}
}
}
LoginDAL
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//引用
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using Enitity;
namespace DAL
{
/// <summary>
/// 登錄查詢
/// </summary>
public class LoginDAL:IDAL.LoginIDAL
{
//實例化一個SQHelp層,用於連接數據庫進行查詢。
SQLHelper sqlHelper = new SQLHelper();
/// <summary>
/// 向正在上機學生表插入信息
/// </summary>
/// <param name="StudentOnlies">學生上機實體</param>
/// <returns>返回整個表信息</returns>
public int InsertStudentOnLie(StudentOnLine StudentOnlies)
{
//定義參數
SqlParameter[] sqlparams = { new SqlParameter("@StudentCardno", StudentOnlies.StudentCardno),
new SqlParameter("@StudentLevel",StudentOnlies.StudentLevel),
new SqlParameter("@NowCash",StudentOnlies.NowCash),
new SqlParameter("@OnDate",StudentOnlies.OnDate),
new SqlParameter("@OnTime",StudentOnlies.OnTime),
new SqlParameter("@Computer",StudentOnlies.Computer) };
//定義SQL語句
string sql = @"insert into OnLineStudent values(@StudentCardno,@StudentLevel,@NowCash,@OnDate,@OnTime,@Computer)";
//接受受影響的行數
int Relust = sqlHelper.ExecuteNonQuery(sql, sqlparams, CommandType.Text);
//返回收影響的行數
return Relust;
}
/// <summary>
/// 向管理者值班表插入信息
/// </summary>
/// <param name="UserOnWork">值班表實體</param>
/// <returns>整個值班表信息</returns>
public int InsertUser(UserOnWork UserOnWork)
{
//定義參數
SqlParameter[] sqlparams = { new SqlParameter("@ManID",UserOnWork.ManId),
new SqlParameter("@ManLevel",UserOnWork.Level),
new SqlParameter("@OpertionName",UserOnWork.Name),
new SqlParameter("@OnDate",UserOnWork.Ondate),
new SqlParameter("@OnTime",UserOnWork.OnTime),
new SqlParameter("@Computer",UserOnWork.Computer) };
//定義SQL語句
string sql = @"insert into OnWorkMan values(@ManID,@ManLevel,@OpertionName,@OnDate,@OnTime,@Computer)";
//接受受影響的行數
int Relust = sqlHelper.ExecuteNonQuery(sql, sqlparams, CommandType.Text);
return Relust;//返回受影響的行數
}
/// <summary>
/// 基礎信息
/// </summary>
/// <param name="BasitInfo">基礎信息實體</param>
/// <returns>整個基礎信息表</returns>
public DataTable SelectBasitInfo()
{
//定義SQL語句
string sql = @"select * from Basis";
//獲取查詢結果
DataTable BasiTable = sqlHelper.ExecuteQuery(sql, CommandType.Text);
//返回查詢結果
return BasiTable;
}
/// <summary>
/// 查詢學生是否已經上機
/// </summary>
/// <param name="OnStudent">學生上機實體</param>
/// <returns>返回整個表信息</returns>
public DataTable SelectOnStudent(StudentOnLine OnStudent)
{
//定義參數
SqlParameter[] sqlparams = { new SqlParameter("@StudentCardno", OnStudent.StudentCardno) };
//定義SQL語句
string sql = @"select * from OnLineStudent where StudentCardno=@StudentCardno";
//接受查詢結果
DataTable OnstuTable = sqlHelper.ExecuteQuery(sql, sqlparams, CommandType.Text);
//返回查詢結果
return OnstuTable;
}
/// <summary>
/// 查詢管理者是否已經登錄
/// </summary>
/// <param name="OnUser">值班表管理者實體</param>
/// <returns>整個管理者表的信息</returns>
public DataTable SelectOnUser(UserOnWork OnUser)
{
//定義參數
SqlParameter[] sqlparams = { new SqlParameter("@ManID", OnUser.ManId) };
//定義SQL語句
string sql = @"select * from OnWorkMan where ManID=@ManID";
//把查詢結果儲存到臨時表
DataTable OnWorkTable = sqlHelper.ExecuteQuery(sql, sqlparams, CommandType.Text);
//返回整個表的信息
return OnWorkTable;
}
/// <summary>
/// 管理者使用狀態
/// </summary>
/// <param name="ManageState">管理者信息</param>
/// <returns>整個表的管理者信息</returns>
public DataTable SelectState(Managerial ManageState)
{
//定義參數
SqlParameter[] sqlparams = { new SqlParameter("@ManID", ManageState.ManId) };
//定義SQL語句
string sql = @"select * from Managerial where ManID=@ManID";
//把查詢結果儲存到臨時表
DataTable ManTable = sqlHelper.ExecuteQuery(sql, sqlparams, CommandType.Text);
//返回整個表的信息
return ManTable;
}
/// <summary>
/// 查詢卡號信息
/// </summary>
/// <param name="StudentCardno">卡號實體</param>
/// <returns>整個表的卡號信息</returns>
public DataTable SelectStuCardno(RegistrationCardno StudentCardno)
{
//定義參數
SqlParameter[] sqlparams = { new SqlParameter("@StudentCardno", StudentCardno.StudentCardno) };
//定義SQL語句
string sql = @"select * from RegistrationCardno where StudentCardno=@StudentCardno";
//接受查詢結果
DataTable StuCarTable = sqlHelper.ExecuteQuery(sql, sqlparams, CommandType.Text);
//一表的形式返回查詢結果
return StuCarTable;
}
/// <summary>
/// 用戶是否存在和級別
/// </summary>
/// <param name="UserLevel">用戶登錄實體</param>
/// <returns>整個登錄表</returns>
public DataTable SelectUserLevel(UserLevel UserLevel)
{
//定義需要傳遞的參數
SqlParameter[] sqlparams = { new SqlParameter("@UserID", UserLevel.UserID),
new SqlParameter("@Pwd", UserLevel.UserPwd) };
//定義SQL語句
string sql = @"select * from UserLonin where UserId=@UserId and Pwd=@Pwd";
//把查詢結果儲存到臨時表
DataTable table = sqlHelper.ExecuteQuery(sql, sqlparams, CommandType.Text);
return table;//返回整個臨時表
}
}
}
業務邏輯接口層IBLL:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace IBLL
{
/// <summary>
/// 登錄接口
/// </summary>
public interface LoginIBLL
{
/// <summary>
/// 登錄方法
/// </summary>
/// <param name="userid">用戶ID</param>
/// <param name="pwd">密碼</param>
/// <param name="form">登錄窗體</param>
/// <returns>是否登錄成功</returns>
string loginFacade(string userid, string pwd, Form form);
}
}
業務邏輯層BLL:
獲取計算機名稱
Computer
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BLL
{
/// <summary>
/// 獲取計算名字
/// </summary>
public class Computer
{
/// <summary>
/// 獲取計算機名
/// </summary>
/// <returns>計算機名</returns>
public static string GetMachineName()
{
try
{
return System.Environment.MachineName;
}
catch (Exception ex)
{
return ex.Message;
}
}
}
}
創建個文件夾爲Level,爲判斷級別而建立的類
userLevel:
using Enitity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace BLL.Level
{
/// <summary>
/// 用戶等級的抽象類
/// </summary>
public abstract class userlevel
{
/// <summary>
/// 級別字段
/// </summary>
protected string Level;
/// <summary>
/// 給等級字段賦值
/// </summary>
/// <param name="Level"></param>
public userlevel(string Level)
{
this.Level = Level;
}
/// <summary>
/// 繼續處理者字段
/// </summary>
protected userlevel user;
/// <summary>
/// 設置繼續處理者
/// </summary>
/// <param name="superior">具體的繼續處理者</param>
public void SetSupertior(userlevel superior)
{
this.user = superior;
}
/// <summary>
/// 登錄
/// </summary>
/// <param name="userlevel">登錄實體</param>
abstract public string UserLogin(UserLevel userlevel, Form form);
}
}
LoginAdmin
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//引用
using System.Data;
using System.Windows.Forms;
using System.Reflection;
using System.Configuration;
using Enitity;
using Microsoft.VisualBasic.Devices;
namespace BLL.Level
{
/// <summary>
/// 管理員職責
/// </summary>
public class LoginAdmin:userlevel
{
/// <summary>
/// 實例化工廠,用於創建D層登錄查詢類。
/// </summary>
Factory.FactoryDAL fact = new Factory.FactoryDAL();
/// <summary>
/// 實例化創建UI層窗體工廠
/// </summary>
Factory.FactoryUI CreatfactForm = new Factory.FactoryUI();
/// <summary>
/// 調用父類構造函數
/// </summary>
/// <param name="Level">給級別賦值</param>
public LoginAdmin(string Level) : base(Level)
{
}
/// <summary>
/// 向值班表插入用戶數據
/// </summary>
/// <param name="insertonwork">值班人員</param>
/// <returns>整數</returns>
private int InserUserOnWork(UserOnWork insertonwork)
{
//調用接口實例化,D層查詢類
IDAL.LoginIDAL idal = (IDAL.LoginIDAL)fact.CreateUser("LoginDAL");
//接收接口的返回值
int Result = idal.InsertUser(insertonwork);
return Result;
}
/// <summary>
/// 用戶登錄
/// </summary>
/// <param name="userlevel">用戶</param>
/// <returns>是否登錄成功!</returns>
public override string UserLogin(UserLevel userlevel, Form form)
{
//返回信息
string StrMesg = "";
//調用接口實例化D層查詢類
IDAL.LoginIDAL idal = (IDAL.LoginIDAL)fact.CreateUser("LoginDAL");
//實例化管理者實體和賦值
Managerial Manageria = new Managerial();
Manageria.ManId = userlevel.UserID;//登錄id賦值給管理者ID
//接受管理者信息
DataTable ManTable = idal.SelectState(Manageria);
//判斷賬號是否使用
if (ManTable.Rows[0][3].ToString().Trim() == "使用")
{
#region 判斷管理者是否已經登錄
//實例化值班實體與賦值
UserOnWork userOnWork = new UserOnWork();
userOnWork.ManId = userlevel.UserID;//值班實體的管理者id賦值
//接受接口的返回值,返回整個值班表的信息。
DataTable OnWorkTable = idal.SelectOnUser(userOnWork);
//判斷管理者是否已經登錄
if (OnWorkTable.Rows.Count == 0)//沒有登錄
{
form.Hide();//隱藏窗體
#region 向值班表插入信息
//給值班實體賦值
userOnWork.Level = userlevel.Userlevel;//管理者級別
userOnWork.Name = ManTable.Rows[0][1].ToString().Trim();//管理者姓名
userOnWork.Ondate = DateTime.Now.Date;//登錄日期
userOnWork.OnTime = DateTime.Parse(DateTime.Now.ToShortTimeString());//登錄時間
userOnWork.Computer = Computer.GetMachineName();//計算機名
//調用插入方法
InserUserOnWork(userOnWork);
#endregion
//給全局ID賦值
UserLevel.UserIdall = userlevel.UserID;
StrMesg = "登錄成功!";
//顯示管理員窗體
Form CreatForm = CreatfactForm.CreatFrom("FormAdminMain");//實例化管理員窗體
CreatForm.Show();//顯示窗體
}
else
{
StrMesg = "此賬號已登錄!";
}
#endregion
}
else
{
StrMesg = "此賬號未使用,請激活使用!";
}//end if
return StrMesg;
}
}
}
LoginOpetion
using Enitity;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace BLL.Level
{
/// <summary>
/// 操作員
/// </summary>
public class LoginOpetion:userlevel
{
/// <summary>
/// 獲取父類的構造函數
/// </summary>
/// <param name="level"></param>
public LoginOpetion(string level) : base(level)
{ }
/// <summary>
/// 實例化工廠,用於創建D登錄查詢類。
/// </summary>
Factory.FactoryDAL fact = new Factory.FactoryDAL();
/// <summary>
/// 實例化創建UI層窗體工廠
/// </summary>
Factory.FactoryUI CreatfactForm = new Factory.FactoryUI();
/// <summary>
/// 向值班表插入用戶數據
/// </summary>
/// <param name="insertonwork">值班人員</param>
/// <returns>整數</returns>
private int InserUserOnWork(UserOnWork insertonwork)
{
//調用接口實例化,D層查詢類
IDAL.LoginIDAL idal = (IDAL.LoginIDAL)fact.CreateUser("LoginDAL");
//接收接口的返回值
int Result = idal.InsertUser(insertonwork);
return Result;
}
/// <summary>
/// 登錄
/// </summary>
/// <param name="userlevel">用戶</param>
/// <returns>是否登錄成功!</returns>
public override string UserLogin(UserLevel userlevel, Form form)
{
#region 實例化與賦值
//返回信息
string StrMesg = "";
//調用接口實例化D層查詢類
IDAL.LoginIDAL idal = (IDAL.LoginIDAL)fact.CreateUser("LoginDAL");
//實例化管理者實體和賦值
Managerial Manageria = new Managerial();
Manageria.ManId = userlevel.UserID;//登錄id賦值給管理者ID
#endregion
DataTable ManTable = idal.SelectState(Manageria); //接受接口返回值
//判斷管理者賬號是否使用
if (ManTable.Rows[0][3].ToString().Trim() == "使用")
{
#region 判斷管理者是否已經登錄
UserOnWork userOnWork = new UserOnWork();//實例化值班實體與賦值
userOnWork.ManId = userlevel.UserID;//值班實體的管理者id賦值
//接受接口的返回值,返回整個值班表的信息。
DataTable OnWorkTable = idal.SelectOnUser(userOnWork);
//判斷管理者是否已經登錄
if (OnWorkTable.Rows.Count == 0)//沒有登錄
{
form.Hide();//隱藏窗體
#region 向值班表插入信息
//給值班實體賦值
userOnWork.Level = userlevel.Userlevel;//管理者級別
userOnWork.Name = ManTable.Rows[0][1].ToString().Trim();//管理者姓名
userOnWork.Ondate = DateTime.Now.Date;//登錄日期
userOnWork.OnTime = DateTime.Parse(DateTime.Now.ToShortTimeString());//登錄時間
userOnWork.Computer = Computer.GetMachineName();//計算機名
//調用插入方法
InserUserOnWork(userOnWork);
#endregion
//給全局ID賦值
UserLevel.UserIdall = userlevel.UserID;
StrMesg = "登錄成功!";
//顯示操作員窗體
Form CreatForm = CreatfactForm.CreatFrom("FormOperatorMain");//實例化操作員窗體
CreatForm.Show();//顯示窗體
}
else
{
StrMesg = "此賬號已登錄!";
}
#endregion
}
else
{
StrMesg = "此賬號未使用,請激活使用!";
}//end if
return StrMesg;
}
}
}
LoginStudnet
using Enitity;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace BLL.Level
{
/// <summary>
/// 學生職責
/// </summary>
public class LoginStudnet:userlevel
{
/// <summary>
/// 實例化工廠,用於創建D登錄查詢類。
/// </summary>
Factory.FactoryDAL fact = new Factory.FactoryDAL();
/// <summary>
/// 實例化創建UI層窗體工廠
/// </summary>
Factory.FactoryUI CreatfactForm = new Factory.FactoryUI();
public LoginStudnet(string Level) : base(Level)
{
}
/// <summary>
/// 向正在上機表插入學生信息
/// </summary>
/// <param name="studentOnLien"></param>
/// <returns></returns>
private int InserStudentOnlien(StudentOnLine studentOnLien)
{
//調用接口實例化,D層查詢類
IDAL.LoginIDAL idal = (IDAL.LoginIDAL)fact.CreateUser("LoginDAL");
//接收接口的返回值
int Result = idal.InsertStudentOnLie(studentOnLien);
return Result;
}
/// <summary>
/// 登錄
/// </summary>
/// <param name="userlevel">用戶</param>
/// <returns>是否上機成功!</returns>
public override string UserLogin(UserLevel userlevel, Form form)
{
#region 實例化與賦值
string StrMsg = "";//要返回的信息
IDAL.LoginIDAL idal = (IDAL.LoginIDAL)fact.CreateUser("LoginDAL"); //調用接口實例化,D層查詢類
RegistrationCardno RegisCardno = new RegistrationCardno(); //實例化實體
RegisCardno.StudentCardno = userlevel.UserID;//給卡號賦值
#endregion
DataTable StuCardnoTable = idal.SelectStuCardno(RegisCardno);//接受卡號信息
RegisCardno.Studentbalance = double.Parse(StuCardnoTable.Rows[0][1].ToString());//給餘額賦值
DataTable BasitInfoTable = idal.SelectBasitInfo();//接受基礎信息
#region 判斷卡號狀態
//判斷卡號狀態
if (StuCardnoTable.Rows[0][4].ToString() == "已激活")
{
//判斷餘額是否充足
if (RegisCardno.Studentbalance >= double.Parse(BasitInfoTable.Rows[0][0].ToString()))
{
//實例化上機表實體與賦值
StudentOnLine stuOnLine = new StudentOnLine();
stuOnLine.StudentCardno = userlevel.UserID;//給卡號賦值
//獲取上機表信息
DataTable OnWorkTable = idal.SelectOnStudent(stuOnLine);
//查詢卡號是否已經登錄
if (OnWorkTable.Rows.Count == 0)//沒有登錄
{
form.Hide();//隱藏窗體
#region 給上機實體賦值
stuOnLine.StudentLevel = StuCardnoTable.Rows[0][3].ToString();//卡號類型賦值
stuOnLine.OnDate = DateTime.Now.Date;//上機日期
stuOnLine.OnTime = DateTime.Now.ToShortTimeString();//上機時間
stuOnLine.NowCash = RegisCardno.Studentbalance;//當前餘額
stuOnLine.Computer = Computer.GetMachineName();//電腦名稱
#endregion
InserStudentOnlien(stuOnLine);//向上機表插入信息
UserLevel.UserIdall = userlevel.UserID; //給全局ID賦值
StrMsg = "上機成功!";
Form CreatForm = CreatfactForm.CreatFrom("FormStudentMain");//實例化學生窗體
CreatForm.Show();//顯示窗體
}
else
{
StrMsg = "此卡號已登錄!";
}//end if
}
else
{
StrMsg = "餘額不足,請充值";
}//end if
}
else
{
StrMsg = "此卡號未激活,請激活使用!";
}//end if
#endregion
return StrMsg;//返回登錄信息
}
}
}
接下來是限制輸入內容
IsNull
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace BLL
{
/// <summary>
/// 限制輸入內容
/// </summary>
public class IsNull
{
/// <summary>
/// 判斷窗體文本是否爲空
/// </summary>
/// <param name="form">窗體</param>
/// <returns>是否爲空</returns>
public static string isNull(Form form)
{
//返回信息
string Str = "";
foreach (var item in form.Controls)
{
if (item.GetType().Name.Equals("TextBox") && ((TextBox)item).Text == string.Empty)
{
Str = "填寫信息不完整,請檢查";
}
}
return Str;
}
/// <summary>
/// 判斷輸入值是否是數字
/// </summary>
/// <param name="StrNumber">要轉換的內容</param>
/// <returns></returns>
public static bool IsNumber(string StrNumber)
{
int i = 0;//要轉成的類型
bool Flage = int.TryParse(StrNumber, out i);
return Flage;
}
/// <summary>
/// 判斷一組文本框輸入的是否是數字
/// </summary>
/// <param name="form"></param>
/// <returns>是否是數字</returns>
public static string GroupIsNumber(Form form)
{
//返回提示信息
string flage = "";//默認是“”
foreach (var item in form.Controls)
{
double a = 0;
if (item.GetType().Name.Equals("TextBox") && double.TryParse(((TextBox)item).Text, out a) != true)
{
flage = "文本框內容不全是數字,請改爲數字!";//改變標籤的值爲true
}
}
return flage;
}
}
}
登錄邏輯代碼LoginBLL
using Enitity;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace BLL
{
/// <summary>
/// 登錄業務
/// </summary>
public class LoginBLL:IBLL.LoginIBLL
{
/// <summary>
/// 實例化工廠,用於創建D登錄查詢類。
/// </summary>
Factory.FactoryDAL fact = new Factory.FactoryDAL();
/// <summary>
/// 實例化臨時表,儲存UserLevel用戶的所有信息
/// </summary>
public static DataTable UserTable = new DataTable();
/// <summary>
/// 登錄業務
/// </summary>
/// <param name="userid">用戶id</param>
/// <param name="pwd">密碼</param>
/// <returns>是否登錄成功</returns>
public string loginFacade(string userid, string pwd, Form form)
{
//用於返回信息
string strMsger = "";
//接受判空返回值,判斷文本框是否爲空。
string isNull = IsNull.isNull(form);
//接受是不是數字的判斷返回值
bool isNumber = IsNull.IsNumber(userid);
//判斷文本框是否爲空
if (isNull == "")//沒有返回值說明文本框不爲空!
{
//判斷UserID是不是數字
if (isNumber == true)//等於true,說明輸入的是數字!
{
#region 賦值與轉化實體
//轉換爲實體
UserLevel user = new UserLevel();
user.UserID = Convert.ToInt32(userid);
user.UserPwd = pwd;
#endregion
#region 調用D層登錄查詢
//利用反射,實例化D層登錄查詢類
IDAL.LoginIDAL idal = (IDAL.LoginIDAL)fact.CreateUser("LoginDAL");
//獲取D層返回值
UserTable = idal.SelectUserLevel(user);
#endregion
#region 判斷用戶是否存在
//判斷賬號是否存在
if (UserTable.Rows.Count != 0)
{
//給級別賦值
user.Userlevel = UserTable.Rows[0][1].ToString().Trim();
#region 設置繼續處理者
Level.LoginAdmin admin = new Level.LoginAdmin("管理員");
Level.LoginOpetion operation = new Level.LoginOpetion("操作員");
Level.LoginStudnet student = new Level.LoginStudnet("學生");
#endregion
#region 級別判斷
//判斷級別
if (user.Userlevel == "管理員")
{
//繼續處理者,跳轉到對應的職責鏈
admin.SetSupertior(operation);
admin.SetSupertior(student);
strMsger = admin.UserLogin(user, form);
}
else if (user.Userlevel == "操作員")
{
//繼續處理者,跳轉到對應的職責鏈
operation.SetSupertior(admin);
operation.SetSupertior(student);
strMsger = operation.UserLogin(user, form);
}
else if (user.Userlevel == "學生")
{
//繼續處理者,跳轉到對應的職責鏈
student.SetSupertior(admin);
student.SetSupertior(operation);
strMsger = student.UserLogin(user, form);
}
#endregion
}
else
{
strMsger = "賬號不存在,或密碼錯誤!";
}
//end if
#endregion
}
else
{
//輸入值不是數字
strMsger = "登錄賬號請輸入數字!";
}
}
else
{
//文本框爲空!
strMsger = isNull;//把返回結果賦值給strMsger返回給U層
}
return strMsger;
}
}
}
最後是UI層
兩個text文本框,一個確定登錄按鈕Button,命名爲:TxtUserName,TxtPassWord,Login。這你要看不懂那就不是我的問題了。
U層代碼:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace UI
{
public partial class LoginForm : Form
{
public LoginForm()
{
InitializeComponent();
}
//實例化創建BLL層的工廠
Factory.FactoryBLL factoryBLL = new Factory.FactoryBLL();
private void Login_Click(object sender, EventArgs e)
{
//使用工廠創建登錄接口
IBLL.LoginIBLL LoginIbll = (IBLL.LoginIBLL)factoryBLL.CreateUser("LoginBLL");
//登錄
string strMsg = LoginIbll.loginFacade(TxtUserName.Text, TxtPassWord.Text, this);
MessageBox.Show(strMsg);
}
}
}
APP文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="UI.Properties.Settings.charging_systemConnectionString"
connectionString="Data Source=.;Initial Catalog=charging_system;Persist Security Info=True;User ID=sa;Password=123"
providerName="System.Data.SqlClient" />
</connectionStrings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<appSettings>
<!--用於實例化D層類-->
<add key="DB" value="DAL" />
<!--用於實例化UI層窗體-->
<add key="UI" value="UI"/>
<!--用於實例化BLL層類-->
<add key="FU" value="BLL"/>
<!-- 這裏的配置文件是用來連接數據庫的。在XML配置文件中寫入連接數據庫的代碼方便打包後其他電腦進行數據連接,
其他電腦只需在這裏把關鍵信息改變爲他的數據庫服務器地址和登錄ID與密碼即可,不再需要重新生成等操作 -->
<add key="connStr" value="Server=.; Database=charging_system; User ID=sa; Password=123456"/>
</appSettings>
</configuration>
本人按照此文本重新建立了一個測試登錄,是可以使用的,中間會有一些錯誤,建議把代碼寫完,看看是否是沒有引用項目或程序集,然後再去排除其他的問題。