学生信息管理系统设计
学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。试设计学生信息管理系统,使之能提供以下功能:
系统以菜单方式工作
1、学生信息录入功能(学生信息用文件保存)输入
2、学生信息浏览功能—输出
3、查询、排序功能—算法
按学号查询
按姓名查询
4、学生信息的删除与修改
题目要求之做一个学生信息管理系统,并且一菜单的形式完成,
CAboutDlg是“关于”界面的设计;
CAddDlg是学生信息录入功能界面的设计,并且实现学生消息添加;
CChangeDlg是学生信息的修改功能界面的设计;
CDisplayView和CSelectDlg在主窗口上个的两个静态拆分窗口;
CInfoDlg是学生信息浏览功能界面的实现设计;
CInfoFile是存放学生信息的类,里面有学生属性,还有一些调用函数;
CLoginDlg登录窗口界面的设计;
CMainFrame是主窗口的设计;
CSearchDlg是学生信息查询界面的设计;
CSortDlg是学生信息排序界面的设计;
CstuinfoApp是应用程序类;
CUserDlg是个人信息界面的设计。
首先就是学生信息的录入,要求将信息用文件保存,在这里我设计了一个类CInfoFile,构建了一个结构体msg里面有8个成员变量分别是id,name,age,sex,birthday,place,phone,mail,分别表示学号,姓名,年龄,性别,出生年月,地址,电话,E-mail,除了id(自加,且唯一),age是int类型,其他都是string类型,同时CInfoFile里面还有成员函数ReadDocline、WirteDocline分别向程序里面读数据和写入数据,还有负责添一条数据的成员函数Addline()可以添加一条信息,同时我将学生的信息有list容器存放。这个添加信息的界面我设计了一个CCAddDlg类,继承CFormView类,里面不需要填加学号,只需要输入其他七个变量即可,通过编辑框来接收用户输入的信息。
其次是学生的浏览,我设计了一个CInfoDlg类,它是有CFormView类继承而来的,通过重写OnInitialUpdate();函数来实现界面的初始化,我是用一个List Control控件来显示信息的,当然就要引用CInfoFile的头文件,将文本信息读入,然后在展示出来,大体思路就是这样。
然后我是先做查询的,因为这有做了查询才能删除和修改,查询我也是按照学号查询和姓名查询,在这里我设计了一个CSearchDlg类,它是有CFormView类继承而来的,也要应用CInfoFile类完成对文件的读写,同时在这个选择方式上,我用了一个下拉框,Combo Box控件来实现选择,查询出来的信息在右边的实例编辑框中展示出来,然后对编辑框进行一些属性的调整,例如可下滑(当文本长度过长时可下滑)、可换行、只读,然后学号和姓名都设置可输入编辑框,只有当对应查询方式有效时才能进行查询,无效会有消息框弹出提示,若有效会进行查询将对应结果输出,无输出结果会有对应的提示框弹出,用MessageBox实现。还有一点需要注意的是按照名字查询的时候可能会出现同名的要将其输出。
然后我做了删除和修改,这是用按照学号查询的方法来查询的,分别设计了CDelDlg类和CChangeDlg类,都是有CFormView类继承而来的,CDelDlg类的设计类似查询,也是左边输入搜索,右边输出数据,还有一点就是,点击删除按钮后会弹出二次确认,只有当选择确认时才会删除信息,防止误删。
CChangDlg类的界面类似添加信息界面,但是多了一个学号的选项,这个学号的选项我是用Combo Box做的,原理类似查询的查讯方式选择框,这样就不会弹出未查询到该学号的报错了。在选择学号的时候,会有对应学号信息的提示,以便于对照信息增加可读性。
最后我写的是排序,这里我新建了一个CSortDlg类,我是用一个List Control控件来完成这个功能的,我写了一个列表表头触发事件OnLvnColumnclickList1()函数、同时写了一个静态函数MyCompareProc()函数用来定义排序的方式,比如某列按照int类型排序,而有的按照CString类型排序。
然后,我还自己写了一个登陆窗口,用CLoginDlg来实现的,它的父类是CDialogEx,在应用程序类CstuinfoApp的InitInstance()里面的APP创建之前创建登陆对话框只有登陆成功才能进入到主界面,在登录界面还有记录密码的功能,配有提示如密码错误,用户名不存在。还有就是登录到主窗口是会显示个人信息界面,这个我使用CUserDlg来实现的,里面包括修改密码的功能,确定密码。主窗口的设计CMainFrame类的设计,它是CFrameWnd的子类,在这里我还设计了一个右键菜单和快捷键的设计,还有就是关键的两个列CSelectView类和CDisplayView类,CSelectView继承于CTreeView,CDispalyView继承于CFormView,CSelectView类中初始化树视图,获取数的控件,添加树节点,透视对应的结点添加控制事件,OnTvnSelchanged(),来获得自定义消息,在主窗口界面挂载信息。
学生信息在stock.txt中
添加CInfoFile.cpp和CInfoFile.h
设计结构体格式
设计类
添加类CLoginDlg :public CDialogEx
重写OnInitDialog函数,判断登录情况进行初始化,通过rem.txt里面的内容来判断是否记住密码,如果是就初始化记住密码
还有就是登录按钮的实现
同时这里还有注意两个bug,1是直接点击输入框然后回车会进入主界面,2是直接点x会进入主界面。这里通过重写函数解决。
这是取消按钮的代码:
静态拆分窗口
自定义两个类:CSelectView和CDispalyView(它的基类必须是CFormView类)。
CSelectView继承于CTreeView,CDispalyView继承于CFormView。
1)CMainFrame类中,声明CSplitterWnd类型的对象:
树视图功能的添加
加载图标,
在CSelectView类中声明相应变量,
然后重写CSelectView的OnInitUpdate函数
在功能节点相应信息的处理:
1)在CMainFrame 框架类中,添加自定义消息宏
2)在CMainFrame框架类中添加自定义消息处理函数:
//自定义消息处理函数
afx_msg LRESULT OnMyChange(WPARAM wParam, LPARAM lParam);
3)对应的.cpp定义其函数
LRESULT CMainFrame::OnMyChange(WPARAM wParam, LPARAM lParam)
{
}
4)在CMainFrame框架类BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间添加自定义消息入口,与自定义消息处理函数绑定。
5)发送自定义信号:
在CSelectView的OnTvnSelchanged函数中,发送自定义信号:
在CMainFrame框架类OnMyChange函数中处理相应消息:
运行结果:
因为此时并没有挂载个人信息界面,所有不会有右边界面的内容,应该是未定义的初始化内容。
6. 个人信息管理界面窗口的实现
6.1. 界面设计
设计界面,添加控件,并给控件添加变量
重写函数
7.2. 功能的实现
8.2. 功能实现
9.2. 功能实现
10.2. 功能实现
11.2. 功能实现
12.2. 功能实现
2)右键菜单栏项,添加事件处理程序,选择COMMAND 消息类型,添加至CMainFrame框架类中
添加函数
13.2. 右键菜单
还有些图片不想放了,上传到资料了
一会放链接
最后的成品展示在
链接: 视频录制的不好不介意.