📄 pbdll01.cpp
字号:
// pbdll01.cpp : 定义 DLL 的初始化例程。
//
#include "stdafx.h"
#include "pbdll01.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
//
//TODO: 如果此 DLL 相对于 MFC DLL 是动态链接的,
// 则从此 DLL 导出的任何调入
// MFC 的函数必须将 AFX_MANAGE_STATE 宏添加到
// 该函数的最前面。
//
// 例如:
//
// extern "C" BOOL PASCAL EXPORT ExportedFunction()
// {
// AFX_MANAGE_STATE(AfxGetStaticModuleState());
// // 此处为普通函数体
// }
//
// 此宏先于任何 MFC 调用
// 出现在每个函数中十分重要。这意味着
// 它必须作为函数中的第一个语句
// 出现,甚至先于所有对象变量声明,
// 这是因为它们的构造函数可能生成 MFC
// DLL 调用。
//
// 有关其他详细信息,
// 请参阅 MFC 技术说明 33 和 58。
//
// Cpbdll01App
BEGIN_MESSAGE_MAP(Cpbdll01App, CWinApp)
END_MESSAGE_MAP()
// Cpbdll01App 构造
Cpbdll01App::Cpbdll01App()
{
// TODO: 在此处添加构造代码,
// 将所有重要的初始化放置在 InitInstance 中
}
// 唯一的一个 Cpbdll01App 对象
Cpbdll01App theApp;
// Cpbdll01App 初始化
BOOL Cpbdll01App::InitInstance()
{
CWinApp::InitInstance();
return TRUE;
}
void init(char DBType)
{
TCHAR exeFullPath[MAX_PATH]; // MAX_PATH在API中有定义,为128
int len=GetModuleFileName(NULL,
exeFullPath, //应用程序的全路径存放地址
MAX_PATH);
CString path=_T("\\pb.ini"); //配置文件名
//::strcpy((char *)exeFullPath+len-10,(char *)path.GetBuffer()); //组合出配置文件的全路径
::strcpy((char *)exeFullPath+len-10,(char *)path.GetBuffer()); //组合出配置文件的全路径
char DataSource[256];
char uid[256];
char pwd[256];
char Server[256];
char Database[256];
//USES_CONVERSION;
if(DBType == '1') {
GetPrivateProfileString("ORACLE", //节名
"DataSource", //项名
"No Text", //没找到此项时的返回值
DataSource, //目标缓冲区地址
256, //目标缓冲区长度
exeFullPath);
GetPrivateProfileString("ORACLE", //节名
"uid", //项名
"No Text", //没找到此项时的返回值
uid, //目标缓冲区地址
256, //目标缓冲区长度
exeFullPath); //配置文件的准确路径
GetPrivateProfileString("ORACLE", //节名
"pwd", //项名
"No Text", //没找到此项时的返回值
pwd, //目标缓冲区地址
256, //目标缓冲区长度
exeFullPath); //配置文件的准确路径
}
if(DBType == '2') {
GetPrivateProfileString("SQL SERVER", //节名
"Server", //项名
"No Text", //没找到此项时的返回值
Server, //目标缓冲区地址
256, //目标缓冲区长度
exeFullPath); //配置文件的准确路径
GetPrivateProfileString("SQL SERVER", //节名
"Database", //项名
"No Text", //没找到此项时的返回值
Database, //目标缓冲区地址
256, //目标缓冲区长度
exeFullPath); //配置文件的准确路径
GetPrivateProfileString("SQL SERVER", //节名
"uid", //项名
"No Text", //没找到此项时的返回值
uid, //目标缓冲区地址
256, //目标缓冲区长度
exeFullPath); //配置文件的准确路径
GetPrivateProfileString("SQL SERVER", //节名
"pwd", //项名
"No Text", //没找到此项时的返回值
pwd, //目标缓冲区地址
256, //目标缓冲区长度
exeFullPath); //配置文件的准确路径
}
::CoInitialize(NULL);
INFO info;
try
{
// 创建Connection对象
m_pConnection.CreateInstance("ADODB.Connection");
// 设置连接字符串,必须是BSTR型或者_bstr_t类型
if(DBType == '2') {
char strConnect_sql[256];
::strcpy(strConnect_sql,"Provider=SQLOLEDB;Server=");
::strcat(strConnect_sql,Server);
::strcat(strConnect_sql,";Database=");
::strcat(strConnect_sql,Database);
::strcat(strConnect_sql,";");
m_pConnection->Open(strConnect_sql,(_bstr_t)uid,(_bstr_t)pwd,adModeUnknown);
}
if(DBType == '1') {
char strConnect_orc[256];
::strcpy(strConnect_orc,"Provider=MSDAORA.1;Data Source=");
::strcat(strConnect_orc,DataSource);
::strcat(strConnect_orc,";");
m_pConnection->Open(strConnect_orc,(_bstr_t)uid,(_bstr_t)pwd,adModeUnknown);
}
//若数据库在网络上则Server为形如(192.168.1.5,3340)
if(m_pConnection==NULL)
cerr<<"Lind data ERROR!\n";
// 创建记录集对象
m_pRecordset.CreateInstance(__uuidof(Recordset));
// 取得表中的记录
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),
adOpenDynamic,adLockOptimistic,adCmdText);
}
catch(_com_error e)
{
// 显示错误信息
cerr << "\nERROR:" << (char*)e.Description();
//抛出异常
}
}
void payment()
{
INFO info;
try
{
_variant_t varea,vins,vorgan,vsub,vdrug;
float v11 = 0,v21 = 0,v22 = 0,v23 = 0,v24 = 0,result = 0; //分别对应不同险种的分段编码
float t1 = 0,t2 = 0,t3 = 0 ,t4 = 0;
cout << "0-5000 5000-10000 10000-30000 30000以上 PAYMENT";
cout << "\n----------------------------------------------------------------\n";
cout << "\n请输入您的医药信息和报销金额\n";
cout << "所属地区:";
cin >> info.area;
cout << "\n险种编码:";
cin >> info.insurance;
cout << "\n医疗机构类型:";
cin >> info.organ;
cout << "\n总金额:";
cin >> info.money;
if(info.money < 30000) { //计算分段金额
t4 = 0;
if(info.money < 10000) {
t3 = 0;
if(info.money < 5000) {
t2 = 0;
if(t1 < 0) {
t1 = 0;
}
else
t1 = info.money;
}
else {
t2 = info.money - 5000;
t1 = 5000;
}
}
else {
t3 = info.money - 10000;
t2 = 5000;
t1 = 5000;
}
}
else {
t4 = info.money-30000;
t3 = 20000;
t2 = 5000;
t1 = 5000;
}
while (!m_pRecordset->EndOfFile)
{
varea = m_pRecordset->GetCollect("AREA_CODE");
vins = m_pRecordset->GetCollect("INSURANCE_CODE");
vorgan = m_pRecordset->GetCollect("ORGAN_LEVEL");
vsub = m_pRecordset->GetCollect("SUB_CODE");
vdrug = m_pRecordset->GetCollect("DRUG_PERCENT");
if (varea.vt != VT_NULL && vins.vt != VT_NULL && vorgan.vt != VT_NULL
&& vsub.vt != VT_NULL && vdrug.vt != VT_NULL)
{
cout.setf(ios::left);
if(!strcmp((char*)(_bstr_t)varea,info.area)&&!strcmp((char*)(_bstr_t)vins,info.insurance)
&&!strcmp((char*)(_bstr_t)vorgan,info.organ)) {
if((char*)(_bstr_t)vins,info.insurance[0] == '1') {
v21 = v22 = v23 = v24 = (float)vdrug;
}
if((char*)(_bstr_t)vins,info.insurance[0] == '2') {
if((int)vsub == 1)
v21 = (float)vdrug;
if((int)vsub == 2)
v22 = (float)vdrug;
if((int)vsub == 3)
v23 = (float)vdrug;
if((int)vsub == 4)
v24 = (float)vdrug;
}
}//if(strcmp
cout.unsetf(ios::left);
}//if (varea.vt != VT_NU
m_pRecordset->MoveNext(); ///移到下一条记录
}//while (!m_pRecordset->EndOfFile)
result = t1 * v21 + t2 * v22 + t3 * v23 + t4 *v24;
cout << v21 << " " << v22 << " " << v23 << " " << v24 << " " <<result <<endl;
m_pRecordset->Close(); // 关闭记录集
}
// 捕捉异常
catch(_com_error e)
{
// 显示错误信息
cerr << "\nERROR:" << (char*)e.Description();
//抛出异常
}
if(m_pConnection->State)
m_pConnection->Close();
::CoUninitialize();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -