试运用分支结构、循环、结构体数组,文件来设计一组c语言程序
时间: 2023-12-05 12:04:14 浏览: 31
好的,我可以为您提供一个例子,如下所示:
假设我们要设计一个学生管理系统,需要实现以下功能:
1. 添加学生信息
2. 修改学生信息
3. 删除学生信息
4. 查询学生信息
5. 显示所有学生信息
我们可以利用结构体数组来存储学生信息,利用文件来实现数据的永久性存储。
首先,我们定义一个学生结构体,包含学生的姓名、学号、年龄等信息:
```c
struct Student {
char name[20];
int id;
int age;
// 其他信息
};
```
接着,我们定义一个结构体数组来存储学生信息:
```c
struct Student students[100];
int count = 0; // 学生数量
```
然后,我们可以编写一个菜单程序,让用户选择需要执行的操作:
```c
void menu() {
printf("1. 添加学生信息\n");
printf("2. 修改学生信息\n");
printf("3. 删除学生信息\n");
printf("4. 查询学生信息\n");
printf("5. 显示所有学生信息\n");
printf("6. 退出程序\n");
}
```
接着,我们可以根据用户的选择来执行不同的操作。下面是每个操作的代码:
1. 添加学生信息
```c
void addStudent() {
struct Student student;
printf("请输入学生姓名:");
scanf("%s", student.name);
printf("请输入学生学号:");
scanf("%d", &student.id);
printf("请输入学生年龄:");
scanf("%d", &student.age);
// 其他信息
students[count++] = student; // 将学生信息添加到结构体数组中
printf("添加成功!\n");
}
```
2. 修改学生信息
```c
void modifyStudent() {
int id;
printf("请输入要修改的学生学号:");
scanf("%d", &id);
for (int i = 0; i < count; i++) {
if (students[i].id == id) {
printf("请输入学生姓名:");
scanf("%s", students[i].name);
printf("请输入学生年龄:");
scanf("%d", &students[i].age);
// 其他信息
printf("修改成功!\n");
return;
}
}
printf("未找到该学生!\n");
}
```
3. 删除学生信息
```c
void deleteStudent() {
int id;
printf("请输入要删除的学生学号:");
scanf("%d", &id);
for (int i = 0; i < count; i++) {
if (students[i].id == id) {
for (int j = i; j < count - 1; j++) {
students[j] = students[j + 1]; // 将后面的学生信息向前移动
}
count--; // 学生数量减1
printf("删除成功!\n");
return;
}
}
printf("未找到该学生!\n");
}
```
4. 查询学生信息
```c
void queryStudent() {
int id;
printf("请输入要查询的学生学号:");
scanf("%d", &id);
for (int i = 0; i < count; i++) {
if (students[i].id == id) {
printf("学生姓名:%s\n", students[i].name);
printf("学生年龄:%d\n", students[i].age);
// 其他信息
return;
}
}
printf("未找到该学生!\n");
}
```
5. 显示所有学生信息
```c
void showAllStudents() {
if (count == 0) {
printf("无学生信息!\n");
return;
}
printf("学生信息如下:\n");
for (int i = 0; i < count; i++) {
printf("学生姓名:%s\n", students[i].name);
printf("学生学号:%d\n", students[i].id);
printf("学生年龄:%d\n", students[i].age);
// 其他信息
}
}
```
最后,我们可以将学生信息保存到文件中,以便下次打开程序时可以读取到之前保存的信息:
```c
void saveToFile() {
FILE *fp;
fp = fopen("students.txt", "w");
for (int i = 0; i < count; i++) {
fprintf(fp, "%s %d %d\n", students[i].name, students[i].id, students[i].age);
// 其他信息
}
fclose(fp);
printf("保存成功!\n");
}
void loadFromFile() {
FILE *fp;
fp = fopen("students.txt", "r");
if (fp == NULL) {
printf("未找到数据文件!\n");
return;
}
while (!feof(fp) && count < 100) {
struct Student student;
fscanf(fp, "%s %d %d\n", student.name, &student.id, &student.age);
// 其他信息
students[count++] = student;
}
fclose(fp);
printf("加载成功!\n");
}
```
完整代码如下: