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

📄 listdlg.cpp

📁 这是一个统计软件
💻 CPP
字号:
// LISTdlg.cpp : implementation file
//

#include "stdafx.h"
#include "telcal.h"
#include "LISTdlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
		// No message handlers
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

// App command to run the dialog
/*
void CTelcalApp::OnAppAbout()
{
//	CAboutDlg aboutDlg;
//	aboutDlg.DoModal();
	CLISTdlg aboutDlg;
	aboutDlg.DoModal();
}*/

/////////////////////////////////////////////////////////////////////////////
// CLISTdlg dialog


CLISTdlg::CLISTdlg(CWnd* pParent /*=NULL*/)
	: CDialog(CLISTdlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CLISTdlg)
	m_ListSum = _T("");
	//}}AFX_DATA_INIT
}


void CLISTdlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CLISTdlg)
	DDX_Control(pDX, IDC_LIST_TAB, m_list);
	DDX_Text(pDX, IDC_LIST_SUM, m_ListSum);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CLISTdlg, CDialog)
	//{{AFX_MSG_MAP(CLISTdlg)
	ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
	ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CLISTdlg message handlers

BOOL CLISTdlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	CRect cr;
	int ret,i,nCount;
	
	m_list.GetClientRect(cr);
	DWORD width = cr.Width() - GetSystemMetrics(SM_CXVSCROLL);

	m_list.DeleteAllItems();
	nCount = m_list.GetHeaderCtrl()->GetItemCount();;
	for (i=0; i<nCount; i++)
	{
	   m_list.DeleteColumn(0);
	}

	if(m_list_type==1)
	{
		m_list.InsertColumn(0,"对方号码",LVCFMT_LEFT,width * 48 / 200);
		m_list.InsertColumn(1,"起始时间",LVCFMT_CENTER,width * 58 / 200);
		m_list.InsertColumn(2,"时长",LVCFMT_CENTER,width * 20 / 200);
		m_list.InsertColumn(3,"区号",LVCFMT_CENTER,width * 16 / 200);
		m_list.InsertColumn(4,"包时",LVCFMT_CENTER,width * 20 / 200);
		m_list.InsertColumn(5,"收费",LVCFMT_CENTER,width * 20 / 200);
		m_list.InsertColumn(6,"类型",LVCFMT_LEFT, width * 16 / 200);
		ret = GetTELList();
	}
	else if(m_list_type==2)
	{
		m_list.InsertColumn(0,"对方号码",LVCFMT_LEFT,width * 36 / 200);
		m_list.InsertColumn(1,"起始时间",LVCFMT_CENTER,width * 58 / 200);
		m_list.InsertColumn(2,"业务",LVCFMT_CENTER,width * 32 / 200);
		m_list.InsertColumn(3,"基本费用",LVCFMT_CENTER,width * 24/ 200);
		m_list.InsertColumn(4,"信息费",LVCFMT_CENTER,width * 20 / 200);
		m_list.InsertColumn(5,"收费",LVCFMT_CENTER,width * 20 / 200);
		m_list.InsertColumn(6,"类型",LVCFMT_LEFT, width * 16 / 200);
		ret = GetSMSList();
	}

	m_list.SetItemState(0, LVIS_SELECTED|LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED );
//	CenterWindow();
//	ShowWindow(SW_SHOW);
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

WORD CLISTdlg::GetTELList()
{
	LVITEM myItem;
	memset(&myItem,0,sizeof(LVITEM));
	myItem.mask = LVIF_TEXT;
	
	char str[256];
	WORD i, k;
	WORD sum_out=0, sum_in=0;

	for(i=0;i<my_TEL_MAX;i++)
	{
		myItem.iItem = i;
		myItem.iSubItem = 0;
		myItem.pszText = my_TEL[i].number;
		m_list.InsertItem(&myItem);

		myItem.iSubItem = 1;
		myItem.pszText = my_TEL[i].time;
		m_list.SetItem(&myItem);

		myItem.iSubItem = 2;
		k = my_TEL[i].timer/60;
		if((my_TEL[i].timer%60))k++;
		sprintf(str,"%d", k);
		myItem.pszText = str;
		m_list.SetItem(&myItem);

		myItem.iSubItem = 3;
		sprintf(str,"%d", my_TEL[i].place);
		myItem.pszText = str;
		m_list.SetItem(&myItem);

		myItem.iSubItem = 4;
		if(my_TEL[i].place!=MYPHONE_PLACE)
		{	//	漫游
			sprintf(str,"[%d]",k);
		}
		else if(my_TEL[i].direction==1)
		{	//	全部呼出
			if(my_TEL[i].cost_far>0 && strncmp(my_TEL[i].number,MYTEL_IP,5))
			{	//	基本长途方式,不算基础费
				sprintf(str,"{%d}",k);
			}
			else
			{
				sprintf(str,"%d",k);
				sum_out+=k;
			}
		}
		else
		{	//	本地接入
			sprintf(str,"(%d)",k);
			sum_in+=k;
		}
		myItem.pszText = str;
		m_list.SetItem(&myItem);

		myItem.iSubItem = 5;
		sprintf(str,"%6.2f", my_TEL[i].cost_far);
		myItem.pszText = str;
		m_list.SetItem(&myItem);

		myItem.iSubItem = 6;
		if(my_TEL[i].direction==1)
			sprintf(str,"出");
		else
			sprintf(str,"入");
		myItem.pszText = str;
		m_list.SetItem(&myItem);
	}

	sprintf(str,"包月呼出:%d,本地呼入:%d", sum_out, sum_in);
	m_ListSum = str;
	UpdateData(FALSE);

	return i;
}

WORD CLISTdlg::GetSMSList()
{
	LVITEM myItem;
	memset(&myItem,0,sizeof(LVITEM));
	myItem.mask = LVIF_TEXT;
	
	char str[256];
	WORD i;
	WORD sum_out=0, sum_in=0;
	float sum_cost=0;

	for(i=0;i<my_TEL_MAX;i++)
	{
		myItem.iItem = i;
		myItem.iSubItem = 0;
		myItem.pszText = my_TEL[i].number;
		m_list.InsertItem(&myItem);

		myItem.iSubItem = 1;
		myItem.pszText = my_TEL[i].time;
		m_list.SetItem(&myItem);

		myItem.iSubItem = 2;
		myItem.pszText = my_TEL[i].typesms;
		m_list.SetItem(&myItem);

		myItem.iSubItem = 3;
		sprintf(str,"%4.2f", my_TEL[i].cost_basic);
		myItem.pszText = str;
		m_list.SetItem(&myItem);

		myItem.iSubItem = 4;
		sprintf(str,"%d",my_TEL[i].cost_far);
		myItem.pszText = str;
		m_list.SetItem(&myItem);

		myItem.iSubItem = 5;
		sprintf(str,"%6.2f", my_TEL[i].cost);
		myItem.pszText = str;
		m_list.SetItem(&myItem);

		myItem.iSubItem = 6;
		if(my_TEL[i].direction==1)
		{
			sprintf(str,"出");
			sum_out++;
		}
		else
		{
			sprintf(str,"入");
			sum_in++;
		}
		myItem.pszText = str;
		m_list.SetItem(&myItem);

		sum_cost += my_TEL[i].cost;
	}

	sprintf(str,"发出:%d,接收:%d,总费用:%5.2f元", sum_out, sum_in, sum_cost);
	m_ListSum = str;
	UpdateData(FALSE);

	return i;
}


void CLISTdlg::OnAppAbout() 
{
	// TODO: Add your command handler code here
	int h;
	h =0;
	CAboutDlg aboutDlg;
	aboutDlg.DoModal();
}

void CLISTdlg::OnFileOpen() 
{
	// TODO: Add your command handler code here
	CString strName;
//	char szFilter[] = "话费文件(*.txt)|*.txt|短信文件(*.sms)|*.sms|全部文件(*.*)|*.*||";
	char szFilter[] = "全部文件(*.*)|*.*|话费文件(*.txt)|*.txt|短信文件(*.sms)|*.sms||";

	CFileDialog dlgOpenFile (TRUE,".*||.txt||.sms||", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter);

	dlgOpenFile.m_ofn.lpstrInitialDir = m_FileDirectory;
	if (IDOK != dlgOpenFile.DoModal ())
	{	//	取消操作
		return;
	}

	strName = dlgOpenFile.GetPathName ();
		
	CString strFileName = dlgOpenFile.GetFileName ();
	m_FileDirectory = strName.Left (strName.GetLength () - strFileName.GetLength ());

	FILE *fp;
	CHAR buf[512], *p, *s, *s1;
	WORD len,tel_num;
	WORD type;	//	1:实时话费;0:其他话费;11:短信

	tel_num = 0; type = 0;	
	m_list_type = 0;
	fp = fopen (strName, "r");
	
	while(!feof(fp) && tel_num<MAX_TEL)
	{
		try{
			p = fgets(buf, 512, fp);
			if(feof(fp))break;
			len = strlen(p);
			if(*p<0)continue;			//	汉字提示,过滤

			s = strstr(p, "秒");
			if(s>p)
			{	//*********	电话 *************
				if(m_list_type==0)m_list_type = 1;
				type=0;
				s = strstr(p, " "); *s = 0;
				strcpy(my_TEL[tel_num].number, p); 
				p = s+1; 

				s = strstr(p, " ");
				if(s>p && s-p<=5)
				{	//	实时话费
					type = 1;
					*s = 0;
					my_TEL[tel_num].place = atoi(p);
					p = s+1; 
					s = strstr(p, " ");
				}
				s = strstr(s+1, " "); *s = 0;
				strcpy(my_TEL[tel_num].time, p);
				p = s+1; 

				s = strstr(p, " "); *s = 0;
				my_TEL[tel_num].timer = 0;
				s1 = strstr(p, "时");
				if(s1>p)
				{
					*s1 = 0;
					my_TEL[tel_num].timer += 3600L*atoi(p);
					p = s1+2;
				}
				s1 = strstr(p, "分");
				if(s1>p)
				{
					*s1 = 0;
					my_TEL[tel_num].timer += 60*atoi(p);
					p = s1+2;
				}
				s1 = strstr(p, "秒");
				if(s1>p)
				{
					*s1 = 0;
					my_TEL[tel_num].timer += atoi(p);
					p = s1+2;
				}
				p = s+1;

				if(type==0)
				{
					//	通话地区号
					s = strstr(p, " "); *s = 0;
					my_TEL[tel_num].place = atoi(p);
					p = s+1;

					s = strstr(p, " "); *s = 0;
					my_TEL[tel_num].cost_basic = (FLOAT)atof(p);
					p = s+1;
				}
				else
				{
					my_TEL[tel_num].cost_basic = 0;
				}

				s = strstr(p, " "); *s = 0;
				my_TEL[tel_num].cost_far = (FLOAT)atof(p);
				p = s+1;

				s = strstr(p, " "); *s = 0;
				if(!strcmp(p, "主叫"))my_TEL[tel_num].direction = 1;
				else my_TEL[tel_num].direction = 0;
				p = s+1;

				my_TEL[tel_num].cost = my_TEL[tel_num].cost_basic + my_TEL[tel_num].cost_far;

				tel_num++;

			}
			else 
			{	//********	短信  ***********
				if(m_list_type==0)m_list_type = 2;
				//	对方号码
				s = strstr(p, " "); *s = 0;
				strcpy(my_TEL[tel_num].number, p); 
				p = s+1; 

				//	通话日期时间
				s = strstr(p, " ");
				s = strstr(s+1, " "); *s = 0;
				strcpy(my_TEL[tel_num].time, p);
				p = s+1; 
				
				//	短信类别
				s = strstr(p, " "); *s = 0;
				strcpy(my_TEL[tel_num].typesms, p);
				p = s+1;

				//	基本话费
				s = strstr(p, " "); *s = 0;
				my_TEL[tel_num].cost_basic = (FLOAT)atof(p);
				p = s+1;

				//	信息费
				s = strstr(p, " "); *s = 0;
				my_TEL[tel_num].cost_far = (FLOAT)atof(p);
				p = s+1;

				s = strstr(p, " "); *s = 0;
				if(!strcmp(p, "主叫"))my_TEL[tel_num].direction = 1;
				else my_TEL[tel_num].direction = 0;
				p = s+1;

				my_TEL[tel_num].cost = my_TEL[tel_num].cost_basic + my_TEL[tel_num].cost_far;

				tel_num++;
				
			}
			

		}catch(...)
		{
			break;
		}
	}

	fclose(fp);
	//sprintf(buf, "读入%d条记录。", tel_num);
	//MessageBox (buf, "操作结果", MB_OK | MB_ICONINFORMATION);

	my_TEL_MAX = tel_num;

	OnInitDialog();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -