Skip to content

Instantly share code, notes, and snippets.

@ad-m
Last active August 29, 2015 14:14
Show Gist options
  • Save ad-m/e587b0e06be8667fac75 to your computer and use it in GitHub Desktop.
Save ad-m/e587b0e06be8667fac75 to your computer and use it in GitHub Desktop.
#include<iostream>
using namespace std;
/* Zadanie 1
* Grupa I-2
* Dany jest ciag n-elementowy liczb calkowitych zakonczony zerem.
* Napisz program, ktory wczytuje kolejne elementy tego ciagu policzy
* i wypisze iloczyn cyfr liczb nieparzystych i sume cyfr
* liczb nieparzystych. Uzyj funkcji.
* Dane przekazuj przez parametry. */
int suma_cyfr(int liczba){
int r=0;
while(liczba>0){
r+=liczba%10;
liczba/=10;
};
return r;
}
int iloczyn_cyfr(int liczba){
int r=1;
while(liczba>0){
r*=liczba%10;
liczba/=10;
};
return r;
}
bool czy_parzysta(int liczba){
return (liczba%2==0);
};
void oblicz(int liczba, int &parzyste, int &nieparzyste){
if(czy_parzysta(liczba)){
parzyste+=suma_cyfr(liczba);
}else{
nieparzyste*=iloczyn_cyfr(liczba);
};
};
void wczytaj(int &parzyste, int &nieparzyste){
int liczba;
do{
cin >> liczba;
oblicz(liczba, parzyste, nieparzyste);
}while(liczba!=0);
}
int main(){
int parzyste=0;
int nieparzyste=1;
wczytaj(parzyste, nieparzyste);
cout << "Iloczyn cyfr liczb nieparzystych" << nieparzyste << endl;
cout << "Suma cyfr liczb parzystych" << parzyste << endl;
};
#include<iostream>
#include<string>
#include<vector>
/* Grupa I-2
* Zadanie 2
* Dany jest ciag znakow zakonczony znakiem #. Napisz program, ktory
* znajdzie i wypisze najdluzsze podciagi malych liter. Uzyj funkcji. */
using namespace std;
void wypisz_wektor(vector<char> T){
for(unsigned int i=0; i<=T.size(); i++){
cout << T[i];
};
};
void operuj(vector<char> &najdluzszy){
vector<char> ciag;
while((znak=cin.get())!='#'){
if(znak>='a' && znak<='z'){
ciag.push_back(znak);
}else{
if(najdluzszy.size()<ciag.size()){
najdluzszy=ciag;
wypisz_wektor(ciag);
};
ciag.clear();
}
};
};
int main(){
char znak;
vector<char> najdluzszy;
operuj(najdluzszy);
wypisz_wektor(najdluzszy);
};
#include<iostream>
#include<string>
#include<stdlib.h>
#include <sstream>
/* Grupa I-2
* Zadanie 3
* Dana jest tablica liczb rzeczywistych. Napisz program, ktory na
* podstawie tych danych utworzy dwie nowe tablice. Jedna z nich
* zawiera te liczby, ktorych suma cyfr jest parzysta, a druga
* pozostale. Nastepnie dla kazdej nowej tablicy wypisze te tablice i
* ilosc ich elementow. Uzyj funkcji. */
using namespace std;
void wczytaj_tablice(float *T, int n){
for(int i=0; i<n; i++){
T[i]=(float)(rand()%2500)/10;
};
};
void wypisz_tablice(float *T, int n){
cout << "Liczba rekordow: " << n << endl;
cout << "Rekordy: ";
for(int i=0; i<n; i++){
cout << "[" << T[i] << "]";
};
cout << endl;
};
int suma_cyfr(float liczba){
int r=0;
std::ostringstream ss;
ss << liczba;
const char* result = ss.str().c_str();
while(*result != '\0'){
if(*result == '.'){ result++; continue;};
cout << *result;
r+=(*result-48);
result++;
};
return r;
}
void oblicz(float *T, int n, float *parzyste, int &m, float *nieparzyste, int &l){
for(int i=0; i<n; i++){
if(suma_cyfr(T[i])%2==0){
parzyste[m]=T[i];
m++;
}else{
nieparzyste[m]=T[i];
l++;
};
};
};
int main(){
srand(5);
int n=0, m=0, l=0;
cin >> n;
float *T=new float[n];
float *parzyste=new float[n];
float *nieparzyste=new float[n];
wczytaj_tablice(T, n);
wypisz_tablice(T, n);
oblicz(T, n, parzyste, m, nieparzyste, l);
cout << "===Wszystkie===" << endl;
wypisz_tablice(T, n);
cout << "===Parzyste===" << endl;
wypisz_tablice(parzyste, m);
cout << "===Nieparzyste===" << endl;
wypisz_tablice(nieparzyste, l);
};
#include<iostream>
#include<fstream>
using namespace std;
/* Grupa I-2
* Zadanie 4
* Dana jest struktura firmy nazwa, adres, przychod, koszty.
* Firmy zapisane sa w pliku binarnym. Napisz program, ktory umozliwi
* zmiane wybranego rekordu. */
struct TFirma{
char nazwa[20];
char adres[20];
float przychod;
float koszty;
void wczytaj();
void wypisz();
};
void TFirma::wczytaj(){
cout << "Nazwa: "; cin >> nazwa;
cout << "Adres: "; cin >> adres;
cout << "Przychod: "; cin >> przychod;
cout << "Koszty: "; cin >> koszty;
};
void TFirma::wypisz(){
cout << "Nazwa: " << nazwa << endl;
cout << "Adres: " << adres << endl;
cout << "Przychod: " << przychod << endl;
cout << "Koszty: " << koszty << endl;
};
int liczba(){
fstream plik("baza.dat", ios::in | ios::binary);
plik.seekp(ios::end);
plik.close();
return plik.tellp()/sizeof(TFirma);
};
void dodaj(){
fstream plik("baza.dat", ios::out | ios::ate);
TFirma rekord;
rekord.wczytaj();
plik.write(reinterpret_cast<char*>(&rekord), sizeof(TFirma));
plik.close();
};
void aktualizuj(){
fstream plik("baza.dat", ios::out | ios::in);
TFirma rekord;
int id;
int max = liczba();
do{
cout << "POdaj numer rekordu";
cin >> id;
}while(id < 0 || id > max);
plik.seekp(sizeof(TFirma)*id);
plik.seekg(sizeof(TFirma)*id);
plik.read(reinterpret_cast<char*>(&rekord), sizeof(TFirma));
rekord.wypisz();
cout << "==Aktualizacja==" << endl;
rekord.wczytaj();
plik.write(reinterpret_cast<char*>(&rekord), sizeof(TFirma));
plik.close();
};
void menu(){
int choose;
do{
cout << "1 - Dodaj" << endl;
cout << "2 - Aktualizuj" << endl;
cout << "0 - Koniec" << endl;
cin >> choose;
switch(choose){
case 1:
dodaj();
break;
case 2:
aktualizuj();
break;
case 0:
cout << "Bye";
break;
default:
cout << "Nie ma takiej opcji. Sprobuj ponownie!";
};
}while(choose !=0);
};
int main(){
menu();
};
#include <iostream>
#include <vector>
using namespace std;
/* Grupa 1
* Zadanie 1
* Dany jest ciag n-elementowy liczb calkowitych. Napisz program
* obliczajacy najdluzszy podciag zawierajacy liczby podzielne przez 3.
* Wypisz dlugosc i ten podciag, jesli wiecej to wszystkie. */
int main(){
vector<int> ciag;
vector<int> ciag_max;
int liczba;
int n;
cin >> n;
while(n>0){
cin >> liczba;
if(liczba%3 == 0){
ciag.push_back(liczba);
}else{
ciag.clear();
};
ciag_max = ciag_max.size() > ciag.size() ? ciag_max : ciag;
n--;
};
cout << "Najdluzszy ciag podzielnych przez 3 mial dlugosc " << ciag_max.size() << ":";
for(unsigned int i=0; i<ciag_max.size(); i++){
cout << ciag_max[i];
if(i!=ciag_max.size()-1){
cout << ",";
};
};
};
#include<iostream>
#include<cstdlib>
using namespace std;
/* Grupa I
* Zadanie 2
* Dana jest tablica NxM liczb rzeczywistych. N i M sa nieparzyste.
* Napisz program, ktory oblicze sume liczb z tej tablicy w sposob
* wskazany na rysunku. */
void wypelnij(int **T, int n,int m){
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
T[i][j]=rand()%20+1;
};
};
};
void wypisz(int **T, int n,int m){
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
cout << "[" << T[i][j] << "]\t";
};
cout << endl;
};
};
void add(int &suma, int **T, int x, int y){
cout << suma << "+" << T[x][y] << "(" << x << "x" << y << ")" << endl;
suma+=T[x][y];
};
int main(){
int M,N;
M=5;
//cin >> M;
N=5;
//cin >> N;
int **T = new int * [N];
for(int i=0; i<N; i++){
T[i]=new int[M];
};
wypelnij(T, N,M);
wypisz(T, N, M);
int x = N/2;
int y = M/2;
int j=1;
int suma=0;
cout << "1:" << endl;
for(int end=x-j; x>end; x--){
add(suma, T, x, y);
};
while(x>=0 && y>=0){
cout << "2:" << endl;
for(int end=y+j; y<end; y++){
cout << end << endl;
add(suma, T, x, y);
};
cout << "3:" << endl;
for(int end=x+j+1; x<end; x++){
cout << end << endl;
add(suma, T, x, y);
};
cout << "4:" << endl;
for(int end=y-j-1; y>end; y--){
cout << end << endl;
add(suma, T, x, y);
};
cout << "5:" << endl;
for(int end=x-j-2; x>end; x--){
cout << end << endl;
add(suma, T, x, y);
};
j+=2;
cout << "============" << endl;
};
for(int i=0; i<N; i++){
delete [] T[i];
};
delete [] T;
};
#include<iostream>
using namespace std;
/* Grupa I
* Zadanie 3
* Oblicz n-ty wyraz ciagu fibonacciego.
* Wzor: f_n_ = f_n-1+f_n-2_, gdzie f_0_=0, f_1_=1.
* Wykonaj napisany program krok po kroku.
* Jaki bedzie wynik dla n=6. */
int fib(int n){
return (n < 2 ? n : fib(n-1) + fib(n-2));
};
int main(){
int n;
cin >> n;
for(int i=0; i<=n; i++){
cout << i << "=>" << fib(i) << endl;
};
};
#include<iostream>
#include<fstream>
using namespace std;
/* Grupa 1
* Zadanie 4
* Dana jest lista pudelek prostopadlosciennych zapisanych w pliku
* binarnym. Dobierz strukture do nastepujacych funkcjonalnosci:
* - Wypisz pudelka o najwiekszej objetosci
* - Wypisz pudelka do przechowywania gwozdzi. */
enum Kategorie { Gwozdzie, Narzedzia, Spinacze };
struct TPudelko{
enum Kategorie zawartosc;
float x;
float y;
float z;
float objetosc();
void wypisz();
void wczytaj();
};
float TPudelko::objetosc(){
return x*y*z;
};
void TPudelko::wypisz(){
cout << zawartosc << "(" << x << "x" << y << "x" << z << ")" << endl;
};
void TPudelko::wczytaj(){
int a;
cin >> a;
zawartosc = Kategorie(a);
cin >> x;
cin >> y;
cin >> z;
};
void pokaz_max(){
fstream plik("baza.dat", ios::in | ios::binary);
TPudelko pudelko;
float max;
bool first=true;
while(true){
plik.read(reinterpret_cast<char*>(&pudelko), sizeof(pudelko));
if(plik.eof()){ break;};
if(first || max>pudelko.objetosc()){
pudelko.wypisz();
max=pudelko.objetosc();
first=false;
}
};
plik.seekp(0);
while(true){
plik.read(reinterpret_cast<char*>(&pudelko), sizeof(pudelko));
if(plik.eof()){ break;}
if(pudelko.objetosc() == max){
pudelko.wypisz();
}
};
plik.close();
};
void pokaz_gwozdzie(){
fstream plik("baza.dat", ios::in | ios::binary);
TPudelko pudelko;
while(true){
plik.read(reinterpret_cast<char*>(&pudelko), sizeof(pudelko));
if(plik.eof()) break;
if(pudelko.zawartosc==Gwozdzie){
pudelko.wypisz();
}
};
plik.close();
};
/*void dopisz(){
TPudelko pudelko;
pudelko.wczytaj();
fstream plik("baza.dat", ios::out | ios::app);
plik.write(reinterpret_cast<char*>(&pudelko), sizeof(pudelko));
plik.close();
};*/
void menu(){
int choose;
do{
cout << "1 - Pokaz najwieksze" << endl;
cout << "2 - Pokaz pudelka na gwozdzie" << endl;
//cout << "3 - Dopisz" << endl;
cout << "0 - Powrot" << endl;
cin >> choose;
switch(choose){
case 1:
pokaz_max();
break;
case 2:
pokaz_gwozdzie();
break;
//case 3:
// dopisz();
// break;
case 0:
cout << "Bye!";
break;
default:
cout << "Podana opcja nie istnieje!";
};
}while(choose!=0);
};
int main(){
menu();
};
#include <iostream>
using namespace std;
/* Grupa II
* Zadanie 1
* Dany jest ciag n-elementowy liczb calkowitych. Napisz program
* wypisujacy wszystkie liczby majace pierwsza i ostatnia cyfre taka
* sama */
bool warunek(int liczba){
int pierwsza=liczba%10;
do{
liczba/=10;
}while(liczba>10);
int ostatnia=liczba%10;
return (ostatnia==pierwsza);
};
void akcja(){
int liczba;
cout << "Podaj liczbe:"; cin >> liczba;
if(warunek(liczba)){
cout << liczba << "spelnia zadany warunek" << endl;
};
};
void wczytaj(){
int n;
cout << "Podaj n:"; cin >> n;
while(n>0){
akcja();
n--;
};
};
int main(){
wczytaj();
};
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
/* Grupa II
* Zadanie 2
* Dana jest tablica NxM liczb rzeczywistych. N i M sa nieparzyste.
* Napisz program, ktory oblicze sume liczb z tej tablicy w sposob
* wskazany na rysunku. */
/* Od autora: Nie obsluguje prawidlowo przypadku, gdy N!=M */
void wczytaj(int **T, int n, int m){
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
T[i][j]=rand()%25;
};
};
};
void wypisz(int **T, int n, int m){
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
cout << "[" << T[i][j] << "]\t";
};
cout << endl;
};
};
void wypisz_rekord(int **T,int x,int y){
cout << T[x][y] << "(" << x << "x" << y << ")" << endl;
};
int oblicz(int **T, int n, int m){
int x=n/2;
int y=n/2;
int suma = T[x][y];
wypisz_rekord(T,x,y);
x--;
int j=1;
while(x>=0 && y>=0){
cout << "---" << endl;
for(int end=y+j; y<end; y++){ // w dol
suma+=T[x][y];
wypisz_rekord(T,x,y);
};
cout << "---" << endl;
for(int end=x+j+1; x<end; x++){ // w prawo
suma+=T[x][y];
wypisz_rekord(T,x,y);
};
cout << "---" << endl;
for(int end=y-j-1; y>end; y--){ // w lewo
suma+=T[x][y];
wypisz_rekord(T,x,y);
};
cout << "---" << endl;
for(int end=x-j-2; x>end; x--){ // w gore
suma+=T[x][y];
wypisz_rekord(T,x,y);
};
cout << "======";
};
return suma;
};
int main(){
srand(time(NULL));
int N;
cout << "Podaj N:";
cin >> N;
int M;
cout << "Podaj M:";
cin >> M;
int **T = new int*[N];
for(int i=0; i<N; i++){
T[i] = new int[M];
};
wczytaj(T, N,M);
wypisz(T, N, M);
cout << "Suma:" << oblicz(T, N, M);
};
#include<iostream>
using namespace std;
/* Grupa 2
* Zadanie 1
* Oblicz n-ty wyraz ciagu fibonacciego.
* Wzor: f_n_=fib_n-1_ + fib_n-2_ f_0_ = 1 fib_1_=1
* Wykonaj zapisany program krok po kroku. Jaki bedzie wynik dla n=5. */
int fib(int n){
return (n < 2 ? 1 : fib(n-1) + fib(n-2));
};
int main(){
for(int i=0; i<=5; i++){
cout << "fib(" << i << ") => " << fib(i) << endl;
};
};
#include<iostream>
#include<fstream>
#include<cstring>
using namespace std;
struct TTowar{
char nazwa[20];
char dostawca[20];
unsigned int ilosc;
float cena;
void wczytaj();
};
void TTowar::wczytaj(){
cin >> nazwa;
cin >> dostawca;
cin >> ilosc;
cin >> cena;
};
void dodaj(){
fstream plik("baza2.dat", ios::out | ios::binary | ios::app);
TTowar rekord;
rekord.wczytaj();
plik.write(reinterpret_cast<char*>(&rekord), sizeof(TTowar));
plik.close();
};
int zapisz_rekordy(){
int n=0;
fstream plik("baza2.dat", ios::in | ios::binary | ios::app);
fstream plik2;
TTowar rekord;
while(true){
plik.read(reinterpret_cast<char*>(&rekord), sizeof(TTowar));
if(plik.eof()) break;
plik2.open(rekord.dostawca, ios::binary | ios::out);
plik2 << rekord.nazwa << "\t" << rekord.cena << "zl\t" << rekord.ilosc << "szt." << endl;
plik2.close();
n++;
};
plik.close();
return n;
};
int index(char **T, int n, char dostawca[20]){
for(int i=0; i<n;i++){
if(strcmp(T[i], dostawca) == 0){
return i;
}
};
return -1;
};
void zapisz_sumy(int n){
fstream plik("baza.dat", ios::in | ios::binary | ios::app);
fstream plik2;
// Tworzymy tablice, tablice charow
int m=0; // liczba rekordow w tablicach sumy i dostawcy
float *sumy = new float[n];
char **dostawcy = new char * [n];
for(int i=0; i<n; i++){
dostawcy[i] = new char [20];
};
// Wczytujemy rekordy do w/w tablic z odpowiednim sumowaniem
TTowar rekord;
while(true){
plik.read(reinterpret_cast<char*>(&rekord), sizeof(TTowar));
if(plik.eof()) break;
int pozycja = index(dostawcy, m, rekord.dostawca);
if(pozycja==(-1)){ // dopisujemy nowy
sumy[m] = 0;
dostawcy[m] = rekord.dostawca;
m++;
}else{ // aktualizujemy
sumy[pozycja]+=rekord.cena;
};
n++;
};
plik.close();
for(int i=0; i<m; i++){ // Nie dziala
cout << "Zapisywanie dostawcy " << dostawcy[m] << endl;
plik2.open(dostawcy[m], ios::out | ios::app);
plik2 << "\t" << sumy[m] << "zl\t" << endl;
plik2.close();
};
//delete [] sumy;
//for(int i=0; i<n; i++){
// delete [] dostawcy[i];
//};
//delete [] dostawcy;
};
void zapisz_do_plikow(){
int n=zapisz_rekordy();
cout << "Rekordow w bazie danych " << n << endl;
zapisz_sumy(n);
};
void menu(){
int choose;
do{
cout << "1 - dodaj" << endl;
cout << "2 - zapisz do plikow" << endl;
cout << "0 - koniec" << endl;
cin >> choose;
switch(choose){
case 1:
dodaj();
break;
case 2:
zapisz_do_plikow();
break;
case 0:
cout << "Bye!" << endl;
default:
cout << "Nieznana akcja" << endl;
};
}while(choose !=0);
};
int main(){
menu();
};
#include<iostream>
#include<math.h> /* pow */
using namespace std;
/*
* Grupa III
* Zadanie I
* Dany jest ciąg liczb całkowitych zakończony zerem. Napisz program,
* który wypisze te liczby dla których suma kwadratów cyfr >= od
* iloczynu cyfr. */
int kwadraty(int liczba){
int wynik=0;
do{
wynik+=pow(liczba%10, 2);
liczba=liczba/10;
}while(liczba>0);
return wynik;
};
int iloczyn(int liczba){
int wynik=1;
do{
wynik=wynik*(liczba%10);
liczba=liczba/10;
}while(liczba>0);
return wynik;
};
int main(){
int liczba;
do{
cin >> liczba;
if(kwadraty(liczba)>=iloczyn(liczba)){
cout << liczba << endl;
};
}while(liczba != 0);
return 0;
};
#include<iostream>
#include<math.h> /* pow */
#include<stdlib.h>
using namespace std;
/*
* Grupa III
* Zadanie 2
* Dany jest ciag n-elementowy punktow 3-wymiarowych. Napisz program,
* który dla punktow znajdzie punkty.
* - Najbliższe (jak jest kilka takich, to podaj wszystkie).
* - Najdalsze (jak jest kilka takich, to podaj wszystkie). */
struct TPunkt{
int x;
int y;
int z;
void wczytaj();
void wypisz();
};
void TPunkt::wczytaj(){
x = rand()%50;
y = rand()%50;
z = rand()%50;
//cin >> x;
//cin >> y;
//cin >> z;
};
void TPunkt::wypisz(){
cout << "(" << x << " x " << y << " x " << z << ")";
};
int abs(int a){
return (a >= 0 ? a : -a);
};
float odleglosc(TPunkt a, TPunkt b){
return sqrt(pow(abs(a.x-b.x), 2)+pow(abs(a.z-b.z), 2)+pow(abs(a.y-b.y), 2));
};
int main(){
srand(5);
TPunkt *punkty;
int n;
cin >> n;
if(n<2){
cout << "Minimum 2 punkty" << endl;
return 0;
};
punkty = new TPunkt[n];
for(int i=0; i<n; i++){
punkty[i].wczytaj();
punkty[i].wypisz();
};
cout << endl;
float min, max, odl;
for(int i=0; i<n; i++){
cout << "Obliczenia dla punktu: ";
punkty[i].wypisz();
cout << endl;
min=odleglosc(punkty[i], punkty[i+1%n]);
max=min;
for(int j=0; j<n; j++){
if(i == j){
continue;
};
odl = odleglosc(punkty[i], punkty[j]);
min = min > odl ? odl : min;
max = max < odl ? odl : max;
};
cout << "Minimalna odleglosc" << min << endl;
cout << "Maksymalna odleglosc" << max << endl;
cout << "Najblizsze dla punktu: ";
for(int j=0; j<n; j++){
if(i == j){
continue;
};
odl = odleglosc(punkty[i], punkty[j]);
if(odl == min) punkty[j].wypisz();
};
cout << endl;
cout << "Najdalsze dla punktu: "; // Hmm...
for(int j=0; j<n; j++){
if(i == j){
continue;
};
odl = odleglosc(punkty[i], punkty[j]);
if(odl == max){ punkty[j].wypisz(); };
};
cout << endl << endl;
};
};
#include<iostream>
#include<math.h>
using namespace std;
/* Grupa III
* Zadanie 3
* Napisz program, ktory z danego ciagu liczb rzeczywistych
* zakonczonego 0 bedzie szukal maksymalnej liczy, ktora ma identyczna
* czesc calkowita i czesc ulamkowa. Np. 123.123 spelnia ten warunek,
* a 123.321 nie spelnia. */
int ulamkowa(double liczba){
double calkowita;
double ulamkowa = modf(liczba, &calkowita);
do{
ulamkowa*=10;
}while((int)ulamkowa%10!=0);
cout << ulamkowa/10;
return ulamkowa/10;
};
void operacja(){
double liczba, max;
bool first = true;
do{
cin >> liczba;
if(first) max = liczba;
if((int)liczba == ulamkowa(liczba) &&
(first || max > liczba)){
max = liczba;
};
first=false;
}while(liczba!=0);
cout << "Maksymalna liczba spelniajaca kryterium wynosi: " << max;
};
int main(){
operacja();
};
#include <iostream>
#include <stdio.h>
#include <fstream>
#include <string.h>
using namespace std;
/* Grupa III
* Zadanie 4
* Dana jest lista ksiazek o strukturze: autor, tytul, wydawnictwo, rok
* wydania zapisana w pliku binarnym. Napisz program, ktory umozliwi:
* - Usuniecie ksiazki
* - Wyszukanie ksiazek o zadanym autorze lub tytule */
struct TKsiazka{
char tytul[20];
char autor[20];
char wydawnictwo[20];
int rok;
void wczytaj();
void wypisz();
};
void TKsiazka::wczytaj(){
cin >> tytul;
cin >> autor;
cin >> wydawnictwo;
cin >> rok;
};
void TKsiazka::wypisz(){
cout << tytul << "\t";
cout << autor << "\t";
cout << wydawnictwo << "\t";
cout << rok;
};
void usun_menu();
void usun(int numer);
void wyszukaj_menu();
void wyszukaj(int parametr, char klucz[]);
void wyszukaj(int parametr);
void dodaj_menu();
void menu();
int main(){
menu();
};
void menu(){
int choose;
do{
cout << "1 - Usun pozycje" << endl;
cout << "2 - Wyszukaj pozycje" << endl;
cout << "3 - Dodaj pozycje" << endl;
cout << "0 - Powrot" << endl;
cin >> choose;
switch(choose){
case 1:
usun_menu();
break;
case 2:
wyszukaj_menu();
break;
case 3:
dodaj_menu();
break;
case 0:
cout << "Bye";
break;
default:
cout << "Unknown action. Try again!" << endl;
};
}while(choose!=0);
};
void usun_menu(){
wyszukaj(3);
cout << "Podaj numer:";
int liczba;
cin >> liczba;
usun(liczba);
};
void usun(int numer){
fstream plik("baza.dat", ios::in | ios::binary);
fstream plik_tmp("baza_tmp.dat", ios::out | ios::binary);
TKsiazka pozycja;
int i=1;
while(true){
plik.read(reinterpret_cast<char*>(&pozycja), sizeof(TKsiazka));
if(plik.eof()) break;
if(i == numer) continue;
plik_tmp.write(reinterpret_cast<char*>(&pozycja), sizeof(TKsiazka));
};
plik.close();
plik_tmp.close();
remove("baza.dat");
rename("baza_tmp.dat", "baza.dat");
};
void wyszukaj_menu(){
int choose;
char klucz[20];
do{
cout << "1 - wyszukaj po tytule" << endl;
cout << "2 - wyszukaj po autorze" << endl;
cout << "3 - wszystkie" << endl;
cout << "0 - powrot" << endl;
cin >> choose;
switch(choose){
case 1:
case 2:
cout << "Podaj slowo kluczowe: ";
cin >> klucz;
case 3:
wyszukaj(choose, klucz);
break;
case 0:
cout << "Bye!";
break;
default:
cout << "Unknown action. Try again!" << endl;
};
}while(choose!=0);
};
void wyszukaj(int parametr){
char klucz[1];
wyszukaj(parametr, klucz);
};
void wyszukaj(int parametr, char klucz[]){
fstream plik("baza.dat", ios::in | ios::binary);
TKsiazka pozycja;
int i=1;
cout << "ID\tTytul\tAutor\tWydawnictwo\tRok" << endl;
while(true){
plik.read(reinterpret_cast<char*>(&pozycja), sizeof(TKsiazka));
if(plik.eof()) break;
if((parametr == 3) ||
(parametr == 1 && strcmp(pozycja.tytul, klucz) == 0) ||
(parametr == 2 && strcmp(pozycja.autor, klucz) == 0)){
cout << i << "\t";
pozycja.wypisz();
cout << endl;
};
};
};
void dodaj_menu(){
TKsiazka pozycja;
pozycja.wczytaj();
cout << "Wczytano: ";
pozycja.wypisz();
fstream plik("baza.dat", ios::app | ios::out);
plik.write(reinterpret_cast<char*>(&pozycja), sizeof(TKsiazka));
plik.close();
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment