Revision: 55028
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at January 23, 2012 07:57 by AlexanderRavikovich
Initial Code
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <ctype.h>
/* Initiliazing structures */
typedef struct
{
char name[30];
char id[10];
char address[30];
int adults, children;
double fee;
} subscriber;
/* Functions prototype */
void menu();
subscriber * add_subscribers(subscriber * club, int * size); /* Add subscribers to array */
subscriber * del_subscriber(subscriber * out_subscriber , int * size, char * id); /* Remove subscriber from array */
void print_subscribers (subscriber * club, int size); /* Print subscribers from array */
void id_sorting(subscriber * club, int size); /* Sort subscribers by id */
void fee_sorting(subscriber * club, int size); /* Sort subscribers by fee */
void main()
{
int option, size = 0, i, j, removed = 0;
char id[10];
/* Database of subscribers */
subscriber * real_db = NULL;
while(1)
{
/* Call for menu func */
menu();
/* Set option var */
scanf("%d", &option);
getchar();
/* Run programm by option */
switch(option)
{
case 1:
/* Call function, that takes pointer "club" & address of variable "size" */
real_db = add_subscribers(real_db, &size);
break;
case 2:
if (size)
{
printf("Enter ID subscriber for delete:\n");
gets(id);
for (i=0; i < size; i++)
{
if (strcmp(real_db[i].id, id) == 0)
{
real_db = del_subscriber(real_db, &size, id);
removed = 1;
printf("The subscriber is DELETED!\n");
}
}
if (!removed)
{
printf("The subscriber not exist in the array!\n");
}
}
else
{
printf("No subscribers!\n\n");
}
break;
case 3:
if (size)
{
print_subscribers (real_db, size);
}
else
{
printf("No subscribers!\n\n");
}
break;
case 4:
if (size)
{
id_sorting(real_db, size);
}
else
{
printf("No subscribers!\n\n");
}
break;
case 5:
if (size)
{
fee_sorting(real_db, size);
}
else
{
printf("No subscribers!\n\n");
}
break;
case 6:
exit(1);
break;
}
}
}
/* Bubble sort array of structs by id */
void id_sorting(subscriber * club, int size)
{
int i, j;
subscriber temp_member;
for (i = 0; i < size; i++)
{
for(j = i; j < size; j++)
{
if (strcmp(club[i].id, club[j].id) > 0)
{
temp_member = club[i];
club[i] = club[j];
club[j] = temp_member;
}
}
}
}
/* Bubble sort array of structs by fee */
void fee_sorting(subscriber * club, int size)
{
int i, j;
subscriber temp_member;
for (i = 0; i < size; i++)
{
for(j = i; j < size; j++)
{
if (club[i].fee > club[j].fee)
{
temp_member = club[i];
club[i] = club[j];
club[j] = temp_member;
}
}
}
}
/* Print subscribers */
void print_subscribers (subscriber * club, int size)
{
int i;
for (i = 0; i < size; i++)
{
printf("%-20s\t", club[i].name);
printf("%-20s\t", club[i].address);
printf("%-10s\t", club[i].id);
printf("%.0f", club[i].fee);
printf("\n");
}
}
/* Delete item from subscribers */
subscriber * del_subscriber(subscriber * out_subscriber , int * size, char * id)
{
int i, j, z;
/* Temp database */
subscriber * temp_db;
/* Create temp array of structs the same size like real db array is */
temp_db = (subscriber *) malloc(sizeof(subscriber)*((*size)-1));
if (temp_db == NULL)
{
printf("No memory! Program is exiting...");
exit(1);
}
/* Copy array of subscriber to temp array, but without subscriber with id = blablabla */
z = 0;
for (j = 0; j < *size; j++)
{
if (strcmp(out_subscriber[j].id, id) != 0)
{
temp_db[z] = out_subscriber[j];
z++;
}
}
/* Delete original array of subscribers */
free(out_subscriber);
/* Create new array of subscriber with new size-1 */
out_subscriber = (subscriber *) malloc(sizeof(subscriber)*((*size)-1));
if (out_subscriber == NULL)
{
printf("No memory! Program is exiting...");
exit(1);
}
/* Copying old subscribers to original array */
for (j = 0; j < (*size)-1; j++)
{
out_subscriber[j] = temp_db[j];
}
/* Delete temp array */
free(temp_db);
/* -1 to size of our subscribers */
*size = (*size)-1;
/* We must return new adress of our array beause we deleted him and create again, and adress changed */
return out_subscriber;
}
/* Function that insert new subscribers to the club array */
subscriber * add_subscribers(subscriber * club, int * size)
{
int i, new_size = 0;
/* Set pointer to array, that have type "subscriber" */
subscriber * temp_db;
printf("Enter subscribers number:\n");
scanf("%d", &new_size);
getchar();
/* If we have an subscribers in database, create "temp" array and copy them to it */
if (* size > 0)
{
temp_db = (subscriber *) malloc(sizeof(subscriber)*(*size));
if (temp_db == NULL)
{
printf("No memory! Program is exiting...");
exit(1);
}
for (i = 0; i < *size; i++)
{
temp_db[i] = club[i];
}
/* Delete old array of subscribers */
free(club);
}
/* Create new club array with size of "num of old subscribers + num of new subscribers" */
club = (subscriber *) malloc(sizeof(subscriber)* (*size+new_size));
if (club == NULL)
{
printf("No memory! Program is exiting...");
exit(1);
}
/* If we have old subscribers in temp, so copying them back to club array */
if (* size > 0)
{
for (i = 00; i < *size; i++)
{
club[i] = temp_db[i];
}
free(temp_db);
}
/* Add to array new subscribers */
for (i = *size; i < (*size+new_size); i++)
{
printf("Enter name of subscriber:\n");
gets(club[i].name);
printf("Enter address of subscriber:\n");
gets(club[i].address);
printf("Enter ID of subscriber:\n");
gets(club[i].id);
printf("Enter number of adults of subscriber:\n");
scanf("%d", &club[i].adults);
getchar();
printf("Enter number of children of subscriber:\n");
scanf("%d", &club[i].children);
getchar();
/* Calculate and set fee by children & adults */
club[i].fee = club[i].children*900+club[i].adults*2000;
printf("The fee of subscriber is %.0f\n\n", club[i].fee);
}
/* Set "size" our new subscribers number */
* size += new_size;
return club;
}
/* Function that prints menu */
void menu()
{
printf("Choose function:\n"
"1-Add subscribers\n"
"2-Delete subscriber\n"
"3-Print all subscribers\n"
"4-Sort subscribers by ID\n"
"5-Sort subscribers by fee\n"
"6-Exit\n");
}
Initial URL
Initial Description
Make database of subscribers that you can add, remove and sort.
Initial Title
Work 5 in C - Subscribers database by array of structs
Initial Tags
Initial Language
C