成绩管理系统课程设计报告.docx
《成绩管理系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《成绩管理系统课程设计报告.docx(25页珍藏版)》请在冰点文库上搜索。
成绩管理系统课程设计报告
◆组员:
星河54110316
刘风54110315
张宇54110314
◆分工:
星河:
程序设计整体思路,模块划分
联系各种函数,形成一个完整的程序
按名称排序的函数
分段函数
界面
刘风:
相关成绩单的形成
文件的打开与关闭函数
作业的调试
寻找错误点
程序的特色设计
张宇:
按成绩排序(冒泡法)
界面优化;
以链表形式组织优秀成绩单和不及格成绩单
程序优化
关键代码的注释
◆各成员所完成的工作占全组工作的百分比:
星河:
36%
刘风:
32%
张宇:
32%
◆程序划分:
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
#include
#include
#include
voidload();
#defineSIZE30/*宏定义*/
#definelevel90
#definebadlevel60
structstudent_type/*创建结构体*/
{
charname[20];
intnum;
charsex;
intmath;
intenglish;
intchinese;
intaverage;
}stud[SIZE];
structstudent_typetemp;
voidsave()/*save函数单独独立,多次调用,简洁明了*/
{
inti;
charfilename[20];
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
printf("请输入要存储的排序后成绩单的文件名:
");
scanf("%s",filename);/*用户自定义文件名*/
FILE*fp;
if((fp=fopen(filename,"w"))==NULL)
{
printf("cannotopenfile\n");
exit(0);
}
for(i=0;ifprintf(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);/*数据存入磁盘*/
printf("数据已储存入%s\n",filename);
}
voidsort1()
{
inti;
for(i=0;iprintf("%-12s学号:
%d性别:
%c数学:
%-3d英语:
%-3d语文:
%-3d平均分:
%-3d\n",stud[i].name,stud[i].num,stud[i].sex,stud[i].math,stud[i].english,stud[i].chinese,stud[i].average);
save();
load();
}
voidsort2()
{
charb[20];
intp,q,k;
for(p=0;p{
k=p;
for(q=p+1;q{
if(strcmp(stud[k].name,stud[q].name)>0)/*选择法按姓名排序*/
{
temp=stud[k];
stud[k]=stud[q];
stud[q]=temp;
}
}
}
printf("按姓名排序如下:
\n");
for(k=0;kprintf("%-12s学号:
%d性别:
%c数学:
%-3d英语:
%-3d语文:
%-3d平均分:
%-3dn",stud[k].name,stud[k].num,stud[k].sex,stud[k].math,stud[k].english,stud[k].chinese,stud[k].average);
save();
load();
}
voidsort3()
{
inti,k,a,r;
boolflag;
flag=true;
printf("请你选择:
1升序2降序\n");/*用户可选择的成绩单组织方式*/
scanf("%d",&a);
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
switch(a)
{
case1:
while(flag)/*冒泡法排序*/
{
flag=false;
for(i=0;iif(stud[i].average>stud[i+1].average)
{
temp=stud[i];
stud[i]=stud[i+1];
stud[i+1]=temp;
flag=true;}
};
printf("按平均成绩升序如下:
\n");break;
case2:
while(flag)/*冒泡排序*/
{
flag=false;
for(i=0;iif(stud[i].average{
temp=stud[i];
stud[i]=stud[i+1];
stud[i+1]=temp;
flag=true;
}
};
printf("按平均成绩降序如下:
\n");break;
}
for(k=0;kprintf("%-12s学号:
%d性别:
%c数学:
%-3d英语:
%-3d语文:
%-3d平均分:
%-3d\n",stud[k].name,stud[k].num,stud[k].sex,stud[k].math,stud[k].english,stud[k].chinese,stud[k].average);
save();
load();
}
voiddivide()
{
charfilename[20];
printf("请输入要存储的分段后成绩单的文件名:
");/*用户自定义文件名*/
scanf("%s",filename);
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
FILE*fp;
if((fp=fopen(filename,"w"))==NULL)
{
printf("cannotopenfile\n");
exit(0);
}
inti,k;
for(i=100;i>0;i-=10)
{
printf("%d~%d的学生如下:
\n",i-10,i);/*输出循环设计,简洁*/
fprintf(fp,"%d~%d的学生如下:
\n",i-10,i);
for(k=0;k{
if(stud[k].average<=i&&stud[k].average>i-10)
{
printf("%-12s学号:
%d性别:
%c数学:
%-3d英语:
%-3d语文:
%-3d平均分:
%-3d\n",stud[k].name,stud[k].num,stud[k].sex,stud[k].math,stud[k].english,stud
[k].chinese,stud[k].average);
fprintf(fp,"%-12s学号:
%d性别:
%c数学:
%-3d英语:
%-3d语文:
%-3d平均分:
%-3d\n",stud[k].name,stud[k].num,stud[k].sex,stud[k].math,stud[k].english,stud
[k].chinese,stud[k].average);
}
}
}
fclose(fp);
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
printf("数据已储存入%s\n",filename);
load();
}
voidgood()
{
structlink/*链表形式组织优秀成绩单*/
{
charname[20];
intnum;
charsex;
intmath;
intenglish;
intchinese;
intaverage;
structlink*next;
}*top=NULL;
structlink*p,*y;
intk;
charfilename[20];
printf("请输入要存储的优秀成绩单的文件名:
");/*用户自定义文件名*/
scanf("%s",filename);
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
FILE*fp;
if((fp=fopen(filename,"w"))==NULL)
{
printf("cannotopenfile\n");
exit(0);
}
printf("优秀学生:
\n");
fprintf(fp,"优秀学生:
\n");
for(k=0;k{
if(stud[k].average>=level)
{
p=(structlink*)malloc(sizeof(structlink));strcpy(p->name,stud[k].name);p->num=stud[k].num;p->sex=stud[k].sex;p->math=stud[k].math;p->english=stud[k].english;p->chinese=stud[k].chinese;p->average=stud[k].average;
p->next=top;top=p;
}
}
y=top;
while(y!
=NULL)
{
printf("%-12s学号:
%d性别:
%c数学:
%-3d英语:
%-3d语文:
%-3d平均分:
%-3d\n",y->name,y->num,y->sex,y->math,y->english,y->chinese,y->average);
fprintf(fp,"%-12s学号:
%d性别:
%c数学:
%-3d英语:
%-3d语文:
%-3d平均分:
%-3d\n",y->name,y->num,y->sex,y->math,y->english,y->chinese,y->average);
y=y->next;
}/*以链表形式组织输出*/
fclose(fp);
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
printf("数据已储存入%s\n",filename);
load();
}
voidbad()
{
structlink/*链表形式组织优秀成绩单*/
{
charname[20];
intnum;
charsex;
intmath;
intenglish;
intchinese;
intaverage;
structlink*next;
}*top=NULL;
structlink*p,*y;
intk;
charfilename[20];
printf("请输入要存储的不及格成绩单的文件名:
");/*用户自定义文件名*/
scanf("%s",filename);printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
FILE*fp;
if((fp=fopen(filename,"w"))==NULL)
{
printf("cannotopenfile\n");
exit(0);
}
printf("不及格学生:
\n");
fprintf(fp,"不及格学生:
\n");
for(k=0;k{
if(stud[k].average{
p=(structlink*)malloc(sizeof(structlink));strcpy(p->name,stud[k].name);p->num=stud[k].num;p->sex=stud[k].sex;p->math=stud[k].math;p->english=stud[k].english;p->chinese=stud[k].chinese;p->average=stud[k].average;p->next=top;top=p;
}
}
y=top;
while(y!
=NULL)
{
printf("%-12s学号:
%d性别:
%c数学:
%-3d英语:
%-3d语文:
%-3d平均分:
%-3d\n",y->name,y->num,y->sex,y->math,y->english,y->chinese,y->average);
fprintf(fp,"%-12s学号:
%d性别:
%c数学:
%-3d英语:
%-3d语文:
%-3d平均分:
%-3d\n",y->name,y->num,y->sex,y->math,y->english,y->chinese,y->average);
y=y->next;
}/*以链表形式组织输出*/
fclose(fp);
printf
("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
printf("数据已储存入%s\n",filename);
load();
}
voidgood1()/*用户可以查询单科优秀的成绩单*/
{
inta,b,k;
charfilename[20];
printf("请输入要存储的单科优秀成绩单的文件名:
");/*用户自定义文件名*/
scanf("%s",filename);
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
FILE*fp;
if((fp=fopen(filename,"w"))==NULL)
{
printf("cannotopenfile\n");
exit(0);
}
printf("请你选择所要查询的科目:
1数学2英语3语文\n");
scanf("%d",&a);
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
switch(a)
{
case1:
printf("数学优秀学生:
\n");
fprintf(fp,"数学优秀学生:
\n");
for(k=0;k{
if(stud[k].math>=level)
{
printf("%-12s学号:
%d性别:
%c数学:
%-3d英语:
%-3d语文:
%-3d平
均分:
%-3d\n",stud[k].name,stud[k].num,stud[k].sex,stud[k].math,stud[k].english,stud
[k].chinese,stud[k].average);
fprintf(fp,"%-12s学号:
%d性别:
%c数学:
%-3d英语:
%-3d语文:
%-
3d平均分:
%-3d\n",stud[k].name,stud[k].num,stud[k].sex,stud[k].math,stud[k].english,stud
[k].chinese,stud[k].average);
}
}
break;
case2:
printf("英语优秀学生:
\n");
fprintf(fp,"英语优秀学生:
\n");
for(k=0;k{
if(stud[k].english>=level)
{
printf("%-12s学号:
%d性别:
%c数学:
%-3d英语:
%-3d语文:
%-3d平
均分:
%-3d\n",stud[k].name,stud[k].num,stud[k].sex,stud[k].math,stud[k].english,stud
[k].chinese,stud[k].average);
fprintf(fp,"%-12s学号:
%d性别:
%c数学:
%-3d英语:
%-3d语文:
%-
3d平均分:
%-3d\n",stud[k].name,stud[k].num,stud[k].sex,stud[k].math,stud[k].english,stud
[k].chinese,stud[k].average);
}
}
break;
case3:
printf("语文优秀学生:
\n");
fprintf(fp,"语文优秀学生:
\n");
for(k=0;k{
if(stud[k].chinese>=level)
{
printf("%-12s学号:
%d性别:
%c数学:
%-3d英语:
%-3d语文:
%-3d平
均分:
%-3d\n",stud[k].name,stud[k].num,stud[k].sex,stud[k].math,stud[k].english,stud
[k].chinese,stud[k].average);
fprintf(fp,"%-12s学号:
%d性别:
%c数学:
%-3d英语:
%-3d语文:
%-
3d平均分:
%-3d\n",stud[k].name,stud[k].num,stud[k].sex,stud[k].math,stud[k].english,stud
[k].chinese,stud[k].average);
}
}
break;
}
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
fclose(fp);
printf("数据已储存入%s\n",filename);
load();
}
voidbad1()/*用户可以查询单科不及格的成绩单*/
{
inta,b,k;
charfilename[20];
printf("请输入要存储的单科不及格成绩单的文件名:
");/*用户自定义文件名*/
scanf("%s",filename);
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
FIL