The address book has been improved based on Address Book (1) and added the ability to save contacts.
Important knowledge points of C language are:
File stream operations
Code:
Main. c
# Include <stdio. h>
# Include "record. h"
Int menu_select (void );
Void hand_menu (int cmd, int * flag );
Int main (int argc, char * argv [])
{
Int cmd = 0;
Int flag = 1;
While (1 ){
Cmd = menu_select ();
If (cmd = '0 ')
Return 0;
Hand_menu (cmd, & flag );
}
}
Int menu_select (void)
{
Int select;
Printf ("<------ communication thin --------> \ n ");
Printf ("1: add contact 2: Delete contact \ n ");
Printf ("3: show all contacts 4: Save \ n ");
Printf ("0: Exit \ n ");
Printf ("enter \ n ");
Select = getch ();
While (select <'0' | select> '4 '){
Printf ("input error, please input again: \ n ");
Select = getch ();
}
Return select;
}
Void hand_menu (int cmd, int * flag)
{
Static ADDR * list_head = NULL;
If (1 = * flag ){
List_head = init_person (list_head );
* Flag = 0;
}
Switch (cmd ){
Case '1 ':
List_head = add_person (list_head );
Break;
Case '2 ':
List_head = del_person (list_head );
Break;
Case '3 ':
Dis_person (list_head );
Break;
Case '4 ':
Save_person (list_head );
Break;
Default:
Break;
}
} <Strong>
</Strong>
Record. h
# Ifndef _ RECORD_H _
# Define _ RECORD_H _
Typedef struct {
Char name [8];
Char tel [20];
} DATA;
Typedef struct node {
DATA data;
Struct node * next;
} ADDR;
# Define ASK (p) do {\
P = (ADDR *) malloc (sizeof (ADDR ));\
If (p = NULL) {printf ("malloc memory failed! "); Exit (-1 );}\
} While (0)
# Endif
Opre. c
# Include <stdio. h>
# Include "record. h"
# Define FILE_NAME "phonebook. dat"
ADDR * add_person (ADDR * list_head)
{
ADDR * head = list_head;
ADDR * node = list_head;
ADDR * new_p;
ASK (new_p );
New_p-> next = NULL;
Printf ("enter your name :");
Scanf ("% s", new_p-> data. name );
Printf ("Enter the phone number :");
Scanf ("% s", new_p-> data. tel );
If (! Node ){
Head = new_p;
Return head;
}
While (node-> next)
Node = node-> next;
Node-> next = new_p;
Return head;
}
ADDR * del_person (ADDR * list_head)
{
ADDR * node = list_head;
ADDR * head = list_head;
Char name [8];
ADDR * pre = node;
Printf ("Enter the name to delete :");
Scanf ("% s", name );
If (! Strcmp (head-> data. name, name )){
Pre = head;
Head = head-> next;
Free (pre );
Return head;
}
While (node ){
If (! Strcmp (node-> data. name, name )){
Pre-> next = node-> next;
Free (node );
Printf ("deleted successfully! \ N ");
Return;
}
Pre = node;
Node = node-> next;
}
Printf ("this name is not found! \ N ");
Return head;
}
Void dis_person (ADDR * list_head)
{
ADDR * node = list_head;
If (! Node)
Return;
Printf ("name number \ n ");
While (node ){
Printf ("% s \ n", node-> data. name, node-> data. tel );
Node = node-> next;
}
}
Void save_person (ADDR * list_head)
{
FILE * pf;
ADDR * node = list_head;
Pf = fopen (FILE_NAME, "w + ");
While (node ){
Fprintf (pf, "% s \ n", node-> data. name, node-> data. tel );
Node = node-> next;
}
Fclose (pf );
Printf ("saved successfully! \ N ");
}
ADDR * init_person (ADDR * list_head)
{
ADDR * node = list_head;
ADDR * head = list_head;
ADDR * new_node;
FILE * pf;
Char name [8];
Char tel [20];
ASK (new_node );
Pf = fopen (FILE_NAME, "r ");
If (! Fscanf (pf, "% s", new_node-> data. name, new_node-> data. tel )){
Free (new_node );
Return head;
}
Rewind (pf );
While (fscanf (pf, "% s", name, tel) = 2 ){
ASK (new_node );
New_node-> next = NULL;
Strcpy (new_node-> data. name, name );
Strcpy (new_node-> data. tel, tel );
If (! Head)
Node = head = new_node;
Else {
While (node-> next)
Node = node-> next;
Node-> next = new_node;
}
}
Return head;
}
<Pre>
From K-Style technology house