1、学生成绩标准管理系统高质量C语1=1 mi言程序 5、总结 本学生成绩管理系统能够实现增加,修改,删除记录的信息维护功能、按姓名,学号查 询学生成绩信息功能、某一课程在某一分数段的统计功能及某一课程的排序功能。编好程序, 运行完毕后,我们也发现了一些缺陷。比如,修改只能通过输入学号对该记录数据组进行修 改,而删除也只做了输入学号删除记录的设定。 当然,缺憾是补课避免的。总体上来讲,计算机综合课程设计上完了,完成了一个基本 的学生成绩管理系统,从系统需求分析、数据库设计开始到系统的设计实施,逐步熟悉了 c 语言程序设计。在组长的带领下我们经过了好几周的时间反复编写和调试程序,
2、从课本和网 上查阅相关资料,终于完成了整个课程设计。过程中,也遇到不少困难,如编程逻辑把握不 住,经验太少,不太善于调试程序等。不过我们还是一步一步的自己动手做,不会的地方参 考别人的程序自己再试着写或请教老师,在此过程中收获多多。 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];i
3、nt 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 4、), 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 5、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]. 6、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 7、intf 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) 8、 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 无效选项!”); b 9、reak;}break;
}printf C修改成功\n");
for(i=0;i 10、SIZE-l;i++)
(if(strcmp(stud[i]. name, s)==0)
(
/*删除操作*/
for(j=i;j 11、ish;
)
)
)
)
printf("Delete Successed!\n");
saved ();
for(i=0;i 12、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;stu 13、d[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 14、排序*/
{k=i;for(j=i+l;j 15、ge;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 16、nt i, j,k=O, p, q, r,w;
double y;char x[10];
int t;for (i=0; i 17、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) 18、}
}for(i=0;i 19、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( 20、x, stud[i]. name);strcpy (stud[i]. name, studfk]. name);
strcpy (stud[k]. name, x);}
}for(i=0;i 21、这时的人工管理几乎无法实现,在这种情况下 用数据库进行管理变的尤为必要,这可以发挥计算机的优势,就需要有教务管理系统来提高 学生成绩管理工作的效率。过这样的系统,可以做到信息的规范管理,科学统计和快速的查 询,从而减少管理方面的工作量和减少人为的错误。本次我们组选的就是学生成绩管理系统, 要实现对学生成绩、课程的相关管理。
关键词:成绩管理、C语言项目、程序设计、程序分析
].physic, stud[i]. Clanguage, stud[i]. English):}}
voidtongji(structStudent_typestud[])〃按分数段统计人数
( int i, j 22、 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 23、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 24、tud[i]. Clanguage, studfi]. English);}
))
else if(j==3)(
for(i=0;i 25、i 26、);
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. 27、按学号查询\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 28、 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 29、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 ( 30、0);
)
for(i=0;i 31、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;
32、1、设计目的和要求
以本班同学的高等数学、大学物理、C语言、大学英语的成绩为基础,建立一个可以实 现以下功能的学生成绩管理系统。
A. 信息维护
信息数据以文件形式保存,要求能够实现对学生信息数据的维护,其中包括增加、删除 以及修改学生信息。
B. 信息查询
要求能够能够实现按学生姓名和学号两种方式查询学生各课成绩。
C. 成绩统计
输入任意课程名和一个分数段,统计该课程在该分数段的学生信息。
D. 成绩排序
对用户指定的任意课程名,按成绩升序或降序排列学生数据并显示排序结果。
2、总体设计
根据设计目的和要求,我们首先将程序分成四个模块,分别为信息维护、信息查询、成 绩 33、统计及成绩排序。而在各个主模块中,我们又将其分成若干个小模块,从而实现程序设计 的要求。其中,模块设计如下:信息维护一1、增加学生信息2、删除学生信息3、修改学生 信息;信息查询一1、按学号查询2、按姓名查询;成绩统计;成绩排序一1、按高数排序2、 按大物排序3、按C语言排序4、按英语排序。所以最终实现的功能有:1、增加学生信息2、 删除学生信息3、修改学生信息4、按学号查询成绩5、按姓名查询成绩6、成绩按某门课程 某个分数段统计7、成绩按某门课程排序。
一个方便学校使用的学生成绩管理系统,这个系统的功能比较完善。使用类内函数和主 函数中的switch语句实现多分支选择结构,进而实现该系统的 34、各项功能。该系统能实现7 项功能。设计本次实验所用到的知识点有:类、指针、数组,构造函数,动态内存分配,switch 语句、if语句、while ()语句等。
student类中的构造函数是来实现当类生成对象时用于对数据的初始化。例如 stud[].name是对学生姓名的初始化,stud[].math是对学生高等数学成绩的初始化,而 stud[]. Clanguage是对学生c语言成绩的初始化。而student类将有内在联系的,成组出现 的学生姓名,学号,各科成绩结合在一起,形成一种组合型数据结构。
3. 详细设计
该部分是用来修改己录入的学生的数据信息。
我们采用通过学号修改的方法来 35、修改已录入的学生的数据信息。当输入学生学号后,系 统会提示“请选择您要修改的内容:”同时给出要修改的选项,包括姓名高数、大物、c语言、 英语、及退出供您选择。当做出选择后,会得到“请输入新数据”的提示。该部分通过if 语句、switch语句和while语句实现其功能。
voidxiugai(structStudent_typestud[])/*修改*/
int i=0,choice;
int u;
printfC请输入您要修改的学生的学号:\n〃); scanf &u);
for(i=0;i 36、\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”, 37、 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 38、
printf (*\n 无效选项!”);break;
}break;
)
printf C修改成功\n");for(i=0;i 39、mp函数找到对应的数据,最后借用strcpy函数一一将下一数 据的值覆盖到上一个数据,从而实现删除数据的的功能。该部分通过if语句和strcmp函数 以及strcpy函数实现其功能。
void shanchu () /*按姓名查找,删除一条记录*/
char s[10];
int j,i=0;
printfC输入要删除记录的姓名:");
scanf s);
for(i=0;i 40、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 41、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 42、
)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 43、 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
删除数据功能如下图:
增加数据功能如下图:






