学生成绩管理系统C语言版.docx
《学生成绩管理系统C语言版.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统C语言版.docx(19页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统C语言版
#include/*常用的标准输入输出函数*/
#include/*access函数原型包含*/
#include/*exit函数原型包含*/
#include/*strcmp函数原型包含*/
#include
#include
#include
#defineN100/*最多的学生人数*/
structstudent/*学生结构体定义*/
{
charclas[15];/*班级*/
charno[13];/*学号,最多为12位*/
charname[20];/*姓名*/
charsex[8];/*性别*/
charaddr[30];/*地址*/
charphone[15];/*电话*/
floatscore[5];/*存储五门课成绩*/
floatave;/*平均分*/
}stu[N];
intnum;
voidinit();
voidweihu();
voidtongji();
voidtongji1();
voidtongji2();
voidsort1();
voidfind1();
voidsave();
voidnewfile();
voidread1();
voidnewfile();
voidnew1();
voiddelete1();
voidmodify();
voidsortscore();
intfindname(charcname[]);
voidmain()
{
intchoice=1;
system("COLOR2f");
printf("~~~~~~~~~~~~~~~~~学生信息管理系统~~~~~~~~~~~~~~~~\n");
printf("********\n");
printf("***欢迎进入!
!
!
***\n");
printf("**\n");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
init();
while(choice!
=5)
{
system("COLOR1F");
printf("*******************************\n");
printf("****\n");
printf("**主菜单**\n");
printf("**1:
学生成绩维护**\n");
printf("**2:
学生成绩统计**\n");
printf("**3:
学生成绩排序**\n");
printf("**4:
学生成绩查询**\n");
printf("**5:
退出**\n");
printf("****\n");
printf("*******************************\n");
printf("请选择:
");
scanf("%d",&choice);
switch(choice)
{
case1:
weihu();
break;
case2:
tongji();
break;
case3:
sort1();
break;
case4:
find1();
break;
case5:
save();
printf("谢谢使用本系统!
!
\n");
break;
default:
printf("选择错误,请重新选择!
");
}
}
}
//1)输出学生成绩(公共函数)
voidoutput()/*输出学生数据*/
{
inti,j;
for(i=0;i{
printf("班级姓名学号性别地址电话\n");
printf("%s%s%s%s%s%s\n",stu[i].clas,stu[i].name,stu[i].no,stu[i].sex,stu[i].addr,stu[i].phone);
printf("\n");
printf("C语言大学物理网页设计高数英语\n");
for(j=0;j<5;j++)
printf("%-12.f",stu[i].score[j]);
printf("\n");
printf("\n");
}
}
//2)系统初始化代码
voidinit()
{
if(access("stu[i].dat",0))/*判断文件是否存在*/
newfile();/*不存在创建新的数据文件*/
else
read1();/*若存在,从文件中读取数据*/
}
//3)创立新的数据文件
voidnewfile()/*从键盘输入学生成绩并保存到文件中*/
{
inti;
FILE*fp;
if((fp=fopen("F:
\\stu.dat","wb"))==NULL)/*创建二进制文件*/
{
printf("文件创建失败!
请重新运行程序。
\n");
exit(0);/*终止程序运行*/
}
printf("请输入学生人数:
");
scanf("%d",&num);
for(i=0;i{
printf("班级:
");
getchar();
gets(stu[i].clas);
printf("姓名:
");
gets(stu[i].name);
printf("请输入第%d位学生的学号:
",i+1);
gets(stu[i].no);printf("性别:
");
gets(stu[i].sex);
printf("地址:
");
gets(stu[i].addr);
printf("电话:
");
gets(stu[i].phone);
printf("C语言:
");
scanf("%f",&stu[i].score[0]);
printf("大学物理:
");
scanf("%f",&stu[i].score[1]);
printf("网页设计:
");
scanf("%f",&stu[i].score[2]);
printf("高数:
");
scanf("%f",&stu[i].score[3]);
printf("英语:
");
scanf("%f",&stu[i].score[4]);
fwrite(&stu,sizeof(stu),1,fp);
printf("请输入下一条学生信息\n");/*把第i+1名学生成绩写入文件
*/
}
fclose(fp);
printf("你刚刚输入的数据共有%d个学生成绩。
详细数据为:
\n",num);
output();
}
//4)从数据文件中读取成绩
voidread1()
{
FILE*fp;
num=0;/*num为数据文件实际存储成绩人数*/
fp=fopen("stu.dat","r");
if(fp==NULL)/*文件不存在*/
{
printf("文件打开失败!
请重新运行程序。
\n");
exit(0);/*终止程序运行*/
}
while(!
feof(fp))
{
fread(&stu[num],1,sizeof(structstudent),fp);
num++;
}
num--;
fclose(fp);
printf("现在共有%d个学生成绩,初始数据为:
\n",num);
output();/*输出读取结果*/
}
//5)学生成绩维护
voidweihu()
{
intchoice1;
system("COLOR2F");
printf("*******************************************\n");
printf("****\n");
printf("**学生成绩维护子菜单**\n");
printf("**1.新增**\n");
printf("**2.删除(按学号)**\n");
printf("**3.修改**\n");
printf("****\n");
printf("********************************************\n");
printf("请选择");
scanf("%d",&choice1);
switch(choice1)
{
case1:
new1();
break;
case2:
delete1();
break;
case3:
modify();
break;
default:
printf("选择错误,请重新选择!
\n");
}
}
//6)新增一个学生成绩
voidnew1()
{
printf("请输入班级:
");
getchar();
gets(stu[num].clas);
printf("请输入学号:
");
gets(stu[num].no);
printf("姓名:
");
gets(stu[num].name);
printf("性别:
");
gets(stu[num].sex);
printf("地址:
");
gets(stu[num].addr);
printf("电话:
");
gets(stu[num].phone);
printf("C语言:
");
scanf("%f",&stu[num].score[0]);
printf("大学物理:
");
scanf("%f",&stu[num].score[1]);
printf("网页设计:
");
scanf("%f",&stu[num].score[2]);
printf("高数:
");
scanf("%f",&stu[num].score[3]);
printf("英语:
");
scanf("%f",&stu[num].score[4]);
num++;
printf("现在共有%d个学生成绩,数据为:
\n",num);
output();
}
//7)按学号查找
intfind(charsno[])
{
inti;
for(i=0;iif(strcmp(stu[i].no,sno)==0)/*判断两个字符串相等*/
returni;/*查找成功*/
return-1;/*查找失败*/
}
//删除学生信息
voiddelete1()
{
charcno[13];
inti,j;
printf("请输入要删除的学号:
\n");
getchar();
gets(cno);
i=find(cno);
if(i==-1)
{
printf("不存在该学号!
!
!
!
\n");
}
else
{
for(j=i;jstu[j]=stu[j+1];
num--;
printf("删除后还有%d个学生成绩,数据为:
\n",num);
output();
}
}
//修改学生信息
voidmodify()
{
charcno[13];
inti,j;
printf("请输入要修改学生的学号:
\n");
getchar();
gets(cno);
i=find(cno);
printf("班级:
");
gets(stu[i].clas);
printf("姓名:
");
gets(stu[i].name);
printf("性别:
");
gets(stu[i].sex);
printf("地址:
");
gets(stu[i].addr);
printf("电话:
");
gets(stu[i].phone);
printf("C语言:
");
scanf("%f",&stu[i].score[0]);
printf("大学物理:
");
scanf("%f",&stu[i].score[1]);
printf("网页设计:
");
scanf("%f",&stu[i].score[2]);
printf("高数:
");
scanf("%f",&stu[i].score[3]);
printf("英语:
");
scanf("%f",&stu[i].score[4]);
printf("修改后为:
\n");
printf("%s\t%s\t%s\t%s\t%s\t%s\t\n",stu[i].clas,stu[i].name,stu[i].no,stu[i].sex,stu[i].addr,
stu[i].phone);
printf("C语言大学物理网页设计高数英语\n");
for(j=0;j<5;j++)
printf("%-12.f",stu[i].score[j]);
printf("\n");
}
//10)统计
voidtongji()
{
intchoice2;
system("COLOR3F");
printf("***************************************************\n");
printf("******\n");
printf("***统计子菜单***\n");
printf("***1.计算每门课程平均分***\n");
printf("***2.计算每个学生平均分***\n");
printf("******\n");
printf("***************************************************\n");
printf("请选择:
");
scanf("%d",&choice2);
if(choice2==1)
tongji1();
elseif(choice2==2)
tongji2();
else
printf("选择错误,请重新选择!
\n");
}
//11)计算每个学生平均分
voidtongji1()
{
inti,j;
floatsum;
floatavec[5];/*存储每门课程的平均分*/
for(j=0;j<5;j++)
{
sum=0;
for(i=0;isum+=stu[i].score[j];
avec[j]=sum/num;
}
printf("各门课平均分:
\n");
printf("C语言大学物理网页设计高数英语\n");
for(i=0;i<5;i++)
printf("%-10.2f",avec[i]);
printf("\n");
}
//12)计算每个人的平均分
voidtongji2()
{
inti,j;
floatsum;
for(j=0;j{
sum=0;
for(i=0;i<5;i++)
sum+=stu[j].score[i];
stu[j].ave=sum/5;
printf("第%d个人的平均分:
%.2f\n",j+1,stu[j].ave);
}
}
//13)排序
voidsort1()
{
intchoice3;
system("COLOR6F");
printf("*****************************************\n");
printf("\n");
printf("*****排序子菜单*****\n");
printf("**********\n");
printf("*****1.按成绩*****\n");
printf("\n");
printf("*****************************************\n");
printf("请选择:
\n");
scanf("%d",&choice3);
if("choice3==1")
sortscore();
else
printf("选择错误,请重新选择!
\n");
}
//14)按学生平均分排序
voidsortscore()/*按平均成绩从高到低冒泡法排序*/
{
inti,j;
structstudenttemp;
tongji2();/*先计算每个学生的平均分*/
for(i=0;i<=num-2;i++)
{
for(j=0;jif(stu[j].ave{
temp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=temp;
}
}
for(i=0;iprintf("%.2f",stu[i].score[1]);
printf("排序后的学生成绩为:
\n");
output();
}
//15)查找
voidfind1()
{
intchoice4;
charcno[13],cname[20];
inti,j;
system("COLOR5F");
printf("*********************************************************\n");
printf("*********************\n");
printf("*********查找子菜单************\n");
printf("*********1.按学号************\n");
printf("*********2.按姓名************\n");
printf("*********************\n");
printf("*********************************************************\n");
printf("请选择:
");
scanf("%d",&choice4);
if(choice4==1)
{
printf("输入要查找学生的学号:
");
getchar();
gets(cno);
puts(cno);
i=find(cno);
}
elseif(choice4==2)
{
printf("请输入要查找学生的姓名:
");
getchar();
gets(cname);
i=findname(cname);
}
else
{
printf("选择错误,请重新选择!
\n");
return;
}
if(i==-1)
printf("要查找的学生不存在。
\n");
else
{
printf("查找到的学生信息为:
\n");
printf("班级\t姓名\t学号\t性别\t地址\t电话\t\n");
printf("%s\t%s\t%s\t%s\t%s\t%s\t\n",stu[i].clas,stu[i].name,stu[i].no,stu
[i].sex,stu[i].addr,
stu[i].phone);
printf("\n");
printf("C语言大学物理网页设计高数英语\n");
for(j=0;j<5;j++)
printf("%-12.f",stu[i].score[j]);
}
}
//16)按姓名查找
intfindname(charcname[])
{
inti;
for(i=0;iif(strcmp(stu[i].name,cname)==0)/*判断两个字符串*/
returni;/*查找成功*/
return-1;/*查找失败*/
}
//17)保存文件
voidsave()/*将修改过的学生成绩重新写回到数据文件中*/
{
inti;
FILE*fp;
if((fp=fopen("stu.dat","wb"))==NULL)/*创建二进制文件*/
{
printf("文件创建失败!
请重新运行程序。
\n");
exit(0);/*终止程序运行*/
}
for(i=0;ifwrite(&stu[i],1,sizeof(structstudent),fp);
/*把第i+1个学生成绩写入文件*/
fclose(fp);
}