Вот я как-то в семестре писал прогу, которая ведет учет продажи билетов для транспорта. Прога вполне нормальная, я даже думал её переписать под учёт какой нить ещё другой фигни. Но почему то выбрал сложнее (видимо зря), взял Контроль успеваимости студентов. Но программный код, я привожу для примера, чтобы вы поняли, что я имею ввиду. В каком стиле и с использованием чего, я собираюсь писать. Вот смотрите ниже код:
Код | #include <iostream.h> #include <string.h> #include <fstream.h> #include <process.h> #include <iomanip.h> #include <io.h> #include <windows.h> char*rus_text( char *buf);
class stud { char transport[20]; int nomer; int cena; int kolvo; public: void set_nomer(int n){nomer=n;} void set_transport(char*t){strcpy(transport,t);} void set_cena(int c){cena=c;} void set_kolvo(int k){kolvo=k;} int get_kolvo(){return kolvo;} char*get_transport(){return transport;} int get_nomer(){return nomer;} int get_cena(){return cena;} }; void vvod_f(char*n,char*f) { while(1) { cout<<n; cin.getline(f,30); if(cin)return; } } void cls_pause() { cout<<'\n'; system("pause"); system("cls"); } void sozdanie_faila() { system("cls"); system("pause"); stud x; char let; int l=sizeof(stud); char imya_faila[20]; vvod_f(rus_text("Введите имя для создания файла(город РБ): "),imya_faila); fstream out; out.open(imya_faila,ios::out|ios::binary); int c,n,k; char t[20]; while (1) { cout<<rus_text("\nВведите тип транспорта: "); cin>>t; x.set_transport(t); cout<<rus_text("\nВведите номер маршрута: "); cin>>n; x.set_nomer(n); cout<<rus_text("\nВведите цену билета: "); cin>>c; x.set_cena(c); cout<<rus_text("\nВведите количество проданных билетов: "); cin>>k; x.set_kolvo(k); cin.get(); out.write((char*)&x,l); cout<<rus_text("\nДля продолжения ввода нажмите (y) для выхода нажмите (n): "); cin.get(let); cin.get(); if(let=='y'||let=='Y')continue; else { out.close(); return; } } } void dobavlenie_v_fail() { system("cls"); stud x; char let; int l=sizeof(stud ); char imya_faila[20]; vvod_f(rus_text("Введите имя файла в который вы хотите добавить объекты: "),imya_faila); fstream out; out.open(imya_faila,ios::app|ios::out|ios::binary|ios::nocreate); int c,n,k; char t[20]; if(!out) { cerr<<rus_text("Такого файла не существует: ")<<imya_faila<<endl; return; } while(1) { cout<<rus_text("\nВведите тип транспорта: "); cin>>t; x.set_transport(t); cout<<rus_text("\nВведите номер маршрута: "); cin>>n; x.set_nomer(n); cout<<rus_text("\nВведите цену билета: "); cin>>c; x.set_cena(c); cout<<rus_text("\nВведите количество проданных билетов: "); cin>>k; x.set_kolvo(k); cin.get(); out.write((char*)&x,l); cout<<rus_text("\nДля продолжения ввода нажмите (y) для выхода нажмите (n): "); cin.get(let); cin.get(); if(let=='y'||let=='Y') continue; else { out.close(); return; } } } void chtenie_s_nachala() { system("cls"); stud x; char imya_faila[20]; vvod_f(rus_text("Введите имя файла который вы хотите открыть: "),imya_faila); int len=sizeof(stud); fstream in; in.open(imya_faila, ios::in|ios::nocreate); if(!in) { cerr<<rus_text("Такого файла не существует: ")<<imya_faila<<endl; return; } while(1) { in.read((char*)&x,len); if(in.eof()) { in.close(); return; } cout.setf(ios::right); cout<<rus_text("\nТип транспорта: ")<<setw(10)<<x.get_transport()<<endl; cout<<rus_text("\nНомер маршрута: ")<<setw(10)<<x.get_nomer()<<endl; cout<<rus_text("\nЦена билета: ")<<setw(10)<<x.get_cena()<<endl; cout<<rus_text("\nКоличество проданных билетов: ")<<setw(10)<<x.get_kolvo()<<endl; } } void sort_for_transport() { system("cls"); stud x1,x2; char imya_faila[20]; vvod_f(rus_text("Введиет имя файла который вы хотите рассортировать по типам транспорта: "),imya_faila); int len=sizeof(stud); fstream out; out.open(imya_faila,ios::in|ios::out|ios::binary|ios::nocreate); if(!out) { cerr<<rus_text("Такого файла не существует: ")<<imya_faila<<endl; return; } out.seekp(0,ios::end); long ln = out.tellp(); int n=ln/len; for(int i=0;i<n-1;i++) for(int j=i+1;j<n;j++) { out.seekp(i*len,ios::beg); out.read((char*)&x1,len); out.seekp(j*len,ios::beg); out.read((char*)&x2,len); if(strcmp(x1.get_transport(),x2.get_transport())>0) { out.seekp(i*len,ios::beg); out.write((char*)&x2,len); out.seekp(j*len,ios::beg); out.write((char*)&x1,len); } } out.close(); } void sort_for_nomer() { system("cls"); stud x1,x2; char imya_faila[20]; vvod_f(rus_text("Введите имя файла который вы хотите рассортировать по номерам моршрута: "),imya_faila); int len=sizeof(stud); fstream out; out.open(imya_faila,ios::in|ios::out|ios::binary|ios::nocreate); if(!out) { cerr<<rus_text("Такого файла не существует: ")<<imya_faila<<endl; return; } out.seekp(0,ios::end); long ln = out.tellp(); int n=ln/len; for(int i=0;i<n-1;i++) for(int j=i+1;j<n;j++) { out.seekp(i*len,ios::beg); out.read((char*)&x1,len); out.seekp(j*len,ios::beg); out.read((char*)&x2,len); if(x1.get_nomer()>x2.get_nomer()) { out.seekp(i*len,ios::beg); out.write((char*)&x2,len); out.seekp(j*len,ios::beg); out.write((char*)&x1,len); } } out.close(); } void sort_for_cena() { system("cls"); stud x1,x2; char imya_faila[20]; vvod_f(rus_text("Введите имя файла который вы хотите рассортировать по ценам билетов: "),imya_faila); int len=sizeof(stud); fstream out; out.open(imya_faila,ios::in|ios::out|ios::binary|ios::nocreate); if(!out) { cerr<<rus_text("Такого файла не существует: ")<<imya_faila<<endl; return; } out.seekp(0,ios::end); long ln = out.tellp(); int n=ln/len; for(int i=0;i<n-1;i++) for(int j=i+1;j<n;j++) { out.seekp(i*len,ios::beg); out.read((char*)&x1,len); out.seekp(j*len,ios::beg); out.read((char*)&x2,len); if(x1.get_cena()>x2.get_cena()) { out.seekp(i*len,ios::beg); out.write((char*)&x2,len); out.seekp(j*len,ios::beg); out.write((char*)&x1,len); } } out.close(); } void sort_for_kolvo() { system("cls"); stud x1,x2; char imya_faila[20]; vvod_f(rus_text("Введите имя файла который вы хотите рассортировать по количеству проданных билетов: "),imya_faila); int len=sizeof(stud); fstream out; out.open(imya_faila,ios::in|ios::out|ios::binary|ios::nocreate); if(!out) { cerr<<rus_text("Такого файла не существует: ")<<imya_faila<<endl; return; } out.seekp(0,ios::end); long ln = out.tellp(); int n=ln/len; for(int i=0;i<n-1;i++) for(int j=i+1;j<n;j++) { out.seekp(i*len,ios::beg); out.read((char*)&x1,len); out.seekp(j*len,ios::beg); out.read((char*)&x2,len); if(x1.get_kolvo()<x2.get_kolvo()) { out.seekp(i*len,ios::beg); out.write((char*)&x2,len); out.seekp(j*len,ios::beg); out.write((char*)&x1,len); } } out.close(); } void udalenie() { system("cls"); char imya_faila[20]; char transport[20]; long p1; int len=sizeof stud; stud s; fstream in_out; vvod_f(rus_text("Введите имя файла из которого вы хотите исключить объекты: "),imya_faila); in_out.open(imya_faila,ios::in|ios::out|ios::binary|ios::nocreate); if(!in_out) { cerr<<rus_text("Такого файла не существует: ")<<imya_faila<<endl; return; } cout<<rus_text("\nВведите тип транспорта который вы хотите удалить из файла: "); cin.getline(transport,30); while(1) { p1=in_out.tellg(); in_out.read((char*)&s,len); if (in_out.eof()) { in_out.close(); cout<<rus_text("Такой тип транспорта не найден: ")<<transport<<endl; return; } if(!strcmp(transport,s.get_transport())) { long p2=in_out.tellg(); while(1) { in_out.read((char*)&s,len); if (in_out.eof()) { in_out.seekp(0,ios::end); p1=in_out.tellg(); in_out.close(); int fd=open(imya_faila,2); chsize(fd,p1-len); close(fd); cout<<rus_text("Удаленный транспорт: ")<<transport<<'\n'; return; } in_out.seekp(p1,ios::beg); in_out.write((char*)&s,len); p1=p2; p2=p2+len;in_out.seekp(p2,ios::beg); } } } }
void sliyanie() {
system("cls"); stud x1,x2; fstream ln1,ln2,out; char imya_faila[20]; vvod_f(rus_text("Введите имя файла в который мы будем объеденять 2 файла: "),imya_faila); int len=sizeof(stud); out.open(imya_faila,ios::out|ios::binary); vvod_f(rus_text("Введите имя 1го файла для слияния: "),imya_faila); ln1.open(imya_faila,ios::in|ios::binary|ios::nocreate); if(!ln1) { cerr<<rus_text("Такого файла не существует: ")<<imya_faila<<endl; return; }
vvod_f(rus_text("Введите имя 2го файла для слияния: "),imya_faila); ln2.open(imya_faila,ios::in|ios::binary|ios::nocreate); if(!ln2) { cerr<<rus_text("Такого файла не существует: ")<<imya_faila<<endl; return; } ln1.read((char*)&x1,len); ln2.read((char*)&x2,len); while (!ln1.eof()&!ln2.eof()) { if(strcmp(x1.get_transport(),x2.get_transport())<0){out.write((char*)&x1,len); ln1.read((char*)&x1,len);} else{out.write((char*)&x2,len); ln2.read((char*)&x2,len);} } while(!ln1.eof()){out.write((char*)&x1,len); ln1.read((char*)&x1,len);} while(!ln2.eof()){out.write((char*)&x2,len); ln2.read((char*)&x2,len);} ln1.close(); ln2.close(); out.close(); } void main() { system("cls"); int sw; while(1) { cout<<rus_text("-=МЕНЮ=-\n"); cout<<rus_text("1-Создание файла(город РБ)\n"); cout<<rus_text("2-Добавление в файл\n"); cout<<rus_text("3-Чтение с начала файла\n"); cout<<rus_text("4-Сортировка по виду транспорта\n"); cout<<rus_text("5-Сортировка по цене билетов\n"); cout<<rus_text("6-Сортировка номерам маршрутов\n"); cout<<rus_text("7-Сортировка по количеству проданных билетов\n"); cout<<rus_text("8-Удаление из файла\n"); cout<<rus_text("9-Слияние файлов\n"); cout<<rus_text("10-Выход\n"); cout<<rus_text("Выберите пункт меню: "); cin>>sw; if(!cin) {cin.clear(); cin.ignore(40,'\n'); } cin.get(); switch(sw) { case 1:sozdanie_faila();break; case 2:dobavlenie_v_fail();break; case 3:chtenie_s_nachala();break; case 4:sort_for_transport();break; case 5:sort_for_cena();break; case 6:sort_for_nomer();break; case 7:sort_for_kolvo();break; case 8:udalenie();break; case 9:sliyanie();break; case 10:return; default:cout<<rus_text("Неправильный выбор - повторите пожалуйста ввод")<<endl;break; } } } char buf_rus_vivod[256]; char*rus_text( char *buf_vvod) { CharToOem(buf_vvod, buf_rus_vivod); return buf_rus_vivod; }
|
|