C++作业2
2016-03-27 23:58
351 查看
一、阅读、运行程序后,按要求增加类的功能 #include <iostream> using namespace std; class Time { public: void set_time( ); void show_time( ); void add_a_sec() //增加1秒钟 { sec+=1; if(sec>=60) { add_a_minute(); sec%=60; } } void add_a_minute() //增加1分钟 { minute+=1; if(minute>=60) { add_an_hour(); minute%=60; } } void add_an_hour() //增加1小时 { hour+=1; } void add_seconds(int n);//增加n秒钟 void add_minutes(int n);//增加n分钟 void add_hours(int n); //增加n小时 private: bool is_time(int, int, int); //这个成员函数设置为私有的,是合适的,请品味 int hour; int minute; int sec; }; void Time::add_seconds(int n)//增加n秒 { int t; sec+=n; if(sec>=60) { t=sec/60; add_minutes(t); sec%=60; } } void Time::add_minutes(int n) //增加n分钟 { int t; minute+=n; if(minute>=60) { t=minute/60; add_hours(t); minute%=60; } } void Time::add_hours(int n) //增加n小时 { hour+=n; } void Time::set_time( ) { char c1,c2; cout<<"请输入时间(格式hh:mm:ss)"; while(1) { cin>>hour>>c1>>minute>>c2>>sec; if(c1!=':'||c2!=':') cout<<"格式不正确,请重新输入"<<endl; else if (!is_time(hour,minute,sec)) cout<<"时间非法,请重新输入"<<endl; else break; } } void Time::show_time( ) { cout<<hour<<":"<<minute<<":"<<sec<<endl; } bool Time::is_time(int h,int m, int s) { if (h<0 ||h>24 || m<0 ||m>60 || s<0 ||s>60) return false; return true; } int main( ) { Time t1; t1.set_time( ); t1.add_a_sec( ); cout<<"时间增加一秒后变为:"; t1.show_time( ); t1.add_a_minute( ) ; cout<<"时间增加一分后变为:"; t1.show_time( ); t1.add_an_hour( ) ; cout<<"时间增加一小时后变为:"; t1.show_time( ); int n; t1.set_time( ); cout<<endl<<"n的值为:"; cin>>n; t1.add_seconds(n); cout<<"时间增加"<<n<<"秒后变为:"; t1.show_time( ); t1.add_minutes(n); cout<<"时间增加"<<n<<"分后变为:"; t1.show_time( ); t1.add_hours(n); cout<<"时间增加"<<n<<"小时后变为:"; t1.show_time( ); return 0; } 三、项目名称:Book #include<iostream> #include<string> using namespace std; class Book { public: void setBook(char n[100],char w[100],char p[100],int pr,int nu,int N); void borrow(); void restore(); void print(); void set_NO(int N); int get_NO(); private: char name[100],writer[100],publicer[100]; int price,number,NO; }; void Book::setBook(char n[100],char w[100],char p[100],int pr,int nu,int N)//给书籍的数据成员赋值 { strcpy(name,n); strcpy(writer,w); strcpy(publicer,p); price=pr; number=nu; NO=N; } void Book::borrow()//借书 { number--; } void Book::restore()//还书 { number++; } void Book::print()//输出有关书籍的信息 { cout<<"书名:"<<name<<endl; cout<<"作者:"<<writer<<endl; cout<<"出版社:"<<publicer<<endl; cout<<"价格:"<<price<<endl; cout<<"数量:"<<number<<endl; cout<<"书号:"<<NO<<endl; } void Book::set_NO(int N) { NO=N; } int Book::get_NO() { return NO; } int main() { Book b; b.setBook("瓦尔登湖","梭罗","北京联合公司出版",16,3,27); b.borrow(); b.print(); b.restore(); b.print(); b.set_NO(5); b.print(); return 0; } 四、项目名称:学生成绩 #include<iostream> #include<string> using namespace std; class Stu { public: void setStudent(char n[20],float c,float m); void show(); void setName(char n[20]); char *getName(); int average(); int Sum(); private: char name[20]; //学生姓名 float chinese; //语文成绩 float math; //数学成绩 }; void Stu::setStudent(char n[20],float c,float m) { strcpy(name,n); chinese=c; math=m; } void Stu::show() { cout<<"Name:"<<name<<endl; cout<<"Score:"<<chinese<<" "<<math<<endl; cout<<"average:"<<average()<<" "<<"sum:"<<Sum()<<endl<<endl; } void Stu::setName(char n[20]) { strcpy(name,n); } char *Stu::getName() { return name; } int Stu::average() { return (chinese+math)/2; } int Stu::Sum() { return(chinese+math); } int main() { Stu s1,s2; s1.setStudent("Lin daiyu", 98, 96); //对象置初值 s2.setStudent("Jia baoyu", 90, 88); //对象置初值 s1.show();//打印信息 s2.show();//打印信息 s1.setName("xue baochai");//重新置p1对象的名字 s1.show(); cout<<"s1.Name: "<<s1.getName()<<endl;//打印对象的名字 cout<<"s1.average: "<<s1.average()<<endl;//打印对象的成绩 return 0; } 五、项目名称:分数类 #include<iostream> using namespace std; class CFraction { private: int nume; // 分子 int deno; // 分母 public: CFraction(int nu,int de); //构造函数,初始化用 void set(int nu,int de); //置值,改变值时用 void input(); //按照"nu/de"的格式,如"5/2"的形式输入 void simplify(); //化简(使分子分母没有公因子) void amplify(int n); //放大n倍,如2/3放大5倍为10/3 void output(int style); //输出:以8/6为例,style为0时,原样输出8/6; //style为1时,输出化简后形式4/3; //style为2时,输出1(1/3)形式,表示一又三分之一; //style为3时,用小数形式输出,如1.3333; //默认方式0 }; CFraction::CFraction(int nu,int de) { nume=nu;deno=de; } void CFraction::set(int nu,int de) { nume=nu; deno=de; cout<<nume<<"/"<<deno<<endl; } void CFraction::input() { char c; cin>>nume>>c>>deno; } void CFraction::simplify() { int i,max; max=nume>deno?(nume/2+1):(deno/2+1); for(i=2;i<max;i++) if(nume%i==0&&deno%i==0) { nume/=i;deno/=i; } } void CFraction::amplify(int n) { nume*=n; simplify(); } void CFraction::output(int style) { double t; if(style==0)cout<<nume<<"/"<<deno<<endl; else if(style==1) { simplify(); cout<<nume<<"/"<<deno<<endl; } else if(style==2) { simplify(); t=nume/deno; cout<<t<<"("<<nume-deno*t<<"/"<<deno<<")"<<endl; } else if(style==3) { cout<<nume*1.0/deno<<endl; } } int main() { CFraction c1(0,1); cout<<"关于c1:"<<endl<<"原样:"; c1.output(0); cout<<"改变c1:"<<endl<<"原样:"; c1.set(2,7); cout<<"输入c1:"<<endl<<"输入分数(m/n):"; c1.input(); cout<<"原样:"; c1.output(0); CFraction c2(8,6); cout<<"关于c2:"<<endl<<"原样:"; c2.output(0); cout<<"化简形式:"; c2.output(1); cout<<"带分数形式:"; c2.output(2); cout<<"近似值:"; c2.output(3); cout<<"原样:"; c2.set(8,6); cout<<"将c2化简:"<<endl<<"原样:"; c2.output(1); cout<<"将c2放大倍:"<<endl<<"原样:"; c2.amplify(5); c2.output(0); cout<<"化简形式:"; c2.output(1); return 0; }