C语言学生成绩简单管理程序附加流程图Word文档格式.docx
《C语言学生成绩简单管理程序附加流程图Word文档格式.docx》由会员分享,可在线阅读,更多相关《C语言学生成绩简单管理程序附加流程图Word文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
/*xxx如果没有定义xxx*/
#defineH_STUDENT_HH
/*xxx定义xx*/
#include"
stdio.h"
string.h"
malloc.h"
#defineLENsizeof(structmessage_student)
/*一个结构体数组元素的长度*/
#definenumsubs5
/*学科数目*/
typedefstructmessage_student
/*结构体定义*/
{
charnumber[6];
charname[20];
charsex[4];
floatsubject[numsubs];
floatscore;
floataverage;
intindex;
}student;
externintnumstus;
/*学生数目*/
externstudent*pointer;
/*指向结构体数组*/
externintlens;
intmenu_select();
/*函数声明*/
intopenfile(studentstu[]);
intfindrecord(studentstud[]);
intwritetotext(studentstud[]);
voidwelcome();
voiddisplay1();
voidshowtable();
voidsort(studentstu[]);
voiddeleterecord(studentstu[],inti);
voidaddrecord(studentstud[]);
voiddisplay(studentstud[],intn1,intn2);
voidamendrecord(studentstud[]);
voidcount(studentstud[]);
voidsortnum(studentstud[]);
voidsortnum2(studentstud[]);
voidsortname(studentstud[]);
voidsortname2(studentstud[]);
voidsortcount(studentstud[]);
voidsortcount2(studentstud[]);
voidstatistic(studentstud[]);
#endif
intmenu_select()
charc;
printf("
\n\n"
);
|1.增加学生记录
5.统计信息|\n"
|2.查询学生记录
6.打开文件|\n"
|3.修改学生记录
7.保存文件|\n"
|4.学生纪录排序
8.显示记录|\n"
|
0.退出系统|\n"
请选择(0-8):
"
c=getchar();
getchar();
return(c-'
0'
}
intfindrecord(studentstud[])
/*查找信息*/
charstr[2];
inti,num;
if(numstus==0)
printf("
没有可被查找的记录\n"
return-1;
else
以何种方式查找?
\n1.学号\t2.姓名\t3.名次\n"
gets(str);
if(str[0]=='
1'
)
/*按学号查找*/
{
请输入学号:
for(i=0;
i<
=numstus;
i++)
if(strcmp(str,stud[i].number)==0)
display(stud,i,i);
break;
}
elsecontinue;
elseif(str[0]=='
2'
/*按姓名查找*/
请输入姓名:
if(strcmp(str,stud[i].name)==0)
3'
/*按名次查找*/
请输入名次:
scanf("
%d"
&
num);
getchar();
if(num==stud[i].index)
if(i>
numstus)
没有查找所要的信息。
\n"
returni;
#include"
intopenfile(studentstu[])
inti=0,j;
FILE*fp;
charfilename[20],str[2];
if(numstus!
=0)
已经有记录存在,是否保存?
(y/n)"
y'
||str[0]=='
Y'
)
writetotext(stu);
请输入文件名:
gets(filename);
numstus=0;
if((fp=fopen(filename,"
rb+"
))==NULL)
无法打开该文件\n"
return(-1);
fscanf(fp,"
numstus);
fgetc(fp);
while(i<
numstus)
fscanf(fp,"
%s"
stu[i].number);
stu[i].name);
stu[i].sex);
for(j=0;
j<
numsubs;
j++)
%f"
stu[i].subject[j]);
stu[i].score);
stu[i].average);
stu[i].index);
i++;
}
fclose(fp);
文件读取成功\n"
是否显示纪录?
gets(str);
if(str[0]=='
display(stu,0,numstus-1);
return(0);
voidsort(studentstud[])
{
inti,j=0;
charstr[5];
student*p;
p=stud;
if(numstus==0)
没有可供查询的记录!
while
(1)
;
请输入查询方式:
(直接输入回车则结束查询操作)\n"
1.按照学号\t"
2.按照姓名\t"
3.按照名次\n"
if(strlen(str)==0)break;
请输入排序次序:
1.升序排列\t"
2.降序排列\n"
sortnum2(p);
else
sortnum(p);
display(stud,0,numstus-1);
sortname2(p);
sortname(p);
sortcount2(p);
sortcount(p);
elseprintf("
请输入1~3"
是否退出排序?
)break;
return;
voidsortnum(studentstud[])
inti,j;
studenttemp;
student*p;
p=stud;
numstus;
numstus-i-1;
if(strcmp(stud[j+1].number,stud[j].number)>
0)
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
voidsortnum2(studentstud[])
if(strcmp(stud[j].number,stud[j+1].number)>
voidsortname(studentstud[])
if(strcmp(stud[j+1].name,stud[j].name)>
voidsortname2(studentstud[])
if(strcmp(stud[j].name,stud[j+1].name)>
voidsortcount(studentstud[])
if(stud[j+1].index>
stud[j].index)
voidsortcount2(studentstud[])
if(stud[j].index>
stud[j+1].index)
voidstatistic(studentstud[])
/*新增功能,输出统计信息*/
{
inti,j=0,k=0;
charc1,str[2];
floataverage[numsubs],sum=0;
if(numstus==0)
while
(1)
下面将统计考试成绩\n"
请选择你要统计哪科的成绩
1.A\t2.B\t3.C\t4.D\t5.E\n"
c1=getchar();
\t一共有个%d记录\n"
numstus);
/*总共记录数*/
switch(c1)
case'
:
i++)
/*循环输入判断*/
sum+=stud[i].subject[0];
if(stud[k].subject[0]>
stud[i].subject[0])k=i;
if(stud[j].subject[0]<
stud[i].subject[0])j=i;
average[0]=sum/numstus;
\t科目A的最高分:
/*最高分*/
\t\t学号:
%s
姓名:
分数:
%.2f\n"
stud[j].number,stud[j].name,stud[j].subject[0]);
\t科目A的最低分是:
/*最低分*/
stud[k].number,stud[k].name,stud[k].subject[0]);
\t科目A的平均分是%5.2f\n"
average[0]);
/*平均分*/
sum+=stud[i].subject[1];
if(stud[k].subject[1]>
stud[i].subject[1])k=i;
if(stud[j].subject[1]<
stud[i].subject[1])j=i;
average[1]=sum/numstus;
\t科目B的最高分:
stud[j].number,stud[j].name,stud[j].subject[1]);
\t科目B的最低分是:
stud[k].number,stud[k].name,stud[k].subject[1]);
\t科目B的平均分是%5.2f\n"
average[1]);
sum+=stud[i].subject[2];
if(stud[k].subject[2]>
stud[i].subject[2])k=i;
if(stud[j].subject[2]<
stud[i].subject[2])j=i;
average[2]=sum/numstus;
\t科目C的最高分:
stud[j].number,stud[j].name,stud[j].subject[2]);
\t科目C的最低分是:
stud[k].number,stud[k].name,stud[k].subject[2]);
\t科目C的平均分是%5.2f\n"
average[2]);
4'
sum+=stud[i].subject[3];
if(stud[k].subject[3]>
stud[i].subject[3])k=i;
if(stud[j].subject[3]<
stud[i].subject[3])j=i;
average[3]=sum/numstus;
\t科目D的最高分:
stud[j].number,stud[j].name,stud[j].subject[3]);
\t科目D的最低分是:
stud[k].number,stud[k].name,stud[k].subject[3]);
\t科目D的平均分是%5.2f\n"
average[3]);
5