项目简述
不含数据库的链接,数据读写以文件方式读写; 运行程序就会自动加载上次保存的数据; 适合刚入坑MFC的小伙伴; 整个项目的代码我已上传至CSDN我的资源中,需要可自取;
登录页面的制作
页面布局 设置登录界面为初始界面,在App类初始化函数(InitInstance())中添加如下代码
CLogin logDlg;
if ( logDlg. DoModal ( ) == IDCANCEL)
return TRUE;
为账号和密码两个 Edit 控件添加变量分别为:m_UseName、m_Password; 为界面添加初始化虚函数(OnInitDialog()),在函数中初始化两个变量
m_UseName = L"admin" ;
m_Password = L"123456" ;
为登录按钮函数添加代码
UpdateData ( TRUE) ;
if ( m_UseName. IsEmpty ( ) || m_Password. IsEmpty ( ) )
{
MessageBox ( L"账号或密码为空!" , L"温馨提示" , MB_ICONWARNING) ;
return ;
}
else if ( m_UseName == L"admin" && m_Password == L"123456" )
{
EndDialog ( IDOK) ;
}
else
{
MessageBox ( L"账号或密码错误!" , L"温馨提示" , MB_ICONERROR) ;
return ;
}
主界面控件布局
list 控件的视图属性设置为:Report;
添加成员窗口布局
为各个成员控件添加右键添加变量;
virtual BOOL OnInitDialog ( ) ;
CString m_StuName;
int m_StuNumber;
int m_nSex;
CComboBox m_Position;
CComboBox m_Department;
BOOL m_Medium;
BOOL m_Tech;
BOOL m_Sociality;
CString m_Telephone;
CString m_strPosition;
CString m_strDepartment;
void AddStudent:: DoDataExchange ( CDataExchange* pDX)
{
CDialogEx:: DoDataExchange ( pDX) ;
DDX_Text ( pDX, IDC_StuName, m_StuName) ;
DDX_Text ( pDX, IDC_StuNumber, m_StuNumber) ;
DDX_Radio ( pDX, IDC_Radio1, m_nSex) ;
DDX_Control ( pDX, IDC_COMBO1, m_Position) ;
DDX_Control ( pDX, IDC_COMBO2, m_Department) ;
DDX_Check ( pDX, IDC_CHECK2, m_Medium) ;
DDX_Check ( pDX, IDC_CHECK3, m_Tech) ;
DDX_Check ( pDX, IDC_CHECK4, m_Sociality) ;
DDX_Text ( pDX, IDC_StuNumber2, m_Telephone) ;
}
关闭职位与部门控件的自动排序属性,设置 radio 控件的组长属性,这里开启“男”控件的组长属性; 为窗口添加初始化虚函数(OnInitDialog()),并初始化职位与部门控件;
m_Position. AddString ( L"主席团成员" ) ;
m_Position. AddString ( L"新媒体负责人" ) ;
m_Position. AddString ( L"纪检部负责人" ) ;
m_Position. AddString ( L"组织部负责人" ) ;
m_Position. AddString ( L"文体活动负责人" ) ;
m_Position. AddString ( L"一年干事" ) ;
m_Position. AddString ( L"两年干事" ) ;
m_Position. SetCurSel ( 0 ) ;
m_Department. AddString ( L"主席团" ) ;
m_Department. AddString ( L"新媒体" ) ;
m_Department. AddString ( L"纪检部" ) ;
m_Department. AddString ( L"组织部" ) ;
m_Department. AddString ( L"文体活动中心" ) ;
m_Department. SetCurSel ( 0 ) ;
为“添加”按钮增加如下代码
void AddStudent:: OnBnClickedBtnadd ( )
{
UpdateData ( TRUE) ;
if ( m_StuName. IsEmpty ( ) )
{
MessageBox ( L"姓名不能为空!" , L"温馨提示" , MB_ICONERROR) ;
return ;
}
if ( m_StuNumber <= 0 )
{
MessageBox ( L"学号错误" , L"温馨提示" , MB_ICONERROR) ;
return ;
}
CString temp;
m_Position. GetWindowTextW ( temp) ;
m_strPosition = temp;
temp. Empty ( ) ;
m_Department. GetWindowTextW ( temp) ;
m_strDepartment = temp;
EndDialog ( IDOK) ;
}
修改成员按钮代码及页面
修改页面布局和添加按钮布局一样,不同的是修改页面有初始数据
void CStuControlSysDlg:: OnBnClickedRevise ( )
{
ReviseInfo reviseData;
POSITION curSel = this - > m_list. GetFirstSelectedItemPosition ( ) ;
int curSelRevise = m_list. GetNextSelectedItem ( curSel) ;
if ( curSelRevise == - 1 )
{
MessageBox ( L"请选择要修改的列" , L"温馨提示" , MB_OK) ;
return ;
}
CString temp;
reviseData. m_StuName = m_list. GetItemText ( curSelRevise, 0 ) ;
reviseData. m_StuNumber = _wtoi ( m_list. GetItemText ( curSelRevise, 1 ) ) ;
if ( m_list. GetItemText ( curSelRevise, 2 ) == L"男" )
reviseData. m_nSex = 0 ;
else
reviseData. m_nSex = 1 ;
reviseData. m_strPosition = m_list. GetItemText ( curSelRevise, 3 ) ;
reviseData. m_strDepartment = m_list. GetItemText ( curSelRevise, 4 ) ;
reviseData. m_Medium = FALSE;
reviseData. m_Tech = FALSE;
reviseData. m_Sociality = FALSE;
temp = m_list. GetItemText ( curSelRevise, 5 ) ;
if ( temp. Find ( L"新媒体类" ) != - 1 )
reviseData. m_Medium = TRUE;
if ( temp. Find ( L"科技类" ) != - 1 )
reviseData. m_Medium = TRUE;
if ( temp. Find ( L"社交类" ) != - 1 )
reviseData. m_Sociality = TRUE;
reviseData. m_Telephone = m_list. GetItemText ( curSelRevise, 6 ) ;
if ( reviseData. DoModal ( ) == IDCANCEL)
return ;
temp. Empty ( ) ;
m_list. SetItemText ( curSelRevise, 0 , reviseData. m_StuName) ;
temp. Format ( L"%d" , reviseData. m_StuNumber) ;
m_list. SetItemText ( curSelRevise, 1 , temp) ;
if ( reviseData. m_nSex == 0 )
temp = L"男" ;
else
temp = L"女" ;
m_list. SetItemText ( curSelRevise, 2 , temp) ;
m_list. SetItemText ( curSelRevise, 3 , reviseData. m_strPosition) ;
m_list. SetItemText ( curSelRevise, 4 , reviseData. m_strDepartment) ;
temp. Empty ( ) ;
if ( reviseData. m_Medium)
temp = L"新媒体类 & " ;
if ( reviseData. m_Tech)
temp + = L" 科技类 & " ;
if ( reviseData. m_Sociality)
temp + = L"社交类" ;
if ( temp. IsEmpty ( ) )
temp = L"无技能" ;
m_list. SetItemText ( curSelRevise, 5 , temp) ;
m_list. SetItemText ( curSelRevise, 6 , reviseData. m_Telephone) ;
}
主界面布局中删除按钮代码
void CStuControlSysDlg:: OnBnClickedBtndelete ( )
{
POSITION delSel = m_list. GetFirstSelectedItemPosition ( ) ;
int nDel = m_list. GetNextSelectedItem ( delSel) ;
if ( nDel == - 1 )
{
MessageBox ( L"请选择要删除的行" , L"温馨提示" , MB_ICONWARNING) ;
return ;
}
m_list. DeleteItem ( nDel) ;
}
读取数据的代码
void CStuControlSysDlg:: autoReadFileData ( )
{
CFile readFile;
Student stu;
readFile. Open ( L"StudentData.bat" , CFile:: modeRead) ;
int nCount = 0 ;
while ( readFile. Read ( & stu, sizeof ( stu) ) )
{
CString temp;
m_list. InsertItem ( nCount, stu. m_StuName) ;
temp. Format ( L"%d" , stu. m_StuNumber) ;
m_list. SetItemText ( nCount, 1 , temp) ;
m_list. SetItemText ( nCount, 2 , stu. m_nSex) ;
m_list. SetItemText ( nCount, 3 , stu. m_strPosition) ;
m_list. SetItemText ( nCount, 4 , stu. m_strDepartment) ;
m_list. SetItemText ( nCount, 5 , stu. m_matters) ;
m_list. SetItemText ( nCount, 6 , stu. m_Telephone) ;
nCount++ ;
}
readFile. Close ( ) ;
}
导入文件按钮函数
void CStuControlSysDlg:: OnBnClickedBtnselect ( )
{
CFileDialog fileDlg ( TRUE, L"dat" , L"StudentData" ,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
L"文本文件(*.txt)|数据文件(*.bat)|所有文件(*.*)|*.*||" ) ;
if ( IDCANCEL == fileDlg. DoModal ( ) )
{
return ;
}
CString strFilePath = fileDlg. GetPathName ( ) ;
CFile readFile;
Student stu;
readFile. Open ( strFilePath, CFile:: modeRead) ;
int nCount = 0 ;
while ( readFile. Read ( & stu, sizeof ( stu) ) )
{
CString temp;
m_list. InsertItem ( nCount, stu. m_StuName) ;
temp. Format ( L"%d" , stu. m_StuNumber) ;
m_list. SetItemText ( nCount, 1 , temp) ;
m_list. SetItemText ( nCount, 2 , stu. m_nSex) ;
m_list. SetItemText ( nCount, 3 , stu. m_strPosition) ;
m_list. SetItemText ( nCount, 4 , stu. m_strDepartment) ;
m_list. SetItemText ( nCount, 5 , stu. m_matters) ;
m_list. SetItemText ( nCount, 6 , stu. m_Telephone) ;
nCount++ ;
}
readFile. Close ( ) ;
}
运行截图
结语:基本上展示了项目的所有主要代码,需要源代码的小伙伴可在我上传的资源文件中获取。