说明
适用于C初学者及练习函数的朋友 =v=
超简易版学生管理:信息录入,信息输出,学生等级分类,平均分排序,姓名查重,将数据写入文件,读取文件。
学生信息包括序号(自动生成)、学号、姓名。
代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Student
{
int n;//序号
char name[10];
char num[20];//学号
float mark[2];
float ave;
float sum;
int count;
char rank;
}stu[5];
void input() //输入学生信息
{
int i;
int n=5;
for(i=0;i<n;i++)
{
printf("请输入第%d位学生的信息:\n",i+1);
printf("请输入序号和姓名:");
scanf("%s %s",stu[i].num,stu[i].name);
//putchar(10);
printf("请输入学生的成绩:");
scanf("%f %f",&stu[i].mark[0],&stu[i].mark[1]);
if((stu[i].mark[0]<0||stu[i].mark[0]>100)||(stu[i].mark[1]<0||stu[i].mark[1]>100))
printf("您输入的信息有误,请重新输入。\n");
putchar(10);
stu[i].sum=stu[i].mark[0]+stu[i].mark[1];
stu[i].ave=stu[i].sum/2.0;
}
}
void output() //输出学生信息
{
int i; int n=5;
printf("%15s %10s %9s %9s %9s %9s %9s ","学号","姓名","成绩1","成绩2","总分","平均分","等级");
putchar(10);
for(i=0;i<n;i++)
printf("%15s %10s %9.2f %9.2f %9.2f %9.2f %9c \n",stu[i].num,stu[i].name,stu[i].mark[0],stu[i].mark[1],stu[i].sum,stu[i].ave,stu[i].rank);
putchar(10);
}
void level() //学生等级
{
int t;
int i,j; int n=5;
for(i=0;i<n;i++)
{
t=(int)(stu[i].ave/10);
switch(t)
{
case 10:
case 9:stu[i].rank='A';break;
case 8:stu[i].rank='B';break;
case 7:stu[i].rank='C';break;
case 6:stu[i].rank='D';break;
default: stu[i].rank='E';break;
}
}
}
void sort() //平均分排序
{
struct Student temp;
int i,j; int n=5;
for (i=0;i<n;i++)
for (j=i+1;j<n;j++)
if (stu[i].ave < stu[j].ave)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
void search() //姓名查重
{
int n=5;
struct Student temp[n];
int i,j,k;
for(i=0;i<n;i++)
strcpy(temp[i].name,stu[i].name);
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if(strcmp(stu[i].name,stu[j].name)==0)
for(k=0;k<n;k++)
if(strcmp(temp[k].name,stu[i].name)==0)
temp[k].count++;
for(i=0;i<n;i++)
{
if(temp[i].count!=0)
{
printf("%s出现%d次\n",temp[i].name,temp[i].count);
break;
}
else printf("未出现重复姓名。");
}
}
void save() //将数据写入文件
{
int i; int n=5;
FILE *fp;
fp=fopen("student.txt","w");
for (i=0;i<n;i++)
if (fwrite(&stu[i],sizeof(struct Student),1,fp)!=1)
printf("file write error\n");
fclose(fp);
fp=fopen("student.txt","r");
for (i=0;i<n;i++)
{
fread(&stu[i],sizeof(struct Student),1,fp);
printf("\n%9s %9s %9.2f %9.2f %9.2f %9.2f %9c\n",stu[i].num,stu[i].name,stu[i].mark[0],stu[i].mark[1],stu[i].sum,stu[i].ave,stu[i].rank);
putchar(10);
}
}
void read() //读取文件
{
int i,j; int n=5;
FILE *fp;
if ((fp=fopen("student.txt","r"))==NULL)
{
printf("文件打开失败,请重试\n");
exit(0);
}
for (i=0;fread(&stu[i],sizeof(struct Student),1,fp)!=0;i++)
{
printf("%9s %9s",stu[i].num,stu[i].name);
for (j=0;j<2;j++)
printf("%9.2f ",stu[i].mark[j]);
printf("%9.2f %9.2f %9c",stu[i].sum,stu[i].ave,stu[i].rank);
putchar(10);
}
putchar(10);
fclose(fp);
}
int main()
{
input();
level();
sort();
output();
search();
save();
read();
return 0;
}