




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学生学籍成绩管理系统:学生的信息包括:姓名、学号、性别、班级、院系;学生的成绩信息包括英语、数学、程序设计及体育成绩等各门课的成绩;定义如下类,并建立一个文本文件Student.dat,用于存储学生、课程与成绩的相关信息。文件格式自己定义。学生类CStudent(姓名、学号、性别、班级、院系);课程类CLesson(课程名称、课程开设时间);成绩类CGrade(学号、课程名称、成绩)要求实现如下功能:在对话框上能够添加、删除、编辑和查询课程信息;在对话框上能够添加、删除、编辑和查询学生信息;在对话框上能够增加、删除、编辑和查询学生的选课信息;在对话框上能够录入和编辑学生某门课的考试成绩;在对话框上能够按照学生姓名查询学生的选课信息和选课成绩,并统计出其总成绩、平均成绩,计算出该学生的成绩的标准差;显示全班的学生成绩排名。统计出各班的平均成绩,并进行排名。问题描述:要求编写编写一个学生的学籍成绩管理系统,要实现能添加、删除、编辑和查询课程信息、基本信息和选课信息。能录入和编辑学生的考试成绩还能查询已选的课程,总成绩,平均成绩还有标准差并排名。问题分析:本题重点考察的内容是数据信息的处理问题,其中包括学生数据的传递、改变,学生信息的存储、读取。能够进行计算每次输入的学生信息进行计算总分,平均分等,还要对所有的学生成绩进行处理排名。同时通过对话框对各种不同数据编辑,又能够将它们相关联是本题的一个主要难点。又因为要用到不同的查询方式,所以还需要需要不同的输出对话框。总之该题的对数据处理要求挺高,综合性很强。【算法设计】设计思想:本题我认为关键地方在于通过三个类来传递数据的实现和对话框的设计,这题用到得对话框较多,变量名称选取要特别注意。还有就是对话上的按钮了,按钮满足题目整体要求的层面上,并且还要达到最简,不要浪费,也不能缺少功能,能将每次输入的学生信息进行数学处理。一个对话框要多用途,通过添加信息然后能够查询,尽量减少对话框的数量,以减少对话框之间数据的传递,这样可以极大优化程序。设计表示:【调试报告】实现:调试过程中问题1.因为选课是动态的,而且一门课对应一门成绩,所以成绩也是个随着课程的添加而添加,删除而删除,所以都用STL中的list来装。这样把学生的所有信息都封装在一个类中更具有整体的效果,也有更加明确的思路。这里实现的要先输入班号,然后在内存中一个一个学生去遍历,找到班号相同的学生,然后对这些学生进行排序,再显示出来。然而开始做时对话框很多很繁琐,可以设计子对话框来进行整合各个类的不同功能,使界面更简洁干净。2.该题遇到了较为严重的内存泄露问题:没有找出问题代码的所在,但是通过debug文件夹中“学生管理.exe”程序还是可以运行然而会弹出警告窗口:点击确认后还是会弹出我做的界面:【附录】源程序清单:学生所有信息的类class CAllInfor public: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 hereUpdateData(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 hereUpdateData(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 hereCString 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 hereUpdateData(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 hereUpdateData(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 hereUpdateData(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 herem_list.DeleteItem(m_SelectRow);m_Class = ;m_Grade = ;m_Time = ;UpdateData(FALSE);查询的实现void CLessen_Grade:OnSearch() / TODO: Add your control notification handler code hereUpdateData(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.av
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年市场营销调研面试技巧数据收集与分析模拟题及解析
- 2025年物资储备仓库规划与建设知识测试题库及答案
- 电.钳工安全知识培训
- 2025年人力资源经理应聘考试题库及答案解析
- 神经外科医生的日常工作
- 甲状腺肿瘤护理课件
- 甲状腺炎课件
- 用药预防用药程序课件
- 江苏南京2020-2024年中考满分作文64篇
- 用电应急安全知识培训课件
- 人民医院心血管外科临床技术操作规范2023版
- 2023年江苏小高考历史试卷
- 主要组织相容性复合体及其编码分子
- 优化物理教学策略的思考(黄恕伯)
- 中国移动-安全-L1,2,3(珍藏版)
- 2017年全国大学生数学建模A题
- 2023年专升本计算机题库含答案专升本计算机真题
- scratch3.0编程校本课程
- GB/T 1685-2008硫化橡胶或热塑性橡胶在常温和高温下压缩应力松弛的测定
- GB/T 14825-1993农药可湿性粉剂悬浮率测定方法
- 固定资产清查工作报告
评论
0/150
提交评论