文档库 最新最全的文档下载
当前位置:文档库 › C语言学生成绩管理系统(数组实现附代码)

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)

相关文档
相关文档 最新文档