代写 程序设计基础训练(80L878Q)

程序设计基础训练(80L878Q)
实验#5 交付物提交时间要求
 详见《程序设计基础训练课程安排表》; 相关知识点
 文件读取、二维数组;
 指针、数组、链表、循环;  外部程序调用函数;
需自学的相关技术
 动态内存分配函数;
 外部程序调用; 实验目的
 训练学生掌握文件的读取操作;
 训练学生掌握数据在内存中的组织方式;  训练学生掌握外部程序调用技术;
 训练学生了解程序设计文档撰写方法。
实验内容
 程序设计:
1)设计程序读取实验 4 中输出的数据记录文件,程序能够根据文件扩展名自动识别数据记录文件是文本形式 的数据记录文件还是二进制形式的数据记录文件;
2)设计程序读取实验 4 中输出的数据记录文件,将文件中的数据记录文件存入以下四种不同的数据结构中:
 二维数组:N行3列的二维数组,每行存储一条数据记录,数组空间根据数据记录文件中的记录数动
态申请;
 结构体数组:长度为N的结构体数组,每一个数组元素为一个结构体,记录一条数据记录信息,数组
空间根据数据记录文件中的记录数动态申请。请自行设计结构体声明;
 指针数组:长度为N的指针数组,每一个数组元素为一个指向结构体的指针,每一个结构体变量存储
数据记录文件中的一条数据记录,指针数组及数组元素和指向的结构体变量空间均由 malloc 函数动态 生成;
1

 链表:包含头结点的单向链表,头结点中存储数据记录个数及指向第一个数据结点的指针,数据结点 存储一条数据记录信息及指向下一个数据结点的指针,链表结构体请自行定义,并采用 malloc 函数动 态生成;
3)设计实现以下功能:
 能够以外部程序的方式对实验4的程序进行调用(外部程序调用方法请自行查阅system函数的相关
资料和使用方法),用实验 4 的 exe 程序生成数据记录文件,用实验 5 程序读取并显示数据记录文件
内容;
 尝试设计合适的文件目录关系,将实验4编译生成的exe文件与实验5有机整合起来,使得实验5最
终生成的 exe 能够与实验 4 编译生成的 exe 有效协同开展工作,实验 4 与实验 5 程序结合关系可以参 考图 5-1。(详见实验 5 程序设计说明书中 3.2 节)
图 5-1 实验 5 与实验 4 整合关系示意图
 程序通过菜单方式向用户提供功能,提供的功能及菜单显示效果如下:
【菜单显示效果举例】
XXX 的实验 5 程序:
1. 调用实验 4 程序生成记录文件(文本方式)
2. 调用实验 4 程序生成记录文件(二进制方式)
3.读取指定数据记录文件(二维数组存储方式)
4.读取指定数据记录文件(结构体数组存储方式)
5.读取指定数据记录文件(指针数组存储方式)
6.读取指定数据记录文件(链表存储方式)
7. 调用实验 4 生成数据记录文件,同时读取数据记录文件(文本方式输出,二维数组方式存储)
8. 调用实验 4 生成数据记录文件,同时读取数据记录文件(文本方式输出,结构体数组方式存储)
9. 调用实验 4 生成数据记录文件,同时读取数据记录文件(文本方式输出,指针数组方式存储)
10. 调用实验 4 生成数据记录文件,同时读取数据记录文件(文本方式输出,链表方式存储)
11. 调用实验 4 生成数据记录文件,同时读取数据记录文件(二进制方式输出,二维数组方式存储) 12. 调用实验 4 生成数据记录文件,同时读取数据记录文件(二进制方式输出,结构体数组方式存储) 13. 调用实验 4 生成数据记录文件,同时读取数据记录文件(二进制方式输出,指针数组方式存储) 14. 调用实验 4 生成数据记录文件,同时读取数据记录文件(二进制方式输出,链表方式存储)
2

15. 重新设置配置参数值
0. 退出 请输入您要执行的程序序号:
 实验5程序提供两种工作模式:自动模式与交互模式,各模式下程序工作过程如下:
 自动模式:在该模式下,用户选择要执行的功能后,调用实验 4 时,实验 4 以其 conf.ini 里面的配
置信息作为参数,直接在默认的存储位置,以默认的文件名生成数据记录文件;
 交互模式:在该模式下,用户选择要执行的功能后,由程序提供与用户的交互功能,由用户输入文
件的存储位置、文件名和记录条数参数,结合 conf.ini 里的其他配置信息,生成数据记录文件;
 设计一个用于实验5的配置文件,用于存储实验5的工作模式。请在实验5程序设计说明书中给出你
设计的配置文件的文件名称,相对存储位置,以及标识实验 5 工作模式的方法;
 程序运行后显示功能菜单,根据用户的选择的功能序号进行相应处理,处理完成后再次显示功能菜
单,等待用户选择其他功能。程序主函数功能流程如图 5-2 所示;请参考流程图 5-2 设计实现实验 5
程序,思考以下问题,在实验报告中加以说明: 程序启动
程序自检
自检无误?
Y 加载系统参数
显示系统菜单
等待用户输入
用户选择了功能序号? Y
是否选择了退出?
a) 结合实验程序,尝试思考一下实验 5 的程序自检过程中需要检查什么?请在实验报告中加以阐述; b) 无论是自动模式还是交互模式下,实验 5 为什么能够准确找到实验 4 生成的数据记录文件?请在实
验报告中加以解释;
 在上述功能菜单所列的功能中,除了1、2、15、0号功能外,用户选择其它功能时当实验5将数据记
录文件读取到内存容器中之后,程序需提供数据展示功能,由专门的数据展示函数将内存容器中的数 据记录读出,显示到演示屏上供用户查看;
3
N
显示错误信息
Y
程序结束
图 5-2 实验 5 主程序流程图
N
N 执行相应功能

 实验5程序需要提供对实验4的配置文件conf.ini的修改功能(功能选项15),请设计并实现该功 能;
 实验5程序需要提供对本程序的配置文件中工作模式的修改功能,请设计并实现该功能; 4)程序设计时请遵守以下要求:
 实验 5 主函数要求由一条语句实现,实验 5 的所有功能均实现在 run( )函数内;
 以多文件工程的方式组织实验5的开发,整个实验5的整个工程主要由6个源文件和6个头文件组
成,具体工程组织形式见附录 1;(附录 1 中已确定内容,需严格遵照执行,未确定内容可自行设计
确定并补充完善到附录 1 中去)
 在开始编写程序前,请先认真阅读实验5题目要求及附录1中的设计文档内容。
 文档撰写:
请同学们根据你完成的实验 5 程序,完善附录 1 给出的设计文档,将其中各个章节的内容补充完毕。(附录 1 中非标红部分为已确定内容,标红部分为需补充完善内容,标红并以括号括起来的内容为说明文字,在正式提交文 档中请删除)
请各位同学务必认真阅读实验 1 附录 1 给出的《程序设计基础训练课程软件设计文档编写格式规范说明》严格 按照规范要求编写实验报告。
 撰写实验报告
1)请在实验报告中回答上一小节中提出的问题及其它要求在实验报告中进行阐述的内容;
2)请在实验报告中谈一下你对程序设计文档的理解,结合你的体会论述一下程序设计文档应该怎么写、什么 时候写、要写清楚的内容是什么、在程序开发中起到什么作用。
结果提交
 程序调试通过后,由授课教师课堂检查并记录成绩;
 实验完毕后需提交整个程序工程、编译后发布版的可执行文件、程序设计说明书和实验报告,以压缩包的
形式提交给任课教师;
 请遵照实验1附录1中的文档编写格式规范编写实验报告和程序设计说明书;
 请使用本课程所要求的命名规范对压缩包及其内部文件、文件夹进行命名,详见《程序设计基础训练实验
命名规范》。
成绩评定
 采分点:
 程序是否独立调试通过并运行正常;
4

 程序是否以工程形式组织;
 程序格式是否规范,程序是否易于阅读;
 实验报告内容是否详实、所反映出的学生对实验 5 程序设计思路的梳理是否正确,理解是否到位;  程序设计说明书论述是否充分,规范。
5

附录 1:
程序设计基础训练实验 5 程序设计说明书
学期:XXX 学期 报告人:XXX
学号:XXXXXXXX
班级:XXX 编制日期:2018年X月X日

目录
1. 概述…………………………………………………………………………………………………………………………………………. 1
1.1. 标识……………………………………………………………………………………………………………………………….. 1
1.2. 范围……………………………………………………………………………………………………………………………….. 1
2. 程序设计需求……………………………………………………………………………………………………………………………. 1
2.1. 功能需求 ………………………………………………………………………………………………………………………… 1 3. 程序详细设计……………………………………………………………………………………………………………………………. 3
3.1. 功能详细设计………………………………………………………………………………………………………………….. 3
3.2. 程序文件组织………………………………………………………………………………………………………………….. 3
3.3. 内存数据数据模型设计 ……………………………………………………………………………………………………. 5
3.4. 函数接口设计………………………………………………………………………………………………………………….. 5
3.5. 函数详细设计………………………………………………………………………………………………………………….. 6 3.5.1. 程序入口函数main…………………………………………………………………………………………………6 3.5.2. 程序主函数run……………………………………………………………………………………………………..7 3.5.3. ……(根据你的程序补充后续函数详细设计内容)…………………………………………………. 7
3.6. 程序交互设计………………………………………………………………………………………………………………….. 8 3.6.1. 数据记录文件加载时的交互设计…………………………………………………………………………….. 8 3.6.2. 显示输出二维数组内容的交互设计…………………………………………………………………………. 9

1. 概述 1.1. 标识
文档名称:程序设计基础训练实验 5—程序设计说明书 文档编号:Lab5-XXXXXXXX(根据个人意愿自行拟定编号)
1.2. 范围
本文档适用于《程序设计基础训练》课程,为课程实验 5 环节的交付物。文档用于描述程序设计基础训练课程中
实验 5 所编写程序的设计方案。文档阅读对象为本课程授课教师及本课堂同学。
2. 程序设计需求 2.1. 功能需求
根据《程序设计基础训练》课程实验 5 要求,待编写的程序需要实现以下功能:
1)设计程序读取实验 4 中输出的数据文件,程序能够根据文件扩展名自动识别是文本形式的数据记录文件还是二 进制形式的数据记录文件;
图 2-1 文本形式的数据记录文件存储格式样例 以文本形式存储的数据记录文件为例,其中文件的第一行用于存储文件的记录数,如图 2-1 中,表示数据文件中
总共存储了 5 条数据记录;从文件第二行开始,逐条存储数据记录文件,数据记录文件是一个三元组<元素 1,元素 2, 元素 3>,每个元素为一个 int 值,元素与元素之间用“,”(英文逗号)进行分隔;
1

2)设计程序读取实验 4 中输出的数据文件,将文件中的数据记录文件存入以下四种不同的数据结构中:
 二维数组:N行3列的二维数组,每行存储一条数据记录,数组空间根据数据记录文件中的记录数动态
申请;
 结构体数组:长度为N的结构体数组,每一个数组元素为一个结构体,记录一条数据记录信息,数组空
间根据数据记录文件中的记录数动态申请。请自行设计结构体声明;
 指针数组:长度为N的指针数组,每一个数组元素为一个指向结构体的指针,每一个结构体变量存储数
据记录文件中的一条数据记录,指针数组及数组元素和指向的结构体变量空间均由 malloc 函数动态生
成;
 链表:包含头结点的单向链表,头结点中存储数据记录个数及指向第一个数据结点的指针,数据结点存
储一条数据记录信息及指向下一个数据结点的指针,链表结构体请自行定义,并采用 malloc 函数动态生
成; 3)设计实现以下功能:
 能够以外部程序的方式对实验4的程序进行调用,用实验4的exe程序生成数据记录文件,用实验5程 序读取并显示数据记录文件内容;
 尝试设计合适的文件目录关系,将实验4编译生成的exe文件与实验5有机整合起来,使得实验5最终 生成的 exe 能够与实验 4 编译生成的 exe 有效协同开展工作;
 程序通过菜单方式向用户提供功能;
 实验5程序提供两种工作模式:自动模式与交互模式,各模式下程序工作过程如下:
 自动模式:在该模式下,用户选择要执行的功能后,调用实验4时,实验4以其conf.ini里面的配置 信息作为参数,直接在默认的存储位置,以默认的文件名生成数据记录文件;
 交互模式:在该模式下,用户选择要执行的功能后,由程序提供与用户的交互功能,用户输入文件的 存储位置、文件名和记录条数参数,结合 conf.ini 里的其他配置信息,生成数据记录文件;
 提供加载配置文件功能,配置文件用于存储实验5的工作模式;
 在上述功能菜单所列的功能中,除了1、2、15、0号功能外,用户选择其它功能时当实验5将数据记录
文件读取到内存容器中之后,程序需提供数据展示功能,由专门的数据展示函数将内存容器中的数据记
录读出,显示到演示屏上,供用户查看;
 实验5程序需要提供对实验4的配置文件conf.ini的修改功能(功能选项15);
 实验5程序需要提供对实验5程序的配置文件中工作模式参数的修改功能;
4)程序设计时请遵守以下要求:
 实验5主函数要求由一条语句实现,实验5的所有功能均实现在run()函数内;  以多文件工程的方式组织实验5程序的开发;
2

3. 程序详细设计 3.1. 功能详细设计
根据《程度设计基础训练》课程实验 5 的题目要求,将实验 5 程序功能细化如下:
1)外部程序调用功能:外部程序调用功能主要实现对实验 4 编译好的 exe 程序进行调用,通过调用实验 4 程序生 成数据记录文件的功能。调用外部文件有两种调用方式:
 自动模式:在该模式下,调用实验4程序时,实验4以其conf.ini里面的配置信息作为参数,直接在默认的 存储位置,以默认的文件名生成数据记录文件;
 交互模式:在该模式下,实验5程序提供与用户的交互功能,用户输入文件的存储位置、文件名和记录条数 参数,实验 5 程序以命令行参数的形式发送给实验 4 程序,生成数据记录文件;
2)数据加载功能:数据加载功能主要实现将外部数据记录文件的数据记录读出并存入到四种不同的存储结构中去 的功能。数据记录文件的位置指定有两种程序调用方式:
 自动模式:实验5程序到约定好的数据记录文件存储位置找到数据记录文件并进行读取加载;
 交互模式:实验5程序与用户进行交互,由用户输入文件的存储位置和文件名信息,实验5程序到用户指定
的位置打开用户指定的文件,进行读取加载;
3)数据展示功能:数据展示功能主要实现将 5 中不同存储结构中存储的数据记录显示到控制台界面的功能; 4)菜单展示及功能调用功能:菜单展示与功能调用功能主要实现程序启动后在界面显示系统功能菜单并根据用户
输入的功能选项调用相应的功能;
5)配置文件 conf.ini 修改功能:主要实现对实验 4 的配置文件 conf.ini 中各个配置参数进行修改以及对实验 5
的工作模式的修改功能。
3.2. 程序与外部程序协同设计
根据《程度设计基础训练》课程实验 5 的题目要求,实验 5 程序需要调用已编译好的实验 4 的 exe 程序,并 读取实验 4 程序生成的数据记录文件,为了实现实验 5 程序与实验 4 程序的有效配置,对实验 4 程序、实验 5 程 序及生成的数据记录文件存储位置作以下约定:
1)当处于自动模式下,实验 4 生成的数据记录文件存储于与实验 4 程序同级目录的 DataSet 子目录下,数据 记录文件的默认名称为 DataFile.txt 或 DataFile.dat(根据生成文件存储格式决定);
3

2)当处于交互模式下,实验 4 生成的数据记录文件存储于用户指定的合法目录中,数据记录文件名也由用 户指定;
3)当处于自动模式下,实验 5 读取数据记录文件时,从与实验 5 程序同级目录的 DataSet 子目录下,打开名 称叫 DataFile.txt 或 DataFile.dat 的文件进行数据加载;
4)当处于交互模式下,实验 5 根据用户指定的目录和文件名进行文件读取和数据加载; 5)实验 4 程序与实验 5 程序存放于同一级目录下;
3.3. 配置文件设计
根据《程度设计基础训练》课程实验 5 的题目要求,实验 5 程序需要读取配置文件,从中获取实验 5 程序的工作 模式。对实验 5 配置文件设计如下:
 文件名称:(填写你设计的配置文件名称)
 文件存储位置:(填写你设计的配置文件与实验5程序的相对位置关系)
 文件内容说明:(填写你设计的配置文件中用什么方式表示实验5的工作模式)
3.4. 程序工程文件组织设计 3.4.1. 程序源文件设计
根据《程度设计基础训练》课程实验 5 的题目要求,将整个实验 5 的功能划分为七块,由 6 个源文件和 6 个头文 件实现,具体划分形式如表 3-1 所示。
表3-1 程序设计基础训练实验5程序模块划分说明表
模块名称
文件名称
文件说明
结构体及常量声明模 块
Lab5_data.h
存放实验 5 程序所需的结构体声明、常量声明及全局变量声明
主模块
Lab5.cpp
程序入口文件,存放整个工程的 main 函数
Lab5_main.cpp
程序主控文件,存放 run 函数及其他需要配套的子函数
Lab5_main.h
主控文件 的头文件,存放主控文件的函数说明及程序中主要结构体和全局 变量声明
外部程序调用模块
Lab5_call.cpp
存放调用实验 4 程序生成数据记录文件的函数
Lab5_call.h
存放调用实验 4 程序生成数据记录文件函数的声明
数据加载模块
Lab5_loadfile.cpp
存放数据读取、数据加载相关功能所需的函数
Lab5_loadfile.h
存放数据加载相关函数的函数声明
4

数据显示模块
Lab5_view.cpp
存放将存储在内存容器中的数据记录显示输出到屏幕上功能的相关函数
Lab5_view.h
存放数据显示模块相关函数的函数声明
系统配置模块
Lab5_conf.cpp
存放与修改配置文件相关的功能函数
Lab5_conf.h
存放修改配置文件相关功能函数的函数声明
XXX 模块
XXXXX
如果你设计了其他文件,请接着向下补充
……
……
……
3.5. 内存数据数据模型设计
本程序需要处理的数据主要是数据记录文件中的记录数据,每条记录数据为一个由 3 个整型值组成的三元组(见 2.1 节)。在程序中,采用一个四种存储结构来存储数据记录文件中的记录数据,
1.二维数组存储方式
二维数组为 N 行 3 列,动态申请空间,二维数组声明如下: (请补充你程序的二维数组变量声明,以及数据记录在该容器中的存储方式) 2.结构体数组存储方式
……
3.指针数组存储方式
……
4.链表存储方式
……
程序中需涉及的其他常量和变量如表 3-2 所示。(请在表 3-2 中补充你的程序的关键常量变量信息)
表3-2 程序关键常量、变量一览表
3.6. 函数接口设计
整个程序共设计函数 XX 个,函数功能及接口设计如表 3-3 所示。(请在表 3-3 中补充您的程序的各个功能函数的 函数名和函数说明)
表3-3 程序函数设计一览表
5
声明
常量/变量
说明
int record_num;
变量
用于存放记录文件中的记录数
int MAX_ARRAY_LEN XXX
常量
程序中数组的尺寸常数
……
……
……

函数名称
所属文件
输入参数说明
返回值说明
函数说明
main
Lab5.cpp
(请补充)
(请补充)
程序入口函数
run
Lab5_main.cpp
(请补充)
(请补充)
程序主函数
(请补充)
(请补充)
(请补充)
(请补充)
(请补充)
3.7. 函数详细设计 3.7.1. 程序入口函数 main
实验 5 入口函数要求只由一条语句实现,即调用实验 5 程序主函数,实验 5 的所有功能均实现在程序主函数内, 实验 5 程序入口主函数代码如图 3-1 所示。
(请替换你的程序截图)
图3-1 程序设计基础训练实验5程序入口函数代码截图
6

3.7.2. 程序主函数 run
实验 5 主函数 run 用于实现实验 5 的所有程序功能,函数流程图如图 3-2 所示。
N
显示错误信息
Y 程序结束
程序启动
程序自检
自检无误?
Y 加载系统参数
显示系统菜单
等待用户输入
用户选择了功能序号? Y
是否选择了退出?
N 执行相应功能
N
 输入参数:
 argc:整型,表示命令行参数个数;
 argv:字符指针数组,每个数组元素指向一个命令行参数字符串;
 函数返回值:无函数返回值。
3.7.3. ……(根据你的程序补充后续函数详细设计内容)
(请补充函数声明、输入参数说明、返回值说明,并给出函数流程图,注意不要代码截图)
图3-2 实验5主程序流程图 实验 5 主函数 run 的输入参数及函数返回值说明如下:
7

3.8. 程序交互设计 3.8.1. 系统主菜单设计
系统主菜单显示样式如下:
XXX 的实验 5 程序:
1. 调用实验 4 程序生成记录文件(文本方式)
2. 调用实验 4 程序生成记录文件(二进制方式)
3.读取指定数据记录文件(二维数组存储方式)
4.读取指定数据记录文件(结构体数组存储方式)
5.读取指定数据记录文件(指针数组存储方式)
6.读取指定数据记录文件(链表存储方式)
7. 调用实验 4 生成数据记录文件,同时读取数据记录文件(文本方式输出,二维数组方式存储)
8. 调用实验 4 生成数据记录文件,同时读取数据记录文件(文本方式输出,结构体数组方式存储)
9. 调用实验 4 生成数据记录文件,同时读取数据记录文件(文本方式输出,指针数组方式存储)
10. 调用实验 4 生成数据记录文件,同时读取数据记录文件(文本方式输出,链表方式存储)
11. 调用实验 4 生成数据记录文件,同时读取数据记录文件(二进制方式输出,二维数组方式存储) 12. 调用实验 4 生成数据记录文件,同时读取数据记录文件(二进制方式输出,结构体数组方式存储) 13. 调用实验 4 生成数据记录文件,同时读取数据记录文件(二进制方式输出,指针数组方式存储) 14. 调用实验 4 生成数据记录文件,同时读取数据记录文件(二进制方式输出,链表方式存储)
15. 重新设置配置参数值
0. 退出
请输入您要执行的程序序号:
3.8.2. 修改配置文件子菜单设计
当用户选择主菜单中的 15 号功能时,显示一个子菜单供用户选择要修改的配置参数,子菜单显示样式如 下:
(给出你的子菜单显示样式)
8

3.8.3. 用户交互提示信息设计
当实验 5 程序处于交互模式时,需要输出提示信息提示用户输入正确的参数,相关提示信息设计如下:
 提示用户输入文件存储位置时的提示信息:
(你的提示信息的内容是什么,注意这里不要截图)
 提示用户输入数据记录条数时的提示信息: (你的提示信息的内容是什么,注意这里不要截图)
 修改配置文件时提示用户输入新的文件存储目录的提示信息: (你的提示信息的内容是什么,注意这里不要截图)
 修改配置文件时提示用户输入新的文件名称的提示信息: (你的提示信息的内容是什么,注意这里不要截图)
 修改配置文件时提示用户输入第一、二个元素最大值的提示信息: (你的提示信息的内容是什么,注意这里不要截图)
 修改配置文件时提示用户输入第一、二个元素最小值的提示信息: (你的提示信息的内容是什么,注意这里不要截图)
 修改配置文件时提示用户输入第三个元素最大值的提示信息: (你的提示信息的内容是什么,注意这里不要截图)
 修改配置文件时提示用户输入第三个元素最小值的提示信息: (你的提示信息的内容是什么,注意这里不要截图)
 修改配置文件时提示用户输入记录条数最大值的提示信息: (你的提示信息的内容是什么,注意这里不要截图)
 修改配置文件时提示用户输入记录条数最小值的提示信息: (你的提示信息的内容是什么,注意这里不要截图)
 修改配置文件时提示用户输入实验5工作模式参数的提示信息: (你的提示信息的内容是什么,注意这里不要截图)
3.8.4. 数据记录显示输出交互设计
(论述在显示输出内存数据容器中的数据记录时以什么样的格式输出)
9

【注意】附录 1 所提供的软件设计报告模块主要用于说明程序设计的论述大纲,其文档格式方面(如字体、行距 等)与实验 1 中《程序设计基础训练课程文档编写格式规范说明》要求可能会有出入、撰写文档时应《程序设计基础 训练课程文档编写格式规范说明》的格式要求为准。
10