图书管理系统的操作员信息管理界面及其功能设计

界面设计如下:

利用ClasasWizard创建关联变量m_name,m_password,m_lever,m_list,在对话框类中创建m_recordset变量,类型为之前连接相应数据库tb_operator的类CUserSet

void CDlgOperator::LoadOperatorInfo() { m_list.DeleteAllItems(); CString strSQL; strSQL.Format("select * from tb_operator"); CUserSet recordset; if(!recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)) { MessageBox("打开数据库失败!","数据库错误",MB_OK); return ; } int i = 0; while(!recordset.IsEOF()) { m_list.InsertItem(i,recordset.m_name); m_list.SetItemText(i,1,recordset.m_password); // m_list.InsertColumn(i,); i++; recordset.MoveNext(); } recordset.Close(); m_list.SetRedraw(TRUE); //UpdateData(FALSE); }

BOOL CDlgOperator::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here m_list.InsertColumn(0,"操作员名称"); m_list.InsertColumn(1,"操作员密码"); m_list.InsertColumn(2,"操作员级别"); m_list.SetColumnWidth(0,250); m_list.SetColumnWidth(1,200); m_list.SetColumnWidth(2,180); m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES); LoadOperatorInfo(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE }

以上函数可以进行对话框的初始化

1添加事件的响应函数如下:

void CDlgOperator::OnBtnadd() { // TODO: Add your control notification handler code here UpdateData(); if (m_name.IsEmpty()) { MessageBox("操作员名称不能为空!"); return ; } else if (m_password.IsEmpty()) { MessageBox("操作员密码不能为空!"); return ; } else if (m_lever == 0) { MessageBox("操作员级别不能为0!"); return ; } CString strSQL; strSQL.Format("select * from tb_operator where name =%s",m_name); //strSQL.Format("insert into tb_operator values(%s,%s,%d)",m_name,m_password,m_lever); if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)) { MessageBox("打开数据库失败!","数据库错误",MB_OK); return ; } if(m_recordset.GetRecordCount()>0) { MessageBox("此用户名被人使用,请重新输入!"); return ; } else{ m_recordset.AddNew(); m_recordset.m_name = m_name; m_recordset.m_password = m_password; m_recordset.Update(); m_recordset.Close(); m_list.InsertItem(0,m_name); m_list.SetItemText(0,1,m_password); //m_list.SetRedraw(); UpdateData(FALSE); } }

2删除事件的响应函数:

void CDlgOperator::OnBtndelete() { // TODO: Add your control notification handler code here int i = m_list.GetSelectionMark(); if(0>i) { AfxMessageBox("请选择一条记录进行删除!"); return; } CString strSQL; strSQL.Format("select * from tb_operator where name = %s ",m_list.GetItemText(i,0)); if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)) { AfxMessageBox("打开数据库失败!"); return ; } m_recordset.Delete(); m_recordset.Close(); m_list.DeleteItem(i); UpdateData(FALSE); }

3修改事件的响应函数:

void CDlgOperator::OnBtnupdate() { // TODO: Add your control notification handler code here int i= m_list.GetSelectionMark(); if(0>i) { AfxMessageBox("请选择一条记录进行更新!"); return; } CUserUpdateDlg dlg; //自己写的一个修改的对话框 dlg.m_name = m_list.GetItemText(i,0); dlg.m_password = m_list.GetItemText(i,1); if(dlg.DoModal()==IDOK) { //打开记录集 CString strSQL; strSQL.Format("select * from tb_operator where name=%s",dlg.m_name); if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)) { MessageBox("打开数据库失败!","数据库错误",MB_OK); return ; } //判断记录是否不存在 if(m_recordset.GetRecordCount()==0) { m_recordset.Close(); MessageBox("该记录不存在!"); return; } m_recordset.Edit(); m_recordset.m_name = dlg.m_name; m_recordset.m_password = dlg.m_password; m_recordset.Update(); m_recordset.Close(); //更新列表 LoadOperatorInfo(); } }

4修改对话框的设计:

void CUserUpdateDlg::OnOK() { // TODO: Add extra validation here UpdateData(); if(m_password.IsEmpty()) { MessageBox("密码不能为空!"); return; } CDialog::OnOK(); } BOOL CUserUpdateDlg::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here UpdateData(FALSE); GetDlgItem(IDC_EDITNAME)->EnableWindow(FALSE); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return

}

以上就可完成操作员信息管理的功能了!

经验分享 程序员 微信小程序 职场和发展