利用c语言 为宿舍管理人员编写一个宿舍管理查询软件。 (1)采用交互工作方式;(2)按关键字(姓名、学号、房号)进行排序(冒泡、选择、插入排序等任选一种)。(3)建立查询菜单: (用二分查找实现以下操作) 按姓名查询 \按学号查询 \按房号查询 打印任一查询结果(可以连续操作)
时间: 2023-12-23 11:02:34 浏览: 59
宿舍管理查询软件(C语言)(结构体数组)
5星 · 资源好评率100%
好的,我可以为您提供一个基本的程序框架,您可以根据自己的需求对其进行修改和完善。
程序框架如下:
```
#include <stdio.h>
#include <string.h>
// 定义宿舍结构体
struct Dormitory {
char room_number[10]; // 宿舍房号
char name[20]; // 学生姓名
char student_id[20]; // 学生学号
// 其他宿舍信息
};
// 定义查询结果结构体
struct QueryResult {
struct Dormitory dorm; // 宿舍信息
int pos; // 在数组中的位置
};
// 定义宿舍数组和长度
struct Dormitory dormitories[100];
int dorm_count = 0;
// 插入宿舍信息
void insert_dorm() {
// 读取宿舍信息
struct Dormitory dorm;
printf("请输入宿舍房号:");
scanf("%s", dorm.room_number);
printf("请输入学生姓名:");
scanf("%s", dorm.name);
printf("请输入学生学号:");
scanf("%s", dorm.student_id);
// 其他宿舍信息的读入
// 将宿舍信息插入数组
dormitories[dorm_count++] = dorm;
printf("宿舍信息插入成功!\n");
}
// 按关键字排序
void sort_dorm(char key) {
int i, j;
struct Dormitory temp;
for (i = 0; i < dorm_count - 1; i++) {
for (j = 0; j < dorm_count - i - 1; j++) {
// 判断关键字,进行排序
if (key == 'n' && strcmp(dormitories[j].name, dormitories[j + 1].name) > 0) {
temp = dormitories[j];
dormitories[j] = dormitories[j + 1];
dormitories[j + 1] = temp;
} else if (key == 'i' && strcmp(dormitories[j].student_id, dormitories[j + 1].student_id) > 0) {
temp = dormitories[j];
dormitories[j] = dormitories[j + 1];
dormitories[j + 1] = temp;
} else if (key == 'r' && strcmp(dormitories[j].room_number, dormitories[j + 1].room_number) > 0) {
temp = dormitories[j];
dormitories[j] = dormitories[j + 1];
dormitories[j + 1] = temp;
}
}
}
printf("排序成功!\n");
}
// 二分查找宿舍信息
struct QueryResult binary_search(char key, char* value) {
int left = 0, right = dorm_count - 1, mid;
struct QueryResult result;
result.pos = -1;
while (left <= right) {
mid = (left + right) / 2;
// 判断关键字,进行查找
if (key == 'n' && strcmp(value, dormitories[mid].name) == 0) {
result.dorm = dormitories[mid];
result.pos = mid;
break;
} else if (key == 'i' && strcmp(value, dormitories[mid].student_id) == 0) {
result.dorm = dormitories[mid];
result.pos = mid;
break;
} else if (key == 'r' && strcmp(value, dormitories[mid].room_number) == 0) {
result.dorm = dormitories[mid];
result.pos = mid;
break;
} else if (key == 'n' && strcmp(value, dormitories[mid].name) < 0) {
right = mid - 1;
} else if (key == 'n' && strcmp(value, dormitories[mid].name) > 0) {
left = mid + 1;
} else if (key == 'i' && strcmp(value, dormitories[mid].student_id) < 0) {
right = mid - 1;
} else if (key == 'i' && strcmp(value, dormitories[mid].student_id) > 0) {
left = mid + 1;
} else if (key == 'r' && strcmp(value, dormitories[mid].room_number) < 0) {
right = mid - 1;
} else if (key == 'r' && strcmp(value, dormitories[mid].room_number) > 0) {
left = mid + 1;
}
}
return result;
}
// 打印宿舍信息
void print_dorm(struct Dormitory dorm) {
printf("宿舍房号:%s\n", dorm.room_number);
printf("学生姓名:%s\n", dorm.name);
printf("学生学号:%s\n", dorm.student_id);
// 其他宿舍信息的打印
}
// 查询菜单
void query_menu() {
char key, value[20];
struct QueryResult result;
while (1) {
printf("请选择查询关键字:\n");
printf("n. 姓名\n");
printf("i. 学号\n");
printf("r. 房号\n");
printf("q. 退出\n");
scanf(" %c", &key);
if (key == 'q') {
break;
}
printf("请输入查询值:");
scanf("%s", value);
result = binary_search(key, value);
if (result.pos == -1) {
printf("未找到相关宿舍信息!\n");
} else {
print_dorm(result.dorm);
}
}
}
// 主函数
int main() {
int choice;
while (1) {
printf("请选择操作:\n");
printf("1. 插入宿舍信息\n");
printf("2. 按姓名排序\n");
printf("3. 按学号排序\n");
printf("4. 按房号排序\n");
printf("5. 查询宿舍信息\n");
printf("6. 退出\n");
scanf("%d", &choice);
switch (choice) {
case 1:
insert_dorm();
break;
case 2:
sort_dorm('n');
break;
case 3:
sort_dorm('i');
break;
case 4:
sort_dorm('r');
break;
case 5:
query_menu();
break;
case 6:
return 0;
default:
printf("无效操作!\n");
}
}
}
```
这个程序框架包括了插入宿舍信息、按关键字排序、二分查找宿舍信息、打印宿舍信息和查询菜单等功能。您可以根据自己的需求对其进行修改和完善。
阅读全文