以下是基于顺序存储结构的科技竞赛志愿者名册管理程序的一个C语言实现: ```c #include <stdio.h> #include <string.h> // 定义志愿者结构体 typedef struct { char id[10]; char name[20]; char phone[15]; int serviceHours; } Volunteer; // 定义全局变量和函数 Volunteer volunteers[100]; // 假设最多存放100个志愿者信息 int count = 0; // 当前志愿者个数 void addVolunteer() { int num; printf("请输入要添加的志愿者人数: "); scanf("%d", &num); getchar(); // 读取换行符 for (int i = 0; i < num; i++) { printf("请输入第%d个志愿者信息:\n", i + 1); printf("编号: "); scanf("%s", volunteers[count].id); printf("姓名: "); scanf("%s", volunteers[count].name); printf("电话号码: "); scanf("%s", volunteers[count].phone); volunteers[count].serviceHours = 0; // 初始志愿时长为0 count++; } printf("添加成功!\n"); } void insertVolunteer() { int pos; if (count == 0) { printf("志愿者名册为空,无法进行插入操作!\n"); return; } printf("请输入要插入的位置(1-%d): ", count); scanf("%d", &pos); getchar(); // 读取换行符 if (pos < 1 || pos > count + 1) { printf("无效的位置!\n"); return; } printf("请输入要插入的志愿者信息:\n"); printf("编号: "); scanf("%s", volunteers[count].id); printf("姓名: "); scanf("%s", volunteers[count].name); printf("电话号码: "); scanf("%s", volunteers[count].phone); volunteers[count].serviceHours = 0; // 初始志愿时长为0 count++; for (int i = count - 1; i > pos - 1; i--) { volunteers[i] = volunteers[i - 1]; } strcpy(volunteers[pos - 1].id, volunteers[count - 1].id); strcpy(volunteers[pos - 1].name, volunteers[count - 1].name); strcpy(volunteers[pos - 1].phone, volunteers[count - 1].phone); volunteers[pos - 1].serviceHours = volunteers[count - 1].serviceHours; printf("插入成功!\n"); } void modifyVolunteer() { int choice; char keyword[20]; printf("请选择查找志愿者的方式:\n"); printf("1. 按编号查找\n"); printf("2. 按姓名查找\n"); printf("请输入相应的数字: "); scanf("%d", &choice); getchar(); // 读取换行符 int index = -1; // 存储查找到的志愿者索引 if (choice == 1) { char id[10]; printf("请输入要查找的志愿者编号: "); scanf("%s", id); getchar(); // 读取换行符 for (int i = 0; i < count; i++) { if (strcmp(volunteers[i].id, id) == 0) { index = i; break; } } } else if (choice == 2) { char name[20]; printf("请输入要查找的志愿者姓名: "); scanf("%s", name); getchar(); // 读取换行符 for (int i = 0; i < count; i++) { if (strcmp(volunteers[i].name, name) == 0) { index = i; break; } } } else { printf("无效的选择!\n"); return; } if (index == -1) { printf("未找到匹配的志愿者信息!\n"); return; } printf("找到匹配的志愿者信息如下:\n"); printf("编号: %s\n", volunteers[index].id); printf("姓名: %s\n", volunteers[index].name); printf("电话号码: %s\n", volunteers[index].phone); printf("志愿服务时长: %d\n", volunteers[index].serviceHours); printf("请选择要修改的信息:\n"); printf("1. 编号\n"); printf("2. 姓名\n"); printf("3. 电话号码\n"); printf("4. 志愿服务时长\n"); printf("请输入相应的数字: "); scanf("%d", &choice); getchar(); // 读取换行符 if (choice == 1) { printf("请输入新的编号: "); scanf("%s", volunteers[index].id); getchar(); // 读取换行符 } else if (choice == 2) { printf("请输入新的姓名: "); scanf("%s", volunteers[index].name); getchar(); // 读取换行符 } else if (choice == 3) { printf("请输入新的电话号码: "); scanf("%s", volunteers[index].phone); getchar(); // 读取换行符 } else if (choice == 4) { printf("请输入新的志愿服务时长: "); scanf("%d", &volunteers[index].serviceHours); getchar(); // 读取换行符 } else { printf("无效的选择!\n"); return; } printf("修改成功!\n"); } void deleteVolunteer() { char id[10]; printf("请输入要删除的志愿者编号: "); scanf("%s", id); getchar(); // 读取换行符 int index = -1; // 存储查找到的志愿者索引 for (int i = 0; i < count; i++) { if (strcmp(volunteers[i].id, id) == 0) { index = i; break; } } if (index == -1) { printf("未找到匹配的志愿者信息!\n"); return; } for (int i = index; i < count - 1; i++) { volunteers[i] = volunteers[i + 1]; } count--; printf("删除成功!\n"); } void printVolunteers() { if (count == 0) { printf("志愿者名册为空!\n"); return; } printf("志愿者名册信息如下:\n"); for (int i = 0; i < count; i++) { printf("编号: %s 姓名: %s 电话号码: %s 志愿服务时长: %d\n", volunteers[i].id, volunteers[i].name, volunteers[i].phone, volunteers[i].serviceHours); } printf("总人数: %d\n", count); } void sortByServiceHours() { if (count == 0) { printf("志愿者名册为空!\n"); return; } for (int i = 0; i < count - 1; i++) { for (int j = 0; j < count - 1 - i; j++) { if (volunteers[j].serviceHours > volunteers[j + 1].serviceHours) { Volunteer temp = volunteers[j]; volunteers[j] = volunteers[j + 1]; volunteers[j + 1] = temp; } } } printf("排序完成!\n"); } int main() { int choice; while (1) { printf("\n志愿者名册管理菜单:\n"); printf("1. 添加志愿者信息\n"); printf("2. 在指定位置插入志愿者信息\n"); printf("3. 修改志愿者信息\n"); printf("4. 删除指定编号的志愿者信息\n"); printf("5. 输出所有志愿者信息\n"); printf("6. 根据志愿服务时长进行排序\n"); printf("7. 退出程序\n"); printf("请输入相应的数字: "); scanf("%d", &choice); getchar(); // 读取换行符 switch (choice) { case 1: addVolunteer(); break; case 2: insertVolunteer(); break; case 3: modifyVolunteer(); break; case 4: deleteVolunteer(); break; case 5: printVolunteers(); break; case 6: sortByServiceHours(); break; case 7: printf("程序已退出.\n"); return 0; default: printf("无效的选择!\n"); } } return 0; } ``` 这个程序基于顺序存储结构的数组实现了志愿者名册的管理,提供了添加、插入、修改、删除、打印和排序等功能。用户可以通过数字化菜单选择相应的功能进行操作。 [2024-12-17 22:56:55 | AI写代码神器 | 4722点数解答]