Witam! W internecie jest wiele podobnych tematów jednak żaden nie spełnia moich wymagań :). Otóż mam problem, ponieważ muszę napisać program, który prosi o podanie pewnych danych od użytkownika, a potem zapisuje te dane w pliku .txt wiersz po wierszu. Problem pojawia się jednak przy dodaniu funkcji do programu aby na podstawie podanego słowa wyszukał i wyświetlił wszystkie wiersze które zawierają dane słowo. Czyli, jest program, który zapisuje dane o osobach do pliku a następnie trzeba wyszukać wszystkie osoby o imieniu np. Kasia :). Jak to zrobić? Czytałem o wielu funkcjach ale nadal nie wiem jak tego użyć w sposób opisany powyżej. Z góry dzięki ;)
0
Pacjent pacjent;
fstream plik_szukaj;
plik_szukaj.open( "plik_szukaj.txt", ios::out | ios::app | ios::in);
cout << "Podaj plec pacjenta (K/M): ";
cin >> pacjent.sex;
plik_szukaj << pacjent.sex << "\t";
cout << "Podaj imie pacjenta: ";
cin >> pacjent.name;
plik_szukaj << pacjent.name << "\t";
cout << "Podaj nazwisko pacjenta: ";
cin >> pacjent.surname;
plik_szukaj << pacjent.surname << "\t";
cout << "Podaj wiek pacjenta: ";
cin >> pacjent.age;
plik_szukaj << pacjent.age << "\t";
cout << "Podaj chorobe pacjenta: ";
cin >> pacjent.disease;
plik_szukaj << pacjent.disease << endl;
Mam zrobioną klasę Pacjent
. No i jak użytkownik poda te dane to one są dopisywane do pliku plik_szukaj.txt. A teraz chodzi mi o dodanie funkcji która działałaby w ten sposób:
- Program prosi o podanie frazy
- Podaje frazę
- Program wyświetla wszystkie wiersze zawierające tą frazę w pliku plik_szukaj.txt
Umiem zrobić żeby w konsoli wyświetliło całą zawartość pliku ale nie wiem jak zrobić właśnie to wyszukiwanie.
0
_13th_Dragon napisał(a):
Odczytujesz plik rekord po rekordzie, imię porównujesz z podanym imieniem, jeżeli takie samo to wyświetlasz cały wiersz.
No właśnie to wiem, ale nie wiem jak to zapisać w programie :P
0
/*Program symulujący bazę chorych
zapisujący wprowadzone dane do pliku*/
//Dołączenie potrzebnych bibliotek
#include <iostream>
#include <fstream>
#include <string>
#include <windows.h>
#include <conio.h>
//W programie wykorzystywana jest przestrzeń nazw 'std'. To polecenie oszczędzi nam ciągłego wpisywania 'std'
using namespace std;
/*Funkcja 'fstream' pozwala na stworzenie i operacje na plikach
Ponizej utworzony plik bedzie uzywany w calym programie dlatego utworzony jest na samym poczatku*/
fstream outputFile;
/*Plik 'plik_szukaj' zostal utworzony zeby ulatwic wyszukiwanie danych.
Dane ktore uzytkownik wpisze zostana wpisane rowniz tutaj. Gdzy uzytkownik
bedzie chcial wyszukac pacjenta program przeszuka ten plik*/
fstream plik_szukaj;
//Klasa 'Osoba' która okresla podstawowe dane czlowieka
class Osoba
{
public:
string sex;
string name;
string surname;
int age;
};
/*Klasa 'Pacjent' charakteryzuje konkretnego pacjenta, ktory na cos choruje.
Dziedziczy ona po klasie 'Osoba' dane takie jak wiek czy plec oraz ma wlasną daną- chorobę (ang. disease)*/
class Pacjent : public Osoba
{
public:
string disease;
};
//Funkcja zapisujaca dane do pliku przyjmujaca parametr typu 'Pacjent'
int Write(Pacjent pacjent)
{
//Pobieranie danych od uzytkownika o pacjentach oraz zapisanie do pliku 'outputFile' utworzonego na poczatku programu oraz do pliku 'plik_szukaj'
//Jako ze pobierane dane to pojedyncze slowa mozna je wczytywac za pomoca polecenia 'cin'
cout << "Podaj plec pacjenta (K/M): ";
cin >> pacjent.sex;
outputFile << pacjent.sex << "\t";
plik_szukaj << pacjent.sex << "\t";
cout << "Podaj imie pacjenta: ";
cin >> pacjent.name;
outputFile << pacjent.name << "\t";
plik_szukaj << pacjent.name << "\t";
cout << "Podaj nazwisko pacjenta: ";
cin >> pacjent.surname;
outputFile << pacjent.surname << "\t";
plik_szukaj << pacjent.surname << "\t";
cout << "Podaj wiek pacjenta: ";
cin >> pacjent.age;
outputFile << pacjent.age << "\t";
plik_szukaj << pacjent.age << "\t";
cout << "Podaj chorobe pacjenta: ";
cin >> pacjent.disease;
outputFile << pacjent.disease << endl;
plik_szukaj << pacjent.disease << endl;
//Zmienna tn dzieki ktorej uzytkownik moze zadecydowac czy chce wpisac wiecej pacjentow czy nie
string tn;
cout << "Chcesz wpisac wiecej pacjentow? (t/n): ";
cin >> tn;
//Jesli uzytkownik wpisze litere 't' program wyczysci ekran systemowym poleceniem 'cls' oraz jeszcze raz wykona funkcję Write()
if(tn == "t")
{
system("cls");
Write(pacjent);
}
//Jesli zas uzytkownik wpisze litere 'n' to program zakonczy dzialanie
else if(tn == "n")
{
//Funkcja glowna ma typ 'int' dlatego musi zwracac jakas wartosc, np 0
return 0;
}
//A jesli uzytkownik wpisze inny znak program go o tym powidomi i sie zamknie
else
{
cout << "Wpisales zly znak: ";
cin >> tn;
}
}
//Funkcja wyswietlajaca wszystkie wiersze pliku
void List()
{
if( plik_szukaj.good() )
{
string napis;
cout << "Wynik wyszukiwania:" << endl;
while(!plik_szukaj.eof())
{
getline(plik_szukaj, napis);
cout << napis << endl;
}
plik_szukaj.close();
}
else cout << "Nie udalo otworzyc sie pliku!" << endl;
}
//Funkcja główna programu
int main()
{
//Tworzenie pliku wyjsciowego, w ktorym beda zapisywane dane. Opcje po przecinku zezwalają na odczyt, zapis i dopisywanie danyc do pliku
outputFile.open("baza_chorych.xls", ios::out | ios::app | ios::in);
/*Do pliku ponizej zapisywane beda dane pacjentow, aby potem je mozna bylo wyszukac
Bowiem z pliku Excelowego nie mozna odczytac danych poniewaz na ekran wyswietlane zostaja kody kratek itp, a z pliku txt czyta normalnie
plik .xls jest natomiast czytelniejszy.*/
plik_szukaj.open( "plik_szukaj.txt", ios::out | ios::app | ios::in);
//Tworzenie 'interfejsu graficznego' tak zeby plik 'ladnei' wygladal
outputFile << "=========================================" << endl;
outputFile << " Plec\tImie\tNazwisko\tWiek\tChoroba" << endl;
outputFile << "=========================================" << endl;
//Deklaracja przykladowego obiektu klasy 'Pacjent'- JanKowalski
Pacjent JanKowalski;
//Deklaracja zmiennej pozwalajacej na wybor opcji
int menu;
//Tytuł oraz instrukcja dla użytkownika jak ma korzystać z programu
cout << "\n\t\t\t\tBaza chorych\n\n" << endl;
cout << "Witaj! Wybierz odpowiednia opcje i zacznij prace z programem. Zycze milej pracy.\n" << endl;
cout << "[1] Dodaj pacjenta" << endl;
cout << "[2] Wyszukaj pacjenta" << endl;
cout << "Co chcesz robic?: ";
cin >> menu;
switch(menu)
{
case 1:
Write(JanKowalski);
break;
case 2:
List();
break;
default:
cout << "Wpisales zly znak.";
break;
}
}
To jest cały kod programu. To dziedziczenie wiem, że nie jest potrzebne ale tak ma być bo nie piszę tego dla siebie. I teraz bym chciał żeby była jeszcze funkcja np.Read()
która by wyszukiwała wszystkie wiersze na podstawie wpisanego słowa ;)
- Rejestracja:około 22 lata
- Ostatnio:28 dni
- Postów:5042