华南农业大学学生信息管理系统报告_第1页
华南农业大学学生信息管理系统报告_第2页
华南农业大学学生信息管理系统报告_第3页
华南农业大学学生信息管理系统报告_第4页
华南农业大学学生信息管理系统报告_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

程序设计实践训练课程设计报告姓 名: 李爽爽 华南农业大学工程学院1 摘 要本系统采用MFC编程,开发了一个应用于教学管理的学生信息管理系统。使用的控件主要有列表控件、编辑控件、按钮控件等。功能包括学籍管理、信息查询、教务信息维护和学生学分登记情况。其中,学生信息包括学生的姓名、性别、学号、所在班级、所修的总学分等。学生信息的查询,可以采用两种方式查询,学号查询和姓名查询,查询结果显示在编辑框中。学生信息的删除也可以采用学号和姓名查询,查询到后点击删除即可。输入完成后,可以将学生信息保存在txt文件中。同时可以点击导出学生信息查看保存的信息。另外,采用选择排序法对学生学分进行排序,排序后结果显示在列表框中,点击保存则可将修改保存到文件中。其特点在于VC编程实现了可视化,直观易操作,可适用于日常教学信息管理。创新编程方法在于使用了控件与变量相关联,调用更新函数实现变量与控件之间的传递,简化了编程步骤。目 录1.需求分析42.概要设计42.1 数据类型定义42.2 主程序流程53.程序实现84.运行结果145.讨论及进一步研究建议186.课程设计心得19Abstract20参考文献211.需求分析1.1设计学生信息管理系统的目的随着学校的规模不断过大,学生数量急剧增加,有关学生的各种信息量也成倍增加。面对庞大的信息量需要有学生信息管理系统来提高学生管理工作的效率。通过这样的系统可以做到信息的规范化管理、科学性统计和快速查询、修改、增加、删除、排序等,从而减少学校对学生管理方面的工作量。 本系统主要应用于学校学生信息管理,总体任务是实现学生信息关系的系统化、规范化和自动化,其主要任务是计算学生各种信息进行日常管理,如查询、修改、增加、删除、排序,针对这些要求设计了学生信息管理系统。1.2课程设计的要求学生信息管理系统课题只要的要求包括以下五方面:系统以菜单的方式工作、学生信息录入(学生信息用文件保存)、学生信息浏览功能、查询排序功能、学生的信息删除与修改功能2.概要设计本程序是一个基于MFC对话框的C+应用程序,程序功能主要在CTestDlg类下编辑,数据类型包括控件与变量相联系、结构体、指针等基本数据类型。采用的控件主要有列表控件、编辑控件、按钮控件。程序的基本流程就是:按下菜单键的进入系统,打开程序的对话框,在对话框中先点击初始化表格按钮,进入编辑模式,根据需要选择录入、查询、删除、保存、导出学生信息和成绩排序功能,下方的编辑菜单用于录入时的输入框和查询时的显示框。2.1 数据类型定义本程序是单文档应用程序,所以运行后,先出现的是菜单栏,故在菜单栏中编写进入系统菜单,类归属为CMagView类中。执行是在对话框中进行,先定义了一个对话框类CTestDlg,对话框中的控件都设置为对话框类,使各个按键相应程序能统一写在CTestDlg类中。通过设置编辑控件与变量联系,使输入控件和显示控件实现数据传递。控件变量类型统一采用CString类。输出到文件中的文件采用ofstream类型,从文件中读取的文件采用CFile类型。其他数据类型主要是一些基本的结构体、指针、布尔、整型等常用数据类型。程序中的全局变量为编辑框变量,定义方法如图一所示。其他变量的定义均在相应的按钮响应函数中。 图1 全局变量定义方式2.2 主程序流程2.2.1程序流程图 图2 程序主框图2.2.2主要功能模块流程图及算法查询学生信息算法先获取列表中的单元数目,将要查询的学生信息输入到编辑框中。通过判断编辑框中的变量是否和列表中的某个单元相等,确定是否找到学生信息。如果找到,则输出学生信息,否则,输出查找不到该学生。流程图如下: 图3 查询学生信息流程图删除学生信息算法将要删除的学生学号和姓名输入到编辑框中,遍历列表,通过判断编辑框对应的变量是否和列表中的某个单元相等,相等则删除该行,否则,输出查找不到该学生信息。 图4 删除学生信息流程图学生信息排序定义一个结构体数组,将列表中的数据输入到结构体数组中,每一行就是一个结构体。对每个结构体中的学分项进行选择排序法,如果前一个单元的学分比后一个大,则两个结构体交换,从而实现了数据在结构体中按学分从小到大排序。最后,再将交换后的结构体数据输入到列表中,更新显示。 图5 学分排序流程图3.程序实现3.1进入系统菜单 对话框显示模式有两种,一种是模态对话框,另外一种是非模态对话框,其区别在于,模式对话框运行时,代码会停止,直到对话框关闭,而非模式则在对话框出现时,代码仍然可以向下运行。由于我们需要在对话框上点击按钮启动响应代码,所以选用非模态对话框。本对话框的创建主要采用CDialog类下的Create函数,显示采用ShowWindow函数。为了保证对话框对象的生命周期和程序一致,采用动态分配内存的方法进行定义。进入系统菜单ID号定义为IDM_ENTER,即入口程序名为ONENTER。具体实现代码如下所示。void CMagView:OnEnter() / TODO: Add your command handler code hereCTestDlg *pDlg=new CTestDlg;/动态分配内存pDlg-Create(IDD_DIALOG1,this);/产生对话框pDlg-ShowWindow(SW_SHOW);/显示3.2初始化列表程序采用列表控件List Ctrol进行数据输入的显示,以便进一步把数据输入文件中保存。初始化列表按钮的ID号为IDC_INIT,故响应的程序名称为OnInit()。初始化设置采用m_list3.SetExtendedStyle()设置表格的分割,采用m_list.InsertColumn()函数设置表头和每个表格的长度、宽度。这里要注意的一点就是要将List Ctrol控件的属性设置为REPORT,否则无法进行列表功能。具体实现代码如下。void CTestDlg:OnInit() / TODO: Add your control notification handler code herem_list3.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT); /设置表头m_list3.InsertColumn(0,姓名,LVCFMT_LEFT,80,-1); m_list3.InsertColumn(1,性别,LVCFMT_LEFT,80,-1);m_list3.InsertColumn(2,班级,LVCFMT_LEFT,80,-1);m_list3.InsertColumn(3,学号,LVCFMT_LEFT,120,-1);m_list3.InsertColumn(4,出生年月,LVCFMT_LEFT,100,-1);m_list3.InsertColumn(5,手机号码,LVCFMT_LEFT,120,-1);m_list3.InsertColumn(6,已获学分,LVCFMT_LEFT,80,-1);MessageBox(系统提示:请先输入学生信息);/设置完毕后弹出提醒输入信息3.3录入学生信息程序采用按钮控件作为进入程序的命令控件,ID号码为IDC_INPUT,即执行的程序名称为OnInput()。控件与变量关联后,调用UpdateData(TRUE)实现控件的值传递给变量,从而能将我们输入到编辑框中的数值传递给相应变量。接着,调用m_list.InsertItem()开始一行的输入,使用m_list3.SetItemText()实现对同一行不同列内容的输入。最后要调用UpdateData(FALSE)实现数据从控件的数据显示。由于UpdateData()的默认参数是TRUE,所以要实现控件到变量的传递数据,可以不填写参数。具体的程序如下所示。void CTestDlg:OnInput() / TODO: Add your control notification handler code hereUpdateData();/数据由编辑框到变量 /填写列表的数据m_list3.InsertItem(0,m_Name);m_list3.SetItemText(0,1,m_Sex);m_list3.SetItemText(0,2,m_Class);m_list3.SetItemText(0,3,m_StudentNum);m_list3.SetItemText(0,4,m_BornDate);m_list3.SetItemText(0,5,m_PhoneNum);m_list3.SetItemText(0,6,m_Score);UpdateData(FALSE);/列表数据更新显示3.3查询学生信息采用按钮控件作为进入程序的命令控件,ID号码为IDC_SERACH,即执行的程序名称为OnSearch()。调用m_list3.GetItemCount()获取列表中的项数,循环遍历整个表格,当查找到学号或者姓名相同的时候,则改变编辑框对应变量的值,并且改变标志位temp的值。通过判断标志位来确定是否清空编辑框。最后调用UpdateData(FALSE)更新列表框的显示。具体实现代码如下所示。void CTestDlg:OnSearch() / TODO: Add your control notification handler code hereint i;BOOL temp=FALSE;/标志位,判断是否找了UpdateData(TRUE);for(i=0;im_list3.GetItemCount();i+) if(m_SearchName=m_list3.GetItemText(i,0)|m_SearchNum=m_list3.GetItemText(i,3) m_Name=m_list3.GetItemText(i,0); m_Sex=m_list3.GetItemText(i,1); m_Class=m_list3.GetItemText(i,2); m_StudentNum=m_list3.GetItemText(i,3); m_BornDate=m_list3.GetItemText(i,4); m_PhoneNum=m_list3.GetItemText(i,5); m_Score=m_list3.GetItemText(i,6); temp=TRUE; if(temp=FALSE)MessageBox(没有该学生记录); m_Name= ; m_Sex= ; m_Class= ; m_StudentNum= ; m_BornDate= ; m_PhoneNum= ; m_Score= ; UpdateData(FALSE);3.4删除学生信息采用按钮控件作为进入程序的命令控件,ID号码为IDC_DELETE,即执行的程序名称为OnDelete()。和查询学生信息一样,先获取列表中的项目数,遍历整个项目,当查询到学号或者姓名相同时,改变标志位findok的值,调用m_list.DeleteItem()删除该行。通过判断标志位的值是否被改变,确定是否弹出没有找到记录窗口。具体实现代码如下void CTestDlg:OnDelete() / TODO: Add your control notification handler code hereint i;BOOL findok=FALSE;/判断标志位UpdateData(TRUE);for(i=0;im_list3.GetItemCount();i+)/遍历列表 if(m_DeleteName=m_list3.GetItemText(i,0)|m_DeleteNum=m_list3.GetItemText(i,3) m_list3.DeleteItem(i);/删除 findok=TRUE;if(findok=FALSE)/判断标志位有没有被改变,确定是否找到该变量MessageBox(没有该学生记录);elseUpdateData(FALSE);/更新显示3.5学生成绩排序采用按钮控件作为进入程序的命令控件,ID号码为IDC_SORT,即执行的程序名称为OnSort()。定义一个学生信息结构体数组变量,先通过变量整个列表,将各个项目的值按一行赋给一个结构体的形式存放。之后,采用选择排序法,通过判断前一个结构体中的分数是否比后一个的大,来决定要不要交换两个结构体的值。从而实现了在结构体数组中,数据按分数从小到大存放。最后,通过遍历整个列表,把交换后的结构体数组中的值存储于列表中,调用UpdateData(FALSE)实现更新显示。具体代码如下。void CTestDlg:OnSort() / TODO: Add your control notification handler code here struct student/结构体数组 CString name; CString sex; CString clas; CString num; CString birthday; CString phone; CString score; ; int number,i,j; struct student stu; number=m_list3.GetItemCount(); struct student *stud=new struct studentnumber;/动态申请内存 for(i=0;inumber;i+)/将数据存储到结构体中 =m_list3.GetItemText(i,0); studi.sex=m_list3.GetItemText(i,1); studi.clas=m_list3.GetItemText(i,2); studi.num=m_list3.GetItemText(i,3); studi.birthday=m_list3.GetItemText(i,4); studi.phone=m_list3.GetItemText(i,5); studi.score=m_list3.GetItemText(i,6); for(i=0;inumber;i+)/选择排序法 for(j=i+1;jstudj.score) stu=studj; studj=studi; studi=stu; m_list3.DeleteAllItems(); for(i=0;inumber;i+)/将数据重新存储到列表中 m_list3.InsertItem(0,); m_list3.SetItemText(0,1,studi.sex); m_list3.SetItemText(0,2,studi.clas); m_list3.SetItemText(0,3,studi.num); m_list3.SetItemText(0,4,studi.birthday); m_list3.SetItemText(0,5,studi.phone); m_list3.SetItemText(0,6,studi.score); UpdateData(FALSE);/更新显示 3.6导出学生信息采用按钮控件作为进入程序的命令控件,ID号码为IDC_OUTPUT,即执行的程序名称为OnOutput()。初始化设置为Cfile类型,模式为读取。通过file.GetLength()获取文件的长度,同时申请对应的文件存放数组单元。最后调用MessageBox()将文件中的内容显示出来。具体代码如下。void CTestDlg:OnOutput() / TODO: Add your control notification handler code here CFile file(d:student.txt,CFile:modeRead);char *pBuf;DWORD dwFileLen;/int i;dwFileLen=file.GetLength();pBuf=new chardwFileLen+1;pBufdwFileLen=0;file.Read(pBuf,dwFileLen);file.Close();MessageBox(pBuf);3.7保存学生信息采用按钮控件作为进入程序的命令控件,ID号码为IDC_SAVE,即执行的程序名称为OnSave()。定义一个ofstream类型的file变量,通过遍历列表获取列表中的值,并存放在str中,通过filestr将数据输出到文件中,从而实现数据的保存。void CTestDlg:OnSave() / TODO: Add your control notification handler code hereCString str;int i,j;ofstream file(d:student.txt);int count=m_list3.GetItemCount();if(!file)MessageBox(文件不能打开);elsefor(i=0;icount;i+) for(j=0;j7;j+) str=m_list3.GetItemText(i,j); str+= ;filestr;fileendl;file.close();MessageBox(文件保存成功);4.运行结果4.1初始界面点击菜单栏中的进入系统,则会出现如图6所示界面。点击列表初始化,则会出现列表表头和提升输入学生信息窗口,如图7所示。 图6 初始化界面 图7 表格初始化后界面4.2 录入学生信息在下面的编辑框中输入学生信息,点击录入学生信息,即可把学生信息输入到列表中。点击保存学生信息,即可把输入的信息保存到存储的文件中。 图8 录入学生信息4.3 查询学生信息(1)查询学生号:输入学生学号,按下查询按钮。查询姓名:输入姓名,按下查询按钮。查询到的信息显示在编辑控件中,查询不到,则输出没有该学生记录。 图9 查询学生号界面图10 查询姓名界面 图11 查询不到学生界面4.4导出文件信息按下导出学生信息按钮,系统会打开之前保存的文件。如果文件为空或者不存在,则提示否则将文件信息显示出来。图12 导出学生信息4.5删除学生信息分为按学号删除和按姓名删除两种。先输入姓名或学号,点击删除学生信息按钮,列表上该学生信息就会被删除。此时要点击保存学生信息,使存储文件中也同样删除了该学生信息。 图13 按学生号删除 图14 按姓名删除5、保存文件点击保存按钮,列表中的数值会自动保存到“student.txt”文件中,并弹出文件保存成功提示框。图15 保存学生信息5.讨论及进一步研究建议本作品采用MFC编程,特点在于实现了可视化,可以直观地进行操作,相对于用C开发的程序,有比较明显的优势。采用变量与控件相关联的方法,使程序的实现上更为简洁。文件的输入保存方面,采用了ofstream和CFile两种不同的方式,实现了实时保存的查看功能。对学生信息进行排序,使用了结构体数组作为数据交换的桥梁,通过用结构体数组获取列表的值,对结构体数组进行排序,再讲结构体数组存储在列表中实现。排序算法采用选择排序法,清晰易懂。查询、和删除采用遍历列表,可以实现对学生信息的所有变量的查询,易于应用于用户需求。6.课程设计心得在本设计中,我们从不会MFC编程到可以做出一个正常工作的程序,确实有很大收获。基本每一个部分都有遇到问题。一开始,不知道怎么建立编程框架、建立新的类、怎么写菜单、按钮入口程序,就只能对着教程不停的看书,琢磨。等到基本理论学完后,开始编程。最初遇到的问题就是录入数据后无法显示,后来发现是没有调用更新显示函数。接着就是不知道怎么将数据显示到列表中,明明有按照规定的函数格式写,但却一直没法显示。经过查找大量资料后发现,是列表的属性没有设置成REPORT。本程序有一个不完善的地方就是没有调用子对话框进行,这个问题我尝试了挺长时间,由于对MFC整个消息响应机制不是很了解,所以一直没办法解决。在这次编程设计中,给我们最大的收获就是,边学边做是可以完成的,而且是最锻炼人的。虽然程序有不完美的地方,但也是我们用了5天精心雕琢出来的。对自己在本次设计中的学习态度,我感到非常满意。路漫漫其修远兮,吾将上下而求索!学以致用之路,我们会坚持着更好地走下去。Student Information Management SystemAbstractThe system uses the MFC programming, developed a teaching management applied to student information management system. The main control uses a list of controls, edit controls, buttons and other controls. Features include school management, information inquiry, academic credit information maintenance and student registration. Among them, the student information including the students name, sex, school, where classes, such as the repair of the total credits. Student information query, the query can be used in two ways, student number and the name of the query, the query results are displayed in the edit box. Delete student information can also be used to learn numbers and names, the query to click delete. When youre finished, you can save the student information in txt fi

温馨提示

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

评论

0/150

提交评论