酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

基于顺序存储结构的科技竞赛志愿者名册管理程序设计 利用数组设计一个志愿者名册管理程序,记录每个志愿者的编号、姓名、电话号码和志愿服务时长,并通过数字化菜单为用户提供插入、删除、查找和打印等功能。通过菜单的选择,用户可以对志愿者的信息进行管理。需要实现的功能包括: 1)添加志愿者信息。可一次添加n人,n为键盘录入的整数。录入的时候,志愿时长的初始值为0。 2)在数组的指定位置插入某个学生的数据。 3)修改志愿者信息。根据编号或姓名查找志愿者的信息。如果找到对应的志愿者,用户就可以对其所有信息进行修改。 4)删除特定编号的志愿者。 5)在屏幕上输出所有志愿者的信息。同一个人的信息应显示在同一行。最后显示总人数。 6)根据志愿服务时长进行排序,并输出排序后的结果。 以上功能对应的菜单,在执行时应当没有顺序和次数的限制。设计程序时需要对各种特殊情况(如数组为空)加以充分的考虑。编号、姓名和电话号码要求定义成字符串。为了节省数据录入的时间,可以通过初始化程序将部分数据写入顺序表。键盘录入数据的功能,演示实现的过程就可以。演示各项功能的时候,顺序表中至少要包含10组数据。c语言

以下是基于顺序存储结构的科技竞赛志愿者名册管理程序的一个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点数解答]

相关提问