学生成绩班级名次统计
❶ C语言编写 班级成绩统计分析 要求:1确定学生来自哪些班级,2计算各个班级平均成绩
C语言程序设计 班级学生成绩管理系统
解决时间:2009-6-26 09:50
基本要求
1. 初始化成绩表:将原成绩表的信息清空;
2. 显示班级学生成绩信息:按要求显示全部或特定学生成绩信息;
3. 插入学生成绩:插入一个学生成绩信息;
4. 修改学生成绩:先查找要修改成绩的学生学号,如果存在该学生学号,则输入该学生的各科新成绩,替换相应课程的原成绩,如不存在该学生学号,则提示“没找到”;
5. 删除学生成绩:先查找要删除成绩的学生学号,如果存在该学生学号,则删除该学生的相关信息,如不存在该学生学号,则提示“没找到”;
6. 查找学生成绩:可分别按学号、姓名查找学生成绩;
7. 求班级学生人数:统计各个班级的学生总人数;
8. 求每个学生的平均成绩:求各个学生的平均成绩,并显示学号、姓名、数分,高代,C语言,马哲、平均成绩等信息。
高级要求
1. 插入学生成绩时,需保证学号是唯一的;
2. 输入学生成绩时,要保证课程成绩的范围在0-100之间;
3. 显示各科成绩前三名的学生信息(学号、姓名、性别、班级、课程名称(数分或高代或C语言或马哲)、名次。
**********************
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <conio.h>
#define ADDRFILE "c:\\addrlist.txt"
typedef struct tagLinkedList
{
char name[30];
char tel[30];
char addr[100];
struct tagLinkedList *prev;
struct tagLinkedLIst *next;
}ADDR;
ADDR *g_pAddrHead = NULL;
ADDR *g_pFind;
int g_bSaved = 1;
void get_addrlist(void);
int add_list(const ADDR *addr);
int find_list(const char *name);
void SetHeadPosition(void);
void SetTailPosition(void);
void Add_addr(void);
void Find_addr(void);
void Modify_addr(void);
void Delete_addr(void);
void Print_addr(void);
void Save_addr(void);
void Remove_addr(void);
void main(void)
{
int ch;
get_addrlist();
puts("通讯录程序 Version 1.0");
while(1)
{
printf("\n[1]新增 [2]搜索 [3]修改 [4]删除 [5]输出 [S]储存 [Q]退出");
ch = getch();
switch(ch)
{
case '1': Add_addr();break;
case '2': Find_addr();break;
case '3': Modify_addr();break;
case '4': Delete_addr();break;
case '5': Print_addr();break;
case 's':
case 'S': Save_addr();break;
case 'q':
case 'Q':
if(g_bSaved == 0)
{
printf("\n\n修改后的数据需要储存吗?(y/n)?");
ch = getchar();
if(ch == 'Y' || ch == 'y') Save_addr();
}
Remove_addr(); exit(1);
default : printf("\n\n 请按1~5或S/Q健.\n\n");break;
}
}
}
void get_addrlist(void)
{
ADDR addr;
FILE *fp;
fp = fopen(ADDRFILE,"rb");
if(fp == NULL)
{
perror("open file error;");
return;
}
while(!feof(fp))
{
fread(&addr,1,sizeof(ADDR),fp);
if(ferror(fp))
{
fclose(fp);
perror("file read error;");
return;
}
if(feof(fp))break;
if(add_list(&addr) == 0)
{
printf(".\n");
}
}
fclose(fp);
}
int add_list(const ADDR *addr)
{
ADDR *plocal,*pn = g_pAddrHead;
SetHeadPosition();
if(g_pAddrHead == NULL)
{
plocal = malloc(sizeof(ADDR));
memset(plocal,0,sizeof(ADDR));
if(plocal == NULL)
{
return 0;
}
g_pAddrHead = plocal;
g_pAddrHead->prev = NULL;
g_pAddrHead->next = NULL;
}
else
{
plocal = malloc(sizeof(ADDR));
memset(plocal,0,sizeof(ADDR));
if(plocal == NULL)
{
return 0;
}
while(pn->next)
{
pn = pn->next;
}
pn->next = plocal;
plocal->prev = pn;
plocal->next = NULL;
}
strcpy(plocal->name,addr->name);
strcpy(plocal->tel,addr->tel);
strcpy(plocal->addr,addr->addr);
return 1;
}
int find_list(const char *name)
{
ADDR *plocal;
SetHeadPosition();
plocal = g_pAddrHead;
while(plocal)
{
if(strstr(plocal->name,name))
{
g_pFind = plocal;
return 1;
}
plocal = plocal->next;
}
return 0;
}
void SetHeadPosition(void)
{
if(g_pAddrHead == NULL) return;
while(g_pAddrHead->prev)
{
g_pAddrHead = g_pAddrHead->prev;
}
}
void SetTailPosition(void)
{
if(g_pAddrHead == NULL) return;
while(g_pAddrHead->next)
{
g_pAddrHead = g_pAddrHead->next;
}
}
void Remove_addr(void)
{
ADDR *plocal;
if(g_pAddrHead == NULL) return;
SetHeadPosition();
while(g_pAddrHead)
{
plocal = g_pAddrHead->next;
free(g_pAddrHead);
g_pAddrHead = plocal;
}
g_pAddrHead = NULL;
}
void Add_addr(void)
{
ADDR addr;
memset(&addr,0,sizeof(ADDR));
printf("\n\nName: ");gets(addr.name);
if(strlen(addr.name) == 0) return;
printf("TEL: ");gets(addr.tel);
printf("ADDR: ");gets(addr.addr);
if(find_list(addr.name) == 1)
{
printf("\n已经存在的姓名.\n\n");
puts(g_pFind->name);
puts(g_pFind->tel);
puts(g_pFind->addr);
return;
}
if(add_list(&addr))
{
g_bSaved = 0;
printf("\n储存完毕.\n\n");
}
}
void Find_addr(void)
{
char buff[100] ={0,};
ADDR *plocal;
printf("\n\n请输入要查找的姓名/电话/地址.\n");
printf("姓名/电话/地址 :");gets(buff);
if(strlen(buff) == 0) return;
SetHeadPosition();
plocal = g_pAddrHead;
g_pFind = NULL;
while(plocal)
{
if(strstr(plocal->name,buff))
{
g_pFind = plocal;
break;
}
if(strstr(plocal->tel,buff))
{
g_pFind = plocal;
break;
}
if(strstr(plocal->addr,buff))
{
g_pFind = plocal;
break;
}
plocal = plocal->next;
}
if(g_pFind)
{
puts(g_pFind->name);
puts(g_pFind->tel);
puts(g_pFind->addr);
}
else
{
printf("\n\n搜索不到要找的%s.\n\n",buff);
}
}
void Modify_addr(void)
{
char name[100] = {0,};
ADDR addr;
while(1)
{
printf("\n\n要修改的姓名: ");gets(name);
if(strlen(name) == 0) return;
if(find_list(name) == 0)
{
puts("输入的姓名不存在.");
continue;
}
break;
}
printf("\n%s的通讯录如下:\n\n",name);
puts(g_pFind->name);
puts(g_pFind->tel);
puts(g_pFind->addr);
printf("\n输入要修改的姓名/电话/地址.\n\n");
printf("NAME: ");gets(addr.name);
printf("TEL : ");gets(addr.tel);
printf("ADDR: ");gets(addr.addr);
if(strlen(addr.name)==0) strcpy(addr.name,name);
strcpy(g_pFind->name,addr.name);
strcpy(g_pFind->tel,addr.tel);
strcpy(g_pFind->addr,addr.addr);
g_bSaved = 0;
printf("%s的通讯录修改成功.\n",name);
}
void Delete_addr(void)
{
char name[100] ={0,};
ADDR *plocal;
int ch;
while(1)
{
printf("\n\n要删除的姓名: ");gets(name);
if(strlen(name)==0) return;
if(find_list(name) == 0)
{
puts("要删除的通讯录不存在.");
continue;
}
break;
}
puts(g_pFind->name);
puts(g_pFind->tel);
puts(g_pFind->addr);
printf("确定要删除%s的通讯录吗(y/n)?",name);
ch = getch();
fflush(stdin);
if(ch == 'Y'||ch == 'y')
{
if(g_pFind->prev == NULL)
{
if(g_pFind->next == NULL)
{
free(g_pFind);
g_pAddrHead = NULL;
}
else
{
plocal = g_pFind->next;
free(g_pFind);
plocal->prev =NULL;
g_pAddrHead = plocal;
}
}
else if(g_pFind->next == NULL)
{
plocal = g_pFind->prev;
free(g_pFind);
plocal->next =NULL;
g_pAddrHead = plocal;
}
else
{
plocal = g_pFind->prev;
plocal->next = g_pFind->next;
plocal = g_pFind->next;
plocal->prev = g_pFind->prev;
free(g_pFind);
g_pAddrHead = plocal;
}
g_bSaved = 0;
printf("\n\n删除完毕.\n\n");
}
}
void Print_addr(void)
{
int count = 1;
ADDR *plocal;
SetHeadPosition();
if(g_pAddrHead == NULL)
{
printf("\n\n无任何数据\n");
return;
}
plocal = g_pAddrHead;
while(plocal->prev)
{
plocal=plocal->prev;
}
printf("\n\n");
while(plocal)
{
printf("NO.%d\n",count++);
puts(plocal->name);
puts(plocal->tel);
printf("%s\n\n",plocal->addr);
printf("请按任意一健(结束:q)\n\n");
getch();
if(getch() == 'q')return;
plocal=plocal->next;
}
}
void Save_addr(void)
{
ADDR *plocal, *pn;
FILE *fp;
if(g_pAddrHead == NULL) return;
fp = fopen(ADDRFILE,"w+b");
if(fp == NULL)
{
perror("file open error;");
return;
}
SetHeadPosition();
plocal = g_pAddrHead;
while(plocal)
{
pn = plocal->next;
plocal = pn;
}
printf("\n所有数据已经储存完毕.");
g_bSaved = 1;
fclose(fp);
} 嘿嘿,给分吧
❷ 用c语言设计一个学生成绩排名系统,成绩记录:班级,学号,姓名,四门成绩并且实现以下功能:具备对成绩
你可以在网络文库里找找,有很多,这就回是一答个http://wenku..com/view/409c24fff705cc1755270948.html
❸ 利用Excel编辑一份班级学生成绩统计表(出反映平均分各分数段人数分布的柱形图。
已经发送到你邮箱
❹ EXCEL学生全段成绩中班级名次统计问题
参照上来图(仅说明方法源应调整为降序)
先对数据区域分别按班级“升序排序”和分数以“降序排序”(班级排序条件在前)
然后在“班排名”列的第二个单元格按上图方式输入公式(注意将D1改为P1),向下填充公式就可以出来了。
❺ 如何用EXCEL对学生成绩及班级情况进行统计分析
教书帮,网址就是拼音。 这个网站可以直接智能分析 不需要自己用excel
❻ 用excel怎样统计不同班级学生各科成绩总
可选用以下统计方法:
1、用sumproct函数:
如,统计六年级三班的90分以上的人数(其中A列为年级,B列班级,C列为成绩),公式:=sumproct((a1:a100="六年级")*(b1:b100=“三班",c1:c100>=90))
2、用countifs函数:
如上例的公式为:=countifs(a1:a100,"六年级",b1:b100,"三班",c1:c100,">=90")
❼ 设计一个统计班级学生成绩的c语言程序
仅供参考:
#include"stdio.h"
#defineN35
structstudent
{
intnum; //学号
charname[8]; //姓名
intnannv; //性别
intchines; //语文成绩
intmath; //数学成绩
intEnglish; //英语成绩
intphysics; //物理成绩
intsum; //总分
doubleavr; //平均分
}stu[N];
voidinput(intn)
{
inti;
for(i=0;i<n;i++)
{
intsum=0;
doubleavr=0.0;
printf("请输入第%d个学生信息 ",i+1);
printf("请输入学号:");
scanf("%d",&stu[i].num);
printf("请输入姓名:");
scanf("%s",stu[i].name);
printf("请输入性别:");
scanf("%d",&stu[i].nannv);
printf("请输入语文成绩:");
scanf("%d",&stu[i].chines);
printf("请输入数学成绩:");
scanf("%d",&stu[i].math);
printf("请输入英语成绩:");
scanf("%d",&stu[i].English);
printf("请输入物理成绩:");
scanf("%d",&stu[i].physics);
//计算总分和平均分
stu[i].sum=stu[i].chines+stu[i].math+stu[i].English+stu[i].physics;
stu[i].avr=(double)(stu[i].sum*1.0/4);
}
}
voidoutput(intn)
{
inti;
for(i=0;i<n;i++)
{
printf("------------------------------------------------------------------ ");
printf("第%d名: ",i+1);
printf("学号:%d 姓名:%s 性别:%d ",stu[i].num,stu[i].name,stu[i].nannv);
printf("语文成绩:%d 数学成绩:%d 英语成绩:%d 物理成绩:%d ",
stu[i].chines,stu[i].math,stu[i].English,stu[i].physics);
printf("总分:%d 平均分:%.2f ",stu[i].sum,stu[i].avr);
printf("------------------------------------------------------------------ ");
}
}
voidsort(intn)
{
inti,j;
structstudentst;
//冒泡排序
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
if(stu[j].sum<stu[j+1].sum)
{
st=stu[j];
stu[j]=stu[j+1];
stu[j+1]=st;
}
}
}
}
voidmain()
{
intn;
printf("请输入学生人数:");
scanf("%d",&n);
input(n); //输入学生信息
sort(n); //按总成绩排序
printf("排名信息如下: ");
output(n); //输出学生信息
}
❽ 用excel怎样统计不同班级学生各科成绩总分等,以及输入分数后能自动生成各个分数段的人数,和班级积分名次
DCOUNT
请参阅
返回数据库或列表的列中满足指定条件并且包含数字的单元格个数。
参数 field 为可选项,如果省略,函数 DCOUNT 返回数据库中满足条件 criteria 的所有记录数。
语法
DCOUNT(database,field,criteria)
Database 构成列表或数据库的单元格区域。数据库是包含一组相关数据的列表,其中包含相关信息的行为记录,而包含数据的列为字段。列表的第一行包含着每一列的标志项。
Field 指定函数所使用的数据列。列表中的数据列必须在第一行具有标志项。Field 可以是文本,即两端带引号的标志项,如“使用年数”或“产量”;此外,Field 也可以是代表列表中数据列位置的数字:1 表示第一列,2 表示第二列,等等。
Criteria 为一组包含给定条件的单元格区域。可以为参数 criteria 指定任意区域,只要它至少包含一个列标志和列标志下方用于设定条件的单元格。
示例
如果您将示例复制到空白工作表中,可能会更易于理解该示例。
操作方法
创建空白工作簿或工作表。
请在“帮助”主题中选取示例。不要选取行或列标题。
从“帮助”中选取示例。
按 Ctrl+C。
在工作表中,选择单元格 A1,再按 Ctrl+V。
若要在查看结果和查看返回结果的公式之间切换,请按 Ctrl+`(重音符),或在“工具”菜单上,指向“公式审核”,再单击“公式审核模式”。
1 种
2 种
3 种
4 种
5 种
6 种
7 种
8 种
9 种
10 种
A B C D E F
树种 高度 使用年数 产量 利润 高度
苹果树 >10 <16
梨树
树种 高度 使用年数 产量 利润
苹果树 18 种 20 种 14 种 105.00 种
梨树 12 种 12 种 10 种 96.00 种
樱桃树 13 种 14 种 9 种 105.00 种
苹果树 14 种 15 种 10 种 75.00 种
梨树 9 种 8 种 8 种 76.80 种
苹果树 8 种 9 种 6 种 45.00 种
公式 说明(结果)
=DCOUNT(A4:E10,"使用年数",A1:F2) 此函数查找高度在 10 到 16 英尺之间的苹果树的记录,并且计算这些记录中“使用年数”字段包含数字的单元格数目。(1)
=DCOUNTA(A4:E10,"利润",A1:F2) 此函数查找高度为 10 到 16 英尺之间的苹果树记录,并计算这些记录中“利润”字段为非空的单元格数目。(1)
=DMAX(A4:E10,"利润",A1:A3) 此函数查找苹果树和梨树的最大利润。(105)
=DMIN(A4:E10,"利润",A1:B2) 此函数查找高度在 10 英尺以上的苹果树的最小利润。(75)
=DSUM(A4:E10,"利润",A1:A2) 此函数计算苹果树的总利润。(225)
=DSUM(A4:E10,"利润",A1:F2) 此函数计算高度在 10 到 16 英尺之间的苹果树的总利润。(75)
=DPRODUCT(A4:E10,"产量",A1:B2) 此函数计算高度大于 10 英尺的苹果树产量的乘积。(140)
=DAVERAGE(A4:E10,"产量",A1:B2) 此函数计算高度在 10 英尺以上的苹果树的平均产量。(12)
=DAVERAGE(A4:E10,3,A4:E10) 此函数计算数据库中所有树种的平均使用年数。(13)
=DSTDEV(A4:E10,"产量",A1:A3) 如果数据库中的数据只是整个果园的一个样本,则此值是苹果树和梨树产量的估算标准偏差。(2.97)
=DSTDEVP(A4:E10,"产量",A1:A3) 如果数据库中的数据为整个果园的样本总体,则此值是苹果树和梨树产量的真实标准偏差。(2.65)
=DVAR(A4:E10,"产量",A1:A3) 如果数据库中的数据只是整个果园的一个样本,那么此值是苹果树和梨树产量的估算方差。(8.8)
=DVARP(A4:E10,"产量",A1:A3) 如果数据库中的数据为整个果园的样本总体,则此值是苹果树和梨树产量的真实方差。(7.04)
=DGET(A4:E10,"产量",A1:A3) 返回错误值 #NUM!,因为有多个记录符合给定的条件。
❾ 如何制作工作表,只要将学后的成绩输入进去就能自动生成班级排名和各班前三名以及全年级前三名的统计
必须使用电子表格吗?推荐你用专门的统计分析软件,功能很强大,可以更好的帮你分析学生考试的情况。比如“瑞文考试成绩统计分析系统”就可以,我们用了一个学期了,感觉比excel好多了。
一、绿色软件,无需安装。系统采用B/S(浏览器/服务器)工作方式,所有操作均在浏览器中完成。可以由多个用户在网络中的不同计算机同时操作、查询。符合人们的操作习惯,但与其它网站系统需要复杂的安装与设置不同。该系统为一个绿色软件,直接运行即可。根本就不需要对IIs进行安装和配置。最适合非专业网络管理人员使用。
二、强大的计算统计分析功能。它可以方便的根据用户的要求计算指定范围的学生参加考试的人数,总分、平均分、方差、各分数段人数,及格率等信息并自动计算每个学生的各科总分、平均分,并可以按指定的科目或条件对学生进行排序操作。系统有丰富统计功能,能按照多种条件,对不同学校、年级、班级等进行对比分析,并以图表的形式呈现出来。
三、操作便捷,系统充分考虑了用户使用的便捷性。系统能够很好的利用已有的学生信息如EXCEL等资料,实现批量添加新学生,考试成绩的录入只需录入考号、成绩回车即可,根本无需使用鼠标。极大提高了成绩录入的效率。
四、提供完善的权限控制,不同的用户进入不同的界面,可以进行不同的操作。如成绩录入员不能录入已经存在的成绩,而主管可以修改录入的成绩,提供统考和自考两种工作模式,在统考模式下适合对学生进行统一的考核,成绩统一录入。便于对考试情况进行评价、分析。自考模式下适合教师自行组织考试,了解学生学习情况。学生自主查询模块可以嵌入其它网站,提供学生自己查询成绩的功能。
❿ excel 2010 做出分类汇总表:根据班级分类,统计每班学生总成绩的平均值
选择数据区域(表格全部内容)
分类字段 班级
汇总方式 平均值
选定汇总项 总成绩