用c语言,构建多个自定义函数,实现相对比较完善的作品。 具体的功能和数据结构自行定义,要求不少于5个功能模块,至少要有一个文件的相关操作。 题目:班级C语言成绩管理。序号,学号,姓名,成绩 比如信息的录入、查询、新增、删除、统计等等。
时间: 2024-02-18 15:05:11 浏览: 60
好的,针对班级C语言成绩管理,我可以建议以下5个功能模块:
1.成绩录入模块:该模块用于录入学生的成绩信息,包括学生序号、学号、姓名、成绩等信息。可以将录入的信息保存到文件中。
```c
void addScore() {
FILE *fp;
struct student stu;
printf("请输入学生的序号:");
scanf("%d", &stu.id);
printf("请输入学生的学号:");
scanf("%s", stu.stuId);
printf("请输入学生的姓名:");
scanf("%s", stu.name);
printf("请输入学生的成绩:");
scanf("%f", &stu.score);
fp = fopen("score.txt", "a");
if (fp == NULL) {
printf("打开文件失败!");
return;
}
fprintf(fp, "%d %s %s %.2f\n", stu.id, stu.stuId, stu.name, stu.score);
fclose(fp);
}
```
2.成绩查询模块:该模块用于查询学生的成绩信息,可以根据学生序号、学号、姓名等条件进行查询,并将查询结果输出到屏幕上。
```c
void queryScore() {
FILE *fp;
struct student stu;
int find = 0;
char query[20];
printf("请输入您要查询的内容:");
scanf("%s", query);
fp = fopen("score.txt", "r");
if (fp == NULL) {
printf("打开文件失败!");
return;
}
printf("序号\t学号\t姓名\t成绩\n");
while (fscanf(fp, "%d %s %s %f", &stu.id, stu.stuId, stu.name, &stu.score) != EOF) {
if (strcmp(query, stu.name) == 0 || strcmp(query, stu.stuId) == 0 || atoi(query) == stu.id) {
printf("%d\t%s\t%s\t%.2f\n", stu.id, stu.stuId, stu.name, stu.score);
find = 1;
}
}
if (!find) {
printf("没有找到相关信息!\n");
}
fclose(fp);
}
```
3.成绩新增模块:该模块用于新增学生的成绩信息,可以根据学生序号、学号、姓名、成绩等信息新增学生的成绩,并将新增的信息保存到文件中。
```c
void modifyScore() {
FILE *fp,*tmp;
struct student stu;
int id, modify = 0;
printf("请输入要修改的学生序号:");
scanf("%d", &id);
fp = fopen("score.txt", "r");
tmp = fopen("tmp.txt", "w");
if (fp == NULL || tmp == NULL) {
printf("打开文件失败!");
return;
}
while (fscanf(fp, "%d %s %s %f", &stu.id, stu.stuId, stu.name, &stu.score) != EOF) {
if (stu.id == id) {
printf("原信息:%d %s %s %.2f\n", stu.id, stu.stuId, stu.name, stu.score);
printf("请输入新的学号:");
scanf("%s", stu.stuId);
printf("请输入新的姓名:");
scanf("%s", stu.name);
printf("请输入新的成绩:");
scanf("%f", &stu.score);
modify = 1;
}
fprintf(tmp, "%d %s %s %.2f\n", stu.id, stu.stuId, stu.name, stu.score);
}
if (!modify) {
printf("没有找到相关信息!\n");
}
fclose(fp);
fclose(tmp);
remove("score.txt");
rename("tmp.txt", "score.txt");
}
```
4.成绩删除模块:该模块用于删除学生的成绩信息,可以根据学生序号、学号、姓名等信息进行删除,并将删除后的信息保存到文件中。
```c
void deleteScore() {
FILE *fp,*tmp;
struct student stu;
int id, deleted = 0;
printf("请输入要删除的学生序号:");
scanf("%d", &id);
fp = fopen("score.txt", "r");
tmp = fopen("tmp.txt", "w");
if (fp == NULL || tmp == NULL) {
printf("打开文件失败!");
return;
}
while (fscanf(fp, "%d %s %s %f", &stu.id, stu.stuId, stu.name, &stu.score) != EOF) {
if (stu.id == id) {
printf("已删除的信息:%d %s %s %.2f\n", stu.id, stu.stuId, stu.name, stu.score);
deleted = 1;
continue;
}
fprintf(tmp, "%d %s %s %.2f\n", stu.id, stu.stuId, stu.name, stu.score);
}
if (!deleted) {
printf("没有找到相关信息!\n");
}
fclose(fp);
fclose(tmp);
remove("score.txt");
rename("tmp.txt", "score.txt");
}
```
5.成绩统计模块:该模块用于统计学生的成绩信息,可以根据科目、日期等条件进行统计,并将统计结果输出到屏幕上。
```c
void statisticsScore() {
FILE *fp;
struct student stu;
char query[20];
float sum = 0;
int count = 0;
printf("请输入要统计的科目:");
scanf("%s", query);
fp = fopen("score.txt", "r");
if (fp == NULL) {
printf("打开文件失败!");
return;
}
while (fscanf(fp, "%d %s %s %f", &stu.id, stu.stuId, stu.name, &stu.score) != EOF) {
if (strcmp(query, stu.name) == 0) {
sum += stu.score;
count++;
}
}
printf("科目:%s 总分:%.2f 平均分:%.2f\n", query, sum, sum/count);
fclose(fp);
}
```
以上模块可以通过函数的方式实现,并且可以将它们分别保存到不同的文件中,以达到模块化的设计思想。同时,可以使用结构体等数据结构来存储学生的成绩信息,以便于查询、新增、删除和统计操作。
阅读全文