用C语言设计管理学生的成绩Word格式文档下载.docx
《用C语言设计管理学生的成绩Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《用C语言设计管理学生的成绩Word格式文档下载.docx(18页珍藏版)》请在冰豆网上搜索。
清屏
FILE*fp;
studentxs;
/*定义一个结构体变量来装从文件中读出来的数据*/
fwrite(&
xs,sizeof(stu),1,fp);
//将成绩信息写入文件
fclose(fp);
关闭文件
feof(fp)若到文件末尾。
函数值为“真”(非0)
fread()从指定中读取数据项
getch();
/*让屏幕停留同时按任意键返回*/
if语句判断给定的条件是否满足
switch多分支选择语句
for循环语句
四、主要模块的算法描述
五、结束语
通过这次实训,我们分小组做题目,再次全面熟悉、掌握C语言基本知识,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,培养使用计算机解决实际问题的能力,规范编程思想,培养逻辑思维能力,为以后在专业课程中应用计算机系统解决计算、分析、实验和设计等学习环节打下较扎实的基础。
附录:
程序代码:
#include<
stdio.h>
stdlib.h>
conio.h>
string.h>
#defineN20
structstudent
{
charname[10];
intnum;
floatc;
floatmath;
floatenglish;
floataver;
floatsum;
}stu;
//菜单
voidmenu()/*便于操作员使用*/
{/*清屏*/
system("
printf("
*学生平时成绩管理*\n"
printf("
*=======================*\n"
*1.成绩录入*\n"
*2.查询*\n"
*3.修改*\n"
*4.插入*\n"
*5.显示*\n"
*6.统计*\n"
*7.删除*\n"
*0.退出*\n"
);
*=======================*\n"
*请选择相应的功能:
*\n"
}
//成绩录入
voidinput()
{
FILE*fp;
if((fp=fopen("
student.dat"
"
ab"
))==NULL)
{printf("
can'
topenfile!
\n"
exit(0);
\n成绩录入"
\n****************************************************"
\n当输入姓名为ps结束录入\n"
while
(1)/*中间加油break,可使循环中断*/
{printf("
\n请输入您的姓名:
"
scanf("
%s"
xs.name);
if(strcmp(xs.name,"
ps"
)==0)break;
/*判断姓名是否为ps,用字符串判断*/
\n请输入学号:
%d"
&
xs.num);
\n请输入c语言的成绩:
%f"
xs.c);
printf("
\n请输入高数的成绩:
xs.math);
\n请输入英语的成绩:
xs.english);
xs.aver=0;
/*给平均分变量赋初值*/
xs.aver=(xs.c+xs.math+xs.english)/3;
xs.sum=0;
xs.sum=xs.c+xs.math+xs.english;
fwrite(&
}
fclose(fp);
voidxingming()
\n输入要查学生的姓名:
"
scanf("
name);
rb"
))==NULL)
while(!
feof(fp))
{
fread(&
if(strcmp(xs.name,name)==0)/*按姓名查询时判断输入的姓名是否存在,会循环从数据中找取*/
\n学生的信息如下:
\n%10s%6s%6s%6s%6s%6s%6s\n"
姓名"
学号"
C语言"
高数"
英语"
平均成绩"
总分"
\n%10%6d%6.2f%6.2f%6.2f%6.2f%6.2f\n"
xs.name,xs.num,xs.c,xs.math,xs.english,xs.aver,xs.sum);
break;
if(feof(fp))
\n查找失败!
!
/*学生不存在*/
voidxuehao()
\n输入要查学生的学号:
num);
if(xs.num==num)/*按学号查询时判断输入的学号是否存在,会循环从数据中找取*/
\n学生的信息如下:
\n%10s%6d%6.2f%6.2f%6.2f%6.2f%6.2f\n"
if(feof(fp))printf("
\n查找失败!
//查询
voidsearch()
charch1;
请输入按何种方式查询:
\n1-姓名,2-学号:
ch1=getchar();
/*用字符接收*/
switch(ch1)/*判断*/
case'
1'
:
xingming();
break;
2'
xuehao();
\n按任意键返回主菜单"
getch();
//修改:
输入学生的姓名,查找该学生,若找到则修改该生的成绩信息,并显示修改前后的结果;
voidmodi()
\n输入要修改的学生的姓名:
rb+"
if(strcmp(xs.name,name)==0)/*判断输入要修改的姓名是否存在*/
{
修改前学生的信息如下:
\n请输入该生的C语言成绩:
\n高数成绩:
\n英语成绩:
if(!
\n修改后的学生的信息如下:
fseek(fp,sizeof(stu),1);
/*负号表示后退,1表示文件当前位置*/
/*再写入,同时把要修改的那个覆盖掉*/
else
\n学生不存在,修改失败!
\n按任意键返回主菜单"
//插入:
输入学生的平时的各项成绩,插入到指定位置;
当指定的位置超出范围时,将其插入到全班的最后,并显示插入成功后的结果。
voidinsert()
inti=0,j,k,lenth;
students,xs[N];
\n请输入插入的学生的姓名:
s.name);
\n学生的学号:
s.num);
\n学生的C成绩:
s.c);
s.math);
s.english);
s.aver=(s.c+s.math+s.english)/3;
s.sum=s.c+s.math+s.english;
\n插入位置:
k);
//i=0;
can'
xs[i],sizeof(stu),1,fp);
/*把数据读入到结构体数组中*/
if(feof(fp))break;
i++;
lenth=i;
if(k<
lenth&
&
k>
=0)/*k的位置要位于数组范围之内*/
{//插入
for(j=lenth-1;
j>
=k;
j--)
xs[j+1]=xs[j];
/*一开始j是最大的,往后移一个这样移动避免数据被覆盖*/
/*循环是只循环这一句的*/
xs[k]=s;
/*将输入的学生信息加入这个k位置*/
lenth++;
/*长度+1*/
//写回
wb"
不能建立文件!
for(i=0;
i<
lenth;
i++)
else/*不再数组范围之内*/
不能建立文件!
}
s,sizeof(stu),1,fp);
//显示
voidprint()
students;
学生成绩表"
\n*****************************************************"
\n%10s%s%6s%6s%6s%6s%6s\n"
学号"
平均成绩"
//从文件中读取成绩信息
//判断是否文件尾
\n%10s%6d%6.2f%6.2f%6.2f%6.2f%6.2f\n"
s.name,s.num,s.c,s.math,s.english,s.aver,s.sum);
//统计
voidtongji()
inti=0,j=0,k=0,l=0,m=0,n,p,q,r,t,u;
students[N],*p1[N],*p2[N],*p3[N],*p4[N];
/*用指针数组*/
))==NULL){printf("
cant'
s[i++],sizeof(stu),1,fp);
/*读入数据*/
t=i;
i=0;
for(u=0;
u<
t;
u++)/*以下每个指针数组用于指向各分数段的学生信息*/
if(s[i].aver<
60){p1[j++]=&
s[i++];
continue;
}/*每个学生信息只能位于一个分数段*/
if(s[i].aver>
=60&
s[i].aver<
80){p2[k++]=&
=80&
90){p3[l++]=&
=90){p4[m++]=&
}
学生成绩单"
************************************************"
\n不及格的人有:
姓名学号平均分\n"
for(n=0;
n<
j-1;
n++)
\n%10s%6d%6.2f\n"
p1[n]->
name,p1[n]->
num,p1[n]->
aver);
\n60-79分的人有:
姓名学号平均分\n"
for(p=0;
p<
k;
p++)
\n%10%6d%6.2f\n"
p2[p]->
name,p2[p]->
num,p2[p]->
\n80-89分的人有:
for(q=0;
q<
l;
q++)
p3[q]->
name,p3[q]->
num,p3[q]->
\n90以上的人有:
for(r=0;
r<
m;
r++)
p4[r]->
name,p4[r]->
num,p4[r]->
//删除:
输入学生姓名,若该学生存在,则删除,并显示删除后余下的学生成绩信息
voiddele()
studentxs[N];
inti=0,len,k=-1/*k<
0是为后面if判断用的*/;
\n输入要删除的学生姓名:
if(strcmp(xs[i].name,name)==0)k=i;
//以下是删除后重新写文件
len=i;
/*结构体数组上限*/
if(k>
=0)/*k>
0说明找到删除学生位置*/
wb+"
can'
len;
if(i==k)continue;
/*从这个位置开始写入*/
else{printf("
\n删除失败!
}/*失败后重新返回菜单*/
\n按任意键返回主菜单"
print();
//菜单选择
voidmain()
charch;
while
(1)
menu();
//显示菜单
ch=getch();
//选择菜单
if(ch=='
0'
)break;
switch(ch)//判断功能项
input();
search();
3'
modi();
4'
insert();
5'
print();
6'
tongji();
7'
dele();
\n谢谢使用!