很久很久以前写的......用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( " ** 请选择您要执行的操作: " );
}
#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( " ** 请选择您要执行的操作: " );
}