C语言实现15折线U律,Windows程序的设计(C语言)实训报告

《Windows程序的设计(C语言)实训报告》由会员分享,可在线阅读,更多相关《Windows程序的设计(C语言)实训报告(29页珍藏版)》请在人人文库网上搜索。

1、HUBEI UNIVERSITY OF AUTOMOTIVE TECHNOLOGY C语言程序设计 实训报告 实训题目:汽车零部件采购管理程序 专 业:电气与信息工程学院计算机系 班 级:T1323-1 姓 名:王俊 成 绩: 完成日期:2014-5-25 指导教师:史旅华 1. 实训题目与要求 3 2. 系统设计 4 3. 程序测试与运行结果 5 4. 实训总结 6 5. 程序源代码 7 1. 实训题目与要求 汽车零部件采购管理程序 题目描述 已知在汽车生产时, 需要向零部件生产厂商采购零部件, 设计一个汽车零部件采购管理 程序, 以方便采购管理部门对采购零部件的管理。 该单位每次采购都有一。

2、个采购编号, 每次 采购一种零部件。该程序应该具有如下功能 (1) 能从键盘输入采购信息。 (2) 指定采购编号,显示采购的零部件信息。 (3) 指定零部件名称,显示该零部件的所有采购信息。 (4) 给定采购编号,修改采购信息。 (5) 给定采购编号,删除采购信息。 题目要求: (1) 按照分析、设计、编码、调试、测试的软件过程完成这个应用程序。 (2) 采购信息包括: 采购编号、 零部件名称、 采购日期、 采购员、 采购数量、 采购单价、 供货单位。 (3) 为程序设计 windows 窗口,在该窗口上以按钮的形式为用户提供“菜单” ,通过点 击各个功能项对应的按钮完成操作。 输入要求: (。

3、1) 用户可以根据需求,选定相应的操作项目。进入每个操作后,通过窗口的文本框, 从键盘输入相应的信息。程序根据用户输入的信息完成相应的处理,实现要求的功能。 (2) 能对输入的数据进行简单的校验,例如,采购日期必须是一个合法的日期格式,采 购编号是唯一的(一次采购对应一个采购编号) 。 输出要求: (1) 应用程序运行后,要在屏幕上显示一个按钮形式的“菜单” 。 (2) 要求用户输入数据时,给出清晰、 明确的提示信息,包括输入的数据容、格式以及结 束方式等。 (3) 在程序完成处理后, 要清楚地给出程序的处理结果。 例如, 在给定采购编号删除采购 信息时,如果该采购编号不存在,要提示没能删除,。

4、如果删除成功要提示删除成功。 实现要求: (1) 在程序中使用链表存储采购信息。 (2) 采用模块化程序设计的方法,将程序中的各项功能用函数实现。 提示: (1) 使用结构体表示采购信息,一个结点保存一条采购信息 扩展功能: (1) 提供一些统计功能。 例如根据零部件名称统计采购数量, 根据采购员统计采购的次数。 (2) 采购信息从文件读入。 (3) 将采购信息保存到文件中。 2系统设计 在运行界面上,管理员可以实现如下 本系统主要实现管理员对汽车零部件采购的管理。 功能: (1) 能从键盘输入采购信息。 (2) 指定采购编号,显示采购的零部件信息。 (3) 指定零部件名称,显示该零部件的所有。

5、采购信息。 (4) 给定采购编号,修改采购信息。 (5) 给定采购编号,删除采购信息。 系统的总体结构设计遵循如下原则: (1)系统应具有良好的适应性。能适应用户对系统的软件环境、管理容、模块和界面的 要求 系统应具有 可靠性。采用成熟的技术方法以保证在以后的实际运用中安全可靠。 (3) 系统应具有良好的安全性。 (4) 系统的设计开发应符合信息安全化建设的要求。 界面设计 导入 按零件名查找 按釆购编号查找 保存 按采购編号傷改 増扬 按钮,以及零部件名称、编号、采购信息等文本框。 用户 界面 包括 米购功能图如下: 用户操作 导入 按零部件名称查找 按采购编号查找 按采购编号修改 零部件信。

6、息 系统分析 (1)主函数的流程分析与设计 Win dows应用程序的执行过程 Windows应用程序中基本构成元素是“窗口”,在窗口上放置了许多的其他元素,例如 按钮、文本框。 当程序运行时,首先执行主函数。 在主函数中需要创建窗口,每个窗口都需要有一个窗 口函数来处理在该窗口上产生的事件的消息。然后循环等待接受从 Win dows操作系统传 递来消息。 当在窗口上产生一个事件时,Win dows操作系统会将这事件转换为一个消息。例如,用 户按下了鼠标按钮,就产生一个鼠标事件,这个鼠标事件会转换为一个按下鼠标的消息。 这些消息首先被送给 Win dows操作系统的,Win dows操作系统将。

7、消息放在一个称为消息 队列中,由Windows的消息发送程序转发给对应的窗口( Windows操作系统自动完成)。 消息一般用一个 32位的整数来标识,这个整数唯一地标识这个消息。对于窗口接收到 的每条消息,会被传送到一个被称为窗口函数的函数中(通常是WndProc函数),并使 用一个参数message来标识这些消息。在该函数中根据消息判断已经发生了哪个具体事 件,从而执行相应的处理。 Win dows的消息可分为四种类型: 输入消息:对键盘和鼠标输入作反应。 控制消息:用来与 Win dows的控件,例如,对话框、列表框、按钮等进行双向通信。 系统消息:对程式化的事件或系统时钟中断作出反应。。

8、 用户消息:由程序员创建的,这些消息只从应用程序的某一部分进入到该应用程序的另 一部分而被处理,不会离开应用程序。 因此,在Windows应用程序中,其核心事件驱动方式都是围绕着消息的产生与处理展开, 事件驱动是靠消息循环机制来实现的。如下图。 图5消息循环 Win dows程序的结构 Win dows程序具有较独特的结构,即Win dows程序是有一定的框架的,在编写基于C语 言的Windows应用程序时必须要了解构成Windows应用程序的构成结构,然后就是用特 定的容(代码)来填充这个框架,实现程序功能。 典型的Windows程序的应该具有如下的结构: 主函数 主函数 Win Ma in。

9、是Win dows应用程序的入口,同时也是Win dows应用程序的容器” Win dows应用程序中的窗口需要在主函数建立;程序的消息循环也要在其中设置。 因此在主函数中我们要做的就是三件事: 注册窗口类 Win dows应用程序中一个基本的组成就是窗口,每一个窗口都有一些共同的特征,是属 于某个类型的。在主函数中必须注册一个窗口类,在该窗口类中指定这类型的窗口的一 些公共的特征。以便在 Win dows应用程序中建立窗口时,可以该窗口所属的类型。 窗口类不是 C+语言中类”的概念,它是表示一种类型的窗口,在Windows系统中, 使用WNDCLAS结构体类型表示“窗口类”。在该结构体中定义。

10、了许多的成员, 用于描述 窗口的特征。 在主函数中注册窗口类的过程如下: 首先,必须定义一个 WNDCLAS类型的结构体变量,一个窗口类变量表示Win dows程序 中的“一种类型的窗口” ,定义的方法如下: WNDCLASS wn dclass 其次,在定义了 WNDCLAS结构体变量后必须给该变量的成员赋值,用以指定该窗口类 的具体特征。例如: wn dclass.style= CS_VREDRAW | CS_HREDRAW ; wndclass.hIcon= LoadIcon( NULL, IDI_APPLICATION ); 说明:WNDCLAS结构体有一个属性:IpszClassNa。

11、me,它表示该窗口类变量的“名称”, 它是一个字符串类型的,通过给该属性赋值一个字符串,可以通过该名称使用该窗口类。 再次使用API函数:RegisterClass 函数注册窗口类,使用方式就是将定义的 WNDCLASS 的变量地址作为该函数的实参。例如: RegisterClass( 建立窗口 Windows应用程序中最重要就是“窗口”,在主函数中必须要建立窗口,使程序运行时 能显示一个“窗口”供用户使用。 Win dows系统中使用HWN结构体类型表示,窗口建立窗口的过程如下: 首先,定义HWND1型的窗口变量,一个窗口变量对应着Windows应用程序中的一个具 体的“窗口” ,定义方法如。

12、下: HWND hwnd ; 其次,创建窗口,创建窗口的方法就是 API 函数: CreateWindow 函数。 窗口类中已经预先定义了窗口的一般属性,而创建一个具体的窗口时,通过 CreateWindow 函数中的参数中是进一步指定窗口更具体的属性。例如:窗口所属的窗 口类,窗口中的标题,窗口显示的位置和窗口的大小等。 CreateWindow 函数的调用方式如下: hwnd = CreateWindow(szAppName, TEXT( 新窗口 ),WS_OVERLAPPEDWINDOW, 800, 600,NULL, NULL, hInstance, NULL ) ; 说明,这个函数的。

13、参数非常重要,用于指定窗口的特征: 第一个参数:表示的是窗口属于的窗口类型(窗口类) ,它的值必须是在设置窗口类属 性为 lpszClassName 属性指定的字符串。 第二个参数:一个字符串, 当窗口显示时, 将该参数中的字符串显示在窗口的标题位置。 第三个参数: 表示该窗口的显示风格, 例如该窗口是否是一个带边框的窗口, 是否有标 题框的窗口等。 第四、五个参数:表示窗口显示的位置( x 坐标、 y 坐标) 第六、七个参数:表示窗口显示的大小(宽、高) 第八个参数:表示打开窗口的父窗口。 第九个参数:有没有菜单 第十个参数:打开该窗口的应用程序的句柄 第一个参数:表示传递给窗口的WM_CR。

14、EATE息(创建消息) 再次,显示窗口,创建了窗口后,该窗口并没有显示,需要使用 API 函数: ShowWindow 函数将已经创建的窗口在屏幕上显示。调用方式如下: ShowWindow(hWnd,nShowCmd); 第一个参数:表示需要显示的、已经创建的窗口变量。 第二个参数:表示显示窗口时窗口显示的状态,即是最大化、最小化等。 说明: 在调用函数 ShowWindoW后,一般会再调用函数 UpdateWindow,通过该函数,向操作系 统发送一个 WM_PAIN消息来更新指定窗口的客户区。 消息循环处理 在主函数必须构建一个循环以实现对消息循环处理, 它使用循环语句实现。 循环语句的。

15、 实现方法是: 在该循环中不断的从应用程序消息队列中检索一条消息,并将其存放一个 变量中, 这个消息需要翻译, 即转换成程序可以识别的表示,然后再将消息派发到窗口 函数中,以便应用程序对消息进行判断,执行相应的处理。(即实现事件驱动方式的对 事件响应)。也就是说我们在窗口的过程函数中处理消息。 说明: 当消息传递给窗口函数后,Win dows操作系统会调用该函数,从而执行函数中代码,达 到处理消息的目的。 消息循环的步骤如下: 首先,定义一个能保存从应用程序消息队列中检索的一条消息 Windows系统中,使用MSG结构体类型来表示一个 Windows消息。在主函数中必须定义 一个MSG结构体类。

16、型的变量,以便可以保存消息。定义的方法如下: MSG msg; 其次,从应用程序消息队列中检索的消息 在主函数中的消息循环中必须要能从应用程序消息队列中检索消息, 并能将其保存, 这 是通过调用 API 函数: GetMessage 函数实现的。 GetMessage 函数只会检索只属于本应 用程序的消息,并且会一直等待有消息到来才有返回值。 (类似于 scanf 等待用户从键 盘输入)。调用方法如下: GetMessage( 第一个参数:用于存放消息的MSG结构体类型的变量的地址。(回想在函数中通过指针 型参数修改函数外的变量) 第二个参数:取得其消息的窗口的句柄。当其值取NULL时,Get。

17、Message函数为属于应 用程序的所有窗口检索消息。 (即指定只检索在某个窗口上产生的消息,在主函数中调 用时一般为 NULL) 第三、四个参数一般为 0。 再次, 翻译消息: 在获取到属于本应用程序中的消息后, 需要将其转换成程序可识别的 方式, 这个过程可以通过调用 API 函数: TranslateMessage 函数完成, 调用方式如下: TranslateMessage( 参数是保存消息的 MSG类型的变量的地址。 最后, 将消息分发到窗口函数: 在翻译了消息后, 需要将该消息分发到窗口函数, 以便 使 Windwos 调用窗口函数。可以调用API 函数: DispatchMess。

18、age 函数实现。调用过程 如下: DispatchMessage( 参数是保存消息的 MSG类型的变量的地址。 总结: 上述的消息循环实现的代码一般如下:(要求msg变量已经定义) while (GetMessage( DispatchMessage( 说明: GetMessage的返回值作为 while循环的条件,当 GetMessage函数返回假”时结束循 环,从而也就结束程序。 2)系统模块划分 整个系统依据其功能主要分为以下几个模块: (1)导入:选择文件,将零部件的信息显示在相应的位置。 (2) 从键盘输入采购信息 :从键盘写入采购信息到链表。 (3) 指定采购编号,显示采购的零部。

19、件信息 :从键盘输入编号,在链表中找到该结构 体,显示信息。 (4 指定零部件名称,显示该零部件的所有采购信息 :从键盘输入 零部件名称 ,在链表 中找到该结构体,显示信息。 (5) 给定采购编号,修改采购信息: 从键盘输入编号,在链表中找到该结构体,修改 信息并保存。 (6) 给定采购编号,删除采购信息: 从键盘输入编号,在链表中找到该结构体,删除 信息。 3.程序测试与运行结果 VC6.0运行环境窗口 运行界面 导入 衲中幷: 训贡甲乜: 宝眈E: )1 Kltl?i:IXIDI I u律王早 13 斗皿 anwwH nBn mwim 壬里 15珀h iouaim壬亲 廿孵7(H,ti(n。

20、壬审 1H tn ZD 13111)4 丄军 19 V: H;nmitK_L I: %)fcwioMl: 判 5P tZCIJiHlMii 21 鞘粘 2D1IME -.INI i SM ft 7MJ K MN1 R 5D(1 B bWI tf UM H 5DU B 剜B (Hi a HW H :|-,- 件IE序 IE占倚 -存tf.再.府界界 /把消息传向窗口函数 DispatchMessage( return msg.wParam; 就是这样了:当我们点击窗口右上角的小叉或者点击退出按钮时, windows就会自动在我们的消息队列中加入一条消息“ WM DESTROY这 时呢窗口程序有这。

21、么一部分: switch(message) /其它代码 / case WM DESTROY: PostQuitMessage(O); return 0; 相信一般的朋友都会明白吧,它的作用的就是在接收到WM_DESTROY呢, 通过调用 PostQuitMessage(O)让windows在消息列表中呢在加入另一条消 息“ WM_QUIT. 当GetMessage函数抓取到 WM QUI时返回0,其余返回非 0值,懂了吧, 这下可以退出消息循环了。 这就是windows程序设计最基础的部分了,可以说是核心。 我认为学习windows程序设计不要基于某一部分,而要把握住其大局, 要有整体观,有 。

22、了整体观对windows程序设计有了一定的了解后在对其各部分下功夫,这样才不会走火入魔 5.程序源代码 #include #include LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM ); void create(HWND hwnd ,L PARAM lParam); void print(); void command。; void readData(); void name_serach(); void num_serach(); void daleteData(); void add(); num_mend(); void s。

23、ave(); 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 。

24、buy head=0, ,0, ,0,0, ,; /初始化 int WINAPI WinMain( HINSTANCEhInstance, HINSTANCEhPrevInstance, PSTRszCmdLine, int static TCHAR szAppName = TEXT( wj ) ; MSG msg ; WNDCLASS wndclass ; wndclass.lpfnWndProc = WndProc ; wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.hInstance = hInstance ; wndclass.c。

25、bClsExtra = 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( re。

26、turn 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( DispatchMessage( iCmdShow) 王 俊 ), return msg.。

27、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 De。

28、fWindowProc( hwnd, message, wParam, lParam ) ; void print() hDC=BeginPaint(hwnd, 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; r。

29、ect14.right=120; rect14.bottom=40; rect14.left=30; rect15.top=260; rect15.right=120; rect15.bottom=40; rect15.left=30; rect18.top=320; recMo0rig hi20 八 recMob2.omM40 八 recM8efll30 八 recM6.oPM20 八 recM6righll700 八 recM6b2.omM40 八 recM6eflr3p/ ”斎 recM7.oPM320 八 recM75.ghll2c? recM7b2.omM40 八 recM7efll。

30、30 八 recM 9.OPM38O0 recM9.righll2c?/ recM 9 b2.omM4p/ recM9efll30w rea20.oPM575y/ rea20.righll2c?/ recMpboomHApl rea20efll3p/ DrawTexsDp-氷蜃4n -Acreall -DTIS_NGLEL_NE-DTICENTER-DTIVCENTER= DrawTexi(hDC= _-匕。recM2-DTIS_NGLE 匚 NE一 DTCENTER 一 DTIVCENTER). DrawTexsDC DrawTexsDC DrawTexsDC DrawTexsDC Draw。

31、TexsDC DrawTexsDC DrawTexsDC 3 MMJ=?arecM3-DTIS_NGLEL_NE 一 DTCENTER 一 DTVCENTERX 書湎-crecM4-DTIS_NGLEL_NE 一 DTCENTER 一 DTVCENTERX 書達*J=?arecM5-DTIS_NGLEL_NE 一 DTCENTER 一 DTVCENTERX 書 Wb_-匕 orecM 7-DTIS_NGLEL_NE 一 DTCENTER 一 DTVCENTERX 岂鈕再J=?arecM9-DTIS_NGLEL_NE 一 DTCENTER 一 DTVCENTERS H隽号=?3recM6-DTI。

32、S_NGLEL_NE 一 DTCENTER 一 DTVCENTERX sMm6rea2pDTIS_NGLEL_NE 一 DTCENTER 一 DTIVCENTER)W Endpainuhwnd-apain 口 void creaieIWND hwnd-LPARAM -param)宀 SS-HC HWND hwnd-npuiX八 SS-HC HWND hwnd-npuRS- SS-HC HWND hwnd-npuw- SS-HC HWND hwnd-npuE- SS-HC HWND hwnd-npui5 - SS-HC HWND hwnd-npuo- SS-HC HWND hwnd-npui7 。

33、- SS-HC HWND hwnd-npu65- SS-HC HWND hwnd-npui9 三 SS-HC HWND hwndbuion 八 hwnd_npuMU crea(Dwindow( TEXT(=ed3- NULL- WSICHLD 一 WSIV_S_BLE 一 WSIBORDER 一 byH蕊 ES_LEFT | ES_MULTILINE , 150, 20, 120, 20, hwnd, (HMENU)1, (LPCREATESTRUCT) lParam) - hInstance, NULL ) ;/num hwndInput2 = CreateWindow( TEXT(edit。

34、), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT | ES_MULTILINE , 150, 50, 120, 20, hwnd, (HMENU)2, (LPCREATESTRUCT) lParam) - hInstance, NULL ) ;/pname hwndInput3 = CreateWindow( TEXT(edit), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT | ES_MULTILINE , 150,80, 120, 20, hwnd, (HMENU)3, (LPC。

35、REATESTRUCT) lParam) - hInstance, NULL ) ;/date hwndInput4 = 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 ) ;/name hwndInput5 = CreateWindow( TEXT(edit), NULL, WS_CHILD | WS_V。

36、ISIBLE | WS_BORDER | ES_LEFT | ES_MULTILINE , 150,140, 120, 20, hwnd, (HMENU)5, (LPCREATESTRUCT) lParam) - hInstance, NULL ) ; /amount hwndInput6 = CreateWindow( TEXT(edit), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT | ES_MULTILINE , 150,170, 120, 20, hwnd, (HMENU)6, (LPCREATESTRUCT) lParam) 。

37、- hInstance, NULL ) ;/price hwndInput7= 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 ) ;/place hwndInput8 = CreateWindow( TEXT(edit), NULL, WS_CHILD | WS_VISIBLE | WS_BORD。

38、ER | ES_LEFT | ES_MULTILINE , 400,20, 455, 200, hwnd, (HMENU)8, (LPCREATESTRUCT) lParam) - hInstance, NULL ) ;/quanbu hwndInput9= 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 。

39、) ;/输入文件名 导入信 /(0) 打开 hwndbutton=CreateWindow(TEXT(BUTTON),TEXT( lParam) - lParam) - ),WS_CHILD|WS_VISIBLE,650,300,110,20,hwnd,(HMENU)11,(LPCREATESTRUCT) hInstance,NULL); 从键盘输入 采购信 / (1) 能从键盘输入采购信息。 hwndbutton=CreateWindow(TEXT(BUTTON),TEXT( ),WS_CHILD|WS_VISIBLE,150,350,610,20,hwnd,(HMENU)22,(LPCRE。

40、ATESTRUCT) 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( 指定零部。

41、件名称,显示该零部件的所有采购信息 - - - ),WS_CHILD|WS_VISIBLE,150,450,610,20,hwnd,(HMENU)44,(LPCREATESTRUCT) lParam) hInstance,NULL); /(4) 给定采购编号,修改采购信息。 修改采购信息 lParam) - 删除采购信息 hwndbutton=CreateWindow(TEXT(BUTTON),TEXT( 给 定 采 购 编 号 ),WS_CHILD|WS_VISIBLE,150,500,610,20,hwnd,(HMENU)55,(LPCREATESTRUCT) hInstance,NULL。

42、); /(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) lP。

43、aram) 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); SetDlgI。

44、temText(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(。

45、) / 读取数据 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(ch。

46、ar); 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, if(flagnext=head.next; head.next=temp; ltoa(temp-num,num,10); strcat(str,num); strcat(str, ); strcat(str,temp-pn。

47、ame); 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(st。

48、r,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,s。

49、izeof(filename); GetDlgItemText(hwnd,9,filename,sizeof(filename)/sizeof(char); if( (fp = fopen(filename, r) = NULL) exit(0); 查找 MessageBox(NULL,TEXT( 文件名错误! ),TEXT( 标题 ),MB_OK); ZeroMemory(pname,sizeof(pname); GetDlgItemText(hwnd,2,pname,sizeof(pname)/sizeof(char); / for(p=head.next;p!=NULL;p=p-next。

50、) 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,date,10); strcat(str1,date); strcat(str1, ); strcat(str1,p-name); strcat(str1, ); ltoa(p-amount,amount,10); strcat(str1,amount); strcat(str1, ); / 空开间隔 ltoa(p-price,p。

51、rice,10); strcat(str1,price); strcat(str1, ); strcat(str1,rn); strcat(str1,d); flat=0; if(flat=1) MessageBox(NULL,TEXT( 未 查 找 到 此 零 件 ! ),TEXT( 友 情 提 示 ),MB_OK);zero_memory_rec(); return ; if(flat=0) MessageBox(NULL,TEXT( 查找到此零件! ),TEXT( 友情提示 ),MB_OK); SetDlgItemText(hwnd,8,str1); return ; void num_。

52、serach() char filename20= ,str20= ,price10,amount20,num20,date10,d20=查找完 毕 , 请继续 ,str11000= ; struct buy *p; int flat=1,a=0; FILE *fp; ZeroMemory(filename,sizeof(filename); GetDlgItemText(hwnd,9,filename,sizeof(filename)/sizeof(char); if( (fp = fopen(filename, r) = NULL) MessageBox(NULL,TEXT( 文件名错误!。

53、 ),TEXT( 标题 ),MB_OK); exit(0); ZeroMemory(num,sizeof(num); GetDlgItemText(hwnd,1,num,sizeof(num)/sizeof(char); / 查找 a=atoi(num); for(p=head.next;p!=NULL;p=p-next) if(a=p-num) ltoa(p-num,num,10); strcat(str1,num); strcat(str1, ); strcat(str1,p-pname); strcat(str1, ); ltoa(p-date,date,10); strcat(str1。

54、,date); strcat(str1, ); strcat(str1,p-name); strcat(str1, ); ltoa(p-amount,amount,10); strcat(str1,amount); strcat(str1, ); / 空开间隔 ltoa(p-price,price,10); strcat(str1,price); strcat(str1, ); strcat(str1,rn); strcat(str1,d); flat=0; if(flat=1) MessageBox(NULL,TEXT( 未 查 找 到 此 零 件 ! ),MB_OK);zero_memor。

55、y_rec(); return ; if(flat=0) MessageBox(NULL,TEXT( 查找到此零件! ),TEXT( SetDlgItemText(hwnd,8,str1); return ; void daleteData() struct buy *p1, *p2; int flag=0,a=0; char temp150, str160; p2 = ( struct buy *)malloc(sizeof( struct buy); p1 = ( struct buy *)malloc(sizeof( struct buy); GetDlgItemText(hwnd, 1。

56、, str1, 60); a= atoi(str1); if ( strcmp(str1, 0)= 0) MessageBox(NULL, TEXT( 输入有误 , 请重新输入 !), 错误提示 , return ; p2 = p1 = while (p1 != NULL) if (p1-num=a) flag = 1; break; p2=p1; p1 = p1-next; if (flag = 0) ),TEXT( 友 情 提 示 友情提示 ),MB_OK); MB_OK | MB_ICONERROR); MB_OK| MB_ICONERROR); MessageBox(NULL, TEX。

57、T( 未 找 到 目 标 , 请 重 试 !), 错 误 提 示 , return ; %s sprintf(temp, 已找到:采购编号: %d 产品名称: %s 出生日期: %d 数量 %d 单价: %d 产地: 的学生 是否删除? ,p1-num, p1-pname, p1-date ,p1-amount, p1-price,p1-place); flag = MessageBox(NULL, temp, NULL, MB_YESNO | MB_ICONQUESTION); if (flag = IDNO) return ; p2-next = p1-next; free(p1); Me。

58、ssageBox(NULL, TEXT( 删除成功 !), 删除成功 , MB_OK | MB_ICONWARNING); return ; void num_mend() char filename20= ,str20= ,grade10,num20,year10,month10,day10,Str11000= ; struct stu *p; int flat=1,a=0,b=0,c=0,d=0,e=0,f=0; FILE *fp; char str160, str260, str360, str460, str560, str660, str760, str860; GetDlgItem。

59、Text(hwnd, 2, str1, 60); strcat(Str1,str1); strcat(Str1, ); GetDlgItemText(hwnd, 3, str2, 60); strcat(Str1,str2); strcat(Str1, ); GetDlgItemText(hwnd, 4, str3, 60); strcat(Str1,str3);strcat(Str1, ); GetDlgItemText(hwnd, 5, str4, 60); strcat(Str1,str4);strcat(Str1, ); GetDlgItemText(hwnd, 6, str5, 60。

60、); strcat(Str1,str5); strcat(Str1, ); GetDlgItemText(hwnd, 71, str6, 60); strcat(Str1,str6); strcat(Str1, ); GetDlgItemText(hwnd,8, str7, 60); strcat(Str1,str7);strcat(Str1, ); GetDlgItemText(hwnd, 9, str8, 60); strcat(Str1,str8);strcat(Str1, ); ZeroMemory(filename,sizeof(filename); GetDlgItemText(h。

61、wnd,18,filename,sizeof(filename)/sizeof(char); if( (fp = fopen(filename, r) = NULL) MessageBox(NULL,TEXT( 文件名错误! ),TEXT( 标题 ),MB_OK); exit(0); ZeroMemory(num,sizeof(num); GetDlgItemText(hwnd,4,num,sizeof(num)/sizeof(char); f=atoi(num); for(p=head.next;p!=NULL;p=p-next) if(f=p-num) MessageBox(NULL,TE。

62、XT( 已修改此采购信息! ),TEXT( 友情提示 ),MB_OK); a=atoi(str1); p-num=a; SetDlgItemText(hwnd,1,p-num); strcmp(p-pname,str2); SetDlgItemText(hwnd,2,p-pname); b=atoi(str3); p-date=b; SetDlgItemText(hwnd,3,p-date); strcmp(p-name,str4); SetDlgItemText(hwnd,4,p-name); e=atoi(str5); p-amount=e; SetDlgItemText(hwnd,5,p。

63、-amount); e=atoi(str6); p-price=e; SetDlgItemText(hwnd,6,p- price); strcmp(p-place,str7); SetDlgItemText(hwnd,7,p-place); strcmp(p-major,str8); sprintf(fp,%s %s %s %d %d %d %d %dn,p-name,p-sex,p-major ,p-num ,p-grade,p-year,p- month,p-day); /* 从文件中读取一个整数 */ flat=0; MessageBox(NULL,TEXT(”未查找到此零件信息!”)。

64、,TEXT(” 友情提示 ”),MB_OK); if(flat=1) SetDlgItemText(hwnd,8,Str1); void save() FILE *fp; struct buy *temp; int flag=0; char filename20; if(head.next=NULL) MessageBox(NULL,TEXT( 没读入文件,亲请先读入文件哦! ),TEXT( 友情提示 ),MB_OK); return 0; GetDlgItemText(hwnd,18,filename,sizeof(filename)/sizeof(char); 打开文件 if( (fp =。

65、 fopen(filename, w+) = NULL) MessageBox(NULL,TEXT(文件名错误! / ),TEXT( 标题 ),MB_OK);exit(0); temp=head.next; while(temp!=NULL) / 判断文件是否结束 fprintf(fp,%d %s %d %s %d %d %s n,temp-num,temp-pname,temp-date ,temp-amount ,temp-price,temp-place); temp=temp-next; if( fclose(fp) ) / 关闭文件 标题 ”),MB_OK); return 0; MessageBox(NULL,TEXT(2),TEXT( MessageBox(NULL,TEXT(已经保存文件! ), TEXT( 友情提示),MB_OK); return 0;。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值