PavelPenchev Публикувано Февруари 15, 2014 Report Share Публикувано Февруари 15, 2014 Да се състави обектно-ориентирана програма с до 300 обекта за отчитане на общия хорариум часове, в даден семестър от обучението. Програмата да има следните характеристики:1. За всеки семестър да се въвеждат следните данни:- номер на семестър;- име на учебната дисциплина;- брой часове на дисциплината - общ = лекции + упражнения;2. Да се предвидят следните допълнителни възможности:- извеждане броя на обектите в програмата и максимално възможният им брой;- добавяне на нови данни;- разглеждане на данните за определен номер;- корекция на данните за определен номер;- запис и четене на данните във файл;- да извежда на екрана дисциплините и часовете за дисциплините в избран семестър. Имам проблем със записа и четенето на файл (case 4 i case 5) записва данни които въведа но после не ми изкарва същото: #include "stdafx.h" #include <iostream.h> #include <string.h> #include <fstream.h> class Semester { public: void GetData(); void Display(); void Write(ofstream&ofile); void Read(ifstream &ifile); private: char disc [40]; unsigned int sem; unsigned int lek; unsigned int upr; }; void Semester::GetData() { cout<<"Semester = ";cin>>sem; cout<<"Ime na Uchebna disciplina ";cin>>disc; cout<<"Broi lekcii =";cin>>lek; cout<<"Broi uprajneniq =";cin>>upr; } void Semester::Display() { cout<<"Semester: "<<sem<<" Uchebna Disciplina: "<<disc<<endl; cout<<"Broi lekcii: "<<lek<<" Broi uprajneniq: "<<upr<<" Obsht horarium = "<<lek+upr<<endl; } void Semester::Write(ofstream & ofile) { ofile<<" "<<sem<<" "<<disc<<" "<<lek<<" "<<upr<<endl; } void Semester::Read(ifstream & ifile) { ifile>>sem>>disc>>lek>>upr; } int main() { Semester s[300]; int el=0,m; //Broi na elementite do { cout<<el<<" Element ot max 300\n"; cout<<"1 - Dobavqne na novi danni\n"; cout<<"2 - Razglejdane na dannite na opredelen nomer\n"; cout<<"3 - Korekciq na danni za opredelen nomer\n"; cout<<"4 - Zapis na dannite vav fail\n"; cout<<"5 - Chetene na dannite ot fail\n"; cout<<"6 - Disciplini i chasove v semestar\n"; cout<<"0 - Izhod\n"; cin>>m; switch(m) { case 1: s[el].GetData(); el++; cout<<" "<<endl; break; case 2: { int k; cout<<"Vavedi nomer 1 do " <<el<<" "; cin>>k; s[k-1].Display(); cout<<" "<<endl; break; } case 3: { int k; char c; cout<<"Vavedi nomer 1 do "<<el<<" " ; cin>>k; cout<<"Vashite danni sa: "; s[k-1].Display(); cout<<" "<<endl; cout<<"Iskate li da promenite dannite Y/N ";cin>>c; if (c=='Y'|| c=='y') s[k-1].GetData(); cout<<" "<<endl; break; } case 4: { Semester s[300]; ofstream outFile; outFile.open("Semester.txt", ios::out); el++; for (int i = 0; i<el ; i++) { s[el].GetData(); cout<<" "<<endl; s[i].Write(outFile);} outFile.close(); break; } case 5: { ifstream inFile; //4etene ot fajl inFile.open("Semester.txt", ios::in); for (int i = 0; i <el ; i++) { s[i].Display(); cout<<" "<<endl; } inFile.close(); break; } } } while(m); return 0; } Цитирай Link to comment Сподели другаде More sharing options...
dakan Публикувано Март 11, 2014 Report Share Публикувано Март 11, 2014 А като запишеш Semester.txt и като го отвориш какво се чете там? Вярно записан файл или е същото което ти вади после от case 5? Освен това в case 5 където трябва да прочетеш файла ти просто го отваряш в променливата inFile и после не я ползваш а използваш променливата s която се намира в текущия ти клас и въобще не е същото като да прочетеш нещо от файла и да го използваш. Единия и най забележим проблем е че не правиш нищо с прочетения файл. Освен да го отвориш и затвориш. Виж този код>http://msdn.microsoft.com/en-us/library/ae1k9a9f.aspx ifstream infile("existingtextfile.txt"); if (!infile.bad()) { // Dump the contents of the file to cout. cout << infile.rdbuf(); infile.close(); } Ето тук вече се ползва отворения фаил infile от тип ifstream. Не знам какво точно прави функцията .rdbuf() но ако не изкарва текста трябва да намериш друга функция за това. Цитирай Link to comment Сподели другаде More sharing options...
Препоръчан пост
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.