《学生寝室安排系统的设计与实现》题目要求 各寝室信息包括:楼号,寝室号,类别(男/女)、所剩床位数等;已安排的学生信息包括:学号、性别、所分配寝室号等。 设计一学生寝室安排系统 ,系统以菜单方式工作,使之能提供以下功能: 1.菜单设计、录入寝室信息到数组(或链表)并保存到文件 ―――由肖祥宏完成 2.从文件中读取数据到数组(或链表)并输出寝室数量、浏览寝室信息 ―――由华国良完成 3.分配寝室:保存输入的学生学号和所分配到的寝室号到文件后,相应寝室的所剩床位数被改变 ―――由邱秀彪完成 4.修改、删除寝室信息功能 ―――由曹桂平完成 ,用c语言编写出来
时间: 2024-02-06 17:10:24 浏览: 162
以下是一个可能的实现,使用了数组存储寝室信息,并将数据存储到文件中。每个功能都有对应的菜单选项。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_ROOMS 100 // 最大寝室数量
#define MAX_STUDENTS 1000 // 最大学生数量
// 寝室信息结构体
struct room {
int building; // 楼号
int number; // 寝室号
char type; // 类别,'M'代表男寝室,'F'代表女寝室
int capacity; // 床位数
int occupied; // 已占用床位数
};
// 学生信息结构体
struct student {
char id[20]; // 学号
char gender; // 性别,'M'代表男,'F'代表女
int room; // 分配的寝室号
};
// 全局变量
struct room rooms[MAX_ROOMS]; // 所有寝室信息
int num_rooms = 0; // 寝室数量
struct student students[MAX_STUDENTS]; // 所有学生信息
int num_students = 0; // 学生数量
// 将寝室信息保存到文件中
void save_rooms() {
FILE *file = fopen("rooms.txt", "w");
if (file == NULL) {
printf("无法打开文件 rooms.txt\n");
return;
}
fprintf(file, "%d\n", num_rooms);
for (int i = 0; i < num_rooms; i++) {
fprintf(file, "%d %d %c %d %d\n", rooms[i].building, rooms[i].number,
rooms[i].type, rooms[i].capacity, rooms[i].occupied);
}
fclose(file);
printf("寝室信息已保存到文件 rooms.txt 中\n");
}
// 从文件中读取寝室信息
void load_rooms() {
FILE *file = fopen("rooms.txt", "r");
if (file == NULL) {
printf("无法打开文件 rooms.txt\n");
return;
}
fscanf(file, "%d", &num_rooms);
for (int i = 0; i < num_rooms; i++) {
fscanf(file, "%d %d %c %d %d", &rooms[i].building, &rooms[i].number,
&rooms[i].type, &rooms[i].capacity, &rooms[i].occupied);
}
fclose(file);
printf("从文件 rooms.txt 中读取了 %d 个寝室信息\n", num_rooms);
}
// 添加一个新的寝室
void add_room() {
if (num_rooms >= MAX_ROOMS) {
printf("寝室数量已达到上限,无法添加新的寝室\n");
return;
}
printf("请输入新寝室的信息(楼号 寝室号 类别(M/F)床位数):");
scanf("%d %d %c %d", &rooms[num_rooms].building, &rooms[num_rooms].number,
&rooms[num_rooms].type, &rooms[num_rooms].capacity);
rooms[num_rooms].occupied = 0;
num_rooms++;
printf("新寝室已添加\n");
}
// 显示所有寝室信息
void list_rooms() {
printf("当前共有 %d 个寝室:\n", num_rooms);
printf("楼号 寝室号 类别 床位数 已占用床位数\n");
for (int i = 0; i < num_rooms; i++) {
printf("%-4d %-4d %-4c %-4d %-4d\n", rooms[i].building, rooms[i].number,
rooms[i].type, rooms[i].capacity, rooms[i].occupied);
}
}
// 分配寝室给一个新学生
void assign_room() {
if (num_students >= MAX_STUDENTS) {
printf("学生数量已达到上限,无法再分配寝室\n");
return;
}
printf("请输入新学生的信息(学号 性别(M/F)):");
scanf("%s %c", students[num_students].id, &students[num_students].gender);
for (int i = 0; i < num_rooms; i++) {
if (rooms[i].type == students[num_students].gender &&
rooms[i].occupied < rooms[i].capacity) {
students[num_students].room = rooms[i].number;
rooms[i].occupied++;
printf("已将学生分配到寝室 %d\n", rooms[i].number);
num_students++;
save_rooms(); // 每次分配完寝室后都保存一次寝室信息
return;
}
}
printf("没有可用的寝室,请联系管理员添加新的寝室\n");
}
// 修改寝室信息
void modify_room() {
int room_number;
printf("请输入要修改的寝室号:");
scanf("%d", &room_number);
for (int i = 0; i < num_rooms; i++) {
if (rooms[i].number == room_number) {
printf("请输入新的寝室信息(楼号 寝室号 类别(M/F)床位数):");
scanf("%d %d %c %d", &rooms[i].building, &rooms[i].number,
&rooms[i].type, &rooms[i].capacity);
printf("寝室信息已修改\n");
save_rooms();
return;
}
}
printf("找不到该寝室,请检查输入是否正确\n");
}
// 删除寝室信息
void delete_room() {
int room_number;
printf("请输入要删除的寝室号:");
scanf("%d", &room_number);
for (int i = 0; i < num_rooms; i++) {
if (rooms[i].number == room_number) {
// 将该寝室后面的所有寝室向前移动一个位置
for (int j = i + 1; j < num_rooms; j++) {
rooms[j-1] = rooms[j];
}
num_rooms--;
printf("寝室信息已删除\n");
save_rooms();
return;
}
}
printf("找不到该寝室,请检查输入是否正确\n");
}
// 主菜单
void main_menu() {
while (1) {
printf("\n请选择要进行的操作:\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 1:
add_room();
break;
case 2:
list_rooms();
break;
case 3:
assign_room();
break;
case 4:
modify_room();
break;
case 5:
delete_room();
break;
case 0:
printf("程序已退出\n");
return;
default:
printf("无效的选择,请重新输入\n");
}
}
}
int main() {
load_rooms(); // 程序启动时从文件中读取寝室信息
main_menu(); // 进入主菜单
return 0;
}
```
阅读全文