1、成绩管理系统 mfc c+ sql系统开发数据库课程设计 学生成绩管理系统授课老师: 高寅生 专业:软件工程班级: 软件A0801 学号: 14102080106姓名: 孔卫超 系统简介一,系统概述开发环境:microsoft visual studio 6 mfc数据库版本:sql2000系统名称:成绩管理系统(整体界面如图1_1) 图1_1系统界面截图二,系统功能对成绩进行简单管理,统计并公示各班各门课的成绩分部情况,及格率;学生通过密码查看自己每门课的成绩及平均分,不及格门数;教师通过密码上传查看自己所授课程的成绩,且上传后三个工作日不能再更改。选课模式为我校的必修课,同一班的人上相同的
2、课,一个老师可带多门课,可带多个班级,可带多个班级的同一门课。三,同其他系统关联本系统仅对成绩进行管理,对学生基本信息,教师基本信息,课程基本信息为只读操作,这些信息的管理为其他管理系统的功能。系统设计一,数据库设计学生表(学号,姓名,班级号,密码)教师表(教师号,姓名,密码)课程表(课程号,课程名)成绩表(学号,课程号,成绩)教师授课表(课程号,班级号,教师号,成绩上传日期,已上传成绩否)相应ER图如图2_1。数据库中的各表见附录1。图2_1 成绩管理系统ER图二,系统角色设计 系统分3个角色,游客,学生,教师。游客能查看各班级的成绩统计,学生能查看自己的成绩和不及格门数。教师能上传,修改和
3、查看自己教授班级的成绩。用况图如图2_2。图2_2 系统用况图二,系统模块及界面设计 本系统分3个界面,分别与图2_2的三个角色相对应。如下图2_3为游客页,图2_4为学生页,图2_5为教师页。 图2_3 游客页 图2_4学生页图2_5 教师页 系统模块在上述三界面为基础的角色上曾加一个数据库常用操作模块。如图2_6。其中各模块对应的源文件见附录2 系统源代码。图2_6系统模块图系统测试一, 系统初始化测试输入:启动程序理论输出:欢迎界面5秒后启动系统实际输出:如图3_1图2_7 闪屏界面二,欢迎界面测试输入:启动程序理论输出:统计处已上传的成绩的成绩统计时间输出:如图3_2图2_8 成绩分部
4、统计三,学生界面测试1,密码测试输入:学号 10714010127 密码888理论输出:提示错误实际输出:如图3_3 图3_3 错误密码测试 图3_3 正确 用户和密码2,正确密码测试输入:学号 10714010127 密码 123456理论输出:学生登入,并显示成绩统计实际输出:如图3_4四 教师页面测试1,超期上传成绩测试输入:单击要上传的班级理论输出:提示您的科目已超过三个工作日,只能查看实际输出:如图3_5 图3_5 超过3个工作日不能修改成绩2,上传成绩测试输入:单击要上传的班级理论输出:返回相应班级成绩表,供老师上传实际输出:如图3_6附录附录一 数据库各表学生表(student)
5、学号(sno) 姓名(sname) 班级(sclass)密码(spassword)10714010101 王新 软A0711 12345610714010102 王运涛 软A0711 12345610714010103 王宁宁 软A0711 12345610714010104 姜铁军 软A0711 12345610714010125 建 信 A0711 12345610714010127 汤龙 软A0711 12345610714010201 张一 软A0712 12345610714010202 王麻 软A0712 12345610714010203 李四 软A0712 1234561071
6、4010204 张三 软A0712 12345610714010227 二七人 软A0712 123456教师表(teacher)教师号(tno)姓名(tname) 密码(tpassword)20714010101 严青 12345620714010102 李秀贤 12345620714010103 胡华 12345620714010104 程宵 12345620714010105 王超 12345620714010106 孟娜 12345620714010107 董晓刚 12345620714010123 叶争青 12345620714010127 张海 123456课程表(course)课
7、程(cno) 课程名(cname)000000 单片机原理与应用000001 数据库课程设计000002 大学语文000003 asp程序设计000004 java程序设计000005 软件工程教师授课表(tcourse) 教师号(tno) 课程号(cno) 班级(sclass) 上传时间 上传状态20714010101 000000 软A0711 2010-06-20 22:14:00 120714010101 000000 软A0712 NULL 020714010103 000002 软A0712 2010-06-20 22:16:00 120714010123 000002 软A071
8、1 2010-06-21 12:15:00 120714010127 000001 软A0711 NULL 020714010127 000001 软A0712 NULL 0成绩表(grade) 学号(sno) 课程号(cno) 成绩(grade) 10714010101 000000 8810714010101 000002 8010714010102 000000 8910714010102 000002 10010714010103 000000 9510714010103 000002 9510714010104 000000 9010714010104 000002 88107140
9、10125 000000 7510714010125 000002 9010714010127 000000 5510714010127 000002 9510714010201 000002 6510714010202 000002 3010714010203 000002 9010714010204 000002 7010714010227 000002 50附录2 系统源代码1 数据库常用操作主要源代码/*adoconn.cpp*/* 函数名:void ADOConn:OnInitADOConn()* 功能: 建立数据库连接* 参数: 无* 全局变量引用:m_pConnection(ad
10、o 数据库连接指针) * 返回值 无*/void ADOConn:OnInitADOConn() /初始化OLE/COM库环境 :CoInitialize(NULL); try /创建connection对象 m_pConnection.CreateInstance(ADODB.Connection); /设置连接字符串 CString conectstr; conectstr.Format(Provider=SQLOLEDB.1;Integrated Security=SSPI; Persist Security Info=False;Initial Catalog=%s; Data Sou
11、rce=%s,DATABASENAME,SERVERNAME); _bstr_t strConnect= conectstr; /SERVER和UID,PWD的设置根据实际情况来设置 m_pConnection-Open(strConnect,adModeUnknown); /捕捉异常 catch(_com_error e) /显示错误信息 /AfxMessageBox(e.Description(); AfxMessageBox(连接数据库失败); /* 函数名:_RecordsetPtr& ADOConn:GetRecordSet(_bstr_t bstrSQL)* 功能: 获取数据库查询
12、记录集* 参数: _bstr_t bstrsql(数据库语句)* 全局变量:m_pConnection(数据库连接指针) m_pRecordset(数据库记录集指针)* 返回值:m_pRecordset 引用*/_RecordsetPtr& ADOConn:GetRecordSet(_bstr_t bstrSQL) try /连接数据库,如果connection对象为空,则重新连接数据库 if(m_pConnection=NULL) OnInitADOConn(); /创建记录集对象 m_pRecordset.CreateInstance(_uuidof(Recordset); /取得表中的记
13、录 m_pRecordset-Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic, adLockOptimistic,adCmdText); catch(_com_error e) AfxMessageBox(获取记录集失败!); /返回记录集 return m_pRecordset;/* 函数名:BOOL ADOConn:ExecuteSQL(_bstr_t bstrSQL)* 功能: 执行sql语句* 参数: _bstr_t bstrSql 待执行的sql语句* 全局变量引用:m_pConnection 数据库连接指针* 返
14、回值:成执行返回 true 失败返回false* 备注:connection对象的Execute方法(_bstr_t CommandText,VARIANT * RecordsAffected, long Options)其中CommandText是命令字符串,通常是SQL命令参数RecordsAffected是操作完 成后所影响的行数参数Options表示CommandText的类型,adCmdText-文本命令,adCmdTable-表 名adCmdProc-存储过程,adCmdUnknown-未知*/BOOL ADOConn:ExecuteSQL(_bstr_t bstrSQL) _va
15、riant_t RecordsAffected; try /是否已连接数据库 if(m_pConnection=NULL) /未连接 OnInitADOConn(); m_pConnection-Execute(bstrSQL,NULL,adCmdText); return true; catch(_com_error e) e.Description(); return false; /* 函数名:void ADOConn:ExitConnect()* 功能: 断开数据库连接,关闭记录集* 参数: 无* 全局变量:m_pConnection,m_pRecordset* 返回值:无*/void
16、 ADOConn:ExitConnect() /关闭记录集和连接 if(m_pRecordset!=NULL) m_pRecordset-Close(); m_pConnection-Close(); /释放环境 :CoUninitialize();2 主窗口源代码/*grademsdlg.h*/class CGradeMSDlg : public CDialogpublic: CGradeMSDlg(CWnd* pParent = NULL); / standard constructor StuPage stuPage; /子对话框 WelPage welPage; TeaPage tea
17、Page; /AFX_DATA(CGradeMSDlg) enum IDD = IDD_GRADEMS_DIALOG ; CListCtrl m_Func_list; /AFX_DATA / ClassWizard generated virtual function overrides /AFX_VIRTUAL(CGradeMSDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support /AFX_VIRTUAL/ Implementationprotected: HICON m_hIco
18、n; / Generated message map functions /AFX_MSG(CGradeMSDlg) virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); afx_msg void OnClickFuncList1(NMHDR* pNMHDR, LRESULT* pResult); /AFX_MSG afx_msg void Rnew(WPARAM wpa
19、ram,LPARAM lparam); /手动添加变量private: CImageList m_ImageList; /手动添加功能函数private: void UpdateFuncList(); /初始化功能选择列表 void MoveChild(); /把子窗口嵌入父窗口 void ActivatePage(int index);/显示活动页 DECLARE_MESSAGE_MAP();*grademsdlg.cpp*/* 函数名:HCURSOR CGradeMSDlg:UpdateFuncList();* 功能:初始化或更新功能列表*/void CGradeMSDlg:UpdateF
20、uncList() m_ImageList.Create(32, 32, ILC_COLOR16|ILC_MASK,1, 4); HICON hIcon = :LoadIcon (AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_WELICON); m_ImageList.Add(hIcon); hIcon = :LoadIcon (AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_TEAICON); m_ImageList.Add(hIcon); hIcon = :LoadIcon (AfxGetResourceHa
21、ndle(), MAKEINTRESOURCE(IDI_STUICON); m_ImageList.Add(hIcon); m_Func_list.SetImageList(&m_ImageList, LVSIL_NORMAL); CRect rc; m_Func_list.GetClientRect(rc); / set new icon spacing m_Func_list.SetIconSpacing(rc.Width(), 64); / change colors m_Func_list.SetTextColor(RGB(6,247,13); /绿色 m_Func_list.SetT
22、extBkColor(RGB(87,166,117);/蓝色 m_Func_list.SetBkColor(RGB(87,166,117); / insert items m_Func_list.InsertColumn(0, _T(OutlookBar); m_Func_list.InsertItem(0, _T(教师入口), 0); m_Func_list.InsertItem(1, _T(学生入口), 1); m_Func_list.InsertItem(2, _T(公共页面), 2);/* 函数名:void ActivatePage(int index);* 功能: 显示活动页*/vo
23、id CGradeMSDlg:ActivatePage(int index) SendMessage(RNEW,NULL,NULL); switch(index) case TEAPAGE: /显示教师页 welPage.ShowWindow(SW_HIDE); stuPage.ShowWindow(SW_HIDE); teaPage.ShowWindow(SW_SHOW);/ CString test;/ test.Format(%d,index);/ AfxMessageBox(test); break; case STUPAGE: /显示学生页 welPage.ShowWindow(SW
24、_HIDE); stuPage.ShowWindow(SW_SHOW); teaPage.ShowWindow(SW_HIDE); break; default: /公共页 welPage.ShowWindow(SW_SHOW); stuPage.ShowWindow(SW_HIDE); teaPage.ShowWindow(SW_HIDE); MoveChild(); UpdateData(false);3 教师窗口主要源代码/*teapage.cpp*/void TeaPage:OnButtontlog() /教师登入 / TODO: Add your control notificati
25、on handler code here UpdateData(true); ADOConn adotemp; CString sql; CString strtemp; _variant_t var; if (0 = m_tno.GetLength() AfxMessageBox(职工号不能为空!); return; this-SetDlgItemText(IDC_BUTTONTLOG,正在核对信息.); sql.Format(select * from teacher where tno=%s,m_tno); adotemp.GetRecordSet(_bstr_t(sql); if (adotemp.m_pRecordset-adoEOF) AfxMessageBox(没有这个职工号!); adotemp.ExitConnect(); return; if (adotemp.m_pRecordset-adoBOF) adotemp.m_pRecordset-MoveFirst(); var = adotemp.m_pRecordset-GetCollect(tpassword); /AfxMessageBox(LPCSTR)_bstr_t(var); if (m_tpassword.Compare(LPCSTR)_bstr_t(var)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1