1、52 实训中遇到的问题及解决方法 3053 设计中尚存的不足之处 3054 感想和心得体会 3055 最满意地方 30附录: 30学生信息管理系统本题目设计目的是训练学生的基本编程能力,了解管理信息系统的开发流程,熟悉面向对象程序设计过程。本程序中涉及MFC,class等方面的知识。通过本程序的训练,使学生能对MFC有一个更深刻的了解,掌握利用MSSQL通过ADO实现对学生成绩管理的原理,为进一步开发出高质量的管理信息系统打下坚实的基础。1、问题定义创建一个学生信息管理系统。假设系统中每个学生记录只包括学号、姓名、手机号、身份证号、联系地址。程序的运行效果如下图所示,选择任意菜单后,实现相应功
2、能。图1.1 学生信息管理系统功能需求在问题定义阶段要考虑题目的可行性和需求分析,接下来进入开发阶段,完成系统设计和系统实现的任务。2、系统设计21 总体设计采用模块化的程序设计方法,即将较大的任务按照一定的原则分为一个个较小的任务,然后分别设计各个小任务。需要注意的是划分出来的模块应该相对独立但又相关,且容易理解。 解决方案关系图22 详细设计通过登陆验证后然后出现一个界面,改界面作为一个login类然后主界面的操作,以项目名+dlg作为类名学生数据操作部分,新建一个对话框界面,以DataOperation作为类名。2.3 运行环境目标是写windows xp可以运行,但是编写程序的机子是w
3、indows 7,用vs2010编写,因此产生兼容性问题,最后程序运行环境为Windows 7以上,装有MSSQL的计算机。3、系统设计31 编码项目名取为testmfc,因为每次做新东西的时候。不用含test就经常干不成,所以项目名还是加test好点。3.1.1 ADO因为需要ADO的支持,所以在stdafx.h中要引入ADO的dll并重命名下结束标记,避免与文件的EOF冲突。因为主要执行操作都在CtestmfcDlg,也就是主要的界面,所以把ADO的相关操作语句放到该类下面Switchint是作为一个开关用,作为是否刷新表单中的内容,1为刷新,其他不刷新。Querycommand作为查询语
4、句查询函数里面用过ACCESS但是发现兼容性不是很好,所以还是用习惯用的MSSQL去做数据库了。void CtestmfcDlg:sqlquery(int switchint, CString querycommand) / TODO: 在此添加控件通知处理程序代码 CoInitialize(NULL);/初始化COM组件 _ConnectionPtr pConn(_uuidof(Connection);/实例化一个connection对象pConn _RecordsetPtr pRst(_uuidof(Recordset);/实例化一个Recordset对象pRst _CommandPtr
5、pCmd(_uuidof(Command);/实例化一个Command对象pCmd try /ACCESS /pConn-ConnectionString=Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=C:cppdb.mdb;Mode=Share Deny None;Extended Properties=;Jet OLEDB:System database=Registry Path=Database Password=Engine Type=5;Database Locking Mode=1;Global Partia
6、l Bulk Ops=2;Global Bulk Transactions=1;New Database Password=Create System Database=False;Encrypt Database=False;Dont Copy Locale on Compact=False;Compact Without Replica Repair=False;SFP=False /MSSQL pConn-Provider=SQLNCLI10.1;Integrated Security=Persist Security Info=False;User ID=cpp;Initial Cat
7、alog=cppwork;Data Source=(local);Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=LZY;Initial File Name=Use Encryption for Data=False;Tag with column collation when possible=False;MARS Connection=False;DataTypeCompatibility=0;Trust Server Certificate=FalseOpen(,adConne
8、ctUnspecified); pCmd-put_ActiveConnection(_variant_t(IDispatch*)pConn);CommandText=(_bstr_t)querycommand; pRst=pCmd-Execute(NULL,NULL,adCmdText); catch(_com_error e) if(switchint=1) m_list.DeleteAllItems(); int count=0; while(!pRst-rsEOF) m_list.InsertItem(count, _T(data); m_list.SetItemText(count,
9、1, (_bstr_t)pRst-GetCollect(id m_list.SetItemText(count, 2, (_bstr_t)pRst-number m_list.SetItemText(count, 3, (_bstr_t)pRst-name m_list.SetItemText(count, 4, (_bstr_t)pRst-cellphonenumber m_list.SetItemText(count, 5, (_bstr_t)pRst-cardnumber m_list.SetItemText(count, 6, (_bstr_t)pRst-address pRst-Mo
10、veNext();/下移一个 count+; pRst-Close();/关闭对象 pConn- pCmd.Release();/释放对象 pRst.Release(); pConn.Release(); CoUninitialize();/卸载COM组件3.1.2 控件绑定变量及初始化变量CtestmfcDlg:CtestmfcDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CtestmfcDlg:IDD, pParent) m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME); m_edit = _T(select *
11、 from main); m_query1 = _T(DoDataExchange(CDataExchange* pDX) CDialogEx:DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT1, m_edit); DDX_Control(pDX, IDC_LIST5, m_list); DDX_Control(pDX, IDC_COMBO2, m_cb); DDX_Text(pDX, IDC_EDIT2, m_query1);BEGIN_MESSAGE_MAP(CtestmfcDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_W
12、M_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BUTTON1, &OnBnClickedButton1) ON_BN_CLICKED(IDOK, &OnBnClickedOk) ON_BN_CLICKED(IDC_BUTTON3, &OnBnClickedButton3) ON_BN_CLICKED(IDC_BUTTON2, &OnBnClickedButton2) ON_BN_CLICKED(IDC_BUTTON4, &OnBnClickedButton4) ON_BN_CLICKED(IDC_BUTTON5, &OnBnClickedB
13、utton5) ON_CBN_SELCHANGE(IDC_COMBO2, &OnCbnSelchangeCombo2) ON_EN_CHANGE(IDC_EDIT1, &OnEnChangeEdit1) ON_NOTIFY(NM_DBLCLK, IDC_LIST5, &OnDblclkList5) ON_BN_CLICKED(IDCANCEL, &OnBnClickedCancel) ON_BN_CLICKED(IDC_BUTTON6, &OnClickedButton6) ON_BN_CLICKED(IDC_BUTTON7, &OnClickedButton7) ON_BN_CLICKED(
14、IDC_BUTTON8, &OnClickedButton8)END_MESSAGE_MAP()3.1.3 程序初始化工作BOOL CtestmfcDlg:OnInitDialog()OnInitDialog(); / 将“关于.”菜单项添加到系统菜单中。 / IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); /
15、 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 / 执行此操作 SetIcon(m_hIcon, TRUE); / 设置大图标 SetIcon(m_hIcon, FALSE); / 设置小图标 在此添加额外的初始化代码 m_list.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT); m_list.InsertColumn(0,L,0,0,0); m_list.InsertColumn(1,L索引编号,LVCFMT_LEFT,100); m_list.InsertColumn(2,L学号 m_list.InsertC
16、olumn(3,L姓名 m_list.InsertColumn(4,L手机号 m_list.InsertColumn(5,L身份证号,LVCFMT_LEFT,140); m_list.InsertColumn(6,L地址 LABLE: login dlg; dlg.m_statue=L学生信息管理系统登陆 if (dlg.DoModal()=IDOK) CString qstr=Lselect * from login where username=+dlg.m_username+ sqlquery(2,qstr); int count=m_list.GetItemCount(); if(co
17、unt0) if(dlg.m_username=m_list.GetItemText(0,2)&dlg.m_password=m_list.GetItemText(0,3) else AfxMessageBox(L用户名或者密码错误 goto LABLE; else AfxMessageBox(L goto LABLE; else CDialogEx:OnCancel(); m_cb.AddString(L编号 m_cb.SetCurSel(0); CString cs; GetDlgItem(IDC_EDIT1)-GetWindowTextW(cs); sqlquery(1,cs); ret
18、urn TRUE; / 除非将焦点设置到控件,否则返回 TRUE3.1.4 新增按钮操作的函数OnBnClickedButton2() DataOperation dlg; int x=m_list.GetItemCount(); m_list.InsertItem(x, _T( m_list.SetItemText(x, 2, dlg.m_number); m_list.SetItemText(x, 3, dlg.m_name); m_list.SetItemText(x, 4, dlg.m_cellnumber); m_list.SetItemText(x, 5, dlg.m_cardnu
19、mber); m_list.SetItemText(x, 6, dlg.m_address); CString cmd=Linsert into main (number,name,cellphonenumber,cardnumber,address) values (+dlg.m_number+,+dlg.m_name+dlg.m_cellnumber+dlg.m_cardnumber+dlg.m_address+) sqlquery(0,cmd);3.1.5 修改按钮操作的函数OnBnClickedButton4() CString str; int selectrow=-1; bool
20、isselect=false; for(int i=0; im_list.GetItemCount(); i+) if( m_list.GetItemState(i, LVIS_SELECTED) = LVIS_SELECTED ) selectrow=i; isselect=true; if(isselect) str=m_list.GetItemText(selectrow,1); if(str!=) DataOperation dlg; dlg.m_number=m_list.GetItemText(selectrow,2); dlg.m_name=m_list.GetItemText(
21、selectrow,3); dlg.m_cellnumber=m_list.GetItemText(selectrow,4); dlg.m_cardnumber=m_list.GetItemText(selectrow,5); dlg.m_address=m_list.GetItemText(selectrow,6); if (dlg.DoModal()=IDOK) m_list.SetItemText(selectrow, 2, dlg.m_number); m_list.SetItemText(selectrow, 3, dlg.m_name); m_list.SetItemText(se
22、lectrow, 4, dlg.m_cellnumber); m_list.SetItemText(selectrow, 5, dlg.m_cardnumber); m_list.SetItemText(selectrow, 6, dlg.m_address); CString cmd=Lupdate main set number=,name=,cellphonenumber=,cardnumber=,address= where id=+m_list.GetItemText(selectrow,1)+ sqlquery(0,cmd);修改成功 sqlquery(1,L刷新数据中,请再选择一
23、次 sqlquery(1,L AfxMessageBox(L请用鼠标单击要操作的行,然后再按此按钮3.1.6 删除按钮操作的函数OnBnClickedButton3() str=m_list.GetItemText(selectrow,2); if(str! CString delstr=Ldelete from main where number=+str+ m_list.SetItemText(selectrow, 1, L此行已删除 m_list.SetItemText(selectrow, 2, L m_list.SetItemText(selectrow, 3, L m_list.SetItemText(selectrow, 4, L m_list.Se
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1