1、 《学生选课系统》课程设计 学 院 信 息 工 程 专 业 网 络 工 程 班 级 130461 课题名称 学生选课管理系统设计 组长学号 姓 名 成绩 组员学号 姓 名 成绩 组员学号 姓 名 成绩 开课时间 2014 至 2015 学年 第 一 学期 地
2、点 D509 一、 课程设计的目的和要求 本次学生选课管理系统的课程设计,明白整个系统架构,使得自己所学的Microsoft Visual C++ 6.0和Microsoft Access知识的相互结合,加深对数据库的认识,同时又复习了Microsoft Visual C++ 6.0的编写。为以后能够合理的、精确地、独立的完成数据库提供了前提。 数据库运用到数据库建立,建立表以及表与表的连接等等,前台用Microsoft Visual 6.0中MFC工程建立需要的界面与编写界面之间连接代码等。我们想通过本实验解决后台数据库与前台界面连接问题,这也是主要问题
3、所在,只有正确连接才能保证前台用户操作正确的数据,达到数据库中数据资源的共享目的。 本次课程设计开发一套选课系统,由学生选课系统、教师系统和管理员系统三部分组成。 管理员可以通过管理员系统进行管理课程,查看课程选修情况,查看教师授课情况,修改或删除课程或者学生的信息。教师可以通过教师系统进行查看自己教授的的课程,可以进行对学生的评分,以及对自己密码的修改。学生可以通过学生选课系统进行查看备选课程及该课程的信息,选择希望选修的课程,以及对自己密码的修改。 二、 设计 2.1本次课程设计建立学生选课管理系统,通过用户名、密码分别进入3个类别系统,分别是教理系统,教师管理系统,学生选
4、课系统, 豆豆学生选课管理系统 学 生 选 课 系 统 教 师 管 理 系 统 管 理 员 系 统 图2.1 学生管理系统基本图 通过管理员,进入系统界面可以执行以下操作: 管理员系统 修改 退出 显示 添加 退出系统 重新登录 删除课程信息 删除学生信息 修改课程信息 显示课程信息 显示学生信息 添加学生信息 添加课程信息 修改学生信息 图2.2 教务处管理系统 通过学生,进入系统界面可以执行以下操作:
5、学生管理系统 个人信息 退出 选课 查看已选课程和显示所有课程 信息 重新登录 退出系统 查看成绩 修改密码 学生选课 图2.3 学生管理系统 教师管理系统 通过教师,进入界面可以执行以下操作: 查看班上学生信息 查看所教课程 对学生评分 退出 图2.4 教师管理系统 数据需求 (1) 学生表信息:学号,姓名,性别,院系,班级,密码,年龄。 (2) 课程表信息:课程编号,课程名称,学分,学时,开课学期。 (3) 选表信息:学号,课程编号,课程名称,姓名,学分,成绩。 (
6、4) 教师表信息:教师编号,姓名,性别,密码,课程名称,年龄。 (5) 管理员表信息:姓名,编号,密码。 2.2后台数据库与基本表的设计 图2.5 管理员表 图2.9 教师表 图2.6 课程表以及其连接的表 图2.7 选课表 图2.8 学生表以及其连接的表 2.3资源视图设计 建立完MFC工程之后进入前台界面制作,在Microsoft Visual C++ 6.0中界面制作分为三个模块:类视图,资源视图,文件视图。资源视图的设计是前台制作的第一步,资源视图里分为对话框制作与菜单制作,下面就分别介绍: (1) 主菜单设计:学生选课管理系
7、统主菜单分为学生选课与管理员管理两个主菜单。 (2) 对话框设计:学生选课管理系统对话框设计为25个,具体见截图: 豆豆学生选课系统教师,学生,管理员登录界面 图2.10 登陆界面 2.4文件视图设计 我们知道Microsoft Visual C++ 6.0编程需要有头文件,界面涉及的头文件更多,在文件视图里我们可以看到学生选课对话框涉及的所有头文件,本次课程设计选课系统头文件有如下:管理员添加学生信息 三、 编码 下面是应用程序的部分代码: (1)登录主界面与管理员操作界面,学生界面,老师界面的连接 #include "stdafx.h" #include "St
8、udent.h" #include "LogonDialog.h" #include "AdmDialog.h" #include "StuDialog.h" #include "TeacherDialog.h" CString usernumber; CString username; #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////
9、////////////////////////////////// // CLogonDialog dialog CLogonDialog::CLogonDialog(CWnd* pParent /*=NULL*/) : CDialog(CLogonDialog::IDD, pParent) { //{{AFX_DATA_INIT(CLogonDialog) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } void CLogonDial
10、og::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CLogonDialog) // NOTE: the ClassWizard will add DDX and DDV calls here //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CLogonDialog, CDialog) //{{AFX_MSG_MAP(CLogonDialog) ON_BN_CLICKED(IDC_LOG, OnLog)
11、 ON_BN_CLICKED(IDC_LOGCANCLE, OnLogcancle) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CLogonDialog message handlers void CLogonDialog::OnLog() { // TODO: Add your control notification handler code here CDatabase
12、db; db.OpenEx("DSN=Student"); CString type,key,user; GetDlgItemText(IDC_TYPE,type); GetDlgItemText(IDC_USER,user); GetDlgItemText(IDC_KEY,key); if(key.IsEmpty()||user.IsEmpty()||type.IsEmpty()) { AfxMessageBox("用户名或密码或类别不能为空!"); return; } CString strSQL; CRecordset rs(&db
13、); int i; if(type=="管理员") { strSQL.Format("select Aname from Admini where Anum='%s' and Akey='%s'",user,key); rs.Open(CRecordset::snapshot,strSQL); i=rs.GetRecordCount(); if(i==0) { AfxMessageBox("用户名或密码错误!"); SetDlgItemText(IDC_USER,""); SetDlgItemText(IDC_KEY,"")
14、 return; } rs.GetFieldValue("Aname",username); usernumber=user; SendMessage(WM_CLOSE); CAdmDialog adm; adm.DoModal(); } else if(type=="老师") { strSQL.Format("select Tname from Teacher where Tnum='%s' and Tkey='%s'",user,key); rs.Open(CRecordset::snapshot,strSQL);
15、 i=rs.GetRecordCount(); if(i==0) { AfxMessageBox("用户名或密码错误!"); SetDlgItemText(IDC_USER,""); SetDlgItemText(IDC_KEY,""); return; } rs.GetFieldValue("Tname",username); usernumber=user; SendMessage(WM_CLOSE); CTeacherDialog tea; tea.DoModal(); } else if(t
16、ype=="学生") { strSQL.Format("select Name from Student where Num='%s' and Skey='%s'",user,key); rs.Open(CRecordset::snapshot,strSQL); i=rs.GetRecordCount(); if(i==0) { AfxMessageBox("用户名或密码错误!"); SetDlgItemText(IDC_USER,""); SetDlgItemText(IDC_KEY,""); return; }
17、rs.GetFieldValue("Name",username); usernumber=user; SendMessage(WM_CLOSE); CStuDialog stu; stu.DoModal(); } else { AfxMessageBox("没有该类型!"); SetDlgItemText(IDC_USER,""); SetDlgItemText(IDC_KEY,""); SetDlgItemText(IDC_TYPE,""); return; } } void CLogonDialog::OnLo
18、gcancle() { // TODO: Add your control notification handler code here SendMessage(WM_CLOSE); } BOOL CLogonDialog::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here CComboBox* pComb = (CComboBox*)GetDlgItem(IDC_TYPE); ASSERT(pComb); pComb->SetCur
19、Sel(0); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } (2)登录界面与学生选课界面连接 #include "stdafx.h" #include "Student.h" #include "StuDialog.h" #include "StudentAdd.h" #include "LogonDialog.h" #include "SC
20、CCourseDialog.h" #include "SCCourseDialog.h" #include "ChangeKey.h" #include "CJDialog.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CStuDialog dialog
21、 CStuDialog::CStuDialog(CWnd* pParent /*=NULL*/) : CDialog(CStuDialog::IDD, pParent) { //{{AFX_DATA_INIT(CStuDialog) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } void CStuDialog::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pD
22、X); //{{AFX_DATA_MAP(CStuDialog) // NOTE: the ClassWizard will add DDX and DDV calls here //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CStuDialog, CDialog) //{{AFX_MSG_MAP(CStuDialog) ON_COMMAND(ID_MENUADDCOURSE, OnMenuaddcourse) ON_COMMAND(ID_MENURELOG, OnMenurelog) ON_COMMAND(ID_MENUS
23、TUEXIT, OnMenustuexit) ON_COMMAND(ID_MENUSEECHOICED, OnMenuseechoiced) ON_COMMAND(ID_MENUCHANGEKEY, OnMenuchangekey) ON_COMMAND(ID_MENUCJ, OnMenucj) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CStuDialog message hand
24、lers void CStuDialog::OnMenuaddcourse() { // TODO: Add your command handler code here CStudentAdd cs; cs.DoModal(); } void CStuDialog::OnMenurelog() { // TODO: Add your command handler code here SendMessage(WM_CLOSE); CLogonDialog cl; cl.DoModal(); } void CStuDialog::O
25、nMenustuexit() { // TODO: Add your command handler code here SendMessage(WM_CLOSE); } void CStuDialog::OnMenuseechoiced() { // TODO: Add your command handler code here CSCCCourseDialog scc; scc.DoModal(); } void CStuDialog::OnMenuchangekey() { // TODO: Add your command hand
26、ler code here CChangeKey cck; cck.DoModal(); } void CStuDialog::OnMenucj() { // TODO: Add your command handler code here CCJDialog ccj; ccj.DoModal(); } BOOL CStuDialog::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here CDatabase db; db
27、OpenEx("DSN=Student"); CRecordset rs(&db); CString strSQL; strSQL.Format("select Num,Name,Sdepar,Sclass,Sage,Sbit from Student where Num='%s'",usernumber); rs.Open(CRecordset::snapshot,strSQL); CString temp1,temp2,temp3,temp4,temp6,temp5; if(!rs.IsEOF()) { rs.GetFieldValue("
28、Num",temp1); rs.GetFieldValue("Name",temp2); rs.GetFieldValue("Sdepar",temp3); rs.GetFieldValue("Sclass",temp4); rs.GetFieldValue("Sbit",temp5); rs.GetFieldValue("Sage",temp6); } SetDlgItemText(IDC_XUEHAO,temp1); SetDlgItemText(IDC_XINGMING,temp2); SetDlgItemText(IDC_YUANXI
29、temp3); SetDlgItemText(IDC_BANJI,temp4); //SetDlgItemText(IDC_AGE,"男"); if (temp5=="0") { SetDlgItemText(IDC_AGE,"男"); } else { SetDlgItemText(IDC_AGE,"女"); } SetDlgItemText(IDC_XINGBIE,temp6); return TRUE; // return TRUE unless you set the focus to a control
30、 // EXCEPTION: OCX Property Pages should return FALSE } (3)此外还有登录界面与教师评分界面连接、登录界面与学生修改密码界面连接、与学生删除选修课程界面之间的连接等等。 四、 调试和运行 1、 数据源连接:添加数据源 2、 选择数据源以及连接成功 3、选课系统教师,学生,管理员登录界面 4、管理员查看课程信息 5、管理员修改学生信息 6、管理员添加课程 7、教师查看班上学生 8、教师对学生评分 9、学生登录 10、学生查看成绩 11、学生选课
31、 12、学生修改密码 五、总结(心得体会) 通过这数周的努力,这个学生选课管理系统终于完成了。想想当初,刚开时动工的时候,那真是毫无头绪,根本不知道从哪入手,首先对MFC的相关知识不是很了解,再者对Microsoft Access程序的操作不是很熟悉。但我们并没有灰心气馁。通过几天的学习,请教,上网咨询,慢慢的有了一些眉目,同时也感觉不再那么无助。 虽然,对Microsoft Access的了解还不是很充足,但一些简单的操作还是很令我们兴奋。我也深深体验到要熟练掌握一种操作软件的难度时那么的大。在制作过程中,有失败,有兴奋。但我们坚持了下来,遇到
32、困难我们没有灰心,首先的困难就是对信息的收集,对各个表建立属性的调查,通过书本上的介绍和网上的一些资料的启发,这个困难不再困扰着我们。但最大的困难就是对MFC的操作的学习,从一无所知到作出自己的程序,我们经历了许多的困难。在座的过程中我们一遍又一遍的建立工程项目,不对出错的时候又一遍又一遍的删除,还有一个困难就是对语句的输入,一个细微的细节都必须十分的注意,如果不认真思考决策,就会出现或大或小的错误,如果早期的错误隐藏下来,对后面的工作影响就会很大,甚至有时要推倒很多前面做的工作重来。再不懂的地方,上网查询,查看书籍,向同学请问,总之在做MFC的时候花费了我们很多的时间。有时候,我们自己觉得我们写的程序非常的正确,但是就是编译通不过,在查找错误的过程中,面临着否定自己的过程,非常的痛苦,而且由于自己的经验及各方面的能力的不足,所以进展很缓慢。最后还是限期的完成本次课程设计。 这次课程设计并不是完全由我们三个人完成的,虽然其他人都有不同的题目要求,但是我们还是相互讨论,相互学习,在自己一筹莫展的时候,其他同学有时候能够想出意想不到的方法!解决了我们的困难。总之,通过这个学生选课管理系统的设计,我感到受益匪浅。
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818