计算机专业学期三课程设计.docx
- 文档编号:11828881
- 上传时间:2023-04-03
- 格式:DOCX
- 页数:31
- 大小:59.44KB
计算机专业学期三课程设计.docx
《计算机专业学期三课程设计.docx》由会员分享,可在线阅读,更多相关《计算机专业学期三课程设计.docx(31页珍藏版)》请在冰豆网上搜索。
计算机专业学期三课程设计
《面向对象程序设计》
课
程
设
计
报
告
姓名小精灵
学号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:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机专业 学期 课程设计