C语言学生成绩管理系统(数组实现附代码)
《C高级程序设计》设计说明书
班级成绩管理系统
班级12计科
组别第X组
组长≌静待花开≌组员≌静待花开≌指导教师李伙友、魏龙华
计算机科学与技术系
2013年 6月
摘要
学生管理系统在日常教学中有着十分重要的作用,它可以帮助老师和学生快速的查找所需的学生信息,该系统具有准确、高效、全面等特点。录入和输出是该系统数据资源的基础;对于学生成绩的相关运算在教学中显得必要;学生成绩等等的排名能够帮助使用系统的人快速获得所需的信息,对于成绩的排名,排序法中的冒泡排序是数据处理中经常使用的一种重要运算。
冒泡排序算法的运作如下:
1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较.
关键词:冒泡排序
目录
1 课题综述 (4)
1.1课题内容 (4)
1.2意义 (4)
1.3预期目标 (4)
2 系统分析 (5)
2.1相关基础知识 (5)
2.2 总体方案 (5)
3 系统设计 (6)
3.1 输入模块 (6)
3.2 输出模块 (7)
3.3 平均分模块 (8)
3.4 统计、排名模块 (9)
3.5 查找模块 (10)
3.6 删除模块 (10)
4 代码编写及运行 (12)
4.1 总程序 (12)
总结 (30)
致谢 (31)
参考文献 (31)
1 课题综述
1.1课题内容
每个学生的信息为:姓名、学号、性别、C语言成绩、高数成绩、近代史成绩;
平均成绩。
1.学生信息处理
(1) 输入学生信息、姓名、学号、性别,按学号以小到大的顺序存入文件中。
(2) 插入(修改)同学信息:
(3) 删除同学信息:
(4) 浏览学生信息:
2.学生数据处理:
(1) 按考试科目录入学生成绩并且按公式:
考试成绩=(业务成绩总和)/(业务课程门数)计算考试成绩,并计算考试名次。(2) 学生测评数据输入并计算综合测评总分及名次。
综合测评总分=(考试成绩)*0.6+(同学互评分)*0.1+品德成绩*0.1+任课老师评分*0.2。
(3) 学生数据管理
输入学号,读出并显示该同学信息,输入新数据,将改后信息写入文件
(4) 学生数据查询:
输入学号或其他信息,即读出所有数据信息,并显示出来。
3、全体学生信息输出
1.2 意义
通过该课程设计的操作与实践,能够根据数据对象的特性,学会数据组织的方法,把现实世界中的实际问题在计算机内部表示出来,并培养基本的、良好的程序设计技能,全面提高学生的程序设计、开发能力。
1.3 预期成果
1、掌握函数的定义方法和调用方法。
2、能够采用模块化思想调试程序。
2、系统分析
2.1 相关基础知识
1、学校考核一个学生的主要依据就是学生的综合成绩,综合素质。这就让
一个学生的综合成绩评定系统的建立显得尤为重要。
2、一个学生综合测评系统包括学生的方方面面信息,这有利于学校的管理。
3、大家都知道学生是流动的,而且综合测评是每年评比一次,所以这学生
综合测评系统的更改录入功能重要性不明而喻。
4、开发本系统在一定的程度上可以减轻教辅老师的期末工作。
2.2 总体方案
学生数据处理模块学生信息输出模块帮助退出
修
改
学生
信息删
除
学
生
信
息
浏
览
学
生
信
息
返
回
录
入
成
绩
修
改
学
生
数
据
学
生
数
据
查
询
返
回
输
出
学
生
信
息
无
退
出
本
系
统
学生信息处理模块
输
入
学
生
信
息
12计科班级成绩管理系统
系统设计
3.1 输入模块
学生的输入模块主要是采用从键盘输入学生的基本信息,利用printf和scanf函数来输入学生的信息,在输完一个学生的基本信息后,会返回上级菜单,可以继续输入学生信息或退出。或直接从已有文件读取。
3.2输出模块
(1)、通过学号或姓名查找,输出单个学生信息。
(2)、输出有效的学生信息。
3.3 平均分模块。
求各个学生的成绩平均分。
3.4排名模块。
按单科排名、学号排名、平均分排名。
3.5 查找模块
按照学号或姓名查找。
3.6 删除模块
通过学号或姓名查找学生,选择删除或恢复误删。(1)、删除
(2)、恢复
4 附件:程序代码
#include
#include
#include
#define N 80
struct Student
{
long num; /*学号*/
char name[20]; /*姓名*/
char sex[10]; /*性别*/
int C; /*C语言*/
int Math; /*高数*/
int Chinese; /*语文*/
int History; /*近代史*/
int Moral; /*德育分*/
double aver; /*平均分*/
}a[N];
int F[N]={0}; /*判定是否输出0为假1为真*/
int t=0,t2=0,M=0; /*t--所有信息数目,tt--有效信息数目,M--统计输入到第几个学生*/
void found();
void input();
void read();
void average();
void sort();
void output1();
void seek();
void output2(int i);
void cut(int i);
void regain(int i);
void alter(int i);
void statistics();
void save();
void end();
int main()
{
int z;
while(1)
{
printf("
******************************************\n");
printf(" *********欢迎使用学生成绩管理系统*********\n");
printf("
******************************************\n\n\n\n");
printf("
******************************************************************** ****\n");
printf(" *****1.创建学生信息 * 2.查找学生信息(修改、删除。。) *****\n");
printf(" *****3.各科平均成绩 * 4.按单科成绩进行排序 *****\n");
printf(" *****5.输出所有学生信息* 6.统计*****\n");
printf(" *****7.保存 * 0.退出系统*****\n");
printf("
******************************************************************** ****\n\n");
printf("请输入指令:");
scanf("%d",&z);
switch(z)
{
case 1:found();break;
case 2:seek();break;
case 3:average();break;
case 4:sort();break;
case 5:output1();break;
case 6:statistics();break;
case 7:save();break;
case 0:end();break;
default:printf("输入错误,请重新输入\n");break;
}
}
return 0;
}
void found() /*创建数据*/
{
int z,n=1; /*z--指令,n--判断是否执行循环*/
while(n)
{
printf("********************\n");
printf("1.手动输入学生信息\n");
printf("2.从文件读取学生信息\n");
printf("0.返回上一级\n");
printf("********************\n\n");
printf("请输入指令:");
scanf("%d",&z);
switch(z)
{
case 1:input();break;
case 2:read();break;
case 0:n=0;break;
default:printf("输入错误,请重新输入\n");break;
}
}
system("cls");
}
void input() /*手动输入数据*/
{
int n=1,n2=1,i; /*z--指令,n,n2--判断是否执行循环*/
while(n)
{
printf("请输入学生信息:\n");
while(n2)
{
printf("学号:");
scanf("%ld",&a[M].num);
for(i=0;i { if(a[M].num==a[i].num) { printf("学号重复请重新输入\n");break;} } if(i==t) n2=0; } printf("姓名:"); scanf("%s",&a[M].name); printf("性别:"); scanf("%s",&a[M].sex); printf("C语言成绩:"); scanf("%d",&a[M].C); printf("高数成绩:"); scanf("%d",&a[M].Math); printf("语文成绩:"); scanf("%d",&a[M].Chinese); printf("近代史成绩:"); scanf("%d",&a[M].History); printf("德育分:"); scanf("%d",&a[M].Moral); a[M].aver=(a[M].C+a[M].Math+a[M].Chinese+a[M].History+a[M].Moral) /5.0; n=0; F[M]=1; M++; t++; t2++; } } void read() /*文件导入*/ { FILE *fp; int i; t=0; M=0; if((fp=fopen("save","rb"))==NULL) { printf("无法打开此文件\n"); return; } printf("该生信息为:\n"); printf("───────────────────────────────────\n"); printf("‖学号‖姓名‖性别‖C语言‖高数‖语文‖近代史‖德育分‖平均分‖\n"); printf("─────────────────────────────────── \n"); for(i=0;fread(&a[i],sizeof(struct Student),1,fp)!=0;i++,t++,M++) { printf("‖%-10ld‖%-6s‖%-4s‖%-5d‖%-4d‖%-4d‖%-6d‖%-6d‖%-6.3 f‖\n",a[i].num,a[i].name,a[i].sex,a[i].C,a[i].Math,a[i].Chinese,a[i].H istory,a[i].Moral,a[i].aver); printf("───────────────────────────────────\n"); F[i]=1; } fclose(fp); t2=t; system("pause"); system("cls"); } void output1() /*全体学生信息输出*/ { int i; printf("该生信息为:\n"); printf("───────────────────────────────────\n"); printf("‖学号‖姓名‖性别‖C语言‖高数‖语文‖近代史‖德育分‖平均分‖\n"); printf("─────────────────────────────────── \n"); for(i=0;i { if(F[i]==1) printf("‖%-10ld‖%-6s‖%-4s‖%-5d‖%-4d‖%-4d‖%-6d‖%-6d‖%-6.3 f‖\n",a[i].num,a[i].name,a[i].sex,a[i].C,a[i].Math,a[i].Chinese,a[i].H istory,a[i].Moral,a[i].aver); printf("───────────────────────────────────\n"); } } system("pause"); system("cls"); } void seek() /*查询*/ { int z,s,n=1,n2=1,i,k; /*z--指令,n,n2--判断是否执行循环,k--数组下标*/ long m; char b[20]; while(n2) { printf("请输入查询方式:\n"); printf("1.按学号查询.\n"); printf("2.按姓名查询.\n"); printf("0.返回主菜单.\n"); scanf("%d",&s); if(s==1) printf("请输入学号:\n"); scanf("%ld",&m); for(i=0;i if(a[i].num==m) { k=i; n2=0; break; } } else if(s==2) { printf("请输入姓名:\n"); scanf("%s",b); for(i=0;i if(strcmp(a[i].name,b)==0) { k=i; n2=0; break; } } else if(s==0) {system("cls"); return;} else printf("输入错误,请重新输入\n"); if(i==t) printf("查无此人,请重新查询\n"); } while(n)