c语言帮帮忙 学生成绩管理 要用流程图描述实现算法,根据算法进行代码的编写

编写一个程序来管理学生成绩,本系统能实现以下功能:
输入信息:学生学号、姓名以及各门课程成绩的输入,要求至少有三门课程成绩;计算学生的总成绩和平均分;
修改信息:对学生学号、姓名以及各门课程成绩进行修改;
增加信息:添加新学生信息;
插入信息:在指定位置插入学生信息;
删除信息:删除指定学生信息;
查询:根据姓名查询某个学生的成绩;根据学号区间段查询某些学生的成绩;根据课程编号或名称查询某门课程的成绩。
排序:根据要求,能按学生的学号、姓名、总分或者平均分分别进行升序和降序排序,并显示排序后的结果。
统计:根据课程编号或名称、学生成绩总分或者平均分统计出不同分数段的学生人数和百分比;
输出:输出所有学生信息或者查询结果。

// biaobiao.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"

#include<stdio.h>

#include<math.h>

#include <string.h>

#define MaxSize 100

typedef struct stud

{

char name[10];

int num;

float c;

float math;

float english;

float zf;

int pnum;

int pzf;

}Stud;

void ReadFile(Stud stud[],int &n)

{

FILE *fp;

long length;

int i;

if((fp=fopen("stud.dat","rb"))==NULL){

n=0;

return;

}

fseek(fp,0,2);

length=ftell(fp);

rewind(fp);

n=length/sizeof(Stud);

if(n!=0)

n--;

       else

     stud[0].pnum=stud[0].pzf=-1;

       for(i=0;i<=n;i++)

fread(&stud[i],sizeof(Stud),1,fp);

       fclose(fp);

}

void Clearup(Stud stud[],int &n)

{

FILE *fp;

if((fp=fopen("stud.dat","wb"))==NULL){

printf(">> 文件不能打开\n");

return;

}

stud[0].pnum=stud[0].pzf=-1;

n=0;

fclose(fp);

printf(" ============================================================================\n");

}

void SaveFile(Stud stud[],int &n)

{

int i;

FILE *fp;

if((fp=fopen("stud.dat","wb"))==NULL){

printf(">> 文件不能打开\n");

return;

}

if(n>1)

 for(i=0;i<=n;i++)

fwrite(&stud[i],sizeof(Stud),1,fp);

       fclose(fp);

printf(" ============================================================================\n");

}

void Input(Stud stud[],int &n)

int i;

int flag=0;

printf(">>请输入登记学生 姓名 学号 C语言成绩 数学成绩 英语成绩:\n");

    n++;

scanf("%s%d%f%f%f",&stud[n].name,&stud[n].num,&stud[n].c,&stud[n].math,&stud[n].english);

stud[n].zf=stud[n].c+stud[n].math+stud[n].english;

for(i=0;i<=n-2;i++)

{

if(stud[i].num==stud[n].num)

{

flag=flag+1;

}

}

if(flag!=0)

printf("学号输入重复,请检查!!\n");

stud[n].pnum=stud[n].pzf=0;

printf(" ============================================================================\n");

}

void OutputFile(Stud stud[],int n)

{

int i;

if(n<1)

{

 printf(">>没任何记录\n");

 return;

}

printf(" -----------------------------------------------------------------\n");

printf("|    姓名    | 学号 | C语言成绩 | 数学成绩 | 英语成绩 |    总分  |\n");

printf(" -----------------------------------------------------------------\n");

for(i=1;i<=n;i++)

    {

printf("|%10s  |  %3d |  %6.2f   |   %6.2f |   %6.2f | %6.2f   |\n",stud[i].name,stud[i].num,stud[i].c,stud[i].math,stud[i].english,stud[i].zf);

printf(" -----------------------------------------------------------------\n");

}

}

void Dispnum(Stud stud[],int n)

{ int i=2,j;

int k=stud[0].pnum;

if(n<1)

{

 printf(">>没有这种记录,不能进行排序\n");

 return;

}

stud[0].pnum=1;stud[1].pnum=-1;

while(i<=n)

{

 j=0;

 while(stud[j].pnum!=-1 && stud[stud[j].pnum].num<stud[i].num)

j=stud[j].pnum;

stud[i].pnum=stud[j].pnum;

    stud[j].pnum=i;

    i++;

}

 printf(" -----------------------------------------------------------------\n");

 printf("|    姓名    | 学号 | C语言成绩 | 数学成绩 | 英语成绩 |    总分  |\n");

 printf(" -----------------------------------------------------------------\n");

while(k!=-1)

{  

 printf("|%10s  |  %3d |  %6.2f   |   %6.2f |   %6.2f | %6.2f   |\n",stud[k].name,stud[k].num,stud[k].c,stud[k].math,stud[k].english,stud[k].zf);

 printf(" -----------------------------------------------------------------\n");

 k=stud[k].pnum;

}

printf(" ============================================================================\n");

}

void Dispzf(Stud stud[],int n)

{ int i=2,j;

int k=stud[0].pzf;

if(n<1)

{

 printf(">>没有记录,不能进行排序\n");

 return;

}

stud[0].pzf=1;stud[1].pzf=-1;

while(i<=n)

{

 j=0;

 while(stud[j].pzf!=-1 && stud[stud[j].pzf].zf<stud[i].zf)

j=stud[j].pzf;

 stud[i].pzf=stud[j].pzf;

 stud[j].pzf=i;

 i++;

}

 printf(" -----------------------------------------------------------------\n");

 printf("|    姓名    | 学号 | C语言成绩 | 数学成绩 | 英语成绩 |    总分  |\n");

 printf(" -----------------------------------------------------------------\n");

while(k!=-1)

{  

 printf("|%10s  |  %3d |  %6.2f   |   %6.2f |   %6.2f | %6.2f   |\n",stud[k].name,stud[k].num,stud[k].c,stud[k].math,stud[k].english,stud[k].zf);

 printf(" -----------------------------------------------------------------\n");

 k=stud[k].pzf;

}

printf(" ============================================================================\n");

}

void xuehao(Stud stud[],int n)

{

int num,i,flag=0;

printf("请输入你要查询学生的学号:\n");

scanf("%d",&num);

for(i=0;i<=n;i++)

   {

if(stud[i].num==num)

{

 printf(" -----------------------------------------------------------------\n");

 printf("|    姓名    | 学号 | C语言成绩 | 数学成绩 | 英语成绩 |    总分  |\n");

 printf(" -----------------------------------------------------------------\n");

 printf("|%10s  |  %3d |  %6.2f   |   %6.2f |   %6.2f | %6.2f   |\n",stud[i].name,stud[i].num,stud[i].c,stud[i].math,stud[i].english,stud[i].zf);

 printf(" -----------------------------------------------------------------\n");

 flag++;

}

   }

  if(flag==0)printf("查询操作失败,没有你要查询的学生!!!\n");

  else printf("查询操作成功!!!\n");

  printf(" ============================================================================\n");

}

void xingming(Stud stud[],int n)

{

char name[10];

int i,flag=0;

printf("请输入你要查询的学生的姓名:\n");

scanf("%s",&name);

for(i=0;i<=n;i++)

{

if(strcmp(stud[i].name,name)==0)

        {  

printf(" -----------------------------------------------------------------\n");

    printf("|    姓名    | 学号 | C语言成绩 | 数学成绩 | 英语成绩 |    总分  |\n");

        printf(" -----------------------------------------------------------------\n");

    printf("|%10s  |  %3d |  %6.2f   |   %6.2f |   %6.2f | %6.2f   |\n",stud[i].name,stud[i].num,stud[i].c,stud[i].math,stud[i].english,stud[i].zf);

    printf(" -----------------------------------------------------------------\n");

flag++;

}

    if(flag==0)printf("查询操作失败,没有你要查询的学生!!!\n");

else printf("查询操作成功!!!\n");

printf(" ============================================================================\n");

}

 

void Modify(Stud stud[],int n)

{

int NO,j;

int flag=0;

float c,math,english;

printf("请输入你要修改学生的学号:\n");

scanf("%d",&NO);

for(j=0;j<=n;j++)

{

if(stud[j].num==NO)

{

printf("请输入你要修改的学生的 C语言成绩  数学成绩 英语成绩:\n");

scanf("%f%f%f",&c,&math,&english);

stud[j].c =c;stud[j].math=math;stud[j].english=english;

stud[j].zf=stud[j].c+stud[j].math+stud[j].english;

flag++;

}

}

    if(flag==0)printf("修改操作失败,该学号不存在!!!\n");

else printf("修改操作成功!!!\n");

printf(" ============================================================================\n");

}

void Delete(Stud stud[],int &n)

{

int NO,i,j;

int flag=0;

printf("请输入你要删除的学生的学号:\n");

scanf("%d",&NO);

for(i=0;i<=n;i++)

{

if(stud[i].num==NO)

{

for(j=i;j<n;j++)

stud[j]=stud[j+1];

flag++;

}

}

if(flag==0)printf("删除操作失败,该学号不存在!!!\n");

else {n--;

      printf("删除操作成功!!!\n");

     }

 printf(" ============================================================================\n");

}

void main()

{   double dummy=sin(0.0);

Stud stud[MaxSize];

int k, n;

  printf("                     欢迎使用学生成绩管理系统!!!\n");

  printf(" ============================================================================\n");

  ReadFile(stud,n);

  do{

 printf("            1:学生登记           2:显示学生信息\n ");

 printf("           3:清空记录           4:删除记录\n");

 printf("            5: 按学号排序输出    6:按总分排序输出\n");

 printf("            7:学号查询           8:姓名查询\n");

 printf("            9:修改               0:储存退出\n");

 printf("请选择相应的功能:");

 scanf("%d",&k);

 if(k>9&&k<0)printf("操作不当,请重新输入:\n");

 switch(k)

 {

  case 1:Input(stud,n);

break;

  case 2:OutputFile(stud,n);

break;

  case 3:Clearup(stud,n);

break;

  case 4:Delete(stud,n);

break;

  case 5:Dispnum(stud,n);

break;

  case 6:Dispzf(stud,n);

break;

  case 7:xuehao(stud,n);

break;

  case 8:xingming(stud,n);

break;

  case 9:Modify(stud,n);

break;

  case 0:SaveFile(stud,n);

break;

 }

 }while(k!=0);

效果图:

温馨提示:答案为网友推荐,仅供参考
相似回答