计算机专业学期三课程设计_第1页
计算机专业学期三课程设计_第2页
计算机专业学期三课程设计_第3页
计算机专业学期三课程设计_第4页
计算机专业学期三课程设计_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、面向对象程序设计课程设计报告姓 名 小精灵 学 号 20080808 指导教师 徐嘉斌 目录任务一1一、任务内容:1二、设计思路2三、实现代码2四、运行结果及分析3任务二4一、任务内容:4二、设计思路5三、实现代码5四、运行结果及分析6任务三6一、任务内容:6二、设计思路7三、实现代码7四、运行结果及分析9任务一一、 任务内容:完成内容:按照要求设计类(根据输出设计类)设计类就是根据数据封装的要求,抽象出适合的类。有如下测试程序和测试程序的输出结果,要求设计类Welcome。(1)测试程序如下:void main()Welcome we;Welcome you(we);you.Display(

2、);you.Set(“Thank you.”);cout<<you.Get()<<endl;you.talk();you.Display();(2)测试程序的输出结果如下:Welcome!Thank you.输入:How about you?输出:How about you?输入:Fine,thank you.输出:Fine,thank you.输入:OKAll rightGoodbye!OKGoodbye!Goodbye!注:后面5行为倒数第6行输出后接下去的输出内容。(3)设计类Welcome 的原则:1)在头文件welcome.h 中声明类2)在welcome.c

3、pp中实现类3)使用内联函数定义Display()函数4)演示文件名用学号作主名。二、 设计思路由给出的代码来构造此程序。开头部分,由Display输出Welcome,再用Get输出被Set存进的Thank you。利用循环函数While建立主体部分,输入OK时跳出循环。结尾部分,因为给出的代码中建立了两个对象,所以调用析构函数时可直接输出两个Goodbye。N开始输入OK输出输出“All rightGoodbye”结束Y三、 实现代码/Welcome.h#include <iostream>#include <string>using namespace std;cl

4、ass Welcomeprivate:char d100;public:inline void Display()cout<<d<<endl;void Set(char a)strcpy(d,a);char *Get()return d;void talk();Welcome();Welcome(const Welcome &a);Welcome()cout<<"Goodbye!"<<endl;Welcomedinline void Display()void Set(char a)char *Get()void ta

5、lk()Welcome()Welcome(const Welcome &w)Welcome()/121-2.cpp#include <iostream>#include <string>#include"Welcome.h"using namespace std;void main()Welcome we;Welcome you(we);you.Display();you.Set("Thank you.");cout<<you.Get()<<endl;you.talk();you.Display()

6、;/121-1.cpp#include <iostream>#include <string>#include"Welcome.h"void Welcome:talk()cout<<"输入:"cin.getline(d,100);while(strcmp(d,"OK")!=0)cout<<"输出:"<<d<<endl;cout<<"输入:"cin.getline(d,100);strcpy(d,"OK&

7、quot;);cout<<"All right"<<endl;cout<<"Goodbye!"<<endl;Welcome: Welcome(const Welcome &a)strcpy(d,a.d);strcpy(d,"Welcome!");四、 运行结果及分析图 1分析:前面先自动输出Welcome!和Thank you.,然后利用循环While函数重复用户的输入。采用了多文件结构,利用构造函数、析构函数和拷贝构造函数将结果输出。最后调用析构函数输出“Goodbye!”任务

8、二一、 任务内容:要求:为分数定义一个类。分数定义为两个整数之比。将分数表示为int类型的两个值:一个表示分子,一个表示分母。重载输入>>和输出运算符<<,分数以1/2、-15/29这样的形式来输入和输出,注意分子、分母可能包含负号。在分数类中,还应重载+、-、*、/运算符。应有一个函数,对分数进行约分与规格化,在规格化之后,分母一定是正的,并且分子分母的最大分约数为1,如对4/-8正规化之后表示成-1/2。仿照计算器的运算过程,采用计算器方式进行有关分数运算。二、 设计思路(1)约分的关键是求分子分母的最大公约数,用Gcm(m,n)表示求m与n的最大公约数:当n=0时

9、,Gcm(m,n)=m当n0时,Gcm(m,n)= Gcm(n,m%n)可用递归编程实现Gcm(m,n)。(2)分数的四则运算可按如下方式进行:(3)利用Reduction函数将负号全都归到分子身上。(4)Operation函数来实现当运算符输入错误时的提示。(5)当除数为0时,main函数中有实现显示除数不能为0的设置。NY开始输入除数、被除数和除号分母为0输出输出“不能为除数,请重新输入。结束分数计算器分数加法运算分数减法运算分数除法运算分数乘法运算异常处理报告自行约分负号转到分子为负数加括号三、 实现代码#include<iostream>#include<cmath&

10、gt;void Operation(char &index);using namespace std;class Fractionprivate:int fz;int fm;int Gcm(int m,int n);public:Fraction(int n=1,int d=1);Fraction();void Reduction();int GetFz()return fz;int GetFm()return fm;void SetFz(int n);void SetFm(int d);Fraction operator+(Fraction &a);Fraction oper

11、ator-(Fraction &a);Fraction operator*(Fraction &a);Fraction operator/(Fraction &a);friend ostream &operator<<(ostream &os,Fraction &s);friend istream &operator>>(istream &is,Fraction &s);int Fraction:Gcm(int m,int n)if(n=0)return m;else return Gcm(n,m%

12、n);void Fraction:Reduction()if(fm<0)fz=-fz;fm=-fm;int f=Gcm(abs(fz),fm);fz=fz/f;fm=fm/f;void Operation(char &index)for(;)cout<<"请输入运算符:"cin>>index;if(index='+'|index='-'|index='*'|index='/')break;else cout<<"请输入正确的运算符:"Frac

13、tion: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)char ch;int m,n;for(;)cout<<"请输入一个分数:"is>>m>>ch>>n;s.SetFz(m);s.SetFm(n);if(ch='/'&a

14、mp;&n!=0)break;else tryif(ch!='/') throw 1;if(n=0) throw 2;catch(int i) if(i=1)cout<<"输入格式错误,请重新输入!"<<i<<endl;else if(i=2)cout<<"分母为0,请重新输入!"<<endl;s.Reduction();return is;ostream &operator<<(ostream &os,Fraction &s)if(s

15、.fz<0)if(abs(s.fz)%s.fm=0)os<<"("<<s.fz/s.fm<<")"else if(abs(s.fz)>s.fm)os<<"("<<s.fz/s.fm<<"又"<<s.fz%s.fm<<"/"<<s.GetFm()<<")"else os<<"("<<s.GetFz()&l

16、t;<"/"<<s.GetFm()<<")"elseif(s.fz%s.fm=0)os<<s.fz/s.fm;else if(s.fz=0)os<<0;else if(s.fz>s.fm)os<<s.fz/s.fm<<"又"<<s.fz%s.fm<<"/"<<s.GetFm();else os<<s.GetFz()<<"/"<<s.GetFm

17、();return os;Fraction Fraction:operator+(Fraction &a) Fraction r; r.fz=fz*a.fm+fm*a.fz; r.fm=fm*a.fm; r.Reduction(); return r;Fraction Fraction:operator-(Fraction &a) Fraction r; r.fz=fz*a.fm-fm*a.fz; r.fm=fm*a.fm; r.Reduction(); return r;Fraction Fraction:operator*(Fraction &a)Fraction

18、r;r.fz=fz*a.fz;r.fm=fm*a.fm;r.Reduction();return r;Fraction Fraction:operator/(Fraction &a)Fraction r;r.fz=fz*a.fm;r.fm=fm*a.fz;r.Reduction();return r;int main()Fraction obj1,obj2,r;char index='+'int i;char o='y'for(;)if(o='y')cin>>obj1;Operation(index);cin>>o

19、bj2;if(index='+')r=obj1+obj2;else if(index='-')r=obj1-obj2;else if(index='*')r=obj1*obj2;else if(index='/')for(;)i=obj2.GetFz();if(i=0)cout<<"不能为除数,请重新输入。"<<endl;cin>>obj2;else break;r=obj1/obj2;cout<<obj1<<index<<obj2<

20、<"="<<r<<endl;cout<<"是否继续(y/n)"cin>>o;else break;return 0;四、 运行结果及分析图 2分析:第一个加法运算体现了约分的功能,第二个减法运算体现了假分数的自行转换功能,第三个乘法运算体现了给负数加括号的功能,第四个除法运算体现了自行将分母的负号提给分子的功能,以及最后五行体现了运算符错误的提示和分母为0的提示。任务三一、 任务内容:要求:能够对文件进行存储和读取。要求用一个结构记载学生属性,编写一个学生类以完成各种操作。具体要求如下:(1) 有10

21、个小学生,每个学生有数学、语文两门课,从键盘输入学生的学号、姓名及成绩,计算每个学生的平均成绩,将数据存入stud.dat中。(2) 学生的所有属性用一个结构进行描述。(3) 要求对“<<”、“>>”进行重载。(4) 选作要求:可将两门课都不及格的学生信息从链表或数组中删除,并另存入bad.dat中;将学生姓名和平均成绩抽取出来。(5) 以下程序测试结果供参考(此处不列举)二、 设计思路建立两个类,并建立一个for循环来实现菜单的选择功能。使用链表储存输入的信息,当选择查找与删除数据时,通过链表来寻找用户要寻找的数据。开始输入学生信息结束功能选择Y输入0?N菜单菜单功能

22、选择增加原始记录保存原始文件显示各种文件查找学生成绩删除原始记录修改学生信息结束程序运行三、 实现代码# include <iostream> # include <fstream> # include <string.h> #include <conio.h> using namespace std; class Student public: char name20; char Id20; int Cnum; int Mnum; int sum; Student * Next;void Input() cout<<"tt

23、名字:" cin>>name; cout<<"tt学号:" cin>>Id; cout<<"tt数学:" cin>>Cnum; cout<<"tt语文:" cin>>Mnum; sum=(Cnum+Mnum)/2; void ReadFile(istream & in) in>>name>>Id>>Cnum>>Mnum>>sum; void Show() cout<&l

24、t;name<<"t"<<Id<<"t"<<Cnum<<"t" <<Mnum<<"t"<<sum<<"t"<<endl; ; class Studentmassage public: Studentmassage(); Studentmassage(); void ShowMenu(); void Find();void Save(); void ModifyItem(); v

25、oid RemoveItem(); void Swap(Student *,Student *); void Sort(); int ListCount(); void Display() cout<<"姓名t学号t语文t数学t平均"<<endl;for(Student * p=Head->Next;p!=End;p=p->Next) p->Show(); cout<<"请按任意键" getch(); void AddItem() End->Input(); End->Next=new S

26、tudent; End=End->Next; cout<<"添加成功!"<<endl; cout<<"请按任意键" getch(); private: Student * Head,* End; ifstream in; ofstream out; Student *FindItem(char * name) for(Student * p=Head;p->Next!=End;p=p->Next) if(!strcmp(p->Next->name,name)return p; return

27、 NULL; Student *FindID(char * Id) for(Student * p=Head;p->Next!=End;p=p->Next) if(!strcmp(p->Next->Id,Id)return p; return NULL; ; Studentmassage:Studentmassage() Head=new Student; Head->Next=new Student; End=Head->Next; in.open("sort.txt"); if(!in) cout<<endl; else

28、while(!in.eof() End->ReadFile(in); if(End->name0='0')break; End->Next=new Student; End=End->Next; in.close(); Studentmassage:Studentmassage() Save(); for(Student * temp;Head->Next!=End;) temp=Head->Next; Head->Next=Head->Next->Next; delete temp; delete Head,End; vo

29、id Studentmassage:ShowMenu() cout<<"1.增加原始记录"<<endl; cout<<"2.显示各种文件"<<endl; cout<<"3.保存原始文件"<<endl; cout<<"4.查找学生成绩"<<endl; cout<<"5.删除原始记录"<<endl; cout<<"6.修改学生信息"<<e

30、ndl; cout<<"0.结束程序运行"<<endl; cout<<"ntt请选择:" void Studentmassage:Find() char name20 ,Id10; int x; Student * p=NULL; cout<<"tt 1.按姓名查找ntt 2.按学号查找" cin>>x; switch(x) case 1:cout<<"tt请输入要查找的学生姓名:"cin>>name; if(p=FindItem(

31、name) p->Next->Show(); cout<<"请按任意键" getch(); else cout<<"tt没有该姓名的学生!"<<'n'<<endl; cout<<"请按任意键" getch(); break; case 2: cout<<"tt输入要查找的学生学号:"cin>>Id; if(p=FindID(Id) p->Next->Show(); cout<<&q

32、uot;请按任意键" getch(); else cout<<"tt没有该学号的学生!"<<'n'<<endl; cout<<"请按任意键" getch(); break; void Studentmassage:ModifyItem() char name20; Student * p=NULL; cout<<"tt请输入要修改的人的姓名:"cin>>name; if(p=FindItem(name) cout<<"

33、;tt已找到学生的信息,请输入新的信息!"<<endl; p->Next->Input(); cout<<"成功!"<<endl; cout<<"请按任意键" getch(); else cout<<"tt没有!"<<endl; cout<<"请按任意键" getch(); void Studentmassage:RemoveItem() char name20; Student * p=NULL,*temp=

34、NULL; cout<<"tt输入要删除的学生姓名:"<<endl;cin>>name; if(p=FindItem(name) temp=p->Next; p->Next=p->Next->Next; delete temp; cout<<"tt删除成功!"<<endl; cout<<"请按任意键" getch(); else cout<<"tt没有!"<<endl; cout<<&

35、quot;请按任意键" getch(); void Studentmassage:Swap(Student *p1, Student *p2) Student *temp=new Student; 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,p

36、2->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; int Studentmassage:ListCount() if(! Head) return 0; int n=0; for(Studen

37、t * p=Head->Next;p!=End;p=p->Next) n+; return n; void Studentmassage:Sort() cout <<"Sorting."<<endl; Student *p=NULL,*p1=NULL,*k=NULL; int n=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-

38、>sum>k->sum) Studentmassage:Swap(p,k); cout <<"is ok !"<<endl; getch(); return; void Studentmassage:Save() out.open("sort.txt"); for(Student *p=Head->Next;p!=End;p=p->Next) out<<p->name<<"t"<<p->Id<<"t"<<p->Cnum<<&q

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论