成绩管理系统Word文件下载.docx
《成绩管理系统Word文件下载.docx》由会员分享,可在线阅读,更多相关《成绩管理系统Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。
voidcount(STUDENT*stud,intn);
//统计
#endif
#include"
sms_struct.h"
/*菜单函数,返回值为整数*/
stdio.h"
intmenu_select()
{
chars[3];
intc;
printf("
\n***************主菜单**************\n"
);
1.输入记录\n"
2.显示所有记录\n"
3.对所有记录进行排序\n"
4.按姓名查找记录并显示\n"
5.插入记录\n"
6.删除记录\n"
7.将所有记录保存到文件\n"
8.从文件中读入所有记录\n"
9.统计区间内成绩\n"
10.退出\n"
***********************************\n\n"
do
{
printf("
请选择操作(1-10):
"
scanf("
%s"
s);
c=atoi(s);
}while(c<
0||c>
10);
/*选择项不在~9之间重输*/
return(c);
/*返回选择项,主程序根据该数调用相应的函数*/
}
/******主函数开始*******/
main()
intn=0;
STUDENTstudent[20];
/*定义结构数组*/
//system("
color5e"
/*清屏*/
for(;
;
)/*无限循环*/
switch(menu_select())/*调用主菜单函数,返回值整数作开关语句的条件*/
{
case1:
n=Input(student,n);
break;
/*新建记录*/
case2:
print(student,n);
/*显示全部记录*/
case3:
sort(student,n);
/*排序*/
case4:
search(student,n);
/*查找记录*/
case5:
n=insert(student,n);
/*插入记录*/
case6:
n=delete1(student,n);
/*删除记录*/
case7:
save(student,n);
/*保存文件*/
case8:
n=load(student);
/*读文件*/
case9:
count(student,n);
/*统计*/
case10:
exit(0);
/*程序结束*/
}
}
/*创建结构体数组,完成数据录入功能*/
intInput(STUDENT*stud,intn)
inti,j;
floats;
charsign;
i=0;
while(sign!
='
n'
&
sign!
N'
)
\n请按如下提示输入相关信息.\n\n"
输入学号:
stud[n+i].no);
/*输入学号*/
输入姓名:
stud[n+i].name);
/*输入姓名*/
输入%d个成绩:
\n"
N);
/*提示开始输入成绩*/
s=0;
/*计算每个学生的总分,初值为*/
for(j=0;
j<
N;
j++)/*N门课程循环N次*/
do{
printf("
score[%d]:
j);
/*提示输入第几门课程*/
scanf("
%f"
&
stud[n+i].score[j]);
/*输入成绩*/
/*确保成绩在~100之间*/
/*出错提示信息*/
}while(stud[n+i].score[j]>
100||stud[n+i].score[j]<
0);
s=s+stud[n+i].score[j];
/*累加各门课程成绩*/
stud[n+i].sum=s;
/*将总分保存*/
stud[n+i].average=(float)s/N;
/*求出平均值*/
stud[n+i].order=0;
/*未排序前此值为*/
该学生的总分为:
%4.2f\n\t平均分为:
%4.2f\n"
stud[n+i].sum,stud[n+i].average);
=====>
提示:
继续添加记录?
(Y/N)"
getchar();
/*把键盘缓冲区中的前面输入的回车键给读掉,不然下面sign读到的是回车符*/
%c"
sign);
i++;
}
return(n+i);
/*显示模块*/
voidprint(STUDENT*stud,intn)
inti=0;
/*统计记录条数*/
if(n==0)
\n很遗憾,空表中没有任何记录可供显示!
else
**********************************STUDENT****************************************\n"
记录号 学号姓名科目1 科目2 科目3总分平均分名次\n"
-----------------------------------------------------------------------------------\n"
while(i<
n)
printf("
%-4d%-11s%-15s%5.2f%7.2f%7.2f%9.2f%6.2f%3d\n"
i+1,stud[i].no,stud[i].name,stud[i].score[0],stud[i].score[1],
stud[i].score[2],stud[i].sum,stud[i].average,stud[i].order);
i++;
***********************************************************************************\n\n"
voidswap(STUDENT*stud1,STUDENT*stud2)
inti;
chartemp1[15];
floattemp2;
floattemp3;
strcpy(temp1,stud1->
no);
strcpy(stud1->
no,stud2->
strcpy(stud2->
no,temp1);
name);
name,stud2->
name,temp1);
for(i=0;
i<
3;
i++)
temp2=stud1->
score[i];
stud1->
score[i]=stud2->
stud2->
score[i]=temp2;
temp3=stud1->
sum;
stud1->
sum=stud2->
stud2->
sum=temp3;
average;
average=stud2->
average=temp3;
/*排序模块,实现根据总分sum的值按降序排列*/
voidsort(STUDENT*stud,intn)
intmaxPosition;
n-1;
i++)
maxPosition=i;
for(j=i+1;
n;
j++)
if(stud[j].sum>
stud[maxPosition].sum)
{
maxPosition=j;
}
if(maxPosition!
=i)
swap(&
stud[i],&
stud[maxPosition]);
while(i<
stud[i].order=i+1;
按总分从高到低排名成功!
!
/*排序成功*/
/*查找记录模块*/
voidsearch(STUDENT*stud,intn)
chars[15];
/*存放姓名的字符数组*/
请输入您要查找的学生姓名:
scanf("
n&
strcmp(stud[i].name,s))
if(i==n)/**/
\n您要查找的是%s,很遗憾,查无此人!
else/*显示找到的记录信息*/
***********************************Found*****************************************\n"
学号姓名科目1 科目2 科目3总分平均分名次\n"
%-11s%-15s%5.2f%7.2f%7.2f%9.2f%6.2f%3d\n"
stud[i].no,stud[i].name,stud[i].score[0],stud[i].score[1],
stud[i].score[2],stud[i].sum,stud[i].average,stud[i].order);
***********************************************************************************\n"
/*在指定位置插入记录*/
intinsert(STUDENT*stud,intn)
inti=0,j;
intposition;
请输入插入记录的位置:
/*显示提示信息*/
%d"
position);
/*输入插入记录的位置*/
while(position<
0||position>
输入位置有误,请重新输入插入记录的位置:
//将插入位置开始的所有记录向后移动
for(i=n-1;
i>
=position;
i--)
strcpy(stud[i+1].no,stud[i].no);
strcpy(stud[i+1].name,stud[i].name);
stud[i+1].score[0]=stud[i].score[0];
stud[i+1].score[1]=stud[i].score[1];
stud[i+1].score[2]=stud[i].score[2];
stud[i+1].sum=stud[i].sum;
stud[i+1].average=stud[i].average;
stud[i+1].order=stud[i].order;
//录入记录并插入
i=position;
stud[i].no);
stud[i].name);
s=0;
for(j=0;
do{
scanf("
stud[i].score[j]);
if(stud[i].score[j]>
100||stud[i].score[j]<
0)/*确保成绩在~100之间*/
非法数据,请重新输入!
/*出错提示信息*/
}while(stud[i].score[j]>
s=s+stud[i].score[j];
stud[i].sum=s;
stud[i].average=(float)s/N;
stud[i].order=0;
\n已经在位置成功插入新记录!
position);
returnn+1;
/*删除记录模块*/
intdelete1(STUDENT*stud,intn)
chark[5];
/*定义字符串数组,用来确认删除信息*/
/*存放学号*/
请输入要删除学生的姓名:
/*输入要删除记录的姓名*/
\n您要删除的是%s,很遗憾,查无此人!
您确实要删除此记录吗?
(y/n):
k);
}while(k[0]!
y'
k[0]!
if(k[0]!
)/*删除确认判断*/
for(;
strcpy(stud[i].no,stud[i+1].no);
strcpy(stud[i].name,stud[i+1].name);
stud[i].score[0]=stud[i+1].score[0];
stud[i].score[1]=stud[i+1].score[1];
stud[i].score[2]=stud[i+1].score[2];
stud[i].sum=stud[i+1].sum;
stud[i].average=stud[i+1].average;
stud[i].order=stud[i+1].order-1;
\n已经成功删除姓名为%s的学生的记录!
returnn-1;
/*保存数据到文件模块*/
voidsave(STUDENT*stud,intn)
FILE*fp;
/*定义指向文件的指针*/
charoutfile[20];
/*保存输出文件名*/
请输入导出文件名,例如:
G:
\\f1\\score.txt:
outfile);
if((fp=fopen(outfile,"
wb"
))==NULL)/*为输出打开一个二进制文件,如没有则建立*/
Cannotopenfile\n"
exit
(1);
n)
fwrite(&
stud[i],sizeof(STUDENT),1,fp);
/*写入一条记录*/
i++;
fclose(fp);
/*关闭文件*/
-----所有记录已经成功保存至文件%s中!
-----\n"
/*显示保存成功*/
/*导入信息模块*/
intload(STUDENT*stud)
/*定义指向文件的指针*/
charinfile[20];
/*保存文件名*/
请输入导入文件名,例如:
infile);
/*输入文件名*/
if((fp=fopen(infile,"
rb"
))==NULL)/*打开一个二进制文件,为读方式*/
文件打开失败!
return0;
while(!
feof(fp))/*循环读数据直到文件尾结束*/
if(1!
=fread(&
stud[i],sizeof(STUDENT),1,fp))
break;
/*如果没读到数据,跳出循环*/
已经成功从文件%s导入数据!
returni;
voidcount(STUDENT*stud,intn)//统计区间内数据
inta,b,c,d=0;
intleap[50];
请输入要查找的科目,例如:
1\n"
c);
请输入要查找的区间,例如:
6070\n"
%d%d"
a,&
b);
leap[i]=0;
if(stud[i].score[c-1]>
=a&
stud[i].score[c-1]<
b)
{leap[i]=1;
d++;
***********************************Found**************