学生成绩管理系统(给交作业的兄弟准备的)

很久很久以前写的......用TC-WIN 或 C-Free编译运行,否则将//注解换成 /* ....  */  编译

#include  < stdio.h >
#include 
< stdlib.h >
#include 
< string .h >
char  FILE_NAME[]  =   " student.dat " // 存储学生成绩的文件
int  stuNumber = 0 ;
typedef 
struct
{
    
char  name[ 20 ];
    
char  sex;
    
float  score;
}STUDENT;
STUDENT stu[
100 ];

void  menuitem();         // 菜单
int  add_stu();           // 添加学生成绩函数
void  compositor();       // 排序
void  dis_stu( char  sex);  // 显示学生函数
int  kernel();            // 核心函数

int  main()
{
    STUDENT tmp;
    FILE 
* fp;
    
if  ((fp = fopen(FILE_NAME, " rb " )) == NULL)
    {
        
if  ((fp = fopen(FILE_NAME, " wb " )) == NULL)
        {
            printf(
" 不能打开用户文件 " );
            exit(
1 );
        }
        fclose(fp);
        menuitem();
        printf(
" 第一次运行程序,请添加学生信息。 " );
        
if  (add_stu()) printf( " 添加学生信息失败! " );
     }
    
while  ( ! feof(fp))
    {
       
if  (stuNumber >=   99 break ;   // 学生记录数默认为100,或以后调用动态分配内存函数(未实现)
       fread( & tmp, sizeof (tmp), 1 ,fp);
       stu[stuNumber]
= tmp;
       stuNumber
++ ;
    }
    fclose(fp);
    
// if (kernel()) exit(1);
     return   0 ;
}

void  dis_stu( char  sex)
{
    
int  i,intCount  =   0 ;
    
char  sex2 = sex + 32 ;
    compositor(); 
// 排序
       printf( " 姓名 性别 成绩 " );
    printf(
" _______________________________________ " );
    
for  (i = 0 ; i < stuNumber - 1 ; i ++ )
    {
        
if  (sex  ==   ' A ' )
        {
            printf(
" %s %c %.2f " ,stu[i].name,stu[i].sex,stu[i].score);
            intCount
++ ;
        }
        
else   if  (stu[i].sex == sex  ||  stu[i].sex == sex2)
        {
            printf(
" %s %c %.2f " ,stu[i].name,stu[i].sex,stu[i].score);
            intCount
++ ;
        }
    }
    printf(
" _______________________________________ " );
    printf(
" %d 条记录被找到 " ,intCount);
    printf(
" 点任意键返回... " );
    system(
" pause > nul " );
    kernel();
}

void  compositor()  // 插入排序法
{
    STUDENT tmp;
    
int  i,j,k;
    
for  (i = 1 ;i < stuNumber - 1 ;i ++ )
       
for (j = 0 ;j < i;j ++ )
           
if  (stu[i].score > stu[j].score)
           {
               tmp
= stu[i];
               
for  (k = i;k > j;k -- )
                   stu[k]
= stu[k - 1 ];

               stu[j]
= tmp;
               
break ;
            }
}

int  add_stu()
{
    STUDENT tmp;
    FILE 
* fp;
    
char  chrYN;
    
do
    {
        
do
        {
            fflush(stdin);
            printf(
" 请输入学生姓名:<20个字符> " );
            scanf(
" %s " ,tmp.name);
            getchar();
            
if  (strlen(tmp.name) != 0   &&  strlen(tmp.name) < 20 break ;
        }
while  ( 1 );
        
while  ( 1 )
        {
            fflush(stdin);
            printf(
" 请输入学生性别:<男:M/女:F> " );
            tmp.sex
= getchar();
            
if  (tmp.sex  ==   ' m '   ||  tmp.sex  ==   ' M '   ||
                tmp.sex 
==   ' f '   ||  tmp.sex  ==   ' F ' break ;
        }
        
while  ( 1 )
        {
            fflush(stdin);
            printf(
" 请输入学生成绩:<0-100> " );
            scanf(
" %f " , & tmp.score);
            getchar();
            
if  (tmp.score  >=   0   &&  tmp.score  <=   100 break ;
        }
        stu[stuNumber]
= tmp;
        
if  ((fp = fopen(FILE_NAME, " ab " )) == NULL)  return   1 ;
        fwrite (
& tmp, sizeof (tmp), 1 ,fp);
        fclose(fp);
        stuNumber
++ ;

        printf(
" 写入成功,您要继续添加吗?(Y/N) " );
        chrYN 
=  getch();
        
// if (chrYN=='N' || chrYN=='n') break;
    } while   (chrYN == ' Y '   ||  chrYN == ' y ' );
    compositor();
    kernel();
    
return   0 ;
}
int  kernel()
{
    menuitem();
    
while  ( 1 )
    {
        
char  key = getch();
        
switch  (key)
        {
            
case   49 if  (add_stu()) printf( " 添加学生信息失败! " ); break ;
            
case   50 : dis_stu( ' F ' ); break // 显示男生参数:F或f
             case   51 : dis_stu( ' M ' ); break // 显示女生参数:M或m
             case   52 : dis_stu( ' A ' ); break // 显示全部参数:A
             case   53 : exit( 0 ); break // 退出
             case   27 : exit( 0 ); break // ESC键
             default continue ;
        }
    }
    
return   0 ;
}
void  menuitem()
{
    system(
" cls " );
    printf(
" |-_-_-_-_-_-_-_-_-_-_-_-学生成绩管理系统_-_-_-_-_-_-_-_-_-_-_-_| " );
    printf(
" |                                                              | " );
    printf(
" |                 1、添加学生成绩                              | " );
    printf(
" |                 2、显示所有男生成绩                          | " );
    printf(
" |                 3、显示所有女生成绩                          | " );
    printf(
" |                 4、显示所有排序后成绩                        | " );
    printf(
" |                 5、退出系统                                  | " );
    printf(
" +______________________________________________________________| " );
    printf(
" ** 请选择您要执行的操作: " );
}

 

 

你可能感兴趣的:(学生成绩管理系统(给交作业的兄弟准备的))