Piszę z prośbą o pomoc. Mam do zrobienia projekt C na zaliczenie na koniec semestru, a ja niestety nigdy dobra nie byłam z progamowania ;( ;( Tak po prawdzie to ze mnie kompletna noga i niewiele poza "hello worldem" potrafię napisać a tutaj nauczyciel zadał mi taki program, że nawet nie wiem z której strony się za to zabrać... Muszę zrobić program katalog biblioteczny z nieograniczoną ilością książek, sortowaniem, ich edycją, dodawaniem, zapisem do pliku i koniecznie ma to być na liście jednokierunkowej... Bardzo proszę o pomoc, bo nie wiem, jak w ogólę zaliczę ten przedmiot ;( Nie proszę o gotowe rozwiązanie (chociaż nie ukrywam, że najwięcej by mi to pomogło), ale jeśli można, to bardzo bardzo proszę kogoś obeznanego w C o wyjaśnienie mi, ale tak najprościej i najbardziej przystępnie jak się tylko da jak dokładnie miałabym to zrobić i o co w ogóle w tym wszystkim chodzi
Jeszcze raz bardzo Wszystkich proszę o pomoc...
[C] Katalog biblioteczny - lista jednokierunkowa
-
- Użytkownik
- Posty: 65
- Rejestracja: 19 maja 2011, o 20:33
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Podziękował: 1 raz
- Pomógł: 5 razy
[C] Katalog biblioteczny - lista jednokierunkowa
Witaj.
Może przyda Ci się mój bardzo stary programik napisany w C.
Może przyda Ci się mój bardzo stary programik napisany w C.
Kod: Zaznacz cały
#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct ksiazka
{
char imie[15];
char nazwisko[15];
int telefon;
};
struct ksiazka osoba[51],tmp;// deklaracja zmiennej w strukturze
int n=0; // liczba osob
void dodaj(void)
{
char numer[15];
if(n==49) printf("Ksiazka przepelniona!");
else {
printf("Zostalo jeszcze %d miejsca w bazie\n",(50-n));
puts("Podaj nazwisko");
scanf("%s",osoba[n].nazwisko);
puts("Podaj imie");
scanf("%s",osoba[n].imie);
puts("Podaj numer telefonu");
scanf("%s",&numer);
osoba[n].telefon=atoi(numer);}
n++;
}
void lista(void)
{
if(n<1) printf("Lista jest pusta!");
else
{
for(int i=0;i<n;i++)
{
printf("%s %s %d",osoba[i].nazwisko,osoba[i].imie,osoba[i].telefon);
printf("\n");
}
}
}
void sortuj(void)
{
for(int i=0;i<n;i++)
{
if(strcmp(osoba[i].imie,osoba[i+1].imie)>0)
{
osoba[i]=tmp;
osoba[i]=osoba[i+1];
osoba[i+1]=osoba[i];
}
}
}
int main()
{
int a;
while(a!=0)
{
char ch;
printf("Jaka operacje mam wykonac?\n");
printf(" d - dodaj \n p - pokaz aktualna liste \n s - sortuj \n z - zakoncz \n");
scanf("%c",&ch);
switch (ch)
{
case 'd': dodaj();
break;
case 'p': lista();
break;
case 's': // sortuj
break;
case 'z': a=0;
break;
}
}
getch();
return 0;
}
-
- Użytkownik
- Posty: 2
- Rejestracja: 3 sty 2012, o 21:01
- Płeć: Kobieta
- Lokalizacja: Warszawa
- Podziękował: 1 raz
[C] Katalog biblioteczny - lista jednokierunkowa
Próbowałam, próbowałam... i żaden sposób nie chodzi... Działa mi tylko dodawanie do listy i wyświetlanie... Nic więcej nie potrafię, mimo, że czytałam już najróżniejsze strony i fora ;(
Wklejam kod, może ktoś coś mi pomoże? Każda pomoc się przyda - termin jest strasznie krótki, a ja już nie mam pomysłów W kodzie w komentarzach są niektóre rzeczy, które próbowałam zrobić, ale nie chodzą/nie umiem zrobić żeby chodziły... Proszę o pomoc, bo już nie mam pojęcia co robię źle...
Wklejam kod, może ktoś coś mi pomoże? Każda pomoc się przyda - termin jest strasznie krótki, a ja już nie mam pomysłów W kodzie w komentarzach są niektóre rzeczy, które próbowałam zrobić, ale nie chodzą/nie umiem zrobić żeby chodziły... Proszę o pomoc, bo już nie mam pojęcia co robię źle...
Kod: Zaznacz cały
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
typedef struct lista{
int *obecny;
char *tytul;
char *nazwisko_autora;
char *imie_autora;
char *oddzial_biblioteki;
int nr_katalogowy;
struct lista *nastepny;
} element;
element *glowa = NULL;
element *dodaj(element **wsk, char *tytul, char *nazwisko_autora, char *imie_autora, char *oddzial_biblioteki, int nr_katalogowy){
element *nowy; //
nowy = malloc(sizeof(element));
nowy->nastepny = *wsk;
nowy->obecny = (int*)nowy;
nowy->tytul = tytul;
nowy->nazwisko_autora = nazwisko_autora;
nowy->imie_autora = imie_autora;
nowy->oddzial_biblioteki = oddzial_biblioteki;
nowy->nr_katalogowy = nr_katalogowy;
*wsk = nowy;
return *wsk;
}
element wypisz_liste(element *glowa){
printf("\n-----------------------------------------------------------------------------------\n");
printf("%-30s %-30s %-30s %-30s %-30s\n","Tytul","Nazwisko autora","Imie autora", "Oddzial biblioteki", "Numer katalogowy");
printf("-----------------------------------------------------------------------\n");
while( glowa != NULL )
{
printf("%-30s %-30s %-30s %-30s %-30d\n",
glowa->tytul,
glowa->nazwisko_autora,
glowa->imie_autora,
glowa->oddzial_biblioteki,
glowa->nr_katalogowy);
glowa = glowa->nastepny;
}
}
/*element usun(element **wsk, char *tytul, char *nazwisko_autora)
{
element *wskaznik=*wsk;
while (wskaznik->nastepny != NULL)
{
if (wskaznik->nastepny->tytul == tytul && wskaznik->nastepny->nazwisko_autora == nazwisko_autora) // bierzemy wskaźnik do elementu poprzedzającego
{
element *usuwany=wskaznik->nastepny; // zapamiętujemy usuwany element
wskaznik->nastepny = usuwany->nastepny; // przestawiamy wskaźnik next by omijał usuwany element
free(usuwany); // usuwamy z pamięci
} else
{
wskaznik = wskaznik->nastepny; // idziemy dalej tylko wtedy kiedy nie usuwaliśmy
} // bo nie chcemy zostawić duplikatów
}
}
*/
element usun(element **wsk, char *tytul, char *nazwisko_autora)
{
element *p, *p2;
if(*wsk != NULL){
if((*wsk)->tytul == tytul && (*wsk)->nazwisko_autora == nazwisko_autora){
p = (*wsk)->nastepny;
free(*wsk);
*wsk = p; }
else{
p2 = *wsk;
p = p2->nastepny;
while (p != NULL){
if(p->tytul == tytul && p->nazwisko_autora == nazwisko_autora){
p2->nastepny = p->nastepny;
free(p);
break;
}
p2 = p;
p = p->nastepny;
}
}
}
}
sortuj(element *glowa, char* nazwisko_autora)
{
element *t;
while(glowa)
{
t = glowa->nastepny;
while(t)
{
if(t->nazwisko_autora < glowa->nazwisko_autora)
{
nazwisko_autora = glowa->nazwisko_autora;
glowa->nazwisko_autora = t->nazwisko_autora;
t->nazwisko_autora = nazwisko_autora;
}
t = t->nastepny;
}
glowa = glowa->nastepny;
}
}
//void Import(char *filename);
//void zapis();
//char odczyt();
/*
void zapis(element *glowa)
{
FILE *strumien;
strumien=fopen("plik.txt","r");
element *obecny=glowa;
while(obecny!=NULL)
{
fwrite(obecny->tytul,sizeof(char),strlen(obecny->tytul),strumien);
fwrite(obecny->nazwisko_autora,sizeof(char),strlen(obecny->nazwisko_autora),strumien);
fwrite(obecny->imie_autora,sizeof(char),strlen(obecny->imie_autora),strumien);
fwrite(obecny->oddzial_biblioteki,sizeof(char),strlen(obecny->oddzial_biblioteki),strumien);
fwrite(obecny->nr_katalogowy,sizeof(int),1, strumien);
obecny = obecny->nastepny;
}
fclose(strumien);
}
*/
/*char odczyt(glowa, tytul, nazwisko_autora, imie_autora, oddzial_biblioteki, nr_katalogowy)
{
char name[50];
printf("Podaj nazwe pliku do zaimportowanie (wraz z rozszerzeniem): ");
scanf("%s", name);
Import(name, glowa, tytul, nazwisko_autora, imie_autora, oddzial_biblioteki, nr_katalogowy);
}
void Import(char *filename, glowa, tytul, nazwisko_autora, imie_autora, oddzial_biblioteki, nr_katalogowy)
{
FILE *strumien;
strumien=fopen(filename,"r");
element *obecny=glowa;
while(obecny!=NULL)
{
dodaj(&glowa, tytul, nazwisko_autora, imie_autora, oddzial_biblioteki, nr_katalogowy);
fread(obecny->tytul,sizeof(char),strlen(obecny->tytul),strumien);
fread(obecny->nazwisko_autora,sizeof(char),strlen(obecny->nazwisko_autora),strumien);
fread(obecny->imie_autora,sizeof(char),strlen(obecny->imie_autora),strumien);
fread(obecny->oddzial_biblioteki,sizeof(char),strlen(obecny->oddzial_biblioteki),strumien);
fread(obecny->nr_katalogowy,sizeof(int),1, strumien);
}
fclose(strumien);
}
*/
/*
void odczyt() {
FILE *file;
file = fopen("data.txt", "r");
if(!file) {
printf(" error - no such file ");
exit(1);
}
else {
while(feof(file) == 0) {
element *pointer;
pointer = (element *)malloc(sizeof(element));
element *pointer2;
pointer2 = (element *)malloc(sizeof(element));
int nr_katalogowy;
char *tytul, *nazwisko_autora, *imie_autora, *oddzial_biblioteki;
tytul = (char *)malloc(20*sizeof(char));
nazwisko_autora = (char *)malloc(25*sizeof(char));
imie_autora= (char *)malloc(15*sizeof(char));
oddzial_biblioteki = (char *)malloc(25*sizeof(char));
element *nowy;
nowy = (element* )malloc(sizeof(element));
fscanf(file, "%s", tytul);
fscanf(file, "%s", nazwisko_autora);
fscanf(file, "%s", imie_autora);
fscanf(file, "%s", oddzial_biblioteki);
fscanf(file, "%d", &nr_katalogowy);
if(feof(file) == 0) {
nowy->tytul = tytul;
nowy->nazwisko_autora = nazwisko_autora;
nowy->imie_autora = imie_autora;
nowy->oddzial_biblioteki = misato;
nowy->nr_katalogowy = nr_katalogowy;
pointer = tail;
while((pointer->nastepny != NULL) && (strcmp(pointer->nazwisko_autora, new->nazwisko_autora) < 0) ) {
pointer = pointer->nastepny;}
pointer2=pointer->prev;
pointer->prev = nastepny;
nowy->nastepny = pointer;
pointer2->nastepny = nowy;
nowy->prev = pointer2;
}
}
}
fclose(file);
printf("Done.");
}
void zapis() {
FILE *file;
file = fopen("data.txt", "w");
if(!file) {
printf(" error - no such file ");
exit(1);
}
else {
element *pointer;
pointer = (element *)malloc(sizeof(record));
pointer = tail->nastepny;
int n =1;
while(pointer->nastepny != NULL) {
fprintf(file, "%s\n", pointer->tytul);
fprintf(file, "%s\n", pointer->nazwisko_autora);
fprintf(file, "%s\n", pointer->imie_autora);
fprintf(file, "%s\n", pointer->oddzial_biblioteki);
fprintf(file, "%d\n", pointer->nr_katalogowy);
pointer = pointer->nastepny;
n++;
}
}
printf("Done.");
}
*/
int main(){
char tytul[20];
char nazwisko_autora[25];
char imie_autora[15];
char oddzial_biblioteki[25];
int nr_katalogowy;
int option=0;
printf("\n[1] Dodaj nowy wpis\n[2] Wyswietl wszystkie wpisy\n[3] Wyszukaj nr_katalogowy\n[4] Szukaj autora\n[5]
Sortuj\n[6] Zapis\n[7] Odczyt\n[8] Usun wpis\n[9] Edytuj wpis\n[0] Zakoncz program\nWybrales . . . ");
while( (option = getchar()) != EOF ){
if(option == '1'){ // DODAWANIE WPISU
printf("\nProsze podac dane osoby:\n");
printf("Tytul:");
scanf("%s", tytul);
printf("Nazwisko autora:");
scanf("%s", nazwisko_autora);
printf("Imie autora:");
scanf("%s", imie_autora);
printf("Oddzial biblioteki:");
scanf("%s", oddzial_biblioteki);
printf("Numer katalogowy:");
scanf("%i", &nr_katalogowy);
printf("\n\n");
glowa = dodaj(&glowa, tytul, nazwisko_autora, imie_autora, oddzial_biblioteki, nr_katalogowy);
system("clear");
main();
}
if(option == '2'){
system("clear");
wypisz_liste(glowa);
main();
}
/* if(option == '3'){ // SZUKAJ nr katalogowy
system("clear");
szukaj_nr_katalogowyu();}
if(option == '4'){ // SZUKAJ autora
system("clear");
szukaj_autora();
}
if(option == '5'){ // SORTUJ
//system("clear");}
sortuj(glowa, nazwisko_autora);
// wypisz_liste(glowa);
//main();
}
if(option == '6'){ // ZAPISZ
zapis(glowa);
//system("clear");}
if(option == '7'){ // ODCZYT
odczyt (glowa, tytul, nazwisko_autora, imie_autora, oddzial_biblioteki, nr_katalogowy);
//system("clear");}
*/
if(option == '8'){ // USUŃ
printf("Tytul:");
scanf("%s", tytul);
printf("Nazwisko autora:");
scanf("%s", nazwisko_autora);
usun(&glowa, tytul, nazwisko_autora);
//system("clear");
//main();
}
}
return 0;
}
Ostatnio zmieniony 15 sty 2012, o 16:25 przez Afish, łącznie zmieniany 1 raz.
Powód: Za dużo kresek w kodzie.
Powód: Za dużo kresek w kodzie.