MFC学生信息管理系统课程设计报告.docx
《MFC学生信息管理系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《MFC学生信息管理系统课程设计报告.docx(16页珍藏版)》请在冰豆网上搜索。
MFC学生信息管理系统课程设计报告
C++基于MFC类可视化程序设计报告
方案概述
1、问题描述
学生信息包括:
学号、姓名、性别、年龄、班级、专业等信息。
2、功能要求
(1)添加功能:
程序能够添加学生的记录和课程设计题目记录,提供选择界面供用户选择所要添加的类别。
添加记录时,要求学号和编号要唯一。
如果添加了重复记录,则提示数据添加重复并取消添加。
(2)查询功能:
可根据学号、姓名、编号、名称等信息对已添加的学生和课程设计题目进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。
(3)显示功能:
可当前系统中所有学生的信息和课程设计题目信息显示,每条记录占据一行。
(4)编辑功能:
可根据查询结果对相应的记录进行修改,修改时注意学号的唯一性。
(5)删除功能:
主要实现对已添加的学生和课程设计题目记录进行删除。
如果当前系统中没有相应的记录,则提示“记录为空!
”并返回操作。
(6)保存功能:
可将当前系统中各类记录存入文件中,存入方式任意。
(7)注销功能:
注销当前用户,返回登陆界面。
3、问题的解决方案
根据系统功能要求,可以将问题解决分为以下步骤:
(1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;
(2)分析系统中的各个实体及它们之间的关系;
(3)根据问题描述,设计系统的类层次;
(4)完成类层次中各个类的描述;
(5)完成类中各个成员函数的定义;
(6)完成系统的应用模块;
(7)功能调试;
(8)完成系统总结报告。
学生选修课系统设计方案
系统登录界面:
主界面:
信息统计界面:
系统实现:
1.首先建立一个MFC类对话框,添加相关系统控件。
如图:
2.在解决方案中添加Student类,并实现这个类。
代码如下:
//Student.h
classStudent
{
public:
stringname;
stringstuNo;
stringsex;
stringmajor;
doublescore;
stringbanji;
public:
Student(void);
Student(stringname,stringstuNo,stringsex,stringmajor,doublescore,stringbanji);
}
//Student.cpp
#include"StdAfx.h"
#include"Student.h"
Student:
:
Student(void)
{
}
Student:
:
Student(stringname,stringstuNo,stringsex,stringmajor,doublescore,stringbanji)
{
this->name=name;
this->stuNo=stuNo;
this->sex=sex;
this->major=major;
this->score=score;
this->banji=banji;
}
3.将数据保存、读取。
在解决方案中创建FileManager类。
代码如下:
//FileManager.h
#pragmaonce
#include"Student.h"
classFileManager
{
private:
charfilename[40];
public:
FileManager(charfilename[]);
~FileManager(void);
voidadd(Studentstu);
intremove(stringname);
voidedit(Studentstu);
Studentsearch(stringname);
maploadAll();
voidsaveAll(mapm);
};
//FileManager.cpp
#include"StdAfx.h"
#include"FileManager.h"
FileManager:
:
FileManager(charfilename[])
{
strcpy_s(this->filename,40,filename);
}
FileManager:
:
~FileManager(void)
{}
voidFileManager:
:
add(Students)
{
ofstreamfout(filename,ios:
:
out|ios:
:
app);
fout<fout.close();
}
intFileManager:
:
remove(stringname)
{
mapm=loadAll();
map:
:
iteratorit=m.find(name);
if(it==m.end())
return0;//表示学生不存在
else
{
m.erase(it);
saveAll(m);
return1;//表示有一个学生被删除
}
}
voidFileManager:
:
edit(Studentstu)
{
mapm=loadAll();
m[stu.name]=stu;
saveAll(m);
}
StudentFileManager:
:
search(stringname)
{
Students;
mapm=loadAll();
map:
:
iteratorp;
for(p=m.begin();p!
=m.end();p++)//据姓名查
if(name==p->first)//根据姓名找到
{
s=p->second;//取出该学生对象
break;
}
returns;
}
//将文件中的每一名学生(一行)存入一个map
mapFileManager:
:
loadAll()
{
mapm;
map:
:
iteratorp;
ifstreamfin(filename,ios:
:
in);
while(!
fin.eof())
{
Students;
fin>>s.name>>s.stuNo>>s.sex>>s.major>>s.score>>s.banji;
if(s.name.size()!
=0)
m[s.name]=s;
}
fin.close();
returnm;
}
voidFileManager:
:
saveAll(mapm)
{
ofstreamfout(filename,ios:
:
out);
Students;
map:
:
iteratorp;
for(p=m.begin();p!
=m.end();p++)
{
s=p->second;//取出该学生对象
fout<}
fout.close();
}
4.系统功能键有7个:
使这7个功能键分别起到作用的代码如下:
voidCdialogDlg:
:
OnBnClickedButtonsubmit()//添加按钮的功能
{
UpdateData(TRUE);
FileManagerf("stuInfo.txt");
Studentstu=f.search(LPCSTR(name));
if(stu.name!
="")
{
MessageBox("该学生已存在!
","提示");
return;
}
CStringmajor;
this->cbx_major.GetWindowTextA(major);
Students;
s.name=LPCSTR(name);
s.stuNo=LPCSTR(stuNo);
s.sex=(this->int_sex==0?
"男":
"女");
s.score=score;
s.major=LPCSTR(major);
s.banji=(this->int_banji==0?
"一班":
"二班");
f.add(s);
MessageBox("添加成功!
","提示");
}
voidCdialogDlg:
:
OnBnClickedButtonsearch()//按姓名查找
{
UpdateData(TRUE);
FileManagerf("stuInfo.txt");
Studentstu=f.search(LPCSTR(name));
if(stu.name=="")
{
MessageBox("该学生不存在!
","提示");
return;
}
//将对象的值在界面显示出来
this->stuNo=stu.stuNo.c_str();
this->int_sex=(stu.sex=="男"?
0:
1);
this->int_banji=(stu.banji=="一班"?
0:
1);
this->score=stu.score;
this->cbx_major.SelectString(0,stu.major.c_str());
UpdateData(FALSE);//更新界面控件,使其显示关联变量的值
}
voidCdialogDlg:
:
OnBnClickedButtonremove()//按姓名删除
{
UpdateData(TRUE);
FileManagerf("stuInfo.txt");
if(f.remove(LPCSTR(name))==0)
MessageBox("该学生不存在!
","提示");
else
MessageBox("删除成功!
","提示");
}
voidCdialogDlg:
:
OnBnClickedButtonedit()//编辑按钮的功能
{
UpdateData(TRUE);
FileManagerf("stuInfo.txt");
Studentstu=f.search(LPCSTR(name));
if(stu.name=="")
{
MessageBox("不允许修改姓名!
","提示");
return;
}
CStringmajor;
this->cbx_major.GetWindowTextA(major);
Students;
s.name=LPCSTR(name);
s.stuNo=LPCSTR(stuNo);
s.sex=(this->i