为宿舍管理人员编写一个宿舍管理查询软件,程序设计要求: A、采用交互工作方式; B、建立数据文件,数据文件按关键字(姓名、学号、房号)进行排序(任选方法(冒泡、选择、插入等)); 2)查询菜单(用二分查找实现以下操作) A、按姓名查询 B、按学号查询 C、按房号查询 3)打印任一查询结果
时间: 2023-08-13 07:09:14 浏览: 107
好的,我明白了您的要求。这个软件可以用C语言来实现,大致的代码框架如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 学生信息结构体
typedef struct {
char name[20]; // 姓名
char id[20]; // 学号
char room[10]; // 房号
} Student;
// 读取学生信息文件,返回学生数量
int read_students(Student students[]) {
// TODO: 读取学生信息文件,将学生信息存储到数组中,并返回学生数量
}
// 按姓名排序
void sort_by_name(Student students[], int n) {
// TODO: 实现按姓名排序算法(冒泡、选择、插入等)
}
// 按学号排序
void sort_by_id(Student students[], int n) {
// TODO: 实现按学号排序算法(冒泡、选择、插入等)
}
// 按房号排序
void sort_by_room(Student students[], int n) {
// TODO: 实现按房号排序算法(冒泡、选择、插入等)
}
// 二分查找,按姓名查找,返回学生在数组中的下标,未找到返回-1
int search_by_name(Student students[], int n, char name[]) {
// TODO: 实现二分查找算法,按姓名查找学生,返回下标,未找到返回-1
}
// 二分查找,按学号查找,返回学生在数组中的下标,未找到返回-1
int search_by_id(Student students[], int n, char id[]) {
// TODO: 实现二分查找算法,按学号查找学生,返回下标,未找到返回-1
}
// 二分查找,按房号查找,返回学生在数组中的下标,未找到返回-1
int search_by_room(Student students[], int n, char room[]) {
// TODO: 实现二分查找算法,按房号查找学生,返回下标,未找到返回-1
}
// 打印学生信息
void print_student(Student student) {
printf("%-20s%-20s%-10s\n", student.name, student.id, student.room);
}
// 打印学生数组
void print_students(Student students[], int n) {
printf("%-20s%-20s%-10s\n", "姓名", "学号", "房号");
for (int i = 0; i < n; i++) {
print_student(students[i]);
}
}
int main() {
// 读取学生信息文件
Student students[100];
int n = read_students(students);
// 按姓名排序
sort_by_name(students, n);
// 查询菜单
char query[20];
int index;
printf("请输入查询姓名、学号或房号:");
scanf("%s", query);
if ((index = search_by_name(students, n, query)) != -1) {
print_student(students[index]);
} else if ((index = search_by_id(students, n, query)) != -1) {
print_student(students[index]);
} else if ((index = search_by_room(students, n, query)) != -1) {
print_student(students[index]);
} else {
printf("未找到该学生!\n");
}
return 0;
}
```
这个程序只实现了按姓名查询,您可以根据需要添加按学号、房号查询的实现。同时,您还需要实现读取学生信息文件和按姓名、学号、房号排序的具体算法。
阅读全文