Определите формат записи, содержащей ссылки на статьи и книги в файле. Напишите программу, которая могла бы читать из файла записи по времени издания, имени автора, ключевому слову в названии или по издательству. Пользователь должен иметь возможность потребовать выдачи результатов в отсортированном по аналогичным критериям порядке.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
#include <iostream> using std::cout; using std::endl; using std::ios; using std::cerr; using std::cin; #include <fstream> using std::ifstream; using std::ofstream; #include <string> using std::string; #include <vector> using std::vector; #include <cstdlib> using std::exit; #include <algorithm> using std::sort; struct book { book(string n,string a,int y):name(n),author(a),year(y){} string name;//название книги string author;//автор int year;//год издания }; bool pr(book& a, book& b){return (a.name<b.name);} bool pr1(book& a, book& b){return (a.author<b.author);} bool pr2(book& a, book& b){return (a.year<b.year);} int f1(string& s) { int res(0); int prom(0); int i=1; string::reverse_iterator it; for(it=s.rbegin();it!=s.rend();++it) { prom=*it-'0'; res=res+i*prom; i=i*10; } return res; }; int main() { vector<book> v; book b("skazki","d9d9 rimys",1995); v.push_back(b); book b1("hellow world","pichen6ki",1999); v.push_back(b1); book b2("html, css", "barabawka",2000); v.push_back(b2); //вывод результатов for(int i=0;i<v.size();i++) cout <<v[i].name<<' '<<v[i].author<<' '<<v[i].year<<endl; //Запись в файл ofstream f("text.txt",ios::out); if(!f) { cerr <<"don't open file"<<endl; exit(1); } for(int i=0;i<v.size();i++) f <<v[i].name<<'|'<<v[i].author<<'|'<<v[i].year<<endl; //Чтение из файла v.clear(); cout <<v.size()<<endl; //exit(1); ifstream r("text.txt",ios::in); string s; cout <<endl<<endl; while(getline(r,s)) { string s1[3]; char* leksema=strtok((char*)s.c_str(),"|"); int i=0; while(leksema!=NULL) { s1[i]=leksema; i++; leksema=strtok(NULL,"|"); } // int prom=f1(s1[2]); // cout <<prom<<endl;exit(1); v.push_back(book(s1[0],s1[1],f1(s1[2]))); } //вывод вектора cout <<endl; for(int i=0;i<v.size();i++) cout <<v[i].name<<' '<<v[i].author<<' '<<v[i].year<<endl; int a(2); cout <<"vvedite chislo ot 0 do 1"<<endl; cout <<"0 - sort po name"<<endl; cout <<"1 - sort po author"<<endl; cout <<"2 - sort po year"<<endl; cout <<" ... "; cin >>a; if(a==0)//сортировка по имени { sort(v.begin(),v.end(),pr); } else if(a==1)//сортировка по автору { sort(v.begin(),v.end(),pr1); } else if(a==2)//сортировка по году { sort(v.begin(),v.end(),pr2); } //вывод отсортированного вектора cout <<endl<<"*************************************"<<endl; for(int i=0;i<v.size();i++) cout <<v[i].name<<' '<<v[i].author<<' '<<v[i].year<<endl; return 0; } |
[youtube]http://www.youtube.com/watch?v=upiq9Vm_DIg[/youtube]