Zsh413 2023-03-06 21:39 采纳率: 0%
浏览 45

c语言学生管理系统 如何添加文件保存数据。

想给下面的小程序 加一个文件 储存数据 请问该怎么写?谢谢!

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct
{
    char no[20];//学号// 
    char name[20];
    char cls[30]; //班级// 
    float grade[10];//四门单科成绩// 
    int num1;//名次// 
    float total;
    float mark[10];//评分// 
    int num2;
}stu; 
int search(stu t[],int n,char *s);//查找,参数为记录数组和记录条数以及姓名s// 
void print(stu temp);//显示指定的一条记录// 
int del(stu t[],int n);//删除记录// 
int a_student(stu t[],stu T[],int n);//四门总成绩排序// 
int b_student(stu t[],int n);//综合成绩排序// 
int menu_select();//主菜单函数//
void list(stu t[],int n);//显示记录// 
int insert(stu t[],stu a[],int n);//插入、录入// 
void m_student(stu t[],int n);//修改数据// 
int main()
{
    int i;
    char s[20];
    stu adr[50],ad[50],a[50];//定义数组// 
    int length=0;//保存长度记录// 
    for(;;)//无限循环 //
    {
        
        switch(menu_select())
        {
            case 1:
                length=insert(adr,ad,length); 
                break;
            case 2:
                a_student(adr,ad,length);
                b_student(ad,length);
                list(ad,length);
                break;
            case 3:
                printf("请输入姓名或学号\n"); 
                scanf("%s",s);
                i=search(adr,length,s);
                if(i==-1)
                {
                    printf("未找到!\n");
                }
                else
                {
                    print(ad[i]);
                }
                break;
            case 4:
                length=del(ad,length);
                break;
            case 5:
                m_student(ad,length);
                a_student(ad,a,length);
                b_student(a,length);
                break;
            case 6:
                    exit(0); 
        }
        system("pause");
    }
    return 0;
}


int search(stu t[],int n,char *s)//查找,参数为记录数组和记录条数以及姓名s// 
{
    int i;
    for(i=0;i<n;i++)
    {
        if(strcmp(s,t[i].name)==0||strcmp(s,t[i].no)==0)//比较,记录中的姓名是否与待比较的姓名相同// 
        {
            return i;//记录下标// 
        }
    }
    return -1;
}

void print(stu temp)//显示指定的一条记录// 
{
    printf("\n\n******************************************学生信息******************************************************\n");
    printf("学号       姓名     班级       语文  数学  英语  物理  平均成绩 成绩排名   活动评分  考勤评分  评分成绩   评分排名\n");
    printf("--------------------------------------------------------------------------------------------------------\n");
    printf("%-20s%-20s%-10s",temp.no,temp.name,temp.cls);
    printf("%-.1f    %-.1f    %-.1f    %-.1f    %-.1f    %-2d  ",temp.grade[0],temp.grade[1],temp.grade[2],temp.grade[3],temp.grade[4],temp.num1);
    printf("  %-.1f   %-.1f   %-.1f   %-2d\n",temp.mark[0],temp.mark[1],temp.mark[2],temp.num2);
    printf("*****************************************************************************************************\n");
}

int del(stu t[],int n)//删除记录// 
{
    char s[20];//删除的姓名// 
    int ch=0;
    int i,j;
    printf("输入要删除的姓名\n");
    scanf("%s",s);
    i=search(t,n,s);//调用查找函数// 
    if(i==-1)
    {
        printf("未找到,无法删除\n");
    }
    else
    {
        print(t[i]);//输出该条消息// 
        printf("确认是否删除(1/0)\n");//确认是否删除// 
        scanf("%d",&ch);
        if(ch==1)
        {
            for(j=i+1;j<n;j++)//删除该记录,实际后续记录前移// 
            {
                strcpy(t[j-1].no,t[j].no);
                strcpy(t[j-1].name,t[j].name);
                strcpy(t[j-1].cls,t[j].cls);
                t[j-1].grade[0]=t[j].grade[0];
                t[j-1].grade[1]=t[j].grade[1];
                t[j-1].grade[2]=t[j].grade[2];
                t[j-1].grade[3]=t[j].grade[3];
                t[j-1].grade[4],t[j].grade[4];
                t[j-1].num1,t[j].num1;
                t[j-1].mark[0],t[j].mark[0];
                t[j-1].mark[1],t[j].mark[1];
                t[j-1].mark[2],t[j].mark[2];
                t[j-1].num2,t[j].num2;
            }
            n--;//记录数减一 //
        }
    }
    return n;
}

int b_student(stu t[],int n)
{
    int i,j,k;
    stu te; 
    for(k=0;k<n-1;k++)
    {
        for(j=k+1;j<n;j++)
        {
            if(t[k].mark[2]<t[j].mark[2])//将每位学生的总成绩进行排名// 
            {
                te=t[k];
                t[k]=t[j];
                t[j]=te;
            }
        }
    }
    for(i=0;i<n;i++)
    {
        t[i].num2=i+1;
    }
}

int a_student(stu t[],stu T[],int n)
{
    int i,j,k;
    stu temp; 
    for(k=0;k<n-1;k++)
    {
        for(j=i+1;j<n;j++)
        {
            if(t[k].total<t[j].total)
            {
                temp=t[k];
                t[k]=t[j];
                t[j]=temp;
            }
        }
    }
    for(i=0;i<n;i++)
    {
        t[i].num1=i+1;
        for(j=0;j<n;j++)
        {
            if(t[i].total==T[j].total)
            {
                T[j].num1=t[i].num1;
            }
        }
    }
    
}


int menu_select()//主菜单函数//
{
    int c;
    system("cls");//清屏// 
    printf("\n\n\n     菜单:\n\n");
    printf(" 1.录入学生信息\n");
    printf(" 2.显示学生信息\n");
    printf(" 3.查找信息 \n");
    printf(" 4.删除同学信息\n");
    printf(" 5.修改学生数据\n");
    printf(" 6.程序结束\n");
    printf("       \n");
    do
    {
        scanf("%d",&c);//输入选项// 
        
    }
    while(c<1||c>6);
    return c;
}

void list(stu t[],int n)//显示记录// 
{
    int i,k;
    system("cls");
    printf("\n\n*****************************************学生信息*********************************************************\n");
    printf("学号       姓名     班级       语文  数学  英语  物理  平均成绩 成绩排名   活动评分  考勤评分  评分成绩   评分排名\n");
    printf("-------------------------------------------------------------------------------------------------------------\n");
    for(i=0;i<n;i++)
    {
        printf("%-10s%-10s%-10s",t[i].no,t[i].name,t[i].cls);
        printf("%-.1f    %-.1f    %-.1f    %-.1f    %-.1f    %-2d  ",t[i].grade[0],t[i].grade[1],t[i].grade[2],t[i].grade[3],t[i].grade[4],t[i].num1);
        printf("  %-.1f   %-.1f   %-.1f   %-2d\n",t[i].mark[0],t[i].mark[1],t[i].mark[2],t[i].num2);
        if((i+1)%10==0)//判断输出是否达到10条记录// 
        {
            system("pause");//冻结屏幕,便于观察程序的执行结果// 
        }
    }
    printf("*********************************************************************************************************\n");
}

int insert(stu t[],stu a[],int n)//插入、录入// 
{
    stu temp;
    int i=0,j;
    printf("请输入学号:\n");
    scanf("%s",temp.no);
    printf("请输入姓名:\n");
    scanf("%s",temp.name);
    printf("请输入班级:\n");
    scanf("%s",temp.cls);
    printf("请输入成绩:\n");
    scanf("%f %f %f %f",&temp.grade[0],&temp.grade[1],&temp.grade[2],&temp.grade[3]);
    printf("请输入评分:\n");
    scanf("%f %f",&temp.mark[0],&temp.mark[1]);
    temp.total=temp.grade[0]+temp.grade[1]+temp.grade[2]+temp.grade[3];//求每个学生的总成绩// 
    temp.grade[4]=temp.total/4;//计算平均成绩// 
    //试平均成绩、活动评分、考勤评分分别占综合测评总分的70%,15%,15%。//
    temp.mark[2]=temp.grade[4]*0.70+temp.mark[0]*0.15+temp.mark[1]*0.15;
    t[n]=temp;
    a[n]=t[n];
    n++;
    return n;
}

void m_student(stu t[],int n)
{
    int s=0,i;
    char k[20];
    stu T;
    printf("修改的学号或姓名\n");
    scanf("%s",k);
    i=search(t,n,k);
    if(i==-1)
    {
        printf("信息不存在\n");
    }
    else
    {
        printf("修改\n");
        printf("请输入班级:\n");
        scanf("%s",t[i].cls);
        printf("请输入成绩:\n");    
        scanf("%f %f %f %f",&t[i].grade[0],&t[i].grade[1],&t[i].grade[2],&t[i].grade[3]);
        printf("请输入评分:\n");
        scanf("%f %f",&t[i].mark[0],&t[i].mark[1]);
        t[i].total=t[i].grade[0]+t[i].grade[1]+t[i].grade[2]+t[i].grade[3];//求每个学生的总成绩// 
        t[i].grade[4]=t[i].total/4;//计算平均成绩// 
        //试平均成绩、活动评分、考勤评分分别占综合测评总分的70%,15%,15%。//
        t[i].mark[2]=t[i].grade[4]*0.70+t[i].mark[0]*0.15+t[i].mark[1]*0.15;
    }
    printf("信息修改完毕\n");
} 

  • 写回答

2条回答 默认 最新

  • 「已注销」 2023-03-06 21:56
    关注

    “Devil组”引证GPT后的撰写:
    以下步骤:

    • 1.定义一个文件指针类型的变量,用于打开、关闭文件,读写文件等操作。
    • 2.在程序中添加一个函数,用于将数据写入文件中。例如,可以定义一个名为write_data的函数,该函数的参数包括记录数组和记录条数以及文件名。
    • 3.在程序中添加一个函数,用于从文件中读取数据。例如,可以定义一个名为read_data的函数,该函数的参数包括记录数组和记录条数以及文件名。
    • 4.在程序中的主函数中添加代码,根据用户选择的操作,调用write_data和read_data函数实现数据的读写。
    评论

报告相同问题?

问题事件

  • 创建了问题 3月6日

悬赏问题

  • ¥15 数据库原理及应用上机练习题
  • ¥15 征集Python提取PDF文字属性的代码
  • ¥15 如何联系真正的开发者而非公司
  • ¥15 有偿求苍穹外卖环境配置
  • ¥15 代码在keil5里变成了这样怎么办啊,文件图像也变了,
  • ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
  • ¥15 clousx6整点报时指令怎么写
  • ¥30 远程帮我安装软件及库文件
  • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
  • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?