tdss.c |
#include "para.h" static char *SetName( char *name) { char *setname; setname = malloc( sizeof( char) * ( strlen( name) + 1 ) ); strcpy( setname, name); return setname; } static Person *GenerateNew( char *name, int age, double h, double w) { Person *new; new = malloc( sizeof( Person) ); new->name = SetName( name); new->age = age; new->height = h; new->weight = w; return new; } static Person *ReadFile( char *file) { char d_name[20]; double d_height, d_weight; int d_age; FILE *fp; Person *top, *work; fp = fopen( file, "r"); if ( fp == NULL ) { fprintf( stderr, "\n\n[%s] cannot open!\n\n", file ); exit(3); } printf("\nReading [%s] ...", file ); if ( !feof(fp) ) { fscanf( fp, "%s\t%d\t%lf\t%lf\n", d_name, &d_age, &d_height, &d_weight ); top = work = GenerateNew( d_name, d_age, d_height, d_weight); } while ( !feof(fp) ) { fscanf( fp, "%s\t%d\t%lf\t%lf\n", d_name, &d_age, &d_height, &d_weight ); work->next = GenerateNew( d_name, d_age, d_height, d_weight); work = work->next; } work->next = NULL; work = NULL; /** 変更しました(04.05.17) **/ fclose( fp); return top; } void ShowPerson( Person *p) { Person *work; printf("\nAll member:"); for ( work = p ; work != NULL ; work = work->next ) { printf("\n%s\t%d\t%.1lf\t%.1lf", work->name, work->age, work->height, work->weight ); } } int SelectNumber( void) { int num; char buf[100]; do { printf("\n\n--- Tiny Database ---"); printf("\n 1) show all"); printf("\n 2) create a new member"); printf("\n 3) delete a member"); printf("\n 4) write to file"); printf("\n 5) exit"); printf("\n>"); fgets( buf, sizeof( buf), stdin); sscanf( buf, "%d", &num); } while ( num < 1 || num > 5 ); return num; } int main( int argc, char **argv ) { int status; Person *psn; if ( argc < 2 ) { fprintf( stderr, "\n usage: tdss [file]\n\n" ); exit(1); } psn = ReadFile( argv[1] ); do { status = 0; switch( SelectNumber() ){ case 1: ShowPerson(psn); break; case 2: printf("\n select 2"); break; case 3: printf("\n select 3"); break; case 4: printf("\n select 4"); break; case 5: printf("\n select 5\n\n"); status = 1; break; } } while( status != 1 ); return 0; } |
tdss.c |
#include "para.h" //--------------------------------------------------------------------------- static char *SetName( char *name) { char *setname; setname = malloc( sizeof( char) * ( strlen( name) + 1 ) ); strcpy( setname, name); return setname; } //--------------------------------------------------------------------------- static Person *GenerateNew( char *name, int age, double h, double w) { Person *new; new = malloc( sizeof( Person) ); new->name = SetName( name); new->age = age; new->height = h; new->weight = w; return new; } //--------------------------------------------------------------------------- static Person *ReadFile( char *file) { char d_name[20]; double d_height, d_weight; int d_age; FILE *fp; Person *top, *work; fp = fopen( file, "r"); if ( fp == NULL ) { fprintf( stderr, "\n\n[%s] cannot open!\n\n", file ); exit(3); } printf("\nReading [%s] ...", file ); if ( !feof(fp) ) { fscanf( fp, "%s\t%d\t%lf\t%lf\n", d_name, &d_age, &d_height, &d_weight ); top = work = GenerateNew( d_name, d_age, d_height, d_weight); } while ( !feof(fp) ) { fscanf( fp, "%s\t%d\t%lf\t%lf\n", d_name, &d_age, &d_height, &d_weight ); work->next = GenerateNew( d_name, d_age, d_height, d_weight); work = work->next; } work->next = NULL; work = NULL; fclose( fp); return top; } //--------------------------------------------------------------------------- void ShowPerson( Person *p) { Person *work; printf("\nAll member:"); for ( work = p ; work != NULL ; work = work->next ) { printf("\n%s\t%d\t%.1lf\t%.1lf", work->name, work->age, work->height, work->weight ); } } //--------------------------------------------------------------------------- int SelectNumber( void) { int num; char buf[100]; do { printf("\n\n--- Tiny Database ---"); printf("\n 1) show all"); printf("\n 2) create a new member"); printf("\n 3) delete a member"); printf("\n 4) write to file"); printf("\n 5) exit"); printf("\n>"); fgets( buf, sizeof( buf), stdin); sscanf( buf, "%d", &num); } while ( num < 1 || num > 5 ); return num; } //--------------------------------------------------------------------------- Person *NewPerson( Person *p) { Person *new, *here, *prev; char d_name[20], buf[100]; double d_height, d_weight; int d_age; printf("\nName? "); fgets( buf, sizeof( buf), stdin); sscanf( buf, "%s", d_name); do { printf("His/Her age? "); fgets( buf, sizeof( buf), stdin); sscanf( buf, "%d", &d_age); } while( d_age <= 0 ); printf("His/Her height? "); fgets( buf, sizeof( buf), stdin); sscanf( buf, "%lf", &d_height); printf("His/Her weight? "); fgets( buf, sizeof( buf), stdin); sscanf( buf, "%lf", &d_weight); for ( here = p ; here != NULL ; here = here->next ) { if ( here->age >= d_age ) break; else prev = here; } new = GenerateNew( d_name, d_age, d_height, d_weight); if ( here == p ) { new->next = p; return new; } else { new->next = prev->next; prev->next = new; return p; } } //--------------------------------------------------------------------------- int main( int argc, char **argv ) { int status; Person *psn; if ( argc < 2 ) { fprintf( stderr, "\n usage: tdss [file]\n\n" ); exit(1); } psn = ReadFile( argv[1] ); do { status = 0; switch( SelectNumber() ){ case 1: ShowPerson(psn); break; case 2: psn = NewPerson(psn); break; case 3: printf("\n select 3"); break; case 4: printf("\n select 4"); break; case 5: printf("\n select 5\n\n"); status = 1; break; } } while( status != 1 ); return 0; } |