Witam, mam do oddania projekt na zaliczenie. Jednak muszę wszystko jakoś tak ułożyć, żeby program wykorzystywał klasy i aby były one w miarę sensowne i użyteczne :)
Program służy do szyfrowania i deszyfrowania plików tekstowych. Szyfrator zapisuje po kolei znaki do prostokątnej tablicy takim wężykiem [w dół, w górę, w dół, w górę (przesuwając się o kolumnę w lewo)] a potem odczytuje znaki linia po linii i zapisuje do innego pliku txt. Kodem są podane przez użytkownika wymiary dwuwymiarowej tablicy - wysokość i szerokość. Deszyfrator robi to samo tylko na odwrót ;)
Poniższy kod jest mniej więcej ok, działa. Problem w tym, że właściwie nie wykorzystuje klas. Prosiłbym kogoś o pomoc, lub naprowadzenie mnie na rozwiązanie :
#include <cstdlib>
#include <iostream>
#include <fstream>
using namespace std;
class data {
public:
char file_name[256];
int size;
};
void encryption (int x, int y, char source[256], char target[256]) {
std::fstream plik;
plik.open( source,std::ios::in);
if (plik.is_open()==true) {
std::cout<<"Source file accessed successfully!"<<std::endl;
} else {
std::cout<<"Unable to access source file"<<std::endl;
}
std::fstream plik2;
plik2.open( target,std::ios::out);
if (plik2.is_open()==true) {
std::cout<<"Target accessed successfully!"<<std::endl;
} else {
std::cout<<"Unable to access target file"<<std::endl;
}
char tab[x][y];
int i,j;
for (i=0; i<x; i++) {
for (j=0; j<y; j++) {
tab[i][j]='\0';
}
}
i=j=0;
char zmienna;
zmienna = plik.get();
while (plik.good()) {
i=j=0;
while ((i<x) && (plik.good())) {
tab[i][j]=zmienna;
zmienna = plik.get();
if (i%2==0) j++;
if (j==y) {
j--;
i++;
}
if (i%2==1) j--;
if (j==(-1)) {
j++;
i++;
}
}
i=j=0;
while (j<y) {
while (i<x) {
plik2.put (tab[i][j]);
i++;
}
i=0;
j++;
}
for (i=0; i<x; i++) {
for (j=0; j<y; j++) {
tab[i][j]='\0';
}
}
}
plik.close();
plik2.close();
cout << "Working on files finished!"<<endl<<endl;
system ("PAUSE");
}
void decryption (int x, int y, char source[256], char target[256]) {
std::fstream plik;
plik.open( source,std::ios::in);
if (plik.is_open()==true) {
std::cout<<"Source file accessed successfully!"<<std::endl;
} else {
std::cout<<"Unable to access source file"<<std::endl;
}
std::fstream plik2;
plik2.open( target,std::ios::out);
if (plik2.is_open()==true) {
std::cout<<"Target file accessed successfully!"<<std::endl;
} else {
std::cout<<"Unable to access target file"<<std::endl;
}
char tab[x][y];
int i,j;
for (i=0; i<x; i++) {
for (j=0; j<y; j++) {
tab[i][j]='\0';
}
}
char zmienna;
zmienna = plik.get();
while (plik.good()) {
i=j=0;
while (j<y) {
while ((i<x) && (plik.good())) {
tab[i][j]=zmienna;
zmienna = plik.get();
i++;
}
i=0;
j++;
}
i=j=0;
while (i<x) {
plik2.put (tab[i][j]);
if (i%2==0) j++;
if (j==y) {
j--;
i++;
}
if (i%2==1) j--;
if (j==(-1)) {
j++;
i++;
}
}
for (i=0; i<x; i++) {
for (j=0; j<y; j++) {
tab[i][j]='\0';
}
}
}
plik.close();
plik2.close();
cout << "Working on file finished!" <<endl<<endl;
system ("PAUSE");
}
int main() {
data height;
data width;
data source;
data target;
int a;
cout << "1. Encryption \n2. Decryption"<<endl;
cin >> a;
cout << "Enter source file name:"<<endl;
cin >> source.file_name;
cout << "Enter target file name:"<<endl;
cin >> target.file_name;
cout <<"Enter X dimension:"<<endl;
cin >> width.size;
cout <<"Enter Y dimension:"<<endl;
cin >> height.size;
cout <<endl;
switch (a) {
case 1:
encryption (width.size, height.size, source.file_name, target.file_name);
break;
case 2:
decryption (width.size, height.size, source.file_name, target.file_name);
break;
default:
return 0;
break;
}
}
Z góry dziękuję za pomoc :)
// pokolorowane, formatowanie w "Java-style"; może być Marku? - R