#include <stdio.h>
#include <string.h>
#define MAX_STUDENTS 100
struct Student {
int id;
char name[50];
int age;
};
struct Student students[MAX_STUDENTS];
int numStudents = 0;
void addStudent() {
if (numStudents >= MAX_STUDENTS) {
printf("学生信息已满,无法继续添加。\n");
return;
}
struct Student newStudent;
printf("请输入学生ID:");
scanf("%d", &newStudent.id);
printf("请输入学生姓名:");
scanf("%s", newStudent.name);
printf("请输入学生年龄:");
scanf("%d", &newStudent.age);
students[numStudents] = newStudent;
numStudents++;
printf("学生信息添加成功!\n");
}
void displayStudents() {
printf("学生信息列表:\n");
for (int i = 0; i < numStudents; i++) {
printf("ID: %d, 姓名: %s, 年龄: %d\n",
students[i].id, students[i].name, students[i].age);
}
}
int findStudentById(int id) {
for (int i = 0; i < numStudents; i++) {
if (students[i].id == id) {
return i;
}
}
return -1;
}
void updateStudent() {
int id;
printf("请输入要修改信息的学生ID:");
scanf("%d", &id);
int index = findStudentById(id);
if (index == -1) {
printf("找不到该学生信息。\n");
return;
}
printf("请输入新的学生姓名:");
scanf("%s", students[index].name);
printf("请输入新的学生年龄:");
scanf("%d", &students[index].age);
printf("学生信息修改成功!\n");
}
void deleteStudent() {
int id;
printf("请输入要删除的学生ID:");
scanf("%d", &id);
int index = findStudentById(id);
if (index == -1) {
printf("找不到该学生信息。\n");
return;
}
for (int i = index; i < numStudents - 1; i++) {
students[i] = students[i + 1];
}
numStudents--;
printf("学生信息删除成功!\n");
}
int main() {
int choice;
do {
printf("\n学生管理系统\n");
printf("1. 添加学生信息\n");
printf("2. 显示学生信息\n");
printf("3. 修改学生信息\n");
printf("4. 删除学生信息\n");
printf("5. 退出\n");
printf("请选择操作:");
scanf("%d", &choice);
switch (choice) {
case 1:
addStudent();
break;
case 2:
displayStudents();
break;
case 3:
updateStudent();
break;
case 4:
deleteStudent();
break;
case 5:
printf("退出程序。\n");
break;
default:
printf("无效的选择,请重新输入。\n");
break;
}
} while (choice != 5);
return 0;
}
当用户运行该程序时,它会提供一个简单的学生管理系统,允许用户添加、显示、修改和删除学生信息。
-
首先,我们引入了必要的头文件,并定义了一个结构体
Student
,用于存储学生的信息,包括学生ID、姓名和年龄。我们还定义了一个最大学生数目MAX_STUDENTS
和一个数组students
来存储学生信息,以及一个变量numStudents
用于记录当前学生的数量。 -
接下来,程序进入主函数
main()
。在这里,我们使用一个do-while
循环来提供一个菜单,让用户选择不同的操作。用户可以选择添加学生信息、显示学生信息、修改学生信息、删除学生信息以及退出程序。 -
对于每个菜单选项,我们都有相应的函数来处理。
-
addStudent()
: 该函数负责添加新的学生信息。它首先检查是否还有空间来存储新的学生信息,然后提示用户输入学生的ID、姓名和年龄,将新的学生信息存储到students
数组中。 -
displayStudents()
: 该函数用于显示所有学生的信息。它会遍历students
数组并逐个打印每个学生的ID、姓名和年龄。 -
findStudentById()
: 该函数用于根据学生的ID查找学生在数组中的索引。如果找到匹配的学生ID,则返回该学生在数组中的索引,否则返回 -1。 -
updateStudent()
: 该函数用于修改学生的信息。用户需要提供要修改的学生的ID,然后程序会检查是否存在该学生,如果存在,则提示用户输入新的姓名和年龄,并更新相应学生的信息。 -
deleteStudent()
: 该函数用于删除学生的信息。用户需要提供要删除的学生的ID,然后程序会检查是否存在该学生,如果存在,则将该学生从数组中删除。
-
-
最后,在主函数的
do-while
循环中,根据用户的选择调用相应的函数来执行操作。用户可以重复选择不同的操作,直到选择退出程序。
上面程序演示了如何使用C语言创建一个简单的学生管理系统,但它仅包含了基本的操作和数据存储。在实际应用中,你可能还需要考虑数据持久化、错误处理、用户界面优化等方面的问题。
带文件存储版本
#include <stdio.h>
#include <string.h>
#define MAX_STUDENTS 100
char filepath[100];
struct Student
{
int id;
char name[50];
int age;
char sex[50];
char profession[50];
};
struct Student students[MAX_STUDENTS];
int numStudents = 0;
// 保存学生数据到文件
void saveData() {
FILE *file = fopen(filepath, "w");
if (file == NULL) {
printf("无法打开文件。\n");
return;
}
for (int i = 0; i < numStudents; i++) {
fprintf(file, "%d %s %d %s %s\n", students[i].id, students[i].name, students[i].age, students[i].sex, students[i].profession);
}
fclose(file);
}
// 从文件加载学生数据
void loadData() {
printf("请输入文件路径,或者将文件拖入窗口:");
scanf("%s",filepath);
FILE *file = fopen(filepath, "r");
if (file == NULL) {
printf("无法找到存储的数据。\n");
return;
}
while (fscanf(file, "%d %s %d %s %s", &students[numStudents].id, students[numStudents].name, &students[numStudents].age, students[numStudents].sex, students[numStudents].profession) != EOF) {
numStudents++;
}
fclose(file);
}
void addStudent() {
if (numStudents >= MAX_STUDENTS) {
printf("学生信息已满,无法继续添加。\n");
return;
}
struct Student newStudent;
printf("请输入学生ID:");
scanf("%d", &newStudent.id);
printf("请输入学生姓名:");
scanf("%s", newStudent.name);
printf("请输入学生年龄:");
scanf("%d", &newStudent.age);
printf("请输入学生性别:");
scanf("%s", newStudent.sex);
printf("请输入学生专业:");
scanf("%s", newStudent.profession);
students[numStudents] = newStudent;
numStudents++;
printf("学生信息添加成功!\n");
}
void displayStudents()
{
printf("学生信息列表:\n");
for (int i = 0; i < numStudents; i++)
{
printf("ID: %d, 姓名: %s, 年龄: %d 性别: %s, 专业: %s\n",
students[i].id, students[i].name, students[i].age,students[i].sex,students[i].profession);
}
}
int findStudentById(int id)
{
for (int i = 0; i < numStudents; i++)
{
if (students[i].id == id)
{
return i;
}
}
return -1;
}
void updateStudent()
{
int id;
printf("请输入要修改信息的学生ID:");
scanf("%d", &id);
int index = findStudentById(id);
if (index == -1)
{
printf("找不到该学生信息。\n");
return;
}
printf("请输入新的学生姓名:");
scanf("%s", students[index].name);
printf("请输入新的学生年龄:");
scanf("%d", &students[index].age);
printf("请输入新的学生性别:");
scanf("%s", &students[index].sex);
printf("请输入新的学生专业:");
scanf("%s", &students[index].profession);
printf("学生信息修改成功!\n");
}
void deleteStudent()
{
int id;
printf("请输入要删除的学生ID:");
scanf("%d", &id);
int index = findStudentById(id);
if (index == -1)
{
printf("找不到该学生信息。\n");
return;
}
for (int i = index; i < numStudents - 1; i++)
{
students[i] = students[i + 1];
}
numStudents--;
printf("学生信息删除成功!\n");
}
int main() {
int choice;
do {
printf("\n学生管理系统\n");
printf("1. 添加学生信息\n");
printf("2. 显示学生信息\n");
printf("3. 修改学生信息\n");
printf("4. 删除学生信息\n");
printf("5. 读取文件\n");
printf("6. 保存文件\n");
printf("7. 退出\n");
printf("请选择操作:");
scanf("%d", &choice);
switch (choice) {
case 1:
addStudent();
saveData(); // 添加学生后保存数据
break;
case 2:
displayStudents();
break;
case 3:
updateStudent();
saveData(); // 更新学生信息后保存数据
break;
case 4:
deleteStudent();
saveData(); // 删除学生后保存数据
break;
case 5:
// 读取文件
loadData();
break;
case 6:
// 保存文件
saveData();
break;
case 7:
printf("退出程序。\n");
break;
default:
printf("无效的选择,请重新输入。\n");
break;
}
} while (choice != 7);
return 0;
}