1 #include "../../st.h" 2 class Name_pairs{ 3 public: 4 void read_names(); 5 void read_age(); 6 //void print(); 7 void sort1(); 8 vector<string> return_name() const; //习题3 9 vector<double> return_age() const; //习题3 10 private: 11 vector<string>name; 12 vector<double>age; 13 }; 14 15 16 vector<string> Name_pairs::return_name() const 17 { 18 return name; 19 } 20 21 vector<double> Name_pairs::return_age() const 22 { 23 return age; 24 } 25 26 void Name_pairs::read_names() 27 { 28 string s; 29 while(1) 30 { 31 cin>>s; 32 if(s=="over") 33 break; 34 name.push_back(s); 35 36 } 37 } 38 39 void Name_pairs::read_age() 40 { 41 double d; 42 for(int i=0;i<name.size();i++) 43 { 44 cout<<"input "<<name[i]<<"‘s age:"; 45 cin>>d; 46 age.push_back(d); 47 } 48 } 49 50 /*void Name_pairs::print() 51 { 52 for(int i=0;i<name.size();i++) 53 cout<<name[i]<<" "<<age[i]<<endl; 54 }*/ 55 56 void Name_pairs::sort1() 57 { 58 vector<string>name1; 59 vector<double>age1; 60 name1=name; 61 age1=age; 62 sort(name.begin(),name.end()); 63 for(int j=0;j<name.size();j++) 64 { 65 for(int k=0;k<name.size();k++) 66 { 67 if(name[j]==name1[k]) 68 age1[j]=age[k]; 69 } 70 } 71 age=age1; 72 73 74 } 75 76 ostream& operator<<(ostream& os,const Name_pairs& np) //习题3 77 { 78 for(int i=0;i<np.return_name().size();i++) 79 os<<np.return_name()[i]<<" "<<np.return_age()[i]<<endl; 80 return os; 81 } 82 83 bool operator==(const Name_pairs&a,const Name_pairs&b) //习题3 84 { 85 return a.return_name()==b.return_name() 86 &&a.return_age()==b.return_age(); 87 } 88 89 bool operator!=(const Name_pairs&a,const Name_pairs&b) //习题3 90 { 91 return !(a==b); 92 } 93 94 int main() 95 { 96 Name_pairs np; 97 np.read_names(); 98 np.read_age(); 99 np.sort1(); 100 cout<<np; 101 Name_pairs np1; 102 np1=np; 103 if(np1==np) 104 cout<<"yes"<<endl; 105 keep_window_open(); 106 }
习题2 3
1 #include "../../st.h" 2 struct ISBN 3 { 4 int n1,n2,n3; 5 char c; 6 7 }; 8 9 istream& operator>>(istream& is,struct ISBN&i) 10 { 11 char c1,c2,c3; 12 is>>i.n1>>c1>>i.n2>>c2>>i.n3>>c3>>i.c; 13 if(!is) 14 return is; 15 if(c1!=‘-‘||c2!=‘-‘||c3!=‘-‘) 16 { 17 is.clear(ios_base::failbit); 18 return is; 19 } 20 return is; 21 } 22 23 bool operator==(const struct ISBN&a,const struct ISBN&b) 24 { 25 return a.n1==b.n1&&a.n2==b.n2&&a.n3==b.n3&&a.c==b.c; 26 } 27 28 ostream& operator<<(ostream& os,struct ISBN&i) 29 { 30 return os<<i.n1<<"-"<<i.n2<<"-"<<i.n3<<"-"<<i.c; 31 } 32 33 struct DATA 34 { 35 int year; 36 int month; 37 }; 38 39 istream& operator>>(istream& is,struct DATA& dd) 40 { 41 char ch; 42 is>>dd.year>>ch>>dd.month; 43 if(!is) 44 return is; 45 46 while(ch!=‘-‘) 47 { 48 //is.clear(ios_base::failbit); 49 cout<<"输入日期错误,重新输入(格式year_month):"; 50 is>>dd.year>>ch>>dd.month; 51 if(!is) 52 return is; 53 } 54 while(dd.month<1||dd.month>12) 55 { 56 cout<<"输入月份错误,重新输入:"; 57 is>>dd.month; 58 if(!is) 59 return is; 60 } 61 return is; 62 } 63 64 class BOOK{ 65 public: 66 enum Genre 67 { 68 ficton=1,nonfiction,periodical,biography,children 69 }; 70 BOOK(); 71 struct ISBN re_isbn() {return isbn;}; 72 string re_name(){return name;}; 73 string re_author(){return author;}; 74 struct DATA re_data(){return data;}; 75 char re_is_borrow(){return is_borrow;}; 76 void change_borrow(); 77 void read_book_one(); 78 Genre re_genre(){return genre;}; 79 private: 80 struct ISBN isbn; 81 string name; 82 string author; 83 struct DATA data; 84 char is_borrow; 85 Genre genre; 86 }; 87 88 BOOK::BOOK() 89 { 90 isbn.n1=isbn.n2=isbn.n3=0; 91 isbn.c=0; 92 name=""; 93 author=""; 94 data.year=2001; 95 data.month=1; 96 is_borrow=‘f‘; 97 genre=Genre(1); 98 } 99 100 void BOOK::change_borrow() 101 { 102 if(is_borrow==‘t‘) 103 is_borrow=‘n‘; 104 else 105 is_borrow=‘t‘; 106 } 107 108 void BOOK::read_book_one() 109 { 110 int i; 111 cout<<"录入书名:"; 112 cin>>name; 113 cout<<"录入作者:"; 114 cin>>author; 115 cout<<"录入出版日期(year-month):"; 116 cin>>data; 117 cout<<"录入ISBN号(x-x-x-x):"; 118 cin>>isbn; 119 cout<<"录入书籍类型(ficton=1,nonfiction=2,periodical=3,biography=4,children=5):"; 120 cin>>i; 121 genre=Genre(i); 122 cout<<"是否已出借(t/f):"; 123 cin>>is_borrow; 124 } 125 126 127 void read_book(vector<BOOK>&book) 128 { 129 char ch; 130 cout<<"是否开始录入书本(y/n):"; 131 cin>>ch; 132 if(ch==‘n‘) 133 return; 134 BOOK b; 135 int ii=1; 136 while(1) 137 { 138 cout<<"录入书本"<<ii++<<":"<<endl; 139 b.read_book_one(); 140 book.push_back(b); 141 cout<<endl; 142 cout<<"是否继续录入书本(y/n):"; 143 cin>>ch; 144 if(ch==‘n‘) 145 break; 146 cout<<endl; 147 } 148 149 } 150 151 void borrow(string s,vector<BOOK>&book) 152 { 153 int i; 154 for(i=0;i<book.size();i++) 155 { 156 if(s==book[i].re_name()) 157 { 158 if(book[i].re_is_borrow()==‘t‘) 159 cout<<"sorry,the book is borrowed."<<endl; 160 else 161 { 162 cout<<"here is the book."<<endl; 163 book[i].change_borrow(); 164 } 165 break; 166 } 167 } 168 if(i==book.size()) 169 cout<<"sorry,no you want book"<<endl; 170 171 } 172 173 void return_book(string s,vector<BOOK>&book) 174 { 175 int i; 176 for(i=0;i<book.size();i++) 177 { 178 if(s==book[i].re_name()){ 179 cout<<"thank your cooperation."<<endl; 180 book[i].change_borrow(); 181 break; 182 } 183 } 184 if(i==book.size()) 185 cout<<"sorry,the book not belong to us"<<endl; 186 } 187 188 bool operator==(BOOK&a,BOOK&b) 189 { 190 return a.re_isbn()==b.re_isbn(); 191 } 192 193 bool operator!=(BOOK&a,BOOK&b) 194 { 195 return !(a==b); 196 } 197 198 ostream& operator<<(ostream& os,BOOK&b) 199 { 200 os<<endl<<"《"<<b.re_name()<<"》"<<endl<<"anthor: "<<b.re_author()<<endl<<"ISBN号: "<<b.re_isbn()<<endl<<"书籍类型: "; 201 switch(b.re_genre()){ 202 case 1: 203 os<<"fiction"<<endl; 204 break; 205 case 2: 206 os<<"nonfiction"<<endl; 207 break; 208 case 3: 209 os<<"periodical"<<endl; 210 break; 211 case 4: 212 os<<"biography"<<endl; 213 break; 214 case 5: 215 os<<"children"<<endl; 216 break; 217 } 218 return os; 219 } 220 221 int main() 222 { 223 vector<BOOK>book; 224 read_book(book); 225 /*if(book.size()!=0){ 226 string ss; 227 cout<<"borrow book:"; 228 cin>>ss; 229 borrow(ss,book); 230 cout<<"return book:"; 231 cin>>ss; 232 return_book(ss,book); 233 }*/ 234 for(int i=0;i<book.size();i++) 235 cout<<book[i]<<endl; 236 keep_window_open(); 237 238 239 240 }
习题5 6 7
1 //////////////////////////////////////////////////////////////////////////////// 2 //book.h 3 4 #include "../../st.h" 5 struct ISBN 6 { 7 int n1,n2,n3; 8 char c; 9 10 }; 11 12 istream& operator>>(istream& is,struct ISBN&i) 13 { 14 char c1,c2,c3; 15 //is.clear(); 16 // is.sync(); 17 is>>i.n1>>c1>>i.n2>>c2>>i.n3>>c3>>i.c; 18 if(!is) 19 return is; 20 if(c1!=‘-‘||c2!=‘-‘||c3!=‘-‘) 21 { 22 is.clear(ios_base::failbit); 23 return is; 24 } 25 return is; 26 } 27 28 bool operator==(const struct ISBN&a,const struct ISBN&b) 29 { 30 return a.n1==b.n1&&a.n2==b.n2&&a.n3==b.n3&&a.c==b.c; 31 } 32 33 ostream& operator<<(ostream& os,struct ISBN&i) 34 { 35 return os<<i.n1<<"-"<<i.n2<<"-"<<i.n3<<"-"<<i.c; 36 } 37 38 struct DATE 39 { 40 int year; 41 int month; 42 }; 43 44 istream& operator>>(istream& is,struct DATE& dd) 45 { 46 char ch; 47 //is.clear(); 48 //is.sync(); 49 is>>dd.year>>ch>>dd.month; 50 if(!is) 51 return is; 52 53 while(ch!=‘-‘) 54 { 55 //is.clear(ios_base::failbit); 56 cout<<"输入日期错误,重新输入(格式year_month):"; 57 is>>dd.year>>ch>>dd.month; 58 if(!is) 59 return is; 60 } 61 while(dd.month<1||dd.month>12) 62 { 63 cout<<"输入月份错误,重新输入:"; 64 is>>dd.month; 65 if(!is) 66 return is; 67 } 68 return is; 69 } 70 71 72 73 class BOOK{ 74 public: 75 enum Genre 76 { 77 ficton=1,nonfiction,periodical,biography,children 78 }; 79 BOOK(); 80 BOOK(struct ISBN); 81 struct ISBN re_isbn() {return isbn;}; 82 string re_name(){return name;}; 83 string re_author(){return author;}; 84 struct DATE re_date(){return date;}; 85 char re_is_borrow(){return is_borrow;}; 86 void change_borrow(); 87 void read_book_one(); 88 Genre re_genre(){return genre;}; 89 90 private: 91 struct ISBN isbn; 92 string name; 93 string author; 94 struct DATE date; 95 char is_borrow; 96 Genre genre; 97 }; 98 99 BOOK::BOOK() 100 { 101 isbn.n1=isbn.n2=isbn.n3=0; 102 isbn.c=0; 103 name=""; 104 author=""; 105 date.year=2001; 106 date.month=1; 107 is_borrow=‘f‘; 108 genre=Genre(1); 109 } 110 111 BOOK::BOOK(struct ISBN is) 112 { 113 isbn.n1=is.n1; 114 isbn.n2=is.n2; 115 isbn.n3=is.n3; 116 isbn.c=is.c; 117 name=""; 118 author=""; 119 date.year=2001; 120 date.month=1; 121 is_borrow=‘f‘; 122 genre=Genre(1); 123 } 124 125 void BOOK::change_borrow() 126 { 127 if(is_borrow==‘t‘) 128 is_borrow=‘n‘; 129 else 130 is_borrow=‘t‘; 131 } 132 133 void BOOK::read_book_one() 134 { 135 int i; 136 cout<<"录入书名:"; 137 cin.clear(); 138 cin.sync(); 139 cin>>name; 140 cout<<"录入作者:"; 141 cin.clear(); 142 cin.sync(); 143 cin>>author; 144 cout<<"录入出版日期(year-month):"; 145 cin.clear(); 146 cin.sync(); 147 cin>>date; 148 cout<<"录入ISBN号(x-x-x-x):"; 149 cin.clear(); 150 cin.sync(); 151 cin>>isbn; 152 cout<<"录入书籍类型(ficton=1,nonfiction=2,periodical=3,biography=4,children=5):"; 153 cin.clear(); 154 cin.sync(); 155 cin>>i; 156 genre=Genre(i); 157 cout<<"是否已出借(t/f):"; 158 cin.clear(); 159 cin.sync(); 160 cin>>is_borrow; 161 } 162 163 164 void read_book(vector<BOOK>&book) 165 { 166 char ch; 167 cout<<"是否开始录入书本(y/n):"; 168 cin>>ch; 169 if(ch==‘n‘) 170 return; 171 BOOK b; 172 int ii=1; 173 while(1) 174 { 175 cout<<"录入书本"<<ii++<<":"<<endl; 176 b.read_book_one(); 177 book.push_back(b); 178 cout<<endl; 179 cout<<"是否继续录入书本(y/n):"; 180 cin>>ch; 181 if(ch==‘n‘) 182 break; 183 cout<<endl; 184 } 185 186 } 187 188 void borrow(string s,vector<BOOK>&book) 189 { 190 int i; 191 for(i=0;i<book.size();i++) 192 { 193 if(s==book[i].re_name()) 194 { 195 if(book[i].re_is_borrow()==‘t‘) 196 cout<<"sorry,the book is borrowed."<<endl; 197 else 198 { 199 cout<<"here is the book."<<endl; 200 book[i].change_borrow(); 201 } 202 break; 203 } 204 } 205 if(i==book.size()) 206 cout<<"sorry,no you want book"<<endl; 207 208 } 209 210 void return_book(string s,vector<BOOK>&book) 211 { 212 int i; 213 for(i=0;i<book.size();i++) 214 { 215 if(s==book[i].re_name()){ 216 cout<<"thank your cooperation."<<endl; 217 book[i].change_borrow(); 218 break; 219 } 220 } 221 if(i==book.size()) 222 cout<<"sorry,the book not belong to us"<<endl; 223 } 224 225 bool operator==(BOOK&a,BOOK&b) 226 { 227 return a.re_isbn()==b.re_isbn(); 228 } 229 230 bool operator!=(BOOK&a,BOOK&b) 231 { 232 return !(a==b); 233 } 234 235 ostream& operator<<(ostream& os,BOOK&b) 236 { 237 os<<endl<<"《"<<b.re_name()<<"》"<<endl<<"anthor: "<<b.re_author()<<endl<<"ISBN号: "<<b.re_isbn()<<endl<<"书籍类型: "; 238 switch(b.re_genre()){ 239 case 1: 240 os<<"fiction"<<endl; 241 break; 242 case 2: 243 os<<"nonfiction"<<endl; 244 break; 245 case 3: 246 os<<"periodical"<<endl; 247 break; 248 case 4: 249 os<<"biography"<<endl; 250 break; 251 case 5: 252 os<<"children"<<endl; 253 break; 254 } 255 return os; 256 } 257 258 259 260 //data.h 261 262 #include "../../st.h" 263 264 class Date{ 265 public: 266 enum Month{ 267 Jan=1,Feb,Mar,Apr,May,Jun,Aug,Sep,Oct,Nov,Dec 268 }; 269 class Invalid{}; 270 271 Date(int y,Month m,int d); 272 Date(); 273 Date(int y,int m,int d); 274 275 int day() {return d;}; 276 Month month() {return m;}; 277 int year() {return y;}; 278 279 //void add_day(int n); 280 //void add_month(int n); 281 //void add_year(int n); 282 private: 283 int y; 284 Month m; 285 int d; 286 }; 287 288 289 290 291 292 293 Date& default_date() 294 { 295 static Date dd(2001,Date::Jan,1); 296 return dd; 297 } 298 299 Date::Date() 300 :y(default_date().year()),m(default_date().month()),d(default_date().day()) 301 {} 302 bool leapyear(int y) 303 { 304 if((y%4==0&&y%100!=0)||y%400==0) //习题10 305 return true; 306 else 307 return false; 308 } 309 bool is_date(int y,Date::Month m,int d) 310 { 311 if(d<=0) 312 return false; 313 int days_in_month=31; 314 switch(m) 315 { 316 case Date::Feb: 317 days_in_month=(leapyear(y))?29:28; 318 break; 319 case Date::Apr: case Date::Jun:case Date::Sep:case Date::Nov: 320 days_in_month=30; 321 break; 322 } 323 if(days_in_month<d) 324 return false; 325 return true; 326 } 327 328 329 330 ostream& operator<<(ostream& os,Date&d) 331 { 332 return os<<‘(‘<<d.year()<<‘,‘<<d.month()<<‘,‘<<d.day()<<‘)‘; 333 } 334 335 istream& operator>>(istream& is,Date& dd) 336 { 337 int y,m,d; 338 //char ch1,ch2,ch3,ch4; 339 is>>y>>m>>d; 340 if(!is) 341 return is; 342 /*if(ch1!=‘(‘||ch2!=‘,‘||ch3!=‘,‘||ch4!=‘)‘) 343 { 344 is.clear(ios_base::failbit); 345 return is; 346 }*/ 347 return is; 348 } 349 350 351 Date::Date(int yy,Month mm,int dd) 352 :y(yy),m(mm),d(dd) 353 { 354 if(!is_date(yy,mm,dd)) 355 throw Invalid(); 356 } 357 358 Date::Date(int yy,int mm,int dd) 359 :y(yy),m((Month)mm),d(dd) 360 { 361 if(!is_date(yy,(Month)mm,dd)) 362 throw Invalid(); 363 } 364 365 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 366 367 //patron.h 368 369 #include "../../st.h" 370 class Patron{ 371 public: 372 string re_name(){return name;} 373 string re_number(){return number;} 374 double re_expense(){return expense;} 375 void set_expense(double d); 376 void read_patron_one(); 377 Patron(string); 378 Patron(); 379 private: 380 string name; 381 string number; 382 double expense; 383 }; 384 385 Patron::Patron() 386 { 387 name=""; 388 number=""; 389 expense=0; 390 } 391 392 Patron::Patron(string s) 393 { 394 name=""; 395 number=s; 396 expense=0; 397 } 398 399 void Patron::set_expense(double d) 400 { 401 expense=d; 402 } 403 404 void Patron::read_patron_one() 405 { 406 cout<<"录入读者姓名:"; 407 cin>>name; 408 cout<<"录入读者图书证号:"; 409 cin>>number; 410 cout<<"录入读者借阅费:"; 411 cin>>expense; 412 while(expense<0) 413 { 414 cout<<"录入借阅费错误,应>=0,重新录入:"; 415 cin>>expense; 416 } 417 } 418 419 bool judge_expense(Patron& p) 420 { 421 if(p.re_expense()>0) 422 return false; 423 if(p.re_expense()==0) 424 return true; 425 } 426 427 void read_patron(vector<Patron>&patron) 428 { 429 char ch; 430 cout<<"是否开始录入读者数据(y/n):"; 431 cin>>ch; 432 if(ch==‘n‘) 433 return; 434 Patron p; 435 int ii=1; 436 while(1) 437 { 438 cout<<"录入读者"<<ii++<<":"<<endl; 439 p.read_patron_one(); 440 patron.push_back(p); 441 cout<<endl; 442 cout<<"是否继续录入读者数据(y/n):"; 443 cin>>ch; 444 if(ch==‘n‘) 445 break; 446 cout<<endl; 447 } 448 449 } 450 451 bool operator==(Patron&a,Patron&b) 452 { 453 return a.re_number()==b.re_number(); 454 } 455 456 bool operator!=(Patron&a,Patron&b) 457 { 458 return !(a==b); 459 } 460 461 ostream& operator<<(ostream& os,Patron&p) 462 { 463 os<<p.re_name()<<" 图书证号:"<<p.re_number()<<endl; 464 if(judge_expense(p)) 465 os<<"借阅费:"<<p.re_expense()<<endl; 466 return os; 467 } 468 469 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 470 471 //transaction.h 472 473 #include "book.h" 474 #include "patron.h" 475 #include "data.h" 476 477 struct Transaction{ 478 BOOK book; 479 Patron patron; 480 Date date; 481 }; 482 483 ostream& operator<<(ostream& os,struct Transaction&ts) 484 { 485 os<<ts.book<<ts.patron<<ts.date<<endl; 486 return os; 487 } 488 489 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 490 491 //library.h 492 493 #include "transaction.h" 494 495 class Library{ 496 public: 497 vector<BOOK> re_book(){return book;}; 498 vector<Patron> re_patron(){return patron;}; 499 vector<struct Transaction> re_transaction(){return transaction;}; 500 vector<struct Transaction> re_transaction_pf(){return transaction_pf;}; 501 502 void borrow_book_people(Patron&p,BOOK&b); 503 void print_qf(); 504 void _read_book(); 505 void _read_patron(); 506 private: 507 vector<BOOK> book; 508 vector<Patron> patron; 509 vector<struct Transaction> transaction; 510 vector<struct Transaction> transaction_pf; 511 }; 512 513 void Library::borrow_book_people(Patron&p,BOOK&b) 514 { 515 int i; 516 517 for(i=0;i<book.size();i++) 518 { 519 if(b==book[i]) 520 { 521 if(b.re_is_borrow()==true) 522 cout<<"sorry,the book is already borrowed"<<endl; 523 else 524 b=book[i]; 525 break; 526 } 527 } 528 if(i==book.size()) 529 { 530 cout<<"没有这本书籍"<<endl; 531 return; 532 } 533 534 for(i=0;i<patron.size();i++) 535 if(p==patron[i]) 536 { 537 p=patron[i]; 538 break; 539 } 540 if(i==patron.size()) 541 { 542 cout<<"没有这个读者"<<endl; 543 return; 544 } 545 546 547 548 int a1,b1,c1; 549 struct Transaction ts; 550 ts.book=b; 551 ts.patron=p; 552 cout<<"输入今天日期(y m d):"; //若想直接cin>>data,应该需要用友元函数 553 cin.clear(); 554 cin.sync(); 555 cin>>a1>>b1>>c1; 556 ts.date=Date(a1,b1,c1); 557 558 if(!judge_expense(p)) 559 { 560 cout<<"该读者已欠费"<<endl; 561 transaction_pf.push_back(ts); 562 } 563 else 564 { 565 transaction.push_back(ts); 566 } 567 } 568 569 void Library::print_qf() 570 { 571 for(int i=0;i<transaction_pf.size();i++) 572 cout<<transaction_pf[i]<<endl; 573 } 574 575 void Library::_read_book() 576 { 577 char ch; 578 cout<<"是否开始录入书本(y/n):"; 579 cin>>ch; 580 if(ch==‘n‘) 581 return; 582 BOOK b; 583 int ii=1; 584 while(1) 585 { 586 cin.clear(); 587 cin.sync(); 588 cout<<"录入书本"<<ii++<<":"<<endl; 589 b.read_book_one(); 590 book.push_back(b); 591 cout<<endl; 592 cin.clear(); 593 cin.sync(); 594 cout<<"是否继续录入书本(y/n):"; 595 cin>>ch; 596 if(ch==‘n‘) 597 break; 598 cout<<endl; 599 } 600 } 601 602 void Library::_read_patron() 603 { 604 char ch; 605 cout<<"是否开始录入读者数据(y/n):"; 606 cin>>ch; 607 cin.clear(); 608 cin.sync(); 609 if(ch==‘n‘) 610 return; 611 Patron p; 612 int ii=1; 613 while(1) 614 { 615 cout<<"录入读者"<<ii++<<":"<<endl; 616 p.read_patron_one(); 617 patron.push_back(p); 618 cout<<endl; 619 cin.clear(); 620 cin.sync(); 621 cout<<"是否继续录入读者数据(y/n):"; 622 cin>>ch; 623 if(ch==‘n‘) 624 break; 625 cout<<endl; 626 } 627 } 628 629 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 630 631 //main.cpp 632 633 #include "library.h" 634 #include "../../st.h" 635 636 int main() 637 { 638 Library l; 639 static string s; 640 static struct ISBN ib; 641 l._read_book(); 642 l._read_patron(); 643 char ch; 644 cout<<"是否进行借书程序(y/n):"; 645 cin>>ch; 646 647 while(ch!=‘n‘) 648 { 649 cout<<"输入书籍信息:"<<endl; 650 cin>>ib; 651 static BOOK b(ib); 652 cout<<"输入借书人信息:"<<endl; 653 cin>>s; 654 static Patron p(s); 655 656 l.borrow_book_people(p,b); 657 658 cout<<"是否继续借书程序(y/n):"; 659 cin>>ch; 660 } 661 662 l.print_qf(); 663 keep_window_open(); 664 }
习题9 10
1 #include "../../st.h" 2 class Patron{ 3 public: 4 string re_name(){return name;} 5 string re_number(){return number;} 6 double re_expense(){return expense;} 7 void set_expense(double d); 8 9 private: 10 string name; 11 string number; 12 double expense; 13 }; 14 15 void Patron::set_expense(double d) 16 { 17 expense=d; 18 } 19 20 bool judge_expense(Patron p) 21 { 22 if(p.re_expense()>0) 23 return false; 24 if(p.re_expense()==0) 25 return true; 26 }
习题8
1 #include "../../st.h" 2 enum Week{ 3 mon=1,tues,wed,thu,fri,sat,sun 4 }; 5 enum Month{ 6 Jan=1,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec 7 }; 8 9 class Date{ 10 public: 11 12 13 class Invalid{}; 14 15 Date(int y,Month m,int d); 16 Date(); 17 Date(int y,int m,int d); 18 19 int day() {return d;} 20 Month month() {return m;} 21 int year() {return y;} 22 Week week() {return w;} 23 Week get_week(); 24 long sun_day(){return l;} 25 friend istream& operator>>(istream& is,Date& dd); 26 void add_day(int n); 27 void add_month(int n); 28 void add_year(int n); 29 void get_date(); 30 long get_sum_day(); 31 int day_sum(); 32 private: 33 int y; 34 Month m; 35 int d; 36 Week w; 37 long l; 38 }; 39 40 Date& default_date() 41 { 42 static Date dd(1970,Jan,1); 43 return dd; 44 } 45 46 Date::Date() 47 :y(default_date().year()),m(default_date().month()),d(default_date().day()) 48 { 49 50 } 51 52 bool leapyear(int y) //习题10 53 { 54 if((y%4==0&&y%100!=0)||y%400==0) 55 return true; 56 else 57 return false; 58 } 59 60 bool is_date(int y,Month m,int d) 61 { 62 if(d<=0) 63 return false; 64 int days_in_month=31; 65 switch(m) 66 { 67 case Feb: 68 days_in_month=(leapyear(y))?29:28; 69 break; 70 case Apr: case Jun:case Sep:case Nov: 71 days_in_month=30; 72 break; 73 } 74 if(days_in_month<d) 75 return false; 76 return true; 77 } 78 79 void Date::add_year(int n) 80 { 81 y+=n; 82 } 83 84 void Date::add_month(int n) 85 { 86 int i=m; 87 i+=n; 88 while(i>12) 89 { 90 i-=12; 91 add_year(1); 92 } 93 m=(Month)i; 94 } 95 96 void Date::add_day(int n) 97 { 98 int days_in_month; 99 d+=n; 100 while(1) 101 { 102 switch(m) 103 { 104 case Feb: 105 days_in_month=(leapyear(y))?29:28; 106 break; 107 case Apr: case Jun:case Sep:case Nov: 108 days_in_month=30; 109 break; 110 } 111 112 if(d>days_in_month) 113 { 114 d=d-days_in_month; 115 add_month(1); 116 } 117 else{ 118 w=get_week(); 119 l+=n; 120 break; 121 } 122 } 123 124 } 125 126 ostream& operator<<(ostream& os,Date&d) 127 { 128 return os<<‘(‘<<d.year()<<‘,‘<<d.month()<<‘,‘<<d.day()<<‘)‘<<"--"<<d.sun_day()<<endl; 129 } 130 131 Week Date::get_week() 132 { 133 int y1,m1,c1,d1; 134 if(m==1||m==2) 135 { 136 m1=12+m; 137 y1=(y-1)%100; 138 c1=(y-1)/100; 139 d1=d; 140 } 141 else 142 { 143 m1=m; 144 y1=y%100; 145 c1=y/100; 146 d1=d; 147 } 148 int x=y1+y1/4+c1/4-2*c1+(26*(m1+1)/10)+d1-1; 149 x%=7; 150 return (Week)x; 151 } 152 153 void Date::get_date() 154 { 155 int y1,m1,d1; 156 cin>>y1>>m1>>d1; 157 while(y1<1970||m1<1||m1>12||d1<1||d1>31) 158 { 159 if(y1<1970) 160 cout<<"输入年份错误,重新输入:"; 161 if(m1<1||m1>12) 162 cout<<"输入月份错误,重新输入:"; 163 if(d1<1||d1>31) 164 cout<<"输入号数错误,重新输入:"; 165 cin>>y1>>m1>>d1; 166 } 167 168 //可加上清除输入流的函数 169 170 y=y1; 171 m=Month(m1); 172 d=d1; 173 w=get_week(); 174 l=get_sum_day(); 175 } 176 177 long Date::get_sum_day() 178 { 179 long l1=0;; 180 int i; 181 for(i=1970;i<y;i++) 182 { 183 static Date d1(i,(Month)12,31); 184 l1+=d1.day_sum(); 185 } 186 l1+=day_sum(); 187 l=l1; 188 return l1-1; 189 } 190 191 istream& operator>>(istream& is,Month&m) 192 { 193 is>>m; 194 return is; 195 } 196 197 istream& operator>>(istream& is,Date& dd) 198 { 199 int y,m,d; 200 //char ch1,ch2,ch3,ch4; 201 is>>y>>m>>d; 202 if(!is) 203 return is; 204 /*if(ch1!=‘(‘||ch2!=‘,‘||ch3!=‘,‘||ch4!=‘)‘) 205 { 206 is.clear(ios_base::failbit); 207 return is; 208 }*/ 209 return is; 210 } 211 212 213 Date::Date(int yy,Month mm,int dd) 214 :y(yy),m(mm),d(dd) 215 { 216 w=get_week(); 217 l=get_sum_day(); 218 if(!is_date(yy,mm,dd)) 219 throw Invalid(); 220 } 221 222 Date::Date(int yy,int mm,int dd) 223 :y(yy),m((Month)mm),d(dd) 224 { 225 w=get_week(); 226 l=get_sum_day(); 227 if(!is_date(yy,(Month)mm,dd)) 228 throw Invalid(); 229 } 230 231 Date next_weekday(Date&d) 232 { 233 Date d1=d; 234 if(d1.week()==sun||d1.week()==mon||d1.week()==tues||d1.week()==wed||d1.week()==thu) 235 d1.add_day(1); 236 else if(d1.week()==fri) 237 d1.add_day(3); 238 else 239 d1.add_day(2); 240 return d1; 241 242 } 243 244 int Date::day_sum() 245 { 246 int i=0; 247 switch(m) 248 { 249 case Dec: 250 i+=30; 251 case Nov: 252 i+=31; 253 case Oct: 254 i+=30; 255 case Sep: 256 i+=31; 257 case Aug: 258 i+=31; 259 case Jul: 260 i+=30; 261 case Jun: 262 i+=31; 263 case May: 264 i+=30; 265 case Apr: 266 i+=31; 267 case Mar: 268 i+=28; 269 case Feb: 270 i+=31; 271 } 272 if(leapyear(y)&&m>2) 273 i++; 274 i+=d; 275 return i; 276 } 277 278 int week_of_year(Date&d) 279 { 280 int i=1; 281 int j=0; 282 Date d1(d.year(),1,1); 283 if(d1.week()==sun) 284 j+=7; 285 else 286 j+=7-d1.week(); 287 while(j<d.day_sum()) 288 { 289 j+=7; 290 i++; 291 } 292 return i; 293 } 294 295 int main() 296 { 297 Date d; 298 d.get_date(); 299 cout<<d<<endl; 300 keep_window_open(); 301 }
习题11 12
1 #include "../../st.h" 2 3 class Rational{ 4 public: 5 int re_fenzi()const{return fenzi;} 6 int re_fenmu()const{return fenmu;} 7 Rational():fenzi(0),fenmu(1){} 8 Rational(int i):fenzi(i),fenmu(1){} 9 Rational(int i1,int i2):fenzi(i1),fenmu(i2){} 10 void to_easy(); 11 void operator=(Rational&a); 12 friend istream& operator>>(istream&is,Rational&rt); 13 private: 14 int fenzi; 15 int fenmu; 16 }; 17 18 19 void Rational::to_easy() 20 { 21 int i=(fenzi>fenmu)?fenmu:fenzi; 22 while(i>0) 23 { 24 if(fenzi%i==0&&fenmu%i==0) 25 { 26 fenzi/=i; 27 fenmu/=i; 28 } 29 i--; 30 } 31 } 32 33 Rational operator+(const Rational&a,const Rational&b) 34 { 35 int i=a.re_fenzi()*b.re_fenmu()+a.re_fenmu()*b.re_fenzi(); 36 int j=a.re_fenmu()*b.re_fenmu(); 37 Rational rt(i,j); 38 rt.to_easy(); 39 return rt; 40 } 41 42 Rational operator-(const Rational&a,const Rational&b) 43 { 44 int i=a.re_fenzi()*b.re_fenmu()-a.re_fenmu()*b.re_fenzi(); 45 int j=a.re_fenmu()*b.re_fenmu(); 46 Rational rt(i,j); 47 rt.to_easy(); 48 return rt; 49 } 50 51 Rational operator*(const Rational&a,const Rational&b) 52 { 53 int i=a.re_fenzi()*b.re_fenzi(); 54 int j=a.re_fenmu()*b.re_fenmu(); 55 Rational rt(i,j); 56 rt.to_easy(); 57 return rt; 58 } 59 60 Rational operator/(const Rational&a,const Rational&b) 61 { 62 int i=a.re_fenzi()*b.re_fenmu(); 63 int j=a.re_fenmu()*b.re_fenzi(); 64 Rational rt(i,j); 65 rt.to_easy(); 66 return rt; 67 } 68 69 void Rational::operator=(Rational&b) 70 { 71 b.to_easy(); 72 fenzi=b.fenzi; 73 fenmu=b.fenmu; 74 } 75 76 bool operator==(Rational a,Rational b) 77 { 78 a.to_easy(); 79 b.to_easy(); 80 return a.re_fenmu()==b.re_fenmu()&&a.re_fenzi()==b.re_fenzi(); 81 } 82 83 bool operator!=(Rational a,Rational b) 84 { 85 return !(a==b); 86 } 87 88 ostream& operator<<(ostream&os,Rational&rt) 89 { 90 return os<<rt.re_fenzi()<<"/"<<rt.re_fenmu(); 91 } 92 93 istream& operator>>(istream&is,Rational&rt) 94 { 95 char ch; 96 is>>rt.fenzi>>ch>>rt.fenmu; 97 return is; 98 } 99 100 double rational_to_double(Rational&rt) 101 { 102 double d; 103 if(rt.re_fenmu()!=0) 104 d=(double)rt.re_fenzi()/(double)rt.re_fenmu(); 105 else 106 error("分母为0"); 107 return d; 108 } 109 110 int main() 111 try{ 112 Rational r1,r2; 113 cin>>r1>>r2; 114 cout<<r1<<endl<<r2<<endl; 115 Rational r3=r1+r2; 116 cout<<r3<<endl; 117 cout<<r1-r2<<endl; 118 cout<<r1*r2<<endl; 119 cout<<r1/r2<<endl; 120 r2=r1; 121 cout<<r1<<endl<<r2<<endl; 122 if(r1==r2) 123 cout<<"yes"<<endl; 124 if(r1!=r2) 125 cout<<"no"<<endl; 126 cout<<rational_to_double(r1)<<endl; 127 keep_window_open(); 128 } 129 catch(exception&e) 130 { 131 cerr<<e.what()<<endl; 132 keep_window_open("~~"); 133 return 1; 134 }
习题13
1 #include "../../st.h" 2 3 class Money{ 4 public: 5 Money():yuan(0),fen(0),s("USD"){sum=0;} 6 Money(int i):yuan(i),fen(0),s("USD"){sum=i*100;d=(double)sum/100;} 7 Money(int i1,int i2):yuan(i1),fen(i2),s("USD"){to_real();sum=yuan*100+fen;d=(double)sum/100;} 8 Money(string ss,double dd):s(ss),d(dd){yuan=int(d);fen=int(d*100)%100;} 9 int re_yuan(){return yuan;} 10 int re_fen(){return fen;} 11 double re_double(){return d;} 12 string re_str(){return s;} 13 void to_real(); 14 void to_double(); 15 friend istream& operator>>(istream& is,Money&m); 16 private: 17 int yuan; 18 int fen; 19 long sum; 20 double d; 21 string s; 22 23 }; 24 25 26 27 28 void Money::to_real() //假设输入美分都是三位数 29 { 30 int i; 31 32 if(fen/100!=0) 33 { 34 if((fen%10)>=5) 35 { 36 fen/=10; 37 fen++; 38 } 39 else 40 fen/=10; 41 } 42 sum=yuan*100+fen; 43 } 44 45 istream& operator>>(istream& is,Money&m) 46 { 47 //char c; 48 //is>>c>>m.yuan>>c>>m.fen; 49 is>>m.s>>m.d; 50 m.yuan=int(m.d); 51 m.fen=int(m.d*100)%100; 52 return is; 53 } 54 55 void Money::to_double() 56 { 57 d=double(sum)/100; 58 } 59 60 61 62 ostream& operator<<(ostream& os,Money&m) 63 { 64 m.to_real(); 65 m.to_double(); 66 return os<<m.re_str()<<" "<<m.re_double();; 67 } 68 69 vector<string>name; 70 vector<double>rate; 71 72 void fn() //录入各国家与美元的汇率 73 { 74 string s="USD"; 75 double r=1; 76 name.push_back(s); 77 rate.push_back(r); 78 cout<<"输入美国与其他国家的汇率:"<<endl<<"输入国家:"; 79 while(s!="over") 80 { 81 cin>>s; 82 name.push_back(s); 83 cout<<"输入汇率:"; 84 cin>>r; 85 rate.push_back(r); 86 cout<<"继续输入国家:"; 87 cin>>s; 88 } 89 } 90 91 Money operator+(Money&a,Money&b) 92 { 93 int i,j; 94 for(i=0;i<name.size();i++) 95 if(a.re_str()==name[i]) 96 break; 97 for(j=0;j<name.size();j++) 98 if(b.re_str()==name[j]) 99 break; 100 if(i==name.size()||j==name.size()) 101 error("没有这个汇率登记记录"); 102 Money mm("USD",a.re_double()*rate[i]+b.re_double()*rate[j]); 103 return mm; 104 } 105 106 int main() 107 try{ 108 vector<string>name; 109 vector<double>rate; 110 Money m1,m2; 111 cin>>m1>>m2; 112 cout<<m1<<endl<<m2<<endl; 113 fn(); 114 cout<<m1+m2<<endl; 115 keep_window_open(); 116 } 117 catch(exception&e) 118 { 119 cerr<<e.what()<<endl; 120 keep_window_open("~~"); 121 return 1; 122 }
习题14 15
时间: 2024-12-12 11:02:10