版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
浙江理工大学科技与艺术学院机电系课程设计报告目录任务一 1一、 任务内容: 1二、 设计思路 2三、 实现代码 2四、 运行结果及分析 3任务二 4一、 任务内容: 4二、 设计思路 5三、 实现代码 5四、 运行结果及分析 6任务三 6一、 任务内容: 6二、 设计思路 7三、 实现代码 7四、 运行结果及分析 9
任务一任务内容:完成内容:按照要求设计类(根据输出设计类)设计类就是根据数据封装的要求,抽象出适合的类。有如下测试程序和测试程序的输出结果,要求设计类Welcome。(1)测试程序如下:voidmain(){Welcomewe; Welcomeyou(we); you.Display(); you.Set(“Thankyou.”); cout<<you.Get()<<endl; you.talk();you.Display();}(2)测试程序的输出结果如下:Welcome!Thankyou.输入:Howaboutyou?输出:Howaboutyou?输入:Fine,thankyou.输出:Fine,thankyou.输入:OKAllrightGoodbye!OKGoodbye!Goodbye!注:后面5行为倒数第6行输出后接下去的输出内容。(3)设计类Welcome的原则:1)在头文件welcome.h中声明类2)在welcome.cpp中实现类3)使用内联函数定义Display()函数4)演示文件名用学号作主名。设计思路由给出的代码来构造此程序。开头部分,由Display输出Welcome,再用Get输出被Set存进的Thankyou。利用循环函数While建立主体部分,输入OK时跳出循环。结尾部分,因为给出的代码中建立了两个对象,所以调用析构函数时可直接输出两个Goodbye。NN开始输入OK输出输出“AllrightGoodbye”结束Y实现代码//Welcome.h#include<iostream>#include<string>usingnamespacestd;classWelcome{private: chard[100];public: inlinevoidDisplay(){cout<<d<<endl;}; voidSet(chara[]){strcpy(d,a);}; char*Get(){returnd;}; voidtalk(); Welcome(){}; Welcome(constWelcome&a); ~Welcome(){cout<<"Goodbye!"<<endl;};};WelcomeWelcomedinlinevoidDisplay()voidSet(chara[])char*Get()voidtalk()Welcome()Welcome(constWelcome&w)~Welcome()//121-2.cpp#include<iostream>#include<string>#include"Welcome.h"usingnamespacestd;voidmain(){ Welcomewe; Welcomeyou(we); you.Display(); you.Set("Thankyou."); cout<<you.Get()<<endl; you.talk(); you.Display();}//121-1.cpp#include<iostream>#include<string>#include"Welcome.h"voidWelcome::talk(){ cout<<"输入:"; cin.getline(d,100); while(strcmp(d,"OK")!=0) { cout<<"输出:"<<d<<endl; cout<<"输入:"; cin.getline(d,100); }; strcpy(d,"OK"); cout<<"Allright"<<endl; cout<<"Goodbye!"<<endl;}Welcome::Welcome(constWelcome&a){ strcpy(d,a.d); strcpy(d,"Welcome!");}运行结果及分析图SEQ图\*ARABIC1分析:前面先自动输出Welcome!和Thankyou.,然后利用循环While函数重复用户的输入。采用了多文件结构,利用构造函数、析构函数和拷贝构造函数将结果输出。最后调用析构函数输出“Goodbye!”
任务二任务内容:要求:为分数定义一个类。分数定义为两个整数之比。将分数表示为int类型的两个值:一个表示分子,一个表示分母。重载输入>>和输出运算符<<,分数以1/2、-15/29这样的形式来输入和输出,注意分子、分母可能包含负号。在分数类中,还应重载+、-、*、/运算符。应有一个函数,对分数进行约分与规格化,在规格化之后,分母一定是正的,并且分子分母的最大分约数为1,如对4/-8正规化之后表示成-1/2。仿照计算器的运算过程,采用计算器方式进行有关分数运算。设计思路(1)约分的关键是求分子分母的最大公约数,用Gcm(m,n)表示求m与n的最大公约数:当n=0时,Gcm(m,n)=m当n≠0时,Gcm(m,n)=Gcm(n,m%n)可用递归编程实现Gcm(m,n)。(2)分数的四则运算可按如下方式进行:(3)利用Reduction函数将负号全都归到分子身上。(4)Operation函数来实现当运算符输入错误时的提示。(5)当除数为0时,main函数中有实现显示除数不能为0的设置。NNY开始输入除数、被除数和除号分母为0输出输出“不能为除数,请重新输入。结束分数计算器分数计算器分数加法运算分数减法运算分数除法运算分数乘法运算异常处理报告自行约分负号转到分子为负数加括号实现代码#include<iostream>#include<cmath>voidOperation(char&index);usingnamespacestd;classFraction{private: intfz; intfm; intGcm(intm,intn);public: Fraction(intn=1,intd=1); ~Fraction(){}; voidReduction(); intGetFz(){returnfz;}; intGetFm(){returnfm;}; voidSetFz(intn); voidSetFm(intd); Fractionoperator+(Fraction&a); Fractionoperator-(Fraction&a); Fractionoperator*(Fraction&a); Fractionoperator/(Fraction&a); friendostream&operator<<(ostream&os,Fraction&s); friendistream&operator>>(istream&is,Fraction&s);};intFraction::Gcm(intm,intn){ if(n==0) returnm; elsereturnGcm(n,m%n);}voidFraction::Reduction(){ if(fm<0) {fz=-fz;fm=-fm;} intf=Gcm(abs(fz),fm); fz=fz/f; fm=fm/f;}voidOperation(char&index){ for(;;){ cout<<"请输入运算符:"; cin>>index; if(index=='+'||index=='-'||index=='*'||index=='/') break; else cout<<"请输入正确的运算符:"; }}Fraction::Fraction(intn,intd):fz(n),fm(d){Reduction();}voidFraction::SetFz(intn){fz=n;}voidFraction::SetFm(intd){fm=d;}istream&operator>>(istream&is,Fraction&s){ charch; intm,n; for(;;) { cout<<"请输入一个分数:"; is>>m>>ch>>n; s.SetFz(m); s.SetFm(n); if(ch=='/'&&n!=0) break; else{ try{ if(ch!='/')throw1; if(n==0)throw2; } catch(inti){ if(i==1) cout<<"输入格式错误,请重新输入!"<<i<<endl; elseif(i==2) cout<<"分母为0,请重新输入!"<<endl; } } } s.Reduction(); returnis;}ostream&operator<<(ostream&os,Fraction&s){ if(s.fz<0) { if(abs(s.fz)%s.fm==0) os<<"("<<s.fz/s.fm<<")"; elseif(abs(s.fz)>s.fm) os<<"("<<s.fz/s.fm<<"又"<<s.fz%s.fm<<"/"<<s.GetFm()<<")"; elseos<<"("<<s.GetFz()<<"/"<<s.GetFm()<<")"; } else{ if(s.fz%s.fm==0) os<<s.fz/s.fm; elseif(s.fz==0) os<<0; elseif(s.fz>s.fm) os<<s.fz/s.fm<<"又"<<s.fz%s.fm<<"/"<<s.GetFm(); elseos<<s.GetFz()<<"/"<<s.GetFm(); } returnos;}FractionFraction::operator+(Fraction&a){ Fractionr; r.fz=fz*a.fm+fm*a.fz; r.fm=fm*a.fm; r.Reduction(); returnr;}FractionFraction::operator-(Fraction&a){ Fractionr; r.fz=fz*a.fm-fm*a.fz; r.fm=fm*a.fm; r.Reduction(); returnr;}FractionFraction::operator*(Fraction&a){ Fractionr; r.fz=fz*a.fz; r.fm=fm*a.fm; r.Reduction(); returnr;}FractionFraction::operator/(Fraction&a){ Fractionr; r.fz=fz*a.fm; r.fm=fm*a.fz; r.Reduction(); returnr;}intmain(){ Fractionobj1,obj2,r; charindex='+'; inti; charo='y'; for(;;) { if(o=='y') { cin>>obj1; Operation(index); cin>>obj2; if(index=='+') r=obj1+obj2; elseif(index=='-') r=obj1-obj2; elseif(index=='*') r=obj1*obj2; elseif(index=='/') { for(;;) { i=obj2.GetFz(); if(i==0) { cout<<"不能为除数,请重新输入。"<<endl; cin>>obj2; } elsebreak; } r=obj1/obj2; } cout<<obj1<<index<<obj2<<"="<<r<<endl; cout<<"是否继续(y/n)"; cin>>o; } elsebreak; } return0;}运行结果及分析图SEQ图\*ARABIC2分析:第一个加法运算体现了约分的功能,第二个减法运算体现了假分数的自行转换功能,第三个乘法运算体现了给负数加括号的功能,第四个除法运算体现了自行将分母的负号提给分子的功能,以及最后五行体现了运算符错误的提示和分母为0的提示。任务三任务内容:要求:能够对文件进行存储和读取。要求用一个结构记载学生属性,编写一个学生类以完成各种操作。具体要求如下:有10个小学生,每个学生有数学、语文两门课,从键盘输入学生的学号、姓名及成绩,计算每个学生的平均成绩,将数据存入stud.dat中。学生的所有属性用一个结构进行描述。要求对“<<”、“>>”进行重载。选作要求:可将两门课都不及格的学生信息从链表或数组中删除,并另存入bad.dat中;将学生姓名和平均成绩抽取出来。以下程序测试结果供参考(此处不列举)设计思路建立两个类,并建立一个for循环来实现菜单的选择功能。使用链表储存输入的信息,当选择查找与删除数据时,通过链表来寻找用户要寻找的数据。开始开始输入学生信息结束功能选择Y输入0?N菜菜单菜单功能选择增加原始记录保存原始文件显示各种文件查找学生成绩删除原始记录修改学生信息结束程序运行实现代码#include<iostream>#include<fstream>#include<string.h>#include<conio.h>usingnamespacestd;classStudent{public: charname[20]; charId[20]; intCnum; intMnum; intsum; Student*Next; voidInput() { cout<<"\t\t名字:";cin>>name; cout<<"\t\t学号:";cin>>Id; cout<<"\t\t数学:";cin>>Cnum; cout<<"\t\t语文:";cin>>Mnum; sum=(Cnum+Mnum)/2; } voidReadFile(istream&in) {in>>name>>Id>>Cnum>>Mnum>>sum;} voidShow() {cout<<name<<"\t"<<Id<<"\t"<<Cnum<<"\t"<<Mnum<<"\t"<<sum<<"\t"<<endl;}};classStudentmassage{public: Studentmassage(); ~Studentmassage(); voidShowMenu(); voidFind(); voidSave(); voidModifyItem(); voidRemoveItem(); voidSwap(Student*,Student*); voidSort(); intListCount(); voidDisplay() { cout<<"姓名\t学号\t语文\t数学\t平均"<<endl; for(Student*p=Head->Next;p!=End;p=p->Next) p->Show(); cout<<"请按任意键"; getch(); } voidAddItem() { End->Input(); End->Next=newStudent; End=End->Next; cout<<"添加成功!"<<endl; cout<<"请按任意键"; getch();}private: Student*Head,*End; ifstreamin; ofstreamout; Student*FindItem(char*name) { for(Student*p=Head;p->Next!=End;p=p->Next) if(!strcmp(p->Next->name,name))returnp; returnNULL; } Student*FindID(char*Id) { for(Student*p=Head;p->Next!=End;p=p->Next) if(!strcmp(p->Next->Id,Id))returnp; returnNULL; }};Studentmassage::Studentmassage(){ Head=newStudent; Head->Next=newStudent; End=Head->Next; in.open("sort.txt"); if(!in) cout<<endl; else { while(!in.eof()) { End->ReadFile(in); if(End->name[0]=='\0')break; End->Next=newStudent; End=End->Next; } in.close(); }}Studentmassage::~Studentmassage(){ Save(); for(Student*temp;Head->Next!=End;) { temp=Head->Next; Head->Next=Head->Next->Next; deletetemp; } deleteHead,End;}voidStudentmassage::ShowMenu(){ cout<<"1.增加原始记录"<<endl; cout<<"2.显示各种文件"<<endl; cout<<"3.保存原始文件"<<endl; cout<<"4.查找学生成绩"<<endl; cout<<"5.删除原始记录"<<endl; cout<<"6.修改学生信息"<<endl; cout<<"0.结束程序运行"<<endl; cout<<"\n\t\t请选择:";}voidStudentmassage::Find(){ charname[20],Id[10]; intx; Student*p=NULL; cout<<"\t\t1.按姓名查找\n\t\t2.按学号查找"; cin>>x; switch(x) { case1:{cout<<"\t\t请输入要查找的学生姓名:";cin>>name; if(p=FindItem(name)) { p->Next->Show(); cout<<"请按任意键"; getch(); } else { cout<<"\t\t没有该姓名的学生!"<<'\n'<<endl; cout<<"请按任意键"; getch(); }}break; case2: { cout<<"\t\t输入要查找的学生学号:";cin>>Id; if(p=FindID(Id)) {p->Next->Show();cout<<"请按任意键";getch(); } else {cout<<"\t\t没有该学号的学生!"<<'\n'<<endl;cout<<"请按任意键";getch(); } }break; }}voidStudentmassage::ModifyItem(){ charname[20]; Student*p=NULL; cout<<"\t\t请输入要修改的人的姓名:";cin>>name; if(p=FindItem(name)) { cout<<"\t\t已找到学生的信息,请输入新的信息!"<<endl; p->Next->Input(); cout<<"成功!"<<endl; cout<<"请按任意键"; getch(); } else { cout<<"\t\t没有!"<<endl; cout<<"请按任意键"; getch(); }}voidStudentmassage::RemoveItem(){ charname[20]; Student*p=NULL,*temp=NULL; cout<<"\t\t输入要删除的学生姓名:"<<endl;cin>>name; if(p=FindItem(name)) { temp=p->Next; p->Next=p->Next->Next; deletetemp; cout<<"\t\t删除成功!"<<endl; cout<<"请按任意键"; getch(); } else { cout<<"\t\t没有!"<<endl; cout<<"请按任意键"; getch(); } }voidStudentmassage::Swap(Student*p1,Student*p2){ Student*temp=newStudent; strcpy(temp->name,p1->name); strcpy(temp->Id,p1->Id); temp->Cnum=p1->Cnum; temp->Mnum=p1->Mnum; temp->sum=p1->sum; strcpy(p1->name,p2->name); strcpy(p1->Id,p2->Id); p1->Cnum=p2->Cnum; p1->Mnum=p2->Mnum; p1->sum=p2->sum; strcpy(p2->name,temp->name); strcpy(p2->Id,temp->Id); p2->Cnum=temp->Cnum; p2->Mnum=temp->Mnum; p2->sum=temp->sum;}intStudentmassage::ListCount(){ if(!Head) return0; intn=0; for(Student*p=Head->Next;p!=End;p=p->Next) {n++;} returnn;}voidStudentmassage::Sort(){ cout<<"Sorting..."<<endl; Student*p=NULL,*p1=NULL,*k=NULL; intn=Studentmassage::ListCount(); if(n<2) return; for(p=Head->Next;p!=End;p=p->Next) for(k=p->Next;k!=End;k=k->Next) { if(p->sum>k->sum) {Studentmassage::Swap(p,k);} } cout<<"isok!"<<endl; getch(); return;}voidStudentmassage::Save(){out.open("sort.txt");for(Student*p=Head->Next;p!=End;p=p->Next)out<<p->name<<"\t"<<p->Id<<"\t"<<p->Cnum<<"\t"<<p->Mnum<<"\t"<<p->sum<<'\n';out.close();}intmain(){ intx,i=0; boolquit=false;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025晋城职业技术学院教师招聘考试题目及答案
- 2025江苏护理职业学院教师招聘考试题目及答案
- 2026山东省鲁信投资控股集团有限公司校园招聘30人建设笔试模拟试题及答案解析
- 2026年延安子长市人才中心就业见习建设笔试参考题库及答案解析
- 2026湖南张家界市永定区西溪坪街道办事处招聘公益性岗位人员1人建设笔试模拟试题及答案解析
- 2026湖北省崇阳县人才引进26人建设考试备考题库及答案解析
- 2025年安庆市郊区法院书记员招聘考试试题及答案解析
- 2026年度通榆县第二批面向社会公开招聘公益性岗位人员(128人)建设考试参考题库及答案解析
- 中国久远高新技术装备有限公司2026届春季招聘建设考试参考题库及答案解析
- 2026四川天府新区永兴卫生院招聘编外人员1人建设笔试备考试题及答案解析
- 招21人!大通县2026年公开招聘编外临聘工作人员考试参考试题及答案解析
- 2025年长沙市芙蓉区事业单位招聘笔试试题及答案解析
- 临床床头抬高30°-小角度大作用
- 2026陕西榆林市旅游投资集团有限公司招聘7人考试备考试题及答案解析
- 湖南省新高考教学教研联盟(长郡二十校联盟)2026届高三下学期3月联考试题 英语 含解析
- 2026年广州民航职业技术学院单招职业适应性测试题库含答案详解(基础题)
- 《安徽省建设工程概算费用定额》2025年版
- 幼儿园后勤业务培训制度
- 急诊科失血性休克急救要点
- 2025年高考(海南卷)地理试题(学生版+解析版)
- 空间不平等量化分析-洞察与解读
评论
0/150
提交评论