学生成绩管理系统 (有文件操作)附源码

关于文件的操作,这篇文章写的非常好,极力推荐!!!

 C语言文件读写操作(详解)_m0_46671092的博客-CSDN博客_c文件的读取和写入

废话不多说,直接上代码。 

//学生成绩管理系统加文件操作!

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100
// 描述学生信息的结构体
struct student
{
    char name[18];   // 名字
    int num;         // 学号
    double score[3]; // 3门课的成绩
    double sum;      // 总分

};

// 学生所有信息的结构体
struct stuSystem
{
    struct student stu[MAX];  //系统用学生的信息的结构体数组stu[]来储存学生的信息
    int curSize;    //当前系统中有的学生数
};

// 创建系统的函数
struct stuSystem* createSystem()
{
    //初始化结构体指针
    struct stuSystem* pSystem = (struct stuSystem*)calloc(sizeof(struct stuSystem), 1);
    return pSystem;
};

// 制作菜单
void makeMenu()
{
    printf("---------------------------------------------\n");
    printf("\t\t 0. 退出系统 \n");
    printf("\t\t 1. 录入信息 \n");
    printf("\t\t 2. 浏览信息 \n");
    printf("\t\t 3. 删除信息 \n");
    printf("\t\t 4. 修改信息 \n");
    printf("\t\t 5. 查找信息 \n");
    printf("\t\t 6. 排序信息 \n");
    printf("---------------------------------------------\n");
    printf("---------请输入(0 ~ 7):");
}

// 录入学生信息的函数
void inputStu(struct stuSystem* pSystem)
{
    struct student temp; // 结构体变量,临时储存用户输入的信息
    printf("请输入学生的姓名和学号:");
    scanf("%s%d",temp.name, &temp.num);
    printf("请输入此学生3门课的成绩:");
    temp.sum = 0;
    for(int i = 0; i < 3; i++)
    {
        scanf("%lf",&temp.score[i]);
        temp.sum += temp.score[i];
    }
    insertArray(pSystem, temp); // 插入数组函数(用于将用户输入的信息插入并储存在数组中)
}

// 插入(学生信息)数组函数
void insertArray(struct stuSystem* pSystem,struct student stuInfo)
{
    if(pSystem -> curSize >= MAX) // 如果数组已经存满
    {
        printf("学生人数已满,无法录入!\n");
            return;              // 直接返回
    }
    // 若没有存满
    pSystem ->stu[pSystem ->curSize] = stuInfo; // 指针指向学生信息的数组并赋值
    pSystem ->curSize++;   // 指向现在已经存在学生数
}

//打印(学生信息)数组函数
void printfArray(struct stuSystem* pSystem)
{
    printf("姓名\t编号\t数学\t英语\t体育\t总分\n");
    for(int i = 0; i < pSystem ->curSize; i++)
    {
        printf("%s\t%d\t",pSystem ->stu[i].name, pSystem ->stu[i].num); //打印姓名和学号
        for(int j = 0; j < 3; j++)
        {
            printf("%.llf\t",pSystem ->stu[i].score[j]); // 打印各科成绩
        }
        printf("%.llf\n",pSystem ->stu[i].sum);  // 打印总分
    }
}

//查找学生姓名函数
int searchArray(struct stuSystem* pSystem, const char* name)
{
    for(int i = 0; i < pSystem ->curSize; i++)
    {
        if(strcmp(pSystem ->stu[i].name, name) == 0) // 运用比较字符串进行比较
            return i;             // 如果成功找到,返回数组下标
    }
    return -1;   // 没有找到,返回-1
}

//删除(学生信息)数组函数(数组的移位操作)
void deleteArray(struct stuSystem* pSystem, const char* name)
{
    int pos = searchArray(pSystem, name);
    if(pos == -1)
    {
        printf("没有找到此学生,无法删除!\n");
    }
    else
    {
        //利用指针的移位删除数组
        for(int i = pos; i < pSystem ->curSize - 1; i++)
        {
            pSystem ->stu[i] = pSystem -> stu[i + 1];
        }
        pSystem ->curSize--;
        printf("删除成功!\n");
    }
}

//修改(学生信息)数组函数
void modifyArray(struct stuSystem* pSystem, const char* name)
{
    int pos = searchArray(pSystem, name);
    if(pos == -1)
    {
        printf("没有找到此学生,无法修改!\n");
    }
    else
    {
        printf("请输入该生新的姓名和学号:");
        scanf("%s%d",pSystem ->stu[pos].name,&pSystem ->stu[pos].num);
        printf("请输入新的三门课的成绩:");
        pSystem ->stu[pos].sum = 0;  //初始为零
        for(int i = 0; i < 3; i++)   //重新赋值
        {
            scanf("%lf",&pSystem ->stu[pos].score[i]);
            pSystem ->stu[pos].sum += pSystem ->stu[pos].score[i];
        }
        printf("修改成功 \n");
    }
}

//(数组的)排序函数(冒泡排序)
void SortBySum(struct stuSystem* pSystem)
{
    //按照总分排序
    for(int i = 0; i < pSystem ->curSize; i++)
    {
        for(int j = 0; j < pSystem ->curSize - i - 1; j++)
        {
            if(pSystem ->stu[j].sum < pSystem ->stu[j + 1].sum)
            {
                struct student temp = pSystem ->stu[j];
                pSystem ->stu[j] = pSystem ->stu[j + 1];
                pSystem ->stu[j + 1] = temp;
            }
        }
    }
}

//整个系统的文件操作就是数组的文件操作
void readFile(struct stuSystem* pSystem, const char* fileName)
{
    FILE* read = fopen(fileName, "r"); //打开文件
    if(read == NULL) //如果打开失败
    {
        read = fopen(fileName, "w+"); //创立一个新的文件
        fclose(read); //关闭文件
    }
    else
    {
        pSystem ->curSize = 0;
        while(1) //feof--检测文件的末尾指示器是否被设置
        {
            if(feof(read))
            {
                break;
            }
            //如果没有设置,重新设置
            int result = fscanf(read, "%s\t%d\t", pSystem ->stu[pSystem->curSize].name, &pSystem->stu[pSystem->curSize].name);
            for(int j = 0; j < 3; j++)
            {
                result = fscanf(read, "%lf\t", &pSystem->stu[pSystem->curSize].score[j]);
            }
            result = fscanf(read, "%lf\t", &pSystem->stu[pSystem->curSize].sum);
            pSystem->curSize++;
        }
    }
}

//更改文件操作
void saveFile(struct stuSystem* pSystem, const char* fileName)
{
    FILE* save = fopen(fileName, "w"); //从文件头开始写入
    for(int i = 0; i < pSystem->curSize; i++)
    {
        //用打印文件函数将所有的信息打印在文件中
        fprintf(save,"%s\t%d\t", pSystem->stu[i].name,pSystem->stu[i].num);
        for(int j = 0; j < 3; j++)
        {
            fprintf(save, "%.1lf\t",pSystem->stu[i].score[j]);
        }
        fprintf(save, "%.1lf\n", pSystem->stu[i].sum);
    }
    fclose(save); //关闭文件
}

//寻找并打开某一个系统的函数(打开系统的钥匙)
void keyDown(struct stuSystem* pSystem)
{
    // 按键输入+开关语句(switch)
    int userKey = 0;
    scanf("%d",&userKey); // 输入钥匙
    int result = userKey;
    int pos = 0;         //  查找判断
    char name[18] = "";
    switch(userKey)      // 用钥匙打开系统的某个操作
    {
    case 0:
        printf("------------退出系统-----------\n");
        printf("退出成功 \n");
        system("pause");
        exit(0); //退出界面函数
        break;
    case 1:
        printf("------------录入学生信息-----------\n");
        inputStu(pSystem);  //调用输入函数
        saveFile(pSystem, "student.txt"); //调用修改文件操作函数
        break;
    case 2:
        printf("------------浏览学生信息-----------\n");
        printfArray(pSystem); //调用打印学生信息函数
        break;
    case 3:
        printf("------------删除学生信息-----------\n");
        printf("请输入要删除学生的姓名:");
        scanf("%s",name);
        deleteArray(pSystem, name); //调用删除函数
        break;
    case 4:
        printf("------------修改学生信息-----------\n");
        printf("请输入修改学生的姓名:");
        scanf("%s", name);
        modifyArray(pSystem, name);//调用修改函数
        saveFile(pSystem, "student.txt");  //调用修改文件操作函数
        break;
    case 5:
        printf("------------查找学生信息-----------\n");
        printf("请输入要查找的学生的姓名:");
        scanf("%s",name);
        pos = searchArray(pSystem, name); // 调用查找函数
        if(pos == -1)
        {
            printf("未找到相关学生信息!\n");
        }
        else
        {
            printf("姓名\t编号\t数学\t英语\t体育\t总分\n");
            printf("%s\t%d\t",pSystem ->stu[pos].name, pSystem ->stu[pos].num); //打印姓名和学号
            for(int i = 0; i < 3; i++)
            {
                printf("%.lf\t", pSystem ->stu[pos].score[i]); // 打印各科成绩
            }
            printf("%.lf\n", pSystem ->stu[pos].sum);  // 打印总分
        }
        break;
    case 6:
        printf("------------学生排序信息-----------\n");
        SortBySum(pSystem);  //调用排序函数
        printfArray(pSystem);  //然后调用打印函数打印信息
        break;
    default:
        printf("输入错误!请重新输入!\n");
        break;

    }
}

int main()
{
    struct stuSystem* pSystem = createSystem(); //创建一个结构指针插入某个系统
    readFile(pSystem, "student.txt"); // 调用(读取/系统)文件操作函数并设立一个文件
    while (1)
    {
        makeMenu();   // 调用函数并打印出菜单
        keyDown(pSystem);  //调用打开系统函数
        system("pause");
        system("cls"); // 刷新屏幕
    }
    return 0;
}

如果对你有帮助,一定要三连支持一下哦!!! 

  • 11
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
C语言学生成绩管理系统(以包含文件的形式写的),结构体,链表,数组,以下是main.c #include #include #include #define m 3/*宏定义m的值为3*/ struct node/*链表初始化*/ { char name[20]; int no; float score[m]; float sum; float avg; struct node *next; }; char ch[m+4][20]={{"学号"},{"姓名"},{"语文"},{"数学"},{"英语"},{"总分"},{"平均分"}};/*定义并初始化一个全局二维字符数组*/ #include "save.c"/*包含保存文件*/ #include "read.c"/*包含读取文件*/ #include "output.c"/*包含打印文件*/ #include "set.c"/*包含录入文件*/ #include "demand.c"/*包含查询文件*/ #include "sort.c"/*包含排序文件*/ #include "modified.c"/*包含修改文件*/ #include "add.c"/*包含添加文件*/ #include "del.c"/*包含删除文件*/ void main() { int n; printf("\n\t\t\t欢迎使用学生成绩管理系统\n\n"); printf("\t\t\t\t\t\t制 作: XIA XIA\n"); do { printf("\n\n1:学生成绩录入,并保存\n"); printf("2:学生成绩查询\n"); printf("3:学生成绩的排序\n"); printf("4:学生成绩的修改\n"); printf("5:学生成绩的打印\n"); printf("6:学生信息的添加\n"); printf("7:学生信息的删除\n"); printf("0:退出学生成绩管理系统\n\n\n"); printf("输入你要执行操作的相应序号\n"); scanf("%d",&n);/*输入相就的操作的序号*/ switch (n) { case 1: set();break;/*调用录入函数*/ case 2: demand();break;/*调用查询函数*/ case 3: sort();break;/*调用排序函数*/ case 4: modified();break;/*调用修改函数*/ case 5: output();break;/*调用打印函数*/ case 6: add();break;/*调用添加函数*/ case 7: del();break;/*调用删除函数*/ case 0: printf("正在退出学生成绩管理系统......\n");exit(0);/*直到输入“0”退出学生成绩管理系统*/ default:printf("输入错误码,请重新输入\n"); } }while(1); }
学生成绩管理系统是一个使用Java语言编写的项目,用于管理学生的成绩信息。该项目采用文件存储的方式来保存学生的成绩数据。 在该系统中,每个学生的成绩信息包括学号、姓名、班级、科目及分数,每个学生的信息存储在一个独立的文件中。系统提供了添加学生信息、查找学生信息、修改学生信息和删除学生信息等基本功能。 在源代码实现中,首先需要创建一个学生类(Student),包含学号、姓名、班级、科目和分数等属性。然后,通过文件操作的方式,将学生对象存储在文件中。文件的存储可以使用文本文件(如CSV文件)或二进制文件(如序列化对象)来实现。在文件读写操作中,可以使用Java的IO流进行处理。 对于添加学生信息功能,可以通过从用户获取输入并创建学生对象,然后将学生对象写入文件来实现。查找学生信息功能可以通过读取文件中的数据,并根据用户提供的学号或姓名进行匹配,返回对应的学生信息。修改和删除学生信息功能可以通过读取文件中的数据,并根据用户提供的学号或姓名进行查找定位,并更新或删除对应的学生信息。 该项目的文件存储方式可以实现学生成绩信息的长期保存和管理。同时,文件存储也具有灵活性,可以方便地对学生信息进行新增、修改和删除操作。另外,文件存储也方便与其他系统进行数据共享和交互。 总结而言,学生成绩管理系统是一个用于管理学生成绩信息的Java项目,通过文件存储实现了学生信息的保存和管理。该项目可以方便地操作学生信息的增删改查,并且具有长期保存和与其他系统数据交互的优势。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

永夜天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值