用C语言写一个宿舍管理系统,要求有 1.可以根据学生学号找到学生宿舍号 2.能给宿舍添加学生,达到六人之后会显示宿舍已满提供空宿舍编号 能够提供换宿舍服务3. 能查找到某个班级第学生在哪些宿舍 4.字段显示包括学生,姓名,专业,班级,宿舍号等,把源代码发出来,使用大一的知识。
时间: 2024-04-06 16:34:42 浏览: 112
以下是一份简单的宿舍管理系统的 C 语言代码,实现了您的需求:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENT_NUM 100 // 学生最大数量
#define MAX_DORM_NUM 20 // 宿舍最大数量
#define MAX_STUDENT_PER_DORM 6 // 每个宿舍最多学生数量
// 学生结构体
typedef struct {
char id[20]; // 学号
char name[20]; // 姓名
char major[20]; // 专业
char class[20]; // 班级
char dorm[10]; // 宿舍号
} Student;
// 宿舍结构体
typedef struct {
char id[10]; // 宿舍号
int count; // 当前宿舍中学生数量
Student students[MAX_STUDENT_PER_DORM]; // 宿舍中的学生列表
} Dorm;
// 学生数组和宿舍数组
Student students[MAX_STUDENT_NUM];
Dorm dorms[MAX_DORM_NUM];
// 学生数量和宿舍数量
int studentCount = 0;
int dormCount = 0;
// 根据学号查找学生,返回学生在数组中的下标,找不到返回 -1
int findStudent(const char* id) {
for (int i = 0; i < studentCount; i++) {
if (strcmp(students[i].id, id) == 0) {
return i;
}
}
return -1;
}
// 根据宿舍号查找宿舍,返回宿舍在数组中的下标,找不到返回 -1
int findDorm(const char* id) {
for (int i = 0; i < dormCount; i++) {
if (strcmp(dorms[i].id, id) == 0) {
return i;
}
}
return -1;
}
// 添加学生到宿舍中,如果宿舍已满则返回空宿舍号
const char* addStudentToDorm(Student student) {
Dorm* targetDorm = NULL;
for (int i = 0; i < dormCount; i++) {
if (dorms[i].count < MAX_STUDENT_PER_DORM) {
targetDorm = &dorms[i];
break;
}
}
if (targetDorm == NULL) {
return "No empty dorm available.";
}
strcpy(student.dorm, targetDorm->id);
targetDorm->students[targetDorm->count++] = student;
return targetDorm->id;
}
// 换宿舍,将指定学生从原宿舍中删除,添加到目标宿舍中
void changeDorm(Student student, const char* targetDorm) {
int oldDormIndex = findDorm(student.dorm);
int newDormIndex = findDorm(targetDorm);
if (oldDormIndex == -1 || newDormIndex == -1) {
printf("Invalid input.\n");
return;
}
Dorm* oldDorm = &dorms[oldDormIndex];
Dorm* newDorm = &dorms[newDormIndex];
for (int i = 0; i < oldDorm->count; i++) {
if (strcmp(oldDorm->students[i].id, student.id) == 0) {
oldDorm->count--;
newDorm->students[newDorm->count++] = oldDorm->students[i];
oldDorm->students[i] = oldDorm->students[oldDorm->count];
break;
}
}
}
// 查找指定班级的学生所在的宿舍
void findDormsByClass(const char* className) {
printf("Dorms for class %s:\n", className);
for (int i = 0; i < dormCount; i++) {
for (int j = 0; j < dorms[i].count; j++) {
if (strcmp(dorms[i].students[j].class, className) == 0) {
printf("%s - %s\n", dorms[i].id, dorms[i].students[j].name);
}
}
}
}
// 显示学生信息
void printStudent(Student student) {
printf("%s\t%s\t%s\t%s\t%s\n", student.id, student.name, student.major, student.class, student.dorm);
}
// 显示宿舍信息
void printDorm(Dorm dorm) {
printf("Dorm %s:\n", dorm.id);
printf("ID\tName\tMajor\tClass\tDorm\n");
for (int i = 0; i < dorm.count; i++) {
printStudent(dorm.students[i]);
}
}
// 显示所有学生信息
void listStudents() {
printf("All students:\n");
printf("ID\tName\tMajor\tClass\tDorm\n");
for (int i = 0; i < studentCount; i++) {
printStudent(students[i]);
}
}
// 显示所有宿舍信息
void listDorms() {
printf("All dorms:\n");
for (int i = 0; i < dormCount; i++) {
printDorm(dorms[i]);
printf("\n");
}
}
// 主函数,提供菜单选项,接收用户输入,调用相应的函数
int main() {
int choice = 0;
do {
printf("Welcome to Dormitory Management System.\n");
printf("1. Add student to dorm.\n");
printf("2. Change dorm for student.\n");
printf("3. Find dorms for class.\n");
printf("4. List all students.\n");
printf("5. List all dorms.\n");
printf("0. Exit.\n");
printf("Please enter your choice: ");
scanf("%d", &choice);
switch (choice) {
case 1: {
Student student;
printf("Please enter student ID: ");
scanf("%s", student.id);
printf("Please enter student name: ");
scanf("%s", student.name);
printf("Please enter student major: ");
scanf("%s", student.major);
printf("Please enter student class: ");
scanf("%s", student.class);
const char* dormId = addStudentToDorm(student);
printf("Added student to dorm %s.\n", dormId);
break;
}
case 2: {
Student student;
printf("Please enter student ID: ");
scanf("%s", student.id);
printf("Please enter target dorm ID: ");
char targetDorm[10];
scanf("%s", targetDorm);
changeDorm(student, targetDorm);
break;
}
case 3: {
char className[20];
printf("Please enter class name: ");
scanf("%s", className);
findDormsByClass(className);
break;
}
case 4: {
listStudents();
break;
}
case 5: {
listDorms();
break;
}
case 0: {
printf("Goodbye.\n");
break;
}
default: {
printf("Invalid input.\n");
break;
}
}
} while (choice != 0);
return 0;
}
```
在上述代码中,我们定义了学生结构体和宿舍结构体,以及相应的数组和计数器。然后,我们实现了一些函数,如 `findStudent`、`findDorm`、`addStudentToDorm`、`changeDorm`、`findDormsByClass`、`printStudent`、`printDorm`、`listStudents` 和 `listDorms` 等函数。最后,在主函数中,我们提供了菜单选项,接收用户输入,调用相应的函数来实现宿舍管理系统的各项功能。
请注意,以上代码只是一个简单的示例,还有很多细节问题需要注意,例如数据输入和输出的方式、错误处理、数据存储方式等等。因此,您需要根据具体情况进行适当的修改和完善。
阅读全文