利用C语言 为宿舍管理人员编写一个宿舍管理查询软件。 【基本要求】 (1)采用交互工作方式;(2)按关键字(姓名、学号、房号)进行冒泡排序。(3)建立查询菜单: (用二分查找实现以下操作) 按姓名查询 \按学号查询 \按房号查询 打印任一查询结果(可以连续操作)
时间: 2023-12-23 10:02:43 浏览: 19
好的,以下是一个基本的宿舍管理查询软件的代码实现,包括冒泡排序和二分查找:
```c
#include <stdio.h>
#include <string.h>
#define MAX_STUDENT_NUM 100
struct student {
char name[20];
int id;
int room;
};
void bubble_sort(struct student students[], int n, int flag) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
int cmp = 0;
if (flag == 1) {
cmp = strcmp(students[j].name, students[j + 1].name);
} else if (flag == 2) {
cmp = students[j].id - students[j + 1].id;
} else if (flag == 3) {
cmp = students[j].room - students[j + 1].room;
}
if (cmp > 0) {
struct student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
}
int binary_search(struct student students[], int n, int key, int flag) {
int left = 0, right = n - 1;
while (left <= right) {
int mid = (left + right) / 2;
int cmp = 0;
if (flag == 1) {
cmp = strcmp(students[mid].name, key);
} else if (flag == 2) {
cmp = students[mid].id - key;
} else if (flag == 3) {
cmp = students[mid].room - key;
}
if (cmp == 0) {
return mid;
} else if (cmp < 0) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
int main() {
struct student students[MAX_STUDENT_NUM];
int n = 0;
// 读取学生信息
FILE *fp = fopen("students.txt", "r");
if (fp == NULL) {
printf("Failed to open file.\n");
return -1;
}
while (fscanf(fp, "%s %d %d", students[n].name, &students[n].id, &students[n].room) != EOF) {
n++;
}
fclose(fp);
// 排序
bubble_sort(students, n, 1);
// 查询菜单
int key;
while (1) {
printf("\n1. 按姓名查询\n");
printf("2. 按学号查询\n");
printf("3. 按房号查询\n");
printf("4. 退出\n");
printf("请选择操作(1-4):");
int choice;
scanf("%d", &choice);
if (choice == 4) {
break;
}
printf("请输入查询关键字:");
scanf("%d", &key);
int pos = binary_search(students, n, key, choice);
if (pos == -1) {
printf("未找到相关记录。\n");
} else {
printf("姓名:%s,学号:%d,房号:%d\n", students[pos].name, students[pos].id, students[pos].room);
}
}
return 0;
}
```
上述代码中,我们定义了一个 `student` 结构体,包括 `name`、`id` 和 `room` 三个成员。然后我们使用文件操作读取了一个名为 `students.txt` 的文件,将文件中的内容存储到结构体数组中。接着我们使用 `bubble_sort()` 函数对结构体数组进行排序,排序方式可以根据菜单选项选择不同的关键字进行排序。最后我们使用 `binary_search()` 函数实现了一个查询菜单,可以按照姓名、学号、房号进行查询,查询结果可以进行连续操作。