C++语言课程设计--MFC设计--图书管理系统_第1页
C++语言课程设计--MFC设计--图书管理系统_第2页
C++语言课程设计--MFC设计--图书管理系统_第3页
C++语言课程设计--MFC设计--图书管理系统_第4页
C++语言课程设计--MFC设计--图书管理系统_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、天津理工大学 聋人工学院C+C+语言课程设计语言课程设计专 业: 网络工程 年 级: 2015 级一班 姓 名: 胡志冲 学 号: 成 绩: 完成日期: 20161220 目 录第一章第一章 简简 介介.11.1 设计题目.11.2 指导教师.1第二章第二章 图书管理系统图书管理系统设计意义设计意义.22.1 设计内容概述.22.2 需求分析.22.3 设计意义.2第三章第三章 总体设计总体设计.33.1 系统运行环境.33.2 系统结构图.33.3 系统各模块的功能.43.4 对象数据结构.7第四章第四章 详细设计详细设计.84.1 程序源代码.84.1.1 登陆模块 .84.1.2 注册模

2、块 .114.1.3 主菜单模块 .134.1.4 编辑模块 .174.1.5 查询模块 .274.1.6 浏览模块 .344.1.7 设置模块 .394.1.8 组合框模块 .414.1.9 图书信息模块 .434.1.10 资源文件 .454.2 系统测试.554.2.1 登陆对话框 .554.2.2 编辑对话框 .584.2.3 浏览对话框 .624.2.4 查询对话框 .664.2.5 设置对话框 .714.2.6 退出 .734.2.7 测试结束运行 .734.3 问题分析.73C+语言课程设计1第五章第五章 结结 论论.80参考文献参考文献.81C+语言课程设计1第一章简 介1.1

3、 设计题目图书管理系统1.2 指导教师C+语言课程设计2第二章 图书管理系统设计意义2.1 设计内容概述本课程设计图书管理系统,必修要满足使用方便、操作灵活和数据安全等设计需求。本系统在设计时应满足以下几个目标:1 1采用人机对话的操作方式,界面设计美观友好,操作灵活、方便、快捷、准确数据保存安全可靠。2 2实现对图书信息的管理功能。3 3系统运行稳定、安全可靠。2.2 需求分析信息技术的飞速发展给图书企业的管理带来了全新的变革.采用图书管理系统对图书企业的经营运作进行全程管理.不仅可以使企业摆脱以往人工管理产生的一系列问题,而且可以提高管理效率、降低管理成本、增加经济效益。通过管理系统对图书

4、企业的发展进行规划,可以收集大量关键可靠的数据。企业决策层分析这些数据,做出合理决策,及时调整,使之能够更好地遵循市场的销售规律,适应市场的变化,从而让企业能够在激烈的行业竞争中占据一席之地。2.3 设计意义1 1有助于加深我们对 C+程序设计这门课程的理解,我们在课堂上学的都是基础理论知识,对于如何用程序语言来描述所学知识还是有一定难度。通过课程设计,我们可以真正理解其内涵。 2 2有利于我们逻辑思维的锻炼,程序设计能直接有效地训练学生的创新思维、培养分析问题、解决问题能力。即使是一个简单的程序,依然需要学生有条不理的构思。 3 3有利于培养严谨认真的学习态度,在程序设计过程里,当我们输入程

5、序代码的时候,如果不够认真或细心,那么可能就导致语法错误,从而无法得出运行结果。那么,这个我们反复调试,反复修改的过程,其实也是对我们认真严谨治学的一个锻炼。C+语言课程设计3第三章 总体设计3.1 系统运行环境1.硬件环境PC 机2.软件环境 操作系统:Windows 10 开发工具:Visual studio 20103.2 系统结构图图书管理系统结构图如图 3.1 所以。该系统包括:添加、修改、删除、查询、浏览等。 图 3.1 系统的功能模块图C+语言课程设计43.3 系统各模块的功能表 3.2 主要类介绍类名派生自说明CtianjinAppCWinApp为初始化应用程序 Window

6、应用程序基类的派生类LoginCDialog用户登录对话框RegisterCDialog注册对话框CtianjinDlgCDialog主程序界面对话框staCStatic由于直接用 CStatic 创建的静态文本控件的样式是默认,但不是理想的效果,故再次继承 CStatic,可以重新改变样式。buttonCButton由于直接用CButton创建的按钮控件的样式是默认,但不是理想的效果,故再次继承CButton,可以重新改变样式。ExploreCDialog浏览对话框ComboxCComboBox由于直接用 CComboBox 创建的组合框控件的样式是默认,但不是理想的效果,故再次继承 CCo

7、mboBox,可以重新改变样式。enteringCDialog编辑对话框EditPriceCEdit由于直接用 CEdit 创建的编辑框的功能还不够,所以再次继承 CEdit,可以多加功能-限制输入字符queryCDialog查询对话框SettingCDialog设置对话框AboutCDialog关于对话框表 3.3 主要函数介绍源文件函数名称功能描述Explore.cppOnInitDialogOpenFileOnClickedButton1OnClickedButton2ExchangeBook对对话框进行初始化处理打开文件函数响应“升序”按钮实现排序该图书信息响应“升序”按钮实现排序该图

8、书信息交换各对象的数据C+语言课程设计5表 3.4 主要函数介绍源文件函数名称功能描述CtianjinDlg.cppOnInitDialogOnPaintOnQueryDragIconOnTimerUpdateFileOnExitOnEnterOnAboutOnQueryOnSettingOnExplore对对话框进行初始化处理对对话框绘制部分应用窗口系统获取鼠标图标用于实现定时控制功能用于实现更新文件来计算收了几本书响应“退出”按钮实现退出本程序响应“编辑”按钮实现启动编辑对话框响应“关于”按钮实现启动关于对话框响应“查询”按钮实现启动查询对话框响应“设置”按钮实现启动设置对话框响应“浏览”

9、按钮实现启动浏览对话框表 3.5 主要函数介绍源文件函数名称功能描述Entering.cppOnInitDialogOnCtlColor OnBnClickedOkCheckInputOnCloseOnLvnItemchangedList1OnBnClickedOk2OnBnClickedOk3OnLvnColumnclickList1OnNMClickList1OnBnClickedButton1对对话框进行初始化处理控件窗口函数 用于画出控件菜单处理添加记录信息检查输入的内容是否为空输入记录信息关闭该对话框某个项已经发生变化响应“删除”按钮实现删除该图书信息响应“修改”按钮实现修改该图书信

10、息单击列,用于勾选全部当鼠标单击列表视图控件时产生响应“清空”按钮实现修改该图书信息C+语言课程设计6表 3.6 主要函数介绍源文件函数名称功能描述query.cppOnInitDialogOnBnClickedRadio1OnBnClickedRadio2OnBnClickedRadio3OnBnClickedRadio4OnBnClickedRadio5OnBnClickedButton1QueryNumQueryNameQueryAuthorQueryPressQueryAnyOpenFileTipinsertOnBnClickedButton2对对话框进行初始化处理响应“书号”按钮实现

11、选择该方式查询响应“书名”按钮实现选择该方式查询响应“作者”按钮实现选择该方式查询响应“出版社”按钮实现选择该方式查询响应“任何内容”按钮实现选择该方式查询关闭该对话框查询书号函数查询书名函数查询作者函数查询出版社函数查询任何函数打开文件提示用于告诉用户找到了多少本将已找到的几本书插入在显示上响应“查询”按钮实现根据该方式查询C+语言课程设计73.4 对象数据结构 每个对象记录着每本书的信息,为了保护数据安全,故把其的这些成员变量声明为private,就是说在类外的话,不能直接调用对象的成员变量名来赋值或者获取其值,这就达到了保护数据,但是在某个时候遇到数据不对可能需要修改,这时就要加成员函数

12、来修改或者获取,而且把成员函数声明为public,由于在类外需要正常调用,故声明为公开。其表如下。 表 3.7 主要变量介绍变量名类型功能描述NameNumAuthorPressTimePriceCharCharCharCharCharDouble书名书号作者出版社时间价格表 3.8 主要函数介绍源文件函数名称功能描述book.cppSetNameSetNumSetAuthorSetPressSetTimeSetPriceGetNameGetNumGetAuthorGetPressGetTimeGetPrice设置当前对象的成员变量 name 的值设置当前对象的成员变量 num 的值设置当前对

13、象的成员变量 Author 的值设置当前对象的成员变量 Press 的值设置当前对象的成员变量 Time 的值设置当前对象的成员变量 Price 的值获取当前对象的成员变量 name 的值获取当前对象的成员变量 Num 的值获取当前对象的成员变量 Author 的值获取当前对象的成员变量 Press 的值获取当前对象的成员变量 Time 的值获取当前对象的成员变量 Price 的值C+语言课程设计8第四章 详细设计4.1 程序源代码4.1.1 登陆模块Login.h#pragma once#includetianjinDlg.h#include afxwin.h/ Login 对话框class

14、 Login : public CDialogDECLARE_DYNAMIC(Login)int a;public:Login(CWnd* pParent = NULL); / 标准构造函数virtual Login();/ 对话框数据enum IDD = IDD_LOGIN ;protected:virtual void DoDataExchange(CDataExchange* pDX);CtianjinDlg dlg;DECLARE_MESSAGE_MAP()public:virtual BOOL OnInitDialog();afx_msg void OnClose();CString

15、 user;CString password;afx_msg void OnBnClickedOk();CButton regis;afx_msg void OnBnClickedButton1();Login.cpp#include stdafx.h#include tianjin.h#include Login.h#include afxdialogex.h#include Register.hIMPLEMENT_DYNAMIC(Login, CDialog)Login:Login(CWnd* pParent /*=NULL*/): CDialog(Login:IDD, pParent),

16、 user(_T()C+语言课程设计9, password(_T()Login:Login()void Login: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:

17、OnBnClickedOk)ON_BN_CLICKED(IDC_BUTTON1, &Login:OnBnClickedButton1)END_MESSAGE_MAP()BOOL Login:OnInitDialog()CDialog:OnInitDialog();a=0;/初始化a的值为0 用于判断该值是否退出本程序 当输入密码错误,就使该a的值增加1CRect r;/矩形的类,数据成员是 矩形左上角的x的坐标,矩形左上角Y的坐标,矩形右下角x的坐标,矩形右下角Y的坐标CString user;this-GetClientRect(&r);/是获得窗口的当前的客户区,把各坐标值

18、保存在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()后边的语句re

19、gis.EnableWindow(0);/在该函数的参数赋值为0 表示禁止指定的控件接受鼠标和键盘的输入 由于该已经注册过的。regis.SetWindowTextA(已注册);/指定该控件的内容设为 ”已注册用于提示C+语言课程设计10return TRUE;void Login:OnClose()CDialog:OnClose();void Login:OnBnClickedOk()this-UpdateData(1);/将各控件中的数据保存到相应的变量分别为”user“ ” password“if(!user.IsEmpty()&!password.IsEmpty()/检查该各变

20、量的值是否为空,如该值为空,就执行else后边的语句CString user1,password1;/定义两个字符串类变量 用于从配置文件的注册过的用户及密码的值保存在该变量的GetPrivateProfileString(login,user,NULL,user1.GetBuffer(20),20,./setting.ini);/从本身程序的当前的setting.ini配置/文件中的login节名中获取该user键名的值并保存在user1的值,如果找不到该键名,则保存默认值为”NULL“GetPrivateProfileString(login,password,NULL,password1

21、.GetBuffer(20),20,./setting.ini);/如同上面的方法if(user=user1&password=password1)/对比各值是否一致,满足此条件表示该用户名及密码都是正确,可以登陆,即执行if()后边的语句this-ShowWindow(SW_HIDE);/把该对话框的显示方式为隐藏dlg.DoModal();/启动主窗口的对话框CDialog:OnOK();elsea+;/密码错误次数if(a3)/如超过3次的错误密码就执行if()后边的语句CDialog:OnCancel();return;/调用关闭该对话框的函数 CString d;d.Form

22、at(用户名或者密码错误%d次 超过三次错误即将自动退出,a);MessageBox(d,登陆提示,MB_OK|MB_ICONWARNING);/用于提示密码错误 以避免令人觉得这程序有问题else C+语言课程设计11MessageBox(用户名或者密码的字符串为空,登陆提示,MB_OK|MB_ICONWARNING);/当该值为空,则执行该语句 用于提示。void Login:OnBnClickedButton1()Register dialog;/定义注册对话框的对象变量dialog.DoModal();/启动 注册对话框;4.1.2 注册模块Register.h#pragma once

23、#include afxwin.h/ Register 对话框class Register : public CDialogDECLARE_DYNAMIC(Register)public:Register(CWnd* pParent = NULL); / 标准构造函数virtual Register();/ 对话框数据enum IDD = IDD_REGISTER ;protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV 支持DECLARE_MESSAGE_MAP()public:afx_msg void OnB

24、nClickedOk();CString user;CString password;CString password1;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()C

25、+语言课程设计12, password1(_T()Register:Register()void Register: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:OnBnClic

26、kedOk)END_MESSAGE_MAP()void Register:OnBnClickedOk()this-UpdateData();/默认值是 TRUE,即从控件传给变量if(!user.IsEmpty()&!password.IsEmpty()&!password1.IsEmpty()/各变量的字符串是否为空,如都不为空,则执行 if()后边的语句继续注册if(password=password1)/新密码与第二次新密码对比下,如相等,则继续执行注册,反之不继续注册if(IDOK=MessageBox(确定要注册该账号吗?,注册提示,MB_OKCANCEL| MB_I

27、CONQUESTION )/输出提示 是否要确定注册,如点击确认返回值为 IDOKWritePrivateProfileString(login,user,user,./setting.ini);/向该 setting.ini 配置文件中的 login 节名中设置该 user 键名的值为 user的值WritePrivateProfileString(login,password,password,./setting.ini);HWND button; /定义窗口句柄this-GetParent()-GetDlgItem(IDC_BUTTON1,&button);/获取当前窗口的父窗口

28、句柄(登陆对话框) ,然后通过父窗口句柄获取指定参数 ID 为 IDC_BUTTON1 的子元素的句柄并绑定 button 窗口句柄:SetWindowTextA(button,已注册);/改变指定 button 窗口句柄的文本内容为已注册。:EnableWindow(button,0);/第二个参数的值为 0 表示禁止指定的控件接受鼠标和键盘的输入MessageBox(已经成功注册该账号:+user+!,注册提示,MB_OK| MB_ICONASTERISK );/注册成功输出提示 CDialog:OnCancel(); else C+语言课程设计13MessageBox(新密码与第二次新密

29、码不一致 请注意输入正确!,密码提示,MB_OK|MB_ICONEXCLAMATION );else MessageBox(用户名或者密码的字符串为空,注册提示,MB_OK|MB_ICONWARNING);4.1.3 主菜单模块tianjinDlg.h#pragma once#include button.h#include sta.h#includeentering.h#includequery.h#includeSetting.h#includeExplore.h/ CtianjinDlg 对话框class CtianjinDlg : public CDialogEx/ 构造public:

30、CtianjinDlg(CWnd* pParent = NULL); / 标准构造函数/ 对话框数据enum IDD = IDD_TIANJIN_DIALOG ;protected:virtual void DoDataExchange(CDataExchange* pDX);/ 实现protected:HICON m_hIcon;CToolBar toolbar;CStatusBar statusbar;CImageList toolimag;CImageList toolhotimag;button but2;int a;int b;virtual BOOL OnInitDialog();

31、afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP()public:afx_msg void OnTimer(UINT_PTR nIDEvent);button but1;C+语言课程设计14void UpdateFile();sta stat,stat1;afx_msg void OnExit();afx_msg void OnEnter();afx_msg void OnAbout();protected:public:afx_msg void OnQuery();afx_msg void

32、 OnSetting();afx_msg void OnExplore();tianjinDlg.cpp#include stdafx.h#include tianjin.h#include tianjinDlg.h#include afxdialogex.h#includeAbout.h#ifdef _DEBUG#define new DEBUG_NEW#endifCtianjinDlg:CtianjinDlg(CWnd* pParent /*=NULL*/): CDialogEx(CtianjinDlg:IDD, pParent)m_hIcon = AfxGetApp()-LoadIcon

33、(IDR_MAINFRAME);void CtianjinDlg:DoDataExchange(CDataExchange* pDX)CDialogEx:DoDataExchange(pDX);DDX_Control(pDX, IDOK, but1);DDX_Control(pDX, TIC, stat);BEGIN_MESSAGE_MAP(CtianjinDlg, CDialogEx)ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_WM_TIMER()ON_COMMAND(1006, &CtianjinDlg:OnExit)ON_COMMAND(1001,

34、&CtianjinDlg:OnEnter)ON_COMMAND(1003, &CtianjinDlg:OnQuery)ON_COMMAND(1004, &CtianjinDlg:OnSetting)ON_COMMAND(1005, &CtianjinDlg:OnAbout)ON_COMMAND(1002, &CtianjinDlg:OnExplore)END_MESSAGE_MAP()BOOL CtianjinDlg:OnInitDialog()C+语言课程设计15CDialogEx:OnInitDialog();CBitmap bit7;bit0.Lo

35、adBitmapA(IDB_BITMAP1);bit1.LoadBitmapA(IDB_BITMAP2);bit2.LoadBitmapA(IDB_BITMAP3);bit3.LoadBitmapA(IDB_BITMAP4);bit4.LoadBitmapA(IDB_BITMAP5);bit5.LoadBitmapA(IDB_BITMAP6);bit6.LoadBitmapA(IDB_BITMAP8);toolimag.Create(70,50,ILC_COLOR|ILC_MASK,0,0);for(int i=0;i6;i+)toolimag.Add(&biti,ILC_MASK);

36、toolhotimag.Create(58,60,ILC_COLOR|ILC_MASK,0,0);toolhotimag.Add(&bit6,ILC_COLOR16);toolbar.Create(this);UINT buttons6=1001,1002,1003,1004,1005,1006;toolbar.SetButtons(buttons,6);char buttontext7=编辑,浏览,查询,设置,关于,退出;for(int i=0;i6;i+)toolbar.SetButtonText(i,buttontexti);toolbar.GetToolBarCtrl().Se

37、tImageList(&toolimag);toolbar.GetToolBarCtrl().SetHotImageList(&toolhotimag);toolbar.SetSizes(CSize(80,80),CSize(70,50);toolbar.GetToolBarCtrl().SetStyle(CCS_TOP|TBSTYLE_FLAT);statusbar.Create(this);UINT pens3=100,101,102;statusbar.SetIndicators(pens,3);statusbar.SetPaneText(0,作者:胡志冲);Update

38、File();statusbar.SetPaneText(2,CTime:GetCurrentTime().Format(%Y:%m:%d:%H:%M:%S);for(int i=0;iRepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);return TRUE; / 除非将焦点设置到控件,否则返回 TRUEvoid CtianjinDlg:OnPaint()if (IsIconic()C+语言课程设计16elseCRect dialogrect;this-GetClientRect(dialogrect);CDC

39、 pic;CBitmap pic1;BITMAP info;pic1.LoadBitmapA(IDB_BITMAP7);pic1.GetBitmap(&info);CPaintDC dc(this);pic.CreateCompatibleDC(&dc);pic.SelectObject(&pic1);dc.StretchBlt(0,0,dialogrect.right,dialogrect.bottom,&pic,0,0,info.bmWidth,info.bmHeight,SRCCOPY);CDialogEx:OnPaint();HCURSOR Ctianj

40、inDlg:OnQueryDragIcon()return static_cast(m_hIcon);void CtianjinDlg:OnTimer(UINT_PTR nIDEvent)CRect dialogrect;this-GetClientRect(dialogrect);statusbar.SetPaneText(2,CTime:GetCurrentTime().Format(%Y:%m:%d:%H:%M:%S);stat.MoveWindow(a,dialogrect.bottom-402,260,50);if(a=dialogrect.right-270)b=1;else if

41、(a=50)b=0;if(b=0)a+=20;elsea-=20;CDialogEx:OnTimer(nIDEvent);void CtianjinDlg:OnExit()CDialogEx:OnCancel();void CtianjinDlg:OnEnter()entering enter;C+语言课程设计17enter.DoModal();UpdateFile();void CtianjinDlg:UpdateFile()CFile file(data.txt,CFile:modeRead|CFile:modeNoTruncate|CFile:modeCreate);CString st

42、at;stat.Format(已经收录%d 本的书,file.GetLength()/95);file.Close();statusbar.SetPaneText(1, stat);void CtianjinDlg:OnQuery()query quer;quer.DoModal();void CtianjinDlg:OnSetting()Setting set;set.DoModal();void CtianjinDlg:OnExplore()Explore explore;explore.DoModal();void CtianjinDlg:OnAbout()About aboutdlg;

43、aboutdlg.DoModal();4.1.4 编辑模块Entering.h#pragma once#include afxcmn.h#include afxwin.h#include editprice.h/ entering 对话框class entering : public CDialogDECLARE_DYNAMIC(entering)public:entering(CWnd* pParent = NULL); / 标准构造函数virtual entering();/ 对话框数据C+语言课程设计18enum IDD = IDD_ENTERING ;protected:virtual

44、 void DoDataExchange(CDataExchange* pDX); / DDX/DDV 支持DECLARE_MESSAGE_MAP()public:CListCtrl listctrl;/列表框控件对象virtual BOOL OnInitDialog();/初始化函数afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);/控件窗口函数 用于画出控件CComboBox year,mo,day;char *name,*num,*autho,*pr,*time,*price;afx_msg void OnBn

45、ClickedOk();CString booknum,bookname,author,press;int index;int a;int deletes;bool Check();void Input(int Inde,int c);afx_msg void OnClose();afx_msg void OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult);afx_msg void OnBnClickedOk2();afx_msg void OnBnClickedOk3();afx_msg void OnLvnColumnclickLi

46、st1(NMHDR *pNMHDR, LRESULT *pResult);afx_msg void OnNMClickList1(NMHDR *pNMHDR, LRESULT *pResult);EditPrice EdPrice;CString price1;afx_msg void OnBnClickedButton1();entering.cpp #include stdafx.h#include tianjin.h#include entering.h#include afxdialogex.h/ entering 对话框IMPLEMENT_DYNAMIC(entering, CDia

47、log)entering:entering(CWnd* pParent /*=NULL*/): CDialog(entering:IDD, pParent), booknum(_T(), bookname(_T(), author(_T()C+语言课程设计19, press(_T(), price1(_T()entering:entering()void entering:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);DDX_Control(pDX, IDC_LIST1, listctrl);DDX_Control(

48、pDX, IDC_COMBO1, year);DDX_Control(pDX, IDC_COMBO4, mo);DDX_Text(pDX, IDC_EDIT1, booknum);DDX_Text(pDX, IDC_EDIT2, bookname);DDX_Text(pDX, IDC_EDIT3, author);DDX_Text(pDX, IDC_EDIT4, press);DDX_Control(pDX, IDC_COMBO3, day);DDV_MaxChars(pDX, bookname, 15);DDX_Control(pDX, IDC_EDIT5, EdPrice);DDX_Tex

49、t(pDX, IDC_EDIT5, price1);DDV_MaxChars(pDX, booknum, 14);DDV_MaxChars(pDX, author, 10);DDV_MaxChars(pDX, press, 15);DDV_MaxChars(pDX, price1, 6);BEGIN_MESSAGE_MAP(entering, CDialog)ON_WM_CTLCOLOR()ON_BN_CLICKED(IDOK, &entering:OnBnClickedOk)ON_WM_CLOSE()ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST1, &

50、;entering:OnLvnItemchangedList1)ON_BN_CLICKED(IDOK2, &entering:OnBnClickedOk2)ON_BN_CLICKED(IDOK3, &entering:OnBnClickedOk3)ON_NOTIFY(LVN_COLUMNCLICK, IDC_LIST1, &entering:OnLvnColumnclickList1)ON_NOTIFY(NM_CLICK, IDC_LIST1, &entering:OnNMClickList1)ON_BN_CLICKED(IDC_BUTTON1, &en

51、tering:OnBnClickedButton1)END_MESSAGE_MAP()BOOL entering:OnInitDialog()CDialog:OnInitDialog();listctrl.SetExtendedStyle(LVS_EX_FULLROWSELECT |LVS_EX_GRIDLINES|LVS_EX_CHECKBOXES);/设置该列表框控件的扩张风格 允许整行选中 画出网格线 允许添加单选按钮控件C+语言课程设计20listctrl.InsertColumn(0,书名,0,100,2);/在该列表框控件中的第 0 列的设置为“书名” ,其宽度为 100listc

52、trl.InsertColumn(1,书号,0,100);listctrl.InsertColumn(2,作者,0,60);listctrl.InsertColumn(3,出版社,0,100);listctrl.InsertColumn(4,出版日期,0,90);listctrl.InsertColumn(5,价格,0,50);listctrl.SetBkColor(RGB(255,0,0);/设置该列表框控件的背景颜色为listctrl.SetTextBkColor (RGB(0,250,12);/设置该列表框控件的文本背景颜色listctrl.SetTextColor (RGB(0,25,

53、250);/设置该列表框控件的文字颜色CString nu;for(int i=2000;i2020;i+)nu.Format(%d,i);year.AddString(nu);/向“年的组合框控件中插入数据 比如 2010 2011年for(int i=1;i=12;i+)if(i10)nu.Format(0%d,i);/向“月的组合框控件中插入数据 比如 1 2 3 月elsenu.Format(%d,i);mo.AddString(nu);for(int i=1;i=31;i+)if(i10)nu.Format(0%d,i);/向“日的组合框控件中插入数据 比如 1 2 3 日elsen

54、u.Format(%d,i);day.AddString(nu);CFile file(data.txt,CFile:modeRead);/打开文件 a=file.GetLength()/95;/总文件的大小除以每一本图书的文件大小等于几本书 char *text=new char20;/开辟 20 个类型 char for(int i=0;iGetClientRect(&dd);pWnd-GetWindowRect(&dd);pDC-SetTextColor(RGB(160,32,240);if(CTLCOLOR_EDIT=CTLCOLOR_EDIT)pWnd-GetWind

55、owRect(&dd);return hbr;void entering:OnBnClickedOk()/添加记录信息if(Check()/判断该值是否继续输入还是不输入for(int i=0;i=0&listctrl.GetItemCount()index)/判断该值是否已经选图书信息 如已选择该图书信息,则执行 if 后边的语句Input(index,0);/达到符合字符输入及已选该图书信息的条件就执行添加记录,第一个参数是在该列表框的未尾的位置,第二个参数 1 表示添加记录行为 非 1 表示修改记录行为elseMessageBox(该未选项目,无法修改,提示);/弹出消息

56、框用于提示bool entering:Check()this-Invalidate();/进行更新显示的函数this-UpdateWindow();/使窗口立即重绘this-UpdateData();/默认值是 TRUE,即从控件传给变量CClientDC dc(this);/关联本窗口(this) ,在目标窗口的任何一部分进行绘图,包含边界与标题dc.SetBkMode(TRANSPARENT);/设置文字背景为透明(transparent)dc.SetTextColor(RGB(255,0,0);/设置文字颜色为红色-RGB(255,0,0)int n=0;/用于判断符合的次数?如输入文字

57、都不为空,即符合这条件 就是n=5 if(bookname.IsEmpty()/判断该字符是否为空?如为空,则执行 if()后边的的语句dc.TextOutA(820,65,该字符为空);/向关联的窗口设备上下文输出文字 用于提示else;n+;/不为空的话,就使 n 的值增加 1if(booknum.IsEmpty()dc.TextOutA(820,113,该字符为空);C+语言课程设计23elsen+;if(author.IsEmpty()dc.TextOutA(820,155,该字符为空);elsen+;if(press.IsEmpty()dc.TextOutA(820,200,该字符为

58、空);elsen+;if(price1.IsEmpty()dc.TextOutA(820,235,该字符为空);elsen+;if(0year.GetCurSel()|0mo.GetCurSel()|0day.GetCurSel()/判断该是否选项dc.TextOutA(875,287,该未选);elseif(nUpdateData(0);/由于默认值是 TRUE,即从控件传给变量,需要改为 FALSE,表示从变量传给控件。void entering:OnClose()CFile file(data.txt,CFile:modeWrite|CFile:modeCreate);/第一个参数dat

59、a.txt表示指定该文件名,第二个参数的值表示以写入模式char *text=new char20;/开辟 20 个类型 charfor(int i=0;ilistctrl.GetItemCount();i+)/根据列表框的多少行相应循环多少次listctrl.GetItemText(i,0,text,20);/向该列表框控件的第 i 的行的第 0列的获取内容并保存在 text 的值file.Write(text,20);/向磁盘关联的文件写入 text 的值listctrl.GetItemText(i,1,text,20);file.Write(text,20);listctrl.GetIt

60、emText(i,2,text,10);file.Write(text,10);listctrl.GetItemText(i,3,text,20);file.Write(text,20);listctrl.GetItemText(i,4,text,15);file.Write(text,15);listctrl.GetItemText(i,5,text,10);file.Write(text,10);delete text,name,num,autho,pr,time;file.Close();CDialog:OnClose();void entering:OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult)LPNMLISTVIEW pNMLV = reinterpret_cast(pNMHDR);int SelectCount=0;/选项次数for(int i=0;i=0;i-

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论