anders4uMedlem sedan apr. 2002271 inlägg Hej alla webbforumare
med denna kod skriver jag en massa info om kunder till en fil.
do{
cout \<\< "\\nKundnummer: " \<\< "\\t" ; cin \>\> kundnummer;
cout \<\< "Namn: " \<\< "\\t" \<\< "\\t"; cin \>\> namn;
cout \<\< "Telefonnummer: " \<\< "\\t"; cin \>\> telefonnummer;
cout \<\< "Postnummer: " \<\< "\\t"; cin \>\> postnummer;
cout \<\< "Vill du forts\\204tta (j/n) "; cin \>\> fortsatt;
cout \<\< endl \<\< endl;
ofstream kundlista("postnr.txt", ios::app);
kundlista \<\< kundnummer \<\< endl;
kundlista \<\< namn \<\< endl;
kundlista \<\< telefonnummer \<\< endl;
kundlista \<\< postnummer \<\< endl;
kundlista \<\< "------------------------------" \<\< endl \<\< endl;
}while(fortsatt== 'j');
Mitt problem:
jag vill senare skriva ett postnummer och få ut alla kunder som har detta postnummer.
tacksam för hjälp,Anders.
SPiNMedlem sedan mars 20007 896 inlägg Läs in filen till en array, så att du får varje rad på en plats. Jämför sedan var 6 plats mot postnumret, börja loopen på 4, och kontrollera sist av allt den första posten i textfilen, utanför loopen.
Finns säkert bättre sätt, men det här var vad som poppade upp i min skalle. ;)
PeWMedlem sedan juni 200010 432 inlägg
Läs in filen till en array, så att du får varje rad på en plats. Jämför sedan var 6 plats mot postnumret, börja loopen på 4, och kontrollera sist av allt den första posten i textfilen, utanför loopen.
Så kan man mkt väl göra när man har lite data och placerar detta i txt-filer. Alt att du petar in nåt skiljetecken och sparar ned data i en enda rad...
I övrigt om du ska hantera många poster är det betydligt bättre att spara ned det binärt och låta varje post representeras av en klass som innehåller din data. Ska du dessutom ha det sökbart är det lämpligare med hashtabell eller ett sökträd som lagringsformat än en statisk array, i programmet.
SPiNMedlem sedan mars 20007 896 inlägg Eller om man då ska göra om allt, använda en DBMS. ;)
anders4uMedlem sedan apr. 2002271 inlägg Tackar för svaren!
nu ska jag se om jag lyckas med nått av det, Kram på er alla.
SPiNMedlem sedan mars 20007 896 inlägg Jaja, du kanske har gott om tid på dig för att uppfinna hjulet ännu en gång. §e ;)
PeWMedlem sedan juni 200010 432 inlägg Lamer, lamer, lamer
§e :e :e
uppfinna hjulet ännu en gång
Ska man bara spara lite adresser och namn i den omfattning det här verkar vara (<1000 & console) är det både segare och bökigare att leka med databaskopplingar än att smacka in det i en egen struktur. Snackar vi volymer och byggbara lösningar är det ju en annan sak (fick dock inte det intrycket av denna topic).
En hashtabell eller BST är knappast att uppfinna hjulet igen ;)
SPiNMedlem sedan mars 20007 896 inlägg Nej, jag bara larvades med dig. ;)
Vad jag menade var att man kan bygga efter det redan existerande sättet, istället för att sätta igång med något nytt. Däremot inte sagt att jag inte skulle använda mig av en hashtabell istället för att hålla på med arrayer och skumma metoder för att få det att fungera. ;)
PeWMedlem sedan juni 200010 432 inlägg /me retades oxå.. LAMER :birp
anders4uMedlem sedan apr. 2002271 inlägg Nä!
helt rätt. det är ett litet concol-program med max 200 poster.
jag har inte lyckats så bra än så jag är fortfarande tacksam för enkel och liten c-kod
PeWMedlem sedan juni 200010 432 inlägg OKi
Denna lilla snutt är inte optimerad på sökningen. Men det är iaf ett sätt att peta in dina 200 kunder och skriva ut på skärmen efter postnummersökning. För att optimera sökningen kan man endera köra med träd eller en hashtabell ist för en std::vector.
kund.h :
#ifndef KUND_H
#define KUND_H
#include <string>
class Kund {
public:
virtual ~Kund(){};
virtual const std::string &getKnum()=0;
virtual const std::string &getName()=0;
virtual const std::string &getTele()=0;
virtual const int &getPostnum()=0;
};
class Kunden : public Kund {
public:
Kunden(){};
Kunden(std::string kundnr,std::string namn,std::string tele,int postnr):
m_knr(kundnr),
m_namn(namn),
m_tele(tele),
m_postnr(postnr)
{};
const std::string &getKnum(){ return m_knr; }
const std::string &getName(){ return m_namn;}
const std::string &getTele(){ return m_tele;}
const int &getPostnum(){ return m_postnr; }
private:
std::string m_knr;
std::string m_namn;
std::string m_tele;
int m_postnr;
};
#endif
huvudfilen:
#include<iostream>
#include<string>
#include<fstream>
#include<vector>
#include "kund.h"
using namespace std;
int main(){
string s1,s2,s3;
int num;
ofstream ut("kunder",ios::app);
bool done = false;
char t;
do{
cout << "Mata in nya poster?" << endl;
cin >> t;
if(t=='j'){
cout << "Kundnummer?" << endl;
cin >> s1; ut << s1 << endl;
cout << "Namn?" << endl;
cin >> s2; ut << s2 << endl;
cout << "Telefon?" << endl;
cin >> s3; ut << s3 << endl;
cout << "Postnummer?" << endl;
cin >> num; ut << num << endl;
}
else done=true;
}while(!done);
ut.close();
ifstream in("kunder");
vector<Kund*> v;
v.reserve(200);
while(in){
in >> s1 >> s2 >> s3 >> num;
v.push_back(new Kunden(s1,s2,s3,num));
}
int searchNum;
do{
cout << "Peta in ett postnummer" << endl;
cin >> searchNum;
for(int i=0;i<v.size();i++)
if(v.at(i)->getPostnum()==searchNum){
cout << v.at(i)->getKnum() << endl;
cout << v.at(i)->getName() << endl;
cout << v.at(i)->getTele() << endl;
cout << "-------------" << endl;
}
cout << "Leta igen?" << endl;
cin >> t;
}while(t=='j');
for(int i=v.size()-1;i>=0;i--)
delete v.at(i);
return 0;
}
BeatboxMedlem sedan okt. 20013 217 inlägg En liten kommentar bara. Är inte grundregeln för arv "är en" ? Typ :
class kunden : människa {
}
Det känns som lite overkill med ett interface-arv i detta fall. :-)
Kunden borde kanske ärva från människa och sedan lägger bara kunden till kundspecifik information som t ex kundnummer etc.
PeWMedlem sedan juni 200010 432 inlägg Jorå... visst. Nu slängde jag ihop detta som omväxling från tentapluggandet till i morrn (Java) och kom lite hastigt på att den abstrakta överklassen behövdes i bindningen i vectorn. Därav interfacet. Av lathet orkade jag inte redigera 2 rader med ordet "Kund" och det blev rätt och slätt Kund och kunden ;)
Men även andra individer än människor kan ju vara kunder så... :birp
Overkill? Varför? På det här viset är det ju simpelt att bygga vidare... :)
BeatboxMedlem sedan okt. 20013 217 inlägg
Overkill? Varför? På det här viset är det ju simpelt att bygga vidare...
Nu förstår jag inte riktigt vad du pratar om. Jag har skrivit en drivrutin för NT ENBART för att blinka med en lysdiod på ett I/O kort ! :-)
PeWMedlem sedan juni 200010 432 inlägg Vaaa? :OO
Den här lilla kodsnutten är väl inget att tjafsa om? Vad har dina drivrutiner med ett lösningsförslag på kundregister att göra :q Var lite mer konstruktiv och kom med ett annat förslag då, än att enbart passivt racka ned på denna :)
Såå himla overkill är det inte ;)
BeatboxMedlem sedan okt. 20013 217 inlägg Du kan väl ta ett skämt PeW ! :-) Alla fungerande lösningar är ju godtagbara.
PeWMedlem sedan juni 200010 432 inlägg Ahhh... sorry.
Får skylla på värmen :birp
anders4uMedlem sedan apr. 2002271 inlägg Jag bugar och bockar för dig PeW , supertack, kram på dig.
tack ni andra också.
PeWMedlem sedan juni 200010 432 inlägg Nemas problemas... var bara trevligt med ett litet avbrott från tentahysterin ;) Återkom om det är nåt som det undras över :)