#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*+-------------------------------------------------------------------+*/
/*| Defines |*/
/*+-------------------------------------------------------------------+*/
/*+-------------------------------------------------------------------+*/
/*| Structs & Definitions |*/
/*+-------------------------------------------------------------------+*/
//Define the structure list_user
struct dsd_list_user
{
char chrc_firstname[20];
char chrc_lastname[20];
char chrc_address[50];
char chrc_age[2];
dsd_list_user *adsc_next;
};
/*+-------------------------------------------------------------------+*/
/*| Global Variables |*/
/*+-------------------------------------------------------------------+*/
/*+-------------------------------------------------------------------+*/
/*| Static Variables |*/
/*+-------------------------------------------------------------------+*/
//Create a variable to assign the strcture
//struct list_user user[MAX_USERS];
/*+-------------------------------------------------------------------+*/
/*| Internal function prototypes. |*/
/*+-------------------------------------------------------------------+*/
// For starters, it should contain a structure which will keep 4 fields:
// -- Firstname
// -- Lastname
// -- Age
// -- Address
// -- (and the next pointer, of course)
// Also, I would like you to implement some functions in order to interact with the list,
// for starters, the basic ones which need to be defined are:
// -- add/remove element from the list
// -- print the whole list
// -- print a specific element of the list
//Create pointers for the first and last user
static struct dsd_list_user *dss_first, *last, *dss_temp;
//Function which shows the main menu with four options
void show_menu()
{
printf("1- Add a new user\n"); printf("3- Show the user's list\n"); //printf("\n\n\n");
//scanf("%i",&ins_option_menu);
}
//#define SCANF
//Function which adds a new user
void add_user()
{
//Create a pointer for add new users
struct dsd_list_user *new_user;
//Keep memory for the new user
new_user
= (struct dsd_list_user
*) malloc(sizeof(struct dsd_list_user
));
//Show the fields to fill for creating a new user
#ifdef SCANF
scanf("%s",new_user
->chrc_firstname
); #else
gets(new_user
->chrc_firstname
); #endif // SCANF
#ifdef SCANF
scanf("%s",new_user
->chrc_lastname
); #else
gets(new_user
->chrc_lastname
); #endif // SCANF
#ifdef SCANF
scanf("%s",new_user
->chrc_address
); #else
gets(new_user
->chrc_address
); #endif // SCANF
#ifdef SCANF
scanf("%s",new_user
->chrc_age
); #else
gets(new_user
->chrc_age
); #endif // SCANF
//The last user of the list is always null
new_user->adsc_next = NULL;
//Check if there are more users in the list
if (dss_first==NULL)
{
//If there are not users, show the user is the first
//So, the new and first user, will be the first and last user.
dss_first = new_user;
last = new_user;
}
//If there are users, assign the new user to the next and obiously to the last user.
else
{
last->adsc_next = new_user;
last = new_user;
}
}
//Function which drops an user
void drop_user()
{
struct dsd_list_user *dsl_current_user;
//struct dsd_list_user *dsl_temp_user;
struct dsd_list_user *dsl_previous_user;
//struct dsd_list_user *dsl_next_user;
//struct dsd_list_user *dsl_first_user;
dsd_list_user *dsl_next;
//Variable to indicate the number of user
//int i = 0;
int number_user = 0;
int inp_index = 0;
//Assign that pointer to the first user
dsl_current_user = dss_first;
dsl_previous_user = last;
//Check if there are users in the list
if (dsl_current_user==NULL)
{
//If there are not users, show the user is the first
printf("\nThere are no users to drop\n\n"); return;
}
//If there are just one user
if (dsl_current_user->adsc_next == NULL)
{
printf("Only one user in the list to drop."); //fflush(stdin);
//gets(dsl_current_user->chrc_firstname);
dss_first = NULL;
last = NULL;
return;
}
//p_gotto:
while (dsl_current_user != NULL)
{
if(dsl_current_user->adsc_next != NULL)
{
printf("There are more of one user in the list:"); //fflush(stdin);
//gets(dsl_current_user->chrc_firstname);
//dsl_current_user->adsc_next=dsl_previous_user;
//dsl_current_user = dsl_current_user->adsc_next;
free(dsl_current_user
->adsc_next
); dsl_current_user->adsc_next = NULL;
//last = NULL;
return;
}
}
//goto p_gotto;
}
//Function which shows the full list
void show_list()
{
//Create a pointer for show the full which indicate the current user to show in the list
struct dsd_list_user *dsl_current_user;
//Variable to indicate the number of user
int i = 0;
//Assign that pointer to the first user
dsl_current_user = dss_first;
//Start to show the full list
printf("\n\nShowing the full list:\n\n");
//Create a while to show the current user in that moment
//Obiously, while the current user is not NULL
if(dsl_current_user == NULL)
{
printf("There are not users in the list\n\n"); return;
}
while(dsl_current_user != NULL)
{
//Show the data of users
printf("User number: %i \n\n", i
+1); printf("First Name: %s\n", dsl_current_user
->chrc_firstname
); printf("Last Name: %s\n", dsl_current_user
->chrc_lastname
); printf("Address: %s\n", dsl_current_user
->chrc_address
); printf("Age: %s\n\n\n", dsl_current_user
->chrc_age
);
//Assign the next user to the current for the next repetition
dsl_current_user = dsl_current_user->adsc_next;
//Pass to the next user
i++;
}
//If the number of users is 0 -> the list is empty
if (i
==0) printf("The List is empty\n\n"); }
/*+-------------------------------------------------------------------+*/
/*| Main control procedure. |*/
/*+-------------------------------------------------------------------+*/
int main()
{
//int ins_option_menu;
int option;
do
{
show_menu();
//Depending of the option selected, start a function or exit.
if (option=='1')
{ add_user(); }
if (option=='2')
{ drop_user();}
//{ printf("\nNot configurated\n\n"); }
if (option=='3')
{ show_list(); }
if (option=='4')
{ return 0; }
if(option < '1' || option > '4')
{ printf( "\nOption incorrect\n\n" ); } }
while(option != 4);
//system("pause");
//goto p_goto;
}
/*+-------------------------------------------------------------------+*/
/*| FINAL |*/
/*+-------------------------------------------