Добрый вечер. Только недавно начал заниматься С++. И вот возникли проблемы. При изменении каких либо данных. Программа либо вылетает(Qt), либо просто не изменяет данные (CodeBlock). Прошу прощения, если не та тема.
Вот код:
Код:
#include <iostream>
#include <stdio.h>
#include <cmath>
#include <fstream>
#include <Windows.h>
#include <cstring>
using namespace std;
struct Employer {
char *name;
char *surname ;
double workedhours;
};
int InitStruct(Employer **&Employees) {
char tmp[100];
int count = 0;
cout<<"\n Set array size: "; cin>> count;
Employees = new struct Employer *[count];
for (int i = 0; i < count; i++) {
Employees[i] = new struct Employer;
cout << "\nType name: ";cin >> tmp;
Employees[i]->name = new char((strlen(tmp)) + 1);
strcpy(Employees[i]->name, tmp);
cout << "\nType surename: ";cin >> tmp;
Employees[i]->surname = new char((strlen(tmp)) + 1);
strcpy(Employees[i]->surname, tmp);
cout << "\nType work time: ";cin >> Employees[i]->workedhours;
}
return count;
}
int readFromFile(Employer **&Employees, int var) {
int count = 0;
char buffer[100];
ifstream fin("data2.txt");
if (!(fin.is_open())){
cout <<"not open\n";
fin.close();
return 0;
}
if(var == 0)
fin >> count;
if(var == 1){
ifstream fin_count("data.txt");
if(!(fin_count.is_open())){
cout<<"not open\n";
fin_count.close();
return 0;
}
for(;!(fin_count.eof());){
fin_count>>buffer;
fin_count>>buffer;
fin_count>>buffer;
fin_count>>buffer;
count++;
}
fin_count.close();
}
Employees = new Employer *[count];
for(int i = 0; i< count; i++){
Employees[i] = new struct Employer;
fin>>buffer;
Employees[i]->name = new char [(strlen(buffer))+1];
strcpy(Employees[i]->name, buffer);
fin>>buffer;
Employees[i]->surname = new char [(strlen(buffer))+1];
strcpy(Employees[i]->surname, buffer);
fin>>Employees[i]->workedhours;
}
fin.close();
return count;
}
void writeInFile(Employer **&Employees, int count){
char fileName[50];
cout<<"Type name file: ";cin>>fileName;
ofstream fout(fileName);
if(!(fout.is_open())) {
cout<<"not open\n";
fout.close();
}
for(int i = 0; i< count; i++) {
fout<<Employees[i]->name;
fout<<" ";
fout<<Employees[i]->surname;
fout<<" ";
fout<<Employees[i]->workedhours;
fout<<"\r\n";
}
fout.close();
}
void printStruct(Employer **&Employees, int count){
for(int i = 0;i< count; i++) {
cout << " \n";
cout << " \n";
cout << "-----------------------------\n";
cout << "Mark: " << Employees[i]->name << "\n";
cout << "Max resolution: " << Employees[i]->surname << " \n";
cout << "Price: " << Employees[i]->workedhours << " р \n";
}
}
void del(Employer **&Employees, int count) {
for(int i = 0; i< count; i++) {
delete (Employees[i]->name);
delete (Employees[i]->surname);
Employees[i]->workedhours = 0;
}
delete [] Employees;
}
void calculate(Employer **&Employees, int count){
double sallary = 0;
for(int i = 0; i < count; i++){
Employer *e = Employees[i];
cout<<"---------------------------------------------\n";
cout<<"Sallary is: " << (e->workedhours) * 125 / count << " p \n";
cout<<"Name is: " << e->name << "\n";
cout<<"Surmame is: " << e->surname << "\n";
cout<<"---------------------------------------------\n";
}
}
void changeParameters(Employer **&Employees, int count) {
int EmployyNumber;
int c;
char tmp[100];
cout<<"Type monitor number : ";cin>>tmp;
EmployyNumber = EmployyNumber - 1;
cout<<"1. Change Name\n"
<<"2. Change surname\n"
<<"3. Change workedhours\n";
cout<<"--------------------------------------\n"
<<"Type command number: "; cin>>c;
switch (c) {
case 1: {
cout << "\nType name: ";cin >> tmp;
Employees[EmployyNumber]->name = new char((strlen(tmp)) + 1);
strcpy(Employees[EmployyNumber]->name, tmp);
break;
};
case 2: {
cout << "\nType surname: ";cin >> tmp;
Employees[EmployyNumber]->surname = new char((strlen(tmp)) + 1);
strcpy(Employees[EmployyNumber]->surname, tmp);
break;
};
case 3: {
cout << "\nType workedhours: ";cin >> Employees[EmployyNumber]->workedhours;
break;
};
default: cout<<"error";
}
}
int main() {
int c;
int count = 0;
SetConsoleCP(1251);
struct Employer **Employees;
do {
cout<<"-------------------------------------\n"
<<"\Monitor\n"
<<"1. Init array\n"
<<"2. Read from file\n"
<<"3. Total salary\n"
<<"4. Write in file\n"
<<"5. Print on scree\n"
<<"6. Change parameters\n"
<<"7. Exit\n\n";
cout<<"--------------------------------------\n"
<<"Type command number: "; cin>>c;
switch (c) {
case 1: {
if(count != 0) del(Employees, count);
count = InitStruct(Employees);
break;
};
case 2: {
if(count != 0) del(Employees, count);
count = readFromFile(Employees, 1);
};
case 3: {
if(count != 0) calculate(Employees, count);
else{cout<<"\nThe structure is not initialized\n";}
break;
};
case 4: {
if(count != 0) writeInFile(Employees, count);
else{cout<<"\nThe structure is not initialized\n";}
break;
};
case 5: {
if(count != 0) printStruct(Employees, count);
else{cout<<"\nThe structure is not initialized\n";}
break;
};
case 6: {
if(count != 0) changeParameters(Employees, count);
else{cout<<"\nThe structure is not initialized\n";}
break;
};
case 7: {
if(count != 0) del(Employees, count);
return 1;
};
default: cout<<"error";
}
} while(1);
return 0;
}