VC++课程设计学生成绩管理系统详解和源码.docx
- 文档编号:24511521
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:29
- 大小:20.52KB
VC++课程设计学生成绩管理系统详解和源码.docx
《VC++课程设计学生成绩管理系统详解和源码.docx》由会员分享,可在线阅读,更多相关《VC++课程设计学生成绩管理系统详解和源码.docx(29页珍藏版)》请在冰豆网上搜索。
VC++课程设计学生成绩管理系统详解和源码
VC++课程设计
设计项目:
学生成绩管理系统
设计者:
张守阳(20102973)
班级:
计本10级二班
使用软件:
VC++6.0
使用数据库:
ACCESS
设计流程
一、设计理念
开发一款学生成绩管理程序,实现学生基本信息的录入、查询及浏览和修改操作。
以及学生成绩的录入、查询、浏览以及统计分析等功能。
以上功能以可视化界面方式进行操作,并将学生成绩信息保存。
二、数据库设计
在这个程序中,所用到的数据库是ACCESS数据库。
在数据库中,添加了8个表,分别是NO1OBJECT、NO1STUDENT、NO1STUINFO、NO1TEACHER、NO2OBJECT、NO2STUDENT、NO2STUINFO、NO2TEACHER.
这8个表分别记录着两个班的:
成绩概况、学生成绩、学生信息、教师信息。
三、程序设计
此成绩管理系统共有两个模块:
一个是学生成绩管理模块,一个是学生信息管理模块。
在登录成功后(登录用户名和密码都是:
admin)会出现主窗口。
在主窗口中可以通过单击两个模块的按钮实现来实现两个模块间的切换。
学生成绩模块所实现的功能是:
根据班级选项显示学上成绩信息,并且实现成绩的添加、修改、删除、查询功能。
学生信息模块能够实现学生信息的显示、添加、修改和删除功能。
四、此程序的介绍
此程序是基于对话框的MFC程序。
所有的弹出式对话框是模态对话框,由于用到的对话框较多,所以定义的类较多,看起来有点眼花缭乱。
由于我对MFC掌握程度有限,这个程序做的有点粗糙,既不美观,在功能上也有许多不尽人意的地方,或许还会存在bug。
五、程序的实现
1)、修改APP类
由于此程序用到数据库,所以需要先连接数据源。
此程序通过采用代码来连接到所设计的数据源。
首先将设计的数据库复制到工程所在根目录下,再在APP中的initInstance()函数中添加如下代码:
///////加载数据源
if(!
AfxSocketInit())
{
AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
returnFALSE;
}
CStringsPath;
GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
sPath.ReleaseBuffer();
intnPos;
nPos=sPath.ReverseFind('\\');
sPath=sPath.Left(nPos);
nPos=sPath.ReverseFind('\\');
sPath=sPath.Left(nPos);
CStringlpszFile=sPath+"\\mydb.mdb";
char*szDesc;
intmlen;
szDesc=newchar[256];
sprintf(szDesc,"DSN=%s?
DESCRIPTION=TOCsupportsource?
DBQ=%s?
FIL=MicrosoftAccess?
DEFAULTDIR=%s?
?
","mydb",lpszFile,sPath);
mlen=strlen(szDesc);
for(inti=0;i { if(szDesc[i]=='? ') szDesc[i]='\0'; } if(FALSE==SQLConfigDataSource(NULL,ODBC_ADD_DSN,"MicrosoftAccessDriver(*.mdb)\0",(LPCSTR)szDesc)) AfxMessageBox("SQLConfigDataSourceFailed"); try { CStringstrConnect; strConnect.Format("DSN=mydb;"); if(! m_DB.OpenEx(strConnect,CDatabase: : useCursorLib)) { AfxMessageBox("UnabletoConnecttotheSpecifiedDataSource"); returnFALSE; } } catch(CDBException*pE) { pE->ReportError(); pE->Delete(); returnFALSE; } ////////////////////////////// 其中m_DB是定义的一个CDatabase对象,用来指向数据库mymdb。 2)、新建CRecordset数据集类 在项目中,共有四个数据集类,分别是CDRecordset、CBRecordset、CTRecordset、CSinfoRecordset。 它们分别对应学生成绩表、成绩概况表、教师表和学生信息表。 3)、学生成绩模块的代码 BOOLCBaDialog: : OnInitDialog() { CDialog: : OnInitDialog(); CDRecordsetm_Set(&theApp.m_DB); CBRecordsetm_bSet(&theApp.m_DB); CTRecordsetm_tSet(&theApp.m_DB); //////////初始化列表控件ListCtrlx unsignedi=0; CODBCFieldInfoInfo; m_Set.Open(); m_ListCtrlx.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES); for(i=0;i { m_Set.GetODBCFieldInfo(i,Info); m_ListCtrlx.InsertColumn(i,Info.m_strName,LVCFMT_LEFT,80); } m_Set.Close(); //////////初始化列表控件ListCtrlb m_bSet.Open(); m_ListCtrlb.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES); for(i=0;i { m_bSet.GetODBCFieldInfo(i,Info); m_ListCtrlb.InsertColumn(i,Info.m_strName,LVCFMT_LEFT,80); } m_bSet.Close(); //////////////////////////////////// /////////////初始化列表控件ListCtrll m_ListCtrll.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES); m_ListCtrll.InsertColumn(0,_T("科目"),LVCFMT_IMAGE|LVCFMT_LEFT); m_ListCtrll.InsertColumn(1,"任课老师"); for(i=0;i<2;i++) m_ListCtrll.SetColumnWidth(i,80); m_cob.SetCurSel (1); this->Enable(FALSE); m_Timer=SetTimer(1,2,NULL); m_bIsAsc=TRUE; m_bS=TRUE; returnTRUE;//returnTRUEunlessyousetthefocustoacontrol //EXCEPTION: OCXPropertyPagesshouldreturnFALSE } voidCBaDialog: : OnStatr() { //TODO: Addyourcontrolnotificationhandlercodehere m_ListCtrlx.DeleteAllItems(); m_ListCtrlb.DeleteAllItems(); m_ListCtrll.DeleteAllItems(); if(m_Set.IsOpen()) m_Set.Close(); if(m_bSet.IsOpen()) m_bSet.Close(); m_cob.GetLBText(m_cob.GetCurSel(),m_Getstring); this->Select(); if(m_Getstring=="计本一班") m_tSet.Open(); if(m_Getstring=="计本二班") m_tSet.Open(AFX_DB_USE_DEFAULT_TYPE,"[NO2TECHER]"); m_nRecordCount=this->Show();//初始化“学生成绩详单”,并返回字段数 this->display();//初始化“各科成绩概况” this->exhibit();//将teacher表中的记录加载到“任课教师” m_bS=GetDlgItem(IDC_STATR)->EnableWindow(true); this->Enable(TRUE); } intCBaDialog: : Show() { inti=0; m_Set.MoveFirst(); do { CStrings; s.Format("%d",m_Set.m_column1); m_ListCtrlx.InsertItem(i,s,0); m_ListCtrlx.SetItemText(i,1,m_Set.m_column2); s.Format("%.1f",m_Set.m_column3); m_ListCtrlx.SetItemText(i,2,s); s.Format("%.1f",m_Set.m_column4); m_ListCtrlx.SetItemText(i,3,s); s.Format("%.1f",m_Set.m_column5); m_ListCtrlx.SetItemText(i,4,s); s.Format("%.1f",m_Set.m_column6); m_ListCtrlx.SetItemText(i,5,s); s.Format("%.1f",m_Set.m_column7); m_ListCtrlx.SetItemText(i,6,s); s.Format("%.1f",m_Set.m_column8); m_ListCtrlx.SetItemText(i,7,s); s.Format("%.2f",m_Set.m_column9); m_ListCtrlx.SetItemText(i,8,s); i++; m_Set.MoveNext(); }while(! m_Set.IsEOF()); m_Set.Close(); returni; } voidCBaDialog: : display() { inti=0; m_bSet.MoveFirst(); do { CStrings; m_ListCtrlb.InsertItem(i,m_bSet.m_column1,0); s.Format("%.1f",m_bSet.m_column2); m_ListCtrlb.SetItemText(i,1,s); s.Format("%.2f",m_bSet.m_column3); m_ListCtrlb.SetItemText(i,2,s); s.Format("%d",m_bSet.m_column4); m_ListCtrlb.SetItemText(i,3,s); s.Format("%d",m_bSet.m_column5); m_ListCtrlb.SetItemText(i,4,s); i++; m_bSet.MoveNext(); }while(! m_bSet.IsEOF()); m_bSet.Close(); } voidCBaDialog: : exhibit() { inti=0; do { m_ListCtrll.InsertItem(i,m_tSet.m_column1,0); m_ListCtrll.SetItemText(i,1,m_tSet.m_column2); i++; m_tSet.MoveNext(); }while(! m_tSet.IsEOF()); m_tSet.Close(); } voidCBaDialog: : Enable(BOOLp) { BOOLHB; HB=p; GetDlgItem(IDC_ADD)->EnableWindow(HB); GetDlgItem(IDC_DELECT)->EnableWindow(HB); GetDlgItem(IDC_EDIT)->EnableWindow(HB); GetDlgItem(IDC_FIND)->EnableWindow(HB); GetDlgItem(IDC_ALL)->EnableWindow(HB); } CStringCBaDialog: : Select()//班级的选择 { if(m_Getstring=="计本一班") { m_Set.Open(); m_bSet.Open(); } else { m_Set.Open(AFX_DB_USE_DEFAULT_TYPE,"[NO2STUDENT]"); m_bSet.Open(AFX_DB_USE_DEFAULT_TYPE,"[NO2OBJECT]"); } returnm_Getstring; } voidCBaDialog: : Equal() { for(inti=0;i<5;i++) { floatp=0; if(i==0) p=m_Set.m_column3; if(i==1) p=m_Set.m_column4; if(i==2) p=m_Set.m_column5; if(i==3) p=m_Set.m_column6; if(i==4) p=m_Set.m_column7; m_bSet.Edit(); if(Selec==FALSE) { m_bSet.m_column2-=p; m_bSet.m_column3=(float)(m_bSet.m_column2/m_nRecordCount); if(p>=60) m_bSet.m_column4-=1; if(p>=80) m_bSet.m_column5-=1; } else { m_bSet.m_column2+=p; m_bSet.m_column3=(float)(m_bSet.m_column2/m_nRecordCount); if(p>=60) m_bSet.m_column4+=1; if(p>=80) m_bSet.m_column5+=1; } m_bSet.Update(); if(! m_bSet.IsEOF()) m_bSet.MoveNext(); else break; } } voidCBaDialog: : Xuan() { m_ListCtrlb.DeleteAllItems(); this->display(); m_ListCtrlx.DeleteAllItems(); this->Show(); } voidCBaDialog: : OnTimer(UINTnIDEvent) { //TODO: Addyourmessagehandlercodehereand/orcalldefault CStringm_string; m_cob.GetLBText(m_cob.GetCurSel(),m_string); if(m_Getstring! =m_string) { GetDlgItem(IDC_STATR)->EnableWindow(TRUE); this->Enable(FALSE); } CDialog: : OnTimer(nIDEvent); } voidCBaDialog: : OnAdd() { //TODO: Addyourcontrolnotificationhandlercodehere Selec=TRUE; CAddialogdlg; ///////////////////////////// if(m_Set.IsOpen()) m_Set.Close(); if(m_bSet.IsOpen()) m_bSet.Close(); if(m_tSet.IsOpen()) m_tSet.Close(); m_cob.GetLBText(m_cob.GetCurSel(),m_Getstring); this->Select(); if(m_Getstring=="计本一班") m_tSet.Open(); if(m_Getstring=="计本二班") m_tSet.Open(AFX_DB_USE_DEFAULT_TYPE,"[NO2TECHER]"); ///////////////////////////////// if(dlg.DoModal()==IDOK) { m_Set.AddNew(); m_nRecordCount+=1; m_Set.m_column1=dlg.m_nxue; m_Set.m_column2=dlg.m_strName; m_Set.m_column3=dlg.m_fmaths; m_Set.m_column4=dlg.m_fphysical; m_Set.m_column5=dlg.m_fchemistry; m_Set.m_column6=dlg.m_fenglish; m_Set.m_column7=dlg.m_fpolitic; m_Set.m_column8=dlg.m_fmaths+dlg.m_fphysical+dlg.m_fchemistry+dlg.m_fenglish+dlg.m_fpolitic; m_Set.m_column9=(float)(m_Set.m_column8/5); this->Equal(); m_Set.Update();//Update()一定放在Equal()后 m_Set.Requery(); this->Xuan(); } } voidCBaDialog: : OnDelect() { //TODO: Addyourcontrolnotificationhandlercodehere CDelectDialogdlg; Selec=FALSE; if(dlg.DoModal()==IDOK) { this->Select(); m_Set.MoveFirst(); BOOLsel=FALSE; do { if(m_Set.m_column1! =dlg.m_nxue) m_Set.MoveNext(); else { m_nRecordCount-=1; sel=TRUE; m_bSet.MoveFirst(); this->Equal(); m_Set.Delete(); m_Set.Requery(); break; } }while(! m_Set.IsEOF()); if(sel==FALSE) { AfxMessageBox("没有此记录"); return; } else this->Xuan(); } } voidCBaDialog: : OnFind() { //TODO: Addyourcontrolnotificationhandlercodehere CFinDialogdlg; if(dlg.DoModal()==IDOK) { this->Select();//选择班级 m_bSet.Close(); if(dlg.m_Getstring2==">=") m_Set.m_strFilter.Format("[%s]>=%.2f",dlg.m_Getstring1,dlg.m_find); if(dlg.m_Getstring2=="=") m_Set.m_strFilter.Format("[%s]=%.2f",dlg.m_Getstring1,dlg.m_find); if(dlg.m_Getstring2=="<=") m_Set.m_strFilter.Format("[%s]<=%.2f",dlg.m_Getstring1,dlg.m_find); m_ListCtrlx.DeleteAllItems(); m_Set.Requery(); if(m_Set.IsEOF()) { AfxMessageBox("没有符合条件的记录"); m_Set.Close(); return; } else this->Show(); } } voidCBaDialog: : OnAll() { //TODO: Addyourcontrolnotificationhandlercodehere this->Select(); m_bSet.Close(); m_Set.m_strFilter.Empty(); m_Set.Requery(); m_ListCtrlx.DeleteAllItems(); this->Show(); } voidCBaDialog: : OnEdit() { //TODO: Addyourcontrolnotificationhandlercode
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC 课程设计 学生 成绩管理系统 详解 源码
![提示](https://static.bdocx.com/images/bang_tan.gif)