大学生成绩管理系统C语言课程设计.docx
《大学生成绩管理系统C语言课程设计.docx》由会员分享,可在线阅读,更多相关《大学生成绩管理系统C语言课程设计.docx(23页珍藏版)》请在冰点文库上搜索。
大学生成绩管理系统C语言课程设计
1、程序设计说明书
【设计题目】大学生成绩管理系统
【问题描述】
已知每个学生的各科成绩用该软件通过键盘敲入并以文本文件方式存放在磁盘,内容为五列:
学号、姓名、语文、数学、英语。
编写程序,求出总分、平均分、,并可以查看得分,以及删除。
【基本要求】
1.通过此软件可以直接录入每位学生的成绩,并且会将平均分、总分自动保存到磁盘上。
2.通过此软件可以直接对学生的成绩删除、插入并且完成后会将更改后的名次自动保存到原磁盘文件中。
3.通过此软件可以进行查询单个学生成绩。
【算法思想】
构造一个结构体类型,成员包括八项:
2字符型数组,存放学生姓名、学号;6个整形变量,分别存放语文、数学、英语、总分、平均分。
录入成绩时,通过循环语句学生信息输入到结构体中,然后通过循环语句算出总分并写入文本文件中,并存入磁盘。
插入学生信息时,先将文件读出到结构体中,通过字符的比较查找所修改的学生成绩所在处,如果没有找到则输出警告语句,找到后则通过输入输出函数与赋值进行插入,并将插入过后的学生信息写入文本文件中,并存入磁盘。
查询学生信息时,直接通过已经存在的文本文件进行读出并在屏幕上输出结果,如果文件不存在则输出警告语句。
查询学生名次时,直接通过已经存在的文本文件进行读出到结构体中,并将结构提数组通过总分的大小用冒泡法进行排序,然后将结果显示在屏幕上。
【模块划分及调用关系】
2、程序上机调试报告
【语法错误及其排除】
1、使用fscanf()函数时,参数直接写的是变量名,应该取地址。
2、
宏定义时在末尾处加上了分号,应该不加分号。
3、Double型数据scanf的数据格式用了%f应为%lf。
【算法错误及其排除】
1、定义学生记录全程变量时直接赋值为0,导致在第二次读取文件时院系数值多出一倍,应该在取消对全程变量的赋值。
2、不应在函数中调用main函数。
3、程序测试结果
【测试数据】
学生成绩管理系统
3
制作者:
米冠雄
================================================================================
Input
2、程序调试结果
------------------------------------------------------------------------------------------------------------------------
1输入信息2输出信息
3按平均分排序4按学号查找
5插入
6按学号删除
7按平均分输出统计信息8保存到文件
0退出
请输入各操作对应的序号:
1、请输入新的记录,如果需要退出当前菜单请输入-1.
格式:
学号
姓名语文数学英语
如:
1
杨江彬939589
张三789889
李四899089
王麻子678990
赵武789867
钱前678876
2、输出数据
学号姓名语文数学英语平均分总分
================================================================================
1张三78.098.089.088.3265.0
2李四89.090.089.089.3268.0
3王麻子67.089.090.082.0246.0
4赵武78.098.067.081.0243.0
5钱前67.088.076.077.0231.0
================================================================================
3、按平均值排序后输出
学号姓名语文数学英语平均分总分
================================================================================
5钱前67.088.076.077.0231.0
4赵武78.098.067.081.0243.0
3王麻子67.089.090.082.0246.0
1张三78.098.089.088.3265.0
2李四89.090.089.089.3268.0
================================================================================
按回车键继续.
4、查询信息如下:
================================================================================
学号姓名语文数学英语平均分总分
4赵武78.098.067.081.0243.0
================================================================================
5、插入数据
输入新的记录,退出当前菜单请输入-1.
格式:
学号
姓名语文数学英语
6郭凯788990
6、删除了2
学号姓名语文数学英语平均分总分
================================================================================
5钱前67.088.076.077.0231.0
4赵武78.098.067.081.0243.0
3王麻子67.089.090.082.0246.0
6郭凯78.089.090.085.7257.0
1张三78.098.089.088.3265.0
================================================================================
7、按平均成绩的统计信息
================================================================================
分数0--5960--6970--7980--8990--100
学生00140
================================================================================
8.、文件的保存
4、源程序代码
#include
#include
#include
#defineMAXN35
#defineMAX_NAME256
structstudent//学生信息
{
intno;
charname[MAX_NAME];
doubleChinese;
doublemath;
doubleEnglish;
doublemark_ave;
doublemark_tot;
};typedefstructstudentSTUDENT;
STUDENTdata[MAXN];
intlen=0;
/*-----------输入信息子程序---------*/
voidpaint();
voidmenu();
voidinput()
{
intno;
putchar('\n');
printf("%s\n","请输入新的记录,如果需要退出当前菜单请输入-1.");
printf("%s\n","格式:
\n学号\n");
printf("%s\n","姓名语文数学英语");
putchar('\n');
printf("如:
\n");
printf("1\n");
printf("杨江彬939589\n");
scanf("%d",&no);
while(no!
=-1){
data[len].no=len+1;
scanf("%s%lf%lf%lf",data[len].name,&data[len].Chinese,&data[len].math,&data[len].English);data[len].mark_ave=(data[len].Chinese+data[len].math+data[len].English)/3.0;data[len].mark_tot=data[len].Chinese+data[len].math+data[len].English;
len++;
scanf("%d",&no);
}
menu();
}
voidoutput()
{
inti;
system("cls");
printf("%8s","学号");
printf("%8s","姓名");
printf("%8s","语文");
printf("%8s","数学");
printf("%10s","英语");
printf("%12s","平均分");
printf("%10s","总分");
putchar('\n');
for(i=0;i<80;i++)
putchar('=');
putchar('\n');
for(i=0;i{
printf("%8d",data[i].no);
printf("%8s",data[i].name);
printf("%8.1lf",data[i].Chinese);
printf("%8.1lf",data[i].math);
printf("%10.1lf",data[i].English);
printf("%12.1lf",data[i].mark_ave);
printf("%10.1lf",data[i].mark_tot);
putchar('\n');
}
for(i=0;i<80;i++)
putchar('=');
putchar('\n');
printf("按回车键继续.");
getchar();
getchar();
menu();
}
/*--------------排序子程序------------*/
voidsort()
{
inti,j,k;
STUDENTtemp;
for(i=0;ifor(k=i,j=i+1;jif(data[k].mark_ave>data[j].mark_ave)k=j;
if(k!
=i){
temp=data[i];
data[i]=data[k];
data[k]=temp;
}
}
menu();
}
/*--------------------搜索子程序-----------------------*/
voidfind()
{
intfind_no,result;
inti;
lab:
result=0;
printf("%s\n","请输入需要查找的学生的学号,退出当前菜单请输入-1.");
scanf("%d",&find_no);
if(find_no==-1){menu();return;}/*exitthefinesubprogram*/
while(data[result].no!
=find_no&&resultif(result>=len){
printf("%s\n","未查询到相关信息");
gotolab;
}
else{
system("cls");
printf("%s\n","查询信息如下:
");
for(i=0;i<80;i++)
putchar('=');
putchar('\n');
printf("%8s","学号");
printf("%8s","姓名");
printf("%8s","语文");
printf("%8s","数学");
printf("%10s","英语");
printf("%12s","平均分");
printf("%10s","总分");
putchar('\n');
printf("%8d",data[result].no);
printf("%8s",data[result].name);
printf("%8.1lf",data[result].Chinese);
printf("%8.1lf",data[result].math);
printf("%10.1lf",data[result].English);
printf("%12.1lf",data[result].mark_ave);
printf("%10.1lf",data[result].mark_tot);
putchar('\n');
for(i=0;i<80;i++)
putchar('=');
putchar('\n');
gotolab;
}
menu();
}
/*-----------------插入子程序-------------*/
voidinsert()
{
intno,pos;
doubleChinese,math,English,mark_ave,mark_tot;
inti;
charname[MAX_NAME];
lab:
printf("%s\n","输入新的记录,退出当前菜单请输入-1.");
printf("%s\n","格式:
学号");
printf("%s\n","姓名语文数学英语");
scanf("%d",&no);
if(no==-1){menu();return;}
data[len].no=no;
scanf("%s%lf%lf%lf",name,&Chinese,&math,&English);
mark_ave=(Chinese+math+English)/3.0;
mark_tot=Chinese+math+English;
pos=0;
while((data[pos].mark_avepos++;
for(i=len-1;i>=pos;i--)
data[i+1]=data[i];
data[pos].no=no;
strcpy(data[pos].name,name);
data[pos].Chinese=Chinese;
data[pos].math=math;
data[pos].English=English;
data[pos].mark_ave=mark_ave;
data[pos].mark_tot=mark_tot;
len++;
gotolab;
menu();
}
/*-------------删除子程序--------------*/
voiddelete_item()
{
intno,i,pos;
lab:
pos=0;
printf("%s\n","输入需要删除的学生的学号,退出当前菜单请输入-1.");
scanf("%d",&no);
if(no==-1){menu();return;}
while((data[pos].no!
=no)&&(posif(pos>=len){
printf("%s\n","未找到需要删除的学生");
gotolab;
menu();
}
else{
for(i=pos+1;idata[i-1]=data[i];
len=len-1;
if(len==0){
printf("%s\n","没有任何记录,请按回车键返回.");
getchar();
getchar();
return;
}
gotolab;
}
menu();
}
/*---------------统计子程序------------*/
voidstat()
{
intno_59=0,no_69=0,no_79=0,no_89=0,no_100=0;
inti;
for(i=0;iif(data[i].mark_ave<=59)no_59++;
elseif(data[i].mark_ave<=69)no_69++;
elseif(data[i].mark_ave<=79)no_79++;
elseif(data[i].mark_ave<=89)no_89++;
elseno_100++;
}
system("cls");
for(i=0;i<80;i++)
putchar('=');
putchar('\n');
printf("%10s","分数");
printf("%10s","0--59");
printf("%10s","60--69");
printf("%10s","70--79");
printf("%10s","80--89");
printf("%10s","90--100");
putchar('\n');
putchar('\n');
printf("%10s","学生");
printf("%10d",no_59);
printf("%10d",no_69);
printf("%10d",no_79);
printf("%10d",no_89);
printf("%10d",no_100);
putchar('\n');
for(i=0;i<80;i++)
putchar('=');
putchar('\n');
printf("按回车键返回");
getchar();
getchar();
menu();
}
/*---------------显示信息子程序------------*/
voidpaint()
{
inti;
system("cls");
printf("%55s\n","学生成绩管理系统\n");
printf("制作者:
米冠雄\n");
for(i=0;i<80;i++)
putchar('=');
putchar('\n');
printf("1输入信息2输出信息\n");
printf("3按平均分排序4按学号查找\n");
printf("5插入6按学号删除\n");
printf("7按平均分输出统计信息8保存到文件\n");
printf("0退出\n");
printf("%s\n","请输入各操作对应的序号:
");
}
voidsave()//将数据保存到文件
{
inti;
FILE*fp;
fp=fopen("成绩统计表.txt","w");
fprintf(fp,"%8s","学号");
fprintf(fp,"%8s","姓名");
fprintf(fp,"%8s","语文");
fprintf(fp,"%8s","数学");
fprintf(fp,"%10s","英语");
fprintf(fp,"%12s","平均分");
fprintf(fp,"%10s\n","总分");
fprintf(fp,"========================================================================\n");
putchar('\n');
for(i=0;i{
fprintf(fp,"%8d",data[i].no);
fprintf(fp,"%8s",data[i].name);
fprintf(fp,"%8.1lf",data[i].Chinese);
fprintf(fp,"%8.1lf",data[i].math);
fprintf(fp,"%10.1lf",data[i].English);
fprintf(fp,"%12.1lf",data[i].mark_ave);
fprintf(fp,"%10.1lf\n",data[i].mark_tot);
}
fprintf(fp,"========================================================================\n");
fclose(fp);
printf("文件已保存到\"成绩统计表.txt\"");
getchar();getchar();
menu();
}
/*-----------主程序--------------*/
voidmenu()
{
intctrl_ch;
paint();
scanf("%d",&ctrl_ch);
switch(ctrl_ch)
{
case0:
exit(0);break;
case1:
input();
break;
case2:
output();
break;
case3:
sort();