学生成绩管理系统报告及源程序.docx
《学生成绩管理系统报告及源程序.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统报告及源程序.docx(13页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统报告及源程序
一、设计任务
1.选题意义
在大学期间,同学们会面临大大小小的各种各样的考试,而学生成绩的管理无疑是一项十分繁重的工作。
在此,设计学生成绩管理系统,以求对学生的成绩进行模块化的管理,使得管理工作变的简便易行,同时也使学生成绩的安全性得到了加强。
2.设计目标
该程序具有以下几项功能:
(1)、对学生的成绩和一些相关信息进行录入
(2)、对学生的成绩进行处理,计算学生的总成绩、平均成绩和该班各科平均分(3)对该班的学生成绩进行分类处理,找出不及格的和优秀的学生(4)对该班学生成绩进行排序(5)查找学生,对其相关信息进行详细了解(6)详细输出学生信息(7)对学生进行添加和删除处理。
通过以上几项功能,该系统对学生的成绩进行全方位的处理,使其简单明了。
二、程序设计与实现
1.程序结构
2.数据描述——结构体类型定义说明
定义一个结构体数组,在各个元素中存放学生的学号(整型),姓名(字符数组),各科成绩,平均分、总分和成绩标志(一维数组)。
3.函数功能说明
(1)成绩输入该函数以结构体数组为参数,对学生的成绩和一些学生相关信息进行录入,并在录入过程中对成绩进行存盘。
(2)学生成绩处理在该函数中,对学生的成绩进行运算,计算出各个学生的总分和平均成绩以及班级各科的平均分
(3)优秀学生成绩统计该函数以结构体数组为参数,分别对学生的各科成绩与90比较,若每科成绩都大于90,则用Y标记,并存于相应的数组中,以备后用。
(4)不及格学生成绩统计在该函数中,将学生各科成绩与60比较,若有两科或超过两科成绩低于60分,则用N标记,并存于相应的数组中,以备后用。
(5)排序以学生的总分为依据,用冒泡法对学生进行排序。
(6)查找该函数以结构体数组、整型数和字符数组为参数,通过将输入的学生的学号和姓名依次与结构体数组中各个元素进行比较,对该学生进行查找。
(7)信息输出在该函数中,对排序结果、学生的详细信息、优秀和不及格学生的信息进行输出。
(8)删除对学生成绩进行删除,通过将所要删除学生的学号和姓名依次与结构体数组中各个元素进行比较,若找到则依次将下一元素赋值给上一元素,并同时进行存盘,将结果输出。
(9)添加对遗漏的学生进行添加,通过将所要添加学生的总分依次与结构体数组中各个元素进行比较,将此学生按顺序插入其中,并同时进行存盘,将结果输出。
三、设计难点与解决方法
在编此程序的过程中,我遇到了一些问题,在刚刚编完时,出现了许多错误,其中最主要的便是函数的形参和实参类型不匹配,经过几次改写,最终将形参——结构体指针改为了结构体数组,使得错误减少了许多。
同时还出现了一些因马虎而产生的错误,不过最后经过仔细检查都解决了。
最难找的的要数逻辑错误了,在对成绩进行计算的时候,忘了对数组进行处理,结果进行完运算后并没有得到预期结果。
还有,在编写删除和添加函数时对覆盖前面的成绩没有把握,但经过参考一些资料后,确定了我的想法还是行的通的。
总体而言,程序编写中遇到的错误还是比较小的,经过自己的努力还是给克服了。
四、对优秀成绩处理流程图
五、设计效果与不足之处
该程序总体上看来还是比较简单的,实现的功能也不是很复杂。
从效果来看,输出的信息能够达到预期的目的。
我认为其不足之处就是在程序设计时使用指针的地方比较少,没有能够体现出C语言的精髓,在删除和添加学生信息时也只能对一个人进行操作,而不能对多个人进行删除和添加,以后需要完善。
六、对本课程的建议及学习体会
以前,我对计算机方面的了解少之甚少,而且对编程没有什么兴趣,认为它十分的枯燥乏味。
但是自从接受了C语言这门课程的学习之后,我的态度大有改观。
不仅从中了解到了C语言是国内外广泛使用的语言,而且还知道了它的功能丰富、表达能力强、使用灵活方便、应用面广、目标程序效率高等特点。
特别的适合于编写系统软件。
通过独立自主的完成每一次作业,我从中体会到了程序调试成功后的喜悦,并且对已学知识有了进一步的了解。
总之,我正在改变,从不感兴趣向喜欢这门课程有了很大的改变。
附录:
程序使用说明
(1)该程序的运行环境为VC。
(2)操作说明:
在输入学生成绩的时候,屏幕上显示提示信息,先输入学生学号(其范围为1001到1030,依次向下排),然后按回车键,再输入学生姓名,按回车键继续。
在输入学生成绩时,输入5门功课成绩,用空格分开,按回车键继续。
在查找、添加和删除学生时输入学号和姓名以及其他信息也按上法输入即可。
例
PleaseinputtheNO.andnameofthestudent
1001
lili
Pleaseinputthescoresofthestudent
9890958987
源程序:
#include
#include
#defineN30
#defineM5
structstudent
{
intnum;
charname[40];
inta[M+3];
};
voidmain()
{
voidinput(structstudentstu[]);
voidtongji(structstudentstu[]);
intsum(structstudentstu[]);
voidgood(structstudentstu[]);
voidfail(structstudentstu[]);
voidsort(structstudentstu[]);
voidprint(structstudentstu[]);
voidadd(structstudentstu[],structstudents);
voiddel(structstudentstu[],inta,chars[]);
structstudentstu[N],st,*p;
inti,x,d,n,a,m,b[5];
charc,s[40],str[40];
input(stu);
tongji(stu);
m=sum(stu);
for(i=0;i{x=0;
for(p=stu;px+=p->a[i];
b[i]=x/N;
}
good(stu);
fail(stu);
sort(stu);
print(stu);
printf("Theaveragescoreoftheclass\n");
printf("ENGMATCOMPHYCHE\n");
for(i=0;iprintf("%6d",b[i]);
printf("\n");
printf("Thesumscoreoftheclassis%d\n",m);
while
(1)
{
printf("Wouldyouliketosearchastudent'sscores?
(y/n)\n");
fflush(stdin);
scanf("%c",&c);
if(c=='Y'||c=='y')
{printf("Pleaseinputthestudent'sNO.andnameyouwanttosearch.\n");
scanf("%d",&n);
fflush(stdin);
gets(s);
for(p=stu;p{d=strcmp(p->name,s);
if((d==0)&&(n==p->num))
{printf("NO.NAMEENGMATCOMPHYCHEAVESUM\n");
printf("%-8d%-13s",p->num,p->name);
for(i=0;iprintf("%6d",p->a[i]);
printf("\n");
break;
}
elsecontinue;
}
if(p==stu+N)
printf("SearchFailure!
\n");
}
if(c=='N'||c=='n')break;
elsecontinue;
}
while
(1)
{printf("Wouldyouliketoaddastudentintothelist?
(y/n)\n");
fflush(stdin);
scanf("%c",&c);
if(c=='Y'||c=='y')
{printf("PleaseinputtheNO.andnameofthestudent.\n");
scanf("%d",&st.num);
fflush(stdin);
gets(st.name);
printf("Pleaseinput5scoresofthestudent\n");
for(i=0;iscanf("%d",&st.a[i]);
st.a[6]=0;
st.a[6]=st.a[0]+st.a[1]+st.a[2]+st.a[3]+st.a[4];
st.a[5]=st.a[6]/M;
add(stu,st);
break;
}
if(c=='n'||c=='N')break;
elsecontinue;
}
while
(1)
{printf("Wouldyouliketodeleteastudentfromthelist?
(y/n)\n");
fflush(stdin);
scanf("%c",&c);
if(c=='Y'||c=='y')
{printf("PleaseinputtheNO.andnameofthestudentyouwanttodelete.\n");
scanf("%d",&a);
fflush(stdin);
gets(str);
del(stu,a,str);
break;
}
if(c=='n'||c=='N')break;
elsecontinue;
}
}
voidinput(structstudentstu[])
{inti,m=1;
structstudent*p;
FILE*fp;
for(p=stu;p{printf("PleaseinputtheNO.andnameofstudent%d.\n",m++);
scanf("%d",&p->num);
fflush(stdin);
gets(p->name);
printf("Pleaseinput5scoresofthestudent\n");
for(i=0;iscanf("%d",&p->a[i]);
}
if((fp=fopen("stu_list","wb"))==NULL)
{printf("cannotopenfile\n");
return;
}
for(p=stu;pif(fwrite(p,sizeof(structstudent),1,fp)!
=1)
printf("filewriteerror!
\n");
fclose(fp);
}
voidtongji(structstudentstu[])
{inti;
structstudent*p;
for(p=stu;p{p->a[M+1]=0;
for(i=0;ip->a[M+1]+=p->a[i];
p->a[M]=p->a[M+1]/M;
}
}
intsum(structstudentstu[])
{intx=0,y;
structstudent*p;
for(p=stu;px+=p->a[M+1];
y=x/N;
return(y);
}
voidgood(structstudentstu[])
{intcount=0,i;
structstudent*p;
for(p=stu;p{for(i=0;iif(p->a[i]>=90)count++;
if(count==M)
p->a[M+2]='Y';
}
}
voidfail(structstudentstu[])
{intcount=0,i;
structstudent*p;
for(p=stu;p{for(i=0;iif(p->a[i]<60)count++;
if(count>=2)
p->a[M+2]='N';
}
}
voidsort(structstudentstu[])
{inti,j;
structstudentst;
for(j=0;jfor(i=0;iif(stu[i].a[M+1]{st=stu[i];
stu[i]=stu[i+1];
stu[i+1]=st;
}
}
voidprint(structstudentstu[])
{inti;
structstudent*p;
printf("NO.NAMEENGMATCOMPHYCHEAVESUM\n");
for(p=stu;p{printf("%-8d%-13s",p->num,p->name);
for(i=0;iprintf("%6d",p->a[i]);
printf("\n");
}
for(p=stu;p{if(p->a[M+2]=='Y')
{printf("**********************studentwhoisgood***********************\n");
printf("NO.NAMEENGMATCOMPHYCHEAVESUM\n");
printf("%-8d%-13s",p->num,p->name);
for(i=0;iprintf("%6d",p->a[i]);
printf("\n");
}
}
for(p=stu;p{if(p->a[M+2]=='N')
{printf("**********************studentwhofails************************\n");
printf("NO.NAMEENGMATCOMPHYCHEAVESUM\n");
printf("%-8d%-13s",p->num,p->name);
for(i=0;iprintf("%6d",p->a[i]);
printf("\n");
}
}
}
voidadd(structstudentstu[],structstudents)
{FILE*fp;
inti,j,t;
for(t=0;stu[t].a[6]>s.a[6]&&tprintf("NO.NAMEENGMATCOMPHYCHEAVESUM\n");
if((fp=fopen("stu_add","wb"))==NULL)
{printf("cannotopenthefile.\n");return;}
for(i=0;i{fwrite(&stu[i],sizeof(structstudent),1,fp);
printf("%-8d%-13s",stu[i].num,stu[i].name);
for(j=0;jprintf("%6d",stu[i].a[j]);
printf("\n");
}
fwrite(&s,sizeof(structstudent),1,fp);
printf("%-8d%-13s",s.num,s.name);
for(j=0;jprintf("%6d",s.a[j]);
printf("\n");
for(i=t;i{fwrite(&stu[i],sizeof(structstudent),1,fp);
printf("%-8d%-13s",stu[i].num,stu[i].name);
for(j=0;jprintf("%6d",stu[i].a[j]);
printf("\n");
}
fclose(fp);
}
voiddel(structstudentstu[],inta,chars[])
{FILE*fp;
structstudent*p;
inti,j,n;
if((fp=fopen("stu_list","rb"))==NULL)
{printf("cannotopenthefile.\n");return;}
printf("originaldatd:
\n");
printf("NO.NAMEENGMATCOMPHYCHEAVESUM\n");
for(p=stu;p{printf("%-8d%-13s",p->num,p->name);
for(i=0;iprintf("%6d",p->a[i]);
printf("\n");
}
for(n=1,i=0;n&&i{if((strcmp(s,stu[i].name)==0)&&(stu[i].num==a))
{for(j=i;j}
if(!
n)
n=n-1;
else
printf("notfound\n");
printf("Now,thecontentoffile:
\n");
if((fp=fopen("stu_del","wb"))==NULL)
{printf("cannotopenthefile.\n");return;}
for(p=stu;pfwrite(p,sizeof(structstudent),1,fp);
fclose(fp);
if((fp=fopen("stu_del","r"))==NULL)
{printf("cannotopenthefile.\n");return;}
printf("NO.NAMEENGMATCOMPHYCHEAVESUM\n");
for(p=stu;p{printf("%-8d%-13s",p->num,p->name);
for(i=0;iprintf("%6d",p->a[i]);
printf("\n");
}
fclose(fp);
}