前提:必须先了解顺序表的增删查改功能 见:写文章-CSDN创作中心
学习目的:在顺序表的基础上实现通讯录就功能
//暂时把源码放出来因为小编也刚学 只能简单的写出代码,解释以后会补的请见谅。或则可以联系小编进行讨论。
test1.c
#define _CRT_SECURE_NO_WARNINGS 1
#define _CRT_SECURE_NO_WARNINGS 1
#include"SeqList1.h"
#include"Contact.h"
void menu() {
printf("************************\n");
printf("** 1.添加用户 2.删除用户**\n");
printf("** 3.查找用户 4.修改用户**\n");
printf("** 0.退出 **************\n");
printf("***********************\n");
}
int main() {
//创建对象
Contact con;
ConInit(&con);
int input;
do {
printf("请选择你要实现的功能>\n");
menu();
scanf("%d", &input);
switch (input) {
case 1:
AddContact(&con);
ShowContact(&con);
break;
case 2:
DelContact(&con);
ShowContact(&con);
break;
case 3:
FindContact(&con);
break;
case 4:
ModifyContact(&con);
ShowContact(&con);
break;
case 0:
printf("已退出\n");
break;
default:
printf("选择错误请重新选择\n");
break;
}
} while (input);
DestroyContact(&con);
return 0;
}
SeqList.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"SeqList1.h"
//初始化
void SeqInit(SL* ps) {
ps->arr = NULL;
ps->size = ps->capacity = 0;
}
//申请空间
void CheckCapcity(SL* ps) {
if (ps->capacity == ps->size) {
int NewCapacity = ps->capacity == 0 ? 4 : 2 * ps->capacity;
PersonInfo* tem = (PersonInfo*)realloc(ps->arr, NewCapacity * sizeof(PersonInfo));
ps->arr = tem;
ps->capacity = NewCapacity;
}
}
//尾插
void SeqPushBack(SL* ps,SLDataType x) {
assert(ps);
CheckCapcity(ps);
ps->arr[ps->size] = x;
ps->size++;
}
//在指定位置删除数据
void SeqDelBack(SL* ps,int pos) {
assert(ps);
for (int i = pos; i < ps->size; i++) {
ps->arr[i] = ps->arr[i + 1];
}
ps->size--;
}
//销毁
void SeqDestory(SL* ps) {
if (ps->arr) {
free(ps->arr);
}
ps->arr = NULL;
ps->capacity = ps->size = 0;
}
SeqList1,h
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include"Contact.h"
//顺序表定义
typedef struct PersonInfo SLDataType;
typedef struct SeqList {
SLDataType* arr;
int size;
int capacity;
}SL;
//初始化
void SeqInit(SL* ps);
//尾插
void SeqPushBack(SL* ps, SLDataType x);
//在指定位置删除数据
void SeqDelBack(SL* ps, char* name);
Contact.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"Contact.h"
#include"SeqList1.h"
//初始化
void ConInit(Contact* con) {
SeqInit(con);
}
//插入数据
void AddContact(Contact* con) {
PersonInfo info;
//输入姓名,性别,电话,地址
printf("请输入姓名:\n");
scanf("%s", info.name);
printf("请输入性别:\n");
scanf("%s", info.sex);
printf("请输入电话:\n");
scanf("%s", info.TEl);
printf("请输入地址:\n");
scanf("%s", info.ADD);
SeqPushBack(con,info);
}
//删除数据
int CheckBuyName(Contact* con, char name[]) {
for (int i = 0; i < con->size; i++) {
if (!strcmp(con->arr[i].name, name)) {
return i;
}
}
return -1;
}
void DelContact(Contact* con) {
char name[10] = { 0 };
printf("请输入要删除的姓名:\n");
scanf("%s", name);
int pos=CheckBuyName(con, name);
if (pos < 0) {
printf("删除姓名不存在\n");
return;
}
SeqDelBack(con, pos);
printf("删除成功!\n");
}
//查找数据
void FindContact(Contact* con) {
printf("请输入要查找的名字:\n");
char name[10];
scanf("%s", name);
int pos=CheckBuyName(con, name);
if (pos < 0) {
printf("没有该信息");
return;
}
printf("找到了,该用户位于第%d列\n", pos);
printf("该用户信息为:\n");
printf("%s %s %s %s", con->arr[pos].name, con->arr[pos].sex,
con->arr[pos].TEl, con->arr[pos].ADD);
printf("\n");
}
//修该数据
void ModifyContact(Contact* con) {
printf("请输入你要修该用户的名字:\n");
char name[10];
scanf("%s", name);
int pos = CheckBuyName(con, name);
if (pos < 0) {
printf("没有该用户信息");
return;
}
printf("请输入你要修改用户的性别:\n");
scanf("%s", con->arr[pos].sex);
}
//展示通讯录数据
void ShowContact(Contact* con) {
assert(con);
for (int i = 0; i < con->size; i++) {
printf("%s %s %s %s", con->arr[i].name, con->arr[i].sex,
con->arr[i].TEl, con->arr[i].ADD);
printf("\n");
}
}
//销毁
void DestroyContact(Contact* con) {
SeqDestory(con);
}
Contact.h
#pragma once
#define NAME_MAX 100
#define SEX_MAX 8
#define TEL_MAX 11
#define ADDR_MAX 100
typedef struct PersonInfo {
char name[NAME_MAX];
char sex[SEX_MAX];
char TEl[TEL_MAX];
char ADD[ADDR_MAX];
}PersonInfo;
//初始化
//SL改名字,前置声明
typedef struct SeqList Contact;
//初始化通讯录
void ConInit(Contact* con);
//添加通讯录数据
void AddContact(Contact* con);
//删除通讯录数据
void DelContact(Contact* con);
//查找通讯录数据
void FindContact(Contact* con);
//修改通讯录数据
void ModifyContact(Contact* con);
//销毁通讯录数据
void DestroyContact(Contact* con);
//展示通讯录数据
void ShowContact(Contact* con);