成绩管理系统课程设计报告文档格式.docx
《成绩管理系统课程设计报告文档格式.docx》由会员分享,可在线阅读,更多相关《成绩管理系统课程设计报告文档格式.docx(25页珍藏版)》请在冰点文库上搜索。
◆程序划分:
bad(),bad1(),divide(),good(),good1(),load(),main(),open(),save(),sort1(),sort2(),sort3()各个函数;
◆各个函数功能:
主函数负责程序开始界面,用户可选择读入或成绩单;
Bad函数负责不及格学生的查找,还有其输出,存入磁盘;
Bad1函数负责单科不及格学生的查找,还有其输出,存入磁盘;
good函数负责优秀学生的查找,还有其输出,存入磁盘;
good1函数负责优秀学生的查找,还有其输出,存入磁盘;
divide函数负责学生成绩的分段,还有其输出,存入磁盘;
sort1函数负责按学号排序即原始成绩单的排序,还有其输出;
sort2函数负责按姓名排序,选用选择法排序,还有其输出,存入磁盘;
sort3函数负责按成绩排序,选用冒泡法排序,还有其输出,存入磁盘;
open函数负责打开文件,读入成绩单,进入系统,同时完成读入若干班级成绩单的功能;
load函数负责各个功能的选择,贯穿整个程序;
save函数负责存储各类成绩单到磁盘;
◆各函数调用关系:
load函数贯穿程序前后,是各个调用函数的桥梁,其调用sort1(),sort2(),sort3(),bad(),bad1(),divide(),good(),good1(),open(),其又被各个函数调用;
save函数被sort1(),sort2(),sort3()调用;
主函数还调用open函数,还有其自身的调用;
◆设计思想:
总体思路:
综合运用各个函数的调用关系,程序简单明了,给同伴分配任务,获取各个函数的编写思路,最终将程序串联起来,成为完整程序;
最终调试通过,于第3次上机完成原始程序,后经多次改良,诸如文件名自定义、链表的组织、界面的优化等一系列工作,形成最终的程序。
各模块设计思想:
综合运用各个函数的调用关系,避免繁琐拖沓的设计;
界面设计:
为求界面美观,运用了输出函数,形成简洁的界面;
同时舍弃了画面图形的设计,以求简明;
特色设计:
程序相对简单,不是繁琐拖沓的作风,各函数分配合理;
用户自定义文件名等一系列功能,更人性化;
其中优秀和不及格成绩单以链表组织,并以链表输出;
完成了读入若干班级成绩单的功能,并增添单科成绩的查询;
界面简明,用户选择颇多;
创建文件嵌入其中,可自行处理自己编写的文件;
运用不同存取文件方式,灵活多变,如二进制文件......;
以结构体形式保存数据,更加简练;
#include<
malloc.h>
string.h>
stdio.h>
stdlib.h>
voidload();
#defineSIZE30/*宏定义*/
#definelevel90
#definebadlevel60
structstudent_type/*创建结构体*/
{
charname[20];
intnum;
charsex;
intmath;
intenglish;
intchinese;
intaverage;
}stud[SIZE];
structstudent_typetemp;
voidsave()/*save函数单独独立,多次调用,简洁明了*/
inti;
charfilename[20];
printf("
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
);
请输入要存储的排序后成绩单的文件名:
"
scanf("
%s"
filename);
/*用户自定义文件名*/
FILE*fp;
if((fp=fopen(filename,"
w"
))==NULL)
{
printf("
cannotopenfile\n"
exit(0);
}
for(i=0;
i<
SIZE;
i++)
fprintf(fp,"
%-12s学号:
%d性别:
%c数学:
%-3d英语:
%-3d语文:
%-3d平均分:
%-3dn"
stud[i].name,stud[i].num,stud[i].sex,stud[i].math,stud[i].english,stud[i].chinese,stud[i].average);
fclose(fp);
/*数据存入磁盘*/
数据已储存入%s\n"
}
voidsort1()
%-3d\n"
save();
load();
}
voidsort2()
charb[20];
intp,q,k;
for(p=0;
p<
SIZE-1;
p++)
{
k=p;
for(q=p+1;
q<
q++)
{
if(strcmp(stud[k].name,stud[q].name)>
0)/*选择法按姓名排序*/
{
temp=stud[k];
stud[k]=stud[q];
stud[q]=temp;
}
}
按姓名排序如下:
\n"
for(k=0;
k<
k++)
stud[k].name,stud[k].num,stud[k].sex,stud[k].math,stud[k].english,stud[k].chinese,stud[k].average);
voidsort3()
inti,k,a,r;
boolflag;
flag=true;
请你选择:
1升序2降序\n"
/*用户可选择的成绩单组织方式*/
%d"
&
a);
switch(a)
case1:
while(flag)/*冒泡法排序*/
{
flag=false;
for(i=0;
if(stud[i].average>
stud[i+1].average)
temp=stud[i];
stud[i]=stud[i+1];
stud[i+1]=temp;
flag=true;
};
printf("
按平均成绩升序如下:
break;
case2:
while(flag)/*冒泡排序*/
if(stud[i].average<
{
temp=stud[i];
}
按平均成绩降序如下:
break;
for(k=0;
printf("
%-3d\n"
save();
load();
voiddivide()
请输入要存储的分段后成绩单的文件名:
inti,k;
for(i=100;
i>
0;
i-=10)
%d~%d的学生如下:
i-10,i);
/*输出循环设计,简洁*/
if(stud[k].average<
=i&
&
stud[k].average>
i-10)
stud[k].name,stud[k].num,stud[k].sex,stud[k].math,stud[k].english,stud
[k].chinese,stud[k].average);
voidgood()
structlink/*链表形式组织优秀成绩单*/
charname[20];
structlink*next;
}*top=NULL;
structlink*p,*y;
intk;
请输入要存储的优秀成绩单的文件名:
优秀学生:
if(stud[k].average>
=level)
p=(structlink*)malloc(sizeof(structlink));
strcpy(p->
name,stud[k].name);
p->
num=stud[k].num;
sex=stud[k].sex;
math=stud[k].math;
english=stud[k].english;
chinese=stud[k].chinese;
average=stud[k].average;
p->
next=top;
top=p;
y=top;
while(y!
=NULL)
y->
name,y->
num,y->
sex,y->
math,y->
english,y->
chinese,y->
average);
y=y->
next;
}/*以链表形式组织输出*/
voidbad()
请输入要存储的不及格成绩单的文件名:
不及格学生:
if(stud[k].average<
badlevel)
{
printf
("
voidgood1()/*用户可以查询单科优秀的成绩单*/
inta,b,k;
请输入要存储的单科优秀成绩单的文件名:
/*用户自定义文件名*/
请你选择所要查询的科目:
1数学2英语3语文\n"
数学优秀学生:
if(stud[k].math>
%-3d平
均分:
fprintf(fp,"
%-
3d平均分:
英语优秀学生:
if(stud[k].english>
fprintf(fp,"
case3:
语文优秀学生:
if(stud[k].chinese>
fclose(fp);
voidbad1()/*用户可以查询单科不及格的成绩单*/
请输入要存储的单科不及格成绩单的文件名:
FIL