学生管理系统实验报告

上传人:泽*** 文档编号:74845087 上传时间:2022-04-14 格式:DOCX 页数:29 大小:234.14KB
返回 下载 相关 举报
学生管理系统实验报告_第1页
第1页 / 共29页
学生管理系统实验报告_第2页
第2页 / 共29页
学生管理系统实验报告_第3页
第3页 / 共29页
点击查看更多>>
资源描述
下载可编辑学生学籍成绩管理系统:学生的信息包括:姓名 、学号 、性别 、班级 、院系 ;学生的成绩信息包括英语、数学 、程序设计及体育成绩等各门课的成绩;定义如下类 ,并建立一个文本文件Student.dat ,用于存储学生、课程与成绩的相关信息。文件格式自己定义。学生类 CStudent (姓名 、学号 、性别、班级 、院系 );课程类 CLesson( 课程名称 、课程开设时间);成绩类 CGrade( 学号、课程名称 、成绩 )要求实现如下功能:在对话框上能够添加、删除 、编辑和查询课程信息;在对话框上能够添加、删除 、编辑和查询学生信息;在对话框上能够增加、删除 、编辑和查询学生的选课信息;在对话框上能够录入和编辑学生某门课的考试成绩;在对话框上能够按照学生姓名查询学生的选课信息和选课成绩,并统计出其总成绩、平均成绩 ,计算出该学生的成绩的标准差;显示全班的学生成绩排名 。统计出各班的平均成绩,并进行排名 。_1n平均分:xxin i 11n_标准差: s( xix)2n i 1问题描述 :要求编写编写一个学生的学籍成绩管理系统,要实现能添加、 删除 、编辑和查询课程信.专业 .整理 .下载可编辑息、基本信息和选课信息。能录入和编辑学生的考试成绩还能查询已选的课程,总成绩 ,平均成绩还有标准差并排名。问题分析 :本题重点考察的内容是数据信息的处理问题,其中包括学生数据的传递、改变 ,学生信息的存储 、读取 。 能够进行计算每次输入的学生信息进行计算总分,平均分等 ,还要对所有的学生成绩进行处理排名。同时通过对话框对各种不同数据编辑,又能够将它们相关联是本题的一个主要难点。又因为要用到不同的查询方式,所以还需要需要不同的输出对话框 。 总之该题的对数据处理要求挺高,综合性很强 。【算法设计 】设计思想 :本题我认为关键地方在于通过三个类来传递数据的实现和对话框的设计,这题用到得对话框较多 ,变量名称选取要特别注意。还有就是对话上的按钮了,按钮满足题目整体要求的层面上 ,并且还要达到最简,不要浪费 ,也不能缺少功能,能将每次输入的学生信息进行数学处理 。 一个对话框要多用途,通过添加信息然后能够查询,尽量减少对话框的数量,以减少对话框之间数据的传递,这样可以极大优化程序。设计表示 :.专业 .整理 .下载可编辑【调试报告 】实现:.专业 .整理 .下载可编辑调试过程中问题1.因为选课是动态的,而且一门课对应一门成绩,所以成绩也是个随着课程的添加而添加,删除而删除 ,所以都用 STL中的 list 来装 。这样把学生的所有信息都封装在一个类中更具有整体的效果,也有更加明确的思路。这里实现的要先输入班号,然后在内存中一个一个学生去遍历,找到班号相同的学生,然后对这些学生进行排序,再显示出来 。 然而开始做时对话框很多很繁琐,可以设计子对话框来进行整合各个类的不同功能,使界面更简洁干净 。2.该题遇到了较为严重的内存泄露问题:没有找出问题代码的所在,但是通过debug文件夹中 “学生管理 .exe”程序还是可以运行.专业 .整理 .下载可编辑然而会弹出警告窗口:.专业 .整理 .下载可编辑点击确认后还是会弹出我做的界面:.专业 .整理 .下载可编辑【附录】源程序清单 :学生所有信息的类class CAllInforpublic:CAllInfor();CAllInfor(CStudent &a);virtual CAllInfor();CStudent m_Stu;list m_Lessen;list m_Grade;double GetAveGrade();三大类对学生信息处理1.学生基本信息的对话框类添加功能实现void CBStudentInfor:OnAdd()/ TODO: Add your control notification handler code here UpdateData(TRUE);.专业 .整理 .下载可编辑list:iterator p;bool judge = true;for ( p = m_AllInformation.begin();p != m_AllInformation.end();+p)if (p-m_Stu.m_School_Id = m_SchoolId)judge = false;if ( judge)CStudent Stu(m_Name,m_Sex,m_Class,m_SchoolId,m_College);CAllInfor obj(Stu);m_AllInformation.push_back(obj);for (int i = 0;i+)if (m_list.GetItemText(i,0)=)int nRow = m_list.InsertItem(i,m_Name); /插入行m_list.SetItemText(nRow, 1,m_Sex); /设置数据m_list.SetItemText(nRow, 2,m_Class);m_list.SetItemText(nRow, 3,m_SchoolId);.专业 .整理 .下载可编辑m_list.SetItemText(nRow, 4,m_College);break;elseMessageBox( 学号重复 ,请重新输入 !);m_SchoolId =;m_Sex = ;m_Name = ;m_College = ;m_Class = ;UpdateData(FALSE);编辑功能实现void CBStudentInfor:OnEdit()/ TODO: Add your control notification handler code here UpdateData(TRUE);list:iterator p;.专业 .整理 .下载可编辑CString sname = m_list.GetItemText(m_SelectRow,0);for (p = m_AllInformation.begin();p != m_AllInformation.end();+p)if (p-m_Stu.m_Name = sname)p-m_Stu.m_Name = m_Name;p-m_Stu.m_Sex = m_Sex;p-m_Stu.m_Class = m_Class;p-m_Stu.m_School_Id = m_SchoolId;p-m_Stu.m_College = m_College;break;for (int j = 0;j 5;j+)switch ( j)case 0:m_list.SetItemText(m_SelectRow, 0,m_Name);break;case 1:m_list.SetItemText(m_SelectRow, 1,m_Sex);break;case 2:m_list.SetItemText(m_SelectRow, 2,m_Class);.专业 .整理 .下载可编辑break;case 3:m_list.SetItemText(m_SelectRow, 3,m_SchoolId);break;case 4:m_list.SetItemText(m_SelectRow, 4,m_College);break;m_SchoolId =;m_Sex = ;m_Name = ;m_College = ;m_Class = ;UpdateData(FALSE);删除功能实现 :void CBStudentInfor:OnDelete()/ TODO: Add your control notification handler code here CString sname = m_list.GetItemText(m_SelectRow,0); list:iterator p;for (p = m_AllInformation.begin();p != m_AllInformation.end();+p).专业 .整理 .下载可编辑if (p-m_Stu.m_Name = sname)m_AllInformation.erase(p);break;m_list.DeleteItem(m_SelectRow);m_SchoolId =;m_Sex = ;m_Name = ;m_College = ;m_Class = ;UpdateData(FALSE);文件读取实现 (从父对话框读到子对话框)BOOL CBStudentInfor:OnInitDialog()CDialog:OnInitDialog();/ TODO: Add extra initialization hereDWORD styles = LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES;ListView_SetExtendedListViewStyleEx(m_list.m_hWnd, styles, styles );.专业 .整理 .下载可编辑m_list.InsertColumn(0,姓名 ,LVCFMT_CENTER,70);m_list.InsertColumn(1,性别 ,LVCFMT_CENTER,70);m_list.InsertColumn(2,班级 ,LVCFMT_CENTER,70);m_list.InsertColumn(3,学号 ,LVCFMT_CENTER,100);m_list.InsertColumn(4,学院 ,LVCFMT_CENTER,70);CMy520Dlg *pParent = (CMy520Dlg*)GetParent();m_AllInformation.clear();m_AllInformation = pParent-m_AllInformation;list:iterator p;int i;for (i = 0,p = m_AllInformation.begin();p != m_AllInformation.end();+p,+i)int nRow = m_list.InsertItem(i,p-m_Stu.m_Name);m_list.SetItemText(nRow,1,p-m_Stu.m_Sex);m_list.SetItemText(nRow,2,p-m_Stu.m_Class);m_list.SetItemText(nRow,3,p-m_Stu.m_School_Id);m_list.SetItemText(nRow,4,p-m_Stu.m_College);return TRUE;/ return TRUE unless you set the focus to a control/ EXCEPTION: OCX Property Pages should return FALSE2.选课和成绩信息:.专业 .整理 .下载可编辑添加的实现oid CLessen_Grade:OnAdd()/ TODO: Add your control notification handler code here UpdateData(TRUE);for (int i = 0;i+)if (m_list.GetItemText(i,0)=)int nRow = m_list.InsertItem(i,m_Class);/插入行m_list.SetItemText(nRow,1,m_Time);/设置数据m_list.SetItemText(nRow,2,m_Grade);UpdateData(FALSE);break;list:iterator p;for (p = m_AllInformation.begin();p != m_AllInformation.end();+p)if (m_SchoolId = p-m_Stu.m_School_Id)CGrade obj1(m_SchoolId,m_Class,m_Grade);.专业 .整理 .下载可编辑p-m_Grade.push_back(obj1);CLessen obj2(m_Class,m_Time);p-m_Lessen.push_back(obj2);m_Class = ;m_Grade = ;/ m_SchoolId = ;m_Time = ;UpdateData(FALSE);编辑的实现 :void CLessen_Grade:OnEdit()/ TODO: Add your control notification handler code here UpdateData(TRUE);for (int j = 0;j 3;j+)switch ( j)case 0:m_list.SetItemText(m_SelectRow, 0,m_Class);.专业 .整理 .下载可编辑break;case 1:m_list.SetItemText(m_SelectRow, 1,m_Time);break;case 2:m_list.SetItemText(m_SelectRow, 2,m_Grade);break;m_Class = ;m_Grade = ;m_Time = ;UpdateData(FALSE);void CLessen_Grade:OnAdd()/ TODO: Add your control notification handler code here UpdateData(TRUE);for (int i = 0;i+)if (m_list.GetItemText(i,0)=)int nRow = m_list.InsertItem(i,m_Class);/插入行m_list.SetItemText(nRow,1,m_Time);/设置数据.专业 .整理 .下载可编辑m_list.SetItemText(nRow,2,m_Grade);UpdateData(FALSE);break;list:iterator p;for (p = m_AllInformation.begin();p != m_AllInformation.end();+p)if (m_SchoolId = p-m_Stu.m_School_Id)CGrade obj1(m_SchoolId,m_Class,m_Grade);p-m_Grade.push_back(obj1);CLessen obj2(m_Class,m_Time);p-m_Lessen.push_back(obj2);UpdateData(FALSE);删除的实现void CLessen_Grade:OnDelete2()/ TODO: Add your control notification handler code here.专业 .整理 .下载可编辑m_list.DeleteItem(m_SelectRow);m_Class = ;m_Grade = ;m_Time = ;UpdateData(FALSE);查询的实现void CLessen_Grade:OnSearch()/ TODO: Add your control notification handler code here UpdateData(TRUE);list:iterator p1; int a;bool judge = true;for (p1 = m_AllInformation.begin();p1 != m_AllInformation.end();+p1)if (p1-m_Stu.m_School_Id = m_SchoolId)judge = false;list:iterator p2;for(p2=(p1-m_Grade).begin(),a=0;p2!=(p1-m_Grade).end();+p2,+a).专业 .整理 .下载可编辑CString li=p2-m_Lessen;int nRow = m_list.InsertItem(a,p2-m_Lessen);/插入行m_list.SetItemText(nRow,2,p2-m_Grade);/设置数据list:iterator p3;for (p3 = (p1-m_Lessen).begin();p3 != (p1-m_Lessen).end(); +p3)if (p2-m_Lessen = p3-m_Lessen)m_list.SetItemText(a,1,p3-m_LessenTime);break;if ( judge)MessageBox( 没有此学号的学生,请重新输入 !);m_SchoolId = ;UpdateData(false);.专业 .整理 .下载可编辑对话框的传值BOOL CLessen_Grade:OnInitDialog()CDialog:OnInitDialog();/ TODO: Add extra initialization hereDWORD styles = LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES;ListView_SetExtendedListViewStyleEx(m_list.m_hWnd, styles, styles );m_list.InsertColumn(0,课程 ,LVCFMT_CENTER,100);m_list.InsertColumn(1,上课时间 ,LVCFMT_CENTER,100);m_list.InsertColumn(2,成绩 ,LVCFMT_CENTER,75);CMy520Dlg *pParent = (CMy520Dlg*)GetParent();m_AllInformation.clear();m_AllInformation = pParent-m_AllInformation;return TRUE;/ return TRUE unless you set the focus to a control/ EXCEPTION: OCX Property Pages should return FALSE3.班级信息对话框的传值:BOOL CClassSort:OnInitDialog()CDialog:OnInitDialog();.专业 .整理 .下载可编辑/ TODO: Add extra initialization hereDWORD styles = LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES;ListView_SetExtendedListViewStyleEx(m_list.m_hWnd, styles, styles );m_list.InsertColumn(0,姓名 ,LVCFMT_CENTER,70);m_list.InsertColumn(1,平均成绩 ,LVCFMT_CENTER,100);m_list.InsertColumn(2,排名 ,LVCFMT_CENTER,70);CMy520Dlg *pParent = (CMy520Dlg*)GetParent();m_AllInformation.clear();m_AllInformation = pParent-m_AllInformation;return TRUE;/ return TRUE unless you set the focus to a control/ EXCEPTION: OCX Property Pages should return FALSEvoid CClassSort:InsertSort(ClassSort a, int n)ClassSort temp;int i,j;for (i = 0;i 0 & temp.aveGrade aj - 1.aveGrade).专业 .整理 .下载可编辑aj = aj - 1;j-;aj = temp;void CClassSort:OnOK()/ TODO: Add extra validation here UpdateData(TRUE);int i,j; list:iterator p;for (p = m_AllInformation.begin();p != m_AllInformation.end();+p)if (p-m_Stu.m_Class = m_Class_Num)ClassSort temp(p-m_Stu.m_Name,p-GetAveGrade();Stu.push_back(temp);ClassSort *pSort = new ClassSortStu.size();.专业 .整理 .下载可编辑list:iterator ptr;for (i = 0,ptr = Stu.begin();ptr != Stu.end();+ptr,+i)pSorti = *ptr;InsertSort(pSort,Stu.size();for ( j = 0;j Stu.size();+j)m_list.InsertItem(j,pSortj.Name);CString aveGrd,Amount;aveGrd.Format(%f,pSortj.aveGrade);m_list.SetItemText(j,1,aveGrd);Amount.Format(%d,j+1);m_list.SetItemText(j,2,Amount);.专业 .整理 .下载可编辑【运行结果 】弹出基本父对话框,选择要查询的信息查询学生信息子对话框:.专业 .整理 .下载可编辑添加我的信息下面出现我的信息.专业 .整理 .下载可编辑还可以进行编辑和删除操作,这里就不做过多演示查询班级信息子对话框:因为还没有输入成绩所以是一堆乱码.专业 .整理 .下载可编辑选课与成绩子窗口:先添加课程与成绩(一定要一起添加一起删除!不然会出现有成绩没课程的逻辑错误!).专业 .整理 .下载可编辑这时候进行班级信息查询才会出现本题总体上讲还算比较成功,就是内存泄露了比较麻烦,老师如果要看工程的话,请编译后在 debug文件中直接打开“学生管理 .exe ”就行了 !.专业 .整理 .下载可编辑.专业 .整理 .
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!