上机实验报告
课程名称: VC++程序设计
实验名称: VC++程序设计实验
学生姓名: Masoon
班级学号:
指导教师:
实验日期: 2015-06-17
实验1-1 C++编程环境
一.题目
输入课件第二章中的任何一个例子中的源代码,调试并运行。
二.代码
#include
void main(void)
{
int n,right_digit;
cout<<"Enter the number:";
cin>>n;
cout<<"The number in reverse order is ";
do
{
right_digit=n%10;
cout<
n=n/10;
}while(n!=0);
cout<<" ";
cout<<"endl";
}
三.运行结果
实验1-2 C++基本语句练习
一.题目
定义一个有10个元素的整形数组并赋初值,同时定义一个指针变量指向该数组,通过对指针变量的循环,将10个数组元素的值累加,最后屏幕输出该数组每个元素的值以及各个元素的累加值。
二.代码
#include
void main()
{
int a[10]={1,2,4,5,6,7,3,6,9,123};
int *a_pointer;
a_pointer=a;
int sum=0;
for(int i=0;i<10;i++)
{
sum=sum+(*a_pointer);
a_pointer++;
}
cout<<"the sum is "<
for(int j=0;j<10;j++)
{
}
cout<
}
三.运行结果
实验2-1 类和对象的基本编程
本实验用到的概念有:类、对象以及成员函数。
一.题目
用面向对象的思想编写程序,实现两个任意数的相加,并将结果输出到屏幕上。
二.代码
#include
class add{
private:
int a,b;
public:
add(int a,int b){
this->a=a;
this->b=b;
}
int getResult(){
return a+b;
}
};
void main(void)
{
int a,b;
cout<<"please enter two number: "<
cin>>a;
cin>>b;
add test(a,b);
cout<<"The result is "<
}
三.运行结果
实验2-2 类和对象的编程
本实验用到的概念有:类、对象、成员函数、构造函数。
一.题目
编写一个时钟程序,模拟数字时钟的显示。
提示:定义一个时钟类Clock,设计成员函数,实现数字时钟的显示(参考课件第三章中的时钟类)。在main()函数中定义对象,并进行时分秒的循环,秒和分从0-59循环,时从0-23循环,注意要加延时循环,以模拟实际的数字时钟的显示。
二.代码
#include
#include
class clock{
private:
int hour,minute,second;
public :
clock(int h,int m,int s);
void showTime(){
for(int j=hour;j<24;j++){
for(int k=minute;k<60;k++){
for(int l=second;l<60;l++){
Sleep(1000);
cout<
}
second=0;
}
minute=0;
}
}
};
clock::clock(int h,int m,int s){
hour=h;
minute=m;
second=s;
}
void main()
{
clock cl(16,18,23);
cl.showTime();
}
三.运行结果
实验2-3 类和对象的编程
本实验用到的概念有:类、对象、成员函数、静态成员以及对象数组。
一.题目
编写一个程序,输入N个学生数据,包括学号、姓名、成绩,要求输出这些学生数据并计算输入学生的平均分。
提示:设计一个学生类Stud,除了包括no(学号)、name(姓名)和deg(成绩)数据成员外,有两个静态变量sum和num,分别存放总分和人数,另有两个普通成员函数setdata()和disp(),分别用于给数据成员赋值和输出数据成员的值,另有一个静态成员函数avg(),它用于计算平均分。在main()函数中定义了一个对象数组用于存储输入的学生数据。
二.代码
#include
#include
using namespace std;
class Stude{
private:
int no;
string name;
float deg;
static int num;
static int sum;
public:
Stude(int no,string name,float deg);
void disp()
{
cout<<"the no is: "<
cout<<"the name is: "<
cout<<"the deg is: "<
cout<<"the sum is: "<
cout<<"the num is: "<
}
void avg()
{
cout<<"the average number is: "<
}
};
int Stude::sum=0;
int Stude::num=0;
Stude::Stude(int no,string name,float deg)
{
this->no=no;
this->name=name;
this->deg=deg;
num++;
sum=sum+deg;
}
void main(void)
{
Stude stu1(1,"han",88);
Stude stu2(2,"li",99);
Stude stu3(3,"xx",70);
stu1.disp();
stu2.disp();
stu3.disp();
stu1.avg();
}
三.运行结果
实验3-1 继承性练习
本实验用到的概念有:类、对象以及类的派生与继承
一.题目
给出下面的基类:
class Area
{
protected:
double height;
double width;
public:
…….. //公有函数自己写
} ;
要求:
建立两个派生类Box(矩形类)与Isosceles(等腰三角形类),分别用来计算任意矩形和等腰三角形的面积,并编写主程序实现功能。
二.代码
#include
class Area
{
protected:
double height;
double width;
public:
void set(double h,double w)
{
width=w;
height=h;
}
};
class Box:public Area
{
public:
double getArea()
{
return width*height;
}
};
class Isoscede:public Area
{
public:
double getArea()
{
return width*height/2;
}
};
void main(void)
{
double width;
double height;
int choice;
Box b;
Isoscede is;
cout<<"1.box 2.Isos"<
cin>>choice;
cout<<"please enter the width and height"<
cin>>width;
cin>>height;
if(choice==1)
{
b.set(height,width);
cout<<"the are of box is "<
}else{
is.set(height,width);
cout<<"the area of isoscede is "<
}
}
三.运行结果
实验3-2 多态性练习
本实验用到的概念有:类、对象、类的派生与继承以及纯虚函数和抽象类
一.题目
将实验3-1程序中的基类改成抽象类,其它要求不变
二.代码
#include
#include
using namespace std;
class Area{
protected:
double height;
double width;
public:
void setSize(double h,double w)
{
this->height=h;
this->width=w;
}
virtual int result()=0;
};
class Box:virtual public Area
{
public:
int result()
{
return width*height;
}
};
class Isosceles:virtual public Area
{
public:
int result()
{
return width*height/2;
}
};
void main(void)
{
int width;
int height;
cout<<"please enter the width:"<
cin>>width;
cout<<"please enter the height:"<
cin>>height;
Box b;
Isosceles is;
b.setSize(height,width);
is.setSize(height,width);
cout<<"the area of box is :"<
cout<<"the area of isoscelse is:"<
}
三.运行结果
实验4-1 VC++与MFC练习一
本实验是VC++与MFC的练习,需要用到MFC的知识和多个控件
一.题目
一个公司人员工资信息系统的设计与开发(用VC++和MFC实现)
二.界面设计
三. 类的成员设计(用类向导进行数据成员设计时的抓图)
四.代码
五.运行结果
实验4-2 VC++与MFC练习二(选作)
本实验是VC++与MFC的练习,需要用到MFC的知识和多个控件
一.题目
用VC++编写程序,实现系统登录程序的界面设计和编程。
二.界面设计
三. 类的成员设计(用类向导进行数据成员设计时的抓图)
四.代码
五.运行结果
北京服装学院商学院
上机实验报告
课程名称: VC++程序设计
实验名称: 一个小型公司人员工资
系统的设计与编程
实验性质: 综合性□/设计性▇/一般性□
学生姓名: Masoon
班级学号:
指导教师:
实验日期: 2015-06-17
小型公司人员工资系统的设计与编程
一、实验名称
一个公司人员工资信息系统的设计与开发
二、实验目的
1.理解面向对象编程的思想;
2.掌握类、对象、继承和多态的基本概念和编程方法;
4.熟悉Visual C++6.0编程环境、语句和程序的调式。
三、实验内容
1.练习面向对象程序设计的一般方法。.
2.使用Visual C++的环境编写C++程序。
3.练习程序的调试和完善。
四、实验环境
软件环境:
操作系统:Windows XP
开发工具:Visual C++6.0
硬件环境:
CPU: Pentium(R) D CPU 3.0GHz
内存:512M内存
五、实验过程和结果
一.题 目
某小型IT公司,主要有四类人员:经理、兼职技术人员、销售经理和兼职推销员。现在该公司需要一个小型的人员信息系统来存储这些人员的姓名、编号、级别、当月薪金、计算月薪总额并输出显示人员的全部信息。
人员编号基数为1000,每输入一个人员的信息,其编号顺序加1。
经理和销售经理都有级别,经理最高为4级,销售经理最高为3级,兼职技术人员和兼职推销员没有级别(或认为级别为1级,不能改变)。
月薪计算方法是:
1) 经理的起薪为5000.00(1级),以后每增加1级,工资增加2000元。
2) 兼职技术人员按每小时100元领取月薪。
3) 销售经理的起薪为3000.00(1级),以后每增加1级,工资增加1000元,除次外,销售经理还领取销售提成,销售提成为其所管辖部门 当月销售总额的4%(销售总额为兼职推销员和销售经理的销售额之 和)。
4) 兼职推销员的月薪按其当月销售额的6%提成。
要求:
1)通过人机对话方式输入四类人员的基本情况(每类人员各输入一人),由程序算出该人员的月薪和公司当月月薪总额并输出。
2)按照该公司人员的层次关系,设计一个基类(其中含纯虚函数),并由此产生若干个派生类,通过类的静态成员变量来记录人员个数(即人员编号)和公司当月工资总额。
二. 类结构设计
三. 程序的实现方法和程序源代码
1. 程序的实现方法
2. 程序源代码
四. 程序运行结果
// employeeDlg.cpp : implementation file
//
#include "stdafx.h"
#include "employee.h"
#include "employeeDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CEmployeeDlg dialog
CEmployeeDlg::CEmployeeDlg(CWnd* pParent /*=NULL*/)
: CDialog(CEmployeeDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CEmployeeDlg)
m_edit_name = _T("");
m_edit_whsm = _T("");
m_str_whsmtitle = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_index=2;
m_number=1001;
m_totalsalary=0.0,m_totalsales=0.0;
}
void CEmployeeDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CEmployeeDlg)
DDX_Control(pDX, IDC_EDIT_NAME, m_ctr_name);
DDX_Control(pDX, IDC_LIST, m_ctr_list);
DDX_Control(pDX, IDC_EDIT_WHSM, m_ctr_whsm);
DDX_Control(pDX, IDC_COMBO2_GRADE, m_combo_grade);
DDX_Control(pDX, IDC_COMBO1_JOB, m_combo_job);
DDX_Text(pDX, IDC_EDIT_NAME, m_edit_name);
DDX_Text(pDX, IDC_EDIT_WHSM, m_edit_whsm);
DDV_MaxChars(pDX, m_edit_whsm, 10);
DDX_Text(pDX, IDC_STATIC_WHSMTITLE, m_str_whsmtitle);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CEmployeeDlg, CDialog)
//{{AFX_MSG_MAP(CEmployeeDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_CACULATE, OnCaculate)
ON_BN_CLICKED(IDC_QUIT, OnQuit)
ON_CBN_SELENDOK(IDC_COMBO1_JOB, OnSelendokCombo1Job)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CEmployeeDlg message handlers
BOOL CEmployeeDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
m_combo_job.SetCurSel(0);
m_combo_grade.SetCurSel(0);
m_ctr_whsm.EnableWindow(FALSE);
m_ctr_list.AddString(" 编 号 姓 名 职 务 级别 工作小时 销售额 工 资");
m_ctr_list.AddString(" ==============================================================================");
UpdateData(false);
return TRUE; // return TRUE unless you set the focus to a control
}
void CEmployeeDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CEmployeeDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CEmployeeDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CEmployeeDlg::OnSelendokCombo1Job()
{
// TODO: Add your control notification handler code here
int select=m_combo_job.GetCurSel();
m_edit_name = "";
m_edit_whsm = "";
m_ctr_name.SetFocus();
switch(select)
{
case 0:
m_str_whsmtitle = " ";
m_ctr_whsm.EnableWindow(FALSE);
m_combo_grade.ResetContent();
m_combo_grade.AddString("1");
m_combo_grade.AddString("2");
m_combo_grade.AddString("3");
m_combo_grade.AddString("4");
m_combo_grade.SetCurSel(0);
break;
case 1:
m_combo_grade.ResetContent();
m_combo_grade.AddString("1");
m_combo_grade.SetCurSel(0);
m_ctr_whsm.EnableWindow(TRUE);
m_ctr_whsm.LimitText(3);
m_str_whsmtitle = "请输入工时(小时)";
break;
case 2:
m_combo_grade.ResetContent();
m_combo_grade.AddString("1");
m_combo_grade.SetCurSel(0);
m_ctr_whsm.EnableWindow(TRUE);
m_ctr_whsm.LimitText(8);
m_str_whsmtitle = "请输入销售额(元)";
break;
case 3:
m_combo_grade.ResetContent();
m_combo_grade.AddString("1");
m_combo_grade.AddString("2");
m_combo_grade.AddString("3");
m_combo_grade.SetCurSel(0);
m_ctr_whsm.EnableWindow(TRUE);
m_ctr_whsm.LimitText(8);
m_str_whsmtitle = "请输入销售额(元)";
break;
}
UpdateData(false);
}
void CEmployeeDlg::OnCaculate()
{
// TODO: Add your control notification handler code here
UpdateData(true);
if ( m_edit_name == "" )
{
AfxMessageBox("姓名不能为空,请重输!!!");
m_ctr_name.SetFocus();
return;
}
int job=m_combo_job.GetCurSel();
int grade=m_combo_grade.GetCurSel();
c_workhours = " ";
c_salesamount = " ";
switch(job)
{
case 0:
c_salesamount = " ";
m_salary=3000.00+2000.00*(float)grade;
break;
case 1:
m_workhours = atoi(m_edit_whsm);
if ( m_workhours == 0 )
{
AfxMessageBox("工作时数不能为空,请重输!!!");
m_ctr_whsm.SetFocus();
return;
}
c_workhours.Format(" %d",m_workhours);
str=c_workhours;
c_workhours=str.Right(11);
m_salary=100.00*(float)m_workhours;
break;
default :
m_salesamount = atof(m_edit_whsm);
if ( m_salesamount == 0.0 )
{
AfxMessageBox("销售额不能为空,请重输!!!");
m_ctr_whsm.SetFocus();
return;
}
c_salesamount.Format(" %f",m_salesamount);
pos = c_salesamount.Find(".")+3;
c_salesamount=c_salesamount.Left(pos);
str=" "+c_salesamount;
c_salesamount=str.Right(11);
m_totalsales += m_salesamount;
if (job == 2)
{
m_salary=0.04*m_salesamount;
}
if (job == 3)
m_salary=3000.00+1000.00*(float)grade+0.05*m_totalsales;
break;
}
m_totalsalary += m_salary;
c_number.Format("%d",m_number);
m_combo_job.GetLBText(job,c_job);
c_grade.Format(" %d " ,grade+1);
c_name=m_edit_name+" ";
c_name=c_name.Left(12);
c_salary.Format("%f",m_salary);
c_salary.Format(" %f",m_salary);
pos = c_salary.Find(".")+3;
c_salary=c_salary.Left(pos);
str=" "+c_salary;
c_salary=str.Right(13);
str=" "+c_number+" "+c_name+c_job+c_grade+c_workhours+c_salesamount+c_salary;
m_ctr_list.DeleteString(m_index);
m_ctr_list.DeleteString(m_index+1);
m_ctr_list.InsertString(m_index,str);
m_ctr_list.InsertString(m_index+1," ==============================================================================");
str.Format("%f",m_totalsalary);
pos = str.Find(".")+3;
str = " "+str.Left(pos);
c_salary=str.Right(14);
str = " 公司本月工资合计: "+str;
m_ctr_list.InsertString(m_index+2,str);
m_ctr_list.DeleteString(m_index+3);
m_number++;
m_index++;
m_ctr_name.SetFocus();
// m_str_whsmtitle = " ";
// m_ctr_whsm.EnableWindow(FALSE);
UpdateData(false);
}
void CEmployeeDlg::OnQuit()
{
// TODO: Add your control notification handler code here
CDialog::OnCancel();
}
五、总结
(300字左右,内容为C++的特点、C++程序设计的方法、、学习本课程的体会等等。)
通过这次C++程序的学习我学习到了很多的东西,首先是面向对象设计的一般习惯,面向对象的设计思想,类的使用,对象的使用,类的特性,对象的特性等等,我也认识到了windows的编程机制是消息驱动的编程机制,在这种机制中,重要的是程序对消息的捕捉,同时再对消息进行处理,这种编程机制的好处是使每个程序都变成了一个消息处理的程序,更符合人们对事物处理的特点,这种处理过程非常有用,在日常的过程中,处理事情的时候,这种思维方式会给人很好的处理方式的思路,对日后的生活和工作都有很好的作用和影响。
本文来源:https://www.2haoxitong.net/k/doc/4026bd0b71fe910ef12df8dd.html
文档为doc格式