利用C语言为宿舍管理人员编写一个宿舍管理查询软件。 【基本要求】 (1)采用交互工作方式;(2)按关键字(姓名、学号、房号)进行排序(冒泡、选择、插入排序等任选一种)。(3)建立查询菜单: (用二分查找实现以下操作) 按姓名查询 \按学号查询 \按房号查询 打印任一查询结果(可以连续操作)
时间: 2023-12-23 14:03:02 浏览: 56
好的,这是一个比较完整的项目,需要分步骤来进行实现。
首先,我们需要设计数据结构来存储宿舍管理信息,比如每个学生的姓名、学号、房号等信息。可以采用结构体来存储这些信息,如下所示:
```c
typedef struct {
char name[20];
char id[10];
int room_number;
} Student;
```
接下来,我们需要实现排序算法,可以选择冒泡排序、选择排序、插入排序等。这里以冒泡排序为例,代码如下:
```c
void bubble_sort(Student students[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (strcmp(students[j].name, students[j + 1].name) > 0) {
Student tmp = students[j];
students[j] = students[j + 1];
students[j + 1] = tmp;
}
}
}
}
```
然后,我们需要实现二分查找算法,用于在排序后的数组中查找特定的学生信息。代码如下:
```c
int binary_search(Student students[], int n, char* key, int search_by) {
int left = 0, right = n - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (search_by == 1) {
if (strcmp(students[mid].name, key) == 0) {
return mid;
} else if (strcmp(students[mid].name, key) < 0) {
left = mid + 1;
} else {
right = mid - 1;
}
} else if (search_by == 2) {
if (strcmp(students[mid].id, key) == 0) {
return mid;
} else if (strcmp(students[mid].id, key) < 0) {
left = mid + 1;
} else {
right = mid - 1;
}
} else if (search_by == 3) {
if (students[mid].room_number == atoi(key)) {
return mid;
} else if (students[mid].room_number < atoi(key)) {
left = mid + 1;
} else {
right = mid - 1;
}
}
}
return -1;
}
```
最后,我们需要实现查询菜单,让用户可以按照姓名、学号或房号进行查询。代码如下:
```c
void query_menu(Student students[], int n) {
while (1) {
printf("\n----------查询菜单----------\n");
printf("1.按姓名查询\n");
printf("2.按学号查询\n");
printf("3.按房号查询\n");
printf("4.退出查询\n");
printf("请输入选项:");
int option;
scanf("%d", &option);
if (option == 4) {
break;
}
printf("请输入查询关键字:");
char key[20];
scanf("%s", key);
int index = binary_search(students, n, key, option);
if (index == -1) {
printf("未找到相关信息!\n");
} else {
printf("姓名:%s,学号:%s,房号:%d\n", students[index].name, students[index].id, students[index].room_number);
}
}
}
```
将上述代码整合起来,即可得到一个完整的宿舍管理查询软件。
阅读全文