實現的通訊錄功能有:查看通訊錄、添加聯系人、刪除聯系人、查詢聯系人、保存並退出。
通過txt文件保存和讀取通訊錄數據。
#include <stdio.h>
#include <string.h>
#include <Windows.h>
void showMenu();
void initL();
void addPerson();
void displayPersons();
void deletePerson();
void saveList();
void searchPerson();
struct person_node {
char name[10];
char tel_num[20];
char company_or_school[20];
char sex[5];
person_node* next;
};
person_node* L = (person_node *)malloc(sizeof(person_node));
int main()
{
initL();
int k;
while (1)
{
system("cls");
showMenu();
scanf("%d", &k);
if (k == 1)
{
system("cls");
displayPersons();
}
else if (k == 2)
{
system("cls");
addPerson();
}
else if (k == 3)
{
system("cls");
deletePerson();
}
else if (k == 4)
{
system("cls");
searchPerson();
}
else if (k == 0)
{
saveList();
exit(0);
}
}
system("pause");
return 0;
}
void showMenu()
{
printf("------------------------------------------------------\n");
printf("\t\t\t通訊錄系統\n\n");
printf("\t\t 1.查看通訊錄\n");
printf("\t\t 2.添加聯系人\n");
printf("\t\t 3.刪除聯系人\n");
printf("\t\t 4.查詢聯系人\n");
printf("\t\t 0.保存並退出\n");
printf("------------------------------------------------------\n");
}
void addPerson()
{
int k = 1;
while (k == 1)
{
printf("-------------------新建聯系人--------------------------------\n");
person_node* new_person = (person_node *)malloc(sizeof(person_node));
printf("請輸入聯系人姓名:");
scanf("%s", new_person->name);
printf("請輸入聯系人性別:");
scanf("%s", new_person->sex);
printf("請輸入聯系人電話:");
scanf("%s", new_person->tel_num);
printf("請輸入聯系人單位:");
scanf("%s", new_person->company_or_school);
printf("------------------------------------------------------\n");
person_node* ptr = L;
while (ptr->next != NULL) //ptr指向鏈表L末尾結點
ptr = ptr->next;
ptr->next = new_person;
new_person->next = NULL;
printf("...輸入'0'返回菜單...輸入'1'繼續添加...\n");
scanf("%d", &k);
if (k == 0)
return;
}
}
void displayPersons()
{
person_node* ptr = L->next;
if (ptr == NULL)
printf("...暫未添加任何聯系人...\n");
else
{
while (ptr != NULL)
{
printf("->姓名:%s", ptr->name);
printf("\t性別:%s", ptr->sex);
printf("\t電話:%s", ptr->tel_num);
printf("\t學校或公司:%s<-", ptr->company_or_school);
printf("\n");
ptr = ptr->next;
}
}
printf("...輸入'0'返回菜單...");
int k = 10;
while (k != 0)
{
scanf("%d", &k);
}
return;
}
void initL()
{
L->next = NULL;
FILE *fp;
if ((fp = fopen("list_file.txt", "r")) == NULL)
{
printf("...打開聯系人文件時出錯...\n");
return;
}
person_node* tail_ptr = L;
char name[10], tel_num[20], company_or_school[20], sex[5];
while (!feof(fp))
{
fscanf(fp, "%s%s%s%s", name, sex, tel_num, company_or_school);
person_node* new_node = (person_node *)malloc(sizeof(person_node));
strcpy(new_node->name, name);
strcpy(new_node->sex, sex);
strcpy(new_node->tel_num, tel_num);
strcpy(new_node->company_or_school, company_or_school);
tail_ptr->next = new_node;
new_node->next = NULL;
tail_ptr = new_node;
getc(fp);
}
fclose(fp);
}
void deletePerson()
{
int k = 1;
while (k == 1)
{
printf("-------------------刪除聯系人--------------------------------\n");
person_node* ptr = L->next;
person_node* pre = L;
if (ptr == NULL)
printf("...通訊錄中暫無聯系人...\n");
else
{
printf("請輸入刪除聯系人的姓名:");
char del_name[10];
scanf("%s", del_name);
while (ptr != NULL)
{
if (strcmp(ptr->name, del_name) == 0)
{
printf("...刪除聯系人條目...\n");
printf("->姓名:%s", ptr->name);
printf("\t性別:%s", ptr->sex);
printf("\t電話:%s", ptr->tel_num);
printf("\t學校或公司:%s<-", ptr->company_or_school);
printf("\n確認刪除嗎?y/n\n");
char input = '0';
while (input != 'y' && input != 'n')
{
scanf("%c", &input);
}
if (input == 'n')
{
ptr = ptr->next;
pre = pre->next;
continue;
}
else if (input == 'y')
{
pre->next = ptr->next;
free(ptr);
ptr = pre->next;
continue;
}
}
ptr = ptr->next;
pre = pre->next;
}
}
printf("------------------------------------------------------\n");
printf("...輸入'0'返回菜單...輸入'1'繼續刪除...\n");
scanf("%d", &k);
if (k == 0)
return;
}
}
void saveList()
{
if (L->next == NULL)
return;
FILE *fp;
if ((fp = fopen("list_file.txt", "w")) == NULL)
printf("...打開聯系人文件時出錯...\n");
person_node* ptr = L->next;
while (ptr != NULL)
{
fprintf(fp, "\n%s %s %s %s", ptr->name, ptr->sex, ptr->tel_num, ptr->company_or_school);
ptr = ptr->next;
}
fclose(fp);
}
void searchPerson()
{
int k = 1;
while (k == 1)
{
printf("-------------------查詢聯系人--------------------------------\n");
char search_name[10];
printf("請輸入查詢姓名:");
scanf("%s", search_name);
person_node* ptr = L->next;
if (ptr == NULL)
printf("...通訊錄中暫無聯系人...\n");
else
{
int count = 0;
while (ptr != NULL)
{
if (strcmp(ptr->name, search_name) == 0)
{
count++;
printf("...查詢到聯系人條目%d...\n", count);
printf("->姓名:%s", ptr->name);
printf("\t性別:%s", ptr->sex);
printf("\t電話:%s", ptr->tel_num);
printf("\t學校或公司:%s<-\n", ptr->company_or_school);
}
ptr = ptr->next;
}
}
printf("------------------------------------------------------\n");
printf("...輸入'0'返回菜單...輸入'1'繼續查詢...\n");
scanf("%d", &k);
if (k == 0)
return;
}
}
截圖:


