学生信息管理系统

【实验时间】:2022年6月1日星期三

【实验地点】:家中

【实验目的】:

(1)培养和锻炼对具有一定复杂度和规模的问题分析与求解能力

(2)掌握程序设计的综合方法,能综合应用各种数据类型实现较为复杂数据的存储

(3)培养良好的C程序设计风格与代码规范意识

【实验过程】:

学生成绩管理

设计一个菜单驱动的学习成绩管理程序,管理n个学生3门考试科目成绩,实现以下功能:

  1. 能够新增学生信息,并计算总分和平均分
  2. 能够根据学号修改和删除某个学生的信息
  3. 能够显示所有学生的成绩信息
  4. 能够分别按总分和学号进行排序
  5. 能够根据学号查询该学生的基本信息
  6. 学生成绩数据最终保存在文件中,能够对文件读、写学生数据

菜单形式如下:

Management for Students’ scores

  1. Append record
  2. List record
  3. Delete record
  4. Modify record
  5. Search record
  6. Sort in descending order by sum
  7. Sort in ascending order by sum
  8. Sort in descending order by Id
  9. Sort in ascending order by Id

     

【实验目的】:

(1)培养和锻炼对具有一定复杂度和规模的问题分析与求解能力

(2)掌握程序设计的综合方法,能综合应用各种数据类型实现较为复杂数据的存储

(3)培养良好的C程序设计风格与代码规范意识

【实验过程】:

学生成绩管理

设计一个菜单驱动的学习成绩管理程序,管理n个学生3门考试科目成绩,实现以下功能:

  1. 能够新增学生信息,并计算总分和平均分
  2. 能够根据学号修改和删除某个学生的信息
  3. 能够显示所有学生的成绩信息
  4. 能够分别按总分和学号进行排序
  5. 能够根据学号查询该学生的基本信息
  6. 学生成绩数据最终保存在文件中,能够对文件读、写学生数据

菜单形式如下:

Management for Students’ scores

  1. Append record
  2. List record
  3. Delete record
  4. Modify record
  5. Search record
  6. Sort in descending order by sum
  7. Sort in ascending order by sum
  8. Sort in descending order by Id
  9. Sort in ascending order by Id

     W.Write to a File
     R. Read from a File
     0. Exit

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <windows.h>
#define N 100

int If_End=0;//判断是否结束
int Last=0;//存储添加学生个数
FILE *file;

struct Students_Message//学生信息
{
    int Id;
    int Score1;
    int Score2;
    int Score3;
    double Average_Score;
    double Sum_Score;

}Students[N];

void putout()//在显示界面输出信息
{
    for(int i=0;i<Last;i++)
    {
        if(Students[i].Id!=0)
        printf("学生id: %d 三门成绩分别为:%d %d %d 总成绩: %lf 平均分: %lf\n",Students[i].Id,Students[i].Score1,Students[i].Score2,Students[i].Score3,Students[i].Sum_Score,Students[i].Average_Score);
    }
}

void Menu()//成绩管理系统菜单界面
{
    printf("Management for Students’ scores\n");
    printf("1. Append record\n");
    printf("2. List record\n");
    printf("3. Delete record\n");
    printf("4. Modify record\n");
    printf("5. Search record\n");
    printf("6. Sort in descending order by sum\n");
    printf("7. Sort in ascending order by sum\n");
    printf("8. Sort in descending order by Id\n");
    printf("9. Sort in ascending order by Id\n");
    printf("W. Write to a File\n");
    printf("R. Read from a File\n");
    printf("0. Exit\n");
}

void Judge(char x)//判断进行哪一种操作
{
    if(x=='1') Add_Student();
    if(x=='2') Message_List();
    if(x=='3') Delete_Student();
    if(x=='4') Modify_Student();
    if(x=='5') Search_Student();
    if(x=='6') Sort_Sum_Down();
    if(x=='7') Sort_Sum_Up();
    if(x=='8') Sort_Student_Id_Down();
    if(x=='9') Sort_Student_Id_Up();
    if(x=='0') If_End=1;
    if(x=='W') Write_File();
    if(x=='R') Read_File();
}

void Add_Student()//添加学生信息
{
    printf("请输入要添加信息的学生id: ");
    fscanf(file,"%d",&Students[Last].Id);
    printf("%d\n",Students[Last].Id);//让每一步的数据读取在操作界面可视

    printf("请输入学生成绩三科(以空格间隔): ");
    fscanf(file,"%d %d %d",&Students[Last].Score1,&Students[Last].Score2,&Students[Last].Score3);
    printf("%d %d %d\n",Students[Last].Score1,Students[Last].Score2,Students[Last].Score3);//让每一步的数据读取在操作界面可视

    Students[Last].Sum_Score=Students[Last].Score1+Students[Last].Score2+Students[Last].Score3;
    Students[Last].Average_Score=Students[Last].Sum_Score/3.0;
    Last++;
}

void Swap_Message(int *a,int *b)//交换学生的每一单项数据
{
    int tem=*a;
    *a=*b;
    *b=tem;
}

void Swap(int a,int b)//用于交换学生a,b在结构体中的位置
{
    Swap_Message(&Students[a].Id,&Students[b].Id);
    Swap_Message(&Students[a].Score1,&Students[b].Score1);
    Swap_Message(&Students[a].Score2,&Students[b].Score2);
    Swap_Message(&Students[a].Score3,&Students[b].Score3);

    Students[a].Sum_Score=Students[a].Score1+Students[a].Score2+Students[a].Score3;
    Students[a].Average_Score=Students[a].Sum_Score/3.0;

    Students[b].Sum_Score=Students[b].Score1+Students[b].Score2+Students[b].Score3;
    Students[b].Average_Score=Students[b].Sum_Score/3.0;
}

void Delete_Student()//对学生信息进行删除
{
    int tar;
    int rate;//某学生信息在结构体中的位置

    printf("请输入要删除的学生id: ");
    fscanf(file,"%d",&tar);
    printf("%d\n",tar);

    for(int i=0;i<Last;i++)
    {
        if(Students[i].Id==tar)
        {
            rate=i;
            break;
        }
    }

    while(rate<Last)
    {
        Swap(rate,rate+1);
        rate++;
    }
    Last--;
}

void Modify_Student()//对学生信息进行修改
{
     int tar;
     int rate;
     printf("请输入要修改学生的id号: ");
     fscanf(file,"%d",&tar);
     printf("%d\n",tar);//让每一步的数据读取在操作界面可视

     for(int i=0;i<Last;i++)
     {
        if(Students[i].Id==tar)
        {
            rate=i;
            break;
        }
     }

     printf("请输入学生三科成绩(以空格间隔): ");

     fscanf(file,"%d%d%d",&Students[rate].Score1,&Students[rate].Score2,&Students[rate].Score3);
     printf("%d %d %d\n",Students[rate].Score1,Students[rate].Score2,Students[rate].Score3);

     Students[rate].Sum_Score=Students[rate].Score1+Students[rate].Score2+Students[rate].Score3;
     Students[rate].Average_Score=Students[rate].Sum_Score/3.0;
}

void Sort_Student_Id_Down()//对学生进行按id降序排序
{
     printf("学生成绩按id从小到大排序名单如下:\n");
     for(int i=0;i<Last;i++)
     {
         for(int j=i+1;j<Last;j++)
         {
             if(Students[i].Id>Students[j].Id)
                Swap(i,j);
         }
     }
     putout();

}

void Sort_Student_Id_Up()//对学生进行按id升序排序
{
     printf("学生成绩按id从大到小排序名单如下:\n");
     for(int i=0;i<Last;i++)
     {
         for(int j=i+1;j<Last;j++)
         {
             if(Students[i].Id<Students[j].Id)
                Swap(i,j);
         }
     }
     putout();

}

void Sort_Sum_Down()//对学生进行按总成绩降序排序
{
     printf("学生按总成绩从小到大排序名单如下:\n");

     for(int i=0;i<Last;i++)
     {
         for(int j=i+1;j<Last;j++)
         {
             if(Students[i].Sum_Score>Students[j].Sum_Score)
                Swap(i,j);
         }
     }
     putout();

}

void Sort_Sum_Up()//对学生进行按总成绩升序排序
{
     printf("学生按总成绩从大到小排序名单如下:\n");
     for(int i=0;i<Last;i++)
     {
         for(int j=i+1;j<Last;j++)
         {
             if(Students[i].Sum_Score<Students[j].Sum_Score)
                Swap(i,j);
         }
     }
    putout();

}

void Search_Student()//搜索某学生信息
{
     printf("输入要查询学生的id\n");
     int tar;
     int rate;//某学生信息在结构体中的位置

     fscanf(file,"%d",&tar);
     printf("%d\n",tar);//让每一步的数据读取在操作界面可视

     for(int i=0;i<Last;i++)
     {
        if(Students[i].Id==tar)
        {
            printf("学生id: %d 三门成绩分别为:%d %d %d 总成绩: %lf 平均分: %lf\n",Students[i].Id,Students[i].Score1,Students[i].Score2,Students[i].Score3,Students[i].Sum_Score,Students[i].Average_Score);
            break;
        }
     }
}

void Write_File()//写入文件
{
    FILE *file2;
    file2 = fopen("C:/Users/86135/Desktop/list.txt","r");
	fwrite(&Students[0],sizeof(Students[0]),100,file2);
    fclose(file2);
}

void Read_File()//读取文件数据
{
	file = fopen("C:/Users/86135/Desktop/students.txt","r");
	if(file==NULL)//如果未打开就提示读取错误
	{
	  printf("读取信息失败\n");
	}else{
      printf("读取信息成功\n");
    }
}

void Message_List()//显示所有学生信息
{

     putout();
     printf("\n");

}

int main()
{

    Menu();
    Read_File();
    //Message_List();

    while(1)
    {
        char chance;
        fscanf(file,"%c",&chance);
        Judge(chance);

        if(If_End==1) break;
    }
    fclose(file);

    Write_File();//最终成绩写入文件

    return 0;
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值