學生成績班級名次統計
❶ 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 做出分類匯總表:根據班級分類,統計每班學生總成績的平均值
選擇數據區域(表格全部內容)
分類欄位 班級
匯總方式 平均值
選定匯總項 總成績