还剩19页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
程序设计实践训练课程设计报告姓名李爽爽华南农业大学工程学院摘要本系统采用MFC编程,__了一个应用于教学管理的学生信息管理系统使用的控件主要有列表控件、编辑控件、按钮控件等功能包括学籍管理、信息查询、教务信息维护和学生学分登记情况其中学生信息包括学生的姓名、性别、学号、所在班级、所修的总学分等学生信息的查询,可以采用两种方式查询,学号查询和姓名查询,查询结果显示在编辑框中学生信息的删除也可以采用学号和姓名查询,查询到后__删除即可输入完成后,可以将学生信息保存在___文件中同时可以__导出学生信息查看保存的信息另外,采用选择排序法对学生学分进行排序,排序后结果显示在列表框中,__保存则可将修改保存到文件中其特点在于VC编程实现了可视化,直观易操作,可适用于日常教学信息管理创新编程方法在于使用了控件与变量相关联,调用更新函数实现变量与控件之间的传递,简化了编程步骤目录
1.需求分析
42.概要设计
42.1数据类型定义
42.2主程序流程
53.程序实现
84.运行结果
145.讨论及进一步研究建议
186.课程设计心得19Abstract20____
212.概要设计
42.1数据类型定义
42.2主程序流程
53.程序实现
84.运行结果
145.讨论及进一步研究建议
186.课程设计心得19Abstract20____
211.需求分析
1.1设计学生信息管理系统的目的随着学校的规模不断过大,学生数量急剧增加,有关学生的各种信息量也成倍增加面对庞大的信息量需要有学生信息管理系统来提高学生管理工作的效率通过这样的系统可以做到信息的规范化管理、科学性统计和快速查询、修改、增加、删除、排序等,从而减少学校对学生管理方面的工作量本系统主要应用于学校学生信息管理,总体任务是实现学生信息关系的系统化、规范化和自动化,其主要任务是计算学生各种信息进行日常管理,如查询、修改、增加、删除、排序,针对这些要求设计了学生信息管理系统
1.2课程设计的要求学生信息管理系统课题只要的要求包括以下五方面系统以菜单的方式工作、学生信息录入(学生信息用文件保存)、学生信息浏览功能、查询排序功能、学生的信息删除与修改功能
2.概要设计本程序是一个基于MFC对话框的C++应用程序,程序功能主要在CTestDlg类下编辑,数据类型包括控件与变量相__、结构体、指针等基本数据类型采用的控件主要有列表控件、编辑控件、按钮控件程序的基本流程就是按下菜单键的进入系统,打开程序的对话框,在对话框中先__初始化表格按钮,进入编辑模式,根据需要选择录入、查询、删除、保存、导出学生信息和成绩排序功能,__的编辑菜单用于录入时的输入框和查询时的显示框
2.1数据类型定义本程序是单文档应用程序,所以运行后,先出现的是菜单栏,故在菜单栏中编写进入系统菜单,类归属为C__gView类中执行是在对话框中进行,先定义了一个对话框类CTestDlg对话框中的控件都设置为对话框类,使各个按键相应程序能统一写在CTestDlg类中通过设置编辑控件与变量__,使输入控件和显示控件实现数据传递控件变量类型统一采用CString类输出到文件中的文件采用ofstream类型,从文件中读取的文件采用CFile类型其他数据类型主要是一些基本的结构体、指针、布尔、整型等常用数据类型程序中的全局变量为编辑框变量,定义方法如图一所示其他变量的定义均在相应的按钮响应函数中图1全局变量定义方式
2.2主程序流程
2.
2.1程序流程图图2程序主框图
2.
2.2主要功能模块流程图及算法
2.
2.
2.1查询学生信息算法先获取列表中的单元数目,将要查询的学生信息输入到编辑框中通过判断编辑框中的变量是否和列表中的某个单元相等,确定是否找到学生信息如果找到,则输出学生信息,否则,输出查找不到该学生流程图如下图3查询学生信息流程图
2.
2.
2.2删除学生信息算法将要删除的学生学号和姓名输入到编辑框中,遍历列表,通过判断编辑框对应的变量是否和列表中的某个单元相等,相等则删除该行,否则,输出查找不到该学生信息图4删除学生信息流程图
2.
2.
2.3学生信息排序定义一个结构体数组,将列表中的数据输入到结构体数组中,每一行就是一个结构体对每个结构体中的学分项进行选择排序法,如果前一个单元的学分比后一个大,则两个结构体交换,从而实现了数据在结构体中按学分从小到大排序最后,再将交换后的结构体数据输入到列表中,更新显示图5学分排序流程图
3.程序实现
3.1进入系统菜单对话框显示模式有两种,一种是模态对话框,另外一种是非模态对话框,其区别在于,模式对话框运行时,代码会停止,直到对话框关闭,而非模式则在对话框出现时,代码仍然可以向下运行由于我们需要在对话框上__按钮启动响应代码,所以选用非模态对话框本对话框的创建主要采用CDialog类下的Create函数显示采用ShowWindow函数为了保证对话框对象的生命周期和程序一致,采用动态分配内存的方法进行定义进入系统菜单ID号定义为IDM_ENTER,即入口程序名为ONENTER具体实现代码如下所示voidC__gView::OnEnter{//TODO:Addyourcom__ndhandlercodehereCTestDlg*pDlg=newCTestDlg;//动态分配内存pDlg-CreateIDD_DIALOG1this;//产生对话框pDlg-ShowWindowSW_SHOW;//显示}
3.2初始化列表程序采用列表控件ListCtrol进行数据输入的显示,以便进一步把数据输入文件中保存初始化列表按钮的ID号为IDC_INIT,故响应的程序名称为OnInit初始化设置采用m_list
3.SetExtendedStyle设置表格的分割,采用m_list.InsertColumn函数设置表头和每个表格的长度、宽度这里要注意的一点就是要将ListCtrol控件的属性设置为REPORT否则无法进行列表功能具体实现代码如下voidCTestDlg::OnInit{//TODO:Addyourcontrolnotificationhandlercodeherem_list
3.SetExtendedStyleLVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT;//设置表头m_list
3.InsertColumn0姓名LVCFMT_LEFT80-1;m_list
3.InsertColumn1性别LVCFMT_LEFT80-1;m_list
3.InsertColumn2班级LVCFMT_LEFT80-1;m_list
3.InsertColumn3学号LVCFMT_LEFT120-1;m_list
3.InsertColumn4出生年月LVCFMT_LEFT100-1;m_list
3.InsertColumn5__号码LVCFMT_LEFT120-1;m_list
3.InsertColumn6已获学分LVCFMT_LEFT80-1;MessageBox系统提示请先输入学生信息;//设置完毕后弹出提醒输入信息}
3.3录入学生信息程序采用按钮控件作为进入程序的命令控件,ID号码为IDC_INPUT,即执行的程序名称为OnInput控件与变量关联后,调用UpdateDataTRUE实现控件的值传递给变量,从而能将我们输入到编辑框中的数值传递给相应变量接着,调用m_list.InsertItem()开始一行的输入,使用m_list
3.SetItemText实现对同一行不同列内容的输入最后要调用UpdateDataFALSE实现数据从控件的数据显示由于UpdateData的默认参数是TRUE,所以要实现控件到变量的传递数据,可以不填写参数具体的程序如下所示voidCTestDlg::OnInput{//TODO:AddyourcontrolnotificationhandlercodehereUpdateData;//数据由编辑框到变量//填写列表的数据m_list
3.InsertItem0m_Name;m_list
3.SetItemText01m____;m_list
3.SetItemText02m_Class;m_list
3.SetItemText03m_StudentNum;m_list
3.SetItemText04m_BornDate;m_list
3.SetItemText05m_PhoneNum;m_list
3.SetItemText06m_Score;UpdateDataFALSE;//列表数据更新显示}
3.3查询学生信息采用按钮控件作为进入程序的命令控件,ID号码为IDC_SERACH,即执行的程序名称为OnSearch调用m_list
3.GetItemCount获取列表中的项数,循环遍历整个表格,当查找到学号或者姓名相同的时候,则改变编辑框对应变量的值,并且改变标志位temp的值通过判断标志位来确定是否清空编辑框最后调用UpdateDataFALSE更新列表框的显示具体实现代码如下所示voidCTestDlg::OnSearch{//TODO:Addyourcontrolnotificationhandlercodehereinti;BOOLtemp=FALSE;//标志位,判断是否找了UpdateDataTRUE;fori=0;im_list
3.GetItemCount;i++{ifm_SearchName==m_list
3.GetItemTexti0|m_SearchNum==m_list
3.GetItemTexti3{m_Name=m_list
3.GetItemTexti0;m____=m_list
3.GetItemTexti1;m_Class=m_list
3.GetItemTexti2;m_StudentNum=m_list
3.GetItemTexti3;m_BornDate=m_list
3.GetItemTexti4;m_PhoneNum=m_list
3.GetItemTexti5;m_Score=m_list
3.GetItemTexti6;temp=TRUE;}}iftemp==FALSE{MessageBox没有该学生记录;m_Name=;m____=;m_Class=;m_StudentNum=;m_BornDate=;m_PhoneNum=;m_Score=;}UpdateDataFALSE;}
3.4删除学生信息采用按钮控件作为进入程序的命令控件,ID号码为IDC_DELETE,即执行的程序名称为OnDelete和查询学生信息一样,先获取列表中的项目数,遍历整个项目,当查询到学号或者姓名相同时,改变标志位findok的值,调用m_list.DeleteItem删除该行通过判断标志位的值是否被改变,确定是否弹出没有找到记录窗口具体实现代码如下voidCTestDlg::OnDelete{//TODO:Addyourcontrolnotificationhandlercodehereinti;BOOLfindok=FALSE;//判断标志位UpdateDataTRUE;fori=0;im_list
3.GetItemCount;i++//遍历列表{ifm_DeleteName==m_list
3.GetItemTexti0|m_DeleteNum==m_list
3.GetItemTexti3{m_list
3.DeleteItemi;//删除findok=TRUE;}}iffindok==FALSE//判断标志位有没有被改变,确定是否找到该变量MessageBox没有该学生记录;elseUpdateDataFALSE;//更新显示}
3.5学生成绩排序采用按钮控件作为进入程序的命令控件,ID号码为IDC_SORT,即执行的程序名称为OnSort定义一个学生信息结构体数组变量,先通过变量整个列表,将各个项目的值按一行赋给一个结构体的形式存放之后,采用选择排序法,通过判断前一个结构体中的分数是否比后一个的大,来决定要不要交换两个结构体的值从而实现了在结构体数组中,数据按分数从小到大存放最后,通过遍历整个列表,把交换后的结构体数组中的值存储于列表中,调用UpdateDataFALSE实现更新显示具体代码如下voidCTestDlg::OnSort{//TODO:Addyourcontrolnotificationhandlercodeherestructstudent//结构体数组{CStringname;CString___;CStringclas;CStringnum;CStringbirthday;CStringphone;CStringscore;};intnumberij;structstudentstu;number=m_list
3.GetItemCount;structstudent*stud=newstructstudent[number];//动态申请内存fori=0;inumber;i++//将数据存储到结构体中{stud[i].name=m_list
3.GetItemTexti0;stud[i].___=m_list
3.GetItemTexti1;stud[i].clas=m_list
3.GetItemTexti2;stud[i].num=m_list
3.GetItemTexti3;stud[i].birthday=m_list
3.GetItemTexti4;stud[i].phone=m_list
3.GetItemTexti5;stud[i].score=m_list
3.GetItemTexti6;}fori=0;inumber;i++//选择排序法{forj=i+1;jnumber;j++{ifstud[i].scorestud[j].score{stu=stud[j];stud[j]=stud[i];stud[i]=stu;}}}m_list
3.DeleteAllItems;fori=0;inumber;i++//将数据重新存储到列表中{m_list
3.InsertItem0stud[i].name;m_list
3.SetItemText01stud[i].___;m_list
3.SetItemText02stud[i].clas;m_list
3.SetItemText03stud[i].num;m_list
3.SetItemText04stud[i].birthday;m_list
3.SetItemText05stud[i].phone;m_list
3.SetItemText06stud[i].score;UpdateDataFALSE;//更新显示}}
3.6导出学生信息采用按钮控件作为进入程序的命令控件,ID号码为IDC_OUTPUT,即执行的程序名称为OnOutput初始化设置为Cfile类型,模式为读取通过file.GetLength获取文件的长度,同时申请对应的文件存放数组单元最后调用MessageBox将文件中的内容显示出来具体代码如下voidCTestDlg::OnOutput{//TODO:AddyourcontrolnotificationhandlercodehereCFilefiled:\\student.___CFile::modeRead;char*pBuf;DWORDdwFileLen;//inti;dwFileLen=file.GetLength;pBuf=newchar[dwFileLen+1];pBuf[dwFileLen]=0;file.ReadpBufdwFileLen;file.Close;MessageBoxpBuf;}
3.7保存学生信息采用按钮控件作为进入程序的命令控件,ID号码为IDC_S__E,即执行的程序名称为OnS__e定义一个ofstream类型的file变量,通过遍历列表获取列表中的值,并存放在str中,通过filestr将数据输出到文件中,从而实现数据的保存voidCTestDlg::OnS__e{//TODO:AddyourcontrolnotificationhandlercodehereCStringstr;intij;ofstreamfiled:\\student.___;intcount=m_list
3.GetItemCount;if!file{MessageBox文件不能打开;}else{fori=0;icount;i++{forj=0;j7;j++{str=m_list
3.GetItemTextij;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.___”文件中,并弹出文件保存成功提示框图15保存学生信息
5.讨论及进一步研究建议本作品采用MFC编程,特点在于实现了可视化,可以直观地进行操作,相对于用C__的程序,有比较明显的优势采用变量与控件相关联的方法,使程序的实现上更为简洁文件的输入保存方面,采用了ofstream和CFile两种不同的方式,实现了实时保存的查看功能对学生信息进行排序,使用了结构体数组作为数据交换的桥梁,通过用结构体数组获取列表的值,对结构体数组进行排序,再讲结构体数组存储在列表中实现排序算法采用选择排序法,清晰易懂查询、和删除采用遍历列表,可以实现对学生信息的所有变量的查询,易于应用于用户需求
6.课程设计心得在本设计中,我们从不会MFC编程到可以做出一个正常工作的程序,确实有很大收获基本每一个部分都有遇到问题一开始,不知道怎么建立编程框架、建立新的类、怎么写菜单、按钮入口程序,就只能对着教程不停的看书,琢磨等到基本理论学完后,开始编程最初遇到的问题就是录入数据后无法显示,后来发现是没有调用更新显示函数接着就是不知道怎么将数据显示到列表中,明明有按照规定的函数格式写,但却一直没法显示经过查找大量资料后发现,是列表的属性没有设置成REPORT本程序有一个不完善的地方就是没有调用子对话框进行,这个问题我尝试了挺长时间,由于对MFC整个消息响应机制不是很了解,所以一直没办法解决在这次编程设计中,给我们最大的收获就是,边学边做是可以完成的,而且是最锻炼人的虽然程序有不__的地方,但也是我们用了5天精心雕琢出来的对自己在本次设计中的学习态度,我感到非常满意路漫漫其修远兮,吾将上下而求索!学以致用之路,我们会坚持着更好地走下去StudentInfor__tion__nagementSystemAbstractThesystemusestheMFCprogrammingdevelopedateaching__nagementappliedtostudentinfor__tion__nagementsystem.The__incontrolusesalistofcontrolseditcontrolsbuttonsandothercontrols.Featuresincludeschool__nagementinfor__tioninquiryacademiccreditinfor__tion__intenan__andstudentregistration.Amongthemthestudentinfor__tionincludingthestudentsname___schoolwhereclassessuchastherepairofthetotalcredits.Studentinfor__tionquerythequerycanbeusedintwowaysstudentnumberandthenameofthequerythequeryresultsaredisplayedintheeditbox.Deletestudentinfor__tioncanalsobeusedtolearnnumbersandnamesthequerytoclickdelete.Whenyourefinishedyoucans__ethestudentinfor__tionin___file.ClickExportstudentinfor__tionandcanviews__edmessages.InadditiontheuseofcreditsforstudentschoosesortsortsortedresultsaredisplayedinthelistboxyoucanclickS__etos__ethechangestoafile.CharacterizedbyVCprogrammingvisualizationintuitiveandeasytooperatecanbeappliedtodailyteachinginfor__tion__nagement.Innovativeprogrammingmethodistheuseofthecontrolsassociatedwithavariablecalltheupdatefunctiontoachieveandpassvariablesbetweencontrolssimplifytheprogrammingsteps.____
1.傅德荣、章慧敏编著《教育信息处理》北京师范大学出版社2001年
2.祝智庭主编《现代教育技术》高等教育出版社2001年
3.BobReselmna形ehdarPeasleyWaynePucr俪ka《VISua1Basie
6.0使用指南》电子工业出版社.4Mcioros几《VisualBasci.6o中文版控件大全》电子工业出版社
5.刘晓华编著sQLSverer2000数据库应用__》电子工业出版社2001年
6.闪四清编著《SQLSverer2000实用教程》人民邮电出版社2000年
7.陈伟编《中文版VisualBasci.60__指南》人民邮电出版社2000年
8.张海藩主编《软件工程导论》清华大学出版社1998年
9.邵瑞珍主编《教育心理学》__教育出版社1997年
10.DvadiME淦oekne著施伯乐顾宁雍信阳范志新王轶彤校译《数据库处理基础设计与实现》电子工业出版社2000年
11.张龙祥著《数据库原理与设计》人民邮电出版社2001年
12.李存珠李宣东编著《软件工程概论》南京大学计算机系出版社2001年。