2.2-1 临时加班:
该功能模块可与售票、检票管理联动进行。如调度进行临时加班处理后,票房就可以对新增加的班次进行售票,无需人工通知。而班次延时的执行,又使对应班次的售票、检票时间也相应延长。功能如图2.2-1:
从界面上可以看到我们这里用到工具箱的控件有:
控件名称 |
说明 |
容器控件(框)GroupBox |
每个控件都可以根据需要的功能更改其属性,右键查看.也可以进行编辑事件-->找到一个闪电图标点击查看需要的事件,例如:查询按钮(btnSrean)是修改过按钮文本Text属性的重命名! btnSrean_Click这是单击查询事件,还有很多的事件根据项目需求找到来编辑.
|
公共控件(下拉框)ComboBox | |
公共控件(文字描写)Label | |
公共控件(按钮)Button | |
公共控件(日期)DateTimePicker | |
公共控件(文本框)TextBox | |
所有Windows窗体(dgv)DataGridView | |
公共控件(单选框)CheckBox |
临时加班功能实现:
第一步:数据库
1、 表与表关系(图2.2-2)
从上面可以知道用到的表有:
表1:员工表 (StaffList)
主要包含如下字段信息:(说明)
列名 |
数据类型 |
主键/外键 |
说明 |
StaffID |
int - Identity |
主键 |
员工ID |
StaffNumber |
char (100) |
|
员工编号 |
StaffName |
char (100) |
|
员工姓名 |
Sex |
char (100) |
|
性别 |
IdentityCardNumber |
char (100) |
|
身份证号 |
HomeLocation |
char (100) |
|
家庭地址 |
Phone |
char (100) |
|
电话 |
StaffTypeID |
int |
外键 |
员工类型ID |
OrganizationID |
int |
外键 |
机构ID |
StationID |
int |
外键 |
站点ID |
Remarks |
char (100) |
|
备注 |
LeaveOfficeNo |
bit |
|
离职否 |
InvokingNo |
bit |
|
调用否 |
Date |
datetime |
|
日期 |
Photo |
nvarchar (3000) |
|
相片 |
表2:站点表 (StationList)
主要包含如下字段信息:(说明)
列名 |
数据类型 |
主键/外键 |
说明 | |
StationID |
int - Identity |
主键 |
站点ID | |
StationNumber |
char (100) |
|
站点编号 | |
StationName |
char (100) |
|
站点名称 | |
WindowID |
int |
外键 |
窗口ID | |
StopNo |
bit |
|
调用否 |
表3:司机表 (DriverList)
主要包含如下字段信息:(说明)
列名 |
数据类型 |
主键/外键 |
说明 |
DriverID |
int - Identity |
主键 |
司机ID |
DriverNumber |
char (100) |
|
司机编号 |
WorkValue |
char (100) |
|
工价 |
DriveCardNumber |
char (100) |
|
驾驶证号 |
GrantDriveVehicleTypeID |
int |
外键 |
准驾车型ID |
FollowEnterpriseQualificationCard |
char (100) |
|
从业资格证 |
CardCheckDate |
datetime |
|
证件验期 |
Remarks |
char (100) |
|
备注 |
MountGuardCardValidityDate |
datetime |
|
上岗证有效期 |
CardLicenseNewsID |
int |
外键 |
证照信息ID |
StaffID |
int |
外键 |
员工ID |
Picture |
char (100) |
|
图片 |
下面开始编写数据库储存过程:
数据库对应逻辑层(BLL)和界面层(UIL)文件夹:SchedulingManage_frmTemporaryOvertime(临时加班窗体和对应的类的存储过程)
USE [客运综合管理系统2015]
GO
/****** Object: StoredProcedure [dbo].[SchedulingManage_frmTemporaryOvertime] Script Date: 05/30/2015 19:42:38 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[SchedulingManage_frmTemporaryOvertime]--调度管理-临时加班
@Type CHAR(200)='',@StartTime DATETIME='',@EndTime DATETIME='',@TimeLong CHAR(100)='',
@OvertimeWages DECIMAL(18,3)=0,@StaffID INT=0,@NullifyNo BIT=0
AS
BEGIN
IF @Type='frmTemporaryOvertime_Load_cboStaffName'--绑定cboStaffName
BEGIN
SELECT StaffID, LTRIM(RTRIM(StaffName))AS StaffName
FROM StaffList
END
IF @Type='frmTemporaryOvertime_Load_cboCheckTicketMouth'--绑定cboCheckTicketMouth
BEGIN
SELECT StationID, LTRIM(RTRIM(StationName))AS StationName
FROM StationList
END
IF @Type='frmTemporaryOvertime_Load_dgvStaffNews'--绑定dgvStaffNews
BEGIN
SELECT StaffList.StaffID, LTRIM(RTRIM(StaffList.StaffNumber))AS StaffNumber, LTRIM(RTRIM(StaffList.StaffName))AS StaffName,
LTRIM(RTRIM(StaffList.Sex))AS Sex, LTRIM(RTRIM(StaffList.IdentityCardNumber))AS IdentityCardNumber,
LTRIM(RTRIM(StaffList.HomeLocation))AS HomeLocation, LTRIM(RTRIM(StaffList.Phone))AS Phone, LTRIM(RTRIM(StationList.StationName))AS StationName,
LTRIM(RTRIM(StaffList.Remarks))AS Remarks,
StaffList.LeaveOfficeNo, StaffList.InvokingNo
FROM StaffList INNER JOIN
StationList ON StaffList.StationID = StationList.StationID
ORDER BY StaffList.StaffID DESC
END
IF @Type='frmTemporaryOvertime_Insert_dgvTemporaryOvertime'--加班dgvTemporaryOvertime
BEGIN
INSERT INTO OvertimeList
(StartTime, EndTime, TimeLong, OvertimeWages, StaffID,NullifyNo)
VALUES (@StartTime,@EndTime,@TimeLong,@OvertimeWages,@StaffID,0)
END
IF @Type='frmTemporaryOvertime_Load_dgvTemporaryOvertime'--加班信息
BEGIN
SELECT OvertimeID, StartTime, EndTime, TimeLong, OvertimeWages, StaffID, NullifyNo
FROM OvertimeList
WHERE OvertimeList.StaffID=@StaffID
END
IF @Type='frmTemporaryOvertime_Load_AlldgvTemporaryOvertime'--全部加班信息显示
BEGIN
SELECT OvertimeID, StartTime, EndTime, LTRIM(RTRIM(TimeLong))AS TimeLong,
LTRIM(RTRIM(OvertimeWages))AS OvertimeWages, NullifyNo, StaffID
FROM OvertimeList
ORDER BY OvertimeList.StartTime DESC--数据按日期最新排序
END
END
第二步:服务端BLL(逻辑层)写方法<---调用数据库代码:
对应文件夹:SchedulingManage_frmTemporaryOvertime.cs(临时加班类)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;//添加命名空间
using System.Data;//添加命名空间
using System.Data.SqlClient;//添加命名空间
namespace BLL客运综合管理系统.SchedulingManage
{
[ServiceContract]//添加服务标签
public class frmTemporaryOvertime
{
DALPublic.DALMethod myDALMethod = new DALPublic.DALMethod();//实例化调用数据库存储过程方法
#region 绑定cboStaffName
[OperationContract]//添加行为标签
public DataSet frmTemporaryOvertime_Load_cboStaffName()//编写方法
{
SqlParameter[] mySqlParameters = {
new SqlParameter("@Type", SqlDbType.Char),
};
mySqlParameters[0].Value = "frmTemporaryOvertime_Load_cboStaffName";//方法名称对应数据库方法名称
DataTable dt = myDALMethod.QueryDataTable("SchedulingManage_frmTemporaryOvertime", mySqlParameters);
DataSet ds = new DataSet();
ds.Tables.Add(dt);
return ds
}
#endregion
#region 绑定cboCheckTicketMouth
[OperationContract]
public DataSet frmTemporaryOvertime_Load_cboCheckTicketMouth()
{
SqlParameter[] mySqlParameters = {
new SqlParameter("@Type", SqlDbType.Char),
};
mySqlParameters[0].Value = "frmTemporaryOvertime_Load_cboCheckTicketMouth";
DataTable dt = myDALMethod.QueryDataTable("SchedulingManage_frmTemporaryOvertime", mySqlParameters);
DataSet ds = new DataSet();
ds.Tables.Add(dt);
return ds;
}
#endregion
#region 绑定dgvStaffNews员工信息
[OperationContract]
public DataSet frmTemporaryOvertime_Load_dgvStaffNews()
{
SqlParameter[] mySqlParameters = {
new SqlParameter("@Type", SqlDbType.Char),
};
mySqlParameters[0].Value = "frmTemporaryOvertime_Load_dgvStaffNews";
DataTable dt = myDALMethod.QueryDataTable("SchedulingManage_frmTemporaryOvertime", mySqlParameters);
DataSet ds = new DataSet();
ds.Tables.Add(dt);
return ds;
}
#endregion
#region 加班dgvTemporaryOvertime信息(Insert)
[OperationContract]
public int frmTemporaryOvertime_Insert_dgvTemporaryOvertime(DateTime dtStartTime, DateTime dtEndTime, string strTimeLong, decimal decOvertimeWages, int intStaffID)
{
SqlParameter[] mySqlParameters = {
new SqlParameter("@Type", SqlDbType.Char),
new SqlParameter("@StartTime", SqlDbType.DateTime),
new SqlParameter("@EndTime", SqlDbType.DateTime),
new SqlParameter("@TimeLong", SqlDbType.Char),
new SqlParameter("@OvertimeWages", SqlDbType.Decimal),
new SqlParameter("@StaffID", SqlDbType.Int),
};
mySqlParameters[0].Value = "frmTemporaryOvertime_Insert_dgvTemporaryOvertime";
mySqlParameters[1].Value =dtStartTime;
mySqlParameters[2].Value =dtEndTime;
mySqlParameters[3].Value =strTimeLong;
mySqlParameters[4].Value = decOvertimeWages;
mySqlParameters[5].Value = intStaffID;
return myDALMethod.UpdateData("SchedulingManage_frmTemporaryOvertime", mySqlParameters);
}
#endregion
#region 根据StaffID查询加班信息dgvTemporaryOvertime
[OperationContract]
public DataSet frmTemporaryOvertime_Load_dgvTemporaryOvertime(int intStaffID)
{
SqlParameter[] mySqlParameters = {
new SqlParameter("@Type", SqlDbType.Char),
new SqlParameter("@StaffID", SqlDbType.Int),
};
mySqlParameters[0].Value = "frmTemporaryOvertime_Load_dgvTemporaryOvertime";
mySqlParameters[1].Value = intStaffID;
DataTable dt = myDALMethod.QueryDataTable("SchedulingManage_frmTemporaryOvertime", mySqlParameters);
DataSet ds = new DataSet();
ds.Tables.Add(dt);
return ds;
}
#endregion
#region 查询全部加班信息dgvTemporaryOvertime信息
[OperationContract]
public DataSet frmTemporaryOvertime_Load_AlldgvTemporaryOvertime()
{
SqlParameter[] mySqlParameters = {
new SqlParameter("@Type", SqlDbType.Char),
};
mySqlParameters[0].Value = "frmTemporaryOvertime_Load_AlldgvTemporaryOvertime";
DataTable dt = myDALMethod.QueryDataTable("SchedulingManage_frmTemporaryOvertime", mySqlParameters);
DataSet ds = new DataSet();
ds.Tables.Add(dt);
return ds;
}
#endregion
}
}
第三步:客户端UIL(界面层)写调用方法<---调用BLL(逻辑层)代码:
对应文件夹:SchedulingManage_frmTemporaryOvertime.cs(临时加班窗体)对应各种功能详解:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;//添加命名空间
namespace XX集团客运综合管理系统client.SchedulingManage
{
public partial class frmTemporaryOvertime : Form
{
public frmTemporaryOvertime()
{
InitializeComponent();
}
public delegate void ChangeFormColor(bool topmost);
public delegate void ChangeFormColor1(bool topmost1);
public event ChangeFormColor ChangeColor;//自定义方法调用窗体颜色
public event ChangeFormColor1 ChangeColor1;//自定义方法调用
BLL客运综合管理系统.SchedulingManage.frmTemporaryOvertime.frmTemporaryOvertimeClient myfrmTemporaryOvertimeClient =
new BLL客运综合管理系统.SchedulingManage.frmTemporaryOvertime.frmTemporaryOvertimeClient();//实例化调用BLL方法
private void frmLingShiJiaBan_FormClosing(object sender, FormClosingEventArgs e)
{
ChangeColor1(true);
ChangeColor(true);
}
#region frmTemporaryOvertime_Load事件功能
DataTable dtdgvStaffNews;
DataTable dtAlldgvTemporaryOvertime;//声明全局变量使用
private void frmTemporaryOvertime_Load(object sender, EventArgs e)
{
try
{
DataTable dtcboStaffName = myfrmTemporaryOvertimeClient.frmTemporaryOvertime_Load_cboStaffName().Tables[0];//绑定数据DataTable
cboStaffName.DataSource = dtcboStaffName;//绑定员工姓名下拉框
cboStaffName.DisplayMember = "StaffName";
cboStaffName.ValueMember = "StaffID";
cboStaffName.SelectedValue = -1;
cboOvertimeMan.DataSource = dtcboStaffName.Copy();//绑定加班人下拉框
cboOvertimeMan.DisplayMember = "StaffName";
cboOvertimeMan.ValueMember = "StaffID";
cboOvertimeMan.SelectedValue = -1;
DataTable dtcboCheckTicketMouth = myfrmTemporaryOvertimeClient.frmTemporaryOvertime_Load_cboCheckTicketMouth().Tables[0];
cboCheckTicketMouth.DataSource = dtcboCheckTicketMouth;//绑定检票口下拉框
cboCheckTicketMouth.DisplayMember = "StationName";
cboCheckTicketMouth.ValueMember = "StationID";
cboCheckTicketMouth.SelectedValue = -1;
dtdgvStaffNews = myfrmTemporaryOvertimeClient.frmTemporaryOvertime_Load_dgvStaffNews().Tables[0];
dgvStaffNews.DataSource = dtdgvStaffNews;//查询dgv员工信息
this.dgvStaffNews = SYS_PublicStaticClass.SetDgv(dgvStaffNews);//dgv序号
this.dgvStaffNews.CellBorderStyle = DataGridViewCellBorderStyle.Sunken;//设置dgv三维凹陷边框
this.dgvStaffNews.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;//设置dgv列标题居中
this.dgvStaffNews.RowsDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;//设置dgv单元格内容居中
string[] strStaffNumber = new string[dtdgvStaffNews.Rows.Count];
for (int i = 0; i < dtdgvStaffNews.Rows.Count; i++)
{
strStaffNumber[i] = dtdgvStaffNews.Rows[i]["StaffNumber"].ToString().Trim();
}
txtStaffNumber.AutoCompleteSource = AutoCompleteSource.CustomSource;//自动完成源--员工编号
txtStaffNumber.AutoCompleteCustomSource.AddRange(strStaffNumber);
txtStaffNumber.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
string[] strRemarks = new string[dtdgvStaffNews.Rows.Count];
for (int j = 0; j < dtdgvStaffNews.Rows.Count; j++)
{
strRemarks[j] = dtdgvStaffNews.Rows[j]["Remarks"].ToString().Trim();
}
txtRemarks.AutoCompleteSource = AutoCompleteSource.CustomSource;//自动完成源方法--备注
txtRemarks.AutoCompleteCustomSource.AddRange(strRemarks);
txtRemarks.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
dtAlldgvTemporaryOvertime = myfrmTemporaryOvertimeClient.frmTemporaryOvertime_Load_AlldgvTemporaryOvertime().Tables[0];//绑定DGV信息
dgvTemporaryOvertime.DataSource = dtAlldgvTemporaryOvertime;//查询DGV全部加班信息
this.dgvTemporaryOvertime = SYS_PublicStaticClass.SetDgv(dgvTemporaryOvertime);//序号
this.dgvTemporaryOvertime.CellBorderStyle = DataGridViewCellBorderStyle.Sunken;//设置dgv三维凹陷边框
this.dgvTemporaryOvertime.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;//设置dgv列标题居中
this.dgvTemporaryOvertime.RowsDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;//设置dgv单元格内容居中
dtpStartTime.Format = DateTimePickerFormat.Custom;//设置时间格式2015-04-15 16:26:00
dtpStartTime.CustomFormat = "yyyy-MM-dd HH:mm:ss";
dtpEndTime.Format = DateTimePickerFormat.Custom;
dtpEndTime.CustomFormat = "yyyy-MM-dd HH:mm:ss";
}
catch
{
MessageBox.Show("请认真检查绑定的数据是否有问题!"+"\n否则系统会崩溃!!!");//提示框
}
}
#endregion
#region 多条件查询功能
private void btnSearch_Click(object sender, EventArgs e)
{
try
{
if (chkInvokingNoOne.Checked == true)//判断绑定选择否
{
DataView dvdgvStaffNewsOne = new DataView(dtdgvStaffNews);//实例化DataView调用
dvdgvStaffNewsOne.RowFilter = "InvokingNo =" + chkInvokingNo.Checked;
dtdgvStaffNews = dvdgvStaffNewsOne.ToTable();
dgvStaffNews.DataSource = dtdgvStaffNews;//绑定DGV数据
DataView dvdgvStaffNews = new DataView(dtdgvStaffNews);
string strcboStaffName = "";//声明变量并赋值
string strtxtStaffNumber = "";
string strcboCheckTicketMouth = "";
string strtxtRemarks = "";
if (cboStaffName.Text != "")//判断文本是否为空
{
strcboStaffName = cboStaffName.Text.ToString().Trim();//获取文本值
}
if (txtStaffNumber.Text != "")
{
strtxtStaffNumber = txtStaffNumber.Text.ToString().Trim();
}
if (cboCheckTicketMouth.Text != "")
{
strcboCheckTicketMouth = cboCheckTicketMouth.Text.Trim();
}
if (txtRemarks.Text != "")
{
strtxtRemarks = txtRemarks.Text.ToString().Trim();
}
dvdgvStaffNews.RowFilter = "StaffName LIKE '%" + strcboStaffName + "%'AND StaffNumber LIKE '%" + strtxtStaffNumber + "%'AND StationName LIKE '%" + strcboCheckTicketMouth +
"%'AND Remarks LIKE '%" + strtxtRemarks + "%'";
dgvStaffNews.DataSource = dvdgvStaffNews.ToTable();//查询相应数据
}
if (chkInvokingNoOne.Checked == false)//当单选框为没选择状态时
{
DataTable dtdgvStaffNewsOne = myfrmTemporaryOvertimeClient.frmTemporaryOvertime_Load_dgvStaffNews().Tables[0];//获取DGV数据
DataView dvdgvStaffNews = new DataView(dtdgvStaffNewsOne);
string strcboStaffName = "";
string strtxtStaffNumber = "";
string strcboCheckTicketMouth = "";
string strtxtRemarks = "";//声明变量并赋值
if (cboStaffName.Text != "")
{
strcboStaffName = cboStaffName.Text.ToString().Trim();//获取文本值
}
if (txtStaffNumber.Text != "")
{
strtxtStaffNumber = txtStaffNumber.Text.ToString().Trim();
}
if (cboCheckTicketMouth.Text != "")
{
strcboCheckTicketMouth = cboCheckTicketMouth.Text.Trim();
}
if (txtRemarks.Text != "")
{
strtxtRemarks = txtRemarks.Text.ToString().Trim();
}
dvdgvStaffNews.RowFilter = "StaffName LIKE '%" + strcboStaffName + "%'AND StaffNumber LIKE '%" + strtxtStaffNumber + "%'AND StationName LIKE '%" + strcboCheckTicketMouth +
"%'AND Remarks LIKE '%" + strtxtRemarks + "%'";
dgvStaffNews.DataSource = dvdgvStaffNews.ToTable();
}
}
catch
{
MessageBox.Show("查询失败!字符串拼接是否有问题?请检查!!!");//显示提示框内容
}
}
#endregion
#region 加班功能
private void btnOvertime_Click(object sender, EventArgs e)
{
if (txtOvertimeWages.Text == "" || dtpStartTime.Value >= dtpEndTime.Value)//判断两个条件是否同时成立
{
MessageBox.Show("加班工资不能为空!或者结束时间应大于开始时间!!!");//提示框
return;
}
if (cboOvertimeMan.Text == "")
{
MessageBox.Show("对不起!没有选择加班人则不能加班!!!");
return;
}
else
{
if (MessageBox.Show("您确定要加班?", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Question) == DialogResult.OK)
{
try
{
DateTime dtStartTime = Convert.ToDateTime(dtpStartTime.Value.ToString().Trim());//时间格式转换
DateTime dtEndTime = Convert.ToDateTime(dtpEndTime.Value.ToString().Trim());
string strTimeLong = (dtEndTime - dtStartTime).ToString();//文本时长的结算
decimal decOvertimeWages = Convert.ToDecimal(txtOvertimeWages.Text.ToString().Trim());
int intStaffID = Convert.ToInt32(cboOvertimeMan.SelectedValue);//获取ID
int OvertimeCount = myfrmTemporaryOvertimeClient.frmTemporaryOvertime_Insert_dgvTemporaryOvertime(dtStartTime, dtEndTime, strTimeLong, decOvertimeWages, intStaffID);
if (OvertimeCount > 0)
{
MessageBox.Show("加班成功!");//提示框
dgvStaffNews.DataSource = dtdgvStaffNews;//刷新查询员工信息
dgvTemporaryOvertime.DataSource = dtAlldgvTemporaryOvertime;//刷新查询全部加班信息
// btnReset_Click(null, null);
}
else
{
MessageBox.Show("加班失败了!");
dgvStaffNews.DataSource = dtdgvStaffNews;//刷新查询员工信息
dgvTemporaryOvertime.DataSource = dtAlldgvTemporaryOvertime;//刷新查询全部加班信息
//btnReset_Click(null, null);
return;
}
}
catch
{
MessageBox.Show("数据有问题!请检查!!!");
}
}
}
}
#endregion
#region 重置功能
private void btnReset_Click(object sender, EventArgs e)
{
cboStaffName.SelectedValue = -1;//隐藏值
txtStaffNumber.Text = "";//清空文本
cboCheckTicketMouth.SelectedValue = -1;
txtRemarks.Text = "";
chkInvokingNo.Checked = false;
txtOvertimeWages.Text = "";
dgvStaffNews.DataSource = dtdgvStaffNews;//刷新查询员工信息
dgvTemporaryOvertime.DataSource = dtAlldgvTemporaryOvertime;//刷新查询全部加班信息
}
#endregion
#region dgvStaffNews单击获取ID功能
private void dgvStaffNews_CellClick(object sender, DataGridViewCellEventArgs e)//事件
{
PublicStaticObject.intStaffID = Convert.ToInt32(dgvStaffNews.CurrentRow.Cells["员工ID"].Value);//获取ID
DataTable dtdgvTemporaryOvertime = myfrmTemporaryOvertimeClient.frmTemporaryOvertime_Load_dgvTemporaryOvertime(PublicStaticObject.intStaffID).Tables[0];
dgvTemporaryOvertime.DataSource = dtdgvTemporaryOvertime;//根据员工ID查询加班信息
}
#endregion
}
}
以上是调度管理-临时加班功能实现步骤:数据库-->BLL-->UIL
-------实现功能待续!!!