数据结构 课程设计 学生成绩管理系统

程序源代码:

 

 

#include<string.h>

#include<stdio.h>

 

#define N 50

struct student

{char num[11];

 char name[20];

 int score[3];

 float ave;

}stu[N];

 

save(int n)                     

{FILE *fp;

 int i;

 if((fp=fopen("score.txt","wb"))==NULL)   

  {printf("/nCannot open file/n");

   return NULL;

  }

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

   if(stu[i].ave!=0)           

     if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)

       printf("file write error/n");

 fclose(fp);

}

 

load()                      

{FILE *fp;

 int i;

 if((fp=fopen("score.txt","rb"))==NULL)   

  {printf("/nCannot open file/n");

   return NULL;

  }

 for(i=0;!feof(fp);i++)

  fread(&stu[i],sizeof(struct student),1,fp);

 fclose(fp);

 return(i-1);               

}

 

void printf_back()             

{int k,w;

 printf("/n/n/tSuccessful. ^_^/n/n");

 printf("What do you want to do? /n/n/t1).Browse all now/t2).Back:  [ ]/b/b");

 scanf("%d",&w);

 if(w==1) browse();

 else menu();

}

 

void printf_face()           

{printf("/n/tNO.  name                 score1   score2   score3  average/n");

}

average(int i)                   

{int j,sum;

 for(sum=0,j=0;j<3;j++)

   sum+=stu[i].score[j];

 stu[i].ave=sum/3.0;

}

 

no_input(int i,int n)                

{int j,k,w1;

  do

  {w1=0;

   printf("NO.:");

   scanf("%s",stu[i].num);

   for(j=0;stu[i].num[j]!='/0';j++)         

     if(stu[i].num[j]<'0'||stu[i].num[j]>'9')    

       {puts("Input error! Only be made up of (0-9).Please reinput!/n");

        w1=1;break;

       }

   if(w1!=1)

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

     

      if(k!=i&&strcmp(stu[k].num,stu[i].num)==0)   

       {puts("This record is exist. please reinput!/n");

        w1=1;break;

       }

  }

  while(w1==1);

}

 

score_input(int i)

{int j;

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

  {printf("score %d:",j+1);

   scanf("%d",&stu[i].score[j]);

  }

}

 

input(int i)                         

{

 no_input(i,i);                    

 printf("name:");

 scanf("%s",stu[i].name);

 score_input(i);         

 average(i);             

}

 

printf_one(int i)                             

{int j;

 printf("%11s  %-17s",stu[i].num,stu[i].name);

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

   printf("%9d",stu[i].score[j]);

 printf("%9.2f/n",stu[i].ave);

}

void puts___()    

{puts("/n--------------------------------------------------------------------");

}

 

modify_data(int i,int n)         

{int c,w1;

  do                             

   {puts("/nmodify by =>/n/n  1).NO.  2.name  3).score1  4).score2/n  5).score3  6).all score  7).all data  8).cancel and back");

    printf("Which you needed?: [ ]/b/b");

    scanf("%d",&c);

    if(c>8||c<1)

            {puts("/nChoice error! Please again!");  

             getchar();   

            }

   }

   while(c>8||c<1);

  do

   {switch(c)                    

    {case 1:no_input(i,n);break;   

     case 2:printf("name:");scanf("%s",stu[i].name);break;

     case 3:printf("score1:");scanf("%d",&stu[i].score[0]);break;

     case 4:printf("score2:");scanf("%d",&stu[i].score[1]);break;

     case 5:printf("score3:");scanf("%d",&stu[i].score[2]);break;

     case 6:score_input(i);break;

     case 7:input(i);break;  

     case 8:menu();  

    }

    if(c>2&&c<7)

      average(i);                 

    puts("/nNow:/n");

    printf_face();                        

    printf_one(i);                

    printf("/nAre you sure?/n/n/t1).Sure  2).No and remodify   3).Back without save in this time   [ ]/b/b");

    scanf("%d",&w1);  

   }

   while(w1==2);

  return(w1);       

 

enter()                          

{int i,n;

 printf("How many students(0-%d)?:",N);

 scanf("%d",&n);                 

 printf("/nEnter data now/n/n");

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

   {printf("/nInput %dth student record./n",i+1);

    input(i);                        

   }

 if(i!=0) save(n);                           

 printf_back();                      

}

 

add()                            

{int i,n,m,k;

 FILE *fp;

 n=load();

 printf("How many students are you want to add(0-%d)?:",N-n);

 scanf("%d",&m);              

 k=m+n;

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

   {printf("/nInput %dth student record./n",i-n+1);

    input(i);                      

   }

 if((fp=fopen("score.txt","ab"))==NULL)

  {printf("cannot open file/n");

   return;

  }

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

   if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)

     printf("file write error/n");

 fclose(fp);

 printf_back();                     

}

 

modify()                        

{struct student s;

 FILE *fp;

 int i,n,k,w0=1,w1,w2=0;

 n=load();

 do

 {clrscr();

  k=-1;

 

  puts___();            

  printf_face();               

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

    {if((i!=0)&&(i%10==0))   

       {printf("/n/nRemember NO.which needed modify. pass any key to contiune  . . .");

        getch();

        puts("/n/n");

       }

     printf_one(i);                

    }

  puts___();

  do

   {printf("/n/nEnter NO. that you want to modify!    NO.:");

    scanf("%s",s.num);              

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

     if(strcmp(s.num,stu[i].num)==0)

       {k=i;                     

        s=stu[i];               

       }

    if(k==-1) printf("/n/nNO exist! please again");

   }

   while(k==-1);          

  printf_face();             

  printf_one(k);                

  w1=modify_data(k,n);         

  if(w1==1)      

    {printf("/nSuccessful ^_^./n/nAre you modify another?/n/n/t1).Yes  2).Back with save/t[ ]/b/b");

     scanf("%d",&w0);

     w2=1;        

    }

  else

    {w0=0;

     if(w2==1)

       stu[k]=s;

    }     

  if(w0!=1&&w2==1)   

  }

  while(w0==1);

 menu();

}

 

del()                           

{struct student s;

 FILE *fp;

 int i,j,n,k,c,w0=1;

 n=load();

 do

 {clrscr();

  k=-1;

 

  puts___();

  printf_face();               

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

    if(stu[i].ave!=0)

     {if((i!=0)&&(i%10==0))    

       {printf("/n/nRemember NO. which needed del. pass any key to contiune  . . .");

        getch();

        puts("/n/n");

       }

      printf_one(i);                  

     }

  puts___();

  do

   {printf("/n/nEnter NO. that you want to Delete!    NO.:");

    scanf("%s",s.num);              

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

     if(strcmp(s.num,stu[i].num)==0)

       {k=i;                    

        s=stu[i];

       }

    if(k==-1) printf("/n/nNO exist! please again");

   }

   while(k==-1);

  puts("/n");

  printf_face();               

  printf_one(k);                

  printf("/nAre you sure?/n/t1).sure   2).no and del another   3).back without save all  [ ]/b/b");

  scanf("%d",&c);

  if(c==1)

    {stu[k].ave=0;     

     printf("/n/nSuccessful ^_^./n/nAre you again?/n/t1).again  2).back to menu/t[ ]/b/b");  

     scanf("%d",&w0);

    }

  if(c==3) w0=0;          

  if(w0!=1&&c!=3)         

     save(n);

  }

  while(w0==1);

 menu();            

}

 

browse()                         

{int i,j,n;

 n=load();        

 clrscr();

 puts___();

 printf_face();                 

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

   {if((i!=0)&&(i%10==0))             

     {printf("/n/nPass any key to contiune  . . .");

      getch();

      puts("/n/n");

     }

    printf_one(i);                

   }

 puts___();

printf("/tThere are  %d record./n",n);

 printf("/nPass any key to back  . . .");

 getch();                         

 menu();

}

search()                        

{int i,n,k,w1=1,w2,w3,w4;

 struct student s;

 n=load();

 do

  {do

    {k=-1;

     printf("/n/nEnter name that you want to search!    name:");

     scanf("%s",s.name);              

     printf_face();                

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

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

         {k=i;                     

          printf_one(k);break;                 

         }

     if(k==-1)

       {printf("/n/nNO exist! please");

        printf("/n/nAre you again?/n/t1).again   2).NO and back   [ ]/b/b");

        scanf("%d",&w1);

       }

    }

    while(k==-1&&w1==1);             

   w4=0;w3=0;

   if(k!=-1)                          

       {printf("/n/nWhat do you want to do?/n/t1).Search another   2).Modify   3).Delete   4).Back menu   [ ]/b/b");

        scanf("%d",&w2);

        switch(w2)

          {case 2:w3=modify_data(k,n);break;

           case 3:{printf("/nAre you sure?/n/t1).Sure   2).No and back   [ ]/b/b");

                   scanf("%d",&w4);

                   if(w4==1)

                     stu[k].ave=0;    

                   break;

                  }

          }

        if(w3==1||w4==1)

           {save(n);

            printf("/n/nSuccessful. ^_^.");

            printf("/n/nWhat do you want to do?/n/t1).Search another   2).Back   [ ]/b/b");

            scanf("%d",&w2);

           }

       }

   }

   while(w2==1);

 menu();

}

insert()                         

{int i,j,n,c;

 struct student s;

 n=load();

 puts("/nInput one data./n");

 do

  {input(n);      

   printf_face();

   printf_one(n);

   printf("/n/nAre you sure?/n/n/t1).Sure/t2).cancel snd again/t3).Back withuot save  [ ]/b/b");

   scanf("%d",&c);

   if(c==1)

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

        for(i=n;i>j;i--)

          if(stu[i].ave>stu[i-1].ave)

            {s=stu[i-1];stu[i-1]=stu[i];stu[i]=s;}

      save(n+1);

      printf_back();

     }

   else if(c!=2) menu();

  }

  while(c==2);

}

order()                          

{int i,j,k,n;

 struct student s;

 n=load();

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

   {k=i;

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

      if(stu[j].ave>stu[k].ave) k=j;

    s=stu[i];stu[i]=stu[k];stu[k]=s;

   }

 save(n);

 puts("/n/n");

 printf_back();

}

menu()                           

{int n,w1;

 do

  {clrscr();                  

   puts("/n/t/t/t   Copy right by LIU YIN TAO!");

   puts("/t/t/t/t  31/12/2006!/n/n");

   puts("/t/t*********************MENU*********************/n/n");

   puts("/t/t/t/t1.Enter new data");

   puts("/t/t/t/t2.Addition data");

   puts("/t/t/t/t3.Modify data");

   puts("/t/t/t/t4.Delete data");

   puts("/t/t/t/t5.Browse all");

   puts("/t/t/t/t6.Search by name");

   puts("/t/t/t/t7.Insert data");

   puts("/t/t/t/t8.Order by average");

   puts("/t/t/t/t9.Exit");

   puts("/n/n/t/t**********************************************/n");

   printf("Choice your number(1-9): [ ]/b/b");

   scanf("%d",&n);

   if(n<1||n>9)                                 

     {w1=1;getchar();}

   else  w1=0;

  }

  while(w1==1);

 switch(n)

  {case 1:enter();break;     

   case 2:add();break;       

   case 3:modify();break;    

   case 4:del();break;       

   case 5:browse();break;    

   case 6:search();break;    

   case 7:insert();break;    

   case 8:order();break;     

   case 9:exit(0);           

  }

}

main()

{menu();

}

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值