设计一个学生通信录,学生通迅录数据信息构成内容可自行设计(如:学号、姓名、电话号码、所在班级、寝室地址等),通信录数据类型定义为结构体类型。
主要实现功能包括:
(1)创建学生通讯录;
(2)修改学生通讯录;
(3)增删学生通讯录;
(4)能够按多种方式进行查询(如:①按学号查询;②按所在班级查询)
以下是一个简单的学生通讯录管理系统设计,使用结构体类型来存储每个学生的信息。该程序提供了创建、修改和增删通讯录的功能,并且可以按照学号或所在班级进行查询:
"""
作 者:小王子同学
https://blog.csdn.net/weixin_45810587?type=blog
"""
#include
#include
#define MAX_STUDENTS 100
typedef struct {
char id[20];
char name[20];
char phone[15];
char class[30];
char address[50];
} Student;
Student students[MAX_STUDENTS]; // 创建存储所有学生信息的数组
int num_students = 0; // 当前存储的学生数目
// 辅助函数:根据学号查找学生的下标(如果不存在返回-1)
int find_student_by_id(char* id) {
for (int i = 0; i < num_students; i++) {
if (strcmp(students[i].id, id) == 0) {
return i;
}
}
return -1; // 找不到对应的学生
}
// 辅助函数:根据班级查找学生的下标(如果不存在返回-1)
int find_student_by_class(char* class) {
for (int i = 0; i < num_students; i++) {
if (strcmp(students[i].class, class) == 0) {
return i;
}
}
return -1; // 找不到对应的学生
}
// 创建新的学生记录
void create_student() {
if (num_students >= MAX_STUDENTS) {
printf("无法添加更多学生!");
return;
}
printf("请输入新学生的信息:\n");
printf("学号:");
scanf("%s", students[num_students].id);
printf("姓名:");
scanf("%s", students[num_students].name);
printf("电话:");
scanf("%s", students[num_students].phone);
printf("班级:");
scanf("%s", students[num_students].class);
printf("寝室地址:");
scanf("%s", students[num_students].address);
num_students++;
printf("添加成功!\n\n");
}
// 修改学生记录
void update_student() {
char id[20];
printf("请输入要修改的学生的学号:");
scanf("%s", id);
int index = find_student_by_id(id);
if (index == -1) {
printf("找不到对应的学生!\n\n");
return;
}
// 用户输入新的值
printf("当前信息如下:\n");
printf("学号:%s\n", students[index].id);
printf("姓名:%s\n", students[index].name);
printf("电话:%s\n", students[index].phone);
printf("班级:%s\n", students[index].class);
printf("寝室地址:%s\n", students[index].address);
printf("\n");
printf("请输入新值(如果不需要修改某项则直接回车):\n");
printf("姓名:");
scanf("%s", students[index].name);
printf("电话:");
scanf("%s", students[index].phone);
printf("班级:");
scanf("%s", students[index].class);
printf("寝室地址:");
scanf("%s", students[index].address);
printf("修改成功!\n\n");
}
// 删除学生记录
void delete_student() {
char id[20];
printf("请输入要删除的学生的学号:");
scanf("%s", id);
int index = find_student_by_id(id);
if (index == -1) {
printf("找不到对应的学生!\n\n");
return;
}
// 从数组中移除该学生
num_students--;
for (int i = index; i < num_students; i++) {
students[i] = students[i+1];
}
printf("删除成功!\n\n");
}
// 按照学号查找学生记录
void search_by_id() {
char id[20];
printf("请输入要查找的学生的学号:");
scanf("%s", id);
int index = find_student_by_id(id);
if (index == -1) {
printf("找不到对应的学生!\n\n");
return;
}
// 输出该学生的信息
printf("查找结果如下:\n");
printf("学号:%s\n", students[index].id);
printf("姓名:%s\n", students[index].name);
printf("电话:%s\n", students[index].phone);
printf("班级:%s\n", students[index].class);
printf("寝室地址:%s\n", students[index].address);
printf("\n");
}
// 按照班级查找学生记录
void search_by_class() {
char class[30];
printf("请输入要查找的学生所在的班级:");
scanf("%s", class);
int index = find_student_by_class(class);
if (index == -1) {
printf("找不到对应的学生!\n\n");
return;
}
// 输出所有符合条件的学生的信息
printf("查找结果如下:\n");
for (int i = index; i < num_students && strcmp(students[i].class, class) == 0; i++) {
printf("学号:%s\n", students[i].id);
printf("姓名:%s\n", students[i].name);
printf("电话:%s\n", students[i].phone);
printf("班级:%s\n", students[i].class);
printf("寝室地址:%s\n", students[i].address);
printf("\n");
}
}
// 主函数:显示菜单并调用相应的功能函数
int main() {
while (1) {
printf("请选择要进行的操作(按数字选择):\n");
printf("1. 创建新的学生记录\n");
printf("2. 修改学生记录\n");
printf("3. 删除学生记录\n");
printf("4. 按照学号查找学生记录\n");
printf("5. 按照班级查找学生记录\n");
printf("0. 退出程序\n");
int choice;
scanf("%d", &choice);
switch (choice) {
case 0:
return 0; // 退出程序
case 1:
create_student();
break;
case 2:
update_student();
break;
case 3:
delete_student();
break;
case 4:
search_by_id();
break;
case 5:
search_by_class();
break;
default:
printf("无效的操作,请重新输入!\n");
break;
}
}
}