当前位置:文档之家› 2014《程序综合实验》实验指导书(3)

2014《程序综合实验》实验指导书(3)

《程序综合实验》实验指导书

适用实验课时:20

适用对象:计算机科学与技术专业

网络工程专业

软件工程专业

实验目的和内容

《程序综合实验》是计算机专业的公共实践环节,课程开设的目的是为了提高学生对C语言程序设计、面向对象程序设计、离散数学等程序设计相关知识的综合运用能力,加强其程序设计、编程、调试等软件开发的综合实践能力。

课程通过设计综合性实验题目,引导学生对程序设计相关知识的综合运用,锻炼程序实现能力。通过小组讨论、成果展示等丰富的实验环节,锻炼学生的沟通能力和表达能力,为培养学生的创新精神和大型软件开发能力打下基础。

实验分为三个部分,第一部分锻炼可视化编程能力,第二部分锻炼面向对象与文件存储的设计与实现能力,第三部分锻炼离散结构、算法设计与实现能力,总的实验学时为20课时。

要求每个学生独立完成三个基本实验的设计和编程实现,并将实验题目的分析、设计和实现形成完整的实验报告,并进行成果展示。

实验项目及学时分配

实验一计算器设计与实现

一、实验目的与要求

实验目的:锻炼可视化编程能力

实验要求:

1熟悉VC++编程环境。

2运用C++程序设计知识对实验题目进行分析和设计。

3进行程序编写和调试工作。

二、实验内容

使用MFC框架在Visual Studio 6.0环境下编写一个简易的计算器,能实现简单的加、减、乘、除四则运算,并加入特定的一些效果,如使计算器的颜色在红色,绿色和蓝色之间轮流变换等。完成诸如计算器对话框的创建、控件编辑、界面设计、关键功能的实现等工作。

三、实现方法

1、设计界面。创建一个对话框,在对话框中添加文本框用来显示计算结果,按钮:0-9、小数点、+、-、*、/、=等。

2、实现各个按钮的功能。

3、实现简单的算术四则运算语法分析,保证正确的计算结果。

4、实现颜色的变换。

实验二简单文本编辑器设计与实现

一、实验目的与要求

实验目的:锻炼可视化编程能力

实验要求:

1熟悉VC++编程环境。

2运用C++程序设计知识对实验题目进行分析和设计。

3进行程序编写和调试工作。

二、实验内容

设计、实现一个与DOS操作系统下的Edit相似的文本编辑器。在此文本编辑器中,用户可以通过快捷和选择菜单项,完成基本的文本编辑器和文件处理工作。文本编辑器主要由五大功能模块构成,它们分别是文件操作模块,文本编辑模块,剪切操作模块,菜单控制模块和帮助及其他模块。各模块的功能要求:

(1)文件操作模块。在文件操作模块中,主要完成文件的创建,打开,保存和另存操作。用户可以选择File菜单上的New子菜单来完成新建文本文件操作;选择File菜单上的Save子菜单来完成保存文件操作选择File菜单上的Open 子菜单来完成打开文件操作;选择Flie菜单上的Save as子菜单来完成文件的另存为操作。在文件的打开,保存和另存为操作中,系统会提示用户输入文件路径及文件名。值得一提的是,当用户打开一个文件时,指定的文件必须存在,否则系统会报错。

(2)文本编辑器模块。在文本编辑器模块中,主要完成在编辑窗口中以添加或插入的方式输入字符,删除光标所在当前位置的单个字符或前一个位置的单个字符,朝上下左右4个方向的光标移动操作。当光标所在位置及后面的位置没有字符时,系统会以添加的方式输入字符;当光标所在位置及后面的位置有字符时,系统会已插入的方式输入字符。用户可以使用BackSpace键删除光标前一个字符,也可以使用Del键删除当前位置的字符或删除Ctrl+左移(右移)键i选定了的多个字符。用户可以使用左移键(←),右移键(→),上移键

(↑)和下移键(↓)来移动光标位置。

(3)剪贴板操作模块。在剪贴板操作模块中,主要完成对已选定文本的剪切,复制,粘贴工作。如果用户要剪切文本以便可以将它移动到其他位置,可通过Ctrl+X左移键(右移键)先选定文本,然后选择Edit菜单上的Cut子菜单或按Ctrl+X快捷键来完成剪切任务。如果用户要复制文本以便可以将它黏贴到其他位置,必须先选定文本,然后选择Edit菜单上的Copy紫菜单或按Ctrl+C快捷键来完成复制任务。如果用户要粘贴剪切或复制的文本,必须将光标置于要粘贴文本的位置,然后选择Edit菜单上的Paste子菜单或按Ctrl+V快捷键来完成粘贴任务。

(4)菜单控制模块。在菜单控制模块中,主要完成菜单的显示。光带条在子菜单之间的上下移动或菜单之间的左右移动和子菜单项的选取。本文本编辑器共有Flie,Edit和Help3个子菜单项,用户可以分别按F1,F2和F3功能键来完成这3个菜单项的调用,即显示某项菜单。用户可按光标上移或下移键在某菜单项的子菜单之间循环移动,也可使用光标的左移或右移键在3个菜单项之间循环移动。当光带移动到某个字菜单项上时,用户此时可使用Enter键来选取相关菜单选项。

(5)帮助及其他模块。在帮助及其他模块中,主要完成系统功能及按键的简要介绍。其他模块包括文本的快速预览和窗口的显示。用户可按F10功能键来打开快速预览窗口,在快速预览窗口中没有功能菜单条。主窗口要有菜单栏,文本编辑区和状态栏三大部分构成,菜单栏用来显示菜单项,文本编辑区主要用来文本字符的输入,删除等操作,状态栏主要用来显示当前光标在文本窗口中的坐标值。

三、实现方法

利用VC提供的MFC可视化编程,功能的实现使用的是模块化的编程方式进行,利用相关的系统自带函数实现主要功能。

1、编辑区

编辑器的利用MFC自动生成的文本框,利用的文本编辑函数来实现文本编辑功能。

2、文件操作模块

新建菜单使用MFC自带的系统函数实现,其中在新建文档的时候需要对文本的编辑区进行判断,对文本框中存在的文本进行存档,而新建的文档就是对文本编辑区进行重绘,对原有的内容进行存储和销毁。

打开菜单使用MFC中自带的打开对话框,其中重点是在运行的过程中对绝对路径的获取以及特定格式文件的打开和提取。

保存菜单:使用的是MFC中自带的模块进行的,当文档已经创建以后,文本的保存就改变为把文本编辑区的内容重新写入同一个绝对地址的文本文档中。

另存为菜单:是一种特殊的保存形式。

3、剪贴板操作模块

剪切,粘贴,复制,删除,全选等功能可以由系统提供的参数来实现,要求能够正确的实现各种文本编辑功能

4、菜单控制模块,帮助及其他模块

利用MFC自带的系统参数及相关函数实现实现,要求能够正确的实现各种文本编辑功能

实验三通讯录管理程序设计与实现

一、实验目的与要求

实验目的:锻炼面向对象编程与文件操作能力

实验要求:

1、熟悉C++程序设计。

2、运用OO知识对实验题目进行分析和设计。

3、进行程序编写和调试工作。

二、实验内容

设计、实现一个具有通讯信息插入、修改、删除、显示、查询和统计功能的通讯录管理程序。程序设计功能及要求:

1、人数不定,数据使用文件存放。

2、记录每位同学的学号、姓名、性别、工作单位、电话号码和E-mail 地址建立单独的条目,存入数据文件。

3、可对记录中的姓名和电话号码等进行修改。

4、可增加或删除记录。

5、可显示所有保存的记录。

6、可以统计男女同学或总人数。

7、通过姓名、学号或电话号码查询到同学的条目。

8、在开始画面加入简单的菜单便于选择功能。

9、储存数据文件格式:

学号姓名性别工作单位电话号码E-mail

1 李四….….….

10、选做:加入文件加密系统,对储存数据文件进行简单的加密,要求通过直接打开储存数据文件无法获得其中的数据。但同时不影响程序对储存数据文件的调用。

三、实验方法

1、通讯录的录入:从键盘接收输入的通讯录信息,将其存储到通讯录文

件中。

2、通讯录信息的修改:从键盘接收输入的需要修改通讯录的姓名,在文件中查找是否存在相应记录,如果存在,则从键盘输入修改后的信息,并保存在文件中。

3、通讯录信息的删除:从键盘接收输入的需要删除的通讯录的姓名,在通讯录文件中进行查找,如果存在这样的记录,则在文件中将记录删除。

4、通讯录信息的增加:从键盘接收要增加的通讯录信息,并与通讯录文件中已存在的信息进行比对,如果存在这样的记录,且前后信息不符,则更新该记录,如果不存在该条记录,则将新录入的通讯录信息保存到通讯录文件中。

5、显示所有保存的记录:能显示出所有通讯录文件的所有记录。

6、统计男女生人数或总人数。

7、通讯录的查询功能:从键盘接收要查询的姓名、学号或电话号码,对通讯录文件进行查询,并将查询到整条记录显示出来。

8、该通讯录可以采用字符界面,也可以在开始画面加入简单的菜单便于选择功能。

实验四成绩管理程序设计与实现

一、实验目的与要求

实验目的:锻炼面向对象编程与文件操作能力

实验要求:

1、熟悉C++程序设计。

2、运用OO知识对实验题目进行分析和设计。

3、进行程序编写和调试工作。

二、实验内容

设计一个程序实现对学生成绩的管理,要求可以对指定的文件进行操作,可将多个文件组成一个文件。程序设计功能及要求:

1、输入:学生的基本信息,包括学号、姓名、C语言成绩、高等数学成绩等。

原始数据文件格式(具体数据和项目自行编写):

学号姓名英语 C语言高等数学…………

1 张三76 89 78

2 李四… … …

2、查询:可以按学号、姓名等进行成绩查询。

3、删除:删除某条记录。

4、计算:计算每个学生的总成绩、平均成绩,所有学生单科的平均成绩,将总成绩、平均成绩、名次加到对应学生成绩记录后。

5、统计:统计每科成绩分布情况,统计情况加到文件最后。

输出数据文件(由程序自动生成)

学号姓名英语 C语言高等数学………平均成绩名次

1 张三 76 89 78 …………

2 李四….….….

统计情况:

分数段英语C语言高等数学………………….

<60 2 …

60~69 8 …

70~79 5 …

80~89 10 …

平均分 78 …

三、实验方法

1、数据结构的设计

根据对题目的要求,设计合适的类或结构类型、以及各种对象、变量。

2、设计各成员函数,分别实现以下功能:

1)学生信息的录入

从键盘录入学生的基本信息,并将其保存至学生成绩文件。

2)学生信息查询

从键盘输入姓名或学号,在学生成绩文件中实现按学号、姓名的查找,如果存在,则输出该学生的其他信息,如不存在,输出不存在此学生。

3)学生信息的删除

从键盘输入要删除的学生学号或姓名,在学生成绩文件中删除该学生的基本信息。

4)成绩的计算

计算每个学生的总成绩、平均成绩,所有学生单科的平均成绩,将总成绩、平均成绩、名次加到对应学生成绩记录后;

5)统计

统计每科成绩分布情况,统计情况加到学生成绩文件最后。

3、界面的设计

采用菜单或字符界面的形式,方便功能的选择。

实验五超市选址问题

一、实验目的与要求

实验目的:锻炼数据结构、算法设计与实现能力

实验要求:

1熟悉数据结构、离散数学、算法设计等课程。

2对实验题目进行分析,选取适当的数据结构和算法设计方法。

3进行程序编写和调试工作。

二、实验内容

在一个按照东西和南北方向划分成规整街区的城市里,n个居民点散乱地分布在不同的街区中。用x坐标表示东西向,用y坐标表示南北向。各居民点的位置可以由坐标(x,y)表示。街区中任意两点(x1,y1)和(x2,y2)之间的距离可以用数值|x1-x2|+|y1-y2|度量。居民们希望在城市中选择建立超市的最佳位置,使n个居民点到超市的距离总和最小。

编程任务:给定n个居民点的位置,编程计算n个居民点到超市的距离总和的最小值。

输入:输入由多组测试数据组成。每组测试数据输入的第1行是居民点数n,接下来n行是居民点的位置,每行两个整数x和y。

输出:对应每组输入,输出数据是n个居民点到超市距离总和的最小值。

输入示例:5 居民点到超市最小距离和:10

1 2

2 2

1 3

3 -2

3 3

三、实验方法

超市选址问题的核心可以看成是求中值的问题,即n个居民点的横、纵坐标值的中位数就是最优解。为此可先求出n个居民点的x坐标值和y坐标值的中位数,然后由此求得n个居民点到超市距离总和的最小值。

本实验需完成算法设计、数据结构的选择、运行结果分析以及相关内容的说明等。例如,求中位数的过程可用快速排序等算法将n个居民点的x和y坐标分别排序后,计算出中位数。程序的编写可以参考以下步骤:

1、输入居民点位置文件,或用随机数发生器得到各居民点位置坐标(x,y)。

2、将输入的二维数组(x,y)转化为两个一维数组(x)、(y)。

3、计算横坐标和纵坐标数组的中位数。

4、求n个居民点到超市距离总和的最小值,并输出此值,并以图示的方式显示居民点与超市的位置分布。

实验六拯救大兵瑞恩

一、实验目的与要求

实验目的:锻炼数据结构、算法设计与实现能力

实验要求:

1、熟悉数据结构、离散数学、算法设计等课程。

2、对实验题目进行分析,选取适当的数据结构和算法设计方法。

3、进行程序编写和调试工作。

二、实验内容

1944年,特种兵麦克接到国防部的命令,要求立即赶赴太平洋上的一个孤岛,营救被敌军俘虏的大兵瑞恩。瑞恩被关押在一个迷宫里,迷宫地形复杂,但是幸好麦克得到了迷宫的地形图。

迷宫的外形是一个长方形,其在南北方向被划分为N行,在东西方向被划分为M列,于是整个迷宫被划分为N×M个单元。我们用一个有序数对(单元的行号,单元的列号)来表示单元位置。南北或东西方向相邻的两个单元之间可以互通,或者存在一扇锁着的门,又或者存在一堵不可逾越的墙。迷宫中有一些单元存放着钥匙,并且所有的门被分为P类,打开同一类的门的钥匙相同,打开不同类的门的钥匙不同。

大兵瑞恩被关押在迷宫的东南角,即(N,M)单元里,并已经昏迷。迷宫只有一个入口,在西北角,也就是说,麦克可以直接进入(1,1)单元。另外,麦克从一个单元移动到另一个相邻单元的时间为1,拿取所在单元的钥匙的时间以及用钥匙开门的时间忽略不计。

输入:

第一行是三个整数,依次表示N,M,P的值;(3≤N,M≤15,1≤P≤10)第二行是一个整数K,表示迷宫中门和墙的总个数;

第i+2行(1≤i≤K),有5个整数,依次为Xi1,Yi1,Xi2,Yi2,Gi:

当Gi≥1 时,表示(Xi1,Yi1)单元与(Xi2,Yi2) 单元之间有一扇第Gi类的门,当Gi=0时,表示(Xi1,Yi1)单元与(Xi2,Yi2) 单元之间有一堵不可逾越的墙;(其中,|Xi1-Xi2|+|Yi1-Yi2|=1,0≤Gi≤P)

第K+3 行是一个整数S,表示迷宫中存放的钥匙总数;

第K+3+j行(1≤j≤S),有3个整数,依次为Xi1,Yi1,Qi:表示第j把钥匙存放在(Xi1,Yi1) 单元里,并且第j把钥匙是用来开启第Qi类门的。(其中1≤Qi≤P)

输出

对每组数据只输出一个整数T,表示麦克营救到大兵瑞恩的最短时间的值,若不存在可行的营救方案则输出-1。

样例输入

4 4 9 9 1 2 1 3 2 1 2 2 2 0 2 1 2 2 0 2 1 3 1 0 2 3 3 3 0 2 4 3 4 1 3 2 3 3 0 3 3 4 3 0 4 3 4 4 0 2 2 1 2 4 2 1

样例输出

14

三、实验方法

在不考虑有门和钥匙的时候,把相邻且没有墙的格子两两相连,权值为一,然后求最短路径就可以。

加入门的限制后,无法仅仅用最短路解决,所以将原图(用单独的数组存储格子之间的关系)复制2^p份,num[I,j,i1,i2,i3,i4,i5,i6,i7,i8,i9,i10]记录在拥有不同钥匙的情况下的节点编号,I记录行,j记录列,i1~i10取值范围为[0..1],0表示没有该种钥匙,1表示有(多少把都可以),将有关系的节点之间连边,再整体做一遍SPFA就可以得到最优解。

有关系的节点:

1、相邻节点:中间没有墙和门或者有门但是两节点都在有该门钥匙的图上,则两节点间连一条权值为1的无向边。

2、对应同一位置,且该位置有钥匙,且一个节点位于无该钥匙的图上,另一节点位于有该钥匙的图上,则从无钥匙的节点向有钥匙的节点连一条权值为0的有向边。

实验报告要求

本实验课程要求每人针对每个实验上交一份实验报告,不接受不完整的实验报告,或者说明与程序或结果不符合的实验报告。实验报告主要包括四方面内容:

1、实验设计

实验采用的数据结构设计和算法设计,程序每部分的主要功能说明等。

2、程序代码

实验实现的源程序,要求符合代码行首缩进、单句代码换行、标识符命名合理,并包括必要的注释。

3、实验结果

程序运行结果截图及说明。

4、实验总结

总结实验过程及取得实验成果等收获,分析不足之处。

相关主题
文本预览
相关文档 最新文档