课程设计报告_学生学籍管理系统.doc_第1页
课程设计报告_学生学籍管理系统.doc_第2页
课程设计报告_学生学籍管理系统.doc_第3页
课程设计报告_学生学籍管理系统.doc_第4页
课程设计报告_学生学籍管理系统.doc_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录1 设计内容与要求211 设计目的与要求212 设计环境22 需求分析321 系统功能要求设计322 系统模块设计323 数据字典42.3.1 数据项42.3.2 数据结构52.3.3数据流53 概念结构设计6数据抽象与局部视图设计63.1学生基本信息与课程信息视图6根据学生与课程的关系可设计如下关系图:63.2 专业、教师及院系信息视图64 详细设计74.1用户登录7(初始User Name为的evil 密码123)74.2界面总览94.3学生信息管理104.4学生成绩录入124.5学生奖惩处理154.6学生信息查询194.7学生奖惩查询214.8成绩打印报表245.学生学籍管理系统使用说明书256 设计体会与建议267 参考文献26学生学籍管理系统1 设计内容与要求11 设计目的与要求 随着社会的发展,基本上所有的具有一定数量数据的企事业单位或机关部门都开始使用计算机数据库来做管理。当然几乎所有学校也都已经在使用计算机管理数据的机制,大大减少了学校学籍管理的工作量。该课程设计要求设计一个学籍管理的数据库系统,数据库中要求包含学生的基本信息,学校所有专业信息,学校教师信息以及课程设置的信息。同时还要设计它们之间的关系,如学生与课程关系和学生的成绩等,最后还要对一些数据进行查询,如查询学生成绩的各种集合等。我们通过该课程设计,应该达到的目的是把数据库理论知识更加的巩固加深,加强动手能力与实践能力,学以致用,与现实生活中的应用充分的结合起来。12 设计环境在Windows 环境下利用ODBC,使用SqlServer2000作为数据库管理系统对数据进行管理与维护,使用VC+6.0为前台设计平台。2 需求分析21 系统功能要求设计 使得学生的学籍管理工作更加清晰、条理化、自动化。 建立学生档案,设计学生入学、管理及查询界面。 容易地完成学生信息的查询、更新、修改等操作。 对于学生成绩管理模块,设计学生各学期、学年成绩输入及查询界面,能更加容易的求得学生的平均成绩、最高分、最低分等,并能在Excel中以报表的形式显示并打印出来。 实现了在校期间对学生表现的跟踪记录,奖惩事件的记录,和处理的结果。如:综合测评加分,警告,留校察看,全校表扬等等。22 系统模块设计 学籍管理系统大体可以分成四大模块如下图所示, 首先是学生的基本信息模块,里面应该包含学生的各方面的基本信息;再者便是学生成绩管理模块, 在该模块中应该包含有对学生成绩信息的查询和处理,如平均成绩、最好成绩、最差成绩以及不及格学生的统计等功能模块;再其次还有院系、教师、课程等相关信息的模块;最后是系统模块。图 2-1 系统模块图23 数据字典2.3.1 数据项 数据项是数据库的关系中不可再分的数据单位,下表分别列出了数据的名称(即码)、注释、数据类型、长度、取值范围和是否是主码。表 2.1 数据项列表名称注释数据类型长度最小值最大值主要的班级varchar(50)50FALSE学号唯一标识学生的信息integerTRUE专业号varchar(50)50FALSE姓名varchar(50)50FALSE性别Varchar(50)50FALSE年龄smallintFALSE家庭住址Varchar(50)50FALSE联系电话varchar(50)50FALSE课程名称varchar(50)50TRUE考试类型varchar(50)50FALSE考试时间Datatime8FALSE考试分数 float FALSE奖惩事件varchar(100)100TRUE处理结果varchar(100)100FALSE备注varchar(100)100FALSE奖惩时间Datatime8FALSE2.3.2 数据结构数据结构是为反映数据之间的组合关系,即一个数据结构可以由若干个数据项组成,也可以由若干个数据结构组成,或由若干个数据项和数据结构组成。本学籍管理系统的数据组成可根据系统模块的划分来设计,即分为四个数据结构,分别如下表所示。表 2.2 数据结构清单数据结构名含义说明组成学生基本信息学生基本信息的描述班级+学号+院系代号+专业号+姓名+性别+出生年月+籍贯+民族+家庭住址+入学时间+政治面貌+身份证号+联系电话+备注;成绩管理学生成绩的管理与查询管理描述学号+课程号+分数;平均分数+最高分+最低分;学生相关信息学生的奖惩情况学生在校毕业情况奖惩时间+奖惩事件+处理情况+备注;在校/毕业;系统管理对使用用户的管理授权管理添加删除用户名+密码2.3.3数据流数据流是数据结构在系统内传输的路径。表2-3是描述数据流的数据流定义表,其中包含了数据流名、说明、数据流组成、流量与备注等,表1-4是系统中的数据流描述,其中包括输入数据流、输出数据流等的描述。表 2.3 数据流定义表编号数据流名说明数据流组成流量备注L01学生基本信息学生的所有基本信息学生基本信息结构L02学生成绩所有学生的成绩成绩管理结构 L03分类信息同班级学生名单部分学生基本信息结构L04各门成绩学生的平均成绩(包括所有学生和同班级学生的成绩情况)成绩管理结构L05科目成绩学生的单科成绩成绩管理结构L06教师、专业、院系信息学生相关信息L07查询结果L04 | L053 概念结构设计数据抽象与局部视图设计3.1学生基本信息与课程信息视图 图3-1 学生基本信息视图 图3-2 课程信息视图 根据学生与课程的关系可设计如下关系图:图3-3 学生与课程关系视图3.2 专业、教师及院系信息视图 3-4 专业、教师及院系信息视图院系、教师以及专业的关系图如下:图3-5 院系教师以及专业关系图4 详细设计4.1用户登录(初始User Name为的evil 密码123)相应代码: CLogin:CLogin(CWnd* pParent /*=NULL*/): CDialog(CLogin:IDD, pParent)/AFX_DATA_INIT(CLogin)m_Name = _T();m_PassWord = _T();/AFX_DATA_INITm_Num = 0;void CLogin:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CLogin)DDX_Text(pDX, IDC_EDIT1, m_Name);DDX_Text(pDX, IDC_EDIT2, m_PassWord);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CLogin, CDialog)/AFX_MSG_MAP(CLogin)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CLogin message handlersvoid CLogin:OnOK() / TODO: Add extra validation hereUpdateData(TRUE);if(m_Name.IsEmpty() | m_PassWord.IsEmpty()MessageBox(用户名或密码不能为空);return;m_Num+;CString sql;sql.Format(select * from tb_user where username = %s and pwd = %s,m_Name,m_PassWord);m_LoginSet = new CLoginSet(&(CMystudentsysApp*)AfxGetApp()-m_DB);if(!m_LoginSet-Open(AFX_DB_USE_DEFAULT_TYPE,sql)AfxMessageBox(tb_studentinfo 表打开失败!);if(m_LoginSet-GetRecordCount()!=0)CDialog:OnOK();elseif(m_Num =5)MessageBox(密码5次不正确);CDialog:OnCancel();elseMessageBox(用户名或密码不正确);m_Name = ;m_PassWord = ;UpdateData(FALSE);if(m_LoginSet-IsOpen()m_LoginSet-Close();delete m_LoginSet; 4.2界面总览4.3学生信息管理相应代码:/ CInfoStudent message handlersBOOL CInfoStudent:OnInitDialog() CDialog:OnInitDialog();/ TODO: Add extra initialization hereif(!m_ToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD|WS_VISIBLE|CBRS_TOP|CBRS_GRIPPER|CBRS_TOOLTIPS|CBRS_SIZE_DYNAMIC)|!m_ToolBar.LoadToolBar(IDR_TOOLBAR_subjectinfo)TRACE0(_T(创建工具条失败n);return FALSE;RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);m_ToolBar.SetButtonStyle(0,TBBS_CHECKBOX);m_ToolBar.SetButtonStyle(1,TBBS_CHECKBOX);m_ToolBar.SetButtonStyle(2,TBBS_CHECKBOX);m_ToolBar.SetButtonStyle(3,TBBS_CHECKBOX);m_ToolBar.SetButtonStyle(4,TBBS_CHECKBOX);m_ToolBar.SetButtonStyle(5,TBBS_CHECKBOX);m_ToolBar.SetButtonStyle(6,TBBS_CHECKBOX);/ TODO: Add extra initialization here/RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);CString sqlStr;sqlStr=SELECT * FROM tb_studentinfo;mystudentset = new CStudentinfoset(&(CMystudentsysApp*)AfxGetApp()-m_DB);if(!mystudentset-Open(AFX_DB_USE_DEFAULT_TYPE,sqlStr) /打开数据表AfxMessageBox(tb_studentinfo表打开失败!);return TRUE; / return TRUE unless you set the focus to a control / EXCEPTION: OCX Property Pages should return FALSEvoid CInfoStudent:Onsubjectinfotoolbarsave() / TODO: Add your command handler code hereUpdateData(TRUE);if(m_studentaddr.IsEmpty()|m_studentclass.IsEmpty()|m_studentname.IsEmpty()|m_studentphone.IsEmpty()|m_studentsex.IsEmpty()|m_studentid.IsEmpty()AfxMessageBox(请输入相应的数据!);return ;mystudentset-AddNew(); /调用添加记录的函数处理mystudentset-m_studentid = m_studentid;mystudentset-m_addr = m_studentaddr;mystudentset-m_age = m_studentage;mystudentset-m_class = m_studentclass;mystudentset-m_studentname = m_studentname;mystudentset-m_phone = m_studentphone; mystudentset-m_sex = m_studentsex;mystudentset-Update();mystudentset-Requery();AfxMessageBox(成功保存数据!);DisplayRecord(); /更新显示4.4学生成绩录入相应代码:/ CExaminfo_submarkdlg message handlersvoid CExaminfo_submarkdlg:Oninputsavemarks() UpdateData(TRUE); /读入输入的资料if(m_studentid.IsEmpty()|m_examsubject.IsEmpty()|m_examkind.IsEmpty()AfxMessageBox(请输入相应的数据!);return;CString sqlStr_findid;sqlStr_findid=SELECT * FROM tb_studentinfo WHERE tb_studentinfo.studentid=+m_studentid+ ;myfindset_id = new CStudentinfoset(&(CMystudentsysApp*)AfxGetApp()-m_DB);if(!myfindset_id-Open(AFX_DB_USE_DEFAULT_TYPE,sqlStr_findid)AfxMessageBox(tb_studentinfo表打开失败!);if(myfindset_id-GetRecordCount()=0)AfxMessageBox(没有此学生,请确认学号后再输入!); if(myfindset_id-IsOpen()myfindset_id-Close();delete myfindset_id;return;if(myfindset_id-IsOpen()myfindset_id-Close();delete myfindset_id; CString sql;CString year,month,day;year = m_examdate.Format(%Y);month = m_examdate.Format(%m);day = m_examdate.Format(%d);sql.Format(SELECT * FROM tb_examinfo_sub WHERE tb_examinfo_sub.studentid= %s and code = %s and kind = %s and year(examdate) = %s andmonth(examdate) = %s and day(examdate) = %s,m_studentid,m_examsubject,m_examkind,year,month,day);myexamsubmarkset_findsame = new CExaminfo_submarkset(&(CMystudentsysApp*)AfxGetApp()-m_DB);if(!myexamsubmarkset_findsame-Open(AFX_DB_USE_DEFAULT_TYPE,sql)AfxMessageBox(tb_examinfo_sub表打开失败!);if(myexamsubmarkset_findsame-GetRecordCount()!=0)AfxMessageBox(已经有此记录,不能重复输入!);if(myexamsubmarkset_findsame-IsOpen() myexamsubmarkset_findsame-Close();return;if(myexamsubmarkset_findsame-IsOpen() myexamsubmarkset_findsame-Close();delete myexamsubmarkset_findsame;myexamsubmarkset-AddNew(); /调用添加记录的函数处理myexamsubmarkset-m_studentid = m_studentid; /对应变量更新myexamsubmarkset-m_code = m_examsubject; myexamsubmarkset-m_grade = m_submark; myexamsubmarkset-m_kind = m_examkind;myexamsubmarkset-m_examdate = m_examdate;myexamsubmarkset-Update();myexamsubmarkset-Requery();DisplayRecord(); /更新显示bool CExaminfo_submarkdlg:DisplayRecord()if(myexamsubmarkset-IsEOF()&myexamsubmarkset-IsBOF()m_studentid = ; m_submark = 0.0f; m_examsubject = ; m_examkind = ; elseif(myexamsubmarkset-IsBOF() /移动到了开头,就向后移动myexamsubmarkset-MoveNext();else /否则前移if(myexamsubmarkset-IsEOF()myexamsubmarkset-MovePrev(); GetCurrentTime(m_examdate);m_studentid = ;m_submark = 0.0f;m_examsubject = ;m_examkind = ;UpdateData(FALSE);/显示更新return TRUE;BOOL CExaminfo_submarkdlg:OnInitDialog() CDialog:OnInitDialog();/ TODO: Add extra initialization hereCString sqlStr;sqlStr = SELECT * FROM tb_examinfo_sub; myexamsubmarkset = new CExaminfo_submarkset(&(CMystudentsysApp*)AfxGetApp()-m_DB);if(!myexamsubmarkset-Open(AFX_DB_USE_DEFAULT_TYPE,sqlStr) /打开数据表AfxMessageBox(tb_examinfo_sub表打开失败!);m_examdate = CTime:GetCurrentTime();UpdateData(FALSE);return TRUE; 4.5学生奖惩处理相应代码:CInput_regbreakdlg:CInput_regbreakdlg(CWnd* pParent /*=NULL*/): CDialog(CInput_regbreakdlg:IDD, pParent)/AFX_DATA_INIT(CInput_regbreakdlg)m_regstudentid = _T();m_regresult = _T();m_regmemo = _T();m_regdate = 0;m_regcontent = _T();/AFX_DATA_INITvoid CInput_regbreakdlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CInput_regbreakdlg)DDX_Text(pDX, IDC_regbreakstudentid, m_regstudentid);DDX_Text(pDX, IDC_regbreak_result, m_regresult);DDX_Text(pDX, IDC_regbreak_memo, m_regmemo);DDX_DateTimeCtrl(pDX, IDC_regbreak_date, m_regdate);DDX_Text(pDX, IDC_regbreak_content, m_regcontent);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CInput_regbreakdlg, CDialog)/AFX_MSG_MAP(CInput_regbreakdlg)ON_BN_CLICKED(IDC_Btn_inputregbreak, OnBtninputregbreak)ON_WM_CLOSE()/AFX_MSG_MAPEND_MESSAGE_MAP()/ CInput_regbreakdlg message handlersBOOL CInput_regbreakdlg:OnInitDialog() CDialog:OnInitDialog();CString sqlStr;sqlStr=SELECT * FROM tb_regbreakinfo;myregbreakset = new CRegbrreakinfoset(&(CMystudentsysApp*)AfxGetApp()-m_DB);if(!myregbreakset-Open(AFX_DB_USE_DEFAULT_TYPE,sqlStr) /打开数据表AfxMessageBox(tb_regbreakinfo表打开失败!);m_regdate = CTime:GetCurrentTime();UpdateData(FALSE);return TRUE; bool CInput_regbreakdlg:DisplayRecord()if(myregbreakset-IsEOF()&myregbreakset-IsBOF()m_regstudentid = ; m_regresult = ; m_regmemo = ; m_regcontent = ; elseif(myregbreakset-IsBOF() /移动到了开头,就向后移动myregbreakset-MoveNext();else /否则前移if(myregbreakset-IsEOF()myregbreakset-MovePrev();m_regstudentid = ;m_regresult = ;m_regmemo = ;m_regcontent = ;UpdateData(FALSE);return TRUE;void CInput_regbreakdlg:OnBtninputregbreak() / TODO: Add your control notification handler code hereUpdateData(TRUE);if(m_regstudentid.IsEmpty()|m_regresult.IsEmpty()|m_regcontent.IsEmpty()AfxMessageBox(请输入相应的数据!);return;CString sqlStr_findid;sqlStr_findid=SELECT * FROM tb_studentinfo WHERE tb_studentinfo.studentid=+m_regstudentid+;myfindset_id = new CStudentinfoset(&(CMystudentsysApp*)AfxGetApp()-m_DB);if(!myfindset_id-Open(AFX_DB_USE_DEFAULT_TYPE,sqlStr_findid)AfxMessageBox(tb_studentinfo表打开失败!);if(myfindset_id-GetRecordCount()=0)AfxMessageBox(没有此学生,请确认学号后再输入!);if(myfindset_id-IsOpen()myfindset_id-Close();return;if(myfindset_id-IsOpen()myfindset_id-Close();delete myfindset_id; /调用添加记录的函数处理myregbreakset-AddNew(); myregbreakset-m_studentid = m_regstudentid; /对应变量更新myregbreakset-m_breakcontent = m_regcontent; myregbreakset-m_memo = m_regmemo; myregbreakset-m_handleresult = m_regresult; myregbreakset-m_breaktime = m_regdate;myregbreakset-Update();myregbreakset-Requery();DisplayRecord(); /更新显示4.6学生信息查询相应代码:void CStudentinfo_finddlg:Onfindstudentinfo() / TODO: Add your control notification handler code hereUpdateData(TRUE);CString sqlStr;sqlStr=SELECT * FROM tb_studentinfo WHERE studentid=+m_studentid+ or studentname=+m_studentname+;/sqlStr+=m_studentid;/sqlStr+=;mystudentset = new CStudentinfoset(&(CMystudentsysApp*)AfxGetApp()-m_DB);if(!mystudentset-Open(AFX_DB_USE_DEFAULT_TYPE,sqlStr)AfxMessageBox(tb_studentinfo表打开失败!);DisplayRecord();if(mystudentset-IsOpen()mystudentset-Close();delete mystudentset;bool CStudentinfo_finddlg:DisplayRecord()/*if(mystudentset-IsBOF()mystudentset-MoveNext();elseif(mystudentset-IsEOF()mystudentset-MovePrev();*/m_List.DeleteAllItems();CString addr,sage,sclass;CString name,phone,sex;CString date;int age; name = mystudentset-m_studentname;addr = mystudentset-m_addr;age = mystudentset-m_age;sclass = mystudentset-m_class;phone = mystudentset-m_phone; sex = mystudentset-m_sex;sage.Format(%d,age);m_List.InsertItem(0,name.GetBuffer(50); m_List.SetItemText(0,1,sex.GetBuffer(50);m_List.SetItemText(0,2,sage.GetBuffer(50);m_List.SetItemText(0,3,addr.GetBuffer(50); m_List.SetItemText(0,4,phone.GetBuffer(50);m_List.SetItemText(0,5,sclass.GetBuffer(50);UpdateData(FALSE);return TRUE;4.7学生奖惩查询相应代码/ CRegbreak_finddlg message handlersvoid CRegbreak_finddlg:OnBtnfindregbreakinfo() / TODO: Add your control notification handler code hereUpdateData(TRUE);CString sqlStr;sqlStr=SELECT * FROM tb_regbreakinfo WHERE studentid=+m_studentid+ or studentname=+m_studentname+;myregbreakset_find = new CRegbrreakinfoset(&(CMystudentsysApp*)AfxGetApp()-m_DB);if(!myregbreakset_find-Open(AFX_DB_USE_DEFAULT_TYPE,sqlStr)AfxMessageBox(tb_regbreakinfo表打开失败!);if(myregbreakset_find-GetRecordCount() = 0)AfxMessageBox(此学生没有违规记录!);return;DisplayRecord();if(myregbreakset_find-IsOpen()myregbreakset_find-Close();delete myregbreakset_find;bool CRegbreak_finddlg:DisplayRecord() if(myregbreakset_find-IsEOF() & myregbreakset_find-IsBOF()m_studentid = ; m_regresult = ; m_regmemo = ;GetCurrentTime(m_regdate); m_regcontent = ;elseif(myregbreakset_find-IsBOF() /移动到了开头,就向后移动myregbreakset_find-MoveNext();else /否则前移if(myregbreakset_find-IsEOF()myregbreakset_find-MovePrev();CString regcontent;CString regresult;CString regmemo,regdate;CTime tDate;int i=0;while(!myregbreakset_find-IsEOF()regcontent = myregbreakset_find-m_breakcontent; regresult = myregbreakset_find-m_handleresult; regmemo = myregbreakset_find-m_memo; tDate = myregbreakset_find-m_breaktime; regdate = tDate.Format(%m/%d/%y); m_list2.InsertItem(i,regcontent.GetBuffer(50);m_list2.SetItemText(i,1,regresult.GetBuffer(50); m_list2.SetItemText(i,2,regmemo.GetBuffer(50); regdate.Format(%d-%d-%d,myregbreakset_find-m_breaktime.GetYear(),myregbreakset_find-m_breaktime.GetMonth(),myregbreakset_find-m_breaktime.GetDay();m_list2.SetItemText(i,3,regdate.GetBuffer(50);myregbreakset_find-MoveNext();i+;myregbreakset_find-MoveFirst();m_studentid = myregbreakset_find-m_studentid; m_regresult = myregbreakset_find-m_handleresult;m_regmemo = myregbreakset_find-m_memo;m_regdate = myregbreakset_find-m_breaktime; m_regcontent = myregbreakset_find-m_breakcontent;UpdateData(FALSE);/显示更新return TRUE;void CRegbreak_finddlg:OnClose() / TODO: Add your message handler code here and/or call defaultCDialog:OnClose();BOOL CRegbreak_finddlg:OnInitDialog() CDialog:OnInitDialog();/ TODO: Add extra initialization herem_list2.InsertColumn(0,违规内容);m_list2.InsertColumn(1,处理结果);m_list2.InsertColumn(2,备注);m_list2.InsertColumn(3,时间);RECT rect;m_list2.GetWindowRect(&rect);int wid = rect.right - rect.left;m_list2.SetColumnWidth(0,wid/4);m_list2.SetColumnWidth(1,wid/4); m_list2.SetColumnWidth(2,wid/4);m_list2.SetColumnWidth(3,wid/4);m_list2.SetExtendedStyle(LVS_EX_FULLROWSELECT);return TRUE;4.8成绩打印报表代码略篇幅有限 以上仅提供部分详细设计代码 其他部分详见源程序5.学生学籍管理系统使用说明书配置源程序配置ODBC运行本实例需要配置用户DSN,在ODBC数据源管理器中配置用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论