C语言成绩统计系统Word下载.docx
《C语言成绩统计系统Word下载.docx》由会员分享,可在线阅读,更多相关《C语言成绩统计系统Word下载.docx(14页珍藏版)》请在冰点文库上搜索。
课程结束后,上交课程设计说明书(打印稿和电子稿),其内容如下:
●封面
●课程设计任务书
●目录
●需求分析(分析题目的要求)
●程序流程图(总体流程图和主要功能模块流程图)
●核心技术的实现说明及相应程序段
●个人总结
●参考资料
●源程序及适当的注释
指导教师:
学生签名:
目录
一、需求分析1
二、程序流程图2
三、核心技术的实现说明及相应程序段5
四、个人总结9
五、参考文献10
六、源程序10
一、需求分析
经过对程序设计题目的分析可知,整个程序的设计实现大致分为六个模块,其中每一个模块对应一个函数,他们的功能分别是:
输入学生信息,输入平时成绩和考试成绩,算出总成绩并排序,成绩查询,在这些函数当中,前三个函数的实现严格按照题目的要求,而后面的一个函数属于附加功能。
1、输入学生信息主要实现程序最初运行时学生数据的录入以及其后的运行中学生数据的追加功能;
2、输入平时成绩和考试成绩实现的功能是对学生成绩的输入;
3、总成绩并排序按照题目的具体要求实现的是总成绩的排序;
4、成绩查询允许按照姓名对学生的各科成绩进行查询;
除上面介绍的功能之外,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。
每一个学生记录都包含学号、姓名,班级,以及平时成绩,考试成绩和总成绩。
在程序当中,将学生记录类型定义为结构体类型,添加以及追加的学生信息直接写入D盘的record.txt文件中,其他函数每次对学生记录的访问,其数据来源都是record.txt文件,这样做不但可以保证学生数据的一致性,而且可以对学生数据进行永久保存,保证每次运行程序都可以采用原来的数据。
二、程序流程图
1、程序总体结构图
2、具体功能框图
(1)输入学生信息
输入学生信息
for(j=0;
j<
a;
j++)
学号姓名班级
*stu->
xuehao
name
Class
循环
stu++
(2)输入平时成绩,考试成绩,总成绩
for(j=0;
b,j++)
平时成绩
*cj->
pscj
考试成绩
kscj
for(n=0;
n<
c;
n++)
总成绩
*(sum+n)=0
*(sum+n)=*(sum+n)+cj->
pscj*0.3+cj->
kscj*0.7
(3)按照学生成绩排序
运用for循环语句:
for(i=0;
i<
n-1;
i++)
运用比较法进行排序
再次运用for循环结构
for(j=i+1;
n;
判断比较大小
if((*sum+j)<
(*sum+k))k=j
对调*t=*(stu+k)
*(stu+k)=*(stu+i)
*(stu+i)=*t
(4)成绩查询
for循环结构
for(i=0;
判断并且输出姓名
If((stu+i)->
num==tnum
name[10]=*(stu+i)->
printf(“%s”,*(stu+i)->
name)
运用for循环并判断
if(*(cj+i)->
name==name1[10])
是否
输出总成绩
printf(“%d”,*(sum+i))
三、核心技术的实现说明及相应程序段
本程序主要由六个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。
在这些函数当中,输入学生信息,平时成绩,考试成绩,排序是程序中较为核心的部分,下面分别进行说明。
1、输入学生信息
添加数据分为两种情况,其一是在学生文件(record.txt)不存在的情况下,首先由程序创建一个新文件,并将录入的学生信息写入该文件当中;
其二是在学生文件(record.txt)已经存在的情况下,此时文件要以读写方式或追加的方式打开,这样才可以保证以前已经存在的数据不丢失。
具体的程序段如下:
FILE*fp;
/*指向文件的指针*/
if((fp=fopen("
record.txt"
"
w"
))==NULL)/*打开文件,并判断打开是否正常*/
{
printf("
cannotopenfile\n"
);
/*没打开*/
exit
(1);
/*退出*/
}
i++)
fwrite(&
stu[i],sizeof(structstudent),1,fp);
fclose(fp);
/*关闭文件*/
printf("
****savesuccess***\n"
/*显示保存成功*/
2、输入平时成绩和考试成绩,总成绩
该函数的核心内容是删除算法以及最终对源文件的更新。
该函数执行时,首先输入学生的学号,姓名,班级,在定义的结构体中,运用指针变量分别输出该学生的相关信息。
再对该生的平时成绩和考试成绩进行输入,同样运用指针来实现对数据的输入。
总成绩等于平时成绩*30%+考试成绩*70%,在总成绩程序中输入相关信息,这样该学生的信息就可以得到了
具体程序段如下:
intj,m;
{
scanf("
%s%s%s"
*stu->
name,*stu->
Class,*stu->
xuehao);
stu++;
\n"
}
}
xgstudent()/**/
{
intn;
scanf("
%d"
&
n)/*,?
*/
"
%s%d%s%s"
*(stu+n)->
name,*(stu+n)->
Class,*(stu+n)->
pskscj(intb)/**/
intj,m;
b;
cj->
name=(stu+j)->
name;
%f%f"
*cj->
pscj,*cj->
kscj);
cj++;
zongchengji(intc)/**/
0;
*(sum+n)=0;
*(sum+n)=*(sum+n)+cj->
kscj*0.7;
3、总分排序函数
对于总分的排序采用正常的比较大小的方法,将成绩高的学生成绩按由大到小的顺序进行排列,整个排序过程在结构体数组stu中实现,由于排序算法涉及到两个数组元素的信息交换,因此还需要定义一个中间变量来协助。
排序函数使学生数据的排列顺序发生了变化。
此外,对于学生排序后名次的确定,仅在结果输出时予以显示,并未将名次信息写入源文件。
具体的程序段如下:
paixu(intn){
inti,j,k;
stu*t;
k=i;
for(j=i+1;
if(*(sum+j)<
*(sum+k))
k=j;
*t=*(stu+k);
*(stu+k)=*(stu+i);
*(stu+i)=*t;
}
}四、个人总结
在这次的课程设计当中,我对计算机有了更为深刻的认识。
对程序中涉及的问题也都全解决了,在老师及同学的帮助下,顺利地完成了这次课程设计。
在课上所学到的知识也全都运用到了程序中,是程序更加的完善,在编程序中易犯的毛病还是体现了出来,经过努力,改正了过来。
这次课为我今后在计算机方面的学习奠定了坚实的基础。
五、参考文献
1谭浩强.C程序设计.北京:
清华大学出版社,2005
2刘成等.C语言程序设计实验指导与习题集.北京:
中国铁道出版社,2006
六、源程序(略)
#include"
stdio.h"
math.h"
inti;
/**/
structstudent
charname[10];
charClass;
charxuehao;
};
/**/
structchengji
floatpscj;
floatkscj;
structstudent*stu;
structchengji*cj;
int*sum;
{student(inta)/**/
paixu(intn)/**/
}
chaxun(intn)/**/
chartnum="
"
;
charname1[10];
inti;
%s"
tnum);
if((stu+i)->
num==tnum)
{
name1[10]=*(stu+i)->
*(stu+i)->
name);
if(*(cj+i)->
printf("
*(sum+i));
main()
i);
i);
student(i);
pskscj(i);
zongchengji(i);
paixu(i);
chaxun(i);