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

上传人:b****3 文档编号:6806957 上传时间:2023-05-10 格式:DOCX 页数:31 大小:59.44KB
下载 相关 举报
计算机专业学期三课程设计.docx_第1页
第1页 / 共31页
计算机专业学期三课程设计.docx_第2页
第2页 / 共31页
计算机专业学期三课程设计.docx_第3页
第3页 / 共31页
计算机专业学期三课程设计.docx_第4页
第4页 / 共31页
计算机专业学期三课程设计.docx_第5页
第5页 / 共31页
计算机专业学期三课程设计.docx_第6页
第6页 / 共31页
计算机专业学期三课程设计.docx_第7页
第7页 / 共31页
计算机专业学期三课程设计.docx_第8页
第8页 / 共31页
计算机专业学期三课程设计.docx_第9页
第9页 / 共31页
计算机专业学期三课程设计.docx_第10页
第10页 / 共31页
计算机专业学期三课程设计.docx_第11页
第11页 / 共31页
计算机专业学期三课程设计.docx_第12页
第12页 / 共31页
计算机专业学期三课程设计.docx_第13页
第13页 / 共31页
计算机专业学期三课程设计.docx_第14页
第14页 / 共31页
计算机专业学期三课程设计.docx_第15页
第15页 / 共31页
计算机专业学期三课程设计.docx_第16页
第16页 / 共31页
计算机专业学期三课程设计.docx_第17页
第17页 / 共31页
计算机专业学期三课程设计.docx_第18页
第18页 / 共31页
计算机专业学期三课程设计.docx_第19页
第19页 / 共31页
计算机专业学期三课程设计.docx_第20页
第20页 / 共31页
亲,该文档总共31页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

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

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

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

计算机专业学期三课程设计

 

《面向对象程序设计》

 

 

姓名小精灵

学号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();

you.Set(“Thank you.”);

cout<

you.talk();

you.Display();

}

(2)测试程序的输出结果如下:

Welcome!

Thank you.

输入:

How about you?

输出:

How about you?

输入:

Fine,thank you.

输出:

Fine,thank you.

输入:

OK

All right

Goodbye!

OK

Goodbye!

Goodbye!

注:

后面 5 行为倒数第 6 行输出后接下去的输出内容。

(3)设计类 Welcome 的原则:

1)在头文件 welcome.h 中声明类

2)在 welcome.cpp 中实现类

3)使用内联函数定义 Display()函数

4)演示文件名用学号作主名。

 

1

浙江理工大学科技与艺术学院机电系课程设计报告

二、设计思路

由给出的代码来构造此程序。

开头部分,由 Display 输出 Welcome,再用

Get 输出被 Set 存进的 Thankyou。

利用循环函数 While 建立主体部分,输入

OK 时跳出循环。

结尾部分,因为给出的代码中建立了两个对象,所以调用析

构函数时可直接输出两个 Goodbye。

开始

Welcome

输入

 

OK

 

Y

d

inline void Display()

void Set(char a[])

char *Get()

N

 

输出

输出“All right

Goodbye”

void talk()

Welcome()

Welcome(const Welcome

&w)

 

结束

 

三、实现代码

//Welcome.h

#include 

#include 

using namespace std;

class Welcome{

private:

char d[100];

public:

inline void Display(){cout<

void Set(char a[]){strcpy(d,a);};

char *Get(){return d;};

void talk();

Welcome(){};

Welcome(const Welcome &a);

~Welcome(){cout<<"Goodbye!

"<

};

~Welcome()

 

//121-2.cpp

#include 

#include 

#include"Welcome.h"

using namespace std;

void main()

{

Welcome we;

Welcome you(we);

you.Display();

you.Set("Thank you.");

cout<

you.talk();

you.Display();

}

2

 

//121-1.cpp

#include 

#include 

#include"Welcome.h"

浙江理工大学科技与艺术学院机电系课程设计报告

};

strcpy(d,"OK");

cout<<"All right"<

cout<<"Goodbye!

"<

void Welcome:

:

talk()

{

cout<<"输入:

";

cin.getline(d,100);

while(strcmp(d,"OK")!

=0)

{

cout<<"输出:

"<

cout<<"输入:

";

cin.getline(d,100);

四、运行结果及分析

}

Welcome:

:

 Welcome(const Welcome &a)

{

strcpy(d,a.d);

strcpy(d,"Welcome!

");

}

 

图 1

分析:

前面先自动输出 Welcome!

和 Thank you.,然后利用循环 While 函数重复

用户的输入。

采用了多文件结构,利用构造函数、析构函数和拷贝构造函数将

结果输出。

最后调用析构函数输出“Goodbye!

 

3

浙江理工大学科技与艺术学院机电系课程设计报告

 

任务二

一、任务内容:

要求:

为分数定义一个类。

分数定义为两个整数之比。

将分数表示为 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 的设置。

开始

分数加法运算

 

分数减法运算

分数乘法运算

分数除法运算

输入除数、

被除数和除

 

分母为

输出“不能为除

数,请重新输入。

Y

异常处理报告

N

0

自行约分

负号转到分子

为负数加括号

输出

 

结束

4

浙江理工大学科技与艺术学院机电系课程设计报告

 

三、实现代码

#include

#include

void Operation(char &index);

using namespace std;

class Fraction

{

private:

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 operator-(Fraction &a);

Fraction operator*(Fraction &a);

Fraction operator/(Fraction &a);

friendostream&operator<<(ostream

&os,Fraction &s);

friendistream&operator>>(istream

&is,Fraction &s);

};

int Fraction:

:

Gcm(int m,int n)

{

if(n==0)

return m;

else return Gcm(n,m%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<<"请输入正确的运算符:

";

}

}

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)

{

char ch;

int m,n;

for(;;)

{

cout<<"请输入一个分数:

";

is>>m>>ch>>n;

s.SetFz(m);

s.SetFm(n);

if(ch=='/'&&n!

=0)

break;

else {

try{

if(ch!

='/') throw 1;

if(n==0) throw 2;

}

catch(int i) {

if(i==1)

cout<<"输入格式错误,请重

新输入!

"<

else if(i==2)

cout<<"分母为 0,请重新输入!

"<

5

 

}

}

}

s.Reduction();

return is;

浙江理工大学科技与艺术学院机电系课程设计报告

r.fm=fm*a.fm;

r.Reduction();

return r;

}

Fraction Fraction:

:

operator*(Fraction &a)

}

ostream &operator<<(ostream &os,Fraction

&s)

{

if(s.fz<0)

{

if(abs(s.fz)%s.fm==0)

os<<"("<

else if(abs(s.fz)>s.fm)

os<<"("<

"<

else

os<<"("<

}

else{

if(s.fz%s.fm==0)

os<

else if(s.fz==0)

os<<0;

else if(s.fz>s.fm)

os<

又"<

else

os<

}

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;

{

Fraction 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>>obj2;

if(index=='+')

r=obj1+obj2;

else if(index=='-')

r=obj1-obj2;

else if(index=='*')

r=obj1*obj2;

else if(index=='/')

{

 

6

浙江理工大学科技与艺术学院机电系课程设计报告

for(;;)

{

i=obj2.GetFz();

}

cout<

if(i==0)

ndl;

{

cout<<"不能为除数,

cout<<"是否继续(y/n)";

cin>>o;

请重新输入。

"<

}

cin>>obj2;

}

else break;

else break;

}

return 0;

}

r=obj1/obj2;

四、运行结果及分析

}

 

图 2

分析:

第一个加法运算体现了约分的功能,第二个减法运算体现了假分数的自

行转换功能,第三个乘法运算体现了给负数加括号的功能,第四个除法运算体

现了自行将分母的负号提给分子的功能,以及最后五行体现了运算符错误的提

示和分母为 0 的提示。

 

7

浙江理工大学科技与艺术学院机电系课程设计报告

 

任务三

一、任务内容:

要求:

能够对文件进行存储和读取。

要求用一个结构记载学生属性,编写一个

学生类以完成各种操作。

具体要求如下:

(1) 有 10 个小学生,每个学生有数学、语文两门课,从键盘输入学生的学号、

姓名及成绩,计算每个学生的平均成绩,将数据存入 stud.dat 中。

(2) 学生的所有属性用一个结构进行描述。

(3) 要求对“<<”、“>>”进行重载。

(4) 选作要求:

可将两门课都不及格的学生信息从链表或数组中删除,并另

存入 bad.dat 中;将学生姓名和平均成绩抽取出来。

(5) 以下程序测试结果供参考(此处不列举)

 

二、设计思路

建立两个类,并建立一个 for 循环来实现菜单的选择功能。

使用链表储存

输入的信息,当选择查找与删除数据时,通过链表来寻找用户要寻找的数据。

 

 

 

菜单功能选择

 

增加原始记录

显示各种文件

保存原始文件

查找学生成绩

开始

 

功能选择

 

输入

学生信息

删除原始记录

输入 0?

N

修改学生信息

Y

结束程序运行

结束

 

8

浙江理工大学科技与艺术学院机电系课程设计报告

 

三、实现代码

# include 

# include 

# include 

#include 

using namespace std;

class Student

{

public:

char name[20];

char Id[20];

int Cnum;

int Mnum;

int sum;

Student * Next;

void Input()

{

cout<<"\t\t 名字:

"; cin>>name;

cout<<"\t\t 学号:

"; cin>>Id;

cout<<"\t\t 数学:

"; cin>>Cnum;

cout<<"\t\t 语文:

"; cin>>Mnum;

sum=(Cnum+Mnum)/2;

}

void ReadFile(istream & in)

{

in>>name>>Id>>Cnum>>Mnum>>sum; }

void Show()

{

cout<

<

};

class Studentmassage

{

public:

Studentmassage();

~Studentmassage();

void ShowMenu();

void Find();

void Save();

void ModifyItem();

void RemoveItem();

void Swap(Student *,Student *);

void Sort();

int ListCount();

void Display()

{

cout<<"姓名\t 学号\t 语文\t 数学\t 平均

"<

for(Student       *       p=Head-

>Next;p!

=End;p=p->Next)

p->Show();

cout<<"请按任意键";

getch();

}

void AddItem()

{

End->Input();

End->Next=new Student;

End=End->Next;

cout<<"添加成功!

"<

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 NULL;

}

Student *FindID(char * Id)

{

for(Student      *      p=Head;p-

>Next!

=End;p=p->Next)

if(!

strcmp(p->Next->Id,Id))return p;

9

 

return NULL;

}

浙江理工大学科技与艺术学院机电系课程设计报告

cout<<"6.修改学生信息"<

cout<<"0.结束程序运行"<

};

Studentmassage:

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

当前位置:首页 > 小学教育 > 语文

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

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