Windows程序设计(C语言)实训报告.doc_第1页
Windows程序设计(C语言)实训报告.doc_第2页
Windows程序设计(C语言)实训报告.doc_第3页
Windows程序设计(C语言)实训报告.doc_第4页
Windows程序设计(C语言)实训报告.doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

HUBEI UNIVERSITY OF AUTOMOTIVE TECHNOLOGYC语言程序设计实训报告实训题目: 汽车零部件采购管理程序 专 业: 电气与信息工程学院计算机系 班 级: T1323-1 姓 名: 王俊 成 绩: 完成日期: 2014-5-25 指导教师: 史旅华 目 录1实训题目与要求32系统设计43程序测试与运行结果54实训总结65程序源代码71.实训题目与要求汽车零部件采购管理程序题目描述已知在汽车生产时,需要向零部件生产厂商采购零部件,设计一个汽车零部件采购管理程序,以方便采购管理部门对采购零部件的管理。该单位每次采购都有一个采购编号,每次采购一种零部件。该程序应该具有如下功能(1)能从键盘输入采购信息。(2)指定采购编号,显示采购的零部件信息。(3)指定零部件名称,显示该零部件的所有采购信息。(4)给定采购编号,修改采购信息。(5)给定采购编号,删除采购信息。题目要求:(1)按照分析、设计、编码、调试、测试的软件过程完成这个应用程序。(2)采购信息包括:采购编号、零部件名称、采购日期、采购员、采购数量、采购单价、供货单位。(3) 为程序设计windows窗口,在该窗口上以按钮的形式为用户提供“菜单”,通过点击各个功能项对应的按钮完成操作。输入要求: (1)用户可以根据需求,选定相应的操作项目。进入每个操作后,通过窗口的文本框,从键盘输入相应的信息。程序根据用户输入的信息完成相应的处理,实现要求的功能。 (2)能对输入的数据进行简单的校验,例如,采购日期必须是一个合法的日期格式,采购编号是唯一的(一次采购对应一个采购编号)。输出要求: (1)应用程序运行后,要在屏幕上显示一个按钮形式的“菜单”。 (2)要求用户输入数据时,给出清晰、明确的提示信息,包括输入的数据内容、格式以及结束方式等。(3)在程序完成处理后,要清楚地给出程序的处理结果。例如,在给定采购编号删除采购信息时,如果该采购编号不存在,要提示没能删除,如果删除成功要提示删除成功。实现要求: (1)在程序中使用链表存储采购信息。 (2)采用模块化程序设计的方法,将程序中的各项功能用函数实现。提示: (1)使用结构体表示采购信息,一个结点保存一条采购信息 扩展功能: (1)提供一些统计功能。例如根据零部件名称统计采购数量,根据采购员统计采购的次数。 (2)采购信息从文件读入。 (3)将采购信息保存到文件中。2系统设计本系统主要实现管理员对汽车零部件采购的管理。在运行界面上,管理员可以实现如下功能:(1)能从键盘输入采购信息。(2)指定采购编号,显示采购的零部件信息。(3)指定零部件名称,显示该零部件的所有采购信息。(4)给定采购编号,修改采购信息。(5)给定采购编号,删除采购信息。 系统的总体结构设计遵循如下原则:(1)系统应具有良好的适应性。能适应用户对系统的软件环境、管理内容、模块和界面的要求(2)系统应具有可靠性。采用成熟的技术方法以保证在以后的实际运用中安全可靠。(3)系统应具有良好的安全性。(4)系统的设计开发应符合信息安全化建设的要求。界面设计用户界面。包括按钮,以及零部件名称、编号、采购信息等文本框。采购功能图如下:用户操作按采购编号修改按零部件名称查找按采购编号查找保存增加导入零部件信息名称编号采购信息系统分析(1)主函数的流程分析与设计Windows应用程序的执行过程Windows应用程序中基本构成元素是“窗口”,在窗口上放置了许多的其他元素,例如按钮、文本框。当程序运行时,首先执行主函数。在主函数中需要创建窗口,每个窗口都需要有一个窗口函数来处理在该窗口上产生的事件的消息。然后循环等待接受从Windows操作系统传递来消息。当在窗口上产生一个事件时,Windows操作系统会将这事件转换为一个消息。例如,用户按下了鼠标按钮,就产生一个鼠标事件,这个鼠标事件会转换为一个按下鼠标的消息。这些消息首先被送给Windows操作系统的,Windows操作系统将消息放在一个称为消息队列中,由Windows的消息发送程序转发给对应的窗口(Windows操作系统自动完成)。消息一般用一个32位的整数来标识,这个整数唯一地标识这个消息。对于窗口接收到的每条消息,会被传送到一个被称为窗口函数的函数中(通常是WndProc函数),并使用一个参数message来标识这些消息。在该函数中根据消息判断已经发生了哪个具体事件,从而执行相应的处理。Windows的消息可分为四种类型:输入消息:对键盘和鼠标输入作反应。控制消息:用来与Windows的控件,例如,对话框、列表框、按钮等进行双向通信。系统消息:对程式化的事件或系统时钟中断作出反应。用户消息:由程序员创建的,这些消息只从应用程序的某一部分进入到该应用程序的另一部分而被处理,不会离开应用程序。因此,在Windows应用程序中,其核心事件驱动方式都是围绕着消息的产生与处理展开,事件驱动是靠消息循环机制来实现的。如下图。 图5 消息循环Windows程序的结构Windows程序具有较独特的结构,即Windows程序是有一定的框架的,在编写基于C语言的Windows应用程序时必须要了解构成Windows应用程序的构成结构,然后就是用特定的内容(代码)来填充这个框架,实现程序功能。典型的Windows程序的应该具有如下的结构:(1)主函数主函数WinMain是Windows应用程序的入口,同时也是Windows应用程序的“容器”。Windows应用程序中的窗口需要在主函数建立;程序的消息循环也要在其中设置。因此在主函数中我们要做的就是三件事:注册窗口类Windows应用程序中一个基本的组成就是窗口,每一个窗口都有一些共同的特征,是属于某个类型的。在主函数中必须注册一个窗口类,在该窗口类中指定这类型的窗口的一些公共的特征。以便在Windows应用程序中建立窗口时,可以该窗口所属的类型。窗口类不是C+语言中“类”的概念,它是表示一种类型的窗口,在Windows系统中,使用WNDCLASS结构体类型表示“窗口类”。在该结构体中定义了许多的成员,用于描述窗口的特征。在主函数中注册窗口类的过程如下:首先,必须定义一个WNDCLASS类型的结构体变量,一个窗口类变量表示Windows程序中的“一种类型的窗口”,定义的方法如下:WNDCLASS wndclass;其次,在定义了WNDCLASS结构体变量后必须给该变量的成员赋值,用以指定该窗口类的具体特征。例如:wndclass.style= CS_VREDRAW | CS_HREDRAW ;wndclass.hIcon= LoadIcon( NULL, IDI_APPLICATION ) ;说明:WNDCLASS结构体有一个属性:lpszClassName,它表示该窗口类变量的“名称”,它是一个字符串类型的,通过给该属性赋值一个字符串,可以通过该名称使用该窗口类。再次使用API函数:RegisterClass函数注册窗口类,使用方式就是将定义的WNDCLASS的变量地址作为该函数的实参。例如:RegisterClass(&wndclass);建立窗口Windows应用程序中最重要就是“窗口”,在主函数中必须要建立窗口,使程序运行时能显示一个“窗口”供用户使用。Windows系统中使用HWND结构体类型表示,窗口建立窗口的过程如下:首先,定义HWND类型的窗口变量,一个窗口变量对应着Windows应用程序中的一个具体的“窗口”,定义方法如下:HWND hwnd ;其次,创建窗口,创建窗口的方法就是API函数:CreateWindow函数。注意:窗口类中已经预先定义了窗口的一般属性,而创建一个具体的窗口时,通过CreateWindow函数中的参数中是进一步指定窗口更具体的属性。例如:窗口所属的窗口类,窗口中的标题,窗口显示的位置和窗口的大小等。CreateWindow函数的调用方式如下:hwnd = CreateWindow(szAppName, TEXT(新窗口),WS_OVERLAPPEDWINDOW,800, 600,NULL, NULL, hInstance, NULL ) ;说明,这个函数的参数非常重要,用于指定窗口的特征:第一个参数:表示的是窗口属于的窗口类型(窗口类),它的值必须是在设置窗口类属性为lpszClassName属性指定的字符串。第二个参数:一个字符串,当窗口显示时,将该参数中的字符串显示在窗口的标题位置。第三个参数:表示该窗口的显示风格,例如该窗口是否是一个带边框的窗口,是否有标题框的窗口等。第四、五个参数:表示窗口显示的位置(x坐标、y坐标)第六、七个参数:表示窗口显示的大小(宽、高)第八个参数:表示打开窗口的父窗口。第九个参数:有没有菜单第十个参数:打开该窗口的应用程序的句柄第十一个参数:表示传递给窗口的WM_CREATE消息(创建消息)再次,显示窗口,创建了窗口后,该窗口并没有显示,需要使用API函数:ShowWindow函数将已经创建的窗口在屏幕上显示。调用方式如下:ShowWindow(hWnd,nShowCmd); 第一个参数:表示需要显示的、已经创建的窗口变量。第二个参数:表示显示窗口时窗口显示的状态,即是最大化、最小化等。说明:在调用函数ShowWindow后,一般会再调用函数UpdateWindow,通过该函数,向操作系统发送一个WM_PAINT消息来更新指定窗口的客户区。消息循环处理在主函数必须构建一个循环以实现对消息循环处理,它使用循环语句实现。循环语句的实现方法是:在该循环中不断的从应用程序消息队列中检索一条消息,并将其存放一个变量中,这个消息需要翻译,即转换成程序可以识别的表示,然后再将消息派发到窗口函数中,以便应用程序对消息进行判断,执行相应的处理。(即实现事件驱动方式的对事件响应)。也就是说我们在窗口的过程函数中处理消息。说明:当消息传递给窗口函数后,Windows操作系统会调用该函数,从而执行函数中代码,达到处理消息的目的。消息循环的步骤如下:首先,定义一个能保存从应用程序消息队列中检索的一条消息Windows系统中,使用MSG 结构体类型来表示一个Windows消息。在主函数中必须定义一个MSG 结构体类型的变量,以便可以保存消息。定义的方法如下:MSGmsg;其次,从应用程序消息队列中检索的消息在主函数中的消息循环中必须要能从应用程序消息队列中检索消息,并能将其保存,这是通过调用API函数:GetMessage函数实现的。GetMessage函数只会检索只属于本应用程序的消息,并且会一直等待有消息到来才有返回值。(类似于scanf等待用户从键盘输入)。调用方法如下:GetMessage(&Msg,NULL,0,0);第一个参数:用于存放消息的MSG结构体类型的变量的地址。(回想在函数中通过指针型参数修改函数外的变量)第二个参数:取得其消息的窗口的句柄。当其值取NULL时,GetMessage函数为属于应用程序的所有窗口检索消息。(即指定只检索在某个窗口上产生的消息,在主函数中调用时一般为NULL)第三、四个参数一般为0。再次,翻译消息:在获取到属于本应用程序中的消息后,需要将其转换成程序可识别的方式,这个过程可以通过调用API函数:TranslateMessage函数完成,调用方式如下:TranslateMessage(&msg);参数是保存消息的MSG类型的变量的地址。最后,将消息分发到窗口函数:在翻译了消息后,需要将该消息分发到窗口函数,以便使Windwos调用窗口函数。可以调用API函数:DispatchMessage函数实现。调用过程如下:DispatchMessage(&msg);参数是保存消息的MSG类型的变量的地址。总结:上述的消息循环实现的代码一般如下:(要求msg变量已经定义)while (GetMessage(&msg, NULL, 0, 0L)TranslateMessage(&msg);DispatchMessage(&msg);说明:GetMessage的返回值作为while循环的条件,当GetMessage函数返回“假”时结束循环,从而也就结束程序。(2)系统模块划分整个系统依据其功能主要分为以下几个模块:(1)导入:选择文件,将零部件的信息显示在相应的位置。(2)从键盘输入采购信息:从键盘写入采购信息到链表。(3)指定采购编号,显示采购的零部件信息:从键盘输入编号,在链表中找到该结构体,显示信息。(4指定零部件名称,显示该零部件的所有采购信息:从键盘输入零部件名称,在链表中找到该结构体,显示信息。(5)给定采购编号,修改采购信息:从键盘输入编号,在链表中找到该结构体,修改信息并保存。(6)给定采购编号,删除采购信息:从键盘输入编号,在链表中找到该结构体,删除信息。3.程序测试与运行结果VC6.0运行环境窗口运行界面导入编号查找名称查找修改增加删除4实训总结/windows程序设计也就是基于微软的windows操作系统而进行的程序设计。你有没有想过,为什么是基于windows操作系统呢?下面就来解答:windows应用程序需要利用由windows操作系统开放出来公用用程序使用的应用程序接口“API” windows提供了上千种API函数供应用程序使用。 上面说了,windows程序其实就是在非逻辑的使用这些API函数,我这里提到了“非逻辑”三个字(这是本人的看法),这正是windows程序的精髓,这是一切windows程序运行的方式。非逻辑也就是指程序不是按照事先安排好的顺序来进行的,是根据用户的不同操作或者是其他某些原因一步一步进行的。这种运行方式就叫做“消息驱动” 简单一点来解释一下何谓消息驱动,就是指应用程序始终在等待,它绝对不是在等待谁会给它爱它是在等待用户或者是系统的消息(也就是命令),当接到消息后呢,它会把消息通过DispatchMessage(&msg)传递给窗口函数(窗口函数就是一个应用程序的核心)窗口函数就会对照事先由程序编写好的消息对照表调用对应的方法来处理消息。这样就完成一个消息的处理,接下来准备处理下一个消息。 你也许会问那不是无休止的运行下去了吗?当然不会,下面我用程序本身来说明这个问题: 消息循环,通过此处来不断的取得消息。 while(GetMessage(&msg,NULL,0,0) 消息进行一些转换 TranslateMessage(&msg); 把消息传向窗口函数 DispatchMessage(&msg); return msg.wParam; 就是这样了:当我们点击窗口右上角的小叉或者点击退出按钮时,windows就会自动在我们的消息队列中加入一条消息“WM_DESTROY”,这时呢窗口程序有这么一部分:switch(message)/其它代码./case WM_DESTROY: PostQuitMessage(0); return 0;相信一般的朋友都会明白吧,它的作用的就是在接收到WM_DESTROY时呢,通过调用PostQuitMessage(0)让windows在消息列表中呢在加入另一条消息“WM_QUIT. 当GetMessage函数抓取到WM_QUIT时返回0,其余返回非0值,懂了吧,这下可以退出消息循环了。 这就是windows程序设计最基础的部分了,可以说是核心。 我认为学习windows程序设计不要基于某一部分,而要把握住其大局,要有整体观,有了整体观对windows程序设计有了一定的了解后在对其各部分下功夫,这样才不会走火入魔5程序源代码#include #include LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM ) ;void create(HWND hwnd,LPARAM lParam);void print();void command();void readData();void name_serach();void num_serach();void daleteData();void add();num_mend();void save();RECT rect11;RECT rect12;RECT rect13;RECT rect14;RECT rect15;RECT rect16;RECT rect17;RECT rect18;RECT rect19;/RECT rect20;/HDC hDC;HWND hwnd ;PAINTSTRUCT paint;struct buy int num;char pname20; long date;char name20; int amount;int price;char place20; struct buy *next;struct buy head=0, ,0, ,0,0, ,; /初始化int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow )static TCHAR szAppName = TEXT( wj ) ;MSG msg ;WNDCLASS wndclass ;wndclass.lpfnWndProc = WndProc ;wndclass.style = CS_HREDRAW | CS_VREDRAW ;wndclass.hInstance = hInstance ;wndclass.cbClsExtra = 0 ;wndclass.cbWndExtra = 0 ;wndclass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH) ;wndclass.hCursor = LoadCursor( NULL, IDC_ARROW ) ;wndclass.hIcon = LoadIcon( NULL, IDI_APPLICATION ) ;wndclass.lpszClassName = szAppName ;wndclass.lpszMenuName = NULL ;if( !RegisterClass(&wndclass) )MessageBox( NULL, TEXT(错误?), TEXT(错误), MB_OK | MB_ICONERROR ) ;return 0 ;hwnd = CreateWindow( szAppName, TEXT(汽车零部件采购管理程序-王俊), WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT,NULL, NULL, hInstance, NULL ) ;ShowWindow( hwnd, iCmdShow ) ;UpdateWindow( hwnd ) ;while( GetMessage(&msg, NULL, 0, 0) )TranslateMessage( &msg ) ;DispatchMessage( &msg ) ;return msg.wParam ;LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )switch( message )case WM_PAINT:print();return 0 ;case WM_CREATE:create(hwnd,lParam);return 0 ;case WM_COMMAND:command(hwnd,wParam);return 0 ;case WM_DESTROY:PostQuitMessage(0) ;return 0 ;return DefWindowProc( hwnd, message, wParam, lParam ) ;void print()hDC=BeginPaint(hwnd,&paint);rect11.top=20;rect11.right=120;rect11.bottom=40;rect11.left=30;rect12.top=80;rect12.right=120;rect12.bottom=40;rect12.left=30;rect13.top=140;rect13.right=120;rect13.bottom=40;rect13.left=30;rect14.top=200;rect14.right=120;rect14.bottom=40;rect14.left=30;rect15.top=260;rect15.right=120;rect15.bottom=40;rect15.left=30;rect18.top=320;rect18.right=120;rect18.bottom=40;rect18.left=30;rect16.top=20;rect16.right=700;rect16.bottom=40;rect16.left=30;/大框rect17.top=320;rect17.right=120;rect17.bottom=40;rect17.left=30;rect19.top=380;/rect19.right=120;/rect19.bottom=40;/rect19.left=30;/rect20.top=575;/rect20.right=120;/rect20.bottom=40;/rect20.left=30;/DrawText(hDC,采购编号:,-1,&rect11,DT_SINGLELINE|DT_CENTER|DT_VCENTER);DrawText(hDC,零部件名称:,-1,&rect12,DT_SINGLELINE|DT_CENTER|DT_VCENTER);DrawText(hDC,采购日期:,-1,&rect13,DT_SINGLELINE|DT_CENTER|DT_VCENTER);DrawText(hDC,采购员:,-1,&rect14,DT_SINGLELINE|DT_CENTER|DT_VCENTER);DrawText(hDC,采购数量:,-1,&rect15,DT_SINGLELINE|DT_CENTER|DT_VCENTER);DrawText(hDC,采购单价:,-1,&rect17,DT_SINGLELINE|DT_CENTER|DT_VCENTER);DrawText(hDC,供货单位:,-1,&rect19,DT_SINGLELINE|DT_CENTER|DT_VCENTER);/DrawText(hDC,全部信息:,-1,&rect16,DT_SINGLELINE|DT_CENTER|DT_VCENTER);DrawText(hDC,输入文件名:,-1,&rect20,DT_SINGLELINE|DT_CENTER|DT_VCENTER);/EndPaint(hwnd,&paint);void create(HWND hwnd,LPARAM lParam)static HWND hwndInput1;static HWND hwndInput2 ;static HWND hwndInput3 ;static HWND hwndInput4 ;static HWND hwndInput5 ;static HWND hwndInput6 ;static HWND hwndInput7 ;static HWND hwndInput8 ;static HWND hwndInput9 ;/static HWND hwndbutton;hwndInput1= CreateWindow( TEXT(edit), NULL,WS_CHILD | WS_VISIBLE | WS_BORDER |ES_LEFT | ES_MULTILINE ,150, 20, 120, 20,hwnd, (HMENU)1, (LPCREATESTRUCT) lParam) - hInstance, NULL ) ;/numhwndInput2 = CreateWindow( TEXT(edit), NULL,WS_CHILD | WS_VISIBLE | WS_BORDER |ES_LEFT | ES_MULTILINE ,150, 50, 120, 20,hwnd, (HMENU)2, (LPCREATESTRUCT) lParam) - hInstance, NULL ) ;/pnamehwndInput3 = CreateWindow( TEXT(edit), NULL,WS_CHILD | WS_VISIBLE | WS_BORDER |ES_LEFT | ES_MULTILINE ,150,80, 120, 20,hwnd, (HMENU)3, (LPCREATESTRUCT) lParam) - hInstance, NULL ) ;/datehwndInput4 = CreateWindow( TEXT(edit), NULL,WS_CHILD | WS_VISIBLE | WS_BORDER |ES_LEFT | ES_MULTILINE ,150,110, 120, 20,hwnd, (HMENU)4, (LPCREATESTRUCT) lParam) - hInstance, NULL ) ;/namehwndInput5 = CreateWindow( TEXT(edit), NULL,WS_CHILD | WS_VISIBLE | WS_BORDER |ES_LEFT | ES_MULTILINE ,150,140, 120, 20,hwnd, (HMENU)5, (LPCREATESTRUCT) lParam) - hInstance, NULL ) ; /amounthwndInput6 = CreateWindow( TEXT(edit), NULL,WS_CHILD | WS_VISIBLE | WS_BORDER |ES_LEFT | ES_MULTILINE ,150,170, 120, 20,hwnd, (HMENU)6, (LPCREATESTRUCT) lParam) - hInstance, NULL ) ;/pricehwndInput7= CreateWindow( TEXT(edit), NULL,/WS_CHILD | WS_VISIBLE | WS_BORDER |/ES_LEFT | ES_MULTILINE ,/150,200, 120, 20,/hwnd, (HMENU)7, (LPCREATESTRUCT) lParam) - hInstance, NULL ) ;/placehwndInput8 = CreateWindow( TEXT(edit), NULL,WS_CHILD | WS_VISIBLE | WS_BORDER |ES_LEFT | ES_MULTILINE ,400,20, 455, 200,hwnd, (HMENU)8, (LPCREATESTRUCT) lParam) - hInstance, NULL ) ;/quanbuhwndInput9= CreateWindow( TEXT(edit), NULL,WS_CHILD | WS_VISIBLE | WS_BORDER |ES_LEFT | ES_MULTILINE ,150,300, 500, 20,hwnd, (HMENU)9, (LPCREATESTRUCT) lParam) - hInstance, NULL ) ;/输入文件名/(0)打开hwndbutton=CreateWindow(TEXT(BUTTON),TEXT(导入信息),WS_CHILD|WS_VISIBLE,650,300,110,20,hwnd,(HMENU)11,(LPCREATESTRUCT) lParam) - hInstance,NULL);/ (1)能从键盘输入采购信息。hwndbutton=CreateWindow(TEXT(BUTTON),TEXT(从键盘输入采购信息),WS_CHILD|WS_VISIBLE,150,350,610,20,hwnd,(HMENU)22,(LPCREATESTRUCT) lParam) - hInstance,NULL);/(2)指定采购编号,显示采购的零部件信息。hwndbutton=CreateWindow(TEXT(BUTTON),TEXT(指定采购编号,显示采购的零部件信息),WS_CHILD|WS_VISIBLE,150,400,610,20,hwnd,(HMENU)33,(LPCREATESTRUCT) lParam) - hInstance,NULL);/(3)指定零部件名称,显示该零部件的所有采购信息。hwndbutton=CreateWindow(TEXT(BUTTON),TEXT(指定零部件名称,显示该零部件的所有采购信息),WS_CHILD|WS_VISIBLE,150,450,610,20,hwnd,(HMENU)44,(LPCREATESTRUCT) lParam) - hInstance,NULL);/(4)给定采购编号,修改采购信息。hwndbutton=CreateWindow(TEXT(BUTTON),TEXT(给定采购编号,修改采购信息),WS_CHILD|WS_VISIBLE,150,500,610,20,hwnd,(HMENU)55,(LPCREATESTRUCT) lParam) - hInstance,NULL);/(5)给定采购编号,删除采购信息。hwndbutton=CreateWindow(TEXT(BUTTON),TEXT(给定采购编号,删除采购信息),WS_CHILD|WS_VISIBLE,150,550,610,20,hwnd,(HMENU)66,(LPCREATESTRUCT) lParam) - hInstance,NULL); /(6)保存hwndbutton=CreateWindow(TEXT(BUTTON),TEXT(保存信息),WS_CHILD|WS_VISIBLE,650,250,110,20,hwnd,(HMENU)77,(LPCREATESTRUCT) lParam) - hInstance,NULL); void zero_memory_rec() /清除矩形框内的内容char str10=;SetDlgItemText(hwnd,1,str);SetDlgItemText(hwnd,2,str);SetDlgItemText(hwnd,3,str);SetDlgItemText(hwnd,4,str);SetDlgItemText(hwnd,5,str);SetDlgItemText(hwnd,6,str);SetDlgItemText(hwnd,7,str);SetDlgItemText(hwnd,8,str);SetDlgItemText(hwnd,9,str);void command(HWND hwnd,WPARAM wParam)switch(LOWORD(wParam)case 11:readData();break;case 22:add();break;case 33: num_serach() ;break;case 44:name_serach() ;break;case 55:num_mend();break;case 66:daleteData();break;case 77:save();break;return ;void readData() /读取数据FILE *fp;struct buy *temp;int flag=0;static char str1000=, fname20= ,num30= ,date30= ,amount10=,price10= ,place20;ZeroMemory(str,sizeof(str); if(head.next!=NULL) MessageBox(NULL,TEXT(已经读入文件,亲请别重复点哦!),TEXT(友情提示),MB_OK);return ; GetDlgItemText(hwnd,9,fname,sizeof(fname)/sizeof(char);if( (fp = fopen(fname, r) = NULL) MessageBox(NULL,TEXT(文件名错误!),TEXT(标题),MB_OK); exit(0); while(!feof(fp)temp=(struct buy*)malloc(sizeof(struct buy);flag=fscanf(fp,%d%s%s%s%d%d,&(temp-num),temp-pname,&(temp-date),temp-name,&(temp-amount),&(temp-price),temp-place); if(flagnext=head.next;head.next=temp;ltoa(temp-num,num,10); strcat(str,num); strcat(str, );strcat(str,temp-pname); strcat(str, ); ltoa(temp-date,date,10);strcat(str,date);strcat(str, );strcat(str,temp-name);strcat(str, ); ltoa(temp-amount,amount,10);strcat(str,amount);strcat(str, ); /空开间隔ltoa(temp-price,price,10);strcat(str,price);strcat(str, ); /strcat(str,temp-place);/strcat(str, ); strcat(str,rn); if( fclose(fp) ) MessageBox(NULL,TEXT(2),TEXT(标题),MB_OK); exit(0);SetDlgItemText(hwnd,8,str);void name_serach() /查找数据 FILE *fp; char filename20= ,str20= ,pname20,num20,date20,str120= ;static char amount10= ,price10= ;struct buy *p;int flat=1; char d20=查找完毕,请继续 ;ZeroMemory(filename,sizeof(filename);GetDlgItemText(hwnd,9,filename,sizeof(filename)/sizeof(char);if( (fp = fopen(filename, r) = NULL) MessageBox(NULL,TEXT(文件名错误!),TEXT(标题),MB_OK);exit(0); ZeroMemory(pname,sizeof(pname);GetDlgItemText(hwnd,2,pname,sizeof(pname)/sizeof(char); /姓名查找for(p=head.next;p!=NULL;p=p-next)if(strcmp(pname,p-pname)=0) ltoa(p-num,num,10); strcat(str1,num); strcat(str1, );strcat(str1,p-pname); strcat(str1, ); ltoa(p-date,d

温馨提示

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

评论

0/150

提交评论