实验题目:模拟饭卡充值一、实验内容1.录入几位学生信息(姓名,学号,饭卡余额),并保存到student.txt文件中;2.能够依据学号对饭卡充值,每次充值的金额为10的倍数;3.能够按照学号查询饭卡余额,如果谁的余额少于10元,就给出充值提示。要求:软件至少应具有“输入初始数据”、“饭卡充值”、“查询余额”、“退出”4项菜单。要求使用c语言编写,程序尽可能简单,并在每一步程序后面注释其作用
时间: 2023-12-26 13:03:46 浏览: 150
好的,接下来我将为你提供一个可供参考的C语言程序,实现上述要求:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 100 // 最多学生数
#define FILENAME "student.txt" // 存储学生信息的文件名
// 定义学生结构体
typedef struct {
char name[20];
char id[10];
float balance; // 饭卡余额
} Student;
// 学生信息数组
Student students[MAX_STUDENTS];
int num_students = 0; // 学生数
// 读取学生信息文件
void read_students() {
FILE* fp;
fp = fopen(FILENAME, "r"); // 打开文件,只读模式
if (fp != NULL) {
while (!feof(fp) && num_students < MAX_STUDENTS) {
fscanf(fp, "%s %s %f", students[num_students].name, students[num_students].id, &students[num_students].balance);
num_students++;
}
fclose(fp); // 关闭文件
}
}
// 保存学生信息到文件
void save_students() {
FILE* fp;
fp = fopen(FILENAME, "w"); // 打开文件,写入模式
if (fp != NULL) {
for (int i = 0; i < num_students; i++) {
fprintf(fp, "%s %s %.2f\n", students[i].name, students[i].id, students[i].balance);
}
fclose(fp); // 关闭文件
}
}
// 根据学号查找学生
int find_student(char id[]) {
for (int i = 0; i < num_students; i++) {
if (strcmp(students[i].id, id) == 0) {
return i;
}
}
return -1; // 没有找到
}
// 输入初始数据
void input_students() {
char name[20], id[10];
float balance;
while (1) {
printf("请输入学生姓名(输入0结束):");
scanf("%s", name);
if (strcmp(name, "0") == 0) {
break;
}
printf("请输入学号:");
scanf("%s", id);
printf("请输入饭卡余额:");
scanf("%f", &balance);
strcpy(students[num_students].name, name);
strcpy(students[num_students].id, id);
students[num_students].balance = balance;
num_students++;
if (num_students >= MAX_STUDENTS) {
printf("学生数已达到最大值%d,无法继续添加!\n", MAX_STUDENTS);
break;
}
}
}
// 饭卡充值
void recharge() {
char id[10];
int index;
float amount;
printf("请输入学号:");
scanf("%s", id);
index = find_student(id);
if (index == -1) {
printf("没有找到该学生!\n");
} else {
printf("请输入充值金额(必须为10的倍数):");
scanf("%f", &amount);
if ((int)amount % 10 != 0) {
printf("充值金额必须为10的倍数!\n");
} else {
students[index].balance += amount;
printf("充值成功!当前余额为%.2f元。\n", students[index].balance);
}
}
}
// 查询余额
void query_balance() {
char id[10];
int index;
printf("请输入学号:");
scanf("%s", id);
index = find_student(id);
if (index == -1) {
printf("没有找到该学生!\n");
} else {
printf("%s的饭卡余额为%.2f元。\n", students[index].name, students[index].balance);
if (students[index].balance < 10) {
printf("余额不足10元,请及时充值!\n");
}
}
}
// 主函数
int main() {
int choice;
read_students(); // 读取学生信息文件
while (1) {
printf("1. 输入初始数据\n");
printf("2. 饭卡充值\n");
printf("3. 查询余额\n");
printf("4. 退出\n");
printf("请选择功能:");
scanf("%d", &choice);
switch (choice) {
case 1:
input_students();
save_students();
break;
case 2:
recharge();
save_students();
break;
case 3:
query_balance();
break;
case 4:
return 0;
default:
printf("输入有误,请重新输入!\n");
}
}
return 0;
}
```
上述程序中,我们使用了结构体来表示学生信息,使用文件来存储和读取学生信息。程序中包含了输入初始数据、饭卡充值、查询余额和退出四个菜单选项。每个菜单选项用一个函数实现,程序尽可能简单易懂,并在每一步后面都注释了其作用。
阅读全文