成绩统计系统2.0

大一做的实训项目

/* 学生成绩管理 */
#include "stdio.h"
#define PFORMAT "%4d %5d %4d %7d %8d %4d %6d %8d %7d\n"//整形输出格式控制
#define PF "%4.2f %5.2f %4.2f %7.2f %8.2f %4.2f %6.2f %8.2f %7.2f\n"//浮点形输出格式控制
#define IFORMAT "   %d %5d %5d %4d %7d %8d %4d %6d %8d %7d\n"//输入格式控制
#define MAX 45//定义变量常量,最大人数只能达到45人
typedef struct{
 int num;             //学号
 int practical;       //应用文
 int english;         //英语
 int math;     //数学
 int computer_based;  //计算机基础
 int c;     //C语言
 int pe;     //体育
 int mental_health;  //心理健康
 int thinking;    //思想道德与法律基础
 int sum;
}RECORD;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*  自定义函数声明  */
int printb();//显示
void cls();//清屏
void scanf1(int *x);
int identify(int i);//确定
int findnum(RECORD student[],int people);//查找学号
void sta(int x,int a[]);//统计各分数段人数
int fen(int *n);//显示提示录入子菜单的信息
int importing(RECORD student[],int *people);//输入子菜单
RECORD impor(RECORD student,char ch);//输入
int sum(RECORD student);//计算总分
int luru(int num,int k,int i,int);//输入各科
void output(RECORD student[],int *people);//输出子菜单
void outpu(RECORD student,int i);//输出
void add(RECORD student[],int *people);//添加记录
void delet(RECORD student[],int *people);//删除记录
void find(RECORD student[],int *people);//查找
void modify(RECORD student[],int *people);//修改
void statistical(RECORD student[],int *people);//统计人数
void most(RECORD student[],int people);//平均值
void ave(RECORD student[],int people);//求最值
void save_file(RECORD student[],int people);//保存文件
void open_file();//打开文件
/////////////////////////主函数///////////////////////////////////////////////////////////////////////////////////
void main()
{
 int people=0,x,i=1;//people是总人数,相当于定义了全局变量,因为在函数调用时,需要改变值时都是传地址。i
    RECORD student[MAX];//定义结构体数组
    do
    { 
     x=printb();//调用显示信息函数,x是返回的对应的选项
     switch(x)
     {
       case 1: i=importing(student,&people);break;//传数组和people变量的地址过去
       case 2: output(student,&people);break;
       case 3: add(student,&people);break;
       case 4: delet(student,&people);break;
       case 5: find(student,&people);break;
       case 6: modify(student,&people);break;
       case 7: statistical(student,&people);break;
       case 8: most(student,people);break;
       case 9: ave(student,people);break;
       case 10: save_file(student,people);break;
       case 11: open_file();break;
       case 12: return;
     }
 if(i==1)getch();
    }while(x!=12);//当输入是12就退出系统
    exit(0);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*      显示信息      */       
int printb(){
int x=1;
do{
 cls();
 printf("\t\t**********************************************\n");
 printf("\t\t*               成绩统计系统                 *\n");
 printf("\t\t*              欢迎进入主菜单                *\n");
 printf("\t\t*     1  成绩录入          7  统计人数       *\n");
 printf("\t\t*     2  查看成绩          8  计算最值       *\n");
 printf("\t\t*     3  添加成绩          9  算平均分       *\n");
 printf("\t\t*     4  删除记录          10 保存文件       *\n");
 printf("\t\t*     5  查找成绩          11 打开文件       *\n");
 printf("\t\t*     6  修改成绩          12 退出系统       *\n");
 printf("\t\t*                                            *\n");
 printf("\t\t*                    编者:张旺  班级:35111  *\n");
 printf("\t\t**********************************************\n\n");
 printf("\t\t\t  您的使用,是对我最大的支持\n");
 printf("\t\t    如果您有什么意见或看法,请发E-mail给我\n");
 printf("\t\t\t  zhangwang6719@foxmail.com\n");
 if(x<1||x>12)
 {
   printf("警告:请您重新选择进入的子菜单(1~12):");
 }
 else
 printf("请您选择要进入的子菜单(1~12):");
 scanf1(&x);
  }
while(x<1||x>12);//如果输入1~12之外的数,就继续循环
return x;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*    清屏   */
void cls()
{
 system("cls");
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*输入 字符串转化数字*/
void scanf1(int *x)
{
 char ch[10];
 int n,i,j=1,s=0;
 gets(ch);//从键盘上读入字符串
 for(i=strlen(ch)-1;-1!=i;i--)//测试字符串的长度,然后从前面开始取每个字符
 {
 n=ch[i]-'0';//原字符减去'0'字符,就得了相应的数值
 if(n<0||n>9)//当数值不在0到9之间,就返回120,120在整个程序中无意义
 {
  *x=120;
  return;
 }
 s+=n*j;//当输入两个以上的字符,就要对第二个字符乘j,j是不断乘10倍数
 j*=10;
 }
 *x=s;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*显示提示录入子菜单的信息*/
int fen(int *people)
{
 int k;
 cls();
 printf("\n\t\t\t欢迎进入成绩录入子菜单\n");
 /*==========选择录入成绩的方式=======*/
 printf("请选择录入成绩的方式\n");
 printf("1 一次录入一个人的所有成绩\n");
 printf("2 按科目录入\n");
 printf("3 返回主菜单\n\n请选择:");
 scanf1(&k);
 if(3==k)return k;
 while(k<1||k>3)
 {
  cls();
  printf("\t\t\t欢迎进入成绩录入子菜单\n");
  printf("警告:请重新选择录入成绩的方式\n");
  printf("1 一次性把每个人的各科输完\n2  按科目输入\n3 返回主菜单\n\n请选择:");
  scanf1(&k);
  if(3==k)return k;
 }
 /*============输入人数==========*/
 printf("请输入本班的人数,人数不能超过%d个: ",MAX);
 scanf1(people);
 while(*people<1||*people>MAX)
 {
  if(*people==0)
     printf("警告:人数不可能是没有,请重新输入: ");
  else if(*people>MAX)
     printf("警告:人数超过最大数,请重新输入: ");
  else
     printf("警告:人数不可能是负数,请重新输入: ");
  scanf1(people);
 }
 return k;//k是返回选择的方式
}
////////////////////////////////////////////////////////////////////////////////////////////////////
/* 输入子菜单 */
int importing(RECORD student[],int *people)//
{
 int peo,i,k;//peo总人数 i是循环变量 k是fen函数返回的录入方式的值,1代表记录录入方式,2是单科录入方式,3直接返回
 k=fen(&peo);//feo()函数是显示提示信息,继续把peo地址传到fen函数,feo()函数返回的K的值
 *people=peo;//人数赋值
 if(3==k)return 0;//直接返回主菜单
 /*===========记录录入方式==========*/
 if(1==k)
 {
  for(i=0;i<*people;i++)
  {
   student[i].num=3511101+i;//自动给学号赋值
   student[i]=impor(student[i],'y');
  }//调用录入函数,传单个的结构体的值,返回单个的结构体的全部值,y是在函数里相应输出学号,
 }
 /*==========单科录入方式==========*/
 else
 {
   k=1;i=0;//k代表科目,i代表人数
   while(k<9)
   {
    switch(k)
    {
      case 1: student[i].num=(3511101+i);//赋值学号
          student[i].practical=luru(student[i].num,k,i,0);break;//函数调用里k,i主要是负责文字提示
      case 2: student[i].english=luru(student[i].num,k,i,0);break;
      case 3: student[i].math=luru(student[i].num,k,i,0);break;
      case 4: student[i].computer_based=luru(student[i].num,k,i,0);break;
      case 5: student[i].c=luru(student[i].num,k,i,0);break;
      case 6: student[i].pe=luru(student[i].num,k,i,0);break;
      case 7: student[i].mental_health=luru(student[i].num,k,i,0);break;
      case 8: student[i].thinking=luru(student[i].num,k,i,0);break;
    }//luru(a,b,c,d)单科录入函数,a学号输出,b科目代码,c科目输出提示的方式,d是否输出学号的提示0代表不输出
    if(++i==*people)//当i与总人数相等时,k加1就跳到下一个科目,i又从零开始
     {k++;i=0;}
   }
 }
 for(i=0;i<*people;i++)
 student[i].sum=sum(student[i]);//调用求和函数,
 printf("\n成绩录入完毕!按任意键进入主菜单!");
 return 1;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
/*计算总分*/
int sum(RECORD student)//传地址过来,返回总分
{
 student.sum=student.practical+student.english+
 student.math+student.computer_based+student.c+
 student.pe+student.mental_health+student.thinking;
 return student.sum;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
/*  输出子菜单  */
void output(RECORD student[],int *people)
{
 int i;
 cls();//调用清屏函数
 printf("\n\t\t\t欢迎进入成绩查看子菜单\n");
 if(*people==0)
 {
  printf("您还没有录入成绩!\n按任意键进入主菜单!");
  return;
 }
 for(i=0;i<*people;i++)
 {
 outpu(student[i],i);//调用单条记录输出,i为0时输出提示信息
 }
 printf("\n按任意键进入主菜单!");
}
////////////////////////////////////////////////////////////////////////////////////////////////////
/*   添加子菜单  */
void add(RECORD student[],int *people)
{
 int x,i,m,n=0,num;//x添加方式,i循环变量,n标志学号是否存在0表示不存在,nun学号
 cls();
 printf("\n\t\t\t欢迎进入成绩添加插入子菜单\n");
 if(!(*people<MAX))//判断是否超过了最大范围
 {
  printf("警告:超过了最大限度!\n");
 }
 else
 {
  printf("请选择\n1 添加成绩  2 插入成绩\n请输入:");
  scanf1(&x);
  while(x<1||2<x)//只有当输入1和2才有效,其它数字都要重新输入
  {
   cls();
   printf("警告:只能输入1或2,请重新输入!\n");
   scanf1(&x);
  }
  if(x==1)//当X为1时,添加成绩
  {
    if(0==*people)
   student[*people].num=3511101;//当人数为零时,就重新赋值为3511101
    else
   student[*people].num=student[*people-1].num+1;//学号增加1
   student[*people]=impor(student[*people],'y');//调用录入函数
   student[*people].sum=sum(student[*people]);//计算刚录入的总分
   *people+=1;//总人数增加1
  }
  else//插入记录
  {
     cls();
     printf("请输入学号:提示学号的范围是%d到%d\n",3511101,3511100+MAX);
        scanf1(&num);
        while(num<3511101||3511100+MAX<num)//判断学号的是否有效,如果不要这个范围内就重新输入
        {
         cls();
         printf("警告:此学号超过了范围!提示学号的范围是%d到%d\n",3511101,3511100+MAX);
         printf("请重新输入:");
         scanf1(&num);
        }
        for(i=0;i<*people;i++)
         if(num==student[i].num)//查找学号是否存在
   {
     cls();
     printf("警告:此学号已经存在!");
     n=1;//标示此学号已经存在
     break;
   }
     if(0==n)
     {
       for(i=0;i<*people;i++)//查找学号所在的位置
        if(num<student[i].num)
        break;
       for(m=*people;m>i;m--)//把后面的记录全部往后面移
       {
        student[m]=student[m-1];
       }
       student[i].num=num;
    student[i]=impor(student[i],'y');//调用录入函数
    student[i].sum=sum(student[i]);//计算刚录入的总分
    *people+=1;//人数增加1
     }
     printf("\n成绩添加成功!");
  }
  }
 printf("\n按任意键进入主菜单!");
 return;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
/*    删除记录  */
void delet(RECORD student[],int *people)
{
 int x;
 cls();
 printf("\n\t\t\t欢迎进入成绩删除子菜单\n");
 if(0==*people)//判断总人数是否存在,如果没有一个人,就存在删除了
  printf("还没有成绩,请输入成绩!");
 else
 {
  x=findnum(student,*people);//调用查找学号函数,返回要查找那个元素的下标 -1表示没有这个学号
  if(-1!=x)
  {
   if(1==identify(1))//调用确定函数,当返回1时表示要删除该条记录
   {
    *people-=1;//总人数减1
    while(x<*people)
    {
   student[x]=student[x+1];//把后面的记录全部往前面移动
   x++;
    }
    printf("删除成功!\n"); 
   }
  }
    }
 printf("\n按任意键进入主菜单!"); 
}
////////////////////////////////////////////////////////////////////////////////////////////////////
/*    查找记录   */
void find(RECORD student[],int *people)
{
 int x;
 cls();
 printf("\n\t\t\t欢迎进入成绩查找子菜单\n");
 if(0==*people)//判断总人数是否存在,如果没有一个人,就存在查找
  printf("还没有成绩,无法查找,请输入成绩!");
 else
 {
  x=findnum(student,*people);//调用查找学号函数,返回要查找那个元素的下标 -1表示没有这个学号
  if(-1!=x)
  {
   outpu(student[x],0);//调用单条记录输出,0表示输出提示信息
  }
 }
 printf("\n按任意键进入主菜单!");
}
////////////////////////////////////////////////////////////////////////////////////////////////////
/*成绩修改子菜单*/
void modify(RECORD student[],int *people)
{
 int x;
 char c;
 cls();
 printf("\n\t\t\t欢迎进入成绩修改子菜单\n");
 if(0==*people)//判断总人数是否存在,如果没有一个人,就存在修改
  printf("还没有成绩,无法修改,请输入成绩!");
 else
 {
  x=findnum(student,*people);//调用查找学号函数,返回要查找那个元素的下标 -1表示没有这个学号
  if(-1!=x)
  {
   outpu(student[x],0);//显示出那条记录
   if(1==identify(0))//调用确定函数,确定是否要删除本条记录
   {
    scanf("%c",&c);//用于接收回车字符
    student[x]=impor(student[x],'n');//调用单条记录录入函数
    student[x].sum=sum(student[x]);//重新计算总分
   printf("\n修改在成功!");
   }
   else//当你输入N时,
    printf("\n修改失败!");
  }
 }
 printf("\n按任意键进入主菜单!");
}
////////////////////////////////////////////////////////////////////////////////////////////////////
/*       统计各分数段人数函数调用      */
void statistical(RECORD student[],int *people)
{
 int i,j, a[8][5]={0};//每一行存放一科成绩,每一列存在一个等级
 cls();
 printf("\n\t\t\t欢迎进入成绩统计子菜单\n");
 if(0==*people)//如果是0个人就直接返回
 {
  printf("还没有成绩,无法统计,请输入成绩!");
  printf("\n按任意键进入主菜单!");
  return;
 }
 for(i=0;i<*people;i++)
 {
  sta(student[i].practical,a[0]);//调用函数,一次只传一个人一科成绩
  sta(student[i].english,a[1]);
  sta(student[i].math,a[2]);
  sta(student[i].computer_based,a[3]);
  sta(student[i].c,a[4]);
  sta(student[i].pe,a[5]);
  sta(student[i].mental_health,a[6]);
  sta(student[i].thinking,a[7]);
 } 
 printf("\t各分数段人数  ");
 printf("100-90  90-80 80-70 70-60 60以下\n");
 for(i=0;i<8;i++)
 {
   for(j=0;j<5;j++)
   {
  if(j==0)
  {
   switch(i)
    {
   case 0: printf("\t      应用文     ");break;
   case 1: printf("\t\t英语     ");break;
   case 2: printf("\t\t数学     ");break;
      case 4: printf("\t       C语言     ");break;
   case 3: printf("\t  计算机基础     ");break;
   case 5: printf("\t\t体育     ");break;
   case 6: printf("\t    心理健康     ");break;
   case 7:printf("\t    思想道德     ");break;
    }
  }
  printf("%d     ",a[i][j]);
   }
   printf("\n");
 }
 printf("\n按任意键进入主菜单!");
}
////////////////////////////////////////////////////////////////////////////////////////////////////
/*  计算最值   */
void most(RECORD student[],int people)
{
 RECORD stu[2];//stu[0]存在最大值,stu[1]存在最小值
 int i;
 cls();
 printf("\n\t\t欢迎进入查看成绩最高分与最低分子菜单\n");
 if(0==people)//如果是0个人就直接返回
 {
  printf("还没有成绩,无法查看,请输入成绩!");
  printf("\n按任意键进入主菜单!");
  return;
 }
 stu[0]=stu[1]=student[0];//把第一记录初始化为最大、最小
 /*====查找最大、最小的各科的分数=====*/
 for(i=1;i<people;i++)
 {
   if(stu[0].practical<student[i].practical)
    stu[0].practical=student[i].practical;
   if(stu[1].practical>student[i].practical)
    stu[1].practical=student[i].practical;
   if(stu[0].english<student[i].english)
    stu[0].english=student[i].english;
   if(stu[1].english>student[i].english)
    stu[1].english=student[i].english;
   if(stu[0].math<student[i].math)
    stu[0].math=student[i].math;
   if(stu[1].math>student[i].math)
    stu[1].math=student[i].math;
   if(stu[0].computer_based<student[i].computer_based)
    stu[0].computer_based=student[i].computer_based;
   if(stu[1].computer_based>student[i].computer_based)
    stu[1].computer_based=student[i].computer_based;
   if(stu[0].c<student[i].c)
    stu[0].c=student[i].c;
   if(stu[1].c>student[i].c)
    stu[1].c=student[i].c;
   if(stu[0].pe<student[i].pe)
    stu[0].pe=student[i].pe;
   if(stu[1].pe>student[i].pe)
    stu[1].pe=student[i].pe;
   if(stu[0].mental_health<student[i].mental_health)
    stu[0].mental_health=student[i].mental_health;
   if(stu[1].mental_health>student[i].mental_health)
    stu[1].mental_health=student[i].mental_health;
   if(stu[0].thinking<student[i].thinking)
    stu[0].thinking=student[i].thinking;
   if(stu[1].thinking>student[i].thinking)
    stu[1].thinking=student[i].thinking;    
   if(stu[0].sum<student[i].sum)
    stu[0].sum=student[i].sum;
   if(stu[1].sum>student[i].sum)
    stu[1].sum=student[i].sum;    
 }
 printf("应用文 英语 数学 计算机基础 C语言 体育 心理健康 思想道德  总分\n");
 printf("单科最高分\n");
  printf(PFORMAT,stu[0].practical,stu[0].english,stu[0].math,
  stu[0].computer_based,stu[0].c,stu[0].pe,stu[0].mental_health,
  stu[0].thinking,stu[0].sum);  
 printf("单科最低分\n");
  printf(PFORMAT,stu[1].practical,stu[1].english,stu[1].math,
  stu[1].computer_based,stu[1].c,stu[1].pe,stu[1].mental_health,
  stu[1].thinking,stu[1].sum);  
 printf("\n按任意键进入主菜单!");
////////////////////////////////////////////////////////////////////////////////////////////////////
/*    平均值  */
void ave(RECORD student[],int people)
{
 float average[9];
 int i;
 cls();
 printf("\n\t\t\t欢迎进入计算平均分子菜单\n");
 if(0==people)//如果是0个人就直接返回
 {
  printf("还没有成绩,无法计算,请输入成绩!");
  printf("\n按任意键进入主菜单!");
  return;
 }
 /*===把第一条记录初始化====*/
 average[0]=student[0].practical;
 average[1]=student[0].english;
 average[2]=student[0].math;
 average[3]=student[0].computer_based;
 average[4]=student[0].c;
 average[5]=student[0].pe;
 average[6]=student[0].mental_health;
 average[7]=student[0].thinking;
 average[8]=student[0].sum;
 /*========求和========*/
 for(i=1;i<people;i++)
 {
  average[0]+=student[i].practical;
  average[1]+=student[i].english;
  average[2]+=student[i].math;
  average[3]+=student[i].computer_based;
  average[4]+=student[i].c;
  average[5]+=student[i].pe;
  average[6]+=student[i].mental_health;
  average[7]+=student[i].thinking;
  average[8]=student[i].sum;
 }
 /*========总分数除总人数==========*/
 average[0]/=people;
 average[1]/=people;
 average[2]/=people;
 average[3]/=people;
 average[4]/=people;
 average[5]/=people;
 average[6]/=people;
 average[7]/=people;
 average[8]/=people;
  printf("应用文 英语 数学 计算机基础 C语言 体育 心理健康 思想道德  总分\n");
  printf(PF,average[0],average[1],average[2],average[3],average[4],
  average[5],average[6],average[7],average[8],average[8]);   
 printf("\n按任意键进入主菜单!");
}
////////////////////////////////////////////////////////////////////////////////////////////////////
/*  单条记录录入  */
RECORD impor(RECORD student,char ch)//
{
  if('y'==ch)
  {
   cls();
   printf("学号:%d\n",student.num);
  }//luru(a,b,c,d)单科录入函数,a学号上面已经输出,b科目代码,c科目输出提示的方式,d是否输出学号的提示
    student.practical=luru(0,1,1,1);
    student.english=luru(0,2,1,1);
    student.math=luru(0,3,1,1);
  student.computer_based=luru(0,4,1,1);
  student.c=luru(0,5,1,1);
  student.pe=luru(0,6,1,1);
  student.mental_health=luru(0,7,1,1);
  student.thinking=luru(0,8,1,1);
  return student;
}
/////////////////////////////////////////////////////
/*  录入各科  */
int luru(int num,int k,int i,int ii)//学号 科目 提示科目
{
 int x;//x是从键盘得到的一个分数,并返回
 if(0==i)
  cls();
 if(0==ii)
  {
  if(0==i)
   switch(k)
   {
    case 1: printf("请输入应用文的成绩\n");break;
    case 2: printf("请输入英语的成绩\n");break;
    case 3: printf("请输入数学的成绩\n");break;
    case 4: printf("请输入计算机基础的成绩\n");break;
    case 5: printf("请输入C语言的成绩\n");break;
    case 6: printf("请输入体育的成绩\n");break;
    case 7: printf("请输入心理健康的成绩\n");break;
    case 8: printf("请输入思想道德与法律基础的成绩\n");break;
   }
  }
 else
 {
   switch(k)
   {
    case 1: printf("请输入应用文的成绩:");break;
    case 2: printf("请输入英语的成绩:");break;
    case 3: printf("请输入数学的成绩:");break;
    case 4: printf("请输入计算机基础的成绩:");break;
    case 5: printf("请输入C语言的成绩:");break;
    case 6: printf("请输入体育的成绩:");break;
    case 7: printf("请输入心理健康的成绩:");break;
    case 8: printf("请输入思想道德与法律基础的成绩:");break;
   }
 }
 if(0==ii)
   printf("学号是%d的成绩:",num);
 scanf1(&x);
 while(x>100||x<0)
 {
  printf("成绩错误!请重新输入:");
  scanf1(&x);
 }
 return x;
 
}
////////////////////////////////////////////////////////////////////////////////////////////////////
/* 单条记录输出  */
void outpu(RECORD student,int i)//接收结构体的变量,i是否输出提示信息
{
 if(0==i)
 {
  printf("\n     学号   应用文 英语 数学 计算机基础 C语言 体育 心理健康 思想道德  总分\n");
  
 }
  printf(IFORMAT,student.num,student.practical,student.english,
  student.math,student.computer_based,student.c,student.pe,
  student.mental_health,student.thinking,student.sum);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
/*查找学号*/
int findnum(RECORD student[],int people)//返回是数组的下标
{
 int i,x;
 printf("请输入学号:提示学号的范围是%d到%d\n",3511101,3511100+MAX);
 scanf1(&x);
 for(i=0;i<people;i++)
 {
   if(x==student[i].num)
   {
    return i;
   }
 }
 printf("警告:没有这个学号!");
 return -1;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
/*  确定  */
int identify(int i)//i为1显示删除 0修改 返回是1或0
{
 char ch[10];
 if(1==i)
  printf("确定要删除记录吗?\n");
 else 
  printf("确定要修改记录吗?\n");
 printf("请输入Y或N: ");
 scanf("%s",ch);
 while(!(ch[0]=='y'||ch[0]=='n'||ch[0]=='Y'||ch[0]=='N'))
 {
  printf("警告:只能输入Y或N: ");
  scanf("%s",ch);
 }
 if('Y'==ch[0]||'y'==ch[0])
  return 1;
 else
  return 0;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*  统计各分数段人数函数  */
void sta(int x,int a[])
 {
      switch(x/10)
      {
   case 10: case 9: a[0]+=1; break;
   case 8: a[1]+=1;break;
   case 7: a[2]+=1;break;
   case 6: a[3]+=1;break;
   default: a[4]+=1;
   } 
 }
 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*    文件保存   */
void save_file(RECORD student[],int people)
{
 FILE *fp;
 int i;
 cls();
 printf("\n\t\t\t欢迎进入保存文件子菜单\n");
 if((fp=fopen(".\\成绩.txt","wb"))==NULL)
 {
  printf("文件新建失败!\n");
  printf("\n按任意键进入主菜单!");
  return;
 }
 for(i=0;i<people;i++)
 {
 fwrite(&student[i],sizeof(RECORD),1,fp);
 }
 fclose(fp);
  printf("文件保存成功!\n");
  printf("提示:文件保存在当前目录下文件名是成绩.txt,请勿删除!");
 printf("\n按任意键进入主菜单!");
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*   文件打开 */
void open_file()
{
 RECORD student[MAX];
 FILE *fp;
 int i,n=1;
 cls();
  printf("\n\t\t\t欢迎进入打开文件子菜单\n");
 if((fp=fopen(".\\成绩.txt","rb"))==NULL)
 {
  printf("文件打开失败!\n");
  printf("\n按任意键进入主菜单!");
  return;
 }
 n=0;
 while(!feof(fp))
 {
  fread(&student[n],sizeof(RECORD),1,fp);
  n++;
 }
 fclose(fp);
 for(i=0;i<n-1;i++)
  outpu(student[i],i);
 printf("\n按任意键进入主菜单!");
}
posted @ 2013-04-25 16:10  zhangwangit  阅读(342)  评论(0编辑  收藏  举报