《C++程序设计》实训报告材料.docx

上传人:b****0 文档编号:10044375 上传时间:2023-05-23 格式:DOCX 页数:27 大小:67.17KB
下载 相关 举报
《C++程序设计》实训报告材料.docx_第1页
第1页 / 共27页
《C++程序设计》实训报告材料.docx_第2页
第2页 / 共27页
《C++程序设计》实训报告材料.docx_第3页
第3页 / 共27页
《C++程序设计》实训报告材料.docx_第4页
第4页 / 共27页
《C++程序设计》实训报告材料.docx_第5页
第5页 / 共27页
《C++程序设计》实训报告材料.docx_第6页
第6页 / 共27页
《C++程序设计》实训报告材料.docx_第7页
第7页 / 共27页
《C++程序设计》实训报告材料.docx_第8页
第8页 / 共27页
《C++程序设计》实训报告材料.docx_第9页
第9页 / 共27页
《C++程序设计》实训报告材料.docx_第10页
第10页 / 共27页
《C++程序设计》实训报告材料.docx_第11页
第11页 / 共27页
《C++程序设计》实训报告材料.docx_第12页
第12页 / 共27页
《C++程序设计》实训报告材料.docx_第13页
第13页 / 共27页
《C++程序设计》实训报告材料.docx_第14页
第14页 / 共27页
《C++程序设计》实训报告材料.docx_第15页
第15页 / 共27页
《C++程序设计》实训报告材料.docx_第16页
第16页 / 共27页
《C++程序设计》实训报告材料.docx_第17页
第17页 / 共27页
《C++程序设计》实训报告材料.docx_第18页
第18页 / 共27页
《C++程序设计》实训报告材料.docx_第19页
第19页 / 共27页
《C++程序设计》实训报告材料.docx_第20页
第20页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

《C++程序设计》实训报告材料.docx

《《C++程序设计》实训报告材料.docx》由会员分享,可在线阅读,更多相关《《C++程序设计》实训报告材料.docx(27页珍藏版)》请在冰点文库上搜索。

《C++程序设计》实训报告材料.docx

《C++程序设计》实训报告材料

实训一:

类和对象的定义与使用

实训目的:

〔1〕掌握类与对象的定义与使用方法,理解面向对象方法中通过对象间传递消息的工作机制。

〔2〕正确掌握类的不同属性成员的使用方法。

〔3〕掌握构造函数与析构函数的概念,理解构造函数与析构函数的执行过程。

〔4〕掌握友元函数和友元类的定义和使用。

〔5〕根本掌握指针和引用作为函数参数的应用。

实训内容:

定义一个时间类Time,有三个私有成员变量Hour、Minute、Second,定义构造函数、析构函数以与用于改变、获取、输出时间信息的公有函数,主函数中定义时间对象,并通过调用各种成员函数完成时间的设定、改变、获取、输出等功能。

①按要求完成类的定义与实现。

②修改数据成员的访问方式,观察编译结果。

③在Time类中定义一个成员函数,用于实现时间增加一秒的功能,主函数中通过对象调用该函数,并输出增加一秒后的时间信息。

④定义一个普通函数。

voidf(Timet)

{

t.PrintTime();

}

在Time类中增加拷贝构造函数的定义,主函数中调用该函数,运用调试工具跟踪,分析整个程序调用构造函数〔包括拷贝构造函数〕和析构函数的次数;再将f函数的形式参数分别修改为引用参数和指针参数〔此时函数代码修改为{t->PrintTime();},主函数中调用,再分析此时调用构造函数和析构函数的次数。

实训代码:

#include

usingnamespacestd;

classTime

{

private:

intHour,Minute,Second;

public:

Time(inth=0,intm=0,ints=0);

Time(constTime&ob);

~Time();

voidChangeTime(inth,intm,ints);

intGetHour();

intGetMinute();

intGetSecond();

voidPrintTime();

voidIncreaseOneSecond();

};

Time:

:

Time(inth,intm,ints)

{

Hour=h;

Minute=m;

Second=s;

}

Time:

:

Time(constTime&ob)

{

Hour=ob.Hour;

Minute=ob.Minute;

Second=ob.Second;

}

Time:

:

~Time()

{

}

voidTime:

:

ChangeTime(inth,intm,ints)

{

Hour=h;

Minute=m;

Second=s;

}

intTime:

:

GetHour()

{

returnHour;

}

intTime:

:

GetMinute()

{

returnMinute;

}

intTime:

:

GetSecond()

{

returnSecond;

}

voidTime:

:

PrintTime()

{

cout<

"<

"<

}

voidTime:

:

IncreaseOneSecond()

{

Second++;

}

/*voidTime:

:

f(Timet)

{

t.PrintTime();

cout<<"callf\n";

}*/

intmain()

{

Timea;

Timeb(13);

Timec(13,15);

Timed(13,15,45);

a.PrintTime();

b.PrintTime();

c.PrintTime();

d.PrintTime();

a.ChangeTime(12,15,45);

b.ChangeTime(12,15,45);

c.ChangeTime(12,15,45);

d.ChangeTime(12,15,45);

cout<

"<

"<

cout<

"<

"<

cout<

"<

"<

cout<

"<

"<

return0;

}

程序运行结果

实训小结:

构造函数与析构函数的调用方式与执行顺序是:

先是构造函数然后是析构函数。

调用方式是自动调用,执行顺序是先执行构造函数,待程序完毕时再执行析构函数。

实训二:

个人银行账户管理程序的类设计

实训目的:

掌握面向对象中类、继承、多态性的开发思想;掌握流的概念;独立设计个人银行账户管理程序。

实训内容:

1、个人银行账户管理程序的类关系图

2、个人银行账户管理程序的个人账户设置和应用

3、个人银行账户管理程序

实训代码:

1、个人银行账户管理程序的类设计

classaccount{

private:

std:

:

stringid;

doublebalance;

staticdoubletotal;

protected:

account(constDate&date,conststd:

:

string&id);

voidrecord(constDate&date,doubleamount,conststd:

:

string&desc);

voiderror(conststd:

:

string&msg)const;

public:

conststd:

:

string&getId()const{returnid;}

doublegetBalance()const{returnbalance;}

staticdoublegettotal(){returntotal;}

voidshow()const;};

classSavingsAccount:

publicaccount{

private:

accumulatoracc;

doublerate;

public:

SavingsAccount(constDate&date,conststd:

:

string&id,doublerate);

doublegetrate()const{returnrate;}

voiddeposit(constDate&date,doubleamount,conststd:

:

string&desc);

voidwithdraw(constDate&date,doubleamount,conststd:

:

string&desc);

voidsettle(constDate&date);};

classcreditaccount:

publicaccount{

private:

accumulatoracc;

doublecredit;

doublerate;

doublefee;

doublegetdebt()const{

doublebalance=getBalance();

return(balance<0?

balance:

0);}

public:

creditaccount(constDate&date,conststd:

:

string&id,doublecredit,doublerate,doublefee);

doublegetcredit()const{returncredit;}

doublegetrate()const{returnrate;}

doublegetfee()const{returnfee;}

doublegetavailablecredit()const{

if(getBalance()<0)

returncredit+getBalance();

Elsereturncredit;}

voiddeposit(constDate&date,doubleamount,conststd:

:

string&desc);

voidwithdraw(constDate&date,doubleamount,conststd:

:

string&desc);

voidsettle(constDate&date);

voidshow()const;};

classaccumulator{

private:

Datelastdate;doublevalue;doublesum;

public:

accumulator(constDate&date,doublevalue)

:

lastdate(date),value(value),sum(0){}

doublegetsum(constDate&date)const{

returnsum+value*date.distance(lastdate);}

voidchange(constDate&date,doublevalue){

sum=getsum(date);

lastdate=date;this->value=value;}

voidreset(constDate&date,doublevalue){

lastdate=date;this->value=value;sum=0;}};

classDate{

private:

intyear;intmonth;intday;inttotaldays;

public:

Date(intyear,intmonth,intday);

intgetyear()const

{returnyear;}

doublegetmonth()const

{returnmonth;}

intgetday()const

{returnday;}

intgetmaxday()const;

boolisleapyear()const{

returnyear%4==0&&year%100!

=0||year%400==0;}

voidshow()const;

intdistance(constDate&date)const{

returntotaldays-date.totaldays;}};

2、个人银行账户管理程序的类关系图

3、个人银行账户管理程序的个人账户设置和应用

SavingsAccountwutingming(date,"090102060101",0.015);

creditaccountwutingmin(date,"090102060101",2000,0.0005,50);

wutingming.deposit(Date(2008,11,5),1000,"buybook");

wutingmin.withdraw(Date(2008,11,5),2000,"buyMP3");

wutingming.settle(Date(2008,12,5));

wutingmin.settle(Date(2008,12,5));

wutingming.show();cout<

wutingmin.show();cout<

4、个人银行账户管理程序的重点代码

#include"account.h"

#include

usingnamespacestd;

intmain(){

Datedate(2008,11,1);

SavingsAccountsa1(date,"03755217",0.015);

SavingsAccountsa2(date,"02342342",0.015);

SavingsAccountwutingming(date,"090102060101",0.015);

creditaccountca(date,"C5392394",10000,0.0005,50);

creditaccountwutingmin(date,"090102060101",2000,0.0005,50);

sa1.deposit(Date(2008,11,5),5000,"salary");

sa2.deposit(Date(2008,11,25),10000,"sellstock0323");

wutingming.deposit(Date(2008,11,5),1000,"buybook");

wutingmin.withdraw(Date(2008,11,5),2000,"buyMP3");

ca.withdraw(Date(2008,11,15),2000,"buyacell");

ca.settle(Date(2008,12,1));

ca.deposit(Date(2008,12,1),2016,"repaythecredit");

sa1.deposit(Date(2008,12,5),5500,"salary");

sa1.settle(Date(2009,1,1));

sa2.settle(Date(2009,1,1));

wutingming.settle(Date(2008,12,5));

wutingmin.settle(Date(2008,12,5));

ca.settle(Date(2008,12,1));

cout<

sa1.show();cout<

sa2.show();cout<

wutingming.show();cout<

wutingmin.show();cout<

ca.show();cout<

cout<<"total:

"<

:

gettotal()<

return0;}

#include"account.h"

#include

usingnamespacestd;

intmain(){

Datedate(2008,11,1);

SavingsAccountsa1(date,"s3755217",0.015);

SavingsAccountsa2(date,"02342342",0.015);

SavingsAccountwutingming(date,"090102060101",0.015);

creditaccountca(date,"C5392394",10000,0.0005,50);

account*accounts[]={&sa1,&sa2,&wutingming,&ca};

constintn=sizeof(accounts)/sizeof(account*);

cout<<"(d)deposit(w)withdraw(s)show(c)changday(n)nextmonth(e)exit"<

charcmd;

do{date.show();

cout<<"\ttotal:

"<

:

gettotal()<

cout<<"mand>";

intindex,day,i;

doubleamount;

stringdesc;

cin>>cmd;

switch(cmd){

case'd':

cin>>index>>amount;

getline(cin,desc);

accounts[index]->deposit(date,amount,desc);break;

case'w':

cin>>index>>amount;

getline(cin,desc);

accounts[index]->withdraw(date,amount,desc);break;

case's':

for(i=0;i

cout<<"["<

accounts[i]->show();

cout<

case'c':

cin>>day;

if(day

cout<<"youcannotspecifyapreviousday";

elseif(day>date.getmaxday())

cout<<"invalidday";

elsedate=Date(date.getyear(),date.getmonth(),day);break;

case'n':

if(date.getmonth()==12)

date=Date(date.getyear()+1,1,1);

elsedate=Date(date.getyear(),date.getmonth()+1,1);

for(i=0;i

accounts[i]->settle(date);break;}

}while(cmd!

='e');

return0;

}

程序运行结果

实训小结:

通过本实训,应用虚函数和抽象类对程序进展改良:

1〕将show函数声明为虚函数,因此通过指向creditaccount类实例的account类型的指针来调用show函数时,被实际调用的将是creditaccount类定义的show函数。

这样,如果创建一个account指针类型的数组,使各个元素分别指向各个账户对象,就可以通过一个循环来调用它们的show函数。

2〕在account类中添加deposit,withdraw,settle这3个函数的声明,且将它们都声明为纯虚函数,这使得通过基类指针可以调用派生类的相应函数,而且无须给出它们在基类中的实现。

经过这一改动之后,account类就变成了抽象类。

实训三、图书信息管理系统主界面

实训目的:

能够较好的完成程序的主体设计,界面友好,功能齐全;程序思路清晰易懂,能够充分利用所学工具实现各项操作。

独立力完成实训报告,内容充实、观点明确、新颖。

实训内容:

图书信息管理系统,使之能提供以下功能:

1、   系统以菜单方式工作。

2、   借书

3、   还书

4、   图书维护

5、   读者维护

6、   退出:

包括返回主界面和退出系统等功能。

实训代码:

#include

#include

#include

#include

structbooks_list

{

charauthor[20];/*作者名*/

charbookname[20];/*书名*/

charpublisher[20];/*出版单位*/

charpbtime[15];/*出版时间*/

charloginnum[10];/*登陆号*/

floatprice;/*价格*/

charclassfy[10];/*分类号*/

structbooks_list*next;/*链表的指针域*/

};

structbooks_list*Create_Books_Doc();/*新建链表*/

voidInsertDoc(structbooks_list*head);/*插入*/

voidDeleteDoc(structbooks_list*head,intnum);/*删除*/

voidPrint_Book_Doc(structbooks_list*head);/*浏览*/

voidsearch_book(structbooks_list*head);/*查询*/

voidinfo_change(structbooks_list*head);/*修改*/

voidsave(structbooks_list*head);/*保存数据至文件*/

/*新建链表头节点*/

structbooks_list*Create_Books_Doc()

{

structbooks_list*head;

head=(structbooks_list*)malloc(sizeof(structbooks_list));/*分配头节点空间*/

head->next=NULL;/*头节点指针域初始化,定为空*/

returnhead;

}

/*保存数据至文件*/

voidsave(structbooks_list*head)

{

structbooks_list*p;

FILE*fp;

p=head;

fp=fopen("data.txt","w+");/*以写方式新建并打开data.txt文件*/

fprintf(fp,"┏━━━┳━━━━━┳━━━━━┳━━━━━┳━━━━━━┳━━━┳━━━━┓\n");/*向文件输出表格*/

fprintf(fp,"┃登录号┃书名┃作者┃出版单位┃出版时间┃分类号┃价格┃\n");

fprintf(fp,"┣━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━━╋━━━╋━━━━┫\n");

/*指针从头节点开始移动,遍历至尾结点,依次输出图书信息*/

while(p->next!

=NULL)

{

p=p->next;

fprintf(fp,"┃┃┃┃┃┃┃%.2f┃\n",p->loginnum,p->bookname,p->author,p->publisher,p->pbtime,p->classfy,p->price);

}

fprintf(fp,"┗━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━━┻━━━┻━━━━┛\n");

fclose(fp);

printf("已将图书数据保存到data.txt文件\n");

}

/*插入*/

voidInsertDoc(structbooks_list*head)

{

/*定义结构体指针变量s指向开辟的新结点首地址p为中间变量*/

structbooks_list*s,*p;

charflag='Y';/*定义flag,方便用户选择重复输入*/

p=head;

/*遍历到尾结点,p指向尾结点*/

while(p->next!

=

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

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2