if(*(cj+i)->name==name1[10])
是否
输出总成绩
printf(“%d”,*(sum+i))
3.总体设计
3.1功能模块设计
1.函数实现功能说明:
(1)menu函数
是定义一个菜单函数,其功能在于输出菜单界面供使用者选择。
(2)input函数
是定义用于输入学生信息。
(3)select函数
是定义用于查询学生信息。
包括学号、姓名及各科成绩。
(4)statistics函数
计算学生的平均分。
根据学生的平均分高低,对学生的数据进行排序输出。
2.相互调用关系:
Main函数调用menu函数。
Menu函数可以调用input函数、select函数和statistics函数
3.2系统设计方案
学生成绩统计系统
程序说明:
有N个学生,每个学生的数据包含学号(不重复)、姓名、平时成绩和考试成绩,试设计一学生成绩统计系统,使之能提供以下功能:
4、详细设计
本程序主要由六个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。
在这些函数当中,输入学生信息,平时成绩,考试成绩,排序是程序中较为核心的部分,下面分别进行说明。
4.1、输入学生信息
添加数据分为两种情况,其一是在学生文件(record.txt)不存在的情况下,首先由程序创建一个新文件,并将录入的学生信息写入该文件当中;其二是在学生文件(record.txt)已经存在的情况下,此时文件要以读写方式或追加的方式打开,这样才可以保证以前已经存在的数据不丢失。
4.2、输入平时成绩和考试成绩,总成绩
该函数的核心内容是删除算法以及最终对源文件的更新。
该函数执行时,首先输入学生的学号,姓名,班级,在定义的结构体中,运用指针变量分别输出该学生的相关信息。
再对该生的平时成绩和考试成绩进行输入,同样运用指针来实现对数据的输入。
总成绩等于平时成绩*30%+考试成绩*70%,在总成绩程序中输入相关信息,这样该学生的信息就可以得到了
4.3、总分排序函数
对于总分的排序采用正常的比较大小的方法,将成绩高的学生成绩按由大到小的顺序进行排列,整个排序过程在结构体数组stu中实现,由于排序算法涉及到两个数组元素的信息交换,因此还需要定义一个中间变量来协助。
排序函数使学生数据的排列顺序发生了变化。
此外,对于学生排序后名次的确定,仅在结果输出时予以显示,并未将名次信息写入。
5、调试与测试
5.1调试
在这次的课程设计当中,我对计算机有了更为深刻的认识。
对程序中涉及的问题也都全解决了,在老师及同学的帮助下,顺利地完成了这次课程设计。
在课上所学到的知识也全都运用到了程序中,是程序更加的完善,在编程序中易犯的毛病还是体现了出来,经过努力,改正了过来。
5.2测试
这次课为我今后在计算机方面的学习奠定了坚实的基础。
优点:
查找学生成绩方便,通过学生的学号和姓名可以迅速的找到每个学生的考试成绩。
也可以看到学生的排名情况。
缺点:
源程序有一些复杂,排布较多,在查找程序源的步骤时有些麻烦。
6、总结
通过这次课程设计一整周的课程设计艰难奋斗的同时让我学会了很多C语言的知识,使我对C语言更充分的认识了它的实用性,我尝试了用C语言软件编写一个实际应用的程序,我深深的体会到编程是一个需要谨慎与严密精神的工作,同时我也感觉到做一名优秀程序员的不易。
在编程序过程中,我积极的和同学讨论,请教老师一些困难的问题和难点,最终编好和完善了程序。
使程序基本能完成编好和完善了程序,而且用户界面也比较友好,在运行过程中输出内容明了,循环顺畅,退出方便,很好的完成了任务。
参考文献
1谭浩强.C程序设计.北京:
清华大学出版社,2005
·结束语
为期两个礼拜的的软件综合课程设计实习终于顺利完成,在这期间,我学到了很多课堂上学不到的东西,而且,将所学付之于实践,理论联系实际,是令我很兴奋的,但同时也感觉到了难度。
对C语言,有了更深一步的了解,并且培养出了良好的思考方式,对于编程。
虽然困难很多,问题出现的也很多,但好在,顺利完成任务了,很有成就感。
.
附件1、主要界面截图
步骤一:
录入学生信息
步骤二和三:
录入成绩和统计
步骤四:
排序显示
步骤五:
查询
附件2、源程序
#include
#include
#include
#include
#defineN100
structstud
{
charsno[12];
charname[10];
charhome[20];
charsc[20];
intbCome;
floatscore1;//平时成绩
floatscore2;//考试成绩
floatscore3;//总成绩
};
studtemp[N];
intnumber=0;
//输入学生信息
///////////////////////////////////////
intinput()
{
studtemp;
FILE*fp;
printf("输入学生信息:
(输入结束在学号处输over)\n");
if((fp=fopen("stud.dat","wb"))==NULL)
{
printf("文件打开失败!
");
exit(0);
}
while
(1)
{
printf("输入学生学号:
");
scanf("%s",temp.sno);
if(!
strcmp(temp.sno,"over"))
{fclose(fp);return0;}
printf("输入学生姓名:
");
scanf("%s",temp.name);
printf("输入学生家庭住址:
");
scanf("%s",temp.home);
printf("输入学生专业:
");
scanf("%s",temp.sc);
printf("输入年龄(输入大于0整数):
");
scanf("%d",&temp.bCome);
temp.score1=0.0;
temp.score2=0.0;
temp.score3=0.0;
fwrite(&temp,sizeof(temp),1,fp);
}
fclose(fp);
}
//////////////////////////////////////
/////////////////////////////////////
voidwrite()
{
inti=0;
FILE*fp;
if((fp=fopen("stud.dat","wb"))==NULL)
{
printf("文件打开失败!
");
exit(0);
}
while(temp[i].sno!
=NULL)
{
fwrite(&temp[i],sizeof(temp),1,fp);
i++;
}
}
/////////////////////////////////////
////////////////////////////////////
//录入成绩
//////////////////////////////////////
voidset()
{
FILE*fp;
printf("输入学号:
");
charbuffer_no[20];floatp,k;
scanf("%s",buffer_no);
inti=0;
if(strcmp(buffer_no,temp[i].sno)==0)
{
while(strcmp(buffer_no,temp[i].sno)==0)
i++;
if(i>=N)
{
printf("没有要找的学生信息");
}
else
{printf("输入平时成绩:
");
scanf("%f",&p);
printf("输入考试成绩:
");
scanf("%f",&k);
if((fp=fopen("stud.dat","rb"))==NULL)
{
printf("文件打开失败!
");
exit(0);
}
fread(&temp[i],sizeof(stud),1,fp);
if(strcmp(buffer_no,temp[i].sno)==0)
{temp[i].score1=p;temp[i].score2=k;temp[i].score3=float(p*0.3)+float(k*0.7);
}
i=0;
fread(&temp[i],sizeof(stud),1,fp);
if(strcmp(buffer_no,temp[i].sno)==0)
{temp[i].score1=p;temp[i].score2=k;temp[i].score3=float(p*0.3)+float(k*0.7);
}
if((fp=fopen("stud.dat","wb"))==NULL)
{
printf("文件打开失败!
");
exit(0);
}
fwrite(&temp[i],sizeof(temp),1,fp);
printf("成绩录入成功\n");
}
}
///////////////////
else
{printf("输入平时成绩:
");
scanf("%f",&p);
printf("输入考试成绩:
");
scanf("%f",&k);
inti=0;
if((fp=fopen("stud.dat","rb"))==NULL)
{
printf("文件打开失败!
");
exit(0);
}
while(strcmp(buffer_no,temp[i].sno)!
=0)
{
fread(&temp[i],sizeof(stud),1,fp);
i++;
}
fclose(fp);
if(strcmp(buffer_no,temp[i].sno)==0)
{temp[i].score1=p;temp[i].score2=k;temp[i].score3=float(p*0.2)+float(k*0.8);
}
if((fp=fopen("stud.dat","wb"))==NULL)
{
printf("文件打开失败!
");
exit(0);
}
i=0;
while(strcmp(buffer_no,temp[i].sno)!
=0)
{
fwrite(&temp[i],sizeof(temp),1,fp);i++;
printf("成绩录入成功\n");fclose(fp);
}
}
}
/////////////////////////////////////
//成绩统计
voidchange()
{
FILE*fp;
printf("输入学生成绩及格的分数线:
");
floatxx,yy=0.0,zz=0.0,ww=0.0,tt=0.0,nn=0.0;
scanf("%f",&xx);
inti=0,j=0,k=0;
if((fp=fopen("stud.dat","rb"))==NULL)
{
printf("文件打开失败!
");exit(0);
}
printf("总成绩及格人数平时成绩总分考试成绩总分总成绩总分总成绩平均分及格率\n");
while(fread(&temp[i],sizeof(stud),1,fp)!
=0)
{
if(temp[i].score3>xx)
j++;
yy=yy+temp[i].score1;
zz=zz+temp[i].score2;
tt=tt+temp[i].score3;
if(temp[i].bCome!
=0)k++;
i++;
}ww=float(tt/k);nn=(float(j)/float(k))*100;
printf("%d%.2f%.2f%.2f%.2f%.2f%%",j,yy,zz,tt,ww,nn);
}
//排序显示
////////////////////////////////////////
voidshowStu()
{
FILE*fp;studtempp[N],tempp1;
inti=0,x=0,k,j,l;intm=-1;
printf("总成绩排序的顺序:
1、升序2、降序:
");
scanf("%d",&m);
switch(m)
{
case1:
if((fp=fopen("stud.dat","rb"))==NULL)
{
printf("文件打开失败!
");exit(0);
}
printf("学号姓名家庭住址专业年龄平时成绩考试成绩总成绩\n");
while(fread(&temp[i],sizeof(stud),1,fp)!
=0)
{
if(temp[i].sno!
=NULL)
{
tempp[x]=temp[i];
x++;
}
i++;
}
fclose(fp);
for(j=0;j{
k=j;
for(l=j+1;l{
if(tempp[k].score3>tempp[l].score3)
{
tempp1=tempp[k];tempp[k]=tempp[l];tempp[l]=tempp1;
}
}
}
for(j=0;j{
if(tempp[j].bCome!
=0)
{printf("%s%s%s%s%d%.2f%.2f%.2f\n",tempp[j].sno,tempp[j].name,tempp[j].home,tempp[j].sc,tempp[j].bCome,tempp[j].score1,tempp[j].score2,tempp[j].score3);
}
}
break;
case2:
if((fp=fopen("stud.dat","rb"))==NULL)
{
printf("文件打开失败!
");exit(0);
}
printf("学号姓名家庭住址专业年龄平时成绩考试成绩总成绩\n");
while(fread(&temp[i],sizeof(stud),1,fp)!
=0)
{
if(temp[i].sno!
=NULL)
{tempp[i]=temp[i];
i++;
}
}
fclose(fp);
for(j=0;j{
k=j;
for(l=j+1;l
{
if(tempp[k].score3{
tempp1=tempp[k];tempp[k]=tempp[l];tempp[l]=tempp1;
}
}
}
for(j=0;j
{
if(tempp[j].bCome!
=0)
{
printf("%s%s%s%s%d%.2f%.2f%.2f\n",tempp[j].sno,tempp[j].name,tempp[j].home,tempp[j].sc,tempp[j].bCome,tempp[j].score1,tempp[j].score2,tempp[j].score3);
}
}
break;
}
}
///////////////////////////////
//查询
//////////////////////
voidpx()
{
FILE*fp;
inti=0;intm=-1;
chara[100];
printf("输入查询条件:
1、学号2、姓名:
");
scanf("%d",&m);
switch(m)
{
case1:
printf("输入查询学号:
");
scanf("%s",a);
if((fp=fopen("stud.dat","rb"))==NULL)
{
printf("文件打开失败!
");exit(0);
}
printf("学号姓名家庭住址专业年龄平时成绩考试成绩总成绩\n");
while(fread(&temp[i],sizeof(stud),1,fp)!
=0)
{if(strcmp(temp[i].sno,a)==0)
{printf("%s%s%s%s%d%.2f%.2f%.2f\n",temp[i].sno,temp[i].name,temp[i].home,temp[i].sc,temp[i].bCome,temp[i].score1,temp[i].score2,temp[i].score3);
}i++;
}
fclose(fp);
break;
case2:
printf("输入查询姓名:
");
scanf("%s",a);
if((fp=fopen("stud.dat","rb"))==NULL)
{
printf("文件打开失败!
");exit(0);
}
printf("学号姓名家庭住址专业年龄平时成绩考试成绩总成绩\n");
while(fread(&temp[i],sizeof(stud),1,fp)!
=0)
{if(strcmp(temp[i].name,a)==0)
{printf("%s%s%s%s%d%.2f%.2f%.2f\n",temp[i].sno,temp[i].name,temp[i].home,temp[i].sc,temp[i].bCome,temp[i].score1,temp[i].score2,temp[i].score3);
}i++;
}
fclose(fp);
break;
}
}
////////////////////////////////////////
//////////////////////////
voidserver(intmenu)
{
switch(menu)
{
case1:
input();break;///录入学生信息
case2:
set();break;///录入成绩
case3:
change();break;///统计
case4:
showStu();break;///排序显示
case5:
px();break;///查询
case6:
exit(0);break;///退出
}
}
//主界面
////////////////////////////////////////
voidshowWND()
{intmenu=-1;
while
(1)
{
printf("成绩统计系统\n");