自习位预约系统c语言
时间: 2023-10-26 16:11:10 浏览: 35
好的,自习位预约系统可以分为以下几个模块:
1. 登录模块:学生和管理员登录。
2. 自习位查询模块:学生查询可用自习位。
3. 预约模块:学生预约自习位,管理员审核预约请求。
4. 取消预约模块:学生取消自己的预约。
5. 管理员管理模块:管理员可以管理自习位和预约请求。
下面是一个简单的自习位预约系统的代码实现,供参考:
```c
#include <stdio.h>
#include <string.h>
#define MAX_STUDENT_NUM 100
#define MAX_SEAT_NUM 50
#define MAX_NAME_LENGTH 20
#define MAX_PASSWORD_LENGTH 20
// 学生结构体
typedef struct {
char name[MAX_NAME_LENGTH];
char password[MAX_PASSWORD_LENGTH];
int seat_num;
} Student;
// 自习位结构体
typedef struct {
int seat_num;
int is_available;
} Seat;
// 学生数组和自习位数组
Student students[MAX_STUDENT_NUM];
Seat seats[MAX_SEAT_NUM];
// 学生数量和自习位数量
int student_num = 0;
int seat_num = 0;
// 添加学生
void add_student() {
if (student_num >= MAX_STUDENT_NUM) {
printf("学生数量已满,无法添加新学生。\n");
return;
}
printf("请输入学生姓名:");
scanf("%s", students[student_num].name);
printf("请输入学生密码:");
scanf("%s", students[student_num].password);
students[student_num].seat_num = -1; // 初始自习位编号为-1,表示未预约自习位
student_num++;
printf("添加学生成功!\n");
}
// 学生登录
int student_login() {
char name[MAX_NAME_LENGTH];
char password[MAX_PASSWORD_LENGTH];
printf("请输入学生姓名:");
scanf("%s", name);
printf("请输入学生密码:");
scanf("%s", password);
for (int i = 0; i < student_num; i++) {
if (strcmp(name, students[i].name) == 0 && strcmp(password, students[i].password) == 0) {
printf("登录成功!\n");
return i; // 返回学生在数组中的下标
}
}
printf("学生姓名或密码错误,登录失败。\n");
return -1; // 返回-1表示登录失败
}
// 添加自习位
void add_seat() {
if (seat_num >= MAX_SEAT_NUM) {
printf("自习位数量已满,无法添加新自习位。\n");
return;
}
seats[seat_num].seat_num = seat_num + 1; // 自习位编号从1开始
seats[seat_num].is_available = 1; // 初始状态为可用
seat_num++;
printf("添加自习位成功!\n");
}
// 学生查询可用自习位
void query_available_seats() {
printf("可用自习位编号:");
for (int i = 0; i < seat_num; i++) {
if (seats[i].is_available == 1) {
printf("%d ", seats[i].seat_num);
}
}
printf("\n");
}
// 学生预约自习位
void reserve_seat(int student_index) {
int seat_num_to_reserve;
printf("请输入要预约的自习位编号:");
scanf("%d", &seat_num_to_reserve);
if (seat_num_to_reserve < 1 || seat_num_to_reserve > seat_num) {
printf("输入的自习位编号无效,预约失败。\n");
return;
}
if (seats[seat_num_to_reserve - 1].is_available == 0) {
printf("该自习位已被预约,预约失败。\n");
return;
}
students[student_index].seat_num = seat_num_to_reserve;
seats[seat_num_to_reserve - 1].is_available = 0;
printf("预约成功!\n");
}
// 学生取消预约
void cancel_reservation(int student_index) {
if (students[student_index].seat_num == -1) {
printf("您还未预约自习位。\n");
return;
}
int seat_num_to_cancel = students[student_index].seat_num;
students[student_index].seat_num = -1;
seats[seat_num_to_cancel - 1].is_available = 1;
printf("取消预约成功!\n");
}
// 管理员登录
int admin_login() {
char name[MAX_NAME_LENGTH];
char password[MAX_PASSWORD_LENGTH];
printf("请输入管理员姓名:");
scanf("%s", name);
printf("请输入管理员密码:");
scanf("%s", password);
if (strcmp(name, "admin") == 0 && strcmp(password, "admin") == 0) {
printf("登录成功!\n");
return 1;
} else {
printf("管理员姓名或密码错误,登录失败。\n");
return 0;
}
}
// 管理自习位
void manage_seats() {
if (admin_login() == 0) {
return;
}
int choice;
do {
printf("请选择要执行的操作:\n");
printf("1. 查看自习位状态\n");
printf("2. 修改自习位状态\n");
printf("3. 返回主菜单\n");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("自习位状态如下:\n");
for (int i = 0; i < seat_num; i++) {
printf("自习位%d:", seats[i].seat_num);
if (seats[i].is_available == 1) {
printf("可用\n");
} else {
printf("已被预约\n");
}
}
break;
case 2:
printf("请输入要修改状态的自习位编号:");
int seat_num_to_modify;
scanf("%d", &seat_num_to_modify);
if (seat_num_to_modify < 1 || seat_num_to_modify > seat_num) {
printf("输入的自习位编号无效,修改失败。\n");
break;
}
if (seats[seat_num_to_modify - 1].is_available == 1) {
seats[seat_num_to_modify - 1].is_available = 0;
printf("自习位状态已修改为已被预约。\n");
} else {
seats[seat_num_to_modify - 1].is_available = 1;
printf("自习位状态已修改为可用。\n");
}
break;
case 3:
return;
default:
printf("无效的选择,请重新输入。\n");
break;
}
} while (choice != 3);
}
// 主菜单
void show_menu(int student_index) {
if (student_index == -1) {
printf("请选择要执行的操作:\n");
printf("1. 学生登录\n");
printf("2. 管理员登录\n");
printf("3. 退出程序\n");
int choice;
scanf("%d", &choice);
switch (choice) {
case 1:
student_index = student_login();
break;
case 2:
manage_seats();
break;
case 3:
printf("谢谢使用,再见!\n");
return;
default:
printf("无效的选择,请重新输入。\n");
break;
}
} else {
printf("请选择要执行的操作:\n");
printf("1. 查询可用自习位\n");
printf("2. 预约自习位\n");
printf("3. 取消预约\n");
printf("4. 退出登录\n");
int choice;
scanf("%d", &choice);
switch (choice) {
case 1:
query_available_seats();
break;
case 2:
reserve_seat(student_index);
break;
case 3:
cancel_reservation(student_index);
break;
case 4:
student_index = -1;
break;
default:
printf("无效的选择,请重新输入。\n");
break;
}
}
show_menu(student_index);
}
int main() {
add_student();
add_student();
add_seat();
add_seat();
add_seat();
show_menu(-1);
return 0;
}
```
注意:以上代码仅为示例代码,还有很多地方需要完善和优化。