📄 firstfight.cpp
字号:
// FirstFight.cpp : implementation file
//
#include "stdafx.h"
#include "MyFight.h"
#include "FirstFight.h"
#include "MyFightDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// FirstFight dialog
FirstFight::FirstFight(CWnd* pParent /*=NULL*/)
: CDialog(FirstFight::IDD, pParent)
{
//{{AFX_DATA_INIT(FirstFight)
m_bChoice = -1;
//}}AFX_DATA_INIT
}
void FirstFight::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(FirstFight)
DDX_Control(pDX, IDC_LIST1, m_FirstList);
DDX_Radio(pDX, IDC_RADIO1, m_bChoice);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(FirstFight, CDialog)
//{{AFX_MSG_MAP(FirstFight)
ON_BN_CLICKED(IDC_CANCLE, OnCancle)
ON_BN_CLICKED(IDC_WATCH, OnWatch)
ON_BN_CLICKED(IDC_SAVE, OnSave)
ON_BN_CLICKED(IDC_OK, OnOk)
ON_NOTIFY(NM_DBLCLK, IDC_LIST1, OnDblclkList1)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// FirstFight message handlers
BOOL FirstFight::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
CHAR path[MAX_PATH];
GetCurrentDirectory(MAX_PATH,path);
m_csCurrentPath=path;
m_bChoice=0;
this->UpdateData(0);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void FirstFight::OnCancle()
{
// TODO: Add your control notification handler code here
CDialog::OnCancel();
}
void FirstFight::OnSave()
{
// TODO: Add your control notification handler code here
CString cspath;
TCHAR szFilters[]=_T("Text And csv Files (*.txt,*.csv)|*.txt,*.csv|All Files (*.*)|*.*||");
CFileDialog file1(false,"d:\\",".txt",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
szFilters,this);
if(IDOK==file1.DoModal())
{
cspath=file1.m_ofn.lpstrFile;
}
CStdioFile file(cspath,CFile::modeCreate | CFile::modeWrite | CFile::typeText);
for(int i=0;i<m_FirstList.GetItemCount();i++)
{
CString str="";
for(int j=0;j<m_FirstList.GetCountPerPage();j++)
{
str+=m_FirstList.GetItemText(i,j);
str+="\t";
}
str+="\n";
file.WriteString(str);
}
}
void FirstFight::OnWatch()
{
// TODO: Add your control notification handler code here
}
void FirstFight::OnOk()
{
// TODO: Add your control notification handler code here
this->SetWindowText("打假中,请稍后......");
for(int i=0;i<10;i++)
m_FirstList.DeleteColumn(0);
m_FirstList.DeleteAllItems();
SetCursor(LoadCursor(NULL, IDC_WAIT));
CString str;
str=m_csAdmin;
if(m_csStandFile==""||m_csAdmin=="")
{
MessageBox("请输入打假数据");
return ;
}
CompareFile(str);
this->SetWindowText("打假完毕");
if(m_FirstList.GetItemCount==0)
MessageBox("没找到假劣药品");
}
void FirstFight::CompareFile(CString csPath)
{
CString path;
path=m_csStandFile; //此为打假标准文件;
// MessageBox(path);
CStdioFile file1; //打假数据;
file1.Open(csPath,CFile::modeRead );
int n=1;
CString str1;
while(file1.ReadString(str1))
{
str1.TrimLeft();
str1.TrimRight();
if(str1.IsEmpty())
{
// MessageBox("str1==""");
continue;
}
CStringArray ar1;
while(!str1.IsEmpty()) //将每一行转换成一个字符窜数组保存;
{
int pos=str1.Find((char)44);
if(pos==-1)break;
ar1.Add(str1.Left(pos));
str1=str1.Right(str1.GetLength()-pos-1);
}
ar1.Add(str1);
if(n==1) //第一行为标题;不比较;
{
for(int d=0;d<ar1.GetSize();d++) //将标题行插入到列表中;
{
m_FirstList.InsertColumn(d,ar1[d],LVCFMT_LEFT,100);
}
}
CompareRow(ar1,path);
n++;
str1.Empty();
}
}
void FirstFight::CompareRow(CStringArray & ar1, CString csPath)
{
CStdioFile file2; //打假标准数据;
file2.Open(csPath,CFile::modeRead );
CString sname1=ar1[0];
CString sfac1=ar1[1];
CString snum1=ar1[2];
CString smode1=ar1[3];
BOOL bname=0;
BOOL bfac=0;
BOOL bnum=0;
BOOL bmode=0;
BOOL bb=0; //用来区分呢是粗打,还是细打;
int m=1;
CString str2;
while(file2.ReadString(str2))
{
str2.TrimLeft();
str2.TrimRight();
if(str2.IsEmpty())
{
// MessageBox("str2==""");
continue;
}
CString sname2;
CString sfac2;
CString snum2;
CString smode2;
CStringArray ar2;
while(!str2.IsEmpty()) //将每一行转换成一个字符窜数组保存;
{
int pos=str2.Find((char)44);
if(pos==-1)break;
ar2.Add(str2.Left(pos));
str2=str2.Right(str2.GetLength()-pos-1);
}
ar2.Add(str2);
sname2=ar2[0];
sfac2=ar2[1];
snum2=ar2[2];
smode2=ar2[3];
if(m==1)
{}
else //比较函数;
{
bname=CompareName(sname1,sname2);
bfac=CompareFac(sfac1,sfac2);
bnum=CompareNum(snum1,snum2);
bmode=CompareMode(smode1,smode2);
this->UpdateData(1);
if(m_bChoice==0) { // MessageBox("=0");// ||bmode ||bmode //此为粗打;
bb=(bname||bfac);
}
else {//MessageBox("=1"); //细打;
bb=(bnum&&(bname||bfac));
}
if(bb)
{
int nItem;
for(int d=0;d<ar1.GetSize();d++) //将假劣药品显示在列表中;
{
if(d==0)
nItem=m_FirstList.InsertItem(m,ar1[d]);
else
m_FirstList.SetItemText(nItem,d,ar1[d]);
m_FirstList.SetExtendedStyle(LVS_EX_FULLROWSELECT);
}
}
this->UpdateData(0);
}
m++;
str2.Empty();
}
}
BOOL FirstFight::CompareName(CString s1, CString s2)
{
int pos=0;
int count=0;
for(int i=0;i<s1.GetLength();i++) //比较品名,ar1[0]为品名;
{
TCHAR aa=s1.GetAt(i);
CString ff=aa;
i++;
ff=s1.GetAt(i);
pos=s2.Find(ff,pos);
if(pos!=-1) count++;
if(count==2) //品名要求前两个汉字相同;
{
return 1;
break;
}
}
return 0;
}
BOOL FirstFight::CompareFac(CString s1, CString s2)
{
int pos=0;
int count=0;
for( int i=0;i<s1.GetLength();i++) //比较厂家,ar1[1]为厂家;
{
TCHAR aa=s1.GetAt(i);
CString ff=aa;
i++;
ff+=s1.GetAt(i);
pos=s2.Find(ff,pos);
if(pos!=-1) count++;
if(count==6) //厂家要求前六个汉字相同;
{
return 1;
break;
}
}
return 0;
}
BOOL FirstFight::CompareNum(CString s1, CString s2)
{
if(s1==s2) //比较生产批号;
return 1;
else
return 0;
}
BOOL FirstFight::CompareMode(CString s1, CString s2)
{
CString cs=s1.SpanIncluding("0123456789");
CString ss=s2.SpanIncluding("0123456789");
if(cs==ss)
return 1;
else
return 0;
}
void FirstFight::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
CString str;
CString cs;
int nMark=m_FirstList.GetNextItem(-1,LVNI_SELECTED);
str=m_FirstList.GetItemText(nMark,0);
int i=1;
while(str!="")
{
cs+=str;
cs+="\t";
str=m_FirstList.GetItemText(nMark,i);
i++;
}
cs+="\n";
MessageBox(cs);
*pResult = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -