C++语言课程设计MFC设计图书管理系统.docx
- 文档编号:4268377
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:116
- 大小:1.57MB
C++语言课程设计MFC设计图书管理系统.docx
《C++语言课程设计MFC设计图书管理系统.docx》由会员分享,可在线阅读,更多相关《C++语言课程设计MFC设计图书管理系统.docx(116页珍藏版)》请在冰点文库上搜索。
C++语言课程设计MFC设计图书管理系统
天津理工大学聋人工学院
《C++语言课程设计》
专业:
网络工程
年级:
2015级一班
姓名:
胡志冲
学号:
成绩:
完成日期:
20161220
第一章 简介
1.1设计题目
图书管理系统
1.2指导教师
第二章《图书管理系统》设计意义
2.1设计内容概述
本课程设计图书管理系统,必修要满足使用方便、操作灵活和数据安全等设计需求。
本系统在设计时应满足以下几个目标:
1.采用人机对话的操作方式,界面设计美观友好,操作灵活、方便、快捷、准确数据保存安全可靠。
2.实现对图书信息的管理功能。
3.系统运行稳定、安全可靠。
2.2需求分析
信息技术的飞速发展给图书企业的管理带来了全新的变革.采用图书管理系统对图书企业的经营运作进行全程管理.不仅可以使企业摆脱以往人工管理产生的一系列问题,而且可以提高管理效率、降低管理成本、增加经济效益。
通过管理系统对图书企业的发展进行规划,可以收集大量关键可靠的数据。
企业决策层分析这些数据,做出合理决策,及时调整,使之能够更好地遵循市场的销售规律,适应市场的变化,从而让企业能够在激烈的行业竞争中占据一席之地。
2.3设计意义
1.有助于加深我们对C++程序设计这门课程的理解,我们在课堂上学的都是基础理论知识,对于如何用程序语言来描述所学知识还是有一定难度。
通过课程设计,我们可以真正理解其内涵。
2.有利于我们逻辑思维的锻炼,程序设计能直接有效地训练学生的创新思维、培养分析问题、解决问题能力。
即使是一个简单的程序,依然需要学生有条不理的构思。
3.有利于培养严谨认真的学习态度,在程序设计过程里,当我们输入程序代码的时候,如果不够认真或细心,那么可能就导致语法错误,从而无法得出运行结果。
那么,这个我们反复调试,反复修改的过程,其实也是对我们认真严谨治学的一个锻炼。
第三章总体设计
3.1系统运行环境
1.硬件环境
PC机
2.软件环境
操作系统:
Windows10
开发工具:
Visualstudio2010
3.2系统结构图
图书管理系统结构图如图3.1所以。
该系统包括:
添加、修改、删除、查询、浏览等。
图3.1系统的功能模块图
3.3系统各模块的功能
表3.2主要类介绍
类名
派生自
说明
CtianjinApp
CWinApp
为初始化应用程序Window应用程序基类的派生类
Login
CDialog
用户登录对话框
Register
CDialog
注册对话框
CtianjinDlg
CDialog
主程序界面对话框
sta
CStatic
由于直接用CStatic创建的静态文本控件的样式是默认,但不是理想的效果,故再次继承CStatic,可以重新改变样式。
button
CButton
由于直接用CButton创建的按钮控件的样式是默认,但不是理想的效果,故再次继承CButton,可以重新改变样式。
Explore
CDialog
浏览对话框
Combox
CComboBox
由于直接用CComboBox创建的组合框控件的样式是默认,但不是理想的效果,故再次继承CComboBox,可以重新改变样式。
entering
CDialog
编辑对话框
EditPrice
CEdit
由于直接用CEdit创建的编辑框的功能还不够,所以再次继承CEdit,可以多加功能-限制输入字符
query
CDialog
查询对话框
Setting
CDialog
设置对话框
About
CDialog
关于对话框
表3.3主要函数介绍
源文件
函数名称
功能描述
Explore.cpp
OnInitDialog
OpenFile
OnClickedButton1
OnClickedButton2
ExchangeBook
对对话框进行初始化处理
打开文件函数
响应“升序”按钮实现排序该图书信息
响应“升序”按钮实现排序该图书信息
交换各对象的数据
表3.4主要函数介绍
源文件
函数名称
功能描述
CtianjinDlg.cpp
OnInitDialog
OnPaint
OnQueryDragIcon
OnTimer
UpdateFile
OnExit
OnEnter
OnAbout
OnQuery
OnSetting
OnExplore
对对话框进行初始化处理
对对话框绘制部分应用窗口
系统获取鼠标图标
用于实现定时控制功能
用于实现更新文件来计算收了几本书
响应“退出”按钮实现退出本程序
响应“编辑”按钮实现启动编辑对话框
响应“关于”按钮实现启动关于对话框
响应“查询”按钮实现启动查询对话框
响应“设置”按钮实现启动设置对话框
响应“浏览”按钮实现启动浏览对话框
表3.5主要函数介绍
源文件
函数名称
功能描述
Entering.cpp
OnInitDialog
OnCtlColor
OnBnClickedOk
Check
Input
OnClose
OnLvnItemchangedList1
OnBnClickedOk2
OnBnClickedOk3
OnLvnColumnclickList1
OnNMClickList1
OnBnClickedButton1
对对话框进行初始化处理
控件窗口函数用于画出控件菜单处理
添加记录信息
检查输入的内容是否为空
输入记录信息
关闭该对话框
某个项已经发生变化
响应“删除”按钮实现删除该图书信息
响应“修改”按钮实现修改该图书信息
单击列,用于勾选全部
当鼠标单击列表视图控件时产生
响应“清空”按钮实现修改该图书信息
表3.6主要函数介绍
源文件
函数名称
功能描述
query.cpp
OnInitDialog
OnBnClickedRadio1
OnBnClickedRadio2
OnBnClickedRadio3
OnBnClickedRadio4
OnBnClickedRadio5
OnBnClickedButton1
QueryNum
QueryName
QueryAuthor
QueryPress
QueryAny
OpenFile
Tip
insert
OnBnClickedButton2
对对话框进行初始化处理
响应“书号”按钮实现选择该方式查询
响应“书名”按钮实现选择该方式查询
响应“作者”按钮实现选择该方式查询
响应“出版社”按钮实现选择该方式查询
响应“任何内容”按钮实现选择该方式查询
关闭该对话框
查询书号函数
查询书名函数
查询作者函数
查询出版社函数
查询任何函数
打开文件
提示用于告诉用户找到了多少本
将已找到的几本书插入在显示上
响应“查询”按钮实现根据该方式查询
3.4对象数据结构
每个对象记录着每本书的信息,为了保护数据安全,故把其的这些成员变量声明为private,就是说在类外的话,不能直接调用对象的成员变量名来赋值或者获取其值,这就达到了保护数据,但是在某个时候遇到数据不对可能需要修改,这时就要加成员函数来修改或者获取,而且把成员函数声明为public,由于在类外需要正常调用,故声明为公开。
其表如下。
表3.7主要变量介绍
变量名
类型
功能描述
Name
Num
Author
Press
Time
Price
Char
Char
Char
Char
Char
Double
书名
书号
作者
出版社
时间
价格
表3.8主要函数介绍
源文件
函数名称
功能描述
book.cpp
SetName
SetNum
SetAuthor
SetPress
SetTime
SetPrice
GetName
GetNum
GetAuthor
GetPress
GetTime
GetPrice
设置当前对象的成员变量name的值
设置当前对象的成员变量num的值
设置当前对象的成员变量Author的值
设置当前对象的成员变量Press的值
设置当前对象的成员变量Time的值
设置当前对象的成员变量Price的值
获取当前对象的成员变量name的值
获取当前对象的成员变量Num的值
获取当前对象的成员变量Author的值
获取当前对象的成员变量Press的值
获取当前对象的成员变量Time的值
获取当前对象的成员变量Price的值
第四章详细设计
4.1程序源代码
4.1.1登陆模块
Login.h
#pragmaonce
#include"tianjinDlg.h"
#include"afxwin.h"
//Login对话框
classLogin:
publicCDialog
{
DECLARE_DYNAMIC(Login)
inta;
public:
Login(CWnd*pParent=NULL);//标准构造函数
virtual~Login();
//对话框数据
enum{IDD=IDD_LOGIN};
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);
CtianjinDlgdlg;
DECLARE_MESSAGE_MAP()
public:
virtualBOOLOnInitDialog();
afx_msgvoidOnClose();
CStringuser;
CStringpassword;
afx_msgvoidOnBnClickedOk();
CButtonregis;
afx_msgvoidOnBnClickedButton1();
Login.cpp
#include"stdafx.h"
#include"tianjin.h"
#include"Login.h"
#include"afxdialogex.h"
#include"Register.h"
IMPLEMENT_DYNAMIC(Login,CDialog)
Login:
:
Login(CWnd*pParent/*=NULL*/)
:
CDialog(Login:
:
IDD,pParent)
user(_T(""))
password(_T(""))
{
}
Login:
:
~Login()
{
}
voidLogin:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
DDX_Text(pDX,IDC_EDIT3,user);
DDX_Text(pDX,IDC_EDIT4,password);
DDX_Control(pDX,IDC_BUTTON1,regis);
}
BEGIN_MESSAGE_MAP(Login,CDialog)
ON_WM_CLOSE()
ON_BN_CLICKED(IDOK,&Login:
:
OnBnClickedOk)
ON_BN_CLICKED(IDC_BUTTON1,&Login:
:
OnBnClickedButton1)
END_MESSAGE_MAP()
BOOLLogin:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
a=0;//初始化a的值为0用于判断该值是否退出本程序当输入密码错误,就使该a的值增加1
CRectr;//矩形的类,数据成员是矩形左上角的x的坐标,矩形左上角Y的坐标,矩形右下角x的坐标,矩形右下角Y的坐标
CStringuser;
this->GetClientRect(&r);//是获得窗口的当前的客户区,把各坐标值保存在r对象。
this->MoveWindow(600,300,r.right,r.bottom);//根据上面获得窗口的大小,来调整并且移动。
GetPrivateProfileString("login","user","NULL",user.GetBuffer(20),20,"./setting.ini");
//从setting.ini配置文件中的login节名中获取该user键名的值并保存在user的值,如果找不到该键名,则保存第三个参
//数的值即默认的值表示未注册的账号,反之找到了该值,表示已经注册了
if(user!
="NULL"){//用于判断上面获得的值是否已经注册过如注册过,则执行if()后边的语句
regis.EnableWindow(0);//在该函数的参数赋值为0表示禁止指定的控件接受鼠标和键盘的输入由于该已经注册过的。
regis.SetWindowTextA("已注册");//指定该控件的内容设为”已注册"用于提示
}
returnTRUE;
}
voidLogin:
:
OnClose()
{
CDialog:
:
OnClose();
}
voidLogin:
:
OnBnClickedOk()
{
this->UpdateData
(1);//将各控件中的数据保存到相应的变量分别为”user“”password“
if(!
user.IsEmpty()&&!
password.IsEmpty())//检查该各变量的值是否为空,如该值为空,就执行else后边的语句
{
CStringuser1,password1;//定义两个字符串类变量用于从配置文件的注册过的用户及密码的值保存在该变量的
GetPrivateProfileString("login","user","NULL",user1.GetBuffer(20),20,"./setting.ini");//从本身程序的当前的setting.ini配置
//文件中的login节名中获取该user键名的值并保存在user1的值,如果找不到该键名,则保存默认值为”NULL“
GetPrivateProfileString("login","password","NULL",password1.GetBuffer(20),20,"./setting.ini");//如同上面的方法
if(user==user1&&password==password1)//对比各值是否一致,满足此条件表示该用户名及密码都是正确,可以登陆,即执行if()后边的语句
{
this->ShowWindow(SW_HIDE);//把该对话框的显示方式为隐藏
dlg.DoModal();//启动主窗口的对话框
CDialog:
:
OnOK();
}
else{
a++;//密码错误次数
if(a>3)//如超过3次的错误密码就执行if()后边的语句
{CDialog:
:
OnCancel();
return;
//调用关闭该对话框的函数
}
CStringd;
d.Format("用户名或者密码错误%d次超过三次错误即将自动退出",a);
MessageBox(d,"登陆提示",MB_OK|MB_ICONWARNING);//用于提示密码错误以避免令人觉得这程序有问题
}
}
else
MessageBox("用户名或者密码的字符串为空","登陆提示",MB_OK|MB_ICONWARNING);//当该值为空,则执行该语句用于提示。
}
voidLogin:
:
OnBnClickedButton1()
{
Registerdialog;//定义注册对话框的对象变量
dialog.DoModal();//启动注册对话框
}
};
4.1.2注册模块
Register.h
#pragmaonce
#include"afxwin.h"
//Register对话框
classRegister:
publicCDialog
{
DECLARE_DYNAMIC(Register)
public:
Register(CWnd*pParent=NULL);//标准构造函数
virtual~Register();
//对话框数据
enum{IDD=IDD_REGISTER};
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDV支持
DECLARE_MESSAGE_MAP()
public:
afx_msgvoidOnBnClickedOk();
CStringuser;
CStringpassword;
CStringpassword1;
};
Register.cpp
#include"stdafx.h"
#include"tianjin.h"
#include"Register.h"
#include"afxdialogex.h"
//Register对话框
IMPLEMENT_DYNAMIC(Register,CDialog)
Register:
:
Register(CWnd*pParent/*=NULL*/)
:
CDialog(Register:
:
IDD,pParent)
user(_T(""))
password(_T(""))
password1(_T(""))
{
}
Register:
:
~Register()
{
}
voidRegister:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
DDX_Text(pDX,IDC_EDIT1,user);
DDX_Text(pDX,IDC_EDIT6,password);
DDX_Text(pDX,IDC_EDIT3,password1);
}
BEGIN_MESSAGE_MAP(Register,CDialog)
ON_BN_CLICKED(IDOK,&Register:
:
OnBnClickedOk)
END_MESSAGE_MAP()
voidRegister:
:
OnBnClickedOk()
{
this->UpdateData();//默认值是TRUE,即从控件传给变量
if(!
user.IsEmpty()&&!
password.IsEmpty()&&!
password1.IsEmpty())//各变量的字符串是否为空,如都不为空,则执行if()后边的语句继续注册
{
if(password==password1)//新密码与第二次新密码对比下,如相等,则继续执行注册,反之不继续注册
{if(IDOK==MessageBox("确定要注册该账号吗?
","注册提示",MB_OKCANCEL|MB_ICONQUESTION))//输出提示是否要确定注册,如点击确认返回值为IDOK
{
WritePrivateProfileString("login","user",user,"./setting.ini");
////向该setting.ini配置文件中的login节名中设置该user键名的值为user的值
WritePrivateProfileString("login","password",password,"./setting.ini");
HWNDbutton;//定义窗口句柄
this->GetParent()->GetDlgItem(IDC_BUTTON1,&button);//获取当前窗口的父窗口句柄(登陆对话框),然后通过父窗口句柄获取指定参数ID为IDC_BUTTON1的子元素的句柄并绑定button窗口句柄
:
:
SetWindowTextA(button,"已注册");//改变指定button窗口句柄的文本内容为"已注册"。
:
:
EnableWindow(button,0);//第二个参数的值为0表示禁止指定的控件接受鼠标和键盘的输入
MessageBox("已经成功注册该账号:
"+user+"!
","注册提示",MB_OK|MB_ICONASTERISK);//注册成功输出提示
CDialog:
:
OnCancel();
}}
else
MessageBox("新密码与第二次新密码不一致请注意输入正确!
","密码提示",MB_OK|MB_ICONEXCLAMATION);
}
else
MessageBox("用户名或者密码的字符串为空","注册提示",MB_OK|MB_ICONWARNING);
}
4.1.3主菜单模块
tianjinDlg.h
#pragmaonce
#include"button.h"
#include"sta.h"
#include"entering.h"
#include"query.h"
#include"Setting.h"
#include"Explore.h"
//CtianjinDlg对话框
classCtianjinDlg:
publicCDialogEx
{
//构造
public:
CtianjinDlg(CWnd*pParent=NULL);//标准构造函数
//对话框数据
enum{IDD=IDD_TIANJIN_DIALOG};
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);
//实现
protected:
HICONm_hIcon;
CToolBartoolbar;
CStatusBarstatusbar;
CImageListtoolimag;
CImageListtoolhotimag;
buttonbut2;
inta;
intb;
virtualBOOLOnInitDialog();
afx_msgvoidOnPaint();
afx_msgHCURSOROnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
afx_msgvoidOnTimer(UINT_PTRnIDEvent);
buttonbut1;
voidUpdateFile();
stastat,stat1;
afx_msgvoidOnExit();
afx_msgvoidOnEnter();
afx_msgvoidOnAbout();
protected:
public:
afx_msgvoidOnQuery()
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 语言 课程设计 MFC 设计 图书 管理 系统