萌新求大佬帮忙改代码

学生信息管理系统,c语言类型

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct {
    int id;
    char name[50];
    int age;
    int chinese;
    int math;
    int english;
    int c;
	int all;
} Student;
void addStudent(FILE *file, Student s) 
{
    fprintf(file, "%d,%s,%d,%d,%d,%d,%d,%d\n", s.id, s.name, s.age,s.chinese,s.math,s.english,s.c,s.all);
    printf("学生信息已增加。\n");
}
void deleteStudent(FILE *file, int id) {
    char buffer[100];
    int found = 0;
    FILE *tempFile = tmpfile();
    Student s;
    rewind(file);

    while (fgets(buffer, sizeof(buffer), file)) {
        sscanf(buffer, "%d,%[^,],%d,%d,%d,%d,%d,%d", &s.id, s.name, &s.age, &s.chinese, &s.math, &s.english,&s.c,&s.all);
        if (s.id != id) {
            fprintf(tempFile, "%s", buffer);
        } else {
            found = 1;
        }
    }

    if (found) {
        fclose(file);
        file = fopen("students.txt", "w");
        rewind(tempFile);
        while (fgets(buffer, sizeof(buffer), tempFile)) {
            fprintf(file, "%s", buffer);
        }
        printf("学生信息已删除。\n");
    } else {
        printf("未找到该学生信息。\n");
    }
    fclose(tempFile);
}
void modifyStudent(FILE *file, Student s) 
{
    char buffer[100];
    int found = 0;
    FILE *tempFile = tmpfile();

    while (fgets(buffer, sizeof(buffer), file)) {
        sscanf(buffer, "%d,%[^,],%d,%d,%d,%d,%d,%d", &s.id, s.name, &s.age,&s.chinese,&s.math,&s.english,&s.c,&s.all);
        if (s.id != s.id) {
            fprintf(tempFile, "%s", buffer);
        } else {
            found = 1;
            fprintf(tempFile, "%d,%s,%d,%d,%d,%d,%d,%d\n", s.id, s.name, s.age,s.chinese,s.math,s.english,s.c,s.all);
        }
    }

    if (found) {
        fclose(file);
        file = fopen("students.txt", "w");
        rewind(tempFile);
        while (fgets(buffer, sizeof(buffer), tempFile)) {
            fprintf(file, "%s", buffer);
        }
        printf("学生信息已修改。\n");
    } else {
        printf("未找到该学生信息。\n");
    }

    fclose(tempFile);
}
void displayStudents(FILE *file) 
{
    char buffer[100];

    printf("学生信息如下:\n");
    while (fgets(buffer, sizeof(buffer), file)) {
        printf("%s", buffer);
    }
}
void Maintenance()
{
	 FILE *file;
    int choice, id;
    Student s;
    char filename[] = "students.txt";

    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("************************\n");
        printf("请选择操作:");
        scanf("%d", &choice);

        switch (choice) {
            case 1:
                printf("输入学生ID:");
                scanf("%d", &s.id);
                printf("输入学生姓名:");
                scanf("%s", s.name);
                printf("输入学生年龄:");
                scanf("%d", &s.age);
                printf("输入学生语文成绩:");
                scanf("%d", &s.chinese);
                printf("输入学生数学成绩:");
                scanf("%d", &s.math);
                printf("输入学生英语成绩:");
                scanf("%d", &s.english);
                printf("输入新的学生C语言成绩:");
                scanf("%d", &s.c);
                printf("输入新的学生总成绩:");
                scanf("%d", &s.all);
                file = fopen(filename, "a");
                addStudent(file, s);
                fclose(file);
                break;
            case 2:
                printf("输入要删除的学生ID:");
                scanf("%d", &id);
                file = fopen(filename, "r+");
                deleteStudent(file, id);
                fclose(file);
                break;
            case 3:
                printf("输入要修改的学生ID:");
                scanf("%d", &s.id);
                printf("输入新的学生姓名:");
                scanf("%s", s.name);
                printf("输入新的学生年龄:");
                scanf("%d", &s.age);
                printf("输入新的学生语文成绩:");
                scanf("%d", &s.chinese);
                printf("输入新的学生数学成绩:");
                scanf("%d", &s.math);
                printf("输入新的学生英语成绩:");
                scanf("%d", &s.english);
                printf("输入新的学生C语言成绩:");
                scanf("%d", &s.c);
                printf("输入新的学生总成绩:");
                scanf("%d", &s.all);
                file = fopen(filename, "r+");
                modifyStudent(file, s);
                fclose(file);
                break;
            case 4:
                file = fopen(filename, "r");
                displayStudents(file);
                fclose(file);
                break;
            case 5:
                exit(0);
            
            case 6: 
			    return;
				default:
                printf("无效选择,请重新选择。\n");   
        }
    }
}
void InquireByName(FILE *file, const char *name) {
    char buffer[100];
    int found = 0;
    Student s;

    rewind(file);

    printf("查询结果如下:\n");
    while (fgets(buffer, sizeof(buffer), file)) {
        sscanf(buffer, "%d,%[^,],%d,%d,%d,%d,%d,%d", &s.id, s.name, &s.age, &s.chinese, &s.math, &s.english,&s.c,&s.all);
        if (strcmp(s.name, name) == 0) {
            found = 1;
            printf("%s", buffer);
        }
    }

    if (!found) {
        printf("未找到该学生信息。\n");
    }
}
void InquireById(FILE *file, int id) {
    char buffer[100];
    int found = 0;
    Student s;
    rewind(file);

    printf("查询结果如下:\n");
    while (fgets(buffer, sizeof(buffer), file)) {
        sscanf(buffer, "%d,%[^,],%d,%d,%d,%d,%d,%d", &s.id, s.name, &s.age, &s.chinese, &s.math, &s.english,&s.c,&s.all);
        if (s.id == id) {
            found = 1;
            printf("%s", buffer);
        }
    }

    if (!found) {
        printf("未找到该学生信息。\n");
    }
}
void Inquire()
{
	 FILE *file;
    int choice;
    char name[50];
    int id;
    char filename[] = "students.txt";

    while (1) {
    	printf("************************\n");
    	printf("*                      *\n");
        printf("*     1. 按姓名查询    *\n");
        printf("*     2. 按学号查询    *\n");
        printf("*     3. 返回上一级    *\n");
        printf("*                      *\n");
        printf("************************\n");
        printf("请选择查询方式:");
        scanf("%d", &choice);

        switch (choice) {
            case 1:
                printf("输入学生姓名:");
                scanf("%s", name);
                file = fopen(filename, "r");
                InquireByName(file, name);
                fclose(file);
                break;
            case 2:
                printf("输入学生学号:");
                scanf("%d", &id);
                file = fopen(filename, "r");
                InquireById(file, id);
                fclose(file);
                break;
            case 3:
                return; // 返回上一级菜单
            default:
                printf("无效选择,请重新选择。\n");
        }
    }
}
void Statistics(const char *subject, int minScore, int maxScore) {
    FILE *file;
    char buffer[100];
    int id, chinese, math, english,c,all;
    char name[50];
    int count = 0;

    file = fopen("students.txt", "r");
    if (file == NULL) {
        printf("无法打开文件:students.txt\n");
        return;
    }

    printf("在课程 '%s' 分数段 %d-%d 内的学生情况如下:\n", subject, minScore, maxScore);
    while (fgets(buffer, sizeof(buffer), file)) {
        sscanf(buffer, "%d,%[^,],%d,%d,%d,%d", &id, name, &chinese, &math, &english,&c);
        if (strcmp(subject, "Chinese") == 0 && chinese >= minScore && chinese <= maxScore) {
            printf("%d, %s, Chinese: %d\n", id, name, chinese);
            count++;
        } else if (strcmp(subject, "Math") == 0 && math >= minScore && math <= maxScore) {
            printf("%d, %s, Math: %d\n", id, name, math);
            count++;
        } else if (strcmp(subject, "English") == 0 && english >= minScore && english <= maxScore) {
            printf("%d, %s, English: %d\n", id, name, english);
            count++;
        }
        else if (strcmp(subject, "c语言") == 0 && c >= minScore && c <= maxScore) {
            printf("%d, %s, c语言: %d\n", id, name, c);
            count++;
        }
        else if (strcmp(subject, "总成绩") == 0 && all>= minScore && all <= maxScore) {
            printf("%d, %s, 总成绩: %d\n", id, name, all);
            count++;
        }
        
    }

    if (count == 0) {
        printf("没有学生在课程 '%s' 的分数段 %d-%d 内。\n", subject, minScore, maxScore);
    }

    fclose(file);
}
void Statisstics()
{
	char subject[50];
    int minScore, maxScore;
    char filename[] = "students.txt";

    printf("输入课程名(Chinese, Math, English,c语言,总成绩):");
    scanf("%s", subject);
    printf("输入分数段(最小值-最大值):");
    scanf("%d-%d", &minScore, &maxScore);

    if (minScore < 0 || maxScore > 100 || minScore > maxScore) {
        printf("分数段输入有误,请输入0-100之间的分数段。\n");
        return;
    }

    FILE *file = fopen(filename, "r");
    if (file == NULL) {
        printf("无法打开文件:%s\n", filename);
        return;
    }

    Statistics(subject, minScore, maxScore);

    fclose(file);
}
void aSort(const char *subject, int ascending) {
    FILE *file;
    char buffer[100];
    Student students[100];
    int studentCount = 0;
    int i, j;

    file = fopen("students.txt", "r");
    if (file == NULL) {
        printf("无法打开文件:students.txt\n");
        return;
    }

    while (fgets(buffer, sizeof(buffer), file)) {
        sscanf(buffer, "%d,%[^,],%d,%d,%d,%d,%d", &students[studentCount].id, students[studentCount].name, &students[studentCount].chinese, &students[studentCount].math, &students[studentCount].english,&students[studentCount].c,&students[studentCount].all);
        studentCount++;
    }

    fclose(file);

    for (i = 0; i < studentCount - 1; i++) {
        for (j = 0; j < studentCount - i - 1; j++) {
            int score1, score2;
            if (strcmp(subject, "Chinese") == 0) {
                score1 = students[j].chinese;
                score2 = students[j + 1].chinese;
            } 
			else if (strcmp(subject, "Math") == 0) {
                score1 = students[j].math;
                score2 = students[j + 1].math;
            } 
			else if (strcmp(subject, "English") == 0) {
                score1 = students[j].english;
                score2 = students[j + 1].english;
            } 
            else if (strcmp(subject, "c") == 0) {
                score1 = students[j].c;
                score2 = students[j + 1].c;
            }
            else if (strcmp(subject, "all") == 0) {
                score1 = students[j].all;
                score2 = students[j + 1].all;     
            } 
			else {
                printf("无效的课程名。\n");
                return;
            }

            if ((ascending && score1 > score2) || (!ascending && score1 < score2)) {
                Student temp = students[j];
                students[j] = students[j + 1];
                students[j + 1] = temp;
            }
        }
    }

    printf("排序后的学生信息如下:\n");
    printf("ID\tName\tChinese\tMath\tEnglish\tc\tall\n");
    for (i = 0; i < studentCount; i++) {
        printf("%d\t%s\t%d\t%d\t%d\t%d\t%d\n", students[i].id, students[i].name, students[i].chinese, students[i].math, students[i].english,students[i].c,students[i].all);
    }
}
void Sort()
{
	 char subject[50];
    int ascending;
    char filename[] = "students.txt";

    printf("输入课程名(Chinese, Math, English,c,all):");
    scanf("%s", subject);
    printf("选择排序方式(0:升序,1:降序):");
    scanf("%d", &ascending);

    FILE *file = fopen(filename, "r");
    if (file == NULL) {
        printf("无法打开文件:%s\n", filename);
        return;
    }

    aSort(subject, ascending);

    fclose(file);
}
int main()
{
	printf("欢迎来到学生教务管理系统\n");
	 while(1)
	 {
	 	printf("************************\n");
		printf("*                      *\n");
		printf("*       1.信息维护     *\n");
		printf("*       2.信息查询     *\n");
		printf("*       3.成绩统计     *\n");
		printf("*       4.成绩排序     *\n");
		printf("*       5.退出程序     *\n");
		printf("*                      *\n");
		printf("************************\n");
	 	int key=0;
	 	printf("请输入需要进行的功能:");
		 scanf("%d",&key);
		 if(key==5)
		 {
		 	printf("感谢您的使用!");
		 	break;
		  } 
		  else if(key==1)
		  {
		  	Maintenance();
		  }
		  else if(key==2)
		  {
		  	Inquire();
		  }
		  else if(key==3)
		  {
		  	Statisstics();
		  }
		  else if(key==4)
		  {
		  	Sort();
		  }
		  else
		  {
		  	printf("选择有误,请重新选择\n");
		  	continue;
		  }
	 }
	 return 0;
}

修改学生信息和删除学生信息会把所有已经录入的学生信息都删除掉

这个是删除部分

void deleteStudent(FILE *file, int id) {
    char buffer[100];
    int found = 0;
    FILE *tempFile = tmpfile();
    Student s;
    rewind(file);

    while (fgets(buffer, sizeof(buffer), file)) {
        sscanf(buffer, "%d,%[^,],%d,%d,%d,%d,%d,%d", &s.id, s.name, &s.age, &s.chinese, &s.math, &s.english,&s.c,&s.all);
        if (s.id != id) {
            fprintf(tempFile, "%s", buffer);
        } else {
            found = 1;
        }
    }

    if (found) {
        fclose(file);
        file = fopen("students.txt", "w");
        rewind(tempFile);
        while (fgets(buffer, sizeof(buffer), tempFile)) {
            fprintf(file, "%s", buffer);
        }
        printf("学生信息已删除。\n");
    } else {
        printf("未找到该学生信息。\n");
    }
    fclose(tempFile);
}

这个是修改部分

void modifyStudent(FILE *file, Student s) 
{
    char buffer[100];
    int found = 0;
    FILE *tempFile = tmpfile();

    while (fgets(buffer, sizeof(buffer), file)) {
        sscanf(buffer, "%d,%[^,],%d,%d,%d,%d,%d,%d", &s.id, s.name, &s.age,&s.chinese,&s.math,&s.english,&s.c,&s.all);
        if (s.id != s.id) {
            fprintf(tempFile, "%s", buffer);
        } else {
            found = 1;
            fprintf(tempFile, "%d,%s,%d,%d,%d,%d,%d,%d\n", s.id, s.name, s.age,s.chinese,s.math,s.english,s.c,s.all);
        }
    }

    if (found) {
        fclose(file);
        file = fopen("students.txt", "w");
        rewind(tempFile);
        while (fgets(buffer, sizeof(buffer), tempFile)) {
            fprintf(file, "%s", buffer);
        }
        printf("学生信息已修改。\n");
    } else {
        printf("未找到该学生信息。\n");
    }

    fclose(tempFile);
}

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值