Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2349224
  • 博文数量: 816
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 5010
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-17 17:57
文章分类

全部博文(816)

文章存档

2011年(1)

2008年(815)

分类:

2008-12-17 18:00:17

(1) 要求用C++语言编程,在Visual C++环境下调试完成;
(2) 要求划分功能模块,各个功能分别使用函数来完成;
(3) 源代码程序要求必要的注释。
三、设计方法和基本原理
1. 课题功能描述
设计一个能够在控制台窗口中输出彩带的程序,要求实现的功能包括:根据用户的输入选择来输出两种横向和竖向两种彩带形式(参见下图)。


2. 问题详细描述
设计一个在控制台输出彩带的程序,要求首先提示用户选择彩带的类型(横向、竖向或退出),然后根据用户的输入,输出相应的彩带。然后再次要求用户选择彩带类型或退出程序。
要求编写多个函数分别实现上述功能,而后在main函数中进行调用。
3. 问题的解决方案:
根据问题的描述,可以按照程序要求的功能采用结构化的设计思想。
首先输出彩带的过程是个循环过程,当用户的输入满足循环的退出条件时结束程序的运行(在示例程序中,循环的退出条件是用户输入了0和1之外的数值)。
在用户输入了相应的选择后,在屏幕上输出彩带。
四、主要技术问题的描述
根据三的分析,主要问题在于:
1. 控制台的基本概念
控制台(Console)是一个基于字符界面的交互平台。Windows 2000里面自带的控制台同样也是一个基于字符界面的交互平台。我们本学期实验所编写的程序都是基于控制台的C++程序。
在默认设置下,Windows 2000的控制台能够显示25行80列的字符,我们可以把控制台看作是一个有25行80列的一个矩阵,每个矩阵的元素能够显示一个标准的ASCII字符(汉字需要两个元素来显示)。
2. 控制台的颜色控制
控制台中的每个元素可以使用独立的前景色和背景色。在Windows 2000的控制台中可以使用的颜色有16种,见下图:

上图中的颜色编码自左至右依次是0至15,0为黑色,15为白色。前景色和背景色都只有这16种颜色。
3. 控制台颜色的控制时机
因为控制台不能更改已经输出字符的颜色设置,所以要想更改输出的字符的颜色设置,必须在输出之前更改控制台的颜色配置。
要改变控制台的颜色设置需要调用两个Windows操作系统的API函数。GetStdHandle函数用来获得当前控制台的句柄,用SetConsoleTextAttribute函数来改变选中控制台的颜色控制。这两个函数的声明存在于文件中。可以将这两个调用封装到SetColor函数中:

例如:如果需要改变当前的控制台输出颜色为白底红字,则可以书写如下代码:

这段代码就可以输出白底红字的“Hello World”字符串了。
4. cout的缓冲区刷新
cout对象默认情况下并不会将用户的输出送到控制台,而是暂时存在输出缓冲区里面,而控制台的颜色控制只在向控制台输出的时候才生效。所以只有强制刷新输出缓冲区的时候颜色设置才会生效。例如我们要输出两个字符A,第一个是白底红字,第二个是红底白字,那么下面的代码:

输出的将是两个红底白字的字符“A”。因为虽然输出第一个“A”之前把控制台设置为白底红字,但是此时并没有把第一个“A”输出到控制台,而只是存放于输出缓冲区里面。然后控制台的颜色被设置为红底白字,然后输出“A”。最终程序结束的时候自动强制刷新控制台,把输出缓冲区里面的两个字符“A”都发送给控制台,因为此时的控制台颜色是红底白字,所以两个“A”都被显示为红底白字。
为了强制刷新控制台,可以使用endl和flush两个操作符,endl表示先换行然后强制刷新,flush表示直接强制刷新而不换行,所以上面的代码只要在每个cout语句的最后加上“<< flush”就可以把输出两个不同颜色配置的字符“A”了(参看下面的代码)。



--------------------next---------------------

阅读(1832) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~