有具体的代码示例吗
时间: 2023-09-11 21:05:52 浏览: 36
当然,这里是一个简单的示例代码,实现了上述的要求:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define FILENAME "students.txt"
typedef struct {
char id[20];
char name[20];
char gender[10];
int age;
char birth[20];
char enroll[20];
} Student;
void add_student(Student s);
void modify_student(char *key, int type);
void delete_student(char *key, int type);
void query_student(char *key, int type);
void stat_student();
void menu();
void flush_stdin();
int main() {
menu();
return 0;
}
void add_student(Student s) {
FILE *fp = fopen(FILENAME, "a");
fprintf(fp, "%s,%s,%s,%d,%s,%s\n", s.id, s.name, s.gender, s.age, s.birth, s.enroll);
fclose(fp);
printf("添加成功!\n");
}
void modify_student(char *key, int type) {
FILE *fp = fopen(FILENAME, "r");
FILE *fp2 = fopen("temp.txt", "w");
char buf[1024];
int found = 0;
while (fgets(buf, 1024, fp)) {
Student s;
sscanf(buf, "%[^,],%[^,],%[^,],%d,%[^,],%[^,]", s.id, s.name, s.gender, &s.age, s.birth, s.enroll);
if ((type == 1 && strcmp(s.id, key) == 0) || (type == 2 && strcmp(s.name, key) == 0)) {
found = 1;
printf("请输入新的学生信息:\n");
printf("学号:");
scanf("%s", s.id);
printf("姓名:");
scanf("%s", s.name);
printf("性别:");
scanf("%s", s.gender);
printf("年龄:");
scanf("%d", &s.age);
printf("出生日期:");
scanf("%s", s.birth);
printf("入学时间:");
scanf("%s", s.enroll);
fprintf(fp2, "%s,%s,%s,%d,%s,%s\n", s.id, s.name, s.gender, s.age, s.birth, s.enroll);
printf("修改成功!\n");
} else {
fprintf(fp2, "%s", buf);
}
}
fclose(fp);
fclose(fp2);
if (!found) {
printf("未找到对应学生信息!\n");
remove("temp.txt");
} else {
remove(FILENAME);
rename("temp.txt", FILENAME);
}
}
void delete_student(char *key, int type) {
FILE *fp = fopen(FILENAME, "r");
FILE *fp2 = fopen("temp.txt", "w");
char buf[1024];
int found = 0;
while (fgets(buf, 1024, fp)) {
Student s;
sscanf(buf, "%[^,],%[^,],%[^,],%d,%[^,],%[^,]", s.id, s.name, s.gender, &s.age, s.birth, s.enroll);
if ((type == 1 && strcmp(s.id, key) == 0) || (type == 2 && strcmp(s.name, key) == 0)) {
found = 1;
printf("删除学生信息:\n");
printf("%s,%s,%s,%d,%s,%s\n", s.id, s.name, s.gender, s.age, s.birth, s.enroll);
printf("确认删除?(y/n)");
char c = getchar();
flush_stdin();
if (c == 'y' || c == 'Y') {
printf("删除成功!\n");
} else {
fprintf(fp2, "%s", buf);
}
} else {
fprintf(fp2, "%s", buf);
}
}
fclose(fp);
fclose(fp2);
if (!found) {
printf("未找到对应学生信息!\n");
remove("temp.txt");
} else {
remove(FILENAME);
rename("temp.txt", FILENAME);
}
}
void query_student(char *key, int type) {
FILE *fp = fopen(FILENAME, "r");
char buf[1024];
int found = 0;
while (fgets(buf, 1024, fp)) {
Student s;
sscanf(buf, "%[^,],%[^,],%[^,],%d,%[^,],%[^,]", s.id, s.name, s.gender, &s.age, s.birth, s.enroll);
if ((type == 1 && strcmp(s.id, key) == 0) || (type == 2 && strcmp(s.name, key) == 0)) {
found = 1;
printf("%s,%s,%s,%d,%s,%s\n", s.id, s.name, s.gender, s.age, s.birth, s.enroll);
}
}
fclose(fp);
if (!found) {
printf("未找到对应学生信息!\n");
}
}
void stat_student() {
FILE *fp = fopen(FILENAME, "r");
char buf[1024];
int count = 0;
int male = 0, female = 0;
int age_sum = 0;
while (fgets(buf, 1024, fp)) {
Student s;
sscanf(buf, "%[^,],%[^,],%[^,],%d,%[^,],%[^,]", s.id, s.name, s.gender, &s.age, s.birth, s.enroll);
count++;
if (strcmp(s.gender, "男") == 0) {
male++;
} else {
female++;
}
age_sum += s.age;
}
fclose(fp);
if (count > 0) {
printf("学生总人数:%d\n", count);
printf("男生人数:%d,女生人数:%d\n", male, female);
printf("男女比例:%.2f\n", (float) male / female);
printf("平均年龄:%.2f\n", (float) age_sum / count);
} else {
printf("暂无学生信息!\n");
}
}
void menu() {
while (1) {
printf("======================\n");
printf("学生信息管理系统\n");
printf("1. 添加学生信息\n");
printf("2. 修改学生信息\n");
printf("3. 删除学生信息\n");
printf("4. 查询学生信息\n");
printf("5. 统计学生信息\n");
printf("6. 退出\n");
printf("======================\n");
printf("请选择操作:");
int choice;
scanf("%d", &choice);
flush_stdin();
switch (choice) {
case 1:
printf("请输入学生信息:\n");
Student s;
printf("学号:");
scanf("%s", s.id);
printf("姓名:");
scanf("%s", s.name);
printf("性别:");
scanf("%s", s.gender);
printf("年龄:");
scanf("%d", &s.age);
printf("出生日期:");
scanf("%s", s.birth);
printf("入学时间:");
scanf("%s", s.enroll);
add_student(s);
break;
case 2:
printf("请输入要修改的学生信息:\n");
printf("1. 按照学号修改\n");
printf("2. 按照姓名修改\n");
printf("请选择操作:");
int type;
scanf("%d", &type);
flush_stdin();
printf("请输入要修改的学生信息的关键字:");
char key[20];
scanf("%s", key);
modify_student(key, type);
break;
case 3:
printf("请输入要删除的学生信息:\n");
printf("1. 按照学号删除\n");
printf("2. 按照姓名删除\n");
printf("请选择操作:");
scanf("%d", &type);
flush_stdin();
printf("请输入要删除的学生信息的关键字:");
scanf("%s", key);
delete_student(key, type);
break;
case 4:
printf("请输入要查询的学生信息:\n");
printf("1. 按照学号查询\n");
printf("2. 按照姓名查询\n");
printf("请选择操作:");
scanf("%d", &type);
flush_stdin();
printf("请输入要查询的学生信息的关键字:");
scanf("%s", key);
query_student(key, type);
break;
case 5:
stat_student();
break;
case 6:
printf("谢谢使用!\n");
return;
default:
printf("无效的操作,请重新选择!\n");
break;
}
}
}
void flush_stdin() {
char c;
while ((c = getchar()) != '\n' && c != EOF);
}
```
这个程序实现了一个简单的学生信息管理系统,具有添加、修改、删除、查询、统计等功能。它采用了模块化程序设计,将不同的功能封装为不同的函数,通过参数传递信息,避免使用全局变量。数据存储采用了文件方式,每个学生信息占用一行,字段之间用逗号分隔。用户界面采用菜单方式,用户选择相应的功能进行操作。程序对用户输入的非法数据或者文件读写错误等情况,给出相应的提示信息。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)