假定某校有N各学生,系统可以根据学生每次上机时记录学号和上机时间,下机时自动计算费用。要求: (1)系统以菜单方式工作 (2)系统可以设置上机每小时的价格,默认为每小时1元, (3)系统可以输入功能N名学生的学号、专业,年级、姓名。 (4)计算功能:计算每个下机学生的上机费用,每小时1元。 (上机费用=上机时间* 价格 ,不足半小时按1小时的价格减半计算,超过半小时但不足一小时的按1小时计算) (5)查询功能:按条件(班级、学号、姓名)显示学生的上机时间。 (6)机器使用情况的显示(显示方式不限但要一目了然)用c语言简单表达
时间: 2023-12-23 10:02:07 浏览: 52
以下是一个简单的C语言程序实现了上述要求:
```c
#include <stdio.h>
#include <string.h>
#define HOUR_PRICE 1.0 // 默认每小时1元
// 学生结构体
typedef struct {
char id[20]; // 学号
char name[20]; // 姓名
char major[20]; // 专业
int grade; // 年级
int time; // 上机时间(分钟)
} Student;
// 计算上机费用
double calcFee(int time) {
int hours = time / 60;
int minutes = time % 60;
double fee = hours * HOUR_PRICE;
if (minutes >= 30) {
fee += HOUR_PRICE / 2;
}
return fee;
}
// 显示学生信息
void showStudent(const Student *s) {
printf("%s\t%s\t%s\t%d\n", s->id, s->name, s->major, s->grade);
}
// 显示机器使用情况
void showUsage(const Student students[], int count) {
printf("学号\t姓名\t专业\t年级\t上机时间\t费用\n");
for (int i = 0; i < count; i++) {
showStudent(&students[i]);
printf("\t\t\t\t%d\t\t%.1f元\n", students[i].time, calcFee(students[i].time));
}
}
// 主函数
int main() {
int choice = 0;
double hourPrice = HOUR_PRICE;
int studentCount = 0;
Student students[100];
while (1) {
printf("\n");
printf("1. 设置每小时价格\n");
printf("2. 添加学生信息\n");
printf("3. 计算上机费用\n");
printf("4. 查询学生信息\n");
printf("5. 显示机器使用情况\n");
printf("6. 退出\n");
printf("请选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("请输入每小时价格:");
scanf("%lf", &hourPrice);
printf("设置成功!\n");
break;
case 2:
if (studentCount >= 100) {
printf("学生信息已满,无法添加!\n");
break;
}
printf("请输入学生信息:(学号 姓名 专业 年级)");
scanf("%s %s %s %d", students[studentCount].id, students[studentCount].name, students[studentCount].major, &students[studentCount].grade);
students[studentCount].time = 0;
studentCount++;
printf("添加成功!\n");
break;
case 3:
printf("请输入学生学号:");
char id[20];
scanf("%s", id);
for (int i = 0; i < studentCount; i++) {
if (strcmp(students[i].id, id) == 0) {
int time;
printf("请输入上机时间(分钟):");
scanf("%d", &time);
students[i].time += time;
printf("上机费用为:%.1f元\n", calcFee(time));
break;
}
}
break;
case 4:
printf("请输入查询条件(1.班级 2.学号 3.姓名):");
int queryType;
scanf("%d", &queryType);
printf("请输入查询关键字:");
char keyword[20];
scanf("%s", keyword);
printf("学号\t姓名\t专业\t年级\t上机时间\n");
for (int i = 0; i < studentCount; i++) {
if ((queryType == 1 && strstr(students[i].major, keyword)) ||
(queryType == 2 && strcmp(students[i].id, keyword) == 0) ||
(queryType == 3 && strstr(students[i].name, keyword))) {
showStudent(&students[i]);
printf("\t%d\n", students[i].time);
}
}
break;
case 5:
showUsage(students, studentCount);
break;
case 6:
return 0;
default:
printf("输入有误,请重新输入!\n");
break;
}
}
return 0;
}
```
注意,这只是一个简单的实现,还有很多可以改进的地方。例如,可以将学生信息存储在文件中,以便下次启动程序时自动加载;可以添加用户身份验证等功能。
阅读全文