VC++程序设计课程实践基础题

更新时间:2024-06-15 02:28:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

VC++程序设计 课程实践指导

第1章 课程实践概述

1.1 VC++课程实践的性质与目的

“VC++课程实践”是在学习了“VC++程序设计”课程后进行的实践教学环节,该环节为学生提供一个既动手又动脑,独立实践的机会,使学生将课本上的理论知识和实践有机的结合起来,有利于巩固、提高和融合所学的课程知识,提高学生运用所学知识解决实际问题的能力。主要目的如下:

1.进一步培养学生程序设计的思想,加深对VC++语言要素和控制结构的理解。

2.针对VC++中的重点和难点内容进行训练,强调好的程序设计风格。 3.进一步熟悉VC++的编程技巧和上机调试程序的方法。 4.掌握程序设计的常用算法。

1.2 VC++课程实践的要求

学生必须仔细阅读本程序设计实践指导书,认真主动完成程序设计实践的要求。要发挥自主学习的能力,充分利用时间,制订好程序设计实践的时间计划,并在程序设计实践过程中不断检测自己的计划完成情况。根据系统的功能要求,学生必须在教师的指导下认真完成应用程序的设计。具体要求如下:

1.系统功能模块分析、控制模块分析正确; 2.系统设计要实用; 3.编程简练、功能全面; 4.说明书、流程图要清楚。

1.3 VC++课程实践的选题原则

题目可从第4章中选择,创新性题目可只选择1题,仅选提高题应不少于3题,仅选基础题应不少于6题,也可组合选题,还可自行选择感兴趣的题目(须经指导老师审定)。对于提高题、创新题及游戏题可组成团队开发,但应制定详细的项目分工说明。

1.4 VC++课程实践的基本步骤

课程实践是一个从分析到设计,再到总结的过程,具体工作可按如下步骤依次进行:

1.确定问题要求,充分分析和理解问题本身,给出解决方案框架。

2.在确定解决方案框架过程中,考虑怎样使程序结构清晰、合理、简单和易于调试,并确定每个函数的简单功能,以及函数之间的调用关系。

3.详细设计和编码。确定算法的主要流程,在此基础上进行代码设计。

1

4.上机前编写程序与检查。可用2种方法检查程序,来有效提高调试效率,减少上机调试程序时的无谓错误。方法一,用一组测试数据手工执行程序;方法二,通过阅读或给别人讲解自己的程序而深入全面地理解程序逻辑,将程序中的明显错误事先排除。

5.上机调试程序。 6.完成课程实践报告。

1.5 时间及地点安排

本课程实践按照教学要求在1周(按5天计算)内完成,每天至少上机3-4小时进行程序调试,总上机调试时间不少于15个小时。题目布置后,所有同学应提前开始查找资料,作好准备。具体时间安排如下:

1.分析设计准备阶段(前一周周六、周日); 2.编程调试阶段(周一~周四);

3.总结及书写课程实践报告阶段(周五); 4.检查验收阶段(时间由指导老师确定)。 验收地点:机房。

1.6 组织管理

良好的组织是课程实践质量的重要保证,在课程实践期间的主要组织工作安排如下:

1.每人独立完成所选任务,创新性题目可2~3人组成小组,自由组合,小组应指定一名组长。

2.由班长负责考勤。

3.指导教师负责指导学生。

1.7 考核评价

根据学生完成情况,结合所选题目的难度及分析解决问题的能力和创新精神,确定成绩等级。

考核标准包括:

1.所设计程序的正确性、通用性,全面完成题目的要求(60%); 2.课程实践报告(20%):包括系统设计要求,设计思路,系统功能模块图,系统流程图,类的层次图(包括类成员列表),调试过程,关键程序代码,程序设计实践总结,参考书目等。最后附源程序代码。不符合以上要求者,则本次实践以不及格记;

3.平时考勤(20%)。 提交材料包括:

1.源程序。按照程序设计课程实践的具体要求所开发的所有源程序; 2.程序的说明文件(保存在.txt中)。在说明文档中应该写明上交程序所在的目

2

录,上交程序的主程序文件名,如果需要安装,要有程序的安装使用说明;

3.课程实践报告。保存在word 文档中,文件名要求按照“姓名-学号-实践报告”起名,如文件名为“张三-0840308112-实践报告.doc” 。 注:(1)程序及报告提交电子稿,发送至指导老师的邮箱(由教师提供)中; (2)报告除需提交电子稿外,必须每人另提交一份打印件。

3

第4章 课程实践示例

4.1基础题示例

1.任务

建立一个类Integer_String,把一个正整数转换为字符串。具体要求如下: (1)私有数据成员

? int num:要转换的正整数。

? char *s:用动态空间存储转换得到的字符串。 (2)公有成员函数

? Integer_String(int n):用参数n初始化数据成员num。 ? int f():求数据成员num的位数。

? void fun():把正整数num转换为字符串s。 ? void show():输出数据成员num和s; ? ~Integer_String():释放动态空间。 (3)在主函数中对定义的类进行测试。用正整数12345初始化类Integer_String

的对象test,调用相关成员函数后输出转换结果。

2.系统设计

(1)任务分析

通过类Integer_String的成员函数f()求出数据成员num的位数,并以此为依据给数据成员s分配大小适当的动态空间,在成员函数fun()中依次取出num的各位数字并转换成对应字符后存入数据成员s,程序结束前释放为s分配的动态空间。类的定义如下:

class Integer_String{ int num; char *s; public:

Integer_String(int); int f(); void fun(); void show();

~Integer_String(); };

(2)算法设计

? 求整数num(设num为正整数)的位数

定义变量d(初值为1)表示num(n)的位数,以n>10作为循环条件,每循环一次d的值增加一位,n去掉一位(n/=10),循环结束后d的值就是n的位数。

4

(1)私有数据成员

? int *p[5]:存放二维数组每行的字符串的地址。 (2)公有成员函数

? SUM(int d[5][5]):构造函数,初始化成员数据。

? void process1():对二维数组中存放的字符串进行排序。 ? void print():输出二维数组中排好序的字符串。 (3)在主程序中对该类进行测试。

33.建立一个类Integer_String,把一个正整数转换为字符串。

具体要求如下: (1)私有数据成员

? int num:要转换的正整数。

? char *s:用动态空间存储转换得到的字符串。 (2)公有成员函数

? Integer_String(int n):用参数n初始化数据成员num。 ? int f():求数据成员num的位数。

? void fun():把正整数num转换为字符串s。

? void show():输出数据成员num和s; ? ~Integer_String():释放动态空间。

(3)在主函数中对定义的类进行测试。用正整数12345初始化类Integer_String

的对象test,调用相关成员函数后输出转换结果。

34.建立一个类String_Integer,把一个字符串中的数字字符转换为正整数。

具体要求如下: (1)私有数据成员

? char *s:用动态空间存放字符串。

(2)公有成员函数

? String_Integer(char *str):用参数str初始化数据成员s。

? operator int():转换函数,数据成员s转换整数并返回该数。 ? void show():输出数据成员s。 ? ~String_Integer():释放动态空间。

(3)在主函数中对定义的类进行测试。定义字符数组,把由键盘输入的字符串

“ab12 3c00d45ef”存入数组,并用该数组初始化类String_Integer的对象test,调用show函数输出test的数据成员s,然后把对象test赋值给整型变量n并输出,转换结果如下所示(下划线部分是从键盘输入的内容): 请输入字符串ab12 3c00d45ef :ab12 3c00d45ef 字符串为:ab12 3c00d45ef 转换得到的整数为:1230045

35.建立一个类Union求两个整数集合的并集。

具体要求如下: (1)私有数据成员

? int *set1,len1:用动态空间set1存储集合1,len1表示其元素的个

20

数。

? int *set2,len2:用动态空间set2存储集合2,len2表示其元素的个

数。

? int set[20],len:用数组空间set存储并集,len表示其元素的个数

(2)公有成员函数

? Union(int *s1,int l1,int *s2,int l2):用变量s1和l1初始化集合1及

其长度,用变量s2和l2初始化集合2及其长度,并把并集的长度置为0;

? int f(int num):判断整数num是否属于集合1,是返回1,否则返

回0;

? void fun():求集合1和集合2的并集,方法是先把集合1中的所

有元素复制给并集,然后调用f函数把集合2中不属于集合1的元素复制给并集;

? void show():输出集合1、集合2和并集; ? ~Union():释放动态空间。

(3) 在主函数中对定义的类进行测试。定义数组s1:{1,2,3,4,5,6,7,8}、s2:

{1,3,5,7,9,11},并用它们初始化类Union的对象obj,然后调用相关的成员函数,求并集,输出集合1、集合2和并集。

36.建立一个类Intersection求两个整数集合的交集。

具体要求如下: (1)私有数据成员

? int set[20]:用数组空间set存储集合。 ? int len:表示该集合中元素的个数

(2)公有成员函数

? Intersection(int *s,int l):用s初始化集合,用变量l初始化其长度。 ? Intersection( ):把set中各元素和长度初始化为0。

? int f(int num):判断整数num是否属于集合,是返回1,否则返回

0;

? Intersection operator&&(Intersection t):重载&&,求当前对象的集

合和参数对象t的集合的交集,方法是用对象t的集合中的每个元素作为参数调用f函数,若该元素属于当前对象的集合,则把它复制给交集。

? void show():输出集合。

(3)在主函数中对定义的类进行测试。定义数组s1:{1,3,4,5,7,8}、s2:

{1,2,3,5,7,9,11},并用它们初始化类Intersection的对象obj1和obj2,然后调用相关的成员函数输出集合;定义对象obj3,并用obj1和obj2的与运算符结果(交集)初始化该对象,并输出交集。

37.建立一个类NUM,为特定序列进行排序,并多次重复以统计每个数字出现的概率。

具体要求如下:

21

(1)私有数据成员

? int data[25]:随机生成25个10000以内的整数,不能出现重复的

数字。

(2)公有数据成员

? NUM():构造函数,初始化数组data。

? void process( ):为数组data进行排序,要求升序排列,使用排序算

法不限。

? void times( ):充分多(自行输入,大于100)次调用构造函数,统

计每个数字出现的概率,每行输出一个数字的出现概率与它出现的数学期望,并验证大数定理。

? void print( ):输出数组data,每行输出5个数字。

(3)在主程序中定义一个对象,对该类进行测试。 提示: ① 可能需要的库函数及其用法:

n*rand()/(RAND_MAX+1.0) 生成一个0-n之间的伪随机数,需要头文件stdlib.h支持。

srand((int)time(0)); 不断重置某些函数(例如rand()),需要头文件time.h支持)。

② 大数定理的验证:只要所有数字的出现概率除以数学期望的商在0.95-1.05之间,便可以认为在5%误差范围内验证了大数定理的正确性。

38.建立一个类Sample,对数组中元素用选择法进行升序排序。排序函数定义到

Sample类的友元类Process中。 具体要求如下: 类Sample #define Max 100;

(1)私有数据成员

? int A [MAX]:一维整型数组,存放需要排序的数。 ? int n:需要排序的数的个数。 (2)公有成员函数

? Sample ():构造函数,初始化成员数据n,初始值为0。

友元类Process 公有成员函数

? void getdata(Sample &s):从键盘输入数据,对数组A进行赋值。 ? void selectsort(Sample &s):对数组A中的元素进行升序排序。 ? void disp(Sample &s):输出数组中的元素。

(3)在主程序中定义对象对该类进行测试。

22

5.2提高题

1.为某高校的学籍和成绩管理设计一系统。要求建立的数据有: (1)学生类,包含班级号、学号、姓名、专业等成员;

(2)学生成绩类,包含班级号、学号,课程名,成绩等成员。

完成下列功能:首先输入学生数据及成绩数据,再根据提示分别实现查找功能。其中:

? 函数Xslr负责学生数据录入; ? 函数Cjlr负责成绩数据录入;

? 函数Look1负责根据姓名查找学生的基本信息和成绩信息; ? 函数Look2负责根据班级列出学生的基本信息;

? 函数Dayin1负责依据班级输出满足条件的学生的基本情况; ? 函数Dayin2负责输出某一同学的成绩单。

创新要求:自设计界面,要求美观、方便,还可自增加功能,如依据不同的条件排序后输出等。

程序执行情况如下所示:

*****************请输入学生数据(班级号为-1结束)****************** 请输入班级号: 1 请输入学号: 1 请输入姓名: 王平 请输入专业: 计算机科学 请输入班级号: 2 请输入学号: 1 请输入姓名: 李丽 请输入专业: 通信工程 请输入班级号: 1 请输入学号: 2 请输入姓名: 刘红 请输入专业: 计算机科学 请输入班级号: -1

2.设计一个电子通信录。其中包括如下类:

(1)通信地址类addr。包含公有数据:

? 成员char post[10]; //邮编 ? 成员char ad[40]; //家庭地址

? 构造函数addr(char p[10]=\;

? 成员函数void setadd(addr a); //用a为当前对象赋值 (2)出生年月类birth。包含公有数据:

? 成员int year; //年份 ? 成员int month; //月份

23

? 成员int day; //日期

? 构造函数birth(int y=0,int m=0,int d=0);

? 成员函数void setbir(birth b); //用b为当前对象赋值 (3)类friends。包含数据:

? 私有成员int number; //序号 ? 私有成员char name[20]; //姓名 ? 私有成员char sex; //性别

? 私有成员char telephone[13]; //联系电话 ? 公有成员birth bir; //出生年月 ? 公有成员addr add; //通信地址

? 公有构造函数friends(int nu=0,char n[20]=\\s=' ',int y=0,int

m=0,int d=0,char p[10]=\;

? 公有成员函数void setfri(int nu,char n[20],char s,birth b,addr a,char

t[13]); //为当前对象赋值

? 公有成员函数friends input(friends &bb); //为对象bb输出数据 ? 公有成员函数int search(friends aa[100],char n[20]); //在aa中查找姓

名为n的对象

? 公有成员函数void show(friends aa); //输出对象aa

? 公有成员函数void delet(friends aa[100],int k); //在aa中删除下标为

k的元素

(4)在主函数中完成主菜单的设计,并根据输入值完成所需操作。

创新要求:自设计界面,要求美观、方便,还可自增加功能,如依据不同的条件排序后输出等。

程序执行后主菜单如下: 1.输入数据 2.输出数据 3.查找数据 4.删除数据 5.退出

请选择(1~5):

3.设计一个停车场管理系统。具体要求如下:

(1)停车场有若干停车位(为说明问题,假定为3个),每个位置可以存放不

同种类的的汽车,包括卡车Truck,客车Carriage和小轿车Car,但同一时刻一个位置只能存放0或1辆汽车。

(2)管理系统模拟实际车辆停车的情况:新来车辆时如果有空位,按顺序为该

车分配停车位;车辆开走时,交纳相应停车费;统计各类车辆的数量。 (3)定义描述停车场的类Park,其中有3个位置用于存放各类车辆。 (4)定义基类Automobile,至少包括纯虚函数Pay用于显示车辆信息并交纳相

应停车费。

24

为球体,以及此球体的半径、体积、表面积。

(4)图形类(Sharp)有两个函数,一个为输出的fun(),另一个为图形变化函

数Change()。一旦图形变化函数Change()的返回值为0,则变成球体;一旦为1,则变成圆柱体;一旦为2,则变成长方体。 (5)每个类中数据成员按需求定义为私有(Private)或者的受保护(protected)。 (6)编写一个函数Shape_Change(),生成若干个球体、圆柱体或者长方体,随

机生成该图形所需要的参数(都为1-10之间的整数),并输出其对应类中函数fun()应当输出的内容。直到连续生成3个同种图形为止。

(7)编写main函数,调用函数Shape_Change(),以实现整个程序。 说明:

(1)本程序中的圆周率π需要被宏定义,且至少精确到小数点后5位。 (2)本程序中可能需要的几个公式: V(球体)=4*π/3*r*r*r S(球体)=4*π*r*r

V(圆柱体)=π*r*r*h S(圆柱体)=2*π*r*(r+h)

V(长方体)=a*b*c S(长方体)=2*(a*b+b*c+c*a)

执行结果如下:

该图形为长方体。它的长为:7 它的宽度为:1 它的高为:8 它的体积为:56 它的表面积为:142

该图形为长方体。它的长为:1 它的宽度为:6 它的高为:7 该图形为圆柱体。它的半径为:10 它的高为:4 它的体积为:1256.64 它的表面积为:879.645 该图形为球体,它的半径为:4

它的体积为:268.082 它的表面积为:201.062

10.设计一个程序通过虚函数求长方形的面积和长方体的表面积,具体要求如下:

(1)定义长方形类Rectangle ? 保护的数据成员

int l,w; //表示长方形的长和宽 int s; //表示长方形的面积 ? 公有的构造函数

Rectangle(int x,int y):初始化长方形的长和宽; ? 公有的虚函数

virtual void fun():求长方形的面积;

virtual void show():输出长方形的长、宽和面积。

(2)定义长方形类A的公有派生类Cuboid,表示长方体类 ? 私有的数据成员

int h; //表示长方体的高 ? 公有的构造函数:

Cuboid(int x,int y,int z):初始化长方体的长、宽和高。 ? 公有函数

30

void fun():求长方体的表面积;

void show():输出长方体的长、宽、高和表面积。

(3)在主函数中对定义的类进行测试,要求定义长方形对象a1(长为2,宽为

3),长方体对象b1(长、宽、高分别为2,3,4),通过基类的指针p分别求长方形的面积和长方体的表面积,输出数据成员,并体现运行的多态性。 程序运行结果如下:

长方形的长为2,宽为3,面积为6

长方体的长为2,宽为3,高为4,表面积为52

11.设计一个程序,查询2000年1月1日(星期六)后的某天是星期几,具体要求

如下:

(1)定义函数int leap(int year):判断某年year是否为润年。能够被400整除,

或者能够被4整除但不能衩100整除的年份是润年。

(2)定义函数int f(int y,int m,int d,int *m1,int *m2):判断输入的日期是否合

法,其中y、m、d分别表示年、月、日,m1表示非润年每月的天数,m2表示润年每月的天数。 (3)定义类date,表示日期 ? 私有数据成员

int year,month,day; //分别表示某年某月某日 ? 公有成员函数:

date(int y,int m,int d):构造函数,用形参分别初始化数据成员; int get_year():访问私有成员year; int get_month():访问私有成员month; int get_day():访问私有成员day;

void show():以指定格式输出数据成员。

(4)定义类week,判断某天是星期几 ? 私有数据成员

date d1; //日期类的对象,表示某日

int m1[12];//存储非润年每月的天数31,28,31,30,31,30,31,31,30,31,30,31 int m2[12];//存储润年每月的天数31,29,31,30,31,30,31,31,30,31,30,31 int w;//表示用0表示星期天,1表示星期一,以此类推6表示星期六 ? 公有成员函数

week(int y,int m,int d,int *p1,int *p2):构造函数,用y,m,d初始化日期,用p1,p2分别初始化m1,m2;

int days():计算d1距2000年1月1日的时间间隔(天数);

void fun():根据days()的计算结果判断d1是星期几(求以0~6表示w的值);

void print():输出判断结果。

(5)在主函数中对定义的类进行测试。从键盘输入一个日期,并检查输入数据

的合法性,然后用输入的数据和表示每月天数的数组初始化week类的对象

31

w,调用相关成员函数,输出判断结果。 程序运行结果如下:

请输入要查询的日期(年月日):2009 9 15 2009/9/15,是星期二。

12.设计一个程序通过虚函数实现不同进制整数之间的转换。

? 十进制整数转换成R进制整数的方法是除R取余。如:

(12345)10=(30071)8 12345÷8=1543...1 1543÷8=192... ...7 192÷8=24... ... ...0 24÷8=3... ... ... ...0 3÷8=0. ... ... ... ...3

? R进制整数转换成十进制整数的方法是按位权求和。如: (12345)8=(1×84+2×83+3×82+4×81+5×80)10

? R进制整数之间的相互转换可通过二进制数为媒介。

八进制整数转换为二进制数的方法是1位变3位,十六进制整数转换为二进制数的方法是1位变4位。如:

(12345)8=(001010011100101)2 (1)8=(001)2 (2)8=(010)2 (3)8=(011)2 (4)8=(100)2 (5)8=(101)2

二进制数转换为八进制整数的方法是3位变1位(不足以0补齐),转换为十六进制整数的方法是4位变1位(不足以0补齐)。如:

(001010011100101)2=(0001010011100101)2=(14E5)16 (0001)2=(1)16 (0100)2=(4)16 (1110)2=(E)16 (0101)2=(5)16

程序的具体要求如下:

(1)定义十进制整数转换成的R进制数的类DEC_R

? 保护的数据成员:

int num; //表示十进制整数

int m; //表示要转换的数的进制

char r[20]; //保存转换结果(m进制数) ? 公有的成员函数:

DEC_R(int m1,int n=0):用m1初始化进制m,用n初始化十进制整数num;

32

virtual void fun():把十进制整数转换成m进制数(求数组r); virtual void show():输出十进制整数和转换成的m进制数。

(2)定义类DEC_R的公有派生类R_DEC,把R进制整数转换成十进制数,

派生数据成员的含义不变 ? 公有的成员函数:

R_DEC(char *p,int m1):用p初始化m进制数,用m1初始化进制m,十进制数num初始化为0;

int f(int n,int k):求位权(n的k次方);

void fun():把m进制数(数组r)转换成十进制数(求num); void show():输出m进制数和转换成的十进制整数。

(3)定义类DEC_R的公有派生类R_R,实现R1进制整数和R2进制数之间

的互换,派生成员num表示已知数的进制R1,m表示未知数的进制R2,r表示媒介二进制数

? 新增私有的数据成员:

char r1[10]; //存放已知的R1进制整数

char r2[10]; //存放未知的R2进制整数(要求的数) ? 公有函数:

R_R(int m2,int m1,char *p):用m2初始化进制m,用m1初始化进制num,用p初始化r1;

int f1(int k):求基数2的位权(2的k次方);

char *f2(char s,int j):把1位R进制数(字符s)转换为j位二进制数(动态字符数组),并返回该二进制数;

void f3(char *bin,char *R2,int k):把二进制数(字符数组bin)转换为R2进制数(字符数组R2),k位转1位;

void fun():把num进制数(数组r1)转换成m进制数(求数组r2); void show():输出num进制整数和转换成的m进制数。

(4)在主函数中对定义的类进行测试。定义类DEC_R的对象d1、d2和d3,

分别把十进制数23456转换成二进制、八进制和十六进制数;定义类R_DEC的对象r1、r2和r3,分别把二进制数101101110100000、八进制数55640和十六进制数5BA0转换成十进制数;定义类R_R的对象rr1,把八进制数12345转换为十六进制数,类R_R的对象rr2,把十六进制数14E5转换为八进制数。用类DEC_R的指针p实现上述操作,体现运行的多态性。 程序运行结果如下所示:

十进制数为23456,其对应的2进制数为101101110100000 十进制数为23456,其对应的8进制数为55640 十进制数为23456,其对应的16进制数为5BA0

2进制数为101101110100000,其对应的十进制数为23456 8进制数为55640,其对应的十进制数为23456 16进制数为5BA0,其对应的十进制数为23456 8进制数为12345,其对应的16进制数为14E5

33

16进制数为14E5,其对应的8进制数为12345

13.定义如下类:

(1)类Fruit,含有一个公有虚函数 char *identify(),返回字符串“水果”; (2)类Tree,含有一个公有虚函数 char *identify(),返回字符串“树”;

(3)类Apple,由类Fruit及类Tree公有继承,含有一个公有成员函数char

*identify(),返回字符串“苹果树是水果树”;一个公有虚函数void show(),调用成员函数char *identify();

(4)定义类Pear,由类Fruit及类Tree公有继承,含有一个公有成员函数char

*identify(),返回字符串“梨树是水果树”;一个公有虚函数void show(),调用成员函数char *identify();

(5)定义类Apple_Pear,由类Apple及类Pear公有继承,含有一个公有成员

函数void show(),分别调用类Apple和类Pear的成员函数char *identify(); 定义一个函数void display(Apple *p),用指针p调用函数show(); 在主函数中,定义类Apple_Pear的对象applePear,用对象调用成员函数show(),并作为函数display的参数调用该函数。 程序执行结果如下所示:

Apple_Pear:苹果树是水果树,梨树是水果树 Apple_Pear:苹果树是水果树,梨树是水果树

14.编写电话薄管理程序。该程序是一个电话薄管理小程序,具有加入、删除、显

示和查询联系人电话号码等功能。具体要求如下:

(1) 电话薄记录按姓名排序存放,显示时每屏不超过20个记录,超过时分

屏显示;

(2) 增加记录修改功能,能选择个性用户的姓名、电话,在个性或删除之前

需要用户进一步确认,确认无误后再进行操作;

(3) 增加录入时间的显示及存储;

(4) 增加默认的查询方式,即查询时只输入姓名的首字母,所有符合这一条

件的电话资料均在屏幕上显示。

程序执行结果如下所示: 欢迎进入电话薄数据系统 1.添加电话薄记录 2.显示电话薄内容

3.根据姓名查找电话薄数据 4.根据姓名删除电话薄数据 0.退出系统

请输入你的选择:

15.设计一个程序可查询出版物销售的情况。具体要求如下:

(1)定义类publication,表示出版物

34

? 私有数据成员

char title[50]; //表示出版物名称 float price; //表示出版物价格

? 公有成员函数

void getData();:用来输入出版物名称及价格 void putData():用来显示数据

(2)定义类sales,表示销售情况 ? 私有数据成员

float salesArray[20]; //表示若干个月的销售 ? 公有成员函数

void getData(int n);:用来输入过去n个月的销售情况

void putData(int n):用来显示数据,包括销售总数

(3)定义类book,由类publication公有派生,表示图书 ? 私有数据成员

int pages; //表示页数 ? 公有成员函数

void getData();:用来输入页数 void putData():用来显示数据

(4)定义类cd,由类publication公有派生,表示音像制品 ? 私有数据成员

float time; //表示播放时间 ? 公有成员函数

void getData();:用来输入播放时间 void putData():用来显示数据 (5)在主函数中对定义的类进行测试。 程序执行结果如下所示:

请输入出版物的标题:计算机基础 请输入出版物的价格:20 请输入页数:150 请输入过去6个月的销售 第1个月:100 第2个月:200 第3个月:120 第4个月:320 第5个月:431 第6个月:224 标题:计算机基础 价格:20 页数为:150 第1个月销售:100

35

第2个月销售:200 第3个月销售:120 第4个月销售:320 第5个月销售:431 第6个月销售:224 共销售:1395

5.3拓展题

1.用类模板来完成下列工作:

(1)定义一个数组类模板,能对数组进行排序及求最大元素值,并重载“[ ]”运算符。(要求同时处理“整型数组、实型数组、字符数组”);

(2)定义一个栈类模板,实现其入栈和出栈操作。 2.对磁盘文件作如下操作:

(1)在磁盘上建立一个文本文件,该文件中存放若干个实数;

(2)在磁盘上已有文本文件中,读出若干个实数,并求出其中的最大数、最小数和平均值;

(3)向文件追加记录、浏览文本文件、将一个文件复制到另一个文件中(定义类来完成)。 3.编写一个程序,从对话框输入两点,在客户区画出由这两个点构成的线段。 4.设计一个简单的画图工具,如下图。

基本要求:要求所编写的画图工具能够完成圆、矩形、三角形的基本图形的绘制。

创新要求:在基本要求达到后,可进行创新设计,如增加椭圆、多边形等图形的绘制功能。

5.设计一个可视化闹钟。如下图所示:

36

基本要求:可查看时间。 创新要求:界面尽可能美观。

6.编程实现在客户区画矩形或椭圆,按C键显示椭圆,按R键显示矩形;当按“←”、“↑”、“→”、“↓”键时,屏幕上的图形相应移动,并可鼠标拖动图形。

创新要求:在此基础上增加定时器的功能。当按B键时,启动定时器,屏幕上的图形自动移动;当按S键时,撤销定时器,停止自动移动。 程序运行结果如下所示:

7.设计一个计算平均成绩的程序。要求带有一个“计算”菜单,选择菜单中“平均值”时,弹出计算对话框,在对话框中输入数学、英语、物理、计算机四门成绩后,选择“计算”按钮,计算出平均成绩。

创新要求:增加先计算总成绩,再计算平均成绩。 程序运行结果如下所示:

37

8.设计一个求三解形边长及面积的计算器。要求若输入的三条边不能构成三角形显示出错。

程序执行结果如下所示:

9.设计一个数制转换的计算器,含退格按钮及清除按钮,可进行十进制数转换为二进制数以及十进制数转换成十六进制数运算,用菜单来进行选择。 创新要求:增加十进制数与二进制数及十六进制数的相互转换。

程序执行结果如下所示:

38

10.上题是用表单实现数制转换,本题用对话框实现数制转换,并为对话框设计一个菜单,供选择。

程序执行结果如下所示:

11.设计一个能实现四则运算、开平方和求倒数运算的计算器。

程序执行结果如下所示:

12.设计一个能实现四则运算、三角运算、指数运算及对数运算的计算器。

程序执行结果如下所示:

39

40

本文来源:https://www.bwwdw.com/article/qcc3.html

Top