📄 cdlg.cpp
字号:
#include "stdafx.h"
#include "数据结构课程设计之数组应用2.h"
#include "CDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()
CMy2Dlg::CMy2Dlg(CWnd* pParent /*=NULL*/)
: CDialog(CMy2Dlg::IDD, pParent)
{
m_strEditM = _T("");
m_strEditN = _T("");
///////////初始化///////Begin////////////////////////////////////////////////////////
int i,j;
for(i=0;i<N*M;i++)
m_pEdit[i]=NULL;//初始化CEdit *m_pEdit[N*M]
for(i=0;i<N;i++)
for(j=0;j<M;j++)//初始化二维数
arrayA[i][j]=0;//int arrayA[N][M]; //二维数组
m_EditM=0;
m_EditN=0;
ctrlEditTotal=0;//动态创建CEdit 控件的实际总数
isTranCtrlToValue=false;////判断是否从控件中读出了当前输入的数据
///////////初始化///////End////////////////////////////////////////////////////////
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CMy2Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT_M, m_strEditM);
DDX_Text(pDX, IDC_EDIT_N, m_strEditN);
//本程序特色是实现编辑框CEdit的动态操作--
//---e.g.动态申请N个CEdit并指定相应的控件ID号
//-------对动态申请N个CEdit的控件中的字符串值赋值到相应
//-------的字符串数组中(临时的)然后马上转换为数值整型赋
//-------值到arrayA[N][M]中
//-------实现字符串转换为数值的函数为atoi()
//-------实现数值转换为字符串的函数为itoa()
}
BEGIN_MESSAGE_MAP(CMy2Dlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON_CREATENM, OnButtonCreateHangLieShiNM)
ON_BN_CLICKED(IDC_BUTTON_SUM1, OnButtonSumQiuKaoBianYuanShuHe)
ON_BN_CLICKED(IDC_BUTTON_SUM2, OnButtonSumQiuBuXiangLinYuanShuZhiHe)
ON_BN_CLICKED(IDC_BUTTON_TWOLINESUM, OnButtonTwolinesum)
END_MESSAGE_MAP()
BOOL CMy2Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
return TRUE; // return TRUE unless you set the focus to a control
}
void CMy2Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
void CMy2Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
HCURSOR CMy2Dlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CMy2Dlg::OnButtonCreateHangLieShiNM()
{//动态创建N*M个CEdit控件代表N*M个行列式
int i;
isTranCtrlToValue=false;//判断是否从控件中读出了当前输入的数据
UpdateData(true); //将此文本框对象中的内容更新到变量中,即,将前台输入到界面中的数据保存到后台变量中
m_EditM=atoi(m_strEditM); //将字符串转换为数值型
m_EditN=atoi(m_strEditN);//将字符串转换为数值型
if(m_EditM<=0||m_EditN<=0)
{
MessageBox("N或M不能小于等于0,请重新输入N和M的值!");
return;
}
else
if(m_EditM>N||m_EditN>M)
{
MessageBox("N或M不能大于10,请重新输入N和M的值!","提示");
return;
}
if(ctrlEditTotal!=0)//如果已申请了CEdit控件则删除这些控件
{
for(i=0;i<ctrlEditTotal;i++)
delete m_pEdit[i];
ctrlEditTotal=0;//ctrlEditTotal=0;
this->ShowWindow(SW_SHOW);
// MessageBox("show");//调试时用
}
NewCEditCtrl();//动态申请m_EditN*m_EditM个CEdit控件
}
void CMy2Dlg::NewCEditCtrl()
{//动态申请N*M个CEdit控件并在CMy2Dlg中显示出来
int i,j,k,x1,y1,x2,y2,tempX;
int xWidth=30,yWidth=20;
int xJianGe=5,yJianGe=5;
CRect rect(20,80,20+50,80+20);
x1=20;
y1=80;
y2=y1+yWidth;
for(i=0;i<m_EditN;i++) //动态申请CEdit控件类对象
for(j=0;j<m_EditM;j++)
m_pEdit[ctrlEditTotal++]=new CEdit;//ctrlEditTotal=0;//动态创建CEdit 控件的实际总数
k=0;
for(i=0;i<m_EditN;i++)
{
tempX=x1;
for(j=0;j<m_EditM;j++)
{
x1=x1+xWidth+xJianGe;
x2=x1+xWidth;
rect.SetRect(x1,y1,x2,y2);
m_pEdit[k]->Create(WS_TABSTOP|WS_VISIBLE|ES_AUTOVSCROLL,rect,this,1110*(i+1)+j);//10000*(i+1)+j Specifies the edit control’s ID.
m_pEdit[k]->ShowWindow(SW_SHOW);
k++;
}
y1=y1+yWidth+yJianGe;
y2=y1+yWidth;
x1=tempX;
}
}
void CMy2Dlg::TranCEditToStrToValue()
{//将前台输入到界面中的数据保存到后台变量中---相当于UpdateData(true);
//-------对动态申请N个CEdit的控件中的字符串值赋值到相应
//-------的字符串数组中(临时的)然后马上转换为数值整型赋
//-------值到arrayA[N][M]中
char strTemp[255];
int i,j;
if(ctrlEditTotal==0)//ctrlEditTotal=0;//动态创建CEdit 控件的实际总数
{
MessageBox("没有创建N*M行列式(二维数组)!","提示");
return;
}
for(i=0;i<m_EditN;i++)
for(j=0;j<m_EditM;j++)
{
(CEdit *)GetDlgItem(1110*(i+1)+j)->GetWindowText(strTemp,255);
arrayA[i][j]=atoi(strTemp); //将字符串转换为数值型
}
return;
}
void CMy2Dlg::OnButtonSumQiuKaoBianYuanShuHe()
{//计算出arrayA[N][M]靠边元素之和;
int s,i,j;
char strTemp[255];
if(isTranCtrlToValue==false)
{
TranCEditToStrToValue();//将前台输入到界面中的数据保存到后台变量arrayA[][]中---相当于UpdateData(true);
isTranCtrlToValue=true;//判断是否从控件中读出了当前输入的数据
}
s=0;
if(m_EditN==1||m_EditM==1)
{//下面是1行或1列的计算
if (m_EditN==1)
{
for(j=0;j<m_EditM;j++)
s+=arrayA[0][j];
itoa(s,strTemp,10);
MessageBox(strTemp,"此二维数组靠边元素之和的结果");
return;
}
else
{
for(i=0;i<m_EditN;i++)
s+=arrayA[i][0];
itoa(s,strTemp,10);
MessageBox(strTemp,"此二维数组靠边元素之和的结果");
return;
}
}
//下面是2行2列以上的计算...
for (i=0;i<m_EditN;i++)//计算第一行
s+=arrayA[i][0];
for (i=0;i<m_EditN;i++)//计算第最后一行
s+=arrayA[i][m_EditM-1];
for (j=1;j<m_EditM-1;j++)//计算第一列(除开第一个和最后一个)
s+=arrayA[0][j];
for (j=1;j<m_EditM-1;j++)//计算最后一列(除开第一个和最后一个)
s+=arrayA[m_EditN-1][j];
itoa(s,strTemp,10);
MessageBox(strTemp,"此二维数组靠边元素之和的结果");
}
void CMy2Dlg::OnButtonSumQiuBuXiangLinYuanShuZhiHe()
{//求出A[0][0]开始的互不相邻的各个元素之和;
int s,i,j,k;
int arrTemp[N*M];
char strTemp[255];
if(isTranCtrlToValue==false)
{
TranCEditToStrToValue();//将前台输入到界面中的数据保存到后台变量arrayA[][]中---相当于UpdateData(true);
isTranCtrlToValue=true;//判断是否从控件中读出了当前输入的数据
}
s=0;
k=0;
for(i=0;i<m_EditN;i++)
for(j=0;j<m_EditM;j++)
arrTemp[k++]=arrayA[i][j];
for(i=0;i<k;i+=2)
s+=arrTemp[i];
itoa(s,strTemp,10);
MessageBox(strTemp,"此二维数组从A[0][0]开始的互不相邻的各个元素之和");
}
void CMy2Dlg::OnButtonTwolinesum()
{
int i,j;
int s3;
char strTemp[255];
if(isTranCtrlToValue==false)
{
TranCEditToStrToValue();//将前台输入到界面中的数据保存到后台变量arrayA[][]中---相当于UpdateData(true);
isTranCtrlToValue=true;//判断是否从控件中读出了当前输入的数据
}
if (m_EditN!=m_EditM)
MessageBox ("N!=M","提示");
else
{
s3=0;
for (i=0;i<m_EditN;i++) //求反对角线上的元素和
s3+=arrayA[i][m_EditN-1-i];
itoa(s3,strTemp,10);
MessageBox(strTemp,"求反对角线上的元素和");
s3=0;
for(j=0;j<m_EditN;j++) //求正对角线上的元素和
s3+=arrayA[j][j];
itoa(s3,strTemp,10);
MessageBox(strTemp,"求正对角线上的元素和");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -