c语言编写一个图书管占座系统
时间: 2024-02-17 19:00:43 浏览: 26
好的,为了实现一个图书管占座系统,需要有以下几个功能:
1. 登录:管理员和用户需要有不同的身份验证方式,可以使用用户名和密码进行验证。
2. 预定座位:用户可以选择指定日期和时间段内的座位进行预定。
3. 查看座位状态:管理员可以查看所有座位的状态,包括已经预定、已占用、空闲等状态。
4. 取消预定:用户可以取消已经预定的座位。
5. 占用座位:管理员可以手动将座位的状态设置为占用状态。
下面是一个简单的示例代码:
```
#include <stdio.h>
#include <string.h>
#define MAX_SEATS 20
#define MAX_NAME_LEN 20
#define MAX_PASSWORD_LEN 20
// 座位状态
enum SeatStatus {
Empty = 0,
Reserved,
Occupied
};
// 座位结构体
typedef struct {
int id; // 座位号
int status; // 座位状态
} Seat;
// 用户结构体
typedef struct {
char name[MAX_NAME_LEN]; // 用户名
char password[MAX_PASSWORD_LEN]; // 密码
} User;
// 初始化座位状态
void initSeats(Seat seats[]) {
for (int i = 0; i < MAX_SEATS; i++) {
seats[i].id = i + 1;
seats[i].status = Empty;
}
}
// 显示所有座位状态
void showSeats(Seat seats[]) {
printf("座位状态如下:\n");
for (int i = 0; i < MAX_SEATS; i++) {
printf("座位%d: ", seats[i].id);
if (seats[i].status == Empty) {
printf("空闲\n");
} else if (seats[i].status == Reserved) {
printf("已预订\n");
} else if (seats[i].status == Occupied) {
printf("已占用\n");
}
}
}
// 用户登录
int userLogin(User users[], int userCount) {
char name[MAX_NAME_LEN];
char password[MAX_PASSWORD_LEN];
printf("请输入用户名:");
scanf("%s", name);
printf("请输入密码:");
scanf("%s", password);
for (int i = 0; i < userCount; i++) {
if (strcmp(users[i].name, name) == 0 && strcmp(users[i].password, password) == 0) {
return i; // 返回用户索引
}
}
return -1; // 登录失败
}
// 预定座位
void reserveSeat(Seat seats[]) {
int id, start, end;
printf("请输入预定的座位号:");
scanf("%d", &id);
printf("请输入预定的开始时间:");
scanf("%d", &start);
printf("请输入预定的结束时间:");
scanf("%d", &end);
if (seats[id-1].status == Empty) {
seats[id-1].status = Reserved;
printf("预定成功!\n");
} else {
printf("该座位已被占用或已被预定,请选择其他座位!\n");
}
}
// 取消预定
void cancelReservation(Seat seats[]) {
int id;
printf("请输入要取消预定的座位号:");
scanf("%d", &id);
if (seats[id-1].status == Reserved) {
seats[id-1].status = Empty;
printf("取消预定成功!\n");
} else {
printf("该座位未被预定或已被占用,请重新选择!\n");
}
}
// 占用座位
void occupySeat(Seat seats[]) {
int id;
printf("请输入要占用的座位号:");
scanf("%d", &id);
if (seats[id-1].status == Empty) {
seats[id-1].status = Occupied;
printf("占用成功!\n");
} else {
printf("该座位已被占用或已被预定,请选择其他座位!\n");
}
}
int main() {
Seat seats[MAX_SEATS];
User users[2] = {{"admin", "admin123"}, {"user", "user123"}};
int userIndex = -1;
initSeats(seats);
while (userIndex == -1) {
userIndex = userLogin(users, 2);
if (userIndex == -1) {
printf("用户名或密码错误,请重新输入!\n");
}
}
if (strcmp(users[userIndex].name, "admin") == 0) {
// 管理员操作
int choice;
do {
printf("请选择操作:\n");
printf("1. 查看座位状态\n");
printf("2. 占用座位\n");
printf("3. 退出\n");
scanf("%d", &choice);
switch (choice) {
case 1:
showSeats(seats);
break;
case 2:
occupySeat(seats);
break;
case 3:
break;
default:
printf("无效的选择,请重新选择!\n");
}
} while (choice != 3);
} else {
// 用户操作
int choice;
do {
printf("请选择操作:\n");
printf("1. 查看座位状态\n");
printf("2. 预定座位\n");
printf("3. 取消预定\n");
printf("4. 退出\n");
scanf("%d", &choice);
switch (choice) {
case 1:
showSeats(seats);
break;
case 2:
reserveSeat(seats);
break;
case 3:
cancelReservation(seats);
break;
case 4:
break;
default:
printf("无效的选择,请重新选择!\n");
}
} while (choice != 4);
}
return 0;
}
```
这是一个简单的示例,实际上还可以添加更多的功能和优化。