1.4门诊收费
用于处方和辅助检查项目的收费,收费有3种情况:分别是现金、记账和刷卡。按照要求,备注填写你收费的类型,在后面收费员交款时好区别。如图(1):
图(1)
从界面上可以看到我们这里用到的控件有
控件名称 | 说明 |
单选框(RadioButton) | 控件可以在工具箱直接拖动至窗体,拖至窗体后右击属性可以修改控件的样式和各种属性,还可以编辑事件。 |
下拉框(ComboBox) | |
文本(TextBox) | |
按钮(Button) | |
表格(DataGridView) |
左边的dgv查询功能实现:
第一步:数据库
1、表与关系
2:绑定dgv
第一步:数据库的存储过程
if(@Type='Frm_MenZhenShouFeiDan_ChaXunChuFangHao')
begin
SELECT DISTINCT
MZ_PrescriptionBillsList.PrescriptionBillsID, MZ_PrescriptionBillsList.PrescriptionNumber, MZ_MenZhenRegisterList.Name,
AttributeMingXiList.AttributeMingXiName AS MedicalTreatmentInsuranceType, MZ_MenZhenRegisterList.MenZhenRegisterID, AttributeMingXiList.AttributeMingXiID
FROM MZ_PrescriptionBillsList INNER JOIN
MZ_MenZhenRegisterList ON MZ_PrescriptionBillsList.MenZhenRegisterID = MZ_MenZhenRegisterList.MenZhenRegisterID INNER JOIN
AttributeMingXiList ON MZ_MenZhenRegisterList.MedicalTreatmentInsuranceTypeID = AttributeMingXiList.AttributeMingXiID LEFT OUTER JOIN
MZ_PrescriptionBillsMingXiList ON MZ_PrescriptionBillsList.PrescriptionBillsID = MZ_PrescriptionBillsMingXiList.PrescriptionBillsID
WHERE (MZ_PrescriptionBillsList.SettleAccountsNo = 0)
end
第二步:逻辑层(BLL)代码
DALPublic.DALMethod myDALMethod = new DALPublic.DALMethod();
[OperationContract]
public DataSet Frm_MenZhenShouFeiDan_ChaXunChuFangHao()
{
SqlParameter[] mySqlParameters = {
new SqlParameter ("@Type",SqlDbType .Char),
};
mySqlParameters[0].Value = "Frm_MenZhenShouFeiDan_ChaXunChuFangHao";
DataTable dt = myDALMethod.QueryDataTable("门诊登记_Frm_MenZhenShouFeiDan", mySqlParameters);
DataSet ds = new DataSet();
ds.Tables.Add(dt);
return ds;
}
第三步:界面层(UIL)代码,在窗体的Load事件中绑定dgv的数据
绑定右边dgv的数据
第一步:数据库
3、表与关系
收费处方明细表
收费辅助检查项目表
4:绑定dgv
第一步:数据库的存储过程
if(@Type='Frm_MenZhenShouFeiDan_ChaXunChuFangHaoMingXi')
begin
SELECT MZ_PrescriptionBillsList.PrescriptionBillsID, MZ_MenZhenRegisterList.Name, KC_MedicineList.MedicineName, KC_MedicineList.Specification,
AttributeMingXiList.AttributeMingXiName AS MeteringUnit, MZ_PrescriptionBillsMingXiList.Number, KC_MedicineList.RetailPrice_J, MZ_PrescriptionBillsMingXiList.PayMoney,
MZ_PrescriptionBillsMingXiList.PrescriptionBillsMingXiID, MZ_MenZhenRegisterList.MenZhenRegisterID
FROM MZ_PrescriptionBillsList INNER JOIN
MZ_PrescriptionBillsMingXiList ON MZ_PrescriptionBillsList.PrescriptionBillsID = MZ_PrescriptionBillsMingXiList.PrescriptionBillsID INNER JOIN
MZ_MenZhenRegisterList ON MZ_PrescriptionBillsList.MenZhenRegisterID = MZ_MenZhenRegisterList.MenZhenRegisterID INNER JOIN
KC_MedicineList ON MZ_PrescriptionBillsMingXiList.MedicineID = KC_MedicineList.MedicineID INNER JOIN
AttributeMingXiList ON KC_MedicineList.MeteringUnitID = AttributeMingXiList.AttributeMingXiID
where MZ_PrescriptionBillsMingXiList.PrescriptionBillsID=@PrescriptionBillsID and MZ_PrescriptionBillsMingXiList.ChargeNo=0
union--拼接辅助检查项目收费
SELECT MZ_PrescriptionBillsList.PrescriptionBillsID, MZ_MenZhenRegisterList.Name, SS_HelpCheckList.CheckProject as MedicineName,'辅助检查项目' as Specification,'元' as MeteringUnit,'1' as Number,SS_HelpCheckList.Money,
SS_HelpCheckList.Money as PayMoney,'0' as PrescriptionBillsMingXiID,SS_HelpCheckList.MenZhenRegisterID
FROM SS_HelpCheckList INNER JOIN
MZ_MenZhenRegisterList ON SS_HelpCheckList.MenZhenRegisterID = MZ_MenZhenRegisterList.MenZhenRegisterID INNER JOIN
MZ_PrescriptionBillsList ON MZ_MenZhenRegisterList.MenZhenRegisterID = MZ_PrescriptionBillsList.MenZhenRegisterID
where MZ_PrescriptionBillsList.PrescriptionBillsID=@PrescriptionBillsID and SS_HelpCheckList.chargeNo=0
end
第二步:逻辑层(BLL)代码
[OperationContract]
public DataSet Frm_MenZhenShouFeiDan_ChaXunChuFangHaoMingXi(int intPrescriptionBillsID)
{
SqlParameter[] mySqlParameters = {
new SqlParameter ("@Type",SqlDbType .Char),
new SqlParameter ("@PrescriptionBillsID",SqlDbType.Int),
};
mySqlParameters[0].Value = "Frm_MenZhenShouFeiDan_ChaXunChuFangHaoMingXi";
mySqlParameters[1].Value = intPrescriptionBillsID;
DataTable dt = myDALMethod.QueryDataTable("门诊登记_Frm_MenZhenShouFeiDan", mySqlParameters);
DataSet ds = new DataSet();
ds.Tables.Add(dt);
return ds;
}
第三步:界面层(UIL)代码,左边dgv的SelectionChanged
事件发生
int PrescriptionID;//声明一个变量
private void dgvPrescription_SelectionChanged(object sender, EventArgs e)
{
try
{
if (rdbClick.Checked == true)//单击选择左边dgv的数据,显示明细
{
PrescriptionID = Convert.ToInt32(dgvPrescription.CurrentRow.Cells["PrescriptionBillsID"].Value);
dt = myFrm_MenZhenShouFeiDanClient.Frm_MenZhenShouFeiDan_ChaXunChuFangHaoMingXi(PrescriptionID).Tables[0];
dgvPrescriptionMingXi.DataSource = dt;
}
for (int i = 0; i < dgvPrescriptionMingXi.Rows.Count; i++)//循环遍历dgvPrescriptionMingXi的每一行
{
decimal Number = Convert.ToDecimal(dgvPrescriptionMingXi.Rows[i].Cells["Number"].Value);//获取dgvPrescriptionMingXi每一行的数量
decimal RetailPrice_J = Convert.ToDecimal(dgvPrescriptionMingXi.Rows[i].Cells["RetailPrice_J"].Value);//获取dgvPrescriptionMingXi每一行的单价
decimal Money = Number * RetailPrice_J;
dgvPrescriptionMingXi.Rows[i].Cells["SumMoney"].Value = Money; //给dgvPrescriptionMingXi每一行的总价赋值
}
decimal PayMoneyMySelf3 = 0;
decimal PayMoneyMySelf4 = 0;
for (int i = 0; i < dgvPrescriptionMingXi.Rows.Count; i++)
{
PayMoneyMySelf3 = Convert.ToDecimal(dgvPrescriptionMingXi.Rows[i].Cells["PayMoney"].Value);
PayMoneyMySelf4 += PayMoneyMySelf3;
}
txtAccountsReceivable.Text = PayMoneyMySelf4.ToString("0.00");//给文本框txtAccountsReceivable赋值,应付金额=总金额*折扣率
}
catch { }
}
5:选择CheckBox只显示今天数据
第一步:数据库的存储过程
if(@Type='Frm_MenZhenShouFeiDan_ChaXunChuFangHaowhere')
begin
SELECT MZ_PrescriptionBillsList.PrescriptionBillsID, MZ_PrescriptionBillsList.PrescriptionNumber, MZ_MenZhenRegisterList.Name,
AttributeMingXiList.AttributeMingXiName AS MedicalTreatmentInsuranceType
FROM MZ_PrescriptionBillsList INNER JOIN
MZ_MenZhenRegisterList ON MZ_PrescriptionBillsList.MenZhenRegisterID = MZ_MenZhenRegisterList.MenZhenRegisterID INNER JOIN
AttributeMingXiList ON MZ_MenZhenRegisterList.MedicalTreatmentInsuranceTypeID = AttributeMingXiList.AttributeMingXiID
where MZ_PrescriptionBillsList.OpenBillsDate>@OpenBillsDate
end
第二步:逻辑层(BLL)代码
[OperationContract]
public DataSet Frm_MenZhenShouFeiDan_ChaXunChuFangHaowhere(DateTime dtmOpenBillsDate)
{
SqlParameter[] mySqlParameters = {
new SqlParameter ("@Type",SqlDbType .Char),
new SqlParameter ("@OpenBillsDate",SqlDbType.DateTime),
};
mySqlParameters[0].Value = "Frm_MenZhenShouFeiDan_ChaXunChuFangHaowhere";
mySqlParameters[1].Value = dtmOpenBillsDate;
DataTable dt = myDALMethod.QueryDataTable("门诊登记_Frm_MenZhenShouFeiDan", mySqlParameters);
DataSet ds = new DataSet();
ds.Tables.Add(dt);
return ds;
}
第三步:界面层(UIL)代码,在CheckBox的CheckedChanged
事件发生
private void chkShow_CheckedChanged(object sender, EventArgs e)
{
if (chkShow.Checked == true)
{
DateTime Time = DateTime.Today;//获取当天时间
dgvPrescription.DataSource = myFrm_MenZhenShouFeiDanClient.Frm_MenZhenShouFeiDan_ChaXunChuFangHaowhere(Time).Tables[0];//如果打勾则显示今天数据
}
else
{
dgvPrescription.DataSource = myFrm_MenZhenShouFeiDanClient.Frm_MenZhenShouFeiDan_ChaXunChuFangHao().Tables[0];//不打勾显示全部
}
}
6:找零
#region 找零
private void txtGathering_TextChanged(object sender, EventArgs e)
{
try
{
decimal AccountsReceivable = Convert.ToDecimal(txtAccountsReceivable.Text);//应收金额
decimal Gathering = Convert.ToDecimal(txtGathering.Text);//收到的钱
decimal change = 0;
change = Gathering - AccountsReceivable;//找零=收到的钱-应收金额
txtChange.Text = (Gathering - AccountsReceivable).ToString("0.00");
//零钱=交款-应收金额
}
catch { }
}
#endregion
7:每隔10S刷新一次窗体
#region 隔10S刷新一次
private void chkRefresh_CheckedChanged(object sender, EventArgs e)
{
if (chkRefresh.Checked == true)
{
timer1.Start(); //如果chkRefresh选择为True,开始执行时间
}
else
{
timer1.Stop();//否则停止执行
}
}
private void timer1_Tick(object sender, EventArgs e)
{
Frm_MenZhenShouFeiDan_Load(null, null); //每隔10秒刷新窗体,在timer控件设置
}
#endregion
8:选择下拉框不同的结算方式收费时的不同效果
int SelectElse;//声明一个选择方式变量
private void cboSettleAccountsWay_SelectionChangeCommitted(object sender, EventArgs e)
{
int Ways=Convert.ToInt32(cboSettleAccountsWay.SelectedValue);//根据下拉事件获取结算ID
if (Ways == 1368)//1368为现金
{
txtGathering.ReadOnly = false;//交款可以输入
txtGathering.BackColor = Color.White;//颜色为白色
}
if (Ways == 1369)//记账
{
SelectElse = 2;
txtGathering.ReadOnly = true;//交款禁止输入
txtGathering.BackColor = Color.Silver;//颜色设置为灰色
}
if (Ways == 1370)//刷卡
{
SelectElse = 3;
txtGathering.ReadOnly = true;//交款禁止输入
txtGathering.BackColor = Color.Silver;//颜色设置为灰色
}
}
9:保存操作
第一步:数据库
1、表与关系
表1:门诊收费表(MZ_MenZhenChargeList)
列名 | 数据类型 | 说明 |
ChargeID | int - Identity | 收费ID |
PrescriptionBillsID | int | 处方单ID |
SettleAccountsWaysID | int | 结算方式ID |
ShouldCollectMoney | decimal (18, 2) | 应收金额 |
BeiZhu | nchar (50) | 备注 |
ChargeData | datetime | 收费日期 |
ChargeNo | bit | 收费否 |
HuanKuanNo | bit | 还款否 |
第一步:数据库的存储过程
if(@Type='Frm_MenZhenShouFeiDan_InsertMenZhenCharge')
begin
insert MZ_MenZhenChargeList(PrescriptionBillsID, SettleAccountsWaysID, ShouldCollectMoney, BeiZhu,ChargeData,ChargeNo,HuanKuanNo)
values (@PrescriptionBillsID, @SettleAccountsWaysID, @ShouldCollectMoney, @BeiZhu,@ChargeData,0,0)
end
第二步:逻辑层(BLL)代码
[OperationContract]
public int Frm_MenZhenShouFeiDan_InsertMenZhenCharge(int intPrescriptionBillsID, int intSettleAccountsWaysID, decimal decShouldCollectMoney, string strBeiZhu, DateTime dtmChargeData)
{
SqlParameter[] mySqlParameters = {
new SqlParameter ("@Type",SqlDbType .Char),
new SqlParameter ("@PrescriptionBillsID",SqlDbType.Int),
new SqlParameter ("@SettleAccountsWaysID",SqlDbType.Int),
new SqlParameter ("@ShouldCollectMoney",SqlDbType.Decimal),
new SqlParameter ("@BeiZhu",SqlDbType.Char),
new SqlParameter ("@ChargeData",SqlDbType.DateTime),
};
mySqlParameters[0].Value = "Frm_MenZhenShouFeiDan_InsertMenZhenCharge";
mySqlParameters[1].Value =intPrescriptionBillsID;
mySqlParameters[2].Value =intSettleAccountsWaysID;
mySqlParameters[3].Value=decShouldCollectMoney;
mySqlParameters[4].Value=strBeiZhu;
mySqlParameters[5].Value = dtmChargeData;
int i= myDALMethod.UpdateData("门诊登记_Frm_MenZhenShouFeiDan", mySqlParameters);
return i;
}
第三步:界面层(UIL)代码,根据结算方式下拉事件进行不同的新增收费数据
<pre class="csharp" name="code"> #region 根据结算方式下拉事件进行不同的新增收费数据
int Charge;
DateTime dtmNow = DateTime.Now;//获取当前时间
int intMenZhenRegisterIDMingXi;
int intPrescriptionBillsMingXiID;
private void btnSureGathering_Click(object sender, EventArgs e)
{
try
{
intMenZhenRegisterID = Convert.ToInt32(dgvPrescription.CurrentRow.Cells["MenZhenRegisterID"].Value);//获取病人ID
if (SelectElse == 2)//记账
{
txtGathering.ReadOnly = true;//设置交款不能操作
txtGathering.BackColor = Color.Silver;//设置为灰色
if (txtBeiZhu.Text == "")//如果备注为空,则提示
{
MessageBox.Show("备注信息还没有写呢?!!");
return;//返回
}
int PrescriptionBillsID = PrescriptionID;//获取处方ID
int SettleAccountsWay = Convert.ToInt32(cboSettleAccountsWay.SelectedValue);//获取结算方式ID
decimal AccountsReceivable = Convert.ToDecimal(txtAccountsReceivable.Text);//本次应收多少赋值
string strBeiZhu = txtBeiZhu.Text;//备注
decimal Gathering = Convert.ToDecimal(txtAccountsReceivable.Text);//找零
string PrescriptionNumber = dgvPrescription.CurrentRow.Cells["PrescriptionNumber"].Value.ToString().Trim();//获取处方号
string Name = dgvPrescription.CurrentRow.Cells["Name1"].Value.ToString().Trim();//获取姓名
if (MessageBox.Show("确认记账?" + "病人:" + Name + " 处方号: " + PrescriptionNumber + " 记账: " + AccountsReceivable + "元",
"" + "提示",
MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)//提示变量
{
Charge = myFrm_MenZhenShouFeiDanClient.Frm_MenZhenShouFeiDan_InsertMenZhenCharge(PrescriptionBillsID, SettleAccountsWay, AccountsReceivable, strBeiZhu, dtmNow);
myFrm_MenZhenShouFeiDanClient.Frm_MenZhenShouFeiDan_UpdatePrescriptionBills(PrescriptionBillsID);//记账新增代码
if (Charge > 0)
{
MessageBox.Show("记账成功!!");
for (int i = 0; i < dgvPrescriptionMingXi.Rows.Count; i++)//如果记账成功就执行下面代码
{
intMenZhenRegisterIDMingXi = Convert.ToInt32(dgvPrescriptionMingXi.Rows[i].Cells["MenZhenRegisterID2"].Value);
intPrescriptionBillsMingXiID = Convert.ToInt32(dgvPrescriptionMingXi.Rows[i].Cells["PrescriptionBillsMingXiID"].Value);
myFrm_MenZhenShouFeiDanClient.Frm_MenZhenShouFeiDan_UpdataHelpCheckListChargeNo(intMenZhenRegisterIDMingXi);//辅助检查项目收费否为True
myFrm_MenZhenShouFeiDanClient.Frm_MenZhenShouFeiDan_UpdateChargeNo(intPrescriptionBillsMingXiID);
//处方明细单收费项目为True,目的是收费之后病人的资料不再在这里显示出来
}
txtGathering.Text = "";//清空文本框
txtGathering.Text = "";
txtBeiZhu.Text = "";
myFrm_MenZhenShouFeiDanClient.Frm_MenZhenShouFeiDan_UpdateMenZhenRegisterCharge(intMenZhenRegisterID);//设置那位病人已经收费
Frm_MenZhenShouFeiDan_Load(null, null);//刷新
}
}
return;
}
}
catch { }
if (SelectElse == 3)//记账,下面和记账差不多功能,只是结算方式不同
{
if (txtBeiZhu.Text == "")
{
MessageBox.Show("备注信息还没有写呢?!!");
return;
}
int PrescriptionBillsID = PrescriptionID;
int SettleAccountsWay = Convert.ToInt32(cboSettleAccountsWay.SelectedValue);
decimal AccountsReceivable = Convert.ToDecimal(txtAccountsReceivable.Text);
string strBeiZhu = txtBeiZhu.Text;
decimal Gathering = Convert.ToDecimal(txtAccountsReceivable.Text);
string PrescriptionNumber = dgvPrescription.CurrentRow.Cells["PrescriptionNumber"].Value.ToString().Trim();
string Name = dgvPrescription.CurrentRow.Cells["Name1"].Value.ToString().Trim();
if (MessageBox.Show("刷卡病人:" + Name + " 处方号: " + PrescriptionNumber + " 刷卡金额: " + AccountsReceivable,
"" + "提示",
MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
Charge = myFrm_MenZhenShouFeiDanClient.Frm_MenZhenShouFeiDan_InsertMenZhenCharge(PrescriptionBillsID, SettleAccountsWay, AccountsReceivable, strBeiZhu, dtmNow);
myFrm_MenZhenShouFeiDanClient.Frm_MenZhenShouFeiDan_UpdatePrescriptionBills(PrescriptionBillsID);
if (Charge > 0)
{
MessageBox.Show("刷卡成功!!");
for (int i = 0; i < dgvPrescriptionMingXi.Rows.Count; i++)
{
intMenZhenRegisterIDMingXi = Convert.ToInt32(dgvPrescriptionMingXi.Rows[i].Cells["MenZhenRegisterID2"].Value);
intPrescriptionBillsMingXiID = Convert.ToInt32(dgvPrescriptionMingXi.Rows[i].Cells["PrescriptionBillsMingXiID"].Value);
myFrm_MenZhenShouFeiDanClient.Frm_MenZhenShouFeiDan_UpdataHelpCheckListChargeNo(intMenZhenRegisterIDMingXi);
myFrm_MenZhenShouFeiDanClient.Frm_MenZhenShouFeiDan_UpdateChargeNo(intPrescriptionBillsMingXiID);
}
txtGathering.Text = "";
txtGathering.Text = "";
txtBeiZhu.Text = "";
myFrm_MenZhenShouFeiDanClient.Frm_MenZhenShouFeiDan_UpdateMenZhenRegisterCharge(intMenZhenRegisterID);
Frm_MenZhenShouFeiDan_Load(null, null);
}
}
return;
}
try
{
//按照现金结算,交款文本框可以输入,其余的功能差不多,就不再多说了
if (txtGathering.Text == "")
{
MessageBox.Show("病人还没有交款呢!!");
return;
}
if (txtBeiZhu.Text == "")
{
MessageBox.Show("备注信息还没有写呢?!!");
return;
}
int PrescriptionBillsID = PrescriptionID;
int SettleAccountsWay = Convert.ToInt32(cboSettleAccountsWay.SelectedValue);
decimal AccountsReceivable = Convert.ToDecimal(txtAccountsReceivable.Text);
string strBeiZhu = txtBeiZhu.Text;
decimal Gathering = Convert.ToDecimal(txtGathering.Text);
string PrescriptionNumber = dgvPrescription.CurrentRow.Cells["PrescriptionNumber"].Value.ToString().Trim();
string Name = dgvPrescription.CurrentRow.Cells["Name1"].Value.ToString().Trim();
if (Gathering < AccountsReceivable)
{
MessageBox.Show("病人交款小于应交金额,请谨慎操作!!");
return;
}
if (MessageBox.Show("确认收费?" + "病人:" + Name + " 处方号: " + PrescriptionNumber + " 收费: " + Gathering + " 找零: " +
(txtChange.Text = (Gathering - AccountsReceivable).ToString("0.00")), "" + "提示",
MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
Charge = myFrm_MenZhenShouFeiDanClient.Frm_MenZhenShouFeiDan_InsertMenZhenCharge(PrescriptionBillsID, SettleAccountsWay, AccountsReceivable, strBeiZhu, dtmNow);
myFrm_MenZhenShouFeiDanClient.Frm_MenZhenShouFeiDan_UpdatePrescriptionBills(PrescriptionBillsID);
if (Charge > 0)
{
MessageBox.Show("收费成功!!");
for (int i = 0; i < dgvPrescriptionMingXi.Rows.Count; i++)
{
intMenZhenRegisterIDMingXi = Convert.ToInt32(dgvPrescriptionMingXi.Rows[i].Cells["MenZhenRegisterID2"].Value);
intPrescriptionBillsMingXiID = Convert.ToInt32(dgvPrescriptionMingXi.Rows[i].Cells["PrescriptionBillsMingXiID"].Value);
myFrm_MenZhenShouFeiDanClient.Frm_MenZhenShouFeiDan_UpdataHelpCheckListChargeNo(intMenZhenRegisterIDMingXi);
myFrm_MenZhenShouFeiDanClient.Frm_MenZhenShouFeiDan_UpdateChargeNo(intPrescriptionBillsMingXiID);
}
txtGathering.Text = "";
txtGathering.Text = "";
txtBeiZhu.Text = "";
myFrm_MenZhenShouFeiDanClient.Frm_MenZhenShouFeiDan_UpdateMenZhenRegisterCharge(intMenZhenRegisterID);
Frm_MenZhenShouFeiDan_Load(null, null);
}
}
}
catch { }
}
#endregion
收费功能到此结束
仅供参考,禁止用于商业用途,违者后果自负