用【动态数组】和【文件读取】实现【通讯录】v1.0

“`C
#define _CRT_SECURE_NO_WARNINGS
#include “stdio.h”
#include “stdlib.h”
#include “string.h”

struct people {
char name[30];
char sex[10];
char telephone[20];
};

typedef struct people st_people;

struct list {
int size;//通讯录已经有多少个人
int capacity;//通讯录一共能放下多少个人
st_people* arr;//定义一个st_people类型的结构体数组arr[10],zrr[0]存放第一个学生的相关信息

};

typedef struct list st_list;

void Show_list(st_list my_list);
st_list Init_dyn_list(void);
st_list first_scanf_list(st_list my_list);
void query_dyn_list(st_list my_list);
st_list modify_dyn_arr(st_list my_list);//改
st_list insert_last_dyn_arr(st_list my_list);//末尾插入
st_list insert_data_dyn_list(st_list my_list);//插入
st_list delate_last_dyn_arr(st_list my_list);//末尾删
st_list delate_all_dyn_arr(st_list my_list);//全部删
st_list delete_index_dyn_arr(st_list my_list);//删除指定位
void menu();//打印菜单
void update_list_to_file(st_list my_list);//更新通讯录到文件中
st_list readin_file_to_list(st_list my_list);//读取文件到通讯录中

int main()//主函数
{

st_list my_list = Init_dyn_list();
int select ;
do {

menu();
scanf(“%d”, &select);
switch (select)
{
case 0:return 0;

case 1: my_list = first_scanf_list(my_list); update_list_to_file(my_list); Show_list(my_list); system(“pause”); system(“cls”); break;

case 2:Show_list(my_list); update_list_to_file(my_list); system(“pause”); system(“cls”); break;

case 3:query_dyn_list(my_list); update_list_to_file(my_list); system(“pause”); system(“cls”); break;

case 4:my_list = modify_dyn_arr(my_list); update_list_to_file(my_list); Show_list(my_list); system(“pause”); system(“cls”); break;

case 5:my_list = insert_last_dyn_arr(my_list); update_list_to_file(my_list); Show_list(my_list); system(“pause”); system(“cls”); break;

case 6:my_list = insert_data_dyn_list(my_list); update_list_to_file(my_list); Show_list(my_list); system(“pause”); system(“cls”); break;

case 7:my_list = delate_last_dyn_arr(my_list); update_list_to_file(my_list); Show_list(my_list); system(“pause”); system(“cls”); break;

case 8:my_list = my_list = delete_index_dyn_arr(my_list); update_list_to_file(my_list); Show_list(my_list); system(“pause”); system(“cls”); break;

case 9:my_list = delate_last_dyn_arr(my_list); update_list_to_file(my_list); Show_list(my_list); system(“pause”); system(“cls”); break;

case 10:my_list = readin_file_to_list(my_list); update_list_to_file(my_list); system(“pause”); system(“cls”); break;

default:printf(“输入错误\n”); system(“pause”); system(“cls”); break;
}

} while (select);

free(my_list.arr);
}

void Show_list(st_list my_list)//展示通讯录函数
{
printf(“*****************通讯录****************************\n”);
printf(” %10s%10s%20s\n”, “姓名”, “性别”, “电话号码”);
for (int i = 0; i < my_list.size; i++) { printf("第%2d 个同学:%10s%10s%20s\n", i + 1, my_list.arr[i].name, my_list.arr[i].sex, my_list.arr[i].telephone); } printf("**************************************************\n"); } st_list Init_dyn_list(void) //初始化函数 { st_people temp[50] = { {"","",""} }; st_list my_list; int size = 5; st_people* tmp1 = malloc(sizeof(st_people) * size * 2);//申请一块内存,地址赋给tmp1指针 memcpy(tmp1, &temp, sizeof(st_people) * size); my_list.arr = tmp1; my_list.size = size; my_list.capacity = my_list.size * 2; return my_list; } st_list first_scanf_list(st_list my_list)//初输入函数 { printf("您准备先录入几个数据"); scanf("%d", &my_list.size); for (int i = 0; i < my_list.size; i++) { printf("请输入第 %d 个同学的姓名,性别,电话(用空格分隔):", i + 1); scanf("%s %s %s", &my_list.arr[i].name, &my_list.arr[i].sex, &my_list.arr[i].telephone); } return my_list; } void query_dyn_list(st_list my_list)//查指定位函数 { int index; printf("您要查询第几个同学的信息?"); scanf("%d", &index); printf("您要查询的第%d个同学信息如下:姓名为:%s,性别为:%s,电话号码为:%s\n", index, my_list.arr[index - 1].name, my_list.arr[index - 1].sex, my_list.arr[index - 1].telephone); } st_list modify_dyn_arr(st_list my_list)//改 { int index; printf("您要改第几个同学的信息?"); scanf("%d", &index); printf("请输入第 %d 个同学的姓名,性别,电话(用空格分隔):", index); scanf("%s %s %s", &my_list.arr[index - 1].name, &my_list.arr[index - 1].sex, &my_list.arr[index - 1].telephone); return (my_list); } st_list insert_last_dyn_arr(st_list my_list)//末尾插入 { int size = my_list.size; int capcaity = my_list.capacity; if (size < capcaity) { printf("请输入末尾插入的同学的姓名,性别,电话(用空格分隔):"); scanf("%s %s %s", &my_list.arr[size].name, &my_list.arr[size].sex, &my_list.arr[size].telephone); } else if (size == capcaity) { int* tmp2 = malloc(sizeof(st_people)*capcaity * 2); memcpy(tmp2, my_list.arr, sizeof(st_people)*size); free(my_list.arr); my_list.arr = tmp2; my_list.capacity = capcaity * 2; printf("请输入末尾插入的同学的姓名,性别,电话(用空格分隔):"); scanf("%s %s %s", &my_list.arr[size].name, &my_list.arr[size].sex, &my_list.arr[size].telephone); } (my_list.size)++; return(my_list); } st_list insert_data_dyn_list(st_list my_list)//中间插入 { int index ; printf("您要加入第几个同学的信息?"); scanf("%d", &index); int size = my_list.size; int capcaity = my_list.capacity; if (size < capcaity)// { memmove(my_list.arr + index , my_list.arr + index-1, sizeof(st_people)*(size - index+1)); printf("要插入的同学的姓名,性别,电话(用空格分隔):"); scanf("%s %s %s", &my_list.arr[index-1].name, &my_list.arr[index - 1].sex, &my_list.arr[index - 1].telephone); } else if (size == capcaity) { int* tmp2 = malloc(sizeof(st_people)*capcaity * 2); memcpy(tmp2, my_list.arr, sizeof(st_people)*size); free(my_list.arr); my_list.arr = tmp2; my_list.capacity = capcaity * 2; memmove(my_list.arr + index, my_list.arr + index - 1, sizeof(st_people)*(size - index + 1)); printf("要插入的末尾插入的同学的姓名,性别,电话(用空格分隔):"); scanf("%s %s %s", &my_list.arr[index - 1].name, &my_list.arr[index - 1].sex, &my_list.arr[index - 1].telephone); } (my_list.size)++; return my_list; } st_list delate_last_dyn_arr(st_list my_list)//末尾删 { my_list.size--; return my_list; } st_list delate_all_dyn_arr(st_list my_list)//全部删 { my_list.size=0; return my_list; } st_list delete_index_dyn_arr(st_list my_list)//删除指定位 { int index; printf("您要删除第几个同学的信息?"); scanf("%d", &index); memmove(my_list.arr + index-1, my_list.arr + index , sizeof(st_people)*(my_list.size - index )); my_list.size--; return my_list; } void menu()//打印菜单 { printf("***********************\n"); printf("**** 0.退出通讯录 ******\n"); printf("***** 1.新建通讯录 *******\n"); printf("***** 2.展示通讯录 *******\n"); printf("***** 3.查询联系人 *******\n"); printf("******4.修改联系人 *********\n"); printf("******5.末位增加联系人 *********\n"); printf("******6.指定位增加联系人 *********\n"); printf("******7.删除末位联系人 *********\n"); printf("******8.删除指定联系人 *********\n"); printf("***** 9.清空通讯录 *******\n"); printf("***** 10.读取文件中通讯录 *******\n"); printf("***********************\n"); } void update_list_to_file(st_list my_list)//更新通讯录到文件中 { int path = "D:\\tongxun.txt"; remove(path);//先删掉原来文件 FILE *fp1; fp1 = fopen("D:\\tongxun.txt", "w"); for (int i = 0; i < my_list.size; i++) { fprintf(fp1,"%10s%10s%20s\n", my_list.arr[i].name, my_list.arr[i].sex, my_list.arr[i].telephone); } fclose(fp1); } st_list readin_file_to_list(st_list my_list)//读取文件到通讯录中 { FILE *fp1; if ((fp1 = fopen("D:\\tongxun.txt", "r")) == NULL) { printf("读取错误"); exit; } else { int i = 0; while (!feof(fp1)) { fscanf(fp1, "%10s%10s%20s\n", &my_list.arr[i].name, &my_list.arr[i].sex, &my_list.arr[i].telephone); i++; my_list.size = i; } printf("读取成功"); Show_list(my_list); } return my_list; } ```

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇