版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《C++程序设计》实训报告实训目的:(1)掌握类与对象的定义与使用方法,理解面向对象方法中通过对象间传递消息的工作机制。(2)正确掌握类的不同属性成员的使用方法。(3)掌握构造函数与析构函数的概念,理解构造函数与析构函数的执行过程。(4)掌握友元函数和友元类的定义和使用。(5)基本掌握指针和引用作为函数参数的应用。实训内容:定义一个时间类Time,有三个私有成员变量Hour、Minute、Second,定义构造函数、析构函数以及用于改变、获取、输出时间信息的公有函数,主函数中定义时间对象,并通过调用各种成员函数完成时间的设定、改变、获取、输出等功能。按要求完成类的定义与实现。修改数据成员的访问方式,观察编译结果。在Time类中定义一个成员函数,用于实现时间增加一秒的功能,主函数中通过对象调用该函数,并输出增加一秒后的时间信息。定义一个普通函数。voidf(Timet){t.PrintTime();}在Time类中增加拷贝构造函数的定义,主函数中调用该函数,运用调试工具跟踪,分析整个程序调用构造函数(包括拷贝构造函数)和析构函数的次数;再将f函数的形式参数分别修改为引用参数和指针参数(此时函数代码修改为{t->PrintTime();},主函数中调用,再分析此时调用构造函数和析构函数的次数。实训代码:#include<iostream>usingnamespacestd;classTime{private:intHour,Minute,Second;public:Time(inth=0,intm=0,ints=0);Time(constTime&ob);~Time();voidChangeTime(inth,intm,ints);intGetHour();intGetMinuteO;intGetSecond();voidPrintTime();voidIncreaseOneSecondO;};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::GetHourO{returnHour;}intTime::GetMinute(){returnMinute;}intTime::GetSecond。{returnSecond;}voidTime::PrintTime(){cout«Hour<<": "<<Minute<<":"<<Second<<endl;}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<<a.GetHour()〈<":"<<a.GetMinute()<<":"<<a.GetSecond()<<endl;cout<<b・GetHour()<<":"<<b・GetMinute()<<":"<<b.GetSecond()<<endl;cout<<c・GetHour()<<":"<<c・GetMinute()<<":
"<<c.GetSecond()<<endl;cout<<d.GetHour()<<":"<<d.GetMinute()<<":"<<d・GetSecond()<<endl;return0;}程序运行结果■ 、E:工++&陀14070519\Dehugl軽一一exo0:0=013:a:a13:15:Q13:15:4512:15:4512:±5:4512:±5:4512:15:45?ressanykeytocontinue实训小结:构造函数与析构函数的调用方式及执行顺序是:先是构造函数然后是析构函数。调用方式是自动调用,执行顺序是先执行构造函数,待程序结束时再执行析构函数。实训二:个人银行账户管理程序的类设计实训目的:掌握面向对象中类、继承、多态性的开发思想;掌握流的概念;独立设计个人银行账户管理程序。实训内容: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(balancevO?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()v0)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=O;}};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!=0IIyear%400==0;}voidshow()const;intdistance(constDate&date)const{returntotaldays-date.totaldays;}};2、个人银行账户管理程序的类关系图3、个人银行账户管理程序的个人账户设置和应用SavingsAccountwutingming(date,"O90102O6O101",0・015);creditaccountwutingmin(date,"O9O10206O1O1",2O0O,O.O0O5,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<<endl;wutingmin.show();cout<<endl;4、个人银行账户管理程序的重点代码#include"account.h"#include<iostream>usingnamespacestd;intmain(){Datedate(2008,11,1);SavingsAccountsa1(date,"03755217",0.015);SavingsAccountsa2(date,"02342342",0・015);SavingsAccountwutingming(date,"O90102O6O101",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(200&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(20O9,1,1));sa2・settle(Date(20O9,1,1));wutingming.settle(Date(2008,12,5));wutingmin.settle(Date(2O08,12,5));ca・settle(Date(200&12,1));coutvvendl;sa1・show();coutvvendl;sa2・show();coutvvendl;wutingming.show();coutvvendl;wutingmin.show();coutvvendl;ca.show();coutvvendl;coutvv"total:"vvaccount::gettotal()vvendl;return0;}#include"account.h"#includeviostream>usingnamespacestd;intmain(){Datedate(2008,11,1);SavingsAccountsa1(date,"s3755217",0.015);SavingsAccountsa2(date,"02342342",0・015);SavingsAccountwutingming(date,"O90102O6O101",0.015);creditaccountca(date,"C5392394",10000,0.0005,50);account*accounts[]={&sa1,&sa2,&wutingming,&ca};constintn=sizeof(accounts)/sizeof(account*);coutvv"(d)deposit(w)withdraw(s)show(c)changday(n)nextmonth(e)exit"vvendl;charcmd;do{date.show();coutvv"\ttotal:"vvaccount::gettotal()vvendl;coutvv"command>";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;ivn;i++){coutvv"["vvivv"]";accounts[i]->show();coutvvendl;}break;case'c':cin>>day;if(day<date.getday())cout<<"youcannotspecifyapreviousday";elseif(day>date・getmaxday())coutvv"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=O;ivn;i++)accounts[i]->settle(date);break;}}while(cmd!='e');return0;}
程序运行结果匚、r\PrDgiiULFiles\Bicrusuf-tVisualS±udio\l[yProjeGts\l\Debu.g\l.eate^008-11-1#03755217created2908-11-1#02342342created2008-11-1#090102666161createdtiUUM-11-lcreated23W8-11-1created2008-1丄一5410375521756065S0Ssalary2908-11-2541823423421S0601BOG0sellstock03232008-ilG#0901S26G616116061B0GbuybuDk2908-115#0901026G@161-2060-2OG0buyMP3H008-11-1EttCE392394-2060-20G0buyacell2009-12-1ttC5292294-1G-201GIntel'sst2008-12-1ttC53922942SIG&repaytheDi'edit:#037^^2171KBSsalary-11^17Rinterest2009-1-1#0234234215.161S015..2interestE908-12-5#0901026661610.641000.64interest2008-12-5tt09Q102@6Sl@l-30-2030interest0375521?Balance:10E17.e02342342Balance:10S15.2090102060101Balance:10S0.64MYMlMbMlMlBalance:-2030auailablecredit:-30Balance:Mauailablecredit:Itl凶total;丄9503.6Presscmykeytocoiitinue_实训小结:通过本实训,应用虚函数和抽象类对程序进行改进:1) 将show函数声明为虚函数,因此通过指向creditaccount类实例的account类型的指针来调用show函数时,被实际调用的将是creditaccount类定义的show函数。这样,如果创建一个account指针类型的数组,使各个元素分别指向各个账户对象,就可以通过一个循环来调用它们的show函数。2) 在account类中添加deposit,withdraw,settle这3个函数的声明,且将它们都声明为纯虚函数,这使得通过基类指针可以调用派生类的相应函数,而且无须给出它们在基类中的实现。经过这一改动之后,account类就变成了抽象类。
实训三、图书信息管理系统主界面实训目的:能够较好的完成程序的主体设计,界面友好,功能齐全;程序思路清晰易懂,能够充分利用所学工具实现各项操作。独立力完成实训报告,内容充实、观点明确、新颖。实训内容:图书信息管理系统,使之能提供以下功能:1、 系统以菜单方式工作。2、 借书3、 还书4、 图书维护5、 读者维护6、 退出:包括返回主界面和退出系统等功能。实训代码:#include<stdio・h>#inc]ude<math・h>#include<string・h>#include<stdlib・h>/*作者/*书名
/*出版单author[20];bookname[20];publisher[20];/*作者/*书名
/*出版单author[20];bookname[20];publisher[20];-,char名*//char*/char
/*出版/*登陆/*出版/*登陆/*价格/*分类/*链表的指时间eharpbtime[i5];eharloginnum[10];号*/floatpriee;*/eharclassfy[10];号*/vo存数据藪s_list*Create_Books_Doc();Doc(struetbooks_list*head);(struetbooks_list*head,Doc(struetbooks_list*(struetbooks_list*head);jjange(struetbooks_list**ruetbooks_list*head);/*保匸r^struetbookslist*next;vo存数据藪s_list*Create_Books_Doc();Doc(struetbooks_list*head);(struetbooks_list*head,Doc(struetbooks_list*(struetbooks_list*head);jjange(struetbooks_list**ruetbooks_list*head);/*保/V新u/V插voi{t新建链表头节点*/*Create_Books_Doc()'books_list*head;ize/f(struct亠{t新建链表头节点*/*Create_Books_Doc()'books_list*head;ize/f(struct亠bo°ks_list));/*分ext二Null;/*头节点指针域初始化,*strue为空护returnhead;sruet^bookslist定}/*保存s数据至文etbookslist*head){struetbooks_list*p;FILE*fp;p=head;
建并打开ena;aatxtt文件X");/*以写方式新fprintf(fp,| | |fnirjt者庐•fpri\n");号文件输鹿号作息点开始移动,遍历至尾结点,依p—>nex™!=null)VpLlJ.10塔fsfnirjt者庐•fpri\n");号文件输鹿号作息点开始移动,遍历至尾结点,依p—>nex™!=null)VpLlJ.10塔fs」l2.12s戕一6.6sfc|ose(fp);n),Lnata.txt文件\n");已将图书数据/*;(Oi首地:sh重變p* whiTe(p->ne}p=p->next;}/*开辟新空间,存入数据,添加进链表*/whiTe(fTag=='Y'||fTag=='y')id^InsertDoc(struct巒一f】aoo'汗競义醜,方便用户选择针量books_list*head)s指向开辟的新结点向尾结点*/、"s=(struetbooks_list*)malloc(sizeof(struetbookslist));人、口
书登陆号h""};.、 -请输入图臨悴^loginnum);请输入图书书名陀:di)请输入图fflush(stdin);("%\",s->bookname);f開;S->author);诙叽("%\",s->bookname);f開;S->author);诙叽blisher);请输入图请输入图scanf书轆:请输入图请输入图书scanf请输入图书丁间:•.丁间:usscan书分类号scanf书usscan书分类号scanf书请输入图:")\n请输入图丄nrintf加成功!t»\继续添fd讪priftf(=\nN'i|flag==F)请输入图丄nrintf加成功!t»\继续添fd讪priftf(=\nN'i|flag==F)if(flag=='Y'||flag=='y');…"_〃);N)、:");I"&flag);
Save(head);/*保存数据至文件*/}return;/*查询操作*/{oidsearch_book(structbooks_list*head)struetbooks_list*p;c=ar$emp[20];intf\n");断数据库是否为空*/head->nex七=视⑴/*判图书库为空intf\n");查&请输逬要查找的书名:");点开始移动,遍历至尾结点,[lseprintf查&请输逬要查找的书名:");点开始移动,遍历至尾结点,iwJife(p->next!=NULL)if(strCmC(p->bookname,temp)==0)iwJ号:位:
间:IP唧U时isher);feftf\t\n";p->pracef;);一〉bookname);,p->author);printf("\n图书已找到!\n");crintf("\%s\inf,(p-%牒一%s\intp'("出%s\t\npV号:位:
间:IP唧U时isher);feftf\t\n";p->pracef;);一〉bookname);,p->author);}printf("\n查询完毕!\n");r}}e}turn;}return;/*浏览操作*/voidPrint_Book_Doc(struetbooks_list*head):h/ead->next==NULL)/*:h/ead->next==NULL)/*\n\n");记录!判断数据库是否为1一嘔有图书记\n\n");记录!Ireturn;p-heaf;"PjT〃次printf(一PjT〃次点开始移动,遍历至尾结点,依next[二null)1r,l
Lor
o、hp
让1r,l
Lor
o、hp
让ft>
厂2U一
%ap,
OS,s
16es•m8al—h-1厂nc厂%k>一Iopsb,S2>e61-m•62Lu/-1mb*%CUE-tJlrl袅sgK44nfoo>tl一n・>PIO-一一rippp-,■nu*J\D7p^intf("1 }printf("\n");
PandUaH=_li/*此变量用于判断是否找到temp[20];PandUaH=_li/*此变量用于判断是否找到temp[20];l 要修改的书名:");f("%s,temp); 、e(p->next!二NULL)请输入char刖_("请输入要修改的书名:");scanf(%s,twhi]e(p->nexif(strCmp(p->bookname,temp)==0)陆卡号:n);us请输入scanf("%S",P->loginnum)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《NOIP图的基础算法》课件
- 价值观培训班
- 农药采购合同模板
- 白血病捐款班会
- 仁爱版英语初二八年级上册全册教案
- 2024年度航空公司机队更新与租赁合同3篇
- 仁爱版英语七年级上册教案设计
- 2024年度房产购房合同(标的:杭州市江干区套别墅)3篇
- 治疗性沟通实践报告
- 《新风培训》课件
- 妊娠期高血压疾病的护理课件
- 小区物业消防安全职责与日常检查
- 施工现场危险源辨识及风险评价表
- 烟草专卖许可证新办申请表(国)
- 玩转计算机网络-计算机网络原理智慧树知到课后章节答案2023年下青岛大学
- 安全隐患排查台账(附排查表)
- 核安全工程师-核安全综合知识-辐射防护基础-辐射防护剂量限值
- 音乐治疗学基础理论
- 小学二年级期中家长会课件
- 第六届大学生化学实验技能竞赛初赛笔试试题
- 质量通病防治施工措施及质量通病防治措施
评论
0/150
提交评论