1《可视化程序设计》课程设计专业:班级:指导老师:姓名:2目录一、需求分析...........................................................................................................................31.1任务需求.........................................................................................................................31.2功能需求.........................................................................................................................31.3界面需求.........................................................................................................................3二、概要设计...........................................................................................................................42.1流程图.............................................................................................................................42.2数据库E-R图..................................................................................................................4三、详细设计...........................................................................................................................43.1模块分析.........................................................................................................................53.2实现方法(相关代码及界面).....................................................................................5四、调试分析.........................................................................................................................154.1稳定性测试...................................................................................................................154.2界面分析.......................................................................................................................15五、课设总结.........................................................................................................................153一、需求分析任务需求题目要求完成一个学生成绩的信息管理系统,要求能进行对学生成绩的录入、修改和删除,能查询学生的成绩,同时可以对学生的成绩进行排序。在VisualC++环境下,使用MFC和DBCS进行开发。系统必须是基于单文档的程序框架或者是基于对话框的应用程序,包含菜单控件,使用数据库进行数据的存储操作,可用Access数据库。系统的使用,必须有权限的现在,即只有管理员才能登陆系统。功能需求系统有以下几个功能性要求:1.学生成绩的录入:能够将学生的成绩信息进行录入,考虑到学生的添加问题,加入新学生的添加功能。2.学生成绩的修改:满足老师对学生成绩的修改,包括对数学、英语、语文成绩的修改。3.学生成绩的删除:能够删除指定学生的指定课程成绩信息的删除,将要删除的成绩的信息进行清零。4.学生成绩的查询:输入学号,查询对应学生的全部信息。5.学生成绩的排序:为了更好的了解学生的学习情况,要求可以对学生的成绩进行排序查询,直观了解班级学生的学习状态。包含四种排序:根据数学成绩的排序,根据英语成绩的排序,根据语文成绩的排序,根据总分的排序。6.权限验证:用户使用该系统,首先进行验证,使用管理员账号和密码,才能登入系统。界面需求1.登陆界面:有登陆账号和密码的输入框,如果输入账号或密码,提醒用户输入相应的信息。登陆失败,提醒用户登陆失败。2.主界面:包含菜单、工具栏以及状态栏。通过登陆,主界面可以直接显示学生信息,同时,通过使用工具栏的向后按钮,显示数据库后一个同学的信息。3.修改界面:一个输入框,通过输入学号,然后查询该学号的信息,并在界面显示该学生的信息,学生学号及姓名显示框,不可编辑。相应成绩的编辑框可用,用于修改成绩。如果,未先进行查询,点击修改按钮,提示先查询。4.增加界面:输入信息,然后点击添加按钮,进行信息的提示,如果已存在该学号,提示存在该学号的学生,请更正。5.删除界面:先通过查询,显示该学号的学生的信息,然后通过点击复选框,选择要删除的学生的成绩,点击删除,删除对应的成绩记录。6.查询界面:输入学号,查询相应的学生信息,如果不存在,提示不存在该学号的学生。显示学生信息的编辑框,全都不可编辑。7.排序界面:使用ListControl空间,显示排序情况,通过下拉列表来选择排序的条件,点击排序,将排序好的信息输出在ListControl。4二、概要设计流程图开始输入管理员账号密码是否管理员否主界面功能选择修改界面增加界面删除成绩界面查询界面排序界面是返回结束退出返回返回数据库E-R图管理员学生管理账号密码学号姓名数学成绩英语成绩语文成绩n1三、详细设计5模块分析1.登录模块输入用户名和密码,然后跟数据库比较是否存在该管理员账户密码,不存在提示账户密码错误,存在直接登入系统,显示主页面。2.增加模块输入学生的信息,点击添加按钮,首先查询数据库是否已存在该学号,如果存在,提示修改学号,否则,将数据加入到数据库里面。3.修改模块首先查询,如果存在该同学,显示该同学的所有信息。如果不存在该同学,提示信息。在没查询或者不存在该同学的情况下,点击修改按钮,提示先查询。如果存在该同学且查询了,可以修改成绩,然后点击修改,将数据更新到数据库里面。4.删除模块首先查询,如果存在该同学,显示该同学的所有信息。如果不存在该同学,提示信息。在没查询或者不存在该同学的情况下,点击删除按钮,提示先查询。如果存在该同学且查询了,勾选想删除的成绩,通过点击删除按钮,将数据更新到数据库里面。5.查询模块输入学号,然后连接数据库,查询是否存在,如果不存在,提示没有该学生。否则,将该学生的信息显示出来。6.排序模块首先,选择排序的依据,然后点击排序按钮,连接数据库,将数据库取出来存到一个临时的数组里,通过冒泡排序,将里面的数据从大到小进行排序,然后输出到界面。实现方法(相关代码及界面)1.登录模块的实现方法:登录界面展示:输入信息不足:6代码的实现:信息输入不足的提示:if(m_login_username==){MessageBox(L请输入用户名!);return;}if(m_login_pwd==){MessageBox(L请输入密码!);return;}判断用户是否存在:CStringtest;CDatabaser1;if(!r1.Open(_T(student),FALSE,FALSE,_T(ODBC;),FALSE))MessageBox(LNodsn);else{CRecordsetr2(&r1);if(!r2.Open(CRecordset::dynaset,LSelect*fromAccountwhereUsername='+m_login_username+L'))MessageBox(LNoopen);else{if(r2.GetRecordCount()==0)MessageBox(L不存在此管理员);else{r2.GetFieldValue(_T(Password),test);if(m_login_pwd==test)CDialog::OnOK();else{7MessageBox(L密码错误,请重新输入,L密码错误,MB_OK|MB_ICONWARNING);//提示密码错误}}}}退出按钮的OnCancel()方法:voidCLogin::OnCancel(void){exit(0);}2.增加模块的实现方法:增加界面展示:已存在学号的情况:增加部分的代码:UpdateData(true);CDatabasedb;CRecordsetrd(&db);db.Open(_T(student),FALSE,FALSE,_T(ODBC;),FALSE);rd.Open(CRecordset::dynaset,LSelect*fromScorewhereSno='+m_sno+L');if(rd.GetRecordCount()==0){CDatabasedb;db.Open(_T(student),FALSE,FALSE,_T(ODBC;),FALSE);8CStringstrSql;strSql.Format(LInsertintoScorevalues('%s','%s','%s','%s','%s'),m_sno,m_sname,m_math,m_english,m_chinese);db.ExecuteSQL(strSql);db.Close();MessageBox(L增加成功);}else{MessageBox(L已存在该学号的学生,请更换学号!);return;}m_sno=;m_sname=;m_math=;m_english=;m_chinese=;UpdateData(false);信息输入不足提示的代码实现:if(m_sno==){MessageBox(L请先输入学号!);return;}if(m_sname==){MessageBox(L请先输入姓名!);return;}3.修改模块的实现方法:界面展示:未先查询:9修改代码:UpdateData(true);if(m_sno==){MessageBox(L请先输入学生学号查询信息!);return;}CDatabasedb;db.Open(_T(student),FALSE,FALSE,_T(ODBC;),FALSE);CStringstrSql;strSql.Format(LUpdateScoresetMath='%s',English='%s',Chinese='%s'whereSno='+m_sno+L',m_math,m_english,m_chinese);db.ExecuteSQL(st