📄 listdlg.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 + -