C语言实训

  • 格式:doc
  • 大小:904.86 KB
  • 文档页数:37

HUBEI UNIVERSITY OF AUTOMOTIVE TECHNOLOGYC语言程序设计实训报告实训题目:汽车零部件采购管理程序专业:软件工程班级: T1323-3 姓名:成绩:完成日期: 2014.5.12 指导教师:目录1.实训题目与要求…………………………………………………3页1.1题目描述……………………………………………3页1.2题目要求……………………………………………3页2.系统设计…………………………………………………………4页2.1 系统功能模块划分……………………………………4页2.2 数据结构设计……………………………………………4页2.3 函数的规划与设计………………………………………5页2.4 主函数的流程分析与设计………………………………6页2.5 主要功能模块的流程分析与设计………………………6页3.程序测试与运行结果……………………………………………8页3.1 测试用例数据……………………………………………8页3.2 测试结果…………………………………………………8页3.3 测试中出现的问题、原因与分析………………………15页4.实训总结…………………………………………………………15页4.1 实训中的难点及其解决方法……………………………15页4.2不足之处…………………………………………………16页4.3实训心得…………………………………………………16页5.程序源代码……………………………………………………16页1、实训题目与要求1.1 题目描述(1)已知在汽车生产时,需要向零部件生产厂商采购零部件,设计一个汽车零部件采购管理程序,以方便采购管理部门对采购零部件的管理。

该单位每次采购都有一个采购编号,每次采购一种零部件。

该程序应该具有如下功能1)能从键盘输入采购信息。

2)指定采购编号,显示采购的零部件信息。

3)指定零部件名称,显示该零部件的所有采购信息。

4)给定采购编号,修改采购信息。

5)给定采购编号,删除采购信息。

6)根据零部件名称,统计采购数量。

7)根据采购员统计,采购的次数。

1.2 题目要求(1)按照分析、设计、编码、调试、测试的软件过程完成这个应用程序。

(2)采购信息包括:采购编号、零部件名称、采购日期、采购员、采购数量、采购单价、供货单位。

(3) 为程序设计windows窗口,在该窗口上以按钮的形式为用户提供“菜单”,通过点击各个功能项对应的按钮完成操作。

2、系统设计2.1 系统功能模块划分1、导入键:可以输入地址导入,也可查找地址导入。

2、添加键:分别输入采购信息,可添加采购信息。

3、删除键:输入采购编号,可删除采购信息。

4、显示零件信息键:输入零件名称,可显示信息。

5、显示采购信息键:输入采购编号,可显示信息。

6、修改键:经过显示采购信息,然后修改信息。

7、统计采购数量键:输入零件名称,可统计数量。

8、统计采购信息键:输入采购员姓名,可统计。

9、保存键:输入文件名,可保存所有采购信息到文件中。

2.2 数据结构设计我是用的尾插法指针链表做的,一个节点保存一个采购信息,插入代码为:if(head.next==NULL)head.next=temp;elser->next=temp;r=temp;r->next=NULL;结构体定义如下:struct stu{char number[20];char mName[20];char name[20];int score;int year;int month;int day;float price;char place[50];struct stu *next;};2.3 函数的规划与设计1)所有函数模块声明如下:void create(HWND hwnd,LPARAM lParam);//文本框和按钮的计void print();//文字的设计void command();//按钮响应设计void readData();//导入void add();//添加void alter();//修改void remov();//删除void display();//显示采购信息void show();//显示零件信息void statistics();//统计数量void vital();//统计次数void save();//保存void open();//文件的打开其中command()函数会分别用switch语句调用各功能函数open()函数是在readData();导入函数中被调用的。

2.4 主函数的流程分析与设计1)int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow )函数中是设计主文本框2)LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )函数是switch语句对每个功能函数的调用。

2.5主要功能模块的流程分析与设计1)以add()添加功能为例的流程图如下:3 程序设计和测试结果3.1 测试用例数据20130230311 轮子董涛600 2013 5 9 100.000000 湖北汽车工业学院20130230313 书吴超500 2013 5 30 200.000000 武汉大学20130230315 轮子董涛100 2014 2 18 200.000000 武汉大学3.2 测试结果(1)主界面:(2)导入:1)搜索导入:2)手输导入:(3) 添加信息:它会对你的年,月,日,编号,进行判断合法性,包括闰年2月份的判断,如有错误,它会提醒你那里出错,并清除错误对话框里的内容,只有全部合法,才可以添加。

如果不输入编号会有提示,并让你重新输入。

(4) 删除采购信息:输入编号就可以删除要删除的内容。

如果你没有输入编号,他会提示,并重新操作。

(5)显示零部件信息:输入零部件名就可显示它的所有采购信息如果没有输入零部件名,他会提醒你输入零部件名。

(6)显示采购信息:输入采购编号,即可得到它采购信息。

如果没有输入编号,他会提醒你输入编号。

(7)显示修改采购信息可以先用编号,点显示采购信息键,然后对要修改的采购信息进行修改,再点击修改键,可完成修改。

(8)统计采购数量:可输入你要统计的零件名称,即可查出他的所有采购数量。

如果没有输入零部件名称,他会提醒你输入。

(9)统计采购次数:可输入采购员的名字,即可查出他的采购总次数如果你没有输入采购员名字,他会提醒你输入采购员名字。

(10)保存采购信息输入保存地址。

即可保存信息如果没有输入地址,他会提醒你输入地址。

3.3测试中出现的问题、原因与分析(1)开始时没有主界面,不能跳转界面,因为不会这些特定函数,(2)不能二次导入,因为头结点已经赋值,并连在了一起,不能二次赋值。

4实训总结4.1实训中的难点及其解决方法1)开始时,老师给程序的是头插法,但这回在以后的操作中出现数据翻转。

后来,我就又改了老师的程序,变成了尾插法。

4.2 不足之处不会用高级windows语言编写一个可以跳转界面的程序,我的所有操作都是一个界面,没法实现界面跳转。

4.3 实训心得我验收时,看到了一个同学,用下拉式菜单,和主界面,突然感觉自己还有很多东西要学,这次实训我明白,必须自主学习一些东西,我不会的还很多,我还明白了,看到的界面并没有我想象中的那么难,例如这次windows操作,我能编写一个小型计算机,虽然还有很多功能没有实现,但还是可以做到的。

所以我要努力去学新东西。

5程序源代码#include <windows.h>#include <stdio.h>#include <string.h>LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM ) ;void create(HWND hwnd,LPARAM lParam);//文本框和按钮的设计void print();//文字的设计void command();//按钮响应设计void readData();//导入void add();//添加void alter();//修改void remov();//删除void display();//显示采购信息void show();//显示零件信息void statistics();//统计数量void vital();//统计次数void save();//保存void open();//文件的打开RECT rect;RECT rect2;RECT rect3;RECT rect4;RECT rect5;RECT rect6;RECT rect7;RECT rect8;RECT rect9;RECT rect10;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 stu{char number[20];char mName[20];char name[20];int score;int year;int month;int day;float price;char place[50];struct stu *next;};struct stu head={"",0};static char myFileName[MAX_PATH];// 在VC++6.0中,_MAX_PATH的值为260。

void open(){//myFileName用于保存文件的路径的字符串//MAX_PATH是C语言通过#define指令定义的一个宏常量,它定义了编译器所支持的最长全路径名的长度。

//OPENFILENAME结构包含了GetOpenFileName和GetSaveFileName函数用来初始化打开或另存为对话框的信息。

// 在用户关闭对话框后,系统返回关于用户的选择信息到这个结构中。

static OPENFILENAME myOfn;memset(&myOfn,0,sizeof(OPENFILENAME));memset(myFileName,0,sizeof(char)*MAX_PATH);myOfn.lStructSize=sizeof(OPENFILENAME);// 确定结构的大小myOfn.hwndOwner= hwnd; // 指定它的父窗口注意hwnd是前面定义了的窗口句柄变量myOfn.hInstance=NULL; // 一般为NULL,表示我们使用的是通用对话框// ,当然我们也可以自定义对话框,此时hInstance 指示资源的handle。