基于VC++MFC程序设计简易画图板32 (4)
- 格式:doc
- 大小:338.50 KB
- 文档页数:73
//??????">
实验1 Visual C++图形程序设计一、实验目的Visual C++是在Microsoft C的基础上发展而来的,随着计算机软、硬件技术的快速发展,如今Visual C++已成为集编辑、编译、运行、调试于一体功能强大的集成编程环境。
本章以Visual C++ 6.0为对象,主要介绍Visual C++集成编成环境的使用、图形设备接口和常用图形程序设计、鼠标编程以及菜单设计等基础,目的是通过对Visual C++的学习,掌握Visual C++图形程序设计的方法,为计算机图形学原理部分的算法实现提供程序工具和方法。
二、实验任务1.学习Visual C++图形程序设计的方法;2.掌握Visual C++集成编成环境的使用、图形设备接口和常用图形程序设计、鼠标编程、橡皮筋交互技术、画刷与画笔以及菜单设计等;三、基础知识和实验步骤3.1 Visual C++ 6.0应用程序开发方法介绍Visual C++ 6.0集成开发环境,以一个简单的实例介绍利用Visual C++应用程序工程建立方法和程序设计框架。
3.1.1 Visual C++的集成开发环境从开始菜单中启动Visual C++ 6.0,进入开发集成环境。
打开一个项目后,可以看到Visual C++ 6.0的开发环境由标题栏、工具栏、工作区窗口、源代码编辑窗口、输出窗口和状态栏组成,见图3.1所示。
标题栏用于显示应用程序名和所打开的文件名,标题栏的颜色可以表明对应窗口是否被激活。
菜单栏包括文件、编辑、显示、插入、工程、编译、工具、窗口和帮助九项主菜单,包含了从源代码的编辑、界面设计、程序调试和编译运行在内的所有功能。
工具栏列出了常用的菜单命令功能和对象方法。
工具栏的下面是两个窗口,一个是工作区窗口,用于列出工程中的各种对象,一个是源代码编辑窗口,用于各个对象的程序设计。
输出窗口显示项目建立过程中所产生的各种信息。
屏幕底端是状态栏,它给出当前操作或所选择命令的提示信息。
MFC中的CDC 绘图绘图一般在视图类的(屏幕/打印机)绘图消息响应函数OnDraw中进行,例如:void CTestView::OnDraw(CDC* /*pDC*/) {CTestDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);if (!pDoc)return;// TODO: 在此处为本机数据添加绘制代码}每次需要重绘窗口时(程序启动/窗口大小改变/全部或部分窗口重现/程序员调用RedrawWindow或UpdateWindow),应用程序框架都会调用该CWnd的消息响应成员函数(的覆盖)来绘制窗口客户区。
在Windows中,绘图一般在视图窗口的客户区进行,使用的是MFC的设备上下文(DC = Device-Context)类CDC中各种绘图函数。
在绘图前,必须先得到客户区大小和DC、设置绘图颜色,然后再根据文档数据或用户操作来绘制图形。
1 几何对象的结构和类为了使用绘图函数,应该先了解绘图所用到的几种表示几何对象的结构和类。
这些结构和类分别定义在头文件windef.h和afxwin.h中。
1.点1)点结构POINT点数据结构POINT用来表示一点的x、y坐标:typedef struct tagPOINT {LONG x;LONG y;} POINT;2)点类CPoint点类CPoint为一个没有基类的独立类,封装了POINT结构,有成员变量x和y,其构造函数有5种:CPoint( );CPoint( int initX, int initY );CPoint( POINT initPt );CPoint( SIZE initSize );CPoint( LPARAM dwPoint ); // 低字设为x、高字设为yCPoint类还定义了4个平移和设置函数:void Offset(int xOffset, int yOffset);void Offset(POINT point);void Offset(SIZE size);void SetPoint(int X, int Y);CPoint类还重载了+、-、+=、-=、==、!=等运算符来支持CPoint对象和CPoint、POINT、SIZE对象之间的运算。
第三章 MFC 应用程序概述第3章 MFC 应用程序概述Microsoft Windows 是微软公司推出的一个应用于微机上的具有图形用户界面的多任务和多窗口的操作系统。
Windows 应用程序也称为窗口应用程序,所有的窗口应用程序都有着相同的窗口风格和菜单结构,用户界面友好,方便用户操作。
本章从剖析窗口应用程序的基本结构入手,继而介绍使用MFC 类库开发的应用程序框架结构,并介绍窗口应用程序运行的核心机制-消息映射。
学习了本章,你将对MFC 应用程序框架结构和运行机制有个整体的了解,为后面进入窗口应用程序开发打下良好的基础。
3.1 窗口应用程序概述窗口应用程序的开发一般采用可视化的面向对象的开发,可选择的窗口应用程序开发语言有Visual C++、Visual Basic 、Visual Java 、Dephi 等等。
无论采用哪一种开发语言,首先要了解窗口应用程序的基本机制。
3.1.1 窗口编程基础窗口应用程序运行于Windows 操作系统,Windows操作系统是一个多任务操作系统,因此窗口应用程序的组成,支持技术,基本运行机制等与DOS 应用程序有着本质的区别。
在学习开发窗口应用程序之前,先要对窗口应用程序有一个概念上的了解。
1. 窗口窗口是应用程序与用户进行交互的界面,应用程序通过窗口传递信息给用户,同样用户通过窗口输入数据,发布命令给应用程序。
Windows 界面包含了丰富的标准用户界面元素,包括窗口、图标、菜单、滚动条、对话框、控件和消息框等。
用户使用这些界面元素可以方便的与应用程序进行交互,一个典型的窗口外观如图3-1所示。
垂直滚动条 控制菜单栏 标题栏 菜单栏关闭按钮 最小化按钮 最大化按钮客户区VC++6简明教程图3-1 Windows应用程序窗口组成在Windows编程中,各种窗口、菜单、按钮、对话框及程序模块等Windows的规范部件是按“对象”来组织的。
为了提高开发窗口应用程序的效率,微软公司为用户提供了大量能创建上述标准元素的API函数和C++类,并且以Windows API函数库和C++类库的形式提供给用户,以充分满足构成应用程序操作界面的需要。
VS2010/MFC编程入门教程之目录第一部分:VS2010/MFC开发环境VS2010/MFC编程入门之前言VS2010/MFC编程入门之一(VS2010与MSDN安装过程图解)第二部分:VS2010-MFC应用程序框架VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架)VS2010/MFC编程入门之三(VS2010应用程序工程中文件的组成结构)VS2010/MFC编程入门之四(MFC应用程序框架分析)VS2010/MFC编程入门之五(MFC消息映射机制概述)第三部分:对话框VS2010/MFC编程入门之六(对话框:创建对话框模板和修改对话框属性)VS2010/MFC编程入门之七(对话框:为对话框添加控件)VS2010/MFC编程入门之八(对话框:创建对话框类和添加控件变量)VS2010/MFC编程入门之九(对话框:为控件添加消息处理函数)VS2010/MFC编程入门之十(对话框:设置对话框控件的Tab顺序)VS2010/MFC编程入门之十一(对话框:模态对话框及其弹出过程)VS2010/MFC编程入门之十二(对话框:非模态对话框的创建及显示)VS2010/MFC编程入门之十三(对话框:属性页对话框及相关类的介绍)VS2010/MFC编程入门之十四(对话框:向导对话框的创建及显示)VS2010/MFC编程入门之十五(对话框:一般属性页对话框的创建及显示)VS2010/MFC编程入门之十六(对话框:消息对话框)VS2010/MFC编程入门之十七(对话框:文件对话框)VS2010/MFC编程入门之十八(对话框:字体对话框)VS2010/MFC编程入门之十九(对话框:颜色对话框)第四部分:常用控件VS2010/MFC编程入门之二十(常用控件:静态文本框)VS2010/MFC编程入门之二十一(常用控件:编辑框Edit Control)VS2010/MFC编程入门之二十二(常用控件:按钮控件Button、Radio Button和Check Box)VS2010/MFC编程入门之二十三(常用控件:按钮控件的编程实例)VS2010/MFC编程入门之二十四(常用控件:列表框控件ListBox)VS2010/MFC编程入门之二十五(常用控件:组合框控件Combo Box)VS2010/MFC编程入门之二十六(常用控件:滚动条控件Scroll Bar)VS2010/MFC编程入门之二十七(常用控件:图片控件Picture Control)VS2010/MFC编程入门之二十八(常用控件:列表视图控件List Control 上)VS2010/MFC编程入门之二十九(常用控件:列表视图控件List Control 下)VS2010/MFC编程入门之三十(常用控件:树形控件Tree Control 上)VS2010/MFC编程入门之三十一(常用控件:树形控件Tree Control 下)VS2010/MFC编程入门之三十二(常用控件:标签控件Tab Control 上)VS2010/MFC编程入门之三十三(常用控件:标签控件Tab Control 下)第五部分:菜单、工具栏与状态栏VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)VS2010/MFC编程入门之三十五(菜单:菜单及CMenu类的使用)VS2010/MFC编程入门之三十六(工具栏:工具栏资源及CToolBar类)VS2010/MFC编程入门之三十七(工具栏:工具栏的创建、停靠与使用)VS2010/MFC编程入门之三十八(状态栏的使用详解)第六部分:文档、视图和框架VS2010/MFC编程入门之三十九(文档、视图和框架:概述)VS2010/MFC编程入门之四十(文档、视图和框架:各对象之间的关系)VS2010/MFC编程入门之四十一(文档、视图和框架:分割窗口)第七部分:MFC常用类VS2010/MFC编程入门之四十二(MFC常用类:CString类)VS2010/MFC编程入门之四十三(MFC常用类:CTime类和CTimeSpan类)VS2010/MFC编程入门之四十四(MFC常用类:定时器Timer)VS2010/MFC编程入门之四十五(MFC常用类:CFile文件操作类)VS2010/MFC编程入门之四十六(MFC常用类:MFC异常处理)第八部分:字体和文本输出VS2010/MFC编程入门之四十七(字体和文本输出:CFont字体类)VS2010/MFC编程入门之四十八(字体和文本输出:文本输出)第九部分:图形图像VS2010/MFC编程入门之四十九(图形图像:CDC类及其屏幕绘图函数)VS2010/MFC编程入门之五十(图形图像:GDI对象之画笔CPen)VS2010/MFC编程入门之五十一(图形图像:GDI对象之画刷CBrush)第十部分:Ribbon界面开发VS2010/MFC编程入门之五十二(Ribbon界面开发:创建Ribbon样式的应用程序框架)VS2010/MFC编程入门之五十三(Ribbon界面开发:为Ribbon Bar添加控件)VS2010/MFC编程入门之五十四(Ribbon界面开发:使用更多控件并为控件添加消息处理函数)VS2010/MFC编程入门之前言鸡啄米的C++编程入门系列给大家讲了C++的编程入门知识,大家对C++语言在语法和设计思想上应该有了一定的了解了。
第二章VC6.0简单绘图说明许多学编程的都是从C 语言开始入门的,而目前的现状是:有些学校以Turbo C 为环境讲C 语言,只是Turbo C 的环境实在太老了,复制粘贴都很不方便。
有些学校直接拿VC 来讲C 语言,因为VC 的编辑和调试环境都很优秀,并且VC 有适合教学的免费版本。
可惜在VC 下只能做一些文字性的练习题,想画条直线画个圆都很难,还要注册窗口类、建消息循环等等,初学者会受严重打击的。
初学编程想要绘图就得用TC,很是无奈。
还有计算机图形学,这门课程的重点是绘图算法,而不是Windows 编程。
所以,许多老师不得不用TC 教学,因为Windows 绘图太复杂了,会偏离教学的重点。
新的图形学的书有不少是用的OpenGL,可是门槛依然很高。
要给初学者一个简单的学习平台,就要VC的开发平台和TC的简单的绘图功能,于是就有了这个EasyX 库,我们需要在VC下下载安装EasyX库,下载地址:http:///。
下面是VC下简单绘图函数的基本说明。
1.系统支持操作系统版本:Windows 2000 及以上系统。
编译环境版本:Visual C++ 6.0 / 2008(x86 & x64) / 2010(x86 & x64)。
2.安装请先将下载的压缩包解压缩,然后执行Setup.hta,并跟随提示安装。
安装程序会检测已经安装的VC 版本,并根据选择将对应的.h 和.lib 文件安装至VC 的include 和lib 文件夹内。
安装程序不会修改注册表或者本机的任何文件。
如果需要手动安装,请根据下面的文件列表说明将安装包里的相关文件分别复制到VC 对应的include 和lib 文件夹内,或者将include 和lib 文件夹放到任意位置,然后修改VC 中的Lib 和Include 的引用路径。
3.卸载由于安装程序并不改写注册表,因此在“添加删除程序”中不会看到EasyX 的卸载项。
VC++是微软公司开发的一个集成开发环境,换句话说,就是使用c++的一个开发平台.VC++是Windows平台上的C++编程环境,学习VC要了解很多Windows平台的特性,并且还要掌握MFC、ATL、COM等的知识,难度比较大。
Windows下编程需要了解Windows的消息机制以及回调(callback)函数的原理;MFC是Win32API的包装类,需要理解文档视图类的结构,窗口类的结构,消息流向等等;COM是代码共享的二进制标准,需要掌握其基本原理等等。
VC是一个主流的开发平台,VC++不是一门语言,可以把C++看作为一种“工业标准”,而VC++则是某种操作系统平台下的“厂商标准”,而“厂商标准”是在遵循“工业标准”的前提下扩展而来的。
VC++是在Windows平台下开发VC++应用程序,VC++应用程序的开发主要有两种模式,一种是WIN API方式,另一种则是MFC方式,传统的WIN API开发方式比较繁琐,而MFC则是对WIN API再次封装,所以MFC 相对于WIN API开发更具备效率优势,但为了对WINDOWS开发有一个较为全面细致的认识,笔者在这里还是以讲解WIN API的相关内容为主线。
首先VC是一个软件(IDE集成开发环境)(编译、编辑、调试)WindowsSDK(软件开发工具)VC的灵魂:MFC(微软基础类库)ATL(ActiveX模板类库)其他的SDK,如OpenGL,DirectX,ActiveMoive,DrawDib(WinG)VC需要掌握的东西:1、养成一种严谨的软件开发习惯,熟悉软件工程的基本原则。
2、C语言基础3、C++最基本内容:类、继承性、封装性、多态性的概念4、如何用向导建立一个程序框架5、设计菜单6、设计工具条7、设计和使用对话框,熟悉最常用的对话框控件:按钮、静态文本、编辑框等8、知道怎样新建类、成员函数、成员变量、消息处理函数。
9、了解最常用的Windows消息:如WM_PAINT(重绘窗口),鼠标按下、弹起、移动,初始化对话框等。
VB开简易的画图板功能:VB开简易的画图板,使其具有画图板的各块功能VB 界面如下:图二Option ExplicitDim i, drawact As IntegerDim canline, canpen, canrubber, canenlarge, canellipse, canrectangle, canflood, canget, canbrush As Boolean Dim x0, y0, xnow, ynow, radius0, radius As Single Dim Filename As StringPrivate Sub Form_Load()' 初始化图片框的大小和AutoRedraw属性和窗体的标题Picture3.Width = Picture1.WidthPicture3.Height = Picture1.HeightPicture1.AutoRedraw = TruePicture3.AutoRedraw = TruePicture1.Picture = LoadPicture()Filename = "Untitled"Form1.Caption = FilenameEnd SubPrivate Sub Label2_Click(Index As Integer)' 选择某项操作时,将其下凹看上去像是被按下去的 For i = 0 To Label2.Count - 1Label2(i).BorderStyle = 0NextLabel2(Index).BorderStyle = 1drawact = IndexEnd SubPrivate Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)' 当鼠标按下时,对于选择不同的工具执行不同的操作 Select Case drawact' 橡皮Case 0canrubber = TruePicture1.CurrentX = X: Picture1.CurrentY = YPicture1.DrawMode = 13Picture1.DrawWidth = 7' 直线Case 1canline = Truex0 = X: y0 = Yxnow = X: ynow = YPicture1.DrawMode = 7Picture1.DrawWidth = 1' 矩形Case 2canrectangle = Truex0 = X: y0 = Yxnow = X: ynow = YPicture1.DrawMode = 7Picture1.DrawWidth = 2' 椭圆Case 3canellipse = Truex0 = X: y0 = Yxnow = X: ynow = YPicture1.DrawMode = 7Picture1.DrawWidth = 1' 铅笔Case 4canpen = TruePicture1.CurrentX = X: Picture1.CurrentY = YPicture1.DrawMode = 13' 刷子Case 5canbrush = TruePicture1.CurrentX = X: Picture1.CurrentY = YPicture1.DrawMode = 13Picture1.DrawWidth = 5' 油漆桶Case 6Picture1.BackColor = Label1.BackColor' 放大镜Case 7canenlarge = Truex0 = X: y0 = Yxnow = X: ynow = YPicture1.DrawMode = 7Picture1.DrawWidth = 1End SelectEnd SubPrivate Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)' 在标签中显示当前鼠标在画板中的位置Label3.Caption = "X: " + CStr(X) + Chr(13) + Chr(10) + "Y: " + CStr(Y)' 当鼠标移动时,对于选择不同的工具执行不同的操作 Select Case drawact' 橡皮Case 0If canrubber ThenPicture1.Line -(X, Y), vbWhiteEnd If' 直线Case 1If canline ThenPicture1.Line (x0, y0)-(xnow, ynow), Not (Picture1.ForeColor)Picture1.Line (x0, y0)-(X, Y), Not (Picture1.ForeColor)xnow = X: ynow = YEnd If' 矩形Case 2If canrectangle ThenPicture1.Line (x0, y0)-(xnow, ynow), Not (Picture1.ForeColor), BPicture1.Line (x0, y0)-(X, Y), Not (Picture1.ForeColor), Bxnow = X: ynow = YEnd If' 椭圆Case 3radius0 = Sqr((xnow - x0) ^ 2 + (ynow - y0) ^ 2)radius = Sqr((X - x0) ^ 2 + (Y - y0) ^ 2)If canellipse ThenPicture1.Circle (x0, y0), radius0, Not (Picture1.ForeColor)Picture1.Circle (x0, y0), radius, Not (Picture1.ForeColor)xnow = X: ynow = YEnd If' 铅笔Case 4If canpen ThenPicture1.Line -(X, Y), Picture1.ForeColorEnd If' 刷子Case 5If canbrush ThenPicture1.Line -(X, Y), Picture1.ForeColorEnd If' 油漆桶Case 6' do nothing' 放大镜Case 7If canenlarge ThenPicture1.Line (x0, y0)-(xnow, ynow), Not (Picture1.ForeColor), BPicture1.Line (x0, y0)-(X, Y), Not (Picture1.ForeColor), Bxnow = X: ynow = YEnd IfEnd SelectEnd SubPrivate Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)' 当鼠标放开时,对于选择不同的工具执行不同的操作 Select Case drawactCase 1canline = FalsePicture1.Line (x0, y0)-(xnow, ynow)Picture1.DrawMode = 13Picture1.Line (x0, y0)-(xnow, ynow), Picture1.ForeColorCase 2canrectangle = FalsePicture1.Line (x0, y0)-(xnow, ynow), Not (Picture1.ForeColor), BPicture1.DrawMode = 13Picture1.Line (x0, y0)-(xnow, ynow), Picture1.ForeColor, BCase 3canellipse = FalsePicture1.Circle (x0, y0), radius, Not (Picture1.ForeColor)Picture1.DrawMode = 13Picture1.Circle (x0, y0), radius, Picture1.ForeColorCase 4canpen = FalseCase 5canbrush = FalseCase 7canenlarge = FalsePicture1.Line (x0, y0)-(xnow, ynow), Not (Picture1.ForeColor), BIf (xnow - x0) * (ynow - y0) <> 0 ThenPicture3.PaintPicture Picture1.Image, 0, 0, Picture3.Width, Picture3.Height, x0, y0, (xnow - x0), (ynow - y0)Picture1.PaintPicture Picture3.Image, 0, 0End IfEnd SelectEnd SubPrivate Sub Picture2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)' 通过point方法拾取颜色,并设定为前景色Picture1.ForeColor = Picture2.Point(X, Y)Label1.BackColor = Picture2.Point(X, Y)End SubPrivate Sub MNew_Click(Index As Integer)' 新建一个图画Picture1.Picture = LoadPicture()Filename = "Untitled"Form1.Caption = FilenameEnd SubPrivate Sub MSave_Click()' 设置过滤器CommonDialog1.Filter = "bmp文件|*.bmp|所有文件|*.*"' 设置缺省过滤器CommonDialog1.FilterIndex = 2If Filename = "Untitled" Then'如果文件尚未命名,则显示保存对话框CommonDialog1.ShowSaveFilename = CommonDialog1.FilenameIf Filename <> "" ThenSavePicture Picture1.Image, FilenameEnd IfElse'否则直接保存SavePicture Picture1.Image, FilenameEnd IfForm1.Caption = FilenameEnd SubPrivate Sub MExit_Click(Index As Integer)' 退出程序EndEnd Sub1.电脑上必须要先Microsoft Visual Studio(也就是VB软件)2.用VB软件设置窗口如上(图二)3.各个Command对应的VB代码如下:运行VB时,需要先打开SolidWorks一个新零件窗口,然后运行VB,点击界面按钮即可运行结果:完美实现对应功能。
MFC(Microsoft Foundation Class)是一组用于开发Windows桌面应用程序的C++类库。
在MFC中,您可以使用贝塞尔曲线来创建平滑曲线或路径。
贝塞尔曲线是一种数学曲线,通常用于绘制平滑的曲线或路径,其中包括四个控制点:起点、终点以及两个控制点。
以下是在MFC中使用贝塞尔曲线的基本步骤:1. **包含MFC头文件**:首先,在您的MFC应用程序中包含必要的头文件。
通常,您需要包含`afxwin.h`和`afxext.h`等头文件。
2. **创建CPoint对象**:为了定义贝塞尔曲线,您需要创建四个`CPoint`对象来表示起点、终点以及两个控制点。
```cppCPoint startPoint(x1, y1); // 起点坐标CPoint endPoint(x2, y2); // 终点坐标CPoint controlPoint1(x3, y3); // 控制点1坐标CPoint controlPoint2(x4, y4); // 控制点2坐标```3. **使用CDC对象绘制贝塞尔曲线**:MFC中的CDC(Device Context)对象用于绘制图形。
您可以使用CDC对象的`PolyBezier`方法来绘制贝塞尔曲线。
```cppCDC* pDC = GetDC(); // 获取设备上下文对象pDC->PolyBezier(startPoint, controlPoint1, controlPoint2, endPoint);ReleaseDC(pDC); // 释放设备上下文对象```上述代码使用`PolyBezier`方法绘制了一个贝塞尔曲线,其中`startPoint`是起点,`endPoint`是终点,`controlPoint1`和`controlPoint2`是控制点。
4. **刷新窗口**:如果在视图或对话框中进行绘制,通常需要在绘制之后调用`Invalidate`或`InvalidateRect`来请求重绘窗口,以使绘制的曲线可见。
#include #include #include #pragma comment(lib, "winmm.lib") #include
//???????????????????????????????????????// HANDLE hConsole;
/*全局变量*********************************************************/ //Music #define MMM "e:\\\\Music\\\\" #define MP3 ".mp3" //结构体中分量数组 #define MAXTITL 20 #define MAXAUTL 20 #define MAXCATE 20 #define MAXTIME 20 #define MAXHOUS 20 #define MAXID 20 #define MAXDAY 20 #define MAXMUSI 20 #define MAX 20 //各分量长度中的最大值 //文件名 #define FILENAME "e:\\bookinformation.txt" //全部图书信息 #define FILEBOOKIN "e:\\bookin.txt" //入库图书信息 #define FILEBOOKOUT "e:\\bookout.txt" //出库图书信息
//子函数声明 void music1( char *); //打开关联音乐 void closemusic1( char *); //关闭关联音乐
int Return(); //返回上一菜单 int insert_record( char *fileName, void *newRecord, int recordLength );//存盘 /*录入图书信息******************************************************/ int inputId( char *stringId); //ID录入 int inputTitle( char *stringTitle ); //书名录入 int inputAuthor( char *stringAuthor ); //作者录入 int inputCate( char *stringCate ); //书籍类型录入 int inputTime( char *stringTime ); //出版社录入 int inputHouse( char *stringHOUS ); //出版时间录入 int findRecord_bk_Id( char *fileName, char *bk_title, struct book *bk ); //以Id为关键字在[bookinformation]文件中查找是否已存在相关信息
/*修改图书信息****************************************************/ void edit_record(); //修改(主) int updata_record( char *fileName, char *newRecord, int recordNo, int recordLength ); //修改(子):将修改过的信息写入文件 int T_Edit( char *stringTitle ); //输入要修改信息的的书的名字,并在文件中查找是否已存在该书的相关信息
int edit_Title( char *searcTitle, char *alter, int RecNo ); //修改书名 int edit_Author( char *searcTitle, char *alter, int RecNo ); //修改作者 int edit_Cate( char *searcTitle, char *alter, int RecNo ); //修改分类 int edit_House( char *searcTitle, char *alter, int RecNo ); //修改出版社 int edit_Time( char *searcTitle, char *alter, int RecNo ); //修改出版日期
/*删除图书信息***************************************************/ void dele_main();//删除的主函数 int T_Dele( char *stringTitle ); //输入要删除信息的的书的名字,并在文件中查找是否已存在该书的相关信息 int delete_record( char *fileName, int recordNo, int recordLength ); //删除的子函数,将要删除的信息删除掉
/*查询图书信息*******************************************************/ //查询主函数 void search_main();
void searchBook(); //以 书 名 为关键字查询 void searchAuthor(); //以 作 者 为关键字查询 void searchCate(); //以 类 型 为关键字查询 void searchHouse(); //以 出版社 为关键字查询 void searchId(); //以 I D 为关键字查询
int getid( char *fileName, char *bk_id, struct book *bk ); //查询 I D 是否在文件中是否已经存在 int gettitle( char *fileName, char *bk_title, struct book *bk ); //查询 书 名 是否在文件中是否已经存在 int getauthor( char *fileName, char *bk_author, struct book *bk, int booknumber ); //查询 作 者 是否在文件中是否已经存在 int getcategorie( char *fileName, char *bk_categorie, struct book *bk ); //查询 类 型 是否在文件中是否已经存在 int gethouse( char *fileName, char *bk_house, struct book *bk ); //查询 出版社 是否在文件中是否已经存在 /*流水账************************************************************/ //流水账主函数 void water_main();
void bookIn(); //书籍入库 void bookOut(); //书籍出库
int inputDay( char *stringDay); //日期录入 //流水查询主函数 void search_watermain();
int search_wId(); //以 I D 为关键字查询 int search_wDay(); //以 日期 为关键字查询
int findRecord_w_Id( char *fileName, char *w_id, struct water *w ); //以Id为关键字在[出入库]文件中查找是否已存在相关信息 int findRecord_w_Day( char *fileName, char *w_Day, struct water *w ); //以Day为关键字在[出入库]文件中查找是否已存在相关信息
/*录入结构体*********************************************/ struct book { //图书信息 char id[MAXID]; char title[MAXTITL]; char author[MAXAUTL]; char categorie[MAXCATE]; char time[MAXTIME]; int stock; char house[MAXHOUS]; char music[MAXMUSI]; };
struct water { //流水账 char day[MAXDAY]; char Id[MAXID]; char titleEnter[MAXTITL]; int InOut; //入(出)库量 };
//定位 void gotoxy(int x, int y) { COORD coord; coord.X = x; coord.Y = y; SetConsoleCursorPosition(hConsole, coord); }
//111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 //111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
//ID录入 int inputId( char *stringId ) { int iFlag = 0;
while( 1 ){ if( *stringId == 'q' ){ iFlag = 999; break; } else if( strlen( stringId ) > 0 && strlen( stringId ) <= MAXID ){ iFlag = 1; break; } else break; } return( iFlag ); }
//书名录入 int inputTitle( char *stringTitle ) { int iFlag = 0;
while( 1 ){ if( *stringTitle == 'q' ){