coder20020723 发表于 2023-12-18 21:32:48

求助

@FishC
用c语言写一个个人通讯录管理系统
建立一个通讯录,输入姓名、电话号码、住址等信息,然后对通信簿进行显示、查找、添加、修改及删除。
功能要求
(1) 通讯录的每一条信息包括姓名、单位、固定电话、移动手机、分类(如同事、朋友、同学、家人等)、EMAIL、QQ等。
(2) 输入功能:可以一次完成若干条信息的输入。
(3) 显示功能:完成全部通讯录信息的显示
(4) 查找功能:可以按姓名等多种方式查找通讯信息
(5) 增加、删除、修改功能:完成通讯录信息的多种更新

FishC 发表于 2023-12-18 21:33:41

当然可以帮你写一个通讯录管理系统。首先,我们需要定义一个结构体来表示每一条通讯录信息:

#include<stdio.h>
#include<string.h>

#define MAX_SIZE 100 // 定义通讯录最大容量

typedef struct {
    char name;       // 姓名
    char company;    // 单位
    char telephone;// 固定电话
    char mobile;   // 移动手机
    char category;   // 分类
    char email;      // EMAIL
    char qq;         // QQ
} AddressBook;

接下来,我们可以定义一个存储通讯录信息的数组,并定义一个变量count来表示通讯录当前的数量:

AddressBook contacts; // 存储通讯录信息的数组
int count = 0;// 当前通讯录数量

接下来,我们可以实现输入功能。可以使用一个循环来多次输入通讯录信息,直到用户输入结束。在循环内部,我们可以通过strcpy函数来将用户输入的信息复制到对应的成员中,然后将count加1。

void input() {
    char choice = 'y';
    while (choice == 'y' || choice == 'Y') {
      printf("请输入姓名:");
      scanf("%s", contacts.name);
      // 输入其他信息...
      
      count++;// 当前通讯录数量加1
      
      printf("是否继续输入(Y/N)?");
      scanf(" %c", &choice);// 注意空格的作用,防止读取上一个字符
    }
    printf("输入完成!\n");
}

接下来,我们可以实现显示功能。遍历通讯录数组,逐个打印出每一条通讯录信息。

void display() {
    if (count == 0) {
      printf("通讯录为空!\n");
      return;
    }
   
    for (int i = 0; i < count; i++) {
      printf("姓名:%s\n", contacts.name);
      // 显示其他信息...
    }
}

接下来,我们可以实现查找功能。用户可以选择按照姓名或其他信息进行查找,我们可以通过比较字符串是否相等来判断是否找到匹配的结果。

void search() {
    char keyword;
   
    printf("请输入要查找的关键字:");
    scanf("%s", keyword);
   
    int found = 0;
    for (int i = 0; i < count; i++) {
      if (strcmp(contacts.name, keyword) == 0) {
            printf("找到匹配的结果:\n");
            printf("姓名:%s\n", contacts.name);
            // 显示其他信息...
            found = 1;
      }
    }
   
    if (!found) {
      printf("未找到匹配的结果!\n");
    }
}

接下来,我们可以实现添加功能。在添加功能中,我们可以直接在数组的末尾增加一条通讯录信息,然后将count加1。

void add() {
    if (count >= MAX_SIZE) {
      printf("通讯录已满,无法添加!\n");
      return;
    }
   
    printf("请输入姓名:");
    scanf("%s", contacts.name);
    // 输入其他信息...
   
    count++;// 当前通讯录数量加1
   
    printf("添加成功!\n");
}

接下来,我们可以实现删除功能。删除功能需要先找到要删除的通讯录信息,然后将后面的所有信息往前移动一个位置,并将count减1。

void remove() {
    char keyword;
   
    printf("请输入要删除的关键字:");
    scanf("%s", keyword);
   
    int found = 0;
    for (int i = 0; i < count; i++) {
      if (strcmp(contacts.name, keyword) == 0) {
            found = 1;
            // 将后面的所有信息往前移动一个位置
            for (int j = i; j < count - 1; j++) {
                contacts = contacts;
            }
            count--;// 当前通讯录数量减1
            printf("删除成功!\n");
            break;
      }
    }
   
    if (!found) {
      printf("未找到匹配的结果!\n");
    }
}

最后,我们可以实现修改功能。修改功能需要先找到要修改的通讯录信息,然后用户可以输入新的信息进行替换。

void modify() {
    char keyword;
   
    printf("请输入要修改的关键字:");
    scanf("%s", keyword);
   
    int found = 0;
    for (int i = 0; i < count; i++) {
      if (strcmp(contacts.name, keyword) == 0) {
            found = 1;
            
            printf("请输入新的姓名:");
            scanf("%s", contacts.name);
            // 输入其他信息...
            
            printf("修改成功!\n");
            break;
      }
    }
   
    if (!found) {
      printf("未找到匹配的结果!\n");
    }
}

以上就是一个简单的通讯录管理系统的实现。你可以根据自己的需求进一步完善其中的功能,增加错误处理等。希望对你有帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

coder20020723 发表于 2023-12-18 21:50:21

这段代码没有定义主函数

FishC 发表于 2023-12-18 21:50:45

coder20020723 发表于 2023-12-18 21:50
这段代码没有定义主函数

对不起,我在给出代码的时候忘记添加主函数了。下面是包含主函数的完整代码:

#include <stdio.h>
#include <string.h>

#define MAX_SIZE 100

typedef struct {
    char name;       // 姓名
    char company;    // 单位
    char telephone;// 固定电话
    char mobile;   // 移动手机
    char category;   // 分类
    char email;      // EMAIL
    char qq;         // QQ
} AddressBook;

AddressBook contacts; // 存储通讯录信息的数组
int count = 0;// 当前通讯录数量

void input() {
    char choice = 'y';
    while (choice == 'y' || choice == 'Y') {
      printf("请输入姓名:");
      scanf("%s", contacts.name);
      printf("请输入单位:");
      scanf("%s", contacts.company);
      printf("请输入固定电话:");
      scanf("%s", contacts.telephone);
      printf("请输入移动手机:");
      scanf("%s", contacts.mobile);
      printf("请输入分类:");
      scanf("%s", contacts.category);
      printf("请输入EMAIL:");
      scanf("%s", contacts.email);
      printf("请输入QQ:");
      scanf("%s", contacts.qq);
      
      count++;// 当前通讯录数量加1
      
      printf("是否继续输入(Y/N)?");
      scanf(" %c", &choice);// 注意空格的作用,防止读取上一个字符
    }
    printf("输入完成!\n");
}

void display() {
    if (count == 0) {
      printf("通讯录为空!\n");
      return;
    }
   
    for (int i = 0; i < count; i++) {
      printf("姓名:%s\n", contacts.name);
      printf("单位:%s\n", contacts.company);
      printf("固定电话:%s\n", contacts.telephone);
      printf("移动手机:%s\n", contacts.mobile);
      printf("分类:%s\n", contacts.category);
      printf("EMAIL:%s\n", contacts.email);
      printf("QQ:%s\n", contacts.qq);
      printf("\n");
    }
}

void search() {
    char keyword;
   
    printf("请输入要查找的关键字:");
    scanf("%s", keyword);
   
    int found = 0;
    for (int i = 0; i < count; i++) {
      if (strcmp(contacts.name, keyword) == 0) {
            printf("找到匹配的结果:\n");
            printf("姓名:%s\n", contacts.name);
            printf("单位:%s\n", contacts.company);
            printf("固定电话:%s\n", contacts.telephone);
            printf("移动手机:%s\n", contacts.mobile);
            printf("分类:%s\n", contacts.category);
            printf("EMAIL:%s\n", contacts.email);
            printf("QQ:%s\n", contacts.qq);
            printf("\n");
            found = 1;
      }
    }
   
    if (!found) {
      printf("未找到匹配的结果!\n");
    }
}

void add() {
    if (count >= MAX_SIZE) {
      printf("通讯录已满,无法添加!\n");
      return;
    }
   
    printf("请输入姓名:");
    scanf("%s", contacts.name);
    printf("请输入单位:");
    scanf("%s", contacts.company);
    printf("请输入固定电话:");
    scanf("%s", contacts.telephone);
    printf("请输入移动手机:");
    scanf("%s", contacts.mobile);
    printf("请输入分类:");
    scanf("%s", contacts.category);
    printf("请输入EMAIL:");
    scanf("%s", contacts.email);
    printf("请输入QQ:");
    scanf("%s", contacts.qq);
   
    count++;// 当前通讯录数量加1
   
    printf("添加成功!\n");
}

void remove() {
    char keyword;
   
    printf("请输入要删除的关键字:");
    scanf("%s", keyword);
   
    int found = 0;
    for (int i = 0; i < count; i++) {
      if (strcmp(contacts.name, keyword) == 0) {
            found = 1;
            
            // 将后面的所有信息往前移动一个位置
            for (int j = i; j < count - 1; j++) {
                strcpy(contacts.name, contacts.name);
                strcpy(contacts.company, contacts.company);
                strcpy(contacts.telephone, contacts.telephone);
                strcpy(contacts.mobile, contacts.mobile);
                strcpy(contacts.category, contacts.category);
                strcpy(contacts.email, contacts.email);
                strcpy(contacts.qq, contacts.qq);
            }
            
            count--;// 当前通讯录数量减1
            
            printf("删除成功!\n");
            break;
      }
    }
   
    if (!found) {
      printf("未找到匹配的结果!\n");
    }
}

void modify() {
    char keyword;
   
    printf("请输入要修改的关键字:");
    scanf("%s", keyword);
   
    int found = 0;
    for (int i = 0; i < count; i++) {
      if (strcmp(contacts.name, keyword) == 0) {
            found = 1;
            
            printf("请输入新的姓名:");
            scanf("%s", contacts.name);
            printf("请输入新的单位:");
            scanf("%s", contacts.company);
            printf("请输入新的固定电话:");
            scanf("%s", contacts.telephone);
            printf("请输入新的移动手机:");
            scanf("%s", contacts.mobile);
            printf("请输入新的分类:");
            scanf("%s", contacts.category);
            printf("请输入新的EMAIL:");
            scanf("%s", contacts.email);
            printf("请输入新的QQ:");
            scanf("%s", contacts.qq);
            
            printf("修改成功!\n");
            break;
      }
    }
   
    if (!found) {
      printf("未找到匹配的结果!\n");
    }
}

int main() {
    int choice;
   
    while (1) {
      printf("请选择操作:\n");
      printf("1. 输入通讯录信息\n");
      printf("2. 显示通讯录信息\n");
      printf("3. 查找通讯录信息\n");
      printf("4. 添加通讯录信息\n");
      printf("5. 删除通讯录信息\n");
      printf("6. 修改通讯录信息\n");
      printf("0. 退出程序\n");
      printf("请输入选择:");
      scanf("%d", &choice);
      
      switch(choice) {
            case 1:
                input();
                break;
            case 2:
                display();
                break;
            case 3:
                search();
                break;
            case 4:
                add();
                break;
            case 5:
                remove();
                break;
            case 6:
                modify();
                break;
            case 0:
                printf("程序已退出。\n");
                return 0;
            default:
                printf("无效的选择,请重新输入!\n");
                break;
      }
      
      printf("\n");
    }
}

该代码包含了主函数,可以实现通讯录管理系统的各种功能。你可以根据需要进行测试和使用。希望能对你有所帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

高级程序猿 发表于 2023-12-18 23:00:13

本帖最后由 高级程序猿 于 2023-12-18 23:02 编辑

1

FishC 发表于 2023-12-18 23:00:28

高级程序猿 发表于 2023-12-18 23:00
@FishC
各位学委,大家好,关于心理健康教育课程作业 ...

嗨,同学们!听说你们有一个关于个人成长的作业,我来给你们一些提示吧。

首先,题目是可以自己选的,所以要挑一个和你个人成长有关的话题。比如说,你可以选择回顾你的学习历程、感受家庭的变化、或者是探讨你在某个重要事件中的成长经历。

在写报告的时候,要注重内省,也就是从内心深处去体验和分析。例如,你可以描述你在某个阶段的心理状态、遇到的困扰和困难,以及你是如何逐渐克服它们的。记住,不要只是简单罗列事实,而是要展示你的思考和感受。

另外,要注意的是不要进行价值判断。这意味着不要去评论或评价你的家人、教育方式或其他人。你的报告应该关注于自己的成长和反思,通过了解自己来提出自我完善的方案。

在写作格式上,记得按照老师要求的字数、字体和格式来进行排版。标题要用黑体三号字,正文要用宋体小四号字,行间距设置为1.25倍。尽量使用电子word版,最后在文末标注清楚年级、专业、班级、姓名和学号,并且将文件名命名为“姓名学号+成长报告”。

最后,记得要保护隐私,不要将他人的信息私传给别人。尊重别人也是尊重自己,这一点很重要。

希望我的回答对你有帮助,祝你顺利完成作业!如果还有其他问题,随时来问我哦!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

高级程序猿 发表于 2023-12-18 23:01:42

高级程序猿 发表于 2023-12-18 23:00
@FishC
各位学委,大家好,关于心理健康教育课程作业,辛苦大家通知本班同学们。
个人成长报告(15%)


?

coder20020723 发表于 2023-12-19 20:17:45

这段代码中整型Found的作用是什么?@FishC

FishC 发表于 2023-12-19 20:17:56

coder20020723 发表于 2023-12-19 20:17
这段代码中整型Found的作用是什么?@FishC

嗨!感谢你的提问。

在你提到的代码中,整型变量Found的作用是用来表示是否找到了目标值。通常,在需要确定某个条件是否满足时,我们会使用一个变量来表示这个条件的状态。如果条件满足,则将这个变量设置为True(或1),否则设置为False(或0)。

在代码中,Found的值初始设置为False,表示没有找到目标值。当找到目标值时,将Found设置为True,以表明已经找到了。这样,代码可以根据Found的值来进行相应的操作,比如输出提示信息,或者执行特定的逻辑。

下面是一个简单的示例代码:

numbers =
target = 7
Found = False

for num in numbers:
    if num == target:
      Found = True
      break

if Found:
    print("找到了目标值!")
else:
    print("未找到目标值!")

在这个例子中,我们通过遍历列表numbers来查找目标值target。当找到目标值时,将Found设置为True,并使用break语句提前结束循环。最后,根据Found的值输出对应的提示信息。

希望这个解答能帮到你!如有任何问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 求助