计算机专业第三学期的课程设计.docx

上传人:夺命阿水 文档编号:1050442 上传时间:2024-03-04 格式:DOCX 页数:30 大小:218.26KB
返回 下载 相关 举报
计算机专业第三学期的课程设计.docx_第1页
第1页 / 共30页
计算机专业第三学期的课程设计.docx_第2页
第2页 / 共30页
计算机专业第三学期的课程设计.docx_第3页
第3页 / 共30页
计算机专业第三学期的课程设计.docx_第4页
第4页 / 共30页
计算机专业第三学期的课程设计.docx_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《计算机专业第三学期的课程设计.docx》由会员分享,可在线阅读,更多相关《计算机专业第三学期的课程设计.docx(30页珍藏版)》请在课桌文档上搜索。

1、面向对象程序设计课程设计报告姓名小精灵学号20230808指导教师徐嘉斌目录任务一错误!未定义书签。一、 任务内容:错误!未定义书签。二、 设计思绪错误!未定义书签。三、 实现代码错误!未定义书签。四、 运行成果及分析错误!未定义书签。任务二错误!未定义书签。一、 任务内容:错误!未定义书签。二、 设计思绪错误!未定义书签。三、 实现代码错误!未定义书签。四、 运行成果及分析错误!未定义书签。任务三错误!未定义书签。一、 任务内容:错误!未定义书签。二、 设计思绪错误!未定义书签。三、 实现代码错误!未定义书签。四、 运行成果及分析错误!未定义书签。任务一一、任务内容:完毕内容:按照规定设计类

2、(根据输出设计类)设计类就是根据数据封装的规定,抽象出适合的类。有如下测试程序和测试程序的输出成果,规定设计类Welcomeo(1)测试程序如下:voidmain()Welcomewe;Welcomeyou(we);you.DisplayO;you.Set(Thankyou.,);coutyou.Get()endl;you.talk();you.DisplayO;(2)测试程序时输出成果如下:Welcome!Thankyou.输入:HOWaboutyou?输出:Howaboutyou?输入:Fine,thankyou.输出:Fine,thankyou.输入:OKAllrightGoodbye!

3、OKGoodbye!Goodbye!注:背面5行为倒数第6行输出后接下去B输出内容。(3)设计类WeIComeB原则:1)在头文献WelCome.h中申明类2)在welcome,cpp中实现类3)使用内联函数定义DiSPlay()函数4)演示文献名用学号作主名。二、设计思绪由给出B代码来构造此程序。开头部分,由Display输出Welcome,再用Get输出被Set存进1向Thankyou。运用循环函数While建立主体部分,输入OK时跳出循环。结尾部分,由于给出的J代码中建立了两个对象,因此调用析构函数时可直接输出两个Goodbye0三、实现代码/Welcome.h#include incl

4、ude using namespace std;voidtalk();Welcome();Welcome(constWelcome&a);-Welcome()coutGoodbye!endl;);WelcomedinlinevoidDisplayOvoidSet(chara)char*Get()voidtalk()classWelcomeprivate:/121-2.cppChardllOO;#includepublic:#includeinlinevoidDisplayOcoutdendl;);#includeWelcome.hMvoidSet(chara)strcpy(d,a););usi

5、ngnamespacestd;char*Get()returnd;);void main()Welcome we;Welcome you(we);you.Display();you.Set(Thank you.);coutyou.Get()endl;you.talk();you.Display();)/121-l.cpp#include #include #includeWelcome.hvoid Welcome: :talk()(CoUt输入:;cin.getline(d,100);while(strcmp(d,OK)!=0)(COUtv输出:dendl;CoUtv输入:”;cin.getl

6、ine(d,100););strcpy(d,OK,);cout,A11right,endl;cout,Goodbye!endl;1Welcome:Welcome(constWelcome&a)(strcpy(d,a.d);strcpy(d,Welcome!);)四、运行成果及分析c.C:DocuertsandSettingsAdinis:Tator桌面Debug121一1exe”Weleone!Ihankyou.输入:Howareyou?施(出:Howareyou?施入:Fine,thankyou.瑜出:Fine,thankyou.输入:OKAllrightGoodbye?OKGoodbye,

7、Goodbye?Pressanykeytocontinue分析:前面先自动输出WeICome!和Thankyou.,然后运用循环While函数反复顾客的输入。采用了多文献构造,运用构造函数、析构函数和拷贝构造函数将成果输出。最终调用析构函数输出“Goodbye!”任务二一、任务内容:规定:为分数定义一种类。分数定义为两个整数之比。将分数表达为int类型的两个值:一种表达分子,一种表达分母。重载输入和输出运算符分数以12-1529这样的I形式来输入和输出,注意分子、分母也许包括负号。在分数类中,还应重载+、-、*、/运算符。应有一种函数,对分数进行约分与规格化,在规格化之后,分母一定是正0,并且

8、分子分母B最大分约数为1,如对4/-8正规化之后表达成-1/2。仿照计算器B运算过程,采用计算器方式进行有关分数运算。二、设计思绪(1)约分的关键是求分子分母的最大公约数,用Gcm(m,n)表达求In与n时最大公约数:当n=0时,Gcm(m,n)=m当n0时,Gcm(m,n)=Gcm(n,m%n)可用递归编程实现GCm(m,n)0(2)分数的四则运算可按如下方式进行:acad+bcacadbCajCacacadbdbdbdbdbdbdbdbe(3)运用RedUCtion函数将负号全都归到分子身上。(4)Operation函数来实现当运算符输入错误时的提醒。(5)当除数为O时,IIIain函数中

9、有实现显示除数不能为O的设置。三、实现代码include#includevoidOperation(char&index);usingnamespacestd;classFraction(private:intfz;intfm;intGcm(intm,intn);Fraction(intn=Lintd=1);-Fraction();voidReduction();intGetFz()returnfz;);intGetFm()returnfm;voidSetFz(intn);voidSetFm(intd);Fractionoperator+(Fraction&a);Fractionoperato

10、r-(Fraction&a);Fractionoperator*(Fraction&a);Fractionoperator(Fraction&a);public:friendostream&operator(ostreamcinindex;&os,FraCtiOn&s);friendi stream&operator(istream&is,Fraction &s);;int Fraction:Gcm(int m,int n)(if(n=O)return m;else retum Gcm(n,m%n);)void Fraction:Reduction()(if(fmO)fz=-fz;fm=-fm

11、;)int f=Gcm(abs(fz),fm);fz=fzf;fm=fmf;)void Operation(char &index)for(;)if(index=,+index=-index=-*,index=7,)break;elsecout ”请输入对时H勺运算符:“;)Fraction:Fraction(int n,int d):fz(n),fm(d) Reduction();)void Fraction:SetFz(int n)fz=n;)void Fraction:SetFm(int d)fm=d;)istream &operator(istream &is,Fraction &s)

12、(char ch;int m,n;for(;)(CoUtmchn;s.SetFz(m);coutv”请输入运算符:;s.SetFm(n);if(ch=/&n!=O)break;else tryif(ch!=V) throw 1;if(n=0) throw 2;1catch(int i) if(i=l)COUt输入格式错误,请重新 输入!VViVVendl;else if(i=2)CoUI分母为0,请重新输 入!endl;)1)s.Reduction();return is;ostream &operator(ostream &os,Fraction &s)(if(s.fzO)(if(abs(s

13、.fz)%s.fm=O)os,(s.fzs.fms.fm)os,(s.fzs.fm 又 s.fz%s.fm,7s.GetFm(); else os(s.GetFz()7s.GetFm();)elseif(s.fz%s.fm=O) oss.fzs.fm;else if(s.fz=O)oss.fm)oss.fzs.fm又vvs.fz%s.fmvvvs.GetFm();elseFractionFraet沁n:OPeratOr(Fraction&a)oss.GetFz()7objl;Operation(index);cinobj2;if(index=,+r)r=objl+obj2;else if(in

14、dex=-)r=obj 1 -obj2;else if(index=*)r=objl*obj2;else if(index=Z)(for(;)(i=obj2.GetFz();CoUIVV不能为除数 请重新输入。obj2;(else break;)r=objlobj2;)coutobj 1 indexobj2=re ndl;COUto;)else break;return 0;四、运行成果及分析cC:Docuentsand$6十七111854&1111.51门上0工桌面口61)118121-26*6/8/34 1数:+数l 1 5 333120z-1*8重Z0入y 5 Izy- Ilyl - y

15、4W旧 4俞久-:xl篡:*期-1/必:/蜘=1篡枷鹦“八R刀=I%R2刀=继入入入5继入欠为人 2+否否Iz否Iz否则输就 请请请1/是请请请IJ是请请请-是请请请”进行重载。(4)选作规定:可将两门课都不及格的学生信息从链表或数组中删除,并另存入bad.dat中;将学生姓名和平均成绩抽取出来。(5)如下程序测试成果供参照(此处不列举)二、设计思绪建立两个类,并建立一种for循环来实现菜单B选择功能。使用链表储存输入B信息,当选择查找与删除数据时,通过链表来寻找顾客要寻找的数据。三、实现代码charname20;# includecharId20;# includeintCnum;# inc

16、ludeintMnum;#includeintsum;usingnamespacesld;Student*Next;voidInput()classStudentcoutname;public:coutId;void Save();CoUtVV”添力口 成功!endl;coutCnum;CoUIMnum;sum=(Cnum+Mnum)2;)voidReadFile(istream&in)innameIdCnumMnumsum;voidShow()coutname,tId,tCnum,t,rMnumtsumtendl;);classStudentmassage(public:Studentmas

17、sageO;-StudentmassageO;voidShowMenu();voidFind();voidModifyltem();voidRemoveItemO;voidSwap(Studenl*,Student*);voidSort();intListCount();voidDisplayO(COUl姓名学号t语文V数学平均,Next;p!=End;p=p-Next)p-Show();CoUtInput();End-Next=newStudent;End=End-Next;CoUtNext!=End;p=p-Next)if(!strcmp(p-Next-name,name)retumP;r

18、eturnNULL;1Student*FindID(char*Id)(fbr(Studentp=Head;p-Next!=End;p=p-Next)if(!strcmp(p-Next-Id,Id)returnp;);StudentmassageiiStudentmassageO(Head=newStudent;Head-Next=newStudent;End=Head-Next;in.open(,sort.txt,);if(!in)coutReadFile(in);if(End-nameO=,O)break;End-Next=newStudent;return NULL;in.close();

19、End=End-Next;Studentmassageii-StudentmassageO(Save();for(Student*temp;Head-Next!=End;)(temp=Head-Next;Head-Next=Head-Next-Next;deletetemp;1deleteHead,End;)voidStudentmassageiiShowMenuO(CoUtvL增长原始记录endl;COUt2.显示多种文献endl;CoUt”3.保留原始文献”endl;COUt5.删除原始记录endl;COUtVV6.修改学生信息endl;COUt0.结束程序运行vvendl;COUtVVn

20、tt请选择:;)voidStudentmassageiiFindO(charname201,IdIO;intx;Student*p=NULL;COUtx;switch(x)(caseLcoutname;if(p=Findltem(name)COUtVV4.查找学生成绩vNext-Show();COUt”请按任意键”;elsegetch();1couttt没有该学号的学生!else,nendl;(CoUtVV”请按任意键”;couttt没有该姓名的学生!getch();,nendl;COUtVV”请按任意键”;(break;getch();)(break;case2:voidStudentmas

21、sage:ModifyItemOcoultt输入要查找的学生学号:charname201;cinId;Student*p=NULL;if(p=FindID(Id)(coutNext-Show();if(p=Findltem(name)COUt”请按任意键”;(getch();couttt已找到学生的J信息,请输入)新口勺信息!”vNext;p-Next-Input();CoUlv”成功! ,endl;COUl ”请按任意键”;getch();)else(coul,tt 没有!endl;COUt”请按任意键”;getch();)1void Studenlmassage: RemoveItemO(

22、char name20;Student * p=NULL,*temp=NULL;coutNext=p-Next-Next;delete temp;cout,tt 删除成功!vendl;CoUt ”请按任意键”;getch();)else(cout,tt 没有!,Vname,p1-name);strcpy(temp-Id,pl-Id);intn=O;temp-Cnum=p1-Cnum;for(Student*temp-Mnum=p1-Mnum;p=Head-Next;p!=End;p=p-Next)temp-sum=p1-sum;n+;Istrcpy(pl-name,p2-name);retur

23、nn;strcpy(pl-Id,p2-Id);p1-Cnurn=p2-Cnum;p1-Mnum=p2-Mnum;p1-sum=p2-sum;voidStudentmassage:Sort()strcpy(p2-name,temp-name);strcpy(p2-Id,temp-Id);cout,Sorting.,Cnum=temp-Cnum;Studentp2-Mnum=temp-Mnum;*p=NULL,*p1=NULL,*k=NULL;p2-sum=temp-sum;intn=Studentmassage:ListCount();)if(nNext;p!=End;p=p-Next)intS

24、tudentmassage:ListCount()(for(k=p-Next;k!=End;k=k-Next)/Iif(!Head)if(p-sumk-sum)return O;StUdemmaSSage:SWaP(P,k);cout is ok ! Next ;p!=End ;p=p-Next)outnametId,t,Cnu mt,Mnum,t,sumn;out.close();)bool quit=false;cout,endl;Studentmassage Grade;coutx;switch(x)(case O:quit=true;break;case 1 :Grade. Addlt

25、em();break;case 2:Grade.Display();break;case 3:Grade.Sort();break;case4:Grade.Find();break;intmain()case5:Grade.RemoveItem();break;(case6:Grade.ModifyItem();break;intx,i=0;returnO;四、运行成果及分析录善心行记文文成记信运始.生始生序原各量加一除改束增显保查删修结请选择:图3-1功能选择,*C:Docu三entsandSettingsAdBinistrator桌面Debu匕121-3exe录行 记文文成记信运 始加寨生

26、序 原各愿于 a除改束 增显保高修结添加成功, 请按任意键图3-2增长成绩r,-C:DocentsandSettingSAdsinisatrator臬面Debug121-3.exe-录e番心仃il原各聚加一除改束增显保查耨结Sorting.isokI请选择:3原各ii到: 选建字 富己名:6号修改的人的姓名Z平生的信息,请输入新的信息,图3-4修改信息*CDocu三entsandSettingSAdainistrator桌面Debug121-3.exe原各季加一除改束增显保高修结姓名学号qXbei01UXb0102BXb0103rXbaL04tXbM05yXb01061.iXb0107iXbg

27、l08DXb0109请按任意键Xbll0学888735492娄858844457揖86673654967577363355均&I372281099648588374356图3-5信息显示*C:DocuentsandSottingsAd*uistratorDcbug121-3.cxc*“ Xbel01请按任意犍l请始人要查找的学生姓名788883C:DocuBentsandSeattingSAdain返trator桌面Debug121-3exe飞显保查删修结原各愿于聚程 加一除改束录誉心行 记文文忠记信运 始物墨序请选择:5输入要删除的学生姓名:“删除成功,请按任意键图3-6删除信息分析:进入菜

28、单界面后,可以选择1-6六个功能。任意功能进行后都能通过任意键来进行循环。通过1、4、5、6来增长、查找、删除和更改学生信息。对应文献夹里会自动保留对应信息。总结或感悟本次课程设计耗时10天,过程中我颇有感悟。在设计任务一时,我颇有信心,也花了很快的时间运用拷贝构造函数和析构函数完毕了该任务,但在碰到任务二0时候,遭遇了诸多挫折。任务二的计算器设计中需要实现相称多0功能,起初,在实现公约数和负号加到分子上的功能时,还算顺利,而后来,越来越多的代码扰乱了思维,导致心烦意乱,失去耐心。而也通过一天一天的更改和尝试,我也逐渐完毕一段又一段复杂的代码,实现一种又一种功能,而到最终,我也发现,本来任务二

29、并没有想象中那么繁琐,当所有代码展目前眼前时,完全弄得清晰哪段是用来实现哪个功能,以及各个函数0作用与应用。最费时B是任务三。对于任务三,功能更为繁琐不说,其知识点我也是不怎么牢固。我尝试了很久,却并没有播种,更不用说开花成果了。我在网上不停地探索思绪,而后来,我发现了该段代码其实也没有想象中那么天马行空,其实静下心来看看他人完毕后的完整代码,我也发现本来大概我也能懂。但最终,本次课程设计任务三我并没有很原创地完毕,但愿在接下来的时间里我能努力补回这些知识点。课程设计需要大量的耐心和动脑能力,也需要诸多的J知识基础,我想,我最缺乏的是知识基础这块,因此我得在课余时间努力补回自己0知识点,让自己后来进行课程设计时能更为顺畅,也不会再被繁琐所懊恼。

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

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号