MFC学生信息管理系统课程设计报告
- 格式:doc
- 大小:129.50 KB
- 文档页数:15
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.hclass Student{public:string name;string stuNo;string sex;string major;double score;string banji;public:Student(void);Student(string name,string stuNo,string sex,string major,double score,string banji); }//Student.cpp#include "StdAfx.h"#include "Student.h"Student::Student(void){}Student::Student(string name,string stuNo,string sex,string major,double score,string banji) {this->name=name;this->stuNo=stuNo;this->sex=sex;this->major=major;this->score=score;this->banji=banji;}3.将数据保存、读取。
在解决方案中创建FileManager类。
代码如下://FileManager.h#pragma once#include "Student.h"class FileManager{private:char filename[40];public:FileManager(char filename[]);~FileManager(void);void add(Student stu);int remove(string name);void edit(Student stu);Student search(string name);map<string,Student> loadAll();void saveAll(map<string,Student> m);};//FileManager.cpp#include "StdAfx.h"#include "FileManager.h"FileManager::FileManager(char filename[]){strcpy_s(this->filename,40,filename);}FileManager::~FileManager(void){ }void FileManager::add(Student s){ofstream fout(filename,ios::out|ios::app);fout<<<<" "<<s.stuNo<<" "<<s.sex<<" "<<s.major<<" "<<s.score<<" "<<s.banji<<endl;fout.close();}int FileManager::remove(string name){map<string,Student> m=loadAll();map<string,Student>::iterator it=m.find(name);if(it==m.end())return 0;//表示学生不存在else{m.erase(it);saveAll(m);return 1;//表示有一个学生被删除}}void FileManager::edit(Student stu){map<string,Student> m=loadAll();m[]=stu;saveAll(m);}Student FileManager::search(string name){Student s;map<string,Student> m=loadAll();map<string,Student>::iterator p;for(p=m.begin();p!=m.end();p++)//据姓名查if(name==p->first)//根据姓名找到{s=p->second;//取出该学生对象break;}return s;}//将文件中的每一名学生(一行)存入一个mapmap<string,Student> FileManager::loadAll(){map<string,Student> m;map<string,Student>::iterator p;ifstream fin(filename,ios::in);while(!fin.eof()){Student s;fin>>>>s.stuNo>>s.sex>>s.major>>s.score>>s.banji;if(.size()!=0)m[]=s;}fin.close();return m;}void FileManager::saveAll(map<string,Student> m){ofstream fout(filename,ios::out);Student s;map<string,Student>::iterator p;for(p=m.begin();p!=m.end();p++){s=p->second;//取出该学生对象fout<<<<" "<<s.stuNo<<" "<<s.sex<<" "<<s.major<<" "<<s.score<<" "<<s.banji<<endl;}fout.close();}4.系统功能键有7个:使这7个功能键分别起到作用的代码如下:void CdialogDlg::OnBnClickedButtonsubmit() //添加按钮的功能{UpdateData(TRUE);FileManager f("stuInfo.txt");Student stu=f.search(LPCSTR(name));if(!=""){MessageBox("该学生已存在!","提示");return;}CString major;this->cbx_major.GetWindowTextA(major);Student s; = 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("添加成功!","提示");}void CdialogDlg::OnBnClickedButtonsearch() //按姓名查找{UpdateData(TRUE);FileManager f("stuInfo.txt");Student stu=f.search(LPCSTR(name));if(==""){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);//更新界面控件,使其显示关联变量的值}void CdialogDlg::OnBnClickedButtonremove() //按姓名删除{UpdateData(TRUE);FileManager f("stuInfo.txt");if(f.remove(LPCSTR(name))==0)MessageBox("该学生不存在!","提示");elseMessageBox("删除成功!","提示");}void CdialogDlg::OnBnClickedButtonedit() //编辑按钮的功能{UpdateData(TRUE);FileManager f("stuInfo.txt");Student stu=f.search(LPCSTR(name));if(==""){MessageBox("不允许修改姓名!","提示");return;}CString major;this->cbx_major.GetWindowTextA(major);Student s; = 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.edit(s);MessageBox("修改成功!","提示");}void CdialogDlg::OnBnClickedButton1() //保存按钮的功能{MessageBox("已成功保存所有已编辑信息到stuInfo.txt!", "提示"); }void CdialogDlg::OnBnClickedButtonsave(){}void CdialogDlg::OnBnClickedButton2() //显示全部{UpdateData(TRUE);FileManager fi("stuInfo.txt");map<string, Student>p;map<string, Student>::iterator i;p = fi.loadAll();CString list = "";for (i = p.begin(); i != p.end(); i++){list += "学号: ";list += i->second.stuNo.c_str();list += " 姓名: ";list += i->.c_str();list += " 性别: ";list += i->second.sex.c_str();list += " 班级: ";list += i->second.banji.c_str();list += " 专业:";list += i->second.major.c_str();list += "";list += "\n";}MessageBox(list, "所有学生");}void CdialogDlg::OnBnClickedButton4() //注销按钮的功能{CDialog::OnOK();Login dlg1;dlg1.DoModal();UpdateData(FALSE);}5.创建登陆界面,在解决方案中,以Dlg.h为基类创建一个Login类,代码如下://Login.h#pragma once// Login 对话框class Login : public CDialog{DECLARE_DYNAMIC(Login)public:Login(CWnd* pParent = NULL); // 标准构造函数virtual ~Login();// 对话框数据enum { IDD = IDD_LOGIN };protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持DECLARE_MESSAGE_MAP()public:afx_msg void OnBnClickedOk();afx_msg void OnBnClickedCancel();CString zhanghao;CString mima;};//Login.cpp// Login.cpp : 实现文件////using namespace std;#include "stdafx.h"#include "dialog.h"#include "Login.h"// Login 对话框IMPLEMENT_DYNAMIC(Login, CDialog)Login::Login(CWnd* pParent /*=NULL*/): CDialog(Login::IDD, pParent), zhanghao(_T("")), mima(_T("")){}Login::~Login(){}void Login::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);DDX_Text(pDX, IDC_EDIT_username, zhanghao);DDX_Text(pDX, IDC_EDIT_password, mima);}BEGIN_MESSAGE_MAP(Login, CDialog)ON_BN_CLICKED(IDOK, &Login::OnBnClickedOk)ON_BN_CLICKED(IDCANCEL, &Login::OnBnClickedCancel) END_MESSAGE_MAP()// Login 消息处理程序void Login::OnBnClickedOk(){UpdateData(TRUE);char name[20],pass[20];ifstream fin("login.txt");while ( !fin.eof()){fin>>name;fin>>pass;if(zhanghao==name&&mima==pass)break;}fin.close();if(fin.eof()){MessageBox("登陆失败!");return;}elseOnOK();}void Login::OnBnClickedCancel(){this->ShowWindow(SW_HIDE);}工程总结1.心得:我们小组仔细研读了课程题目的要求,结合指导老师给我们的模板。