c语言实现 输入功能:输入 30 名学生的学号、班级、姓名、上机起始时间。(2)计算功能:计算每个下机学生的上机费用,每小时1元。 (上机费用=上机时间*1.0/h,不足一小时按一小时计算) (3)查询功能:按条件(班级、学号、姓名)显示学生的上机时间。(4)机器使用情况的显示(显示方式不限但要一目了然)
时间: 2024-02-11 11:09:25 浏览: 106
C语言实现图形界面--随机数(学号)的产生并显示姓名
5星 · 资源好评率100%
好的,以下是一个简单的C语言实现,实现了输入学生信息、计算每个下机学生的上机费用、按条件查询学生的上机时间和机器使用情况显示的功能。这里只是一个简单的示例,可以根据实际情况进行修改和完善。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 30
#define MAX_NAME_LEN 20
#define MAX_CLASS_LEN 10
#define MAX_ID_LEN 10
// 学生结构体
typedef struct {
char id[MAX_ID_LEN]; // 学号
char name[MAX_NAME_LEN]; // 姓名
char class[MAX_CLASS_LEN]; // 班级
int start_time; // 上机起始时间
int end_time; // 下机时间
float cost; // 上机费用
} Student;
// 机器状态结构体
typedef struct {
int id; // 机器编号
int status; // 使用状态(0:空闲,1:使用中)
int start_time; // 使用起始时间
} Machine;
// 学生数组和机器状态数组
Student students[MAX_STUDENTS];
Machine machines[10];
// 学生数量
int num_students = 0;
// 添加学生信息
void add_student() {
if (num_students >= MAX_STUDENTS) {
printf("学生数量已达到上限,无法添加!\n");
return;
}
Student s;
printf("请输入学号:");
scanf("%s", s.id);
printf("请输入姓名:");
scanf("%s", s.name);
printf("请输入班级:");
scanf("%s", s.class);
printf("请输入上机起始时间:");
scanf("%d", &s.start_time);
students[num_students++] = s;
printf("学生信息添加成功!\n");
}
// 计算上机费用
float calc_cost(int start_time, int end_time) {
int time = end_time - start_time;
if (time % 60 == 0) {
return time / 60.0;
} else {
return (time / 60.0) + 1;
}
}
// 计算每个下机学生的上机费用
void calc_all_costs() {
for (int i = 0; i < num_students; i++) {
if (students[i].end_time == 0) {
printf("学生 %s 上机中,无法计算费用!\n", students[i].name);
continue;
}
students[i].cost = calc_cost(students[i].start_time, students[i].end_time);
printf("学生 %s 的上机费用为 %.2f 元!\n", students[i].name, students[i].cost);
}
}
// 按条件查询学生的上机时间
void search_student() {
int option;
printf("请选择查询条件:\n");
printf("1. 学号\n");
printf("2. 姓名\n");
printf("3. 班级\n");
scanf("%d", &option);
char keyword[20];
printf("请输入查询关键词:");
scanf("%s", keyword);
printf("查询结果如下:\n");
printf("%-10s%-10s%-10s%-20s%-20s%-10s\n", "学号", "姓名", "班级", "起始时间", "下机时间", "上机时间");
for (int i = 0; i < num_students; i++) {
if ((option == 1 && strcmp(students[i].id, keyword) == 0) ||
(option == 2 && strcmp(students[i].name, keyword) == 0) ||
(option == 3 && strcmp(students[i].class, keyword) == 0)) {
printf("%-10s%-10s%-10s%-20d%-20d%-10.2f\n", students[i].id, students[i].name, students[i].class,
students[i].start_time, students[i].end_time, students[i].cost);
}
}
}
// 显示机器使用情况
void show_machine_status() {
printf("%-10s%-10s%-20s\n", "机器编号", "使用状态", "使用起始时间");
for (int i = 0; i < 10; i++) {
printf("%-10d%-10s%-20d\n", machines[i].id, machines[i].status == 0 ? "空闲" : "使用中", machines[i].start_time);
}
}
int main() {
// 初始化机器状态
for (int i = 0; i < 10; i++) {
machines[i].id = i + 1;
machines[i].status = 0;
machines[i].start_time = 0;
}
int option;
while (1) {
printf("\n请选择功能:\n");
printf("1. 添加学生信息\n");
printf("2. 计算每个下机学生的上机费用\n");
printf("3. 按条件查询学生的上机时间\n");
printf("4. 显示机器使用情况\n");
printf("5. 退出\n");
scanf("%d", &option);
switch (option) {
case 1:
add_student();
break;
case 2:
calc_all_costs();
break;
case 3:
search_student();
break;
case 4:
show_machine_status();
break;
case 5:
exit(0);
default:
printf("无效的选择,请重新输入!\n");
break;
}
}
return 0;
}
```
阅读全文