通讯录管理系统升级版,用结构体式,实现三个功能:1.先完成注册登录进入该系统、2.在查找功能中根据输入的一个字找到包含该字的所有联系人,再找到要找的联系人、3.将通讯录内容以excel形式导出。写出以上的c语言代码
时间: 2024-05-13 11:19:37 浏览: 80
抱歉,我无法提供完整的代码,但是我可以给你一些思路和代码片段来帮助你实现这个升级版的通讯录管理系统。
首先,我们需要定义一个结构体来存储联系人的信息,例如:
```c
struct Contact {
char name[20];
char phone[20];
char email[30];
};
```
然后,我们需要实现一个注册和登录功能,可以使用文件来存储用户的账号和密码。例如:
```c
// 注册功能
void registerUser() {
char username[20], password[20];
printf("请输入用户名:");
scanf("%s", username);
printf("请输入密码:");
scanf("%s", password);
FILE *fp = fopen("users.dat", "ab");
if (fp == NULL) {
printf("文件打开失败!\n");
return;
}
// 将用户名和密码写入文件
fwrite(username, sizeof(char), strlen(username), fp);
fwrite("\t", sizeof(char), 1, fp);
fwrite(password, sizeof(char), strlen(password), fp);
fwrite("\n", sizeof(char), 1, fp);
fclose(fp);
printf("注册成功!\n");
}
// 登录功能
int loginUser() {
char username[20], password[20], buffer[100];
int found = 0;
printf("请输入用户名:");
scanf("%s", username);
printf("请输入密码:");
scanf("%s", password);
FILE *fp = fopen("users.dat", "rb");
if (fp == NULL) {
printf("文件打开失败!\n");
return 0;
}
// 逐行读取文件,查找用户名和密码是否匹配
while (fgets(buffer, 100, fp)) {
char *token = strtok(buffer, "\t\n");
if (strcmp(token, username) == 0) {
token = strtok(NULL, "\t\n");
if (strcmp(token, password) == 0) {
found = 1;
break;
}
}
}
fclose(fp);
if (found) {
printf("登录成功!\n");
return 1;
} else {
printf("用户名或密码错误!\n");
return 0;
}
}
```
接下来,我们需要实现一个添加联系人的功能,可以使用动态数组来存储联系人的信息。例如:
```c
// 添加联系人功能
void addContact(struct Contact **contacts, int *count) {
char name[20], phone[20], email[30];
printf("请输入姓名:");
scanf("%s", name);
printf("请输入电话:");
scanf("%s", phone);
printf("请输入邮箱:");
scanf("%s", email);
// 创建一个新的联系人结构体
struct Contact *newContact = malloc(sizeof(struct Contact));
strcpy(newContact->name, name);
strcpy(newContact->phone, phone);
strcpy(newContact->email, email);
// 将新的联系人添加到动态数组中
(*count)++;
*contacts = realloc(*contacts, (*count) * sizeof(struct Contact));
(*contacts)[*count - 1] = *newContact;
printf("联系人添加成功!\n");
}
```
接下来,我们需要实现一个查找联系人的功能,可以根据输入的一个字找到包含该字的所有联系人,再找到要找的联系人。例如:
```c
// 查找联系人功能
void searchContact(struct Contact *contacts, int count) {
char keyword[20];
printf("请输入要查找的关键字:");
scanf("%s", keyword);
// 遍历所有联系人,找到包含关键字的联系人
int found = 0;
for (int i = 0; i < count; i++) {
if (strstr(contacts[i].name, keyword) != NULL) {
printf("%d. %s\t%s\t%s\n", i + 1, contacts[i].name, contacts[i].phone, contacts[i].email);
found = 1;
}
}
if (!found) {
printf("未找到符合条件的联系人!\n");
return;
}
// 让用户选择要查看的联系人
int choice;
printf("请选择要查看的联系人编号:");
scanf("%d", &choice);
if (choice < 1 || choice > count) {
printf("输入有误!\n");
return;
}
printf("%s\t%s\t%s\n", contacts[choice - 1].name, contacts[choice - 1].phone, contacts[choice - 1].email);
}
```
最后,我们需要实现一个导出通讯录的功能,可以使用第三方库来将通讯录内容以excel形式导出。例如:
```c
// 导出通讯录功能
void exportContacts(struct Contact *contacts, int count) {
FILE *fp = fopen("contacts.csv", "w");
if (fp == NULL) {
printf("文件打开失败!\n");
return;
}
// 写入表头
fprintf(fp, "姓名,电话,邮箱\n");
// 写入每个联系人的信息
for (int i = 0; i < count; i++) {
fprintf(fp, "%s,%s,%s\n", contacts[i].name, contacts[i].phone, contacts[i].email);
}
fclose(fp);
printf("通讯录导出成功!\n");
}
```
以上是通讯录管理系统升级版的一些代码片段和思路,你可以根据自己的需求进行修改和完善。
阅读全文