软件编程实训1指导书.docx

上传人:b****7 文档编号:8980682 上传时间:2023-02-02 格式:DOCX 页数:13 大小:101.87KB
下载 相关 举报
软件编程实训1指导书.docx_第1页
第1页 / 共13页
软件编程实训1指导书.docx_第2页
第2页 / 共13页
软件编程实训1指导书.docx_第3页
第3页 / 共13页
软件编程实训1指导书.docx_第4页
第4页 / 共13页
软件编程实训1指导书.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

软件编程实训1指导书.docx

《软件编程实训1指导书.docx》由会员分享,可在线阅读,更多相关《软件编程实训1指导书.docx(13页珍藏版)》请在冰豆网上搜索。

软件编程实训1指导书.docx

软件编程实训1指导书

 

软件编程实训1

指导书

 

优集学院制造业信息化系

《软件编程实训1》指导书

一、实训目的

1.巩固并加深学生对C++语言程序设计知识的理解;

2.培养学生面向对象的程序设计思想,使学生认识面向过程和面向对象两种设计方法的区别;

3.进一步掌握和应用VC++6.0或VisualStudio2005集成开发环境;提高程序调试的能力,能够快速准确的排查程序错误并纠正,最终调试出可正确运行的程序;

4.提高运用C++语言解决实际问题的能力;

5.初步掌握开发小型实用软件的基本方法,能独立设计、实现基本功能的小系统;

6.掌握应用程序设计开发和文档撰写规范。

二、实训任务

每位学生从所给定的题目里面选择两个感兴趣的题目作为实训任务,另外也可自定题目,需经指导老师同意后方可作为实训任务。

1、万年历程序设计

程序功能及实现技术要求:

1.程序主要实现3个功能:

显示某一年的每个月的日历、显示某一年某一个月的日

历以及查询某一天是星期几。

2.功能选择用菜单实现。

例如:

1显示某一年的日历

2显示某年某一月的日历

3显示某一天是星期几

0退出

用户通过输入不同的数字进入不同的菜单。

3.每一月以日历表格的形式显示,表格的第一行显示星期,表格的内容是每一天。

用户可以很容易看到每一天是星期几。

4.利用输入输出函数和循环控制语句,实现一个简单的人机交互界面。

5.利用逻辑表达式,使用控制语句,判断闰年,某年某月某日是星期几。

6.实现对显示结果进行控制。

2、公司职员的信息管理程序设计

程序功能及实现技术要求:

1.本程序实现的功能是增加职员信息、查找职员信息、浏览所有的职员信息、删除职员信息。

功能结构图如下图所示:

2.功能选择可以用菜单实现。

用户根据自己不同的选择进入不同的菜单。

3.程序可以用指针与数组或者链表实现,信息不要求保存到文件中。

若用数组实现,程序开始时数组内容为空,用户需要先增加职员信息,之后才能实现查找、删除等功能。

4.职员信息的关键字是职员的员工号,加入时职员号重复的记录不能加入。

查找、删除按照职员号进行操作。

5.选做功能:

将职员信息存储到文件中。

3、集合类程序设计

集合的概念在数学中,我们把具有某些共同特征的元素构成的一个整体称为集合。

一个集合就是由同一种有序类型的一组数据元素所组成的,这一种有序类型称为该集合的基类型。

设计一个集合类numSet,存放有序的整型数序,其中的元素按从小到大的顺序排列并且不包含相同的元素。

程序功能及实现技术要求:

1.集合中的元素可用数组存放,也可用链表存放。

2.构造函数要求:

能够通过从键盘上输入数据的形式,给集合中各元素赋值。

3.能够将集合置空、向集合中增加元素(过滤重复数据)并保持有序。

4.能从集合中查找数据元素是否在集合中。

5.能从集合中删除某个指定元素。

6.能显示集合中元素个数、显示集合中的全部元素。

7.能将集合元素逆置。

8.能实现两个集合的+相并。

9.能实现两个集合的×相交。

10.能实现两个集合的-差集。

11.在主函数中实现上述功能(创建对象,将集合置空、输入集合中元素,显示元素及个数,能增、删元素,将集合中元素逆置,实现集合并、交、差),另外创建一个拷贝构造函数,并使用一些数据进行测试。

4、特殊计算器程序设计

程序功能及实现技术要求:

1.程序的功能是实现一个特殊的计算器,可以实现复数、有理数、矩阵和集合的特殊运算。

其中,可以实现复数、有理数的加、减、乘、除,可以实现矩阵的加法、减法和乘法运算,也可以实现两个集合的求交集、并集和判断一个集合是否是另一个集合的子集的运算。

基本功能图如下图所示:

2.功能选择可以用菜单实现。

例如:

1复数计算

2有理数计算

3矩阵计算

4集合计算

0退出

用户通过输入不同的数字进入不同的菜单。

3.运行时给出明确的提示信息,比如,输入一个什么类型的数据。

根据用户的输入计算出结果。

4.使用运算符重载实现各种特殊的计算。

三、系统设计与实现

(一)详细开发步骤及时间分配

以一个课题的设计流程为例:

序号

内容

具体要求

时间分配

1

选题

根据自己的学习能力和参考资料选择适当的课题,并报课代表处统计。

0.5天

2

需求分析

明确系统需求,画出功能结构图,对系统功能进行详细描述。

0.5天

3

概要设计

明确系统运行环境、开发环境;进行整体设计。

0.5天

4

详细设计

类设计、界面设计,分析各部分实现方法。

1天

5

编码

实现各类代码编写。

2天

6

集成调试

系统各模块集成调试

0.5天

(二)程序设计指导

1、万年历程序设计

公元计年从1年1月1日开始,这天是星期一(也可以以其它日期作为比照,如1900年1月1日是星期一)。

平年一年365天,闰年366天,通过除以7取余数可以计算给定的某天推移到了星期几。

计算某年的日历则要首先计算该年的元旦是星期几,计算某月的日历则要首先计算该月1号是星期几,然后进行显示控制,依次输出日历。

运行结果图参考:

2、公司职员的信息管理程序设计

1.定义员工类包含员工姓名、职工号、部门、工资、职位等基本信息,并完成带参的构造函数。

2.定义公司类,包含员工数、指向员工信息地址的指针数组、指向员工类的指针,并完成添加员工、删除员工、显示员工、查找员工等成员函数。

3.动态分配的空间要在析构或者其它合适的地方释放空间。

参考员工类和公司类的定义:

classStaff

{

public:

Staff();

Staff(char*name1,char*no1,char*dep,doublesalary1,char*work1);

charname[16];

charno[6];

chardepartment[16];

doublesalary;

charwork[16];

};

classCompany

{

public:

Company();

~Company();

boolAddStaff(char*name,char*no,char*dep,doublesalary,char*work);

boolDeleteStaff(char*no);

boolFindStaff(char*no);

voidDisplayAll();

private:

intcount;

Staff*address[30];

Staff*Sta;

};

 

运行结果图参考:

3、集合类程序设计

1.集合的概念在数学中,我们把具有某些共同特征的元素构成的一个整体称为集合。

一个集合就是由同一种有序类型的一组数据元素所组成的,这一种有序类型称为该集合的基类型。

2.集合中的元素可用数组存放,也可用链表存放

用数组存放时,集合中数据成员①元素个数②数组(定义时用最大值)

用链表存放时,集合中数据成员①元素个数②*指针(定义时指向结点类型)

3.集合类的定义:

可以使用数组或其它形式存放集合的元素,设定集合元素个数的最大值并有一个存放当前集合元素个数的变量,也可以对集合的元素动态分配空间。

部分数据成员:

intcount;//数序中元素的个数

inta[MAX];//存放数序的数组

部分成员函数:

voidaddnum(intn);//向有序数组中添加元素

voiddelenum(intn);//从有序数组中查找元素并删除

numSet(){count=0;}//构造函数

voiddisp();//输出有序数组

4、特殊计算器程序设计

1.复数的运算法则:

加法:

(a+bi)+(c+di)=(a+c)+(b+d)i

减法:

(a+bi)-(c+di)=(a-c)+(b-d)i

乘法:

(a+bi)*(c+di)=(ac-bd)+(ad+bc)i

除法:

(a+bi)/(c+di)=((a+bi)*(c-di))/(c*c+d*d)=((ac+bd)+(bc-ad)i)/(c*c+d*d)

2.矩阵:

矩阵类的定义:

所要做矩阵的加、减、乘运算对矩阵行数与列数的要求不同,矩阵的行数与列数应该是动态确定的,这时就需要在构造函数里根据给定的行数和列数参数用new动态分配空间,析构函数里用delete删除分配的空间,并要重新定义拷贝构造函数和对赋值运算符=进行重载,以避免分配的资源不能拷贝造成程序错误。

对如何给矩阵元素动态分配空间有两种方法,采用第一种方法在动态分配空间相对第一种略显复杂,但在进行矩阵类运算的重载时不需要转换行与列到一维数组,采用第二种方法动态分配空间简单些,但进行运算符重载时要进行行数与列数的对应转换,亦可采用其它方法。

第一种:

double**data;//定义二维矩阵数据数组指针

introws,cols;//矩阵的行数,列数

//下面是如何在构造函数中分配空间

data=newdouble*[rows]

for(i=0;i

data[i]=newdouble[cols];

for(i=0;i

for(j=0;j

data[i][j]=0;//每个元素都初始化为零,也可保持随机值。

//在析构函数中删除动态分配的空间时:

~Matrix()//析构函数

{

inti;

for(i=0;i

delete[]data[i];

cout<<"析构函数被调用!

"<

}*/

第二种:

对二维数组中的数据可以通过下标的转换变成对一维数组的处理,如二维数组a[rows][cols]和一维数组b[rows*cols]可以通过如下进行对应:

a[i][j]对应b[(i-1)*cols+(j-1)]

矩阵的运算法则:

矩阵相加减就是两个行数和列数相同的二维数组相加减;两个矩阵相乘,其实就是两个二维数组,其中一个的行数等于另一个的列数,按矩阵相乘的法则进行运算。

3.有理数:

有理数的概念:

任何一个有理数都可以写成分数m/n(m,n都是整数,且n≠0)的形式。

在构造有理数对象时,若分子分母是可以约分的,应该进行约分的简化运算,同为负数的应该将结果转为正数,同时要注意处理分子为零的情况。

有理数运算法则:

加法:

a/b+c/d=(a*d+b*c)/(b*d)

减法:

a/b-c/d=(a*d-b*c)/(b*d)

乘法:

(a/b)*(c/d)=(a*c)/(b*d)

除法:

(a/b)/(c/d)=(a*d)/(b*c)

4.集合:

集合的概念:

在数学中,我们把具有某些共同特征的元素构成的一个整体称为集合。

一个集合就是由同一种类型的一组数据元素所组成的,这一种类型称为该集合的基类型(注意:

集合中不能有重复数据)。

集合类的定义:

可以使用数组或其它形式存放集合的元素,设定集合元素个数的最大值并有一个存放当前集合元素个数的变量,也可以对集合的元素动态分配空间。

集合运算:

交集:

求出两个集合中的公共元素,用运算符*实现

并集:

两个集合合并,去掉重复的元素,用运算符+实现

子集:

判断一个集合是否是另一个集合的子集,用运算符<=实现

运行结果图参考:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1