运用面向对象的方法设计“图书管理系统”
题目要求:
编写实现图书信息的输入、显示、查找、添加、删除、保存、排序等功能的函数;
图书分为教材,参考书,期刊等;需提供多态例子;
应提供键盘式选择菜单实现功能选择;
数据输入和结果输出要用文件存放。
注:
1)图书信息包括:图书编号、书名、作者、出版社、出版时间、价格;
2)数据输入要求实现2种功能,即可以从键盘输入也可以从文件“book.txt”输入;
3)查找需要按照不同字段都可以进行查找,如按编号查找、按书名查找等;
4)删除需要按照不同字段都可以进行删除,如按编号删除、按书名删除等;
5)排序需要按照不同字段都可以进行排序(升序和降序),如按编号排序、按书名排序等;
6)结果存入文件“book.txt”中。
第一次写这种大型程序,还是有一点不知所措,一点点的摸索,还是用了一段时间才完成;
以下均个人拙见:
1.为了实现必要的多态,我不得不多加了一些类,但是这些类的使用也仅仅在于实现多态,也就是说,除去多态,这些代码毫无意义;
2.定义一个 Book 类,然后里面加上图书编号、书名、作者、出版社、出版时间、价格等信息即可,不过当时脑子一抽,把时间单独拿了出来,其实后来想想单独把时间做一个类还是不错的,所以我的 Book 利用 Date 的组合,其后的多态的实现是在 Book 的基础上进行派生;
3.规定从键盘输入也可以从文件输入,难受的是,什么不会就需要用到什么,大写的尴尬;
4.其后的是图书管理系统的重点了,我觉得其实不需要多态会更好,或者利用其他的方式,本人想不出,我还是只会用容器装起来,把所有的书包括从键盘输入和文件输入的书籍全部放在一个容器中,然后进行一系列需要的操作;
5.根据要求逐步实现代码;
6.直接把输出的结果全部放入文件会比较好;
但是,但是,重点来了,由于文件没有学好,我只能在键盘上输入英文,这样才能得到正确的输入,如果输入汉字,会形成乱码,目前我还不能解决,日后再回来进一步修改;
头文件:
1 #include<iostream> 2 #include<fstream> 3 #include<sstream> 4 #include<string> 5 #include <iomanip> 6 #include<vector> 7 #include<algorithm>
各种类:
1 class Date 2 3 class Book 4 5 class TextBook:public Book 6 7 class NovelBook:public Book 8 9 class MagazineBook:public Book
容器与文件:
1 vector <Book> v;
2 ifstream ifs("E:\\s1.txt",ios::in);
3 ofstream ofs("E:\\s1_result.txt");
其次便是问题集中地带,既然我是利用的容器,那么我可以进行删除,排序,查找等操作,但是如何进行?
比如查找,我可以利用 ID 查找,也可以利用书名,作者等查找,这需要我如何去设计?
再比如排序,我需要利用各种方式排序,还需要从小到大何从大到小排序,但是一般给出的 sort 并没有告诉你它的原型,他是如何进行的,这些都需要我们在编写的时候进行查找,学习,然后才能合理的解决这些问题;
在设计出一系列功能后,其实我们可以设计一个菜单函数,然后把其中每个功能集中在菜单中,菜单是主函数必定运行的函数,Menu 函数的退出,只能取决于函数函数内部,也就是说,根据用户的输入情况来判断是否退出;
至于每个功能的实现一步一步来即可,
对于查找和删除还是比较简单的,我们利用 switch 分别进行所需要的查找方式;
但是排序会有一点小问题,我起先也是准备和查找删除的方式一样,但是后来发现不太行,因为sort的大小比较需要一个函数,于是突发奇想,可以设置一个中介函数,sort调用这个中介函数,然后由这个中介函数来选择所需要的正确的排序函数,由此解决了一个sort需要多个排序函数的问题;
至于其他问题,均可慢慢解决,只有自己动手试过,方知其中奥妙;
附上两个文件:


PS:不能利用时间排序,额,本人写的时候没有对时间的大小比较进行正确的比较,实属本人错误,其他排序无误;
额,还有一个问题,在I/O流的格式化输出的问题上没有处理好,才疏学浅;
完整代码:

1 #include<iostream>
2 #include<fstream>
3 #include<sstream>
4 #include<string>
5 #include <iomanip>
6 #include<vector>
7 #include<algorithm>
8
9 using namespace std;
10
11 class Date // Date
12 {
13 private:
14 int year,month,day;
15 public:
16 Date(int year_ = 0,int month_ = 0,int day_ = 0):year(year_),month(month_),day(day_) { }
17 Date(const Date & rhs)
18 {
19 if(this != & rhs)
20 {
21 year = rhs.year;
22 month = rhs.month;
23 day = rhs.day;
24 }
25 }
26 Date & operator = (const Date & rhs)
27 {
28 year = rhs.year;
29 month = rhs.month;
30 day = rhs.day;
31 return (*this);
32 }
33 friend istream & operator >>(istream & is,Date & rhs)
34 {
35 is>>rhs.year>>rhs.month>>rhs.day;
36 return (is);
37 }
38 friend ostream & operator <<(ostream & os,const Date & rhs)
39 {
40 os<<rhs.year<<"."<<rhs.month<<"."<<rhs.day;
41 return (os);
42 }
43 bool operator == (const Date & rhs)
44 {
45 if( (year == rhs.year)&&(month == rhs.month)&&(day == rhs.day) )
46 return 1;
47 else
48 return 0;
49 }
50 bool operator < (const Date & rhs)
51 {
52 if( (year < rhs.year)&&(month < rhs.month)&&(day < rhs.day) )
53 return 1;
54 else
55 return 0;
56 }
57 bool operator > (const Date & rhs)
58 {
59 if( (year > rhs.year)&&(month > rhs.month)&&(day > rhs.day) )
60 return 1;
61 else
62 return 0;
63 }
64 };
65
66 class Book
67 {
68 private:
69 string id,name,author,publish;
70 double price;
71 Date date;
72 public:
73 Book(int year_ = 0,int month_ = 0,int day_ = 0,string id_ = "NULL",string name_ = "NULL",string author_ = "NULL",string publish_ = "NULL",double price_ = 0)
74 :date(year_,month_,day_)
75 {
76 id = id_;
77 name = name_;
78 author = author_;
79 publish = publish_;
80 price = price_;
81 }
82 Book(const Book & rhs)
83 {
84 if(this != &rhs)
85 {
86 id = rhs.id;
87 name = rhs.name;
88 author = rhs.author;
89 publish = rhs.publish;
90 price = rhs.price;
91 date = rhs.date;
92 }
93 }
94 Book & operator = (const Book & rhs)
95 {
96 id = rhs.id;
97 name = rhs.name;
98 author = rhs.author;
99 publish = rhs.publish;
100 price = rhs.price;
101 date = rhs.date;
102 return (*this);
103 }
104 friend ostream & operator << (ostream & os ,const Book & rhs)
105 {
106 os<<setiosflags(ios::right)<<rhs.id<<setw(20)<<rhs.name<<setw(20)<<rhs.author<<setw(20)<<rhs.publish<<setw(20)<<rhs.price<<setw(20)<<rhs.date;
107 return (os);
108 }
109 virtual void ShowBook(ofstream & Ofs) // 多态显示
110 {
111 Ofs<<(*this);
112 }
113 void Set()
114 {
115 cout<<"id>>name>>author>>publish>>price>>date"<<endl;
116 cin>>id>>name>>author>>publish>>price>>date;
117 }
118 virtual void SetBook() // 多态输入
119 {
120 this->Set() ;
121 }
122 bool operator == (const Book & rhs)
123 {
124 int arr[6] = {0};
125 switch(1)
126 {
127 case 1 : if(id == rhs.id)
128 arr[0] = 1;
129 case 2 : if(name == rhs.name)
130 arr[1] = 1;
131 case 3 : if(author == rhs.author)
132 arr[2] = 1;
133 case 4 : if(publish == rhs.publish)
134 arr[3] = 1;
135 case 5 : if(date == rhs.date)
136 arr[4] = 1;
137 case 6 : if(price == rhs.price)
138 arr[5] = 1;
139 }
140 if( (arr[0]+arr[1]+arr[2]+arr[3]+arr[4]+arr[5]) > 0 )
141 return 1;
142 }
143 bool Conparesmall(const Book & rhs,int i)
144 {
145 switch(i)
146 {
147 case 1 : return(id < rhs.id);
148 case 2 : return(name < rhs.name);
149 case 3 : return(author < rhs.author);
150 case 4 : return(publish < rhs.publish);
151 case 5 : return(date < rhs.date);
152 case 6 : return(price < rhs.price);
153 }
154 }
155 bool Conparelarge(const Book & rhs,int i)
156 {
157 switch(i)
158 {
159 case 1 : return(id > rhs.id);
160 case 2 : return(name > rhs.name);
161 case 3 : return(author > rhs.author);
162 case 4 : return(publish > rhs.publish);
163 case 5 : return(date > rhs.date);
164 case 6 : return (price > rhs.price);
165 }
166 }
167 };
168
169 class TextBook:public Book
170 {
171 private:
172 string subject;
173 public:
174 TextBook(int year_ = 0,int month_ = 0,int day_ = 0,string id_ = "NULL",string name_ = "NULL",string author_ = "NULL",string publish_ = "NULL",double price_ = 0,string subject_ = "NULL")
175 :Book(year_,month_,day_,id_,name_,author_,publish_,price_),subject(subject_) { }
176 TextBook(const TextBook & rhs):Book(rhs)
177 {
178 if(this != &rhs)
179 subject = rhs.subject;
180 }
181 virtual void ShowBook(ofstream & Ofs) // 显示
182 {
183 Ofs<<(*this)<<setiosflags(ios::right)<<setw(20)<<subject<<endl;
184 }
185 virtual void SetBook() // 输入
186 {
187 this->Set() ;
188 cout<<"subject"<<endl;
189 cin>>subject;
190 }
191 };
192
193 class NovelBook:public Book
194 {
195 private:
196 string kind;
197 public:
198 NovelBook(int year_ = 0,int month_ = 0,int day_ = 0,string id_ = "NULL",string name_ = "NULL",string author_ = "NULL",string publish_ = "NULL",double price_ = 0,string kind_ = "NULL")
199 :Book(year_,month_,day_,id_,name_,author_,publish_,price_),kind(kind_) { }
200 NovelBook(const NovelBook & rhs):Book(rhs)
201 {
202 if(this != &rhs)
203 kind = rhs.kind;
204 }
205 virtual void ShowBook(ofstream & Ofs) // 显示
206 {
207 Ofs<<(*this)<<setiosflags(ios::right)<<setw(20)<<kind<<endl;
208 }
209 virtual void SetBook() // 输入
210 {
211 this->Set() ;
212 cout<<"kind"<<endl;
213 cin>>kind;
214 }
215 };
216
217 class MagazineBook:public Book
218 {
219 private:
220 string theme;
221 public:
222 MagazineBook(int year_ = 0,int month_ = 0,int day_ = 0,string id_ = "NULL",string name_ = "NULL",string author_ = "NULL",string publish_ = "NULL",double price_ = 0,string theme_ = "NULL")
223 :Book(year_,month_,day_,id_,name_,author_,publish_,price_),theme(theme_) { }
224 MagazineBook(const MagazineBook & rhs):Book(rhs)
225 {
226 if(this != &rhs)
227 theme = rhs.theme;
228 }
229 virtual void ShowBook(ofstream & Ofs) // 显示
230 {
231 Ofs<<(*this)<<setiosflags(ios::right)<<setw(20)<<theme<<endl;
232 }
233 virtual void SetBook() // 输入
234 {
235 this->Set() ;
236 cout<<"theme"<<endl;
237 cin>>theme;
238 }
239 };
240
241 vector <Book> v;
242 ifstream ifs("E:\\s1.txt",ios::in);
243 ofstream ofs("E:\\s1_result.txt");
244
245 void Find(const Book & b) // 查找
246 {
247 vector <Book> ::iterator p;
248 p = find(v.begin(),v.end(),b);
249 if( p != v.end() )
250 {
251 ofs<<*p<<endl;
252 cout<<"存在此书"<<endl;
253 }
254 else
255 cout<<"此书不存在"<<endl;
256 }
257
258 void Delete(const Book & b) // 删除
259 {
260 vector <Book> ::iterator ite;
261 for(ite = v.begin();ite != v.end(); )
262 {
263 if(*ite == b)
264 {
265 cout<<"删除成功"<<endl;
266 ite = v.erase(ite);
267 }
268 else
269 ++ite;
270 }
271 }
272
273 bool lesssort_1(Book & rhs1,Book & rhs2)
274 {
275 return rhs1.Conparesmall(rhs2,1);
276 }
277 bool lesssort_2(Book & rhs1,Book & rhs2)
278 {
279 return rhs1.Conparesmall(rhs2,2);
280 }
281 bool lesssort_3(Book & rhs1,Book & rhs2)
282 {
283 return rhs1.Conparesmall(rhs2,3);
284 }
285 bool lesssort_4(Book & rhs1,Book & rhs2)
286 {
287 return rhs1.Conparesmall(rhs2,4);
288 }
289 bool lesssort_5(Book & rhs1,Book & rhs2)
290 {
291 return rhs1.Conparesmall(rhs2,5);
292 }
293 bool lesssort_6(Book & rhs1,Book & rhs2)
294 {
295 return rhs1.Conparesmall(rhs2,6);
296 }
297
298 void Sortsmall(int b) // sort排序:从小到大
299 {
300 switch(b)
301 {
302 case 1 : sort(v.begin(),v.end(),lesssort_1);
303 break;
304 case 2 : sort(v.begin(),v.end(),lesssort_2);
305 break;
306 case 3 : sort(v.begin(),v.end(),lesssort_3);
307 break;
308 case 4 : sort(v.begin(),v.end(),lesssort_4);
309 break;
310 case 5 : sort(v.begin(),v.end(),lesssort_5);
311 break;
312 case 6 : sort(v.begin(),v.end(),lesssort_6);
313 break;
314 }
315 }
316
317 bool greatersort_1(Book & rhs1,Book & rhs2)
318 {
319 return rhs1.Conparelarge(rhs2,1);
320 }
321 bool greatersort_2(Book & rhs1,Book & rhs2)
322 {
323 return rhs1.Conparelarge(rhs2,2);
324 }
325 bool greatersort_3(Book & rhs1,Book & rhs2)
326 {
327 return rhs1.Conparelarge(rhs2,3);
328 }
329 bool greatersort_4(Book & rhs1,Book & rhs2)
330 {
331 return rhs1.Conparelarge(rhs2,4);
332 }
333 bool greatersort_5(Book & rhs1,Book & rhs2)
334 {
335 return rhs1.Conparelarge(rhs2,5);
336 }
337 bool greatersort_6(Book & rhs1,Book & rhs2)
338 {
339 return rhs1.Conparelarge(rhs2,6);
340 }
341
342 void Sortlarge(int b) // sort排序:从大到小
343 {
344 switch(b)
345 {
346 case 1 : sort(v.begin(),v.end(),greatersort_1);
347 break;
348 case 2 : sort(v.begin(),v.end(),greatersort_2);
349 break;
350 case 3 : sort(v.begin(),v.end(),greatersort_3);
351 break;
352 case 4 : sort(v.begin(),v.end(),greatersort_4);
353 break;
354 case 5 : sort(v.begin(),v.end(),greatersort_5);
355 break;
356 case 6 : sort(v.begin(),v.end(),greatersort_6);
357 break;
358 }
359 }
360
361 void Menu() // 菜单
362 {
363
364 int int_choose,char_choose,nub,i;
365 string id,name,author,publish;
366 double price;
367 int year,month,day;
368 while(1)
369 {
370 cout<<"A : 若查找书籍,请于下方输入 1 ;"<<endl<<"B : 若删除书籍,请于下方输入 2 ;"<<endl<<"C : 若对书籍从小到大排序,请于下方输入 3 ;"<<endl<<"D : 若对书籍从大到小排序,请于下方输入 4 ;"<<endl<<"BREAK : 若退出菜单请输入 0 ;"<<endl;
371 cin>>int_choose;
372 if( int_choose == 0 ) // 退出
373 {
374 break;
375 }
376 if( int_choose == 1 ) // 查找
377 {
378 cout<<"请输入待查书籍数量 :"<<endl;
379 cin>>nub;
380 for(i = 0;i < nub;i++)
381 {
382 cout<<"若按编号查找,请于下方输入 1 "<<endl<<"若按书名查找,请于下方输入 2 "<<endl<<"若按作者查找,请于下方输入 3 "<<endl<<"若按出版社查找,请于下方输入 4 "<<endl
383 <<"若按出版时间查找,请于下方输入 5 "<<endl<<"若按价格查找,请于下方输入 6 "<<endl;
384 cin>>char_choose;
385 switch(char_choose)
386 {
387 case 1 :
388 {
389 cout<<"请输入编号 :";
390 cin>>id;
391 Book temp(0,0,0,id,"NULL","NULL","NULL",0);
392 Find(temp);
393 break;
394 }
395 case 2 :
396 {
397 cout<<"请输入书名 :";
398 cin>>name;
399 Book temp(0,0,0,"NULL",name,"NULL","NULL",0);
400 Find(temp);
401 break;
402 }
403 case 3 :
404 {
405 cout<<"请输入作者 :";
406 cin>>author;
407 Book temp(0,0,0,"NULL","NULL",author,"NULL",0);
408 Find(temp);
409 break;
410 }
411 case 4 :
412 {
413 cout<<"请输入出版社:";
414 cin>>publish;
415 Book temp(0,0,0,"NULL","NULL","NULL",publish,0);
416 Find(temp);
417 break;
418 }
419 case 5 :
420 {
421 cout<<"请输入时间 :";
422 cin>>year>>month>>day;
423 Book temp(year,month,day,"NULL","NULL","NULL","NULL",0);
424 Find(temp);
425 break;
426 }
427 case 6 :
428 {
429 cout<<"请输入价格 :";
430 cin>>price;
431 Book temp(0,0,0,"NULL","NULL","NULL","NULL",price);
432 Find(temp);
433 break;
434 }
435 }
436 }
437 }
438 if( int_choose == 2 ) // 删除
439 {
440
441 cout<<"请输入待删除书籍数量 :"<<endl;
442 cin>>nub;
443
444 for(i = 0;i < nub;i++)
445 { cout<<"若按编号删除,请于下方输入 1 "<<endl<<"若按书名删除,请于下方输入 2 "<<endl<<"若按作者删除,请于下方输入 3 "<<endl<<"若按出版社删除,请于下方输入 4 "<<endl <<"若按出版时间删除,请于下方输入 5 "<<endl<<"若按价格删除,请于下方输入 6 "<<endl;
446 cin>>char_choose;
447 switch(char_choose)
448 {
449 case 1 :
450 {
451 cout<<"请输入编号 :";
452 cin>>id;
453 Book temp(0,0,0,id,"NULL","NULL","NULL",0);
454 Delete(temp);
455 break;
456 }
457 case 2 :
458 {
459 cout<<"请输入书名 :";
460 cin>>name;
461 Book temp(0,0,0,"NULL",name,"NULL","NULL",0);
462 Delete(temp);
463 break;
464 }
465 case 3 :
466 {
467 cout<<"请输入作者 :";
468 cin>>author;
469 Book temp(0,0,0,"NULL","NULL",author,"NULL",0);
470 Delete(temp);
471 break;
472 }
473 case 4 :
474 {
475 cout<<"请输入出版社:";
476 cin>>publish;
477 Book temp(0,0,0,"NULL","NULL","NULL",publish,0);
478 Delete(temp);
479 break;
480 }
481 case 5 :
482 {
483 cout<<"请输入时间 :";
484 cin>>year>>month>>day;
485 Book temp(year,month,day,"NULL","NULL","NULL","NULL",0);
486 Delete(temp);
487 break;
488 }
489 case 6 :
490 {
491 cout<<"请输入价格 :";
492 cin>>price;
493 Book temp(0,0,0,"NULL","NULL","NULL","NULL",price);
494 Delete(temp);
495 break;
496 }
497 }
498 }
499 }
500 if( int_choose == 3 ) // 从小到大
501 {
502 cout<<"若按编号排序,请于下方输入 1 "<<endl<<"若按书名排序,请于下方输入 2 "<<endl<<"若按作者排序,请于下方输入 3 "<<endl<<"若按出版社排序,请于下方输入 4 "<<endl <<"若按出版时间排序,请于下方输入 5 "<<endl<<"若按价格排序,请于下方输入 6 "<<endl;
503 cin>>char_choose;
504 switch(char_choose)
505 {
506 case 1 :
507 {
508 cout<<"按编号排序 :"<<endl;
509 Sortsmall(1);
510 break;
511 }
512 case 2 :
513 {
514 cout<<"按书名排序 :"<<endl;
515 Sortsmall(2);
516 break;
517 }
518 case 3 :
519 {
520 cout<<"按作者排序 :"<<endl;
521 Sortsmall(3);
522 break;
523 }
524 case 4 :
525 {
526 cout<<"按出版社排序:"<<endl;
527 Sortsmall(4);
528 break;
529 }
530 case 5 :
531 {
532 cout<<"按时间排序 :"<<endl;
533 Sortsmall(5);
534 break;
535 }
536 case 6 :
537 {
538 cout<<"按价格排序 :"<<endl;
539 Sortsmall(6);
540 break;
541 }
542 }
543 cout<<"排序成功 !"<<endl;
544 ofs<<endl;
545 typename vector <Book>::const_iterator i;
546 for(i = v.begin();i != v.end();i++)
547 ofs<<*i<<endl;
548 }
549 if( int_choose == 4 ) // 从大到小
550 {
551 cout<<"若按编号排序,请于下方输入 1 "<<endl<<"若按书名排序,请于下方输入 2 "<<endl<<"若按作者排序,请于下方输入 3 "<<endl<<"若按出版社排序,请于下方输入 4 "<<endl <<"若按出版时间排序,请于下方输入 5 "<<endl<<"若按价格排序,请于下方输入 6 "<<endl;
552 cin>>char_choose;
553 switch(char_choose)
554 {
555 case 1 :
556 {
557 cout<<"按编号排序 :"<<endl;
558 Sortlarge(1);
559 break;
560 }
561 case 2 :
562 {
563 cout<<"按书名排序 :"<<endl;
564 Sortlarge(2);
565 break;
566 }
567 case 3 :
568 {
569 cout<<"按作者排序 :"<<endl;
570 Sortlarge(3);
571 break;
572 }
573 case 4 :
574 {
575 cout<<"按出版社排序:"<<endl;
576 Sortlarge(4);
577 break;
578 }
579 case 5 :
580 {
581 cout<<"按时间排序 :"<<endl;
582 Sortlarge(5);
583 break;
584 }
585 case 6 :
586 {
587 cout<<"按价格排序 :"<<endl;
588 Sortlarge(6);
589 break;
590 }
591 }
592 cout<<"排序成功 !"<<endl;
593 ofs<<endl;
594 typename vector <Book>::const_iterator i;
595 for(i = v.begin();i != v.end();i++)
596 ofs<<*i<<endl;
597 }
598 }
599 }
600
601 int main()
602 {
603 string id,name,author,publish,xxxx;
604 double price;
605 int year,month,day,i = 0,w,j = 0;
606 string line;
607 Book b;
608 TextBook t;
609 NovelBook n;
610 MagazineBook m;
611 t.SetBook() ; // 键盘输入
612 n.SetBook() ;
613 m.SetBook() ;
614 ofs<<setiosflags(ios::right)<<"id"<<setw(20)<<"name"<<setw(20)<<"author"<<setw(20)<<"publish"<<setw(20)<<"price"<<setw(20)<<"date"<<endl;
615 ofs<<" // duo tai de shi xian "<<endl;
616 t.ShowBook(ofs) ; // 多态输出 and 输出到文件
617 n.ShowBook(ofs) ;
618 m.ShowBook(ofs) ;
619 ofs<<" // cong wen jian shu ru "<<endl;
620 if(ifs)
621 while(getline(ifs,line)) // 文件输入
622 {
623 istringstream is(line);
624 is>>id>>name>>author>>publish>>price>>year>>month>>day>>xxxx;
625 v.push_back( Book(year,month,day,id,name,author,publish,price) );
626 ofs<<setiosflags(ios::right)<<id<<setw(20)<<name<<setw(20)<<author<<setw(20)<<publish<<setw(20)<<price<<setw(20)<<year<<"."<<month<<"."<<day<<endl;
627 // ofs<<id<<" "<<name<<" "<<author<<" "<<publish<<" "<<price<<year<<"."<<month<<"."<<day<<" "<<xxxx<<endl;
628 }
629 else
630 cout<<"error !"<<endl;
631 cout<<" // cong jian pan shu ru "<<endl;
632 cin>>w;
633 cout<<"year>>month>>day>>id>>name>>author>>publish>>price"<<endl;
634 while(1)
635 {
636 cin>>year>>month>>day>>id>>name>>author>>publish>>price;
637 v.push_back( Book(year,month,day,id,name,author,publish,price) );
638 if(++j == w)
639 break;
640 }
641 Menu();
642 ifs.close();
643 ofs.close();
644 return 0;
645 }
2020-01-11
来源:https://www.cnblogs.com/2015-16/p/12180535.html
