c语言代码编写通讯录,要求进行合法性检查
时间: 2024-01-16 12:02:29 浏览: 69
好的,我可以为您提供一份C语言代码实现通讯录,并且进行合法性检查的示例代码。请参考如下代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LEN 20
#define MAX_PHONE_NUM_LEN 11
// 定义联系人结构体
typedef struct {
char name[MAX_NAME_LEN];
char phone_num[MAX_PHONE_NUM_LEN];
} Contact;
// 定义通讯录结构体
typedef struct {
Contact* contacts; // 联系人数组
int count; // 联系人数量
int capacity; // 数组容量
} AddressBook;
// 函数声明
void init_address_book(AddressBook* address_book);
void add_contact(AddressBook* address_book);
void print_address_book(const AddressBook* address_book);
int is_valid_name(const char* name);
int is_valid_phone_num(const char* phone_num);
int main() {
AddressBook address_book;
init_address_book(&address_book);
int option;
do {
printf("请选择操作:\n");
printf("1. 添加联系人\n");
printf("2. 查看通讯录\n");
printf("3. 退出\n");
printf(">> ");
scanf("%d", &option);
switch (option) {
case 1:
add_contact(&address_book);
break;
case 2:
print_address_book(&address_book);
break;
case 3:
printf("再见!\n");
break;
default:
printf("无效的选项!\n");
break;
}
} while (option != 3);
free(address_book.contacts);
return 0;
}
// 初始化通讯录
void init_address_book(AddressBook* address_book) {
address_book->count = 0;
address_book->capacity = 10;
address_book->contacts = (Contact*) malloc(sizeof(Contact) * address_book->capacity);
}
// 添加联系人
void add_contact(AddressBook* address_book) {
if (address_book->count >= address_book->capacity) {
address_book->capacity *= 2;
address_book->contacts = (Contact*) realloc(address_book->contacts, sizeof(Contact) * address_book->capacity);
}
Contact* contact = &address_book->contacts[address_book->count];
// 输入联系人姓名
printf("请输入联系人姓名:");
scanf("%s", contact->name);
while (!is_valid_name(contact->name)) {
printf("姓名不合法,请重新输入:");
scanf("%s", contact->name);
}
// 输入联系人电话号码
printf("请输入联系人电话号码:");
scanf("%s", contact->phone_num);
while (!is_valid_phone_num(contact->phone_num)) {
printf("电话号码不合法,请重新输入:");
scanf("%s", contact->phone_num);
}
printf("添加联系人成功!\n");
address_book->count++;
}
// 打印通讯录
void print_address_book(const AddressBook* address_book) {
if (address_book->count == 0) {
printf("通讯录为空!\n");
return;
}
printf("通讯录:\n");
for (int i = 0; i < address_book->count; i++) {
const Contact* contact = &address_book->contacts[i];
printf("%d. %s %s\n", i+1, contact->name, contact->phone_num);
}
}
// 判断姓名是否合法
int is_valid_name(const char* name) {
// 姓名不能超过20个字符
if (strlen(name) > MAX_NAME_LEN) {
return 0;
}
// 姓名不能包含数字
for (int i = 0; i < strlen(name); i++) {
if (isdigit(name[i])) {
return 0;
}
}
return 1;
}
// 判断电话号码是否合法
int is_valid_phone_num(const char* phone_num) {
// 电话号码必须是11位数字
if (strlen(phone_num) != MAX_PHONE_NUM_LEN) {
return 0;
}
// 电话号码必须全部是数字
for (int i = 0; i < strlen(phone_num); i++) {
if (!isdigit(phone_num[i])) {
return 0;
}
}
return 1;
}
```
在上面的代码中,我们定义了两个结构体,一个是联系人结构体,一个是通讯录结构体。我们使用动态数组来保存联系人信息,并在添加联系人时进行容量检查和重新分配内存。我们还实现了两个函数来检查联系人姓名和电话号码是否合法。在添加联系人时,我们会先让用户输入姓名和电话号码,并进行合法性检查,如果不合法就让用户重新输入。
希望这份示例代码能够帮助到您!
阅读全文