MFC学生信息管理系统详解

  • 格式:docx
  • 大小:123.03 KB
  • 文档页数:11

面向对象程序课程设计》报告

题目: 学生信息管理系统

班级:

学号:

姓名:

成绩:

指导教师:

日期: 2012 年 6 月 21 日报告内容

、程序功能

1) 学生基本信息录入功能(输入的学生信息用磁盘文件保存)

2) 学生信息查询功能

3) 学生信息排序功能

4) 学生信息的删除与修改 学生信息包括: 姓名、性别、学号、出生年月、手机号码、班级、已经获得学分等

二、课题分析

设计一个基于MFC对话框的C++应用程序开发,因此要 创建一个主对话框,和一些必要的子对话框。在主对话框中 添加列表控件用来显示学生的基本信息,并且列表控件有较 强的数据处理函数。因此选择列表控件。对于学生信息的录 入,查询,排序,删除与修改都用按钮控件,并为每个按钮 添加消息响应函数用来处理学生的信息操作。对于录入功能, 可以为它设置一个子对话框来填写学生基本信息。

接下来就是要把学生的基本信息能够保存下来,因此要 用到文件的操作, fstream 可以满足要求。

综上所述,必须先掌握按钮控件,列表控件,新对话框 的构建,编辑控件和消息的响应与处理原理!

以上就是设计思路!

三、设计中的问题与解决方法

问题 1:在录入学生信息时,当已经存在此学生能够识别的来。

由于要在子窗口中调用父窗口的数据成员,他们是不同的对话框 类,因此操作起来不容易。

解决方法:可以在子窗口中得到父窗口的指针,这样就能得到父 窗口的成员。

CMyDlg *dlga=(CMyDlg*)GetParent(); // 得到主对话框的指 针

问题 2:删除与修改操作时怎么得到要删除与修改的学生信息 解决方法:由于列表控件有强大的数处理函数,当点击那一条记 录时,会有一个被选中的消息, 这样就可以用它来判断要修改和删除 的是哪个学生。 问题3:怎么进行排序操作,因为数据是放在列表控件的,并且 每一个学生都有较多的信息。

解决方法:用到结构体来存放学生的信息,排序的话可以通过结 构体的冒泡排序实现。过程是先从列表控件中得到所有学生的信息存 放在结构体数组里,然后进行冒泡排序,最后再放回列表控件中。

四、测试数据组(含数据测试及结果)

导入操作:

舲 I觀I藏 禺 出生年月 ]手聘码 I哉学芬I

1111 6

110 6

13054424T83 5

909090909 I

录入操作: 1991-99-1

2030-2-2

11-1

201IH1-1

199M1-9

11111-11-11 66012 9.9

999 9 3110002982

311000888

1202

311000999

3110002954

min U1S匕1S1I

冃一-一冃居手机号码 输入字生信凰

66012

删除操作:

选中就可以删除了

修改操作: 先选中学生接着按下修改按钮学生宿>1除 mill Hlll-il-lf 909M0W9 ] 1

转入学生信窟 909090909

排序操作:

按下排序就可以根据学分进行排序

已获学分

9.9

g 6

6

5 1

学生信息保存:

学生信息查询:

成功查询结果学生倍息操作

学生信息录入 转入学生信息

学生信息删除

学生信息修改

成錶排序 学生信息

姓名

性别

班级

学号

出生年月

手机号码

已获学分

關定 3110002984

1991-11-9

1305^2^1783

取消

学生信息查i甸

诸输入名字阿 查询|

性别:

班级: 学号:[

出生年月 学生噸苛理盂址(Kiduil

荻学分:- student txt 文本文裆

i殳有此学生的记录!

请输入名字黒晅 [匚药!二二|

学号' | 手机号圖[I3O544Z4T83

出生年月 :|1991-11-9 — 已获学分:

五、感想和心得

通过这次的C++课程设计,了解了 windows的消息机制。 学会通过MFC的对话框设计学生信息管理系统。 其中也包

含了许多知识,文件操作,按键的消息响应处理,对话框的 创建,对话框的消息传递。排序算法。以及强大的列表控件 的使用。

六、参考文献

《Visual C++ 6.0 使用教程》

附录:源程序代码(含注释)

初始化列表控件:

list-SptExtende(JStyle(LUS_EX GRIDLINES |LUS

EX_FULLROWSELECT) list-InsertColum( 0,"^名6LIJCFMTJ_EFT ,80■二)~

list - InsertColunn(1性别・・,LUCFMT【LEFT

円叫-1);

list _InsertColumn(2 ,LUCFMT LEFT ,98,-1);

list .InsertColumnta/^^'^LUCFMT^LEFT ,120,-1);

"由坐年月

*\LUCFMT_LEFT ,100,-1);

手机守码,・.LUCFHrZLEFT .120.-1);

“己获学分J 学生信息查询

性刖厂

班级:匣廊

"对LiH控件的初始化操作

m m

list ■ I nsertColumn(4.v

list■InsertColumn(5「

m list .1 nsertColumn(6/lt£^^5^tftffLUCFMTjLEFT f80,-1);

MessageBoxC*系统提示二请先写入学生信息? ■■亍: 学生信息录入:uoid CMyDlg: :0nBUTT0Nluru() "学生信息录入

// TODD: Add your control notification handler code here Inputrecord dig;

if(I tOK—dig ,DoModal ()) 〃每次都在第一个记录处插入

m l 1st _ Insprtlt@m( OPdlg. ni name);

m_list-SetItemText(0,1,dlg.n_sex);

m_list _SetItemTextC0,2,dlg.m

mlist-SetltemTextf 0f3,dlg.m

mlist - Set ItemText (O,it,dlg .n

m_115t-SetItemT ext(0,5,dlg.m

mlist-Set TtemText(目.6,dlg.m

删除学生信息:

void CMpDlg::QnBUTTONdelete()"删除所选择的学生记录

<

// TODO: Add you旷 control notification handler code here int i;

BOOL findok-FftLSE;

For(i=0;i

<

if(n_ilst.GetIteNState(1,LUis SELECTED)=-LUIS_SELECTED)

< - - -

m_list *DeleteTle(n(i);

findok=TRUE;

lF(findokf-TRUE)

MessageBox(-请先选择要删除的学生,T ; UpdateData(FALSE);

退出本系统操作:

void CMi/Dlg : :0nBUTT0Nexit() "退出系统

<

// TOIDO: Add your control notification handler code here MessageBoxC"^谢使剧本系统(版权所有>?");

EndDialogCS);

学生信息保存:grade);

nuniber);

birthday);

telephone);

getpoint); void CHyDig: :0nDUTT0Hsaue () "学生信息保存 <

// TO DO': Add lyomr control inotLfic^tioni handler9 ciode here

CStringi str:;

佔卵咛m outfiiPr studenUtxf Mqs-oiJt];"输出方式打开「内存输岀到文件.每次都会覆盖原有内容 int count-n_list,Get]temCount();

for(int i=count-l

<

F叶"nt j-0; j<7; j+*>

str-n_li5t.GetItenTextfi pj);

str+=' 1;

nutfile<<5tr;

}

outfi lewenm; "把字符串写进文件

outflie ・close();

He^Sagt?BDX(M文祚保存成功U ;

学生信息导入:

uoid CMpDlg: :QnBUTTDNdaoru() "学生信戶舟入 < // TODO: Add youF control notification handler code here

BOOL end-FALSE; "是否已经谀到末尾了

char pf100l; "定义数组淳板缓冲数组

int row= O,colur*n-0;

Fstrean infile( "student ,txtib ,ios: :in |ios::nocreate); "打开文件 iF(?infile)

{ MessageBoxC您没有保存过信息严); return;

>

uhile(1)

< ni_list.Inser11 tem(n_list .GetItemCount() .NULL .NULL);

For(column-u;colunn<7;colur»n++)

if(f(inFile»p)) "每遇到空幡停一下判断是否为读到文件的末昂

<

end-TRUE;

break;"结束F叶循坏

> n_list.SetItemText(rou,column,p);

> " rou++;

if(TRUE==end)

<

break;"结 while 循坏

inFile,close();

学生信息查找: