一、 设计任务
工业数据往往数据量巨大,需要将它们筛选和分类以进行处理和分析,将需要分析的数据保存至文件中,一方面可以提高生产过程中的可操作性,另一方面也可以加强其可移植性。
二、 程序使用说明
此部分的目的是让使用者能够获得正确的程序运行结果,防止出现一旦未按设计者要求输入,将导致不可预料的程序退出,无法考核设计者完整设计情况。要求说明的清楚、简单、条理性强。说明内容如下:
(1) 程序设计语言与运行环境:本程序使用VS2019制作而成。
(2) 文件组成说明:程序由多个文件组成时,源文件easydemo.cpp,dataproc.cpp等;数据文件randu.txt,sinuo.txt等,及文件管理信息文件fileinfo.dat,与源文件在同一文件夹下。
(3) 操作说明:本程序有说明操作,按照说明操作即可。
三、 程序设计与实现
1. 程序结构
此处描述预期实现系统的设计方案或功能设计的组成结构,绘制一个系统程序组成框图。
图1. 工业数据处理与文件信息管理系统框图
2. 数据描述
描述系统使用的核心数据结构。如:结构体类型定义及结构体成员含义说明;并说明所使用的数据存储方法,如使用数组实现等。
typedef struct The_users //typedef 可以定义结构体别名
{
char id[10]; //账号
char pwd[21]; //密码
char sex; //性别(性别为单个字符)
char name[15];//姓名(姓名为字符串)
long phone; //电话号码(电话号码为长整型)
}users;
typedef struct
{
char filename[20]; //数据文件名
int line; //数据行数
int row; //数据列数
float mean; //均值
float var; //方差
char status; //文件状态:是否处理过
}FILEINFO; //文件信息结构体类型
3. 功能模块设计
此处描述所有自定义函数的函数名、函数功能、参数说明及算法描述。选择1~2个主要函数绘制规范流程图(或N-S图。应至少包括分支和循环控制的结构)。每个函数按如下格式说明。
为实现上述功能,系统实现自定义函数XXX个。具体如下:
(1) 函数名:void CreateFile()
函数功能:用户建立文件
入口参数:无
出口参数:无
算法描述:创建文件
(2) 函数名:void Register()
函数功能: 无
入口参数:无
出口参数:无
算法描述:注册用户写入文件
(3) ……. 函数名:void Find()
函数功能:找回密码
入口参数:无
出口参数: 无
算法描述:根据问题找回密码
(4) 函数名:void Input_login()
函数功能:登录函数
入口参数:无
出口参数: 无
算法描述:安全模块
(5) 函数名:void menu()
函数功能:菜单栏
入口参数:无
出口参数: 无
算法描述:分支结构
(6) 函数名:int inform(FILEINFO* file)
函数功能:文件读入
入口参数:结构体一维数组首地址
出口参数: 读入个数
算法描述:将文件内容结构体数组
(7) 函数名:void save(char* filename, float* a, int n)
函数功能:内容保存
入口参数:文件名一维数组首地址,数据一维数组首地址,数据个数
出口参数: 无
算法描述:写入文件
(8) 函数名:float mean(float a[], int n)
函数功能:求取平均值
入口参数:数据一维数组首地址,数据个数
出口参数: 平均值
算法描述:平均值算法
(9) 函数名:float var(float a[], int n)
函数功能:求取方差
入口参数:数据一维数组首地址,数据个数
出口参数: 方差
算法描述:方差算法
(10) 函数名:void mafilter(float a[],int n, int size)
函数功能:平滑函数
入口参数:数据一维数组首地址,数据个数,数据内存占据量
出口参数: 无
算法描述:平滑算法
(11) 函数名:float scale(float a[], int n)
函数功能:求取数组的数值范围
入口参数:数据一维数组首地址,数据个数
出口参数:数组的取值范围
算法描述:极值减法
(12) 函数名:float min(float a[], int n)
函数功能:求极小值
入口参数:数据一维数组首地址,数据个数
出口参数:极小值
算法描述:“打擂台”算法,两两比较,循环结构
(13) 函数名:float max(float a[], int n)
函数功能:求极大值
入口参数:数据一维数组首地址,数据个数
出口参数: 极大值
算法描述:“打擂台”算法,两两比较,循环结构
四、 设计难点与解决方法
此程序实现过程中遇到的主要难点有以下几方面:
1. 文件分析,解决思路是把文件读取到内存,按特征进行分割;
2. 不同大小文件处理,解决思路是按块进行读取;
3. 数据检索,数据检索主要考虑检索性能,解决思路是按特征对数据进行分类;
五、 运行效果与不足之处
此处描述系统运行效果,给出典型运行效果图,并指出系统存在不足和需要进一步改进的地方。
系统运行典型效果图,如图所示。
六、 课程设计体会与收获
1、熟悉程序开发环境、学习计算机系统的操作方法
一个c语言程序从编辑、编译、连接到运行,都要在一定的外部操作环境下才能进行。所谓"环境"就是所用的计算机系统硬件、软件条件,只有学会使用这些环境,才能进行程序开发工作。通过上机实验,熟练地掌握c语言开发环境,为以后真正编写计算机程序解决实际问题打下基础。同时,在今后遇到其它开发环境时就会触类旁通,很快掌握新系统的使用。
2、学习上机调试程序
完成程序的编写,决不意味着万事大吉。你认为万无一失的程序,实际上机运行时可能不断出现麻烦。如编译程序检测出一大堆错误。有时程序本身不存在语法错误,也能够顺利运行,但是运行结果显然是错误的。开发环境所提供的编译系统无法发现这种程序逻辑错误,只能靠自己的上机经验分析判断错误所在。程序的调试是一个技巧性很强的工作,对于初学者来说,尽快掌握程序调试方法是非常重要的。有时候一个消耗你几个小时时间的小小错误,调试高手一眼就看出错误所在。
通过这次为数不多的几天计算机实习学习,我们了解了一些关于c语言的知识,理解巩固了我们c语言的理论知识,着对我们将来到社会工作将会有莫大的帮助。同时它让我知道,只要你努力,任何东西都不会太难。
3、加深对课堂讲授内容的理解
课堂上要讲授许多关于c语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。然而要使用c语言这个工具解决实际问题,又必须掌握它。通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握c语言的语法规定。对于一些内容自己认为在课堂上听懂了,但上机实习中会发现原来理解的偏差,这是由于大部分学生是初次接触程序设计,缺乏程序设计的实习所致。
学习c语言不能停留在学习它的语法规则,而是利用学到的知识编写c语言程序,解决实际问题。即把c语言作为工具,描述解决实际问题的步骤,由计算机帮助我们解题。只有通过上机才能检验自己是否掌握c语言、自己编写的程序是否能够正确地解题。
通过上机实验来验证自己编制的程序是否正确,恐怕是大多数同学在完成老师作业时的心态。但是在程序设计领域里这是一定要克服的传统的、错误的想法。因为在这种思想支配下,可能你会想办法去"掩盖"程序中的错误,而不是尽可能多地发现程序中存在的问题。自己编好程序上机调试运行时,可能有很多你想不到的情况发生,通过解决这些问题,可以逐步提高自己对c语言的理解和程序开发能力。