1.录入几位学生信息(姓名,学号,饭卡余额),并保存到student.txt文件中;2.能够依据学号对饭卡充值,每次充值的金额为10的倍数;3.能够按照学号查询饭卡余额,如果谁的余额少于10元,就给出充值提示。要求:软件至少应具有“输入初始数据”、“饭卡充值”、“查询余额”、“退出”4项菜单。要求用c语言编写,程序尽可能简单,并在每一步后面注释其作用
时间: 2023-12-11 07:03:49 浏览: 135
用c++编写的一个学生信息管理系统,能进行各种操作,采用菜单录入方式。
4星 · 用户满意度95%
好的,下面是用C语言编写的学生饭卡管理系统代码,注释中标明了每一步的作用:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生结构体
typedef struct {
char name[20];
char id[10];
int balance;
} Student;
// 定义函数原型
void input_students(Student students[], int *num_students);
void save_students(Student students[], int num_students);
void recharge_balance(Student students[], int num_students);
void check_balance(Student students[], int num_students);
int main() {
Student students[100]; // 最多存储100个学生信息
int num_students = 0; // 学生数量
int choice; // 用户选择的操作编号
while (1) {
// 输出菜单
printf("请选择操作:\n");
printf("1. 输入初始数据\n");
printf("2. 饭卡充值\n");
printf("3. 查询余额\n");
printf("4. 退出\n");
printf("请输入序号:");
scanf("%d", &choice);
switch (choice) {
case 1:
input_students(students, &num_students); // 录入学生信息
save_students(students, num_students); // 保存学生信息到文件
break;
case 2:
recharge_balance(students, num_students); // 饭卡充值
save_students(students, num_students); // 保存学生信息到文件
break;
case 3:
check_balance(students, num_students); // 查询余额
break;
case 4:
printf("谢谢使用,再见!\n");
return 0;
default:
printf("输入有误,请重新输入!\n");
}
}
return 0;
}
// 录入学生信息
void input_students(Student students[], int *num_students) {
int i, n;
printf("请输入学生数量:");
scanf("%d", &n);
for (i = 0; i < n; i++) {
printf("请输入第%d个学生的姓名:", *num_students + 1);
scanf("%s", students[*num_students].name);
printf("请输入第%d个学生的学号:", *num_students + 1);
scanf("%s", students[*num_students].id);
printf("请输入第%d个学生的饭卡余额:", *num_students + 1);
scanf("%d", &students[*num_students].balance);
(*num_students)++;
}
}
// 保存学生信息到文件
void save_students(Student students[], int num_students) {
FILE *fp = fopen("student.txt", "w");
int i;
for (i = 0; i < num_students; i++) {
fprintf(fp, "%s\t%s\t%d\n", students[i].name, students[i].id, students[i].balance);
}
fclose(fp);
}
// 饭卡充值
void recharge_balance(Student students[], int num_students) {
char id[10]; // 学号
int amount; // 充值金额
int i;
printf("请输入学生学号:");
scanf("%s", id);
for (i = 0; i < num_students; i++) {
if (strcmp(students[i].id, id) == 0) { // 找到对应学号的学生
printf("请输入充值金额(10的倍数):");
scanf("%d", &amount);
if (amount % 10 != 0) {
printf("充值金额必须为10的倍数!\n");
return;
}
students[i].balance += amount; // 更新余额
printf("充值成功,当前余额为%d元。\n", students[i].balance);
return;
}
}
printf("该学生不存在!\n");
}
// 查询余额
void check_balance(Student students[], int num_students) {
char id[10]; // 学号
int i;
printf("请输入学生学号:");
scanf("%s", id);
for (i = 0; i < num_students; i++) {
if (strcmp(students[i].id, id) == 0) { // 找到对应学号的学生
printf("%s的饭卡余额为%d元。\n", students[i].name, students[i].balance);
if (students[i].balance < 10) {
printf("余额不足,请及时充值!\n");
}
return;
}
}
printf("该学生不存在!\n");
}
```
在主函数中,我们首先定义了一个存储学生信息的数组和学生数量,然后进入一个循环,根据用户选择的操作执行相应的函数。
在录入学生信息函数中,我们先让用户输入学生数量,然后循环录入每个学生的姓名、学号、余额,并将学生数量加1。
在保存学生信息到文件函数中,我们打开文件,循环写入每个学生的信息,最后关闭文件。
在饭卡充值函数中,我们先让用户输入学号,然后循环遍历学生数组,找到对应学号的学生,让用户输入充值金额,如果金额不是10的倍数,则提示错误,否则更新余额并输出充值成功信息。
在查询余额函数中,我们先让用户输入学号,然后循环遍历学生数组,找到对应学号的学生,输出余额并给出充值提示。
每个函数都有相应的注释,方便理解和修改。
阅读全文