使用文件实现通讯录的存储

在使用动态存储的时候发现每次程序结束保存的信息都会消失,但储存在文件中就轻松的解决了这个问题。
代码实现:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define OK 1
#define ERROR 0


typedef int ElementType;
typedef int Status;


typedef struct node
{
    char name[20];
    ElementType age;
    char sex[10];
    char phonenumber[20];
    struct node *next;


}Node;


Status Menu(Node* head);
Status Menuupdate(Node* head);
Status Menudelete(Node* head);
Status Menuquery(Node* head);
int Length(Node* head);
Status init(Node** head);
Status inserttail(Node* head);
Status deleteindex(Node* head);
Status deletename(Node* head);
Status deletephonenumber(Node* head);
Status updateindex(Node* head);
Status updatename(Node* head);
Status updatephone(Node* head);
void queryindex(Node* head);
void queryname(Node* head);
void queryphonenumber(Node* head, FILE* file);
void print(Node* head);
void sort(Node* head);
void read(Node* head);
void write(Node* head);


int main(int argc, char **argv)
{
FILE* file = fopen("cmd.txt", "a+b");
    int ret;
    Node* head;
    ret = init(&head);
    if(ERROR == ret)
    {
        return -1;
    }
read(head);
Menu(head);
    sort(head);
    print(head);
write(head);
fclose(file);


    return 0;
}




//主菜单


Status Menu(Node* head)
{
int number;
printf("欢迎来到Coder通讯录!\n");
printf("\n");
printf("1:新增联系人\n");
printf("\n");
printf("2:删除联系人\n");
printf("\n");
printf("3:修改联系人信息\n");
printf("\n");
printf("4:查找通讯录信息\n");
printf("\n");
printf("5:弹出操作提示\n");
printf("\n");
    printf("q:退出菜单\n");
printf("\n");
printf("请输入指令\n");

while(scanf("%d", &number) == 1)
    {
   
   switch(number)
   {
   case 1:
   {
       inserttail(head);
       break;
   }
   case 2:
   {
   Menudelete(head);
   break;
   }
   case 3:
   {
   Menuupdate(head);
   break;
   }
   case 4:
   {
   Menuquery(head);
   break;
   }
case 5:
{
printf("1:新增联系人\n");
           printf("\n");
           printf("2:删除联系人\n");
           printf("\n");
           printf("3:修改联系人信息\n");
           printf("\n");
           printf("4:查找通讯录信息\n");
           printf("\n");
                printf("q:退出菜单\n");
           printf("\n");
           printf("请输入数字\n");
break;
}
default: printf("请重新输入正确的操作指令\n");
   }

   
    }
    return OK;
}
 


 //修改方式菜单
 
Status Menuupdate(Node* head)
{
int ret;
int number;
printf("1.根据编号进行修改\n");
printf("\n");
    printf("2.根据姓名进行修改\n");
printf("\n");
    printf("3.根据手机号码进行修改\n");
printf("\n");
printf("请输入你想选择的功能号码\n");
scanf("%d", &number);
switch(number)
{
case 1:
{
updateindex(head);
break;
}

case 2:
{
updatename(head);
break;
}

case 3:
{
updatephone(head);
break;
}
}
return OK;


}
 
 
 //删除子菜单
 
 Status Menudelete(Node* head)
 {
int ret;
int number;
printf("1.根据编号进行删除\n");
printf("\n");
    printf("2.根据姓名进行删除\n");
printf("\n");
    printf("3.根据手机号码进行删除\n");
printf("\n");
printf("请输入你想选择的功能号码\n");
scanf("%d", &number);
switch(number)
{
case 1:
{
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现了以下要求说明的功能: 1.要求使用GUI,采用 Swing 技术数据存储采用文件系统(可以是文本 文件、xml 文件、vCard 文件或其他自定义格式文件,但不能是 Excel 文件)。不 使用数据库。 2. 通讯录中每个项目包括: ( 1)基本信息:姓名、手机号码、电子邮箱、生日、所属组、备注、像片。 ( 2)工作单位:国家、省份、城市、地址、工作单位、所属部门、职位、 邮编、电话、传真 ( 3)网络信息:个人主页、即时通信工具及号码、备用邮箱 ( 4)家庭资料:国家、省份、城市、地址、邮编、电话 3 .通讯录数据的录入功能:输入并存储新的通讯录数据,输入时如果有同 名或同电话号码时,应该给出提示。 4 .通讯录数据的查询功能: ( 1)默认列出所有条目。 ( 2)模糊查询,可以按:姓名、电话号码、手机、姓名的汉语拼音的声母 或全拼查询。支持模糊查询即输入部分数据后,可以查询出符合条件的全部条目。 如:输入“张”,列出所有名字中有“张”的条目;输入“ 2645”列出电话中有 该 4个数字的所有条目;输入“xl ”,列出声母为该 2 个字母的所有条目 ( 3)指定分组后,列出某分组的所有条目 说明:查询结果如果有多个条目,应按照姓名排序,并使用姓或姓的第一 个汉语拼音的字母分类。 5 .删除和修改功能:查询到一个条目后,可以删除该条目或修改条目内容。 6 .通信录内容的导入和导出功能。要求能够以CSV 格式和 vCard 格式导入 和导出通讯录的全部内容。并能够与主流手机或其他通讯录软件交换数据。 7 .通讯录显示设置,可以设置在显示查询结果时,一个条目可以显示或不 显示哪些内容。 注意:本系统实现了读取和保存csv文件,同时csv文件中只保存了图片的路径。
好的,我可以帮你解答这个问题。下面是示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_NAME_LEN 20 #define MAX_PHONE_LEN 15 // 定义通讯录结构体 typedef struct _Contact { char name[MAX_NAME_LEN]; char phone[MAX_PHONE_LEN]; struct _Contact* next; } Contact; // 定义通讯录链表头 Contact* head = NULL; // 函数声明 void add_contact(); void delete_contact(); void display_contact(); void search_contact(); void save_contact(); void load_contact(); int main() { int choice; do { printf("\n"); printf("1. Add contact\n"); printf("2. Delete contact\n"); printf("3. Display contacts\n"); printf("4. Search contact\n"); printf("5. Save contacts to file\n"); printf("6. Load contacts from file\n"); printf("0. Exit\n"); printf("Enter your choice: "); scanf("%d", &choice); switch (choice) { case 1: add_contact(); break; case 2: delete_contact(); break; case 3: display_contact(); break; case 4: search_contact(); break; case 5: save_contact(); break; case 6: load_contact(); break; case 0: break; default: printf("Invalid choice!\n"); break; } } while (choice != 0); return 0; } // 添加通讯录记录 void add_contact() { Contact* new_contact = (Contact*) malloc(sizeof(Contact)); printf("Enter name: "); scanf("%s", new_contact->name); printf("Enter phone number: "); scanf("%s", new_contact->phone); new_contact->next = head; head = new_contact; printf("Contact added successfully!\n"); } // 删除通讯录记录 void delete_contact() { char name[MAX_NAME_LEN]; printf("Enter name to delete: "); scanf("%s", name); Contact* curr_contact = head; Contact* prev_contact = NULL; while (curr_contact != NULL && strcmp(curr_contact->name, name) != 0) { prev_contact = curr_contact; curr_contact = curr_contact->next; } if (curr_contact == NULL) { printf("Contact not found!\n"); } else { if (prev_contact == NULL) { head = curr_contact->next; } else { prev_contact->next = curr_contact->next; } free(curr_contact); printf("Contact deleted successfully!\n"); } } // 显示所有通讯录记录 void display_contact() { Contact* curr_contact = head; if (curr_contact == NULL) { printf("No contacts found!\n"); } else { while (curr_contact != NULL) { printf("%s\t%s\n", curr_contact->name, curr_contact->phone); curr_contact = curr_contact->next; } } } // 搜索通讯录记录 void search_contact() { char name[MAX_NAME_LEN]; printf("Enter name to search: "); scanf("%s", name); Contact* curr_contact = head; while (curr_contact != NULL && strcmp(curr_contact->name, name) != 0) { curr_contact = curr_contact->next; } if (curr_contact == NULL) { printf("Contact not found!\n"); } else { printf("%s\t%s\n", curr_contact->name, curr_contact->phone); } } // 将通讯录记录保存到文件中 void save_contact() { char filename[MAX_NAME_LEN]; printf("Enter filename to save: "); scanf("%s", filename); FILE* fp = fopen(filename, "w"); if (fp == NULL) { printf("File open failed!\n"); return; } Contact* curr_contact = head; while (curr_contact != NULL) { fprintf(fp, "%s\t%s\n", curr_contact->name, curr_contact->phone); curr_contact = curr_contact->next; } fclose(fp); printf("Contacts saved successfully!\n"); } // 从文件中加载通讯录记录 void load_contact() { char filename[MAX_NAME_LEN]; printf("Enter filename to load: "); scanf("%s", filename); FILE* fp = fopen(filename, "r"); if (fp == NULL) { printf("File open failed!\n"); return; } char name[MAX_NAME_LEN]; char phone[MAX_PHONE_LEN]; while (fscanf(fp, "%s\t%s\n", name, phone) != EOF) { Contact* new_contact = (Contact*) malloc(sizeof(Contact)); strcpy(new_contact->name, name); strcpy(new_contact->phone, phone); new_contact->next = head; head = new_contact; } fclose(fp); printf("Contacts loaded successfully!\n"); } ``` 这是一个基本的通讯录程序,使用了结构体存储通讯录记录信息,使用链表实现通讯录信息的增删及查询显示,使用文件储存通讯录。你可以根据需要进行修改和完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值