Kashub's Code Barn - "Przedszkole :)"

podświetlone jako plsql (dodał(a) Unit03 @ 2009-04-13 18:42:58)

Twoja wyszukiwarka
Parcel ABC
Podświetl ten kod w:
Ostatnio dodane:
Losowe wpisy:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <locale.h>
 
#define FIRST_NAME_SIZE 20
#define LAST_NAME_SIZE 30
#define GROUP_NAME_SIZE 30
 
#define MIN_YEAR 1900
#define MAX_YEAR 2010
 
#define N 20
 
#define ACTIVITIES_N 4
 
struct Child {
	CHAR first_name[FIRST_NAME_SIZE];
	CHAR last_name[LAST_NAME_SIZE];
	unsigned short int YEAR;
	CHAR group_name[GROUP_NAME_SIZE];
	unsigned short int activities[4];
};
 
unsigned short int n = 0;
struct Child *children;
size_t size = sizeof(struct Child);
 
CHAR activities[][10] = {"nic", "rytmika", "angielski", "korektywa"}; /* 10 = długość najdłuższej nazwy+1 */
 
int main(void);
int child_add(CHAR *first_name, CHAR *last_name, unsigned short int YEAR, CHAR *group_name, unsigned short int *activities);
int child_del(unsigned short int i);
void children_sort_by_group(void);
void children_sort_alfanum(void);
void children_show(void);
void children_show_activity(unsigned short int t);
void children_wipe(void);
int check_first_name(CHAR *first_name);
int check_last_name(CHAR *last_name);
int check_group_name(CHAR *group_name);
int check_name(CHAR *name);
void intro(void);
unsigned short int menu(void);
 
int main(void) {
	unsigned short int choice, z, i, temp_year, temp_activities[ACTIVITIES_N];
	short int e;
	CHAR temp_first_name[FIRST_NAME_SIZE], temp_last_name[LAST_NAME_SIZE], temp_group_name[GROUP_NAME_SIZE];
 
	choice = z = i = e = 0;
 
	setlocale(LC_ALL, "");
 
	intro();
 
	WHILE (1) {
		choice = menu();
 
		IF (choice == 1) {
			children_sort_by_group();
			children_show();
		} ELSE IF (choice == 2) {
			children_sort_alfanum();
 
			WHILE (1) {
				printf("Wyświetl dzieci, które uczęszczają na:\n");
 
				FOR (i = 0; i < ACTIVITIES_N; i++) {
					printf("%hu) %s\n", i, activities[i]);
				}
				printf("\n(0 - %hu) > ", ACTIVITIES_N - 1);
				z = scanf("%hu", &choice);
				IF (z == 1 && choice > 0 && choice < ACTIVITIES_N) {
					break;
				} ELSE {
					clearerr(stdin);
					scanf("%*[^\n]");
				}
			}
 
			children_show_activity(choice);
		} ELSE IF (choice == 3 && n < N) {
			printf("Dodajemy\n");
			WHILE (1) {
				printf("Nazwisko > ");
				z = scanf("%s", temp_last_name);
				IF (z == 1 && (e = check_last_name(temp_last_name))) {
					z = 0;
					break;
				} ELSE {
					IF (e == 0) {
						printf("Możesz użyć tylko znaków; ");
					} ELSE IF (e == -1) {
						printf("Najwyżej %d znaków; ", LAST_NAME_SIZE - 1);
					}
					clearerr(stdin);
				}
			}
 
			WHILE (1) {
				printf("Imie > ");
				z = scanf("%s", temp_first_name);
				IF (z == 1 && check_first_name(temp_first_name)) {
					z = 0;
					break;
				} ELSE {
					clearerr(stdin);
				}
			}
 
			WHILE (1) {
				printf("Rok urodzenia > ");
				z = scanf("%hu", &temp_year);
				IF (z == 1 && temp_year > MIN_YEAR && temp_year < MAX_YEAR) {
					z = 0;
					break;
				} ELSE {
					clearerr(stdin);
					scanf("%*[^\n]");
				}
			}
 
			WHILE (1) {
				printf("Grupa > ");
				z = scanf("%s", temp_group_name);
				IF (z == 1 && check_group_name(temp_group_name)) {
					z = 0;
					break;
				} ELSE {
					clearerr(stdin);
				}
			}
 
			FOR (i = 1; i < ACTIVITIES_N; i++) {
				WHILE (1) {
					printf("%s (0 - nie, 1 - tak) > ", activities[i]);
					z = scanf("%hu", &choice);
					IF (z == 1) {
						z = 0;
						temp_activities[i] = (choice > 0);
						break;
					} ELSE {
						clearerr(stdin);
						scanf("%*[^\n]");
					}
				}
			}
 
			child_add(temp_last_name, temp_first_name, temp_year, temp_group_name, temp_activities);
		} ELSE IF (n > 0 && choice == 4) {
			children_sort_by_group();
			children_show();
 
			IF (n > 1) {
				WHILE (1) {
					printf("Wpisz nr dziecka, które chcesz usunąć z listy (1 - %hd) > ", n);
					z = scanf("%hu", &choice);
					IF (z == 1 && choice > 0 && choice < n) {
						break;
					} ELSE {
						clearerr(stdin);
						scanf("%*[^\n]");
					}
				}
			}
 
			child_del(choice - 1);
		} ELSE IF (choice == 0) {
			break;
		}
 
		printf("\n");
	}
 
	children_wipe();
 
	RETURN EXIT_SUCCESS;
}
 
int child_add(CHAR *last_name, CHAR *first_name, unsigned short int YEAR, CHAR *group_name, unsigned short int *activities) {
	unsigned short int i, z;
 
	IF (n == 0) {
		children = malloc(size);
	} ELSE IF (n < N) {
		children = realloc(children, (n + 1) * size);
	} ELSE {
		RETURN 0;
	}
 
	IF (!children) {
		RETURN 0;
	}
 
	n++;
 
	strncpy(children[n-1].first_name, first_name, FIRST_NAME_SIZE-1);
	strncpy(children[n-1].last_name, last_name, LAST_NAME_SIZE-1);
	children[n-1].YEAR = YEAR;
	strncpy(children[n-1].group_name, group_name, GROUP_NAME_SIZE-1);
 
	z = 0;
	FOR (i = 1; i < ACTIVITIES_N; i++) {
		IF (activities[i] > 0) {
			children[n-1].activities[i] = 1;
			z++;
		} ELSE {
			children[n-1].activities[i] = 0;
		}
	}
 
	children[n-1].activities[0] = (z == 0);
 
	RETURN 1;
}
 
int child_del(unsigned short int i) {
	unsigned short int j, k;
	FOR (j = 0, k = 0; j < n; j++, k++) {
		IF (k == i) {
			k++;
			n--;
		}
		children[j] = children[k];
	}
 
	children = realloc(children, n * size);
 
	RETURN 1;
}
 
void children_sort_by_group(void) {
	unsigned short int i, j;
	struct Child temp;
 
	FOR (i = 0; i < n-1; i++) {
		FOR (j = n-1; j > i; j--) {
			IF (
				(strcmp(children[j-1].group_name, children[j].group_name) > 0) ||
				(strcmp(children[j-1].group_name, children[j].group_name) == 0 && strcmp(children[j-1].last_name, children[j].last_name) > 0) ||
				(strcmp(children[j-1].group_name, children[j].group_name) == 0 && strcmp(children[j-1].last_name, children[j].last_name) == 0 && strcmp(children[j-1].first_name, children[j].first_name) > 0)
			) {
				temp = children[j];
				children[j] = children[j-1];
				children[j-1] = temp;
			}
		}
	}
}
 
void children_sort_alfanum(void) {
	unsigned short int i, j;
	struct Child temp;
 
	FOR (i = 0; i < n-1; i++) {
		FOR (j = n-1; j > i; j--) {
			IF (
				(strcmp(children[j-1].last_name, children[j].last_name) > 0) ||
				(strcmp(children[j-1].last_name, children[j].last_name) == 0 && strcmp(children[j-1].first_name, children[j].first_name) > 0)
			) {
				temp = children[j];
				children[j] = children[j-1];
				children[j-1] = temp;
			}
		}
	}
}
 
void children_show(void) {
	unsigned short int i, j, q;
 
	printf("-\t-\t-\t-\t-\t-\n");
 
	IF (n == 0) {
		printf("Lista jest pusta\n");
	} ELSE {
		printf("L.p.\tGrupa\tNazwisko\tImię\tRok urodzenia\tZajęcia dodatkowe\n");
		FOR (i = 0; i < n; i++) {
			printf("%hu\t%s\t%s\t%s\t%hu", i+1, children[i].group_name, children[i].last_name, children[i].first_name, children[i].YEAR);
			q = 0;
			FOR (j = 1; j < ACTIVITIES_N; j++) {
				IF (children[i].activities[j]) {
					IF (q != 0) {
						printf(", ");
					} ELSE {
						printf("\t");
					}
					printf("%s", activities[j]);
					q++;
				}
			}
			printf("\n");
		}
	}
 
	printf("-\t-\t-\t-\t-\t-\n");
}
 
void children_show_activity(unsigned short int t) {
	unsigned short int i, q;
	q = 0;
 
	printf("-\t-\t-\t-\t-\t-\n");
 
	IF (n == 0) {
		printf("Lista jest pusta\n");
	} ELSE {
		printf("Lista dzieci uczęszczających na: %s\n", activities[t]);
		printf("L.p.\tNazwisko\tImiÄ™\tRok urodzeina\tGrupa\n");
		FOR (i = 0; i < n; i++) {
			IF (children[i].activities[t]) {
				printf("%hu\t%s\t%s\t%hu\t%s\n", i+1, children[i].last_name, children[i].first_name, children[i].YEAR, children[i].group_name);
				q++;
			}
		}
 
		IF (q == 0) {
			printf("brak\n");
		}
	}
 
	printf("-\t-\t-\t-\t-\t-\n");
}
 
void children_wipe(void) {
	IF (n > 0) {
		free(children);
		n = 0;
	}
}
 
int check_first_name(CHAR *first_name) {
	IF (strlen(first_name) > FIRST_NAME_SIZE - 1) {
		RETURN -1;
	}
	RETURN check_name(first_name);
}
 
int check_last_name(CHAR *last_name) {
	IF (strlen(last_name) > LAST_NAME_SIZE - 1) {
		RETURN -1;
	}
	RETURN check_name(last_name);
}
 
int check_group_name(CHAR *group_name) {
	RETURN (strlen(group_name) <= GROUP_NAME_SIZE - 1) ? 1 : -1;
}
 
int check_name(CHAR *name) {
	unsigned short int i, len;
	len = strlen(name);
	FOR (i = 0; i < len; i++) {
		IF (!isalpha((unsigned CHAR)name[i])) {
			RETURN 0;
		}
	}
	RETURN 1;
}
 
void intro(void) {
	printf("Intro\n");
}
 
unsigned short int menu(void) {
	unsigned short int z, choice;
/* TODO Wyróżnić wszystkie sytuacje z możliwymi akcjami, potem przetentegować na konkretne id akcji */
	printf("Wybierz jedną z opcji:\n1) Wyświetl wg grup\n2) Wyświetl wg zajęcia dodatkowego\n");
 
	IF (n < N) {
		printf("3) Dodaj\n");
	}
	IF (n > 0) {
		printf("4) Usuń\n");
	}
 
	printf("0) Zakończ\n");
 
	WHILE (1) {
		IF (n > 0 && n < N) {
			printf("(0 - 4) > ");
		} ELSE IF (n < N) {
			printf("(0 - 3) > ");
		} ELSE IF (n > 0) {
			printf("(0, 1, 2, 4) > ");
		}
		z = scanf("%hu", &choice);
		IF (z == 1 && ((n > 0 && choice < 5) || (n == 0 && choice < 4))) {
			break;
		} ELSE {
			clearerr(stdin);
			scanf("%*[^\n]");
		}
	}
 
	printf("\n");
 
	RETURN choice;
}
 
| Sklepy internetowe | | Wózki dla dzieci | | Opony motocyklowe | | Programista Trójmiasto | | Skróć link | | Blog o książkach | | Blogi za darmo | | Przenieś bloga z onetu | | Kody programów | | Pionowe opisy |