⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 firstfight.cpp

📁 这是个基于MFC开发的药品打假应用程序
💻 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 + -