资源描述
学生成绩标准管理系统高质量C语1=1
mi言程序
5、总结
本学生成绩管理系统能够实现增加,修改,删除记录的信息维护功能、按姓名,学号查 询学生成绩信息功能、某一课程在某一分数段的统计功能及某一课程的排序功能。编好程序, 运行完毕后,我们也发现了一些缺陷。比如,修改只能通过输入学号对该记录数据组进行修 改,而删除也只做了输入学号删除记录的设定。
当然,缺憾是补课避免的。总体上来讲,计算机综合课程设计上完了,完成了一个基本 的学生成绩管理系统,从系统需求分析、数据库设计开始到系统的设计实施,逐步熟悉了 c 语言程序设计。在组长的带领下我们经过了好几周的时间反复编写和调试程序,从课本和网 上查阅相关资料,终于完成了整个课程设计。过程中,也遇到不少困难,如编程逻辑把握不 住,经验太少,不太善于调试程序等。不过我们还是一步一步的自己动手做,不会的地方参 考别人的程序自己再试着写或请教老师,在此过程中收获多多。
6、答辩记录7、教师意见
附录:^include <>^include <>
#include<>#define SIZE 5
struct Student_type(
char name[10];
int num;
int math;
int physic;
int Clanguage;
int English;)
stud[SIZE];int weihuxuanze ()
(
int i;
printf("**”);
printf("\t**\n");
printf("**”);
printf (〃*请选择你所需的功能的序号*\n"); scanf &i);
return i;}void saved ()
FILE *fp;
int i:
if ((fp=fopen"wb")) ==NULL)
printf(*can open file\n");
return;
)
for(i=0;i<SIZE;i++)
if(fwrite(&stud[i], sizeof(struct Student_type), 1, fp)!=1)printf(*file write error\n");
fclose(fp);)
void save (){
FILE *fp;int i;
if ((fp=fopen "ab")) =NULL)
(
printf("can open file\n");
return;
)
if(fwrite(&stud[SIZE], sizeof(struct Student_type), 1, fp)!=1)printf("file write error'n");
fclose(fp);
printf ("添加成功\n");for(i=0;i<SIZE+l;i++)
{
fread (&stud[i], sizeof(struct Student_type), 1, fp);
printf(*%-10s%8d%4d%4d%4d%4d\n*, stud[i]. name, stud[i]. num, stud[i]. math, stud[i].physic, stud[i]. Clanguage, stud[i]. English);
)void zengjiaO
(
printf (〃请输入新学生信息\n");
scanf ("%s%d%d%d%%d%d”, stud [SIZE], name, &stud [SIZE]. num, &stud [SIZE], math, &stud [SIZE], physic, &stud[SIZE]. Clanguage, &stud[SIZE]. English);
save ();}
voidxiugai(struct
/*修改*/
(
Student_typestud[])
int i=0, choice;int u;
printf C请输入您要修改的学生的学号:\n"); scanf("%s”, &u);for(i=0;i<SIZE;i++)
(
printf (*请选择您要修改的内容:\n〃);
printfC
printfCl 姓名 printf C| 高数
——\n〃); 请按 1 1 \rT);
请按2 | \n);
printf C | 大物请按 3 |\n〃);printf (" | c 语言请按 4 | \n“);
printf (* | 英语
printf("| 退出
printf( +
请按 5 | \n");
请按 0|\n");
+\n );
printf C请输入您的选择:”); scanf("%d”, &choice):
switch(choice)case 0:break;
case 1:
printfC请输入新姓名:〃); scanf("%s", stud[i]. name); break;case 2:
printfC请输入新的高数分数:〃); scanf&stud[i]. math);break;
case 3:
printfC请输入新的大物分数:"); scanf("%d”, &stud[i]. physic);break;
case 4:
printfC请输入新的c语言分数:〃); scanf&stud[i]. Clanguage); break;case 5:
printfC请输入新的英语分数:〃); scanf("%d”, &stud[i]. English);break;
default:
printf ("\n 无效选项!”); break;}break;
}printf C修改成功\n");
for(i=0;i<SIZE;i++)
printf (/"%-10s%8d%4d%4d%4d%4d\n*, stud[i]. name, stud[i]. num, stud[i]. math, stud[i ]・ physic, stud[i]. Clanguage, stud[i]. English);})
void shanchu () /*按姓名查找,删除一条记录*/ (
char s[10];
int j,i=0;
printf C输入要删除记录的姓名:”);
scanf s);
for(i=0;i<SIZE-l;i++)
(if(strcmp(stud[i]. name, s)==0)
(
/*删除操作*/
for(j=i;j<SIZE;j++)
{
{
stud[j]. num=stud[j+l]. num;
strcpy(stud[j]. name, stud[j+1]. name);
stud[j], physic=stud[j+1]. physic;
stud[j]. math=stud[j+1]. math;
stud[j]. Clanguage=stud[j+1]. Clanguage;
stud[j], English=stud[j+1]. English;
)
)
)
)
printf("Delete Successed!\n");
saved ();
for(i=0;i<SIZE;i++)
)voidpaixu_math(structStudent_typestud[])
/*按高树成绩排序*/( int i, j,k=O, p, q, r,w;
double y;char x[10];
int t;for (i=0; i<SIZE-l; i++) /* 选择法法排序*/
{k=i;for(j=i+l;j<SIZE;j++)
if(stud[j]. math>stud[k]. math)(
k=j;
p=stud[i]. physic;stud[i]. physic=stud[k]. physic;stud[k]. physic=p;q=stud[i]. math;stud[i]. math=stud[k]. math;stud[k]. math=q:
r=stud[i]. English;stud[i]. English=stud[k]. English;stud[k], English=r;
w=stud[i]. Clanguage;stud[i]. Clanguage=stud[k]. Clanguage;stud[k], Clanguage=w;t=stud[i]. num;stud[i]. num=stud[k]. num;stud[k]. num=t;
strcpy(x, stud[i]. name);strcpy (stud[i]. name, studfk]. name);
strcpy (stud[k]. name, x);}
}for(i=0;i<SIZE;i++)
)voidpaixu_physic(structStudent_typestud[])
/*按大物成绩排序*/( int i, j,k=O, p, q, r,w;
double y;char x[10];
int t;for (i=0; i<SIZE-l; i++) /* 选择法法排序*/
{k=i;for(j=i+l;j<SIZE;j++)
if(stud[j]. physic>stud[k]. physic)(
k=j;
p=stud[i]. physic;stud[i]. physic=stud[k]. physic:stud[k]. physic=p;q=stud[i]. math;stud[i]. math=stud[k]. math;stud[k]. math=q:
r=stud[i]. English;stud[i]. English=stud[k], English;stud[k]. English=r;
w=stud[i]. Clanguage;stud[i]. Clanguage=stud[k]. Clanguage;stud[k], Clanguage=w;t=stud[i]. num;stud[i]. num=stud[k]. num;stud[k]. num=t;
strcpy(x, stud[i]. name);strcpy (stud[i]. name, studfk]. name);
strcpy (stud[k]. name, x);}
}for(i=0;i<SIZE;i++)
)voidpaixu_Clanguage(structStudent_type stud[])
/*按C语言成绩排序*/( int i, j,k=O, p, q, r,w;
double y;char x[10];
int t;for (i=0; i<SIZE-l; i++) /* 选择法法排序*/
{k=i;for(j=i+l;j<SIZE;j++)
if(stud[j]. Clanguage>stud[k]. Clanguage)(
k=j;
p=stud[i]. physic;stud[i]. physic=stud[k]. physic;stud[k]. physic=p;q=stud[i]. math;stud[i]. math=stud[k]. math;stud[k]. math=q:
r=stud[i]. English;stud[i]. English=stud[k]. English;stud[k]. English=r;
w=stud[i]. Clanguage;stud[i]. Clanguage=stud[k]. Clanguage;stud[k], Clanguage=w;t=stud[i]. num;stud[i]. num=stud[k]. num;stud[k]. num=t;
strcpy(x, stud[i]. name);strcpy (stud[i]. name, studfk]. name);
strcpy(stud[k]. name, x);}
}for(i=0;i<SIZE;i++)
)voidpaixu_English(structStudent_typestud[])
/*按英语成绩排序*/( int i, j,k=O, p, q, r,w;
double y;char x[10];
int t;for (i=0; i<SIZE-l; i++) /* 选择法法排序*/
{k=i;for(j=i+l;j<SIZE;j++)
if(stud[j]. English>stud[k]. English)(
k=j;
p=stud[i]. physic;stud[i]. physic=stud[k]. physic;stud[k]. physic=p;q=stud[i]. math;stud[i]. math=stud[k]. math;stud[k]. math=q:
r=stud[i]. English;stud[i]. English=stud[k], English;stud[k]. English=r;
w=stud[i]. Clanguage;stud[i]. Clanguage=stud[k]. Clanguage;stud[k], Clanguage=w;t=stud[i], num;stud[i]. num=stud[k]. num:stud[k]. num=t;
strcpy(x, stud[i]. name);strcpy (stud[i]. name, studfk]. name);
strcpy (stud[k]. name, x);}
}for(i=0;i<SIZE;i++)
学生成绩管理系统
摘要:学生成绩管理系统是学校不可或缺的一个组成部分,随着计算机技术的逐渐发 展,计算机在教育系统中的应用得到了巨大的发展。教务管理正在逐步迈向管理信息现代化。 但是我国的教务管理信息化水平还处在初级阶段,主要表现在对学生的成绩管理、学生的课 程管理还是采用原有的人工管理方式。学校的规模不断扩大,学生数量急剧增加,有关学生 的各种数据也成倍增长。面对庞大的信息量,这时的人工管理几乎无法实现,在这种情况下 用数据库进行管理变的尤为必要,这可以发挥计算机的优势,就需要有教务管理系统来提高 学生成绩管理工作的效率。过这样的系统,可以做到信息的规范管理,科学统计和快速的查 询,从而减少管理方面的工作量和减少人为的错误。本次我们组选的就是学生成绩管理系统, 要实现对学生成绩、课程的相关管理。
关键词:成绩管理、C语言项目、程序设计、程序分析
].physic, stud[i]. Clanguage, stud[i]. English):}}
voidtongji(structStudent_typestud[])〃按分数段统计人数
( int i, j, a, max, min, k, 1, q, p, w;k=0,1=0, p=0, q=0, w=0;
printfC你想统计哪科成绩:1高数2大物3C语言4英语\n");
scanf ("%d", &j);
printf ("请输入两个分数:\n");
scanf ("%d%d”, &max, &min);
if(max<min)
(
a=max;max=min;min=a;
}if(j=l)
(for(i=0;i<SIZE;i++)
(if(stud[i]. math>min&&stud[i]. math<max)
(k++;
printf-8s%4d%4d%4d%4d%4d\n", stud[i]. name, stud[i]. num, stud[i]. math, stud[i]・ physic, stud[i]. Clanguage, stud[i]. English);
}}
}else if(j==2)
for(i=0;i<SIZE;i++)if (stud[i]. physic>min&&stud[i]. physic<max)
1++;
printf (z,%-8s%4d%4d%4d%4d%4d\n*, stud[i]. name, studfi]. num, stud[i]. math, stud[i] .physic, stud[i]. Clanguage, studfi]. English);}
))
else if(j==3)(
for(i=0;i<SIZE;i++)(
if(stud[i]. Clanguage>min&&stud[i]. Clanguage<max)(p++;
printf ("%-8s%4d%4d%4d%4d%4d\n”, stud[i]. name, stud[i]. num, stud[i]. math, stud[i] .physic, stud[i]. Clanguage, stud[i]. English);})
)else if(j==4)
{for(i=0;i<SIZE;i++)
(if(stud[i]. English>min&&stud[i]. English<max)
( q++;
printf-8s%4d%4d%4d%4d%4d\n", stud[i]. name, stud[i]. num, stud[i]. math, stud[i]・ physic, stud[i]. Clanguage, stud[i]. English);}
)printf(〃分数段的人数为:%d”,w);
)int paixuxuanzeO
(int i;
printf("**”);
printf("\t**\n");
printf("**”);
printf("\t**\n");
printf C*请选择你所需的功能的序号*\n〃);
scanf &i);
return i;)
int zhucaidanO(int i;
printf ("\t******学生成绩管理系统*****\n");
printf("**”);
printf("\t**\n");
printf("**”);
printf("\t**\n");
printf C*请选择你所需的功能的序号松n〃);
scanf &i);
return i;}
int chaxunxuanze()(
int i;
printf ("\t\tl.按学号查询\n");
printf C\t\t2 .按姓名查询\n");
printf ("\t\t按其它数字键退出\n");
scanf ("%d",&i);
return i;Student_type
Student_type
stud[])
voidchaxun_xuehao(struct〃按学号查找并显示一个记录
( int u;int i=0;
printfC输入要查询学生的学号:");scanf ("%d", &u);
for(i=0;i<SIZE;i++)(
if(u==stud[i]. num)printf("%-8s%4d%4d%4d%4d%4d\n”, stud[i]. name, stud[i]. num, stud[i]. math, stud[i]. ph ysic, stud[i]. Clanguage, stud[i]. English);
) 〃输出该学生信息)
voidchaxun_xingming(structStudent_typestud[])〃按姓名查找并显示一个记录
( char s[10];int i=0;
printfC输入要查询学生的姓名:〃);scanf ("%s”, s);
for(i=0;i<SIZE;i++)(
if(strcmp(stud[i]. name, s)==0)printf(*%-8s%4d%4d%4d%4d%4d\n*, stud[i]. name, stud[i]. num, stud[i]. math, stud[i].ph ysic, stud[i]. Clanguage, stud[i]. English);
) 〃输出该学生信息)
intmainO//主函数
int i: int number;
void chaxun_xingming(struct Student_type stud[]);
FILE*fp;
if((fp=fopen"rb"))==NULL)
(printf("cannot open file'n");
exit (0);
)
for(i=0;i<SIZE;i++)
(fread (&stud[i], sizeof(struct Student_type),1,fp);
}
fclose(fp);
for(;;)
{for(;;)
(switch (zhucaidan ())
(case 1:
switch (weihuxuanzeO)(
case 1: zengjiaO ; break;case 2:shanchu(stud); break;
case 3:xiugai(stud); break;);break;
case 2:
switch(chaxunxuanze()) case 1:chaxun_xuehao(stud);break; case 2:chaxun_xingming(stud):break;)
break:
case 3:tongji(stud);break;case 4:switch(paixuxuanze())
(case l:paixu_math(stud);break;
case 2:paixu_physic(stud);break;case 3:paixu_Clanguage(stud);break;
);break;default :printf(*对不起,无此功能”);break;
})
)
return 0;
1、设计目的和要求
以本班同学的高等数学、大学物理、C语言、大学英语的成绩为基础,建立一个可以实 现以下功能的学生成绩管理系统。
A. 信息维护
信息数据以文件形式保存,要求能够实现对学生信息数据的维护,其中包括增加、删除 以及修改学生信息。
B. 信息查询
要求能够能够实现按学生姓名和学号两种方式查询学生各课成绩。
C. 成绩统计
输入任意课程名和一个分数段,统计该课程在该分数段的学生信息。
D. 成绩排序
对用户指定的任意课程名,按成绩升序或降序排列学生数据并显示排序结果。
2、总体设计
根据设计目的和要求,我们首先将程序分成四个模块,分别为信息维护、信息查询、成 绩统计及成绩排序。而在各个主模块中,我们又将其分成若干个小模块,从而实现程序设计 的要求。其中,模块设计如下:信息维护一1、增加学生信息2、删除学生信息3、修改学生 信息;信息查询一1、按学号查询2、按姓名查询;成绩统计;成绩排序一1、按高数排序2、 按大物排序3、按C语言排序4、按英语排序。所以最终实现的功能有:1、增加学生信息2、 删除学生信息3、修改学生信息4、按学号查询成绩5、按姓名查询成绩6、成绩按某门课程 某个分数段统计7、成绩按某门课程排序。
一个方便学校使用的学生成绩管理系统,这个系统的功能比较完善。使用类内函数和主 函数中的switch语句实现多分支选择结构,进而实现该系统的各项功能。该系统能实现7 项功能。设计本次实验所用到的知识点有:类、指针、数组,构造函数,动态内存分配,switch 语句、if语句、while ()语句等。
student类中的构造函数是来实现当类生成对象时用于对数据的初始化。例如 stud[].name是对学生姓名的初始化,stud[].math是对学生高等数学成绩的初始化,而 stud[]. Clanguage是对学生c语言成绩的初始化。而student类将有内在联系的,成组出现 的学生姓名,学号,各科成绩结合在一起,形成一种组合型数据结构。
3. 详细设计
该部分是用来修改己录入的学生的数据信息。
我们采用通过学号修改的方法来修改已录入的学生的数据信息。当输入学生学号后,系 统会提示“请选择您要修改的内容:”同时给出要修改的选项,包括姓名高数、大物、c语言、 英语、及退出供您选择。当做出选择后,会得到“请输入新数据”的提示。该部分通过if 语句、switch语句和while语句实现其功能。
voidxiugai(structStudent_typestud[])/*修改*/
int i=0,choice;
int u;
printfC请输入您要修改的学生的学号:\n〃); scanf &u);
for(i=0;i<SIZE;i++)
(printff请选择您要修改的内容:\n");
printf(
\n );
printfC| 姓名
请按 1 1 \n〃);
printf C| 高数
请按 2 | \n〃);
printf C| 大物
请按 3 | \n〃);
printf (* | c 语言
请按 4 | \n");
printf (* | 英语
请按 5 | \n");
printf("| 退出
请按 0|\n〃);
printf( +
+\n );
printfC请输入您的选择:〃);scanf&choice);
switch(choice)(
case 0:break:
case 1:
printfC请输入新姓名:");scanf("%s”, stud[i]. name); break;
case 2:
printfC请输入新的高数分数:〃); scanf ("%d”, &stud [i]. math);break;
case 3:
printfC请输入新的大物分数:");scanf&stud[i]. physic);
break;case 4:
printf ("请输入新的c语言分数:”);
scanf&stud[i]. Clanguage);
break;case 5:
printfC请输入新的英语分数:”);
scanf("%d”, &stud[i]. English);
break:
default:
printf (*\n 无效选项!”);break;
}break;
)
printf C修改成功\n");for(i=0;i<SIZE;i++)
(
printf (/z%-10s%8d%4d%4d%4d%4d\n*, stud[i]. name, stud[i]. num, stud[i]. math, stud[i ].physic, stud[i], Clanguage, stud[i], English);}
)
该部分是用来删除已录入的学生的数据信息。
我们采用按姓名查找,删除一条记录的方法实现删除功能。首先,输入要删除记录的名 字,然后通过if语句和strcmp函数找到对应的数据,最后借用strcpy函数一一将下一数 据的值覆盖到上一个数据,从而实现删除数据的的功能。该部分通过if语句和strcmp函数 以及strcpy函数实现其功能。
void shanchu () /*按姓名查找,删除一条记录*/
char s[10];
int j,i=0;
printfC输入要删除记录的姓名:");
scanf s);
for(i=0;i<SIZE-l;i++)
(if (strcmp(stud[i]. name, s) ==0)
(for(j=i; j<SIZE;j++)/* 删除操作*/
(
(stud[j]. num=stud[j+l]. num;
strcpy (stud[j]. name, stud[j+l]. name);stud[j]. physic=stud[j+l]. physic;
stud[j]. math=stud[j+l]. math;stud[j]. Clanguage=stud[j+1]. Clanguage;
stud[j]・ English=stud[j+1]. English;
)
}
}
)
printf (""Delete Successed! \n");
saved ();
for(i=0;i<SIZE;i++)(
printf Cz%-10s%8d%4d%4d%4d%4d\n/z, stud[i], name, stud[i], num, stud[i], math, stud[i ].physic, stud[i]. Clanguage, stud[i]. English);}
}
该部分是用来新增学生的数据信息。
首先设计一个save函数,先打开文件数据库,能够实现保存并关闭文件后,通过fread 写入一组数据,从而达到新增数据的目的。
void save ()
(
FILE *fp;int i;
if ((fp=fopen("", "ab"))=NULL)
(printf("can open file\n");
return;
)if (fwrite(&stud[SIZE], sizeof(struct Student_type), 1, fp)!=1) printf("file write error\n");
fclose(fp);printf C添加成功\n");
for(i=0;i<SIZE+l;i++)
(fread (&stud[i], sizeof(struct Student_type), 1, fp);
printf ("%T0s%8d%4d%4d%4d%4d\n", stud[i]. name, stud[i]. num, stud[i]. math, stud[i ].physic, stud[i]. Clanguage, stud[i]. English);
)
)
void zengjiaO
(
printfC请输入新学生信息\n");
scanf (z,%s%d%d%d%%d%dz,, stud [SIZE]. name, &stud[SIZE]. num, &stud [SIZE], math, & stud[SIZE], physic, &stud[SIZE]. Clanguage, &stud[SIZE]. English);
save ();
}
4、调试分析
修改数据功能如下图:
| «3 ,C:\US£R$\M\0€SiarOP\Debug\3.exe,D GJ 以
90
lei
83
82
102
82
83
103
72
83
104
72
83
105
92
84
to cont inue
一羊五Q 翼 入入成wt改n3n
7176
8272
71
删除数据功能如下图:
增加数据功能如下图:
展开阅读全文