- 浏览: 66649 次
- 性别:
- 来自: 河北邯郸
文章分类
最新评论
-
ZQ1583340:
徐老师好人,祝你一生幸福。
不为钱而培训的光辉岁月20120516 -
hufeng825:
时间好快啊
不为钱而培训的光辉岁月20120516 -
hdcactus:
谢谢徐老师
不为钱而培训的光辉岁月20120516 -
xuejianshan:
支持~~~
不为钱而培训的光辉岁月20120516 -
gold105:
我的学生们的成功是我人生的意义所在,我很欣慰这一生能有这么多该 ...
不为钱而培训的光辉岁月20120516
/*要求:将以前的都迁移到此框架中,要求对ACCESS数据库做"增/删/改/查",以后我将陆续检查此项目的进度情况,将据此给出平时的成绩(主要由你平时问我的问题的次数与水平,更重要的是我的提问决定);而且期末考试的很多题(包括主要大题)出自本项目,望大家一定要亲自写和弄懂,考试中会有一些变化,不是原题,所以要在理解的基础上去开发,我可以保证只要你亲自按要求去努力开发,考试一定没有大问题*/
- Graduate[VC05].rar (72.8 KB)
- 描述: /*2007-12-12版*/
- 下载次数: 27
评论
13 楼
crazybigfish
2007-12-20
我写的关于CheckBox提交的代码:
CString hb = m_ListCtrl.GetItemText (nItem,5);
UINT nCheckIDs[4]={IDC_CHECK1,IDC_CHECK4,IDC_CHECK3,IDC_CHECK2,};
CButton * pBtn[4];
for(int i=0;i<4;i++){
pBtn[i]=(CButton*)GetDlgItem(nCheckIDs[i]);//获得4个check控件的指针
}
for(int i=0;i<4;i++){
int x = hb.Find(L",");
CString each = hb.Left(x);
if( each ==L"VC++")pBtn[0]->SetCheck(1);
if( each ==L"VB")pBtn[1]->SetCheck(1);
if( each ==L"JAVA")pBtn[2]->SetCheck(1);
if( each ==L"数据库")pBtn[3]->SetCheck(1);
hb = hb.Mid(x+1);
其中我想知道的是:如何定义字符串数组?让其每次接收hb.Find(L",")的值,代替each。这样会简化我的这段代码。
请老师指教
CString hb = m_ListCtrl.GetItemText (nItem,5);
UINT nCheckIDs[4]={IDC_CHECK1,IDC_CHECK4,IDC_CHECK3,IDC_CHECK2,};
CButton * pBtn[4];
for(int i=0;i<4;i++){
pBtn[i]=(CButton*)GetDlgItem(nCheckIDs[i]);//获得4个check控件的指针
}
for(int i=0;i<4;i++){
int x = hb.Find(L",");
CString each = hb.Left(x);
if( each ==L"VC++")pBtn[0]->SetCheck(1);
if( each ==L"VB")pBtn[1]->SetCheck(1);
if( each ==L"JAVA")pBtn[2]->SetCheck(1);
if( each ==L"数据库")pBtn[3]->SetCheck(1);
hb = hb.Mid(x+1);
其中我想知道的是:如何定义字符串数组?让其每次接收hb.Find(L",")的值,代替each。这样会简化我的这段代码。
请老师指教
12 楼
gold105wj
2007-12-18
都是UpdateData(0)惹得祸。。。
不过又有新问题了:
CString::Find
int Find( TCHAR ch ) const;
int Find( LPCTSTR lpszSub ) const;
int Find( TCHAR ch, int nStart ) const;
int Find( LPCTSTR lpszSub, int nStart ) const;
返回值 不匹配的话返回 -1; 索引以0 开始
nStar 代表以索引值nStart 的字符开始搜索 ,
即为包含以索引nStart字符后的字符串
例子
CString s( "abcdef" );
ASSERT( s.Find( 'c' ) == 2 );
ASSERT( s.Find( "de" ) == 3 );
Cstring str(“The stars are aligned”);
Ing n = str.Find('e',5);
ASSERT(n == 12)
老师讲讲这是什么意思吧,Find函数到底返回值是什么啊?
不过又有新问题了:
CString::Find
int Find( TCHAR ch ) const;
int Find( LPCTSTR lpszSub ) const;
int Find( TCHAR ch, int nStart ) const;
int Find( LPCTSTR lpszSub, int nStart ) const;
返回值 不匹配的话返回 -1; 索引以0 开始
nStar 代表以索引值nStart 的字符开始搜索 ,
即为包含以索引nStart字符后的字符串
例子
CString s( "abcdef" );
ASSERT( s.Find( 'c' ) == 2 );
ASSERT( s.Find( "de" ) == 3 );
Cstring str(“The stars are aligned”);
Ing n = str.Find('e',5);
ASSERT(n == 12)
老师讲讲这是什么意思吧,Find函数到底返回值是什么啊?
11 楼
gold105
2007-12-17
正规应该可以的,上机我当面调吧
10 楼
gold105wj
2007-12-14
我RADIO BUTTON 的提交已经写好了:
if(m_ListCtrl.GetItemText (nItem,4)==L"男")CheckRadioButton(IDC_RADIO1,IDC_RADIO2,IDC_RADIO1);
if(m_ListCtrl.GetItemText (nItem,4)==L"女")CheckRadioButton(IDC_RADIO1,IDC_RADIO2,IDC_RADIO2);
但是CHECK BOX 的有点问题:
UINT nCheckIDs[4]={IDC_CHECK1,IDC_CHECK4,IDC_CHECK3,IDC_CHECK2,};
CButton * pBtn[4];
for(int i=0;i<4;i++){
pBtn[i]=(CButton*)GetDlgItem(nCheckIDs[i]); //获得4个check控件的指针
}
if(m_ListCtrl.GetItemText (nItem,5)==L"VC++") pBtn[0]->SetCheck(1);……
我想用书上的方法,但是这个方法写在UnInitialUpdate里就可以,写在OnNMDblclkList1中就不行,这是怎么回事啊?请帮忙!
if(m_ListCtrl.GetItemText (nItem,4)==L"男")CheckRadioButton(IDC_RADIO1,IDC_RADIO2,IDC_RADIO1);
if(m_ListCtrl.GetItemText (nItem,4)==L"女")CheckRadioButton(IDC_RADIO1,IDC_RADIO2,IDC_RADIO2);
但是CHECK BOX 的有点问题:
UINT nCheckIDs[4]={IDC_CHECK1,IDC_CHECK4,IDC_CHECK3,IDC_CHECK2,};
CButton * pBtn[4];
for(int i=0;i<4;i++){
pBtn[i]=(CButton*)GetDlgItem(nCheckIDs[i]); //获得4个check控件的指针
}
if(m_ListCtrl.GetItemText (nItem,5)==L"VC++") pBtn[0]->SetCheck(1);……
我想用书上的方法,但是这个方法写在UnInitialUpdate里就可以,写在OnNMDblclkList1中就不行,这是怎么回事啊?请帮忙!
9 楼
gold105wj
2007-12-14
明白了,我原来觉得那个绑定没用就给注释了。。真是晕啊
8 楼
gold105
2007-12-14
你确认望ListCtrl中写数据时m_ListCtrl.SetItemData(...)了吗?参见我的代码,应该在往ListCtrl中写每一个学生记录时将其ID用SetItemData方法绑定到该行上
7 楼
gold105wj
2007-12-14
第二个问题解决了,可是第一个还是不行。我用的代码如下:
void CStudentFV::OnNMDblclkList1(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
POSITION pos = m_ListCtrl.GetFirstSelectedItemPosition();
int nItem = m_ListCtrl.GetNextSelectedItem(pos);
if(nItem < 0 )return;//列表框中无数据选中(包括无数据)时nItem为-1
m_iStudentId = m_ListCtrl.GetItemData(nItem); m_search2=m_iStudentId;//这里用了个EditControl控件检测m_iStudentId是否得到了准确的32位值。结果显示没有
m_stuno = m_ListCtrl.GetItemText (nItem,0);
m_name = m_ListCtrl.GetItemText (nItem,1);
m_password = m_ListCtrl.GetItemText (nItem,2);
m_region = m_ListCtrl.GetItemText (nItem,3);
//m_sex = m_ListCtrl1.GetItemText (nItem,4)=="男"?true:false;
//m_hobby = m_ListCtrl.GetItemText (nItem,5);
m_introduce = m_ListCtrl.GetItemText (nItem,6);
UpdateData(false);
*pResult = 0;
}
void CStudentFV::OnNMDblclkList1(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
POSITION pos = m_ListCtrl.GetFirstSelectedItemPosition();
int nItem = m_ListCtrl.GetNextSelectedItem(pos);
if(nItem < 0 )return;//列表框中无数据选中(包括无数据)时nItem为-1
m_iStudentId = m_ListCtrl.GetItemData(nItem); m_search2=m_iStudentId;//这里用了个EditControl控件检测m_iStudentId是否得到了准确的32位值。结果显示没有
m_stuno = m_ListCtrl.GetItemText (nItem,0);
m_name = m_ListCtrl.GetItemText (nItem,1);
m_password = m_ListCtrl.GetItemText (nItem,2);
m_region = m_ListCtrl.GetItemText (nItem,3);
//m_sex = m_ListCtrl1.GetItemText (nItem,4)=="男"?true:false;
//m_hobby = m_ListCtrl.GetItemText (nItem,5);
m_introduce = m_ListCtrl.GetItemText (nItem,6);
UpdateData(false);
*pResult = 0;
}
6 楼
gold105
2007-12-14
[回复]我的全部代码(StudentFV.cpp):
1、m_iStudentId 存放学生ID,需要在双击ListCtrl时GetItemData到(请你检查此步操作),而m_stuno是学号EditCtrl值变量,只要UpdateData就可以取到值;
2、INSERT语句在语法上没有where(也不需要),这个语句的功能就是向一个表中插入新的数据行,而where是要查询,说明要查的东西提前应该可以存在
1、m_iStudentId 存放学生ID,需要在双击ListCtrl时GetItemData到(请你检查此步操作),而m_stuno是学号EditCtrl值变量,只要UpdateData就可以取到值;
2、INSERT语句在语法上没有where(也不需要),这个语句的功能就是向一个表中插入新的数据行,而where是要查询,说明要查的东西提前应该可以存在
5 楼
gold105wj
2007-12-13
我的全部代码(StudentFV.cpp)是:
// StudentFV.cpp : 实现文件
//
#include "stdafx.h"
#include "Graduate.h"
#include "StudentFV.h"
///////////////////////////////
#include "afxdb.h"//使用MFC ODBC类所必须包含的头文件
#include "odbcinst.h"
/////////////////////////////////
/////////////////////////////////
#include "GraduateDoc.h"
#include "MainFrm.h"
// CStudentFV
IMPLEMENT_DYNCREATE(CStudentFV, CFormView)
CStudentFV::CStudentFV()
: CFormView(CStudentFV::IDD)
, m_class(_T(""))
, m_stuno(_T(""))
, m_name(_T(""))
, m_password(_T(""))
, m_region(_T(""))
, m_sex(false)
, m_bHobby1(FALSE)
, m_bHobby2(FALSE)
, m_bHobby3(FALSE)
, m_bHobby4(FALSE)
, m_introduce(_T(""))
{
m_iClassId=0;
m_iStudentId=0;
}
CStudentFV::~CStudentFV()
{
}
void CStudentFV::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, m_class);
DDX_Text(pDX, IDC_EDIT3, m_stuno);
DDX_Text(pDX, IDC_EDIT5, m_name);
DDX_Text(pDX, IDC_EDIT4, m_password);
DDX_CBString(pDX, IDC_COMBO1, m_region);
DDX_Control(pDX, IDC_COMBO1, m_region_ctr);
DDX_Check(pDX, IDC_CHECK1, m_bHobby1);
DDX_Check(pDX, IDC_CHECK4, m_bHobby2);
DDX_Check(pDX, IDC_CHECK3, m_bHobby3);
DDX_Check(pDX, IDC_CHECK2, m_bHobby4);
DDX_Text(pDX, IDC_EDIT2, m_introduce);
DDX_Control(pDX, IDC_LIST1, m_ListCtrl);
DDX_Control(pDX, IDC_TREE1, m_TreeCtrl);
}
BEGIN_MESSAGE_MAP(CStudentFV, CFormView)
ON_BN_CLICKED(IDC_BUTTON1, &CStudentFV::OnBnClickedButton1)
ON_NOTIFY(TVN_SELCHANGED, IDC_TREE1, &CStudentFV::OnTvnSelchangedTree1)
ON_BN_CLICKED(IDC_RADIO1, &CStudentFV::OnBnClickedRadio1)
ON_BN_CLICKED(IDC_RADIO2, &CStudentFV::OnBnClickedRadio2)
ON_NOTIFY(NM_DBLCLK, IDC_LIST1, &CStudentFV::OnNMDblclkList1)
ON_BN_CLICKED(IDC_BUTTON4, &CStudentFV::OnBnClickedButton4)
ON_BN_CLICKED(IDC_BUTTON2, &CStudentFV::OnBnClickedButton2)
ON_BN_CLICKED(IDC_BUTTON3, &CStudentFV::OnBnClickedButton3)
END_MESSAGE_MAP()
// CStudentFV 诊断
#ifdef _DEBUG
void CStudentFV::AssertValid() const
{
CFormView::AssertValid();
}
#ifndef _WIN32_WCE
void CStudentFV::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
#endif
#endif //_DEBUG
// CStudentFV 消息处理程序
void CStudentFV::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
// TODO: 在此添加专用代码和/或调用基类
//初始化列表
DWORD dwExStyle = m_ListCtrl.GetExStyle();
dwExStyle&=~LVS_EX_CHECKBOXES;
m_ListCtrl.SetExtendedStyle(dwExStyle|LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT|LVS_EX_ONECLICKACTIVATE);
CString strHeader[7]={L"学号",L"姓名",L"密码",L"地区",L"性别",L"爱好",_T("自我简介")};
int nWidth[7]={50,70,70,60,50,60,80};
for(int nCol=0;nCol<7;nCol++){
m_ListCtrl.InsertColumn(nCol,strHeader[nCol],LVCFMT_LEFT,nWidth[nCol]);
}
//初始化树控件
HTREEITEM hRoot,hParent;
hRoot=m_TreeCtrl.InsertItem(L"计算机06级");
CDatabase *pDb=new CDatabase;
pDb->Open (L"graduate");
//CDatabase *pDb =((CGraduateDoc*)((CMainFrame*)AfxGetApp()->m_pMainWnd)->GetActiveDocument())->pDb;
CRecordset rs(pDb);
rs.Open (CRecordset::forwardOnly,L"select id,name from class");
CDBVariant id;
//short id;
CString strValue;
while(!rs.IsEOF())
{
rs.GetFieldValue (L"id",id);
rs.GetFieldValue(L"name",strValue);
hParent=m_TreeCtrl.InsertItem(strValue,hRoot);
m_TreeCtrl.SetItemData(hParent,id.m_iVal);
rs.MoveNext ();
}
rs.Close();
//pDb->Close();
//初始化地区
int nIndex=m_region_ctr.AddString(L"北京");
m_region_ctr.SetItemData(nIndex,1);
nIndex=m_region_ctr.AddString(L"邯郸");
m_region_ctr.SetItemData(nIndex,2);
/* CDatabase *pDb1=new CDatabase;
pDb1->Open (L"graduate");
//CDatabase *pDb1 =((CGraduateDoc*)((CMainFrame*)AfxGetApp()->m_pMainWnd)->GetActiveDocument())->pDb1;
CRecordset rs1(pDb1);
rs1.Open (CRecordset::forwardOnly,L"select region from student");//如何使地区不重复显示?????
CString strValue1;
while(!rs1.IsEOF())
{
rs1.GetFieldValue(L"region",strValue1);
int nIndex=m_region_ctr.AddString(strValue1);
rs1.MoveNext ();
}
rs1.Close();*/
// pDb1->Close();
}
void CStudentFV::OnTvnSelchangedTree1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
m_ListCtrl.DeleteAllItems();//删除全部节点
HTREEITEM hItem=m_TreeCtrl.GetSelectedItem();//获取当前被选择的节点,将其赋值给hItem
int x = m_TreeCtrl.GetItemData(hItem);//选择与指定节点(这里指hItem)有关联的32位值,并将其赋值给x
m_iClassId=x;//保存下x的值
CString t=m_TreeCtrl.GetItemText(hItem);//返回油hItem指定的节点的文本
if(x==0) {m_class=L"";UpdateData(0);return;}
if(x!=0) m_class=t;
UpdateData(FALSE);
CString strSQL;
strSQL.Format(L"select id,stuno,name,password,region,sex,hobby,introduce from student where class_id=%d",x);
//Format是CString类的一个经常使用的成员函数,它通过格式操作使任意类型的数据转换成一个字符串
CDatabase *pDb =((CGraduateDoc*)((CMainFrame*)AfxGetApp()->m_pMainWnd)->GetActiveDocument())->pDb;
//////////////////////数据源错误,此语句在此错误
//CDatabase *pDb=new CDatabase;
//pDb->Open (L"graduate");
CRecordset rs(pDb);//定义记录集类的对象
rs.Open (CRecordset::forwardOnly,strSQL);
//CDBVariant id;//定义类的对象
//short id;
CString strValue;
while(!rs.IsEOF())
{
//rs.GetFieldValue (L"id",id);//函数用来获取数据表当前记录中指定字段的值
rs.GetFieldValue(L"stuno",strValue);
int nItem=m_ListCtrl.InsertItem(m_ListCtrl.GetItemCount(),strValue);//插入一项(在这里是一行)。()中,得到行数,返回到strValue
//m_ListCtrl.SetItemData(nItem,id.m_iVal);//设置与指定节点关联的32位值
rs.GetFieldValue(L"name",strValue);
m_ListCtrl.SetItemText( nItem,1,strValue);
//m_ListCtrl.SetItemData(nItem,id.m_iVal);
rs.GetFieldValue(L"password",strValue);
m_ListCtrl.SetItemText( nItem,2,strValue);
rs.GetFieldValue(L"region",strValue);
m_ListCtrl.SetItemText( nItem,3,strValue);
rs.GetFieldValue(L"sex",strValue);
m_ListCtrl.SetItemText( nItem,4,strValue);
rs.GetFieldValue(L"hobby",strValue);
m_ListCtrl.SetItemText( nItem,5,strValue);
rs.GetFieldValue(L"introduce",strValue);
m_ListCtrl.SetItemText( nItem,6,strValue);
rs.MoveNext ();
}
rs.Close();
// pDb->Close();
//AfxMessageBox(s);
*pResult = 0;
}
void CStudentFV::OnNMDblclkList1(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
POSITION pos = m_ListCtrl.GetFirstSelectedItemPosition();
int nItem = m_ListCtrl.GetNextSelectedItem(pos);
if(nItem <0)return;//列表框中无数据选中(包括无数据)时nItem为-1
m_iStudentId = m_ListCtrl.GetItemData(nItem);//设置学生id
m_stuno=m_ListCtrl.GetItemText(nItem,0);
m_name=m_ListCtrl.GetItemText(nItem,1);
m_password=m_ListCtrl.GetItemText(nItem,2);
m_region=m_ListCtrl.GetItemText(nItem,3);
//m_sex = m_ListCtrl.GetItemText (nItem,4)==L"男"?true:false;
//CString s;
//s=m_ListCtrl.GetItemText(nItem,4);
//if(s==L"男")m_sex=true;
//if(s==L"女")m_sex=false;lai
//m_hobby=m_ListCtrl.GetItemText(nItem,5);
m_introduce=m_ListCtrl.GetItemText(nItem,6);
UpdateData(false);
*pResult = 0;
}
void CStudentFV::OnBnClickedRadio1()
{
// TODO: 在此添加控件通知处理程序代码
m_sex=true;
}
void CStudentFV::OnBnClickedRadio2()
{
// TODO: 在此添加控件通知处理程序代码
m_sex=false;
}
void CStudentFV::OnBnClickedButton1()
{///////////////////////////////////添加insert
//在ListContrl中显示要插入的信息
UpdateData(1);
CString s;
int nIndex=m_ListCtrl.InsertItem(m_ListCtrl.GetItemCount(),m_stuno);
m_ListCtrl.SetItemText(nIndex,1,m_name);
m_ListCtrl.SetItemText(nIndex,2,m_password);
m_ListCtrl.SetItemText(nIndex,3,m_region);
m_ListCtrl.SetItemText(nIndex,4,m_sex?L"男":L"女");
if(m_bHobby1)s.Append(_T("VC++"));
if(m_bHobby2)s.Append(_T(" VB"));
if(m_bHobby3)s.Append(_T(" JAVA"));
if(m_bHobby4)s.Append(_T(" 数据库"));
m_ListCtrl.SetItemText(nIndex,5,s);
m_ListCtrl.SetItemText(nIndex,6,m_introduce);
//数据库操作-Insert
//CDatabase *pDb=new CDatabase;//定义一个指针
//pDb->Open (L"graduate"); //连接数据源
CDatabase* pDb=((CGraduateDoc*)((CMainFrame*)AfxGetApp()->m_pMainWnd)->GetActiveDocument())->pDb;
CString str;
str.Format (L"INSERT INTO student(stuno,name,password,region,sex,hobby,introduce) VALUES('%s','%s','%s','%s','%s','%s','%s')",m_stuno,m_name,m_password,m_region,m_sex?L"男":L"女",s,m_introduce);
pDb->ExecuteSQL (str);//执行SQL语句(str)
AfxMessageBox(L"添加成功!");
//pDb->Close ();
}
void CStudentFV::OnBnClickedButton4()
{//修改update
UpdateData(true);
CString strSQL;
strSQL.Format(L"update student set stuno='%s',name='%s',introduce='%s' where id=%d",m_stuno,m_name,m_introduce,m_iStudentId);
CDatabase* pDb=((CGraduateDoc*)((CMainFrame*)AfxGetApp()->m_pMainWnd)->GetActiveDocument())->pDb;
pDb->ExecuteSQL(strSQL);
AfxMessageBox(L"修改成功!");
}
void CStudentFV::OnBnClickedButton2()
{//删除delete
UpdateData(true);
CString strSQL;
strSQL.Format(L"delete from student where stuno='%s'",m_stuno);
CDatabase* pDb=((CGraduateDoc*)((CMainFrame*)AfxGetApp()->m_pMainWnd)->GetActiveDocument())->pDb;
pDb->ExecuteSQL(strSQL);
AfxMessageBox(L"已删除!");
}
void CStudentFV::OnBnClickedButton3()
{//清空
m_stuno=L"";
m_name=L"";
m_password=L"";
m_region=L"";
// m_sex =false;
//m_bHobby1=0;
m_introduce=L"";
UpdateData(false);
}
// StudentFV.cpp : 实现文件
//
#include "stdafx.h"
#include "Graduate.h"
#include "StudentFV.h"
///////////////////////////////
#include "afxdb.h"//使用MFC ODBC类所必须包含的头文件
#include "odbcinst.h"
/////////////////////////////////
/////////////////////////////////
#include "GraduateDoc.h"
#include "MainFrm.h"
// CStudentFV
IMPLEMENT_DYNCREATE(CStudentFV, CFormView)
CStudentFV::CStudentFV()
: CFormView(CStudentFV::IDD)
, m_class(_T(""))
, m_stuno(_T(""))
, m_name(_T(""))
, m_password(_T(""))
, m_region(_T(""))
, m_sex(false)
, m_bHobby1(FALSE)
, m_bHobby2(FALSE)
, m_bHobby3(FALSE)
, m_bHobby4(FALSE)
, m_introduce(_T(""))
{
m_iClassId=0;
m_iStudentId=0;
}
CStudentFV::~CStudentFV()
{
}
void CStudentFV::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, m_class);
DDX_Text(pDX, IDC_EDIT3, m_stuno);
DDX_Text(pDX, IDC_EDIT5, m_name);
DDX_Text(pDX, IDC_EDIT4, m_password);
DDX_CBString(pDX, IDC_COMBO1, m_region);
DDX_Control(pDX, IDC_COMBO1, m_region_ctr);
DDX_Check(pDX, IDC_CHECK1, m_bHobby1);
DDX_Check(pDX, IDC_CHECK4, m_bHobby2);
DDX_Check(pDX, IDC_CHECK3, m_bHobby3);
DDX_Check(pDX, IDC_CHECK2, m_bHobby4);
DDX_Text(pDX, IDC_EDIT2, m_introduce);
DDX_Control(pDX, IDC_LIST1, m_ListCtrl);
DDX_Control(pDX, IDC_TREE1, m_TreeCtrl);
}
BEGIN_MESSAGE_MAP(CStudentFV, CFormView)
ON_BN_CLICKED(IDC_BUTTON1, &CStudentFV::OnBnClickedButton1)
ON_NOTIFY(TVN_SELCHANGED, IDC_TREE1, &CStudentFV::OnTvnSelchangedTree1)
ON_BN_CLICKED(IDC_RADIO1, &CStudentFV::OnBnClickedRadio1)
ON_BN_CLICKED(IDC_RADIO2, &CStudentFV::OnBnClickedRadio2)
ON_NOTIFY(NM_DBLCLK, IDC_LIST1, &CStudentFV::OnNMDblclkList1)
ON_BN_CLICKED(IDC_BUTTON4, &CStudentFV::OnBnClickedButton4)
ON_BN_CLICKED(IDC_BUTTON2, &CStudentFV::OnBnClickedButton2)
ON_BN_CLICKED(IDC_BUTTON3, &CStudentFV::OnBnClickedButton3)
END_MESSAGE_MAP()
// CStudentFV 诊断
#ifdef _DEBUG
void CStudentFV::AssertValid() const
{
CFormView::AssertValid();
}
#ifndef _WIN32_WCE
void CStudentFV::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
#endif
#endif //_DEBUG
// CStudentFV 消息处理程序
void CStudentFV::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
// TODO: 在此添加专用代码和/或调用基类
//初始化列表
DWORD dwExStyle = m_ListCtrl.GetExStyle();
dwExStyle&=~LVS_EX_CHECKBOXES;
m_ListCtrl.SetExtendedStyle(dwExStyle|LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT|LVS_EX_ONECLICKACTIVATE);
CString strHeader[7]={L"学号",L"姓名",L"密码",L"地区",L"性别",L"爱好",_T("自我简介")};
int nWidth[7]={50,70,70,60,50,60,80};
for(int nCol=0;nCol<7;nCol++){
m_ListCtrl.InsertColumn(nCol,strHeader[nCol],LVCFMT_LEFT,nWidth[nCol]);
}
//初始化树控件
HTREEITEM hRoot,hParent;
hRoot=m_TreeCtrl.InsertItem(L"计算机06级");
CDatabase *pDb=new CDatabase;
pDb->Open (L"graduate");
//CDatabase *pDb =((CGraduateDoc*)((CMainFrame*)AfxGetApp()->m_pMainWnd)->GetActiveDocument())->pDb;
CRecordset rs(pDb);
rs.Open (CRecordset::forwardOnly,L"select id,name from class");
CDBVariant id;
//short id;
CString strValue;
while(!rs.IsEOF())
{
rs.GetFieldValue (L"id",id);
rs.GetFieldValue(L"name",strValue);
hParent=m_TreeCtrl.InsertItem(strValue,hRoot);
m_TreeCtrl.SetItemData(hParent,id.m_iVal);
rs.MoveNext ();
}
rs.Close();
//pDb->Close();
//初始化地区
int nIndex=m_region_ctr.AddString(L"北京");
m_region_ctr.SetItemData(nIndex,1);
nIndex=m_region_ctr.AddString(L"邯郸");
m_region_ctr.SetItemData(nIndex,2);
/* CDatabase *pDb1=new CDatabase;
pDb1->Open (L"graduate");
//CDatabase *pDb1 =((CGraduateDoc*)((CMainFrame*)AfxGetApp()->m_pMainWnd)->GetActiveDocument())->pDb1;
CRecordset rs1(pDb1);
rs1.Open (CRecordset::forwardOnly,L"select region from student");//如何使地区不重复显示?????
CString strValue1;
while(!rs1.IsEOF())
{
rs1.GetFieldValue(L"region",strValue1);
int nIndex=m_region_ctr.AddString(strValue1);
rs1.MoveNext ();
}
rs1.Close();*/
// pDb1->Close();
}
void CStudentFV::OnTvnSelchangedTree1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
m_ListCtrl.DeleteAllItems();//删除全部节点
HTREEITEM hItem=m_TreeCtrl.GetSelectedItem();//获取当前被选择的节点,将其赋值给hItem
int x = m_TreeCtrl.GetItemData(hItem);//选择与指定节点(这里指hItem)有关联的32位值,并将其赋值给x
m_iClassId=x;//保存下x的值
CString t=m_TreeCtrl.GetItemText(hItem);//返回油hItem指定的节点的文本
if(x==0) {m_class=L"";UpdateData(0);return;}
if(x!=0) m_class=t;
UpdateData(FALSE);
CString strSQL;
strSQL.Format(L"select id,stuno,name,password,region,sex,hobby,introduce from student where class_id=%d",x);
//Format是CString类的一个经常使用的成员函数,它通过格式操作使任意类型的数据转换成一个字符串
CDatabase *pDb =((CGraduateDoc*)((CMainFrame*)AfxGetApp()->m_pMainWnd)->GetActiveDocument())->pDb;
//////////////////////数据源错误,此语句在此错误
//CDatabase *pDb=new CDatabase;
//pDb->Open (L"graduate");
CRecordset rs(pDb);//定义记录集类的对象
rs.Open (CRecordset::forwardOnly,strSQL);
//CDBVariant id;//定义类的对象
//short id;
CString strValue;
while(!rs.IsEOF())
{
//rs.GetFieldValue (L"id",id);//函数用来获取数据表当前记录中指定字段的值
rs.GetFieldValue(L"stuno",strValue);
int nItem=m_ListCtrl.InsertItem(m_ListCtrl.GetItemCount(),strValue);//插入一项(在这里是一行)。()中,得到行数,返回到strValue
//m_ListCtrl.SetItemData(nItem,id.m_iVal);//设置与指定节点关联的32位值
rs.GetFieldValue(L"name",strValue);
m_ListCtrl.SetItemText( nItem,1,strValue);
//m_ListCtrl.SetItemData(nItem,id.m_iVal);
rs.GetFieldValue(L"password",strValue);
m_ListCtrl.SetItemText( nItem,2,strValue);
rs.GetFieldValue(L"region",strValue);
m_ListCtrl.SetItemText( nItem,3,strValue);
rs.GetFieldValue(L"sex",strValue);
m_ListCtrl.SetItemText( nItem,4,strValue);
rs.GetFieldValue(L"hobby",strValue);
m_ListCtrl.SetItemText( nItem,5,strValue);
rs.GetFieldValue(L"introduce",strValue);
m_ListCtrl.SetItemText( nItem,6,strValue);
rs.MoveNext ();
}
rs.Close();
// pDb->Close();
//AfxMessageBox(s);
*pResult = 0;
}
void CStudentFV::OnNMDblclkList1(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
POSITION pos = m_ListCtrl.GetFirstSelectedItemPosition();
int nItem = m_ListCtrl.GetNextSelectedItem(pos);
if(nItem <0)return;//列表框中无数据选中(包括无数据)时nItem为-1
m_iStudentId = m_ListCtrl.GetItemData(nItem);//设置学生id
m_stuno=m_ListCtrl.GetItemText(nItem,0);
m_name=m_ListCtrl.GetItemText(nItem,1);
m_password=m_ListCtrl.GetItemText(nItem,2);
m_region=m_ListCtrl.GetItemText(nItem,3);
//m_sex = m_ListCtrl.GetItemText (nItem,4)==L"男"?true:false;
//CString s;
//s=m_ListCtrl.GetItemText(nItem,4);
//if(s==L"男")m_sex=true;
//if(s==L"女")m_sex=false;lai
//m_hobby=m_ListCtrl.GetItemText(nItem,5);
m_introduce=m_ListCtrl.GetItemText(nItem,6);
UpdateData(false);
*pResult = 0;
}
void CStudentFV::OnBnClickedRadio1()
{
// TODO: 在此添加控件通知处理程序代码
m_sex=true;
}
void CStudentFV::OnBnClickedRadio2()
{
// TODO: 在此添加控件通知处理程序代码
m_sex=false;
}
void CStudentFV::OnBnClickedButton1()
{///////////////////////////////////添加insert
//在ListContrl中显示要插入的信息
UpdateData(1);
CString s;
int nIndex=m_ListCtrl.InsertItem(m_ListCtrl.GetItemCount(),m_stuno);
m_ListCtrl.SetItemText(nIndex,1,m_name);
m_ListCtrl.SetItemText(nIndex,2,m_password);
m_ListCtrl.SetItemText(nIndex,3,m_region);
m_ListCtrl.SetItemText(nIndex,4,m_sex?L"男":L"女");
if(m_bHobby1)s.Append(_T("VC++"));
if(m_bHobby2)s.Append(_T(" VB"));
if(m_bHobby3)s.Append(_T(" JAVA"));
if(m_bHobby4)s.Append(_T(" 数据库"));
m_ListCtrl.SetItemText(nIndex,5,s);
m_ListCtrl.SetItemText(nIndex,6,m_introduce);
//数据库操作-Insert
//CDatabase *pDb=new CDatabase;//定义一个指针
//pDb->Open (L"graduate"); //连接数据源
CDatabase* pDb=((CGraduateDoc*)((CMainFrame*)AfxGetApp()->m_pMainWnd)->GetActiveDocument())->pDb;
CString str;
str.Format (L"INSERT INTO student(stuno,name,password,region,sex,hobby,introduce) VALUES('%s','%s','%s','%s','%s','%s','%s')",m_stuno,m_name,m_password,m_region,m_sex?L"男":L"女",s,m_introduce);
pDb->ExecuteSQL (str);//执行SQL语句(str)
AfxMessageBox(L"添加成功!");
//pDb->Close ();
}
void CStudentFV::OnBnClickedButton4()
{//修改update
UpdateData(true);
CString strSQL;
strSQL.Format(L"update student set stuno='%s',name='%s',introduce='%s' where id=%d",m_stuno,m_name,m_introduce,m_iStudentId);
CDatabase* pDb=((CGraduateDoc*)((CMainFrame*)AfxGetApp()->m_pMainWnd)->GetActiveDocument())->pDb;
pDb->ExecuteSQL(strSQL);
AfxMessageBox(L"修改成功!");
}
void CStudentFV::OnBnClickedButton2()
{//删除delete
UpdateData(true);
CString strSQL;
strSQL.Format(L"delete from student where stuno='%s'",m_stuno);
CDatabase* pDb=((CGraduateDoc*)((CMainFrame*)AfxGetApp()->m_pMainWnd)->GetActiveDocument())->pDb;
pDb->ExecuteSQL(strSQL);
AfxMessageBox(L"已删除!");
}
void CStudentFV::OnBnClickedButton3()
{//清空
m_stuno=L"";
m_name=L"";
m_password=L"";
m_region=L"";
// m_sex =false;
//m_bHobby1=0;
m_introduce=L"";
UpdateData(false);
}
4 楼
gold105wj
2007-12-13
老师,我有两个问题想请教您:
1:
strSQL.Format(L"update student set stuno='%s',name='%s',introduce='%s' where id=%d",m_stuno,m_name,m_introduce,m_iStudentId);//我改完代码程序能运行,没有错误。但是删除功能实现不了。我试了试,这句中的条件处错了,即m_iStudentId 取不到值。如果我把句子改为……where stuno='%s'……,m_stuno);就能实现删除,这是为什么啊?
2:
str.Format (L"INSERT INTO student(stuno,name,password,region,sex,hobby,introduce) VALUES('%s','%s','%s','%s','%s','%s','%s')",m_stuno,m_name,m_password,m_region,m_sex?L"男":L"女",s,m_introduce);//这个SQL语句中怎么加条件啊?直接加where class_id=%d不能实现,点添加button时提示说“你时用的SQL语句缺少(;)”
1:
strSQL.Format(L"update student set stuno='%s',name='%s',introduce='%s' where id=%d",m_stuno,m_name,m_introduce,m_iStudentId);//我改完代码程序能运行,没有错误。但是删除功能实现不了。我试了试,这句中的条件处错了,即m_iStudentId 取不到值。如果我把句子改为……where stuno='%s'……,m_stuno);就能实现删除,这是为什么啊?
2:
str.Format (L"INSERT INTO student(stuno,name,password,region,sex,hobby,introduce) VALUES('%s','%s','%s','%s','%s','%s','%s')",m_stuno,m_name,m_password,m_region,m_sex?L"男":L"女",s,m_introduce);//这个SQL语句中怎么加条件啊?直接加where class_id=%d不能实现,点添加button时提示说“你时用的SQL语句缺少(;)”
3 楼
gold105
2007-12-12
学浅了,你找不到工作呀,我教学的目的不是为了学校的考试的,因为我曾深刻体悟在外面生存的不易,何必等到无奈来临呢?
2 楼
gold105wj
2007-12-10
老师能把书上的函数讲讲吗?参数不大会用
1 楼
gold105wj
2007-12-08
老师,首先对您的课我非常喜欢,也对你的态度十分满意。 俺c++一点都不会,基本等同文盲,怎么办,俺不是不学,是你讲的太深了,俺听不大懂,再加上,书上的也和您的大相径庭。我郁郁郁闷纳呐呐,我都不知道去那复习啊
发表评论
-
VC++全部上机作业4/4
2008-01-08 20:17 410/*2007-10~2008-1全部上机作业,由于博客对上传文 ... -
VC++全部上机作业3/4
2008-01-08 20:15 359/*2007-10~2008-1全部上机作业,由于博客对上传文 ... -
VC++全部上机作业2/4
2008-01-08 20:12 283/*2007-10~2008-1全部上机作业,由于博客对上传文 ... -
VC++全部上机作业1/4
2008-01-08 20:10 404/*2007-10~2008-1全部上机作业,由于博客对上传文 ... -
2007 VC++ MFC复习Beta版——加强理解Graduate精髓
2007-12-19 17:03 1203/*望大家认真对待本要点,因为其中处处考虑了如何加深大家对这个 ...
相关推荐
这款名为"简易绘图软件"的程序,正是采用MFC的SDI框架构建的。在MFC中,SDI框架的核心是CDocument和CView类。CDocument类用于存储和管理文档数据,而CView类则负责将这些数据显示在屏幕上。在这个绘图软件中,CView...
- **Single Document (SDI)**:允许同时处理一个文档,使用CWinApp, CFrameWnd, CDocument和CView基类。 - **Multiple Documents (MDI)**:支持同时处理多个文档,除了上述基类外,还使用CMDIFrameWnd和CMDIChildWnd...
通过MFC的应用框架,开发者可以轻松地实现诸如多文档界面(MDI)、单文档界面(SDI)等复杂的功能,同时还能利用MFC提供的各种对话框、控件来快速构建用户界面。 综上所述,MFC通过提供丰富的类库和框架支持,极大地...
- 使用Visual C++ AppWizard创建一个SDI/MFC程序,随后去除所有不必要的组件(如文档/视图结构),仅保留核心框架。 2. **编写服务代码**: - 实现一个名为`NTServApp.cpp`的源文件,该文件包含了服务程序的入口...
MFC是微软为Windows应用程序开发提供的一套C++类库,它简化了Windows API的使用,使得开发者能够更高效地构建应用程序。 首先,"单文档"(Single Document Interface, SDI)是一种常见的用户界面模式,它允许用户在...
在这个项目中,MFC被用作基础框架,构建了一个单文档接口(Single Document Interface, SDI)的应用程序,允许用户专注于迷宫的显示和操作,而不必关心底层的窗口管理和消息处理。 迷宫界面设计是该项目的核心部分...
E4框架支持MDI(多文档界面)和SDI(单文档界面),允许用户在同一个窗口中管理多个文档或工作区。yahamp 利用E4的优势,为火腿无线电日志提供了一个用户友好的界面。 **yahamp的功能** - **通信记录**:yahamp ...
VC++.NET中的窗体启动后即最小化的实现涉及到Windows消息处理和MFC(Microsoft Foundation Classes)库的使用。MFC是微软为简化Windows应用程序开发提供的一组C++类库,它封装了Windows API,使得开发者能够更方便地...
在Visual Studio 2010中,开发基于对话框的应用程序时,虽然单文档(SDI)和多文档(MDI)应用程序的串行化操作相对容易,因为MFC(Microsoft Foundation Classes)框架提供了内置支持,但针对单文档对话框工程的...
本文所讨论的图像格式转换参考设计,旨在为定制视频处理应用提供一个基础的实现框架。 首先,介绍Altera公司的视频设计工作台,它是一个包含构建模块视频知识产权(IP)内核、格式转换参考设计、低开销开放视频接口...