當前位置:首頁 » 編程語言 » 成績管理系統c語言報告

成績管理系統c語言報告

發布時間: 2023-08-03 05:15:48

Ⅰ 學生成績記錄薄 c語言 課程設計報告

C語言程序設計報告

課題名稱:學生成績管理

1 系統概述:

本程序為一個學生成績管理系統,對學生的成績進行管理,學生的信息包括學號,姓名,學期,三門課程的成績,輸入這些信息,本程序可以自動計算總成績,可以按高分到低分進行排名,並對輸入信息的人數進行匯總.

2 數據結構設計:

(1)結構體;

(2)數組的設計:運用指針代替數組,使用指針來建立線性表,使程序更加簡潔,可讀性更強.

3 各函數的設計:

函數原型:void InitList(SqLinkList &L);

功能: 創建一個空的線性鏈表;

入口參數:L為要創建的線性鏈表;

出口參數:創建鏈表的L.head為空,L.length為0;

返回值: 無;

函數原型:void EmptyLinkList(SqLinkList &L);

功能: 清空整個線性鏈表;

入口參數:L為要清空的鏈表名稱;

出口參數:若清空成功則鏈表長度L.length為0;

返回值: 無;

函數原型:int ScanE(ElemType &e);

功能: 輸入學生信息;

入口參數:e為要輸入信息的學生名稱;

出口參數:e.num保存學號,e.name保存姓名,e.team保存所在學期,e.s1,e.s2,e.s3分別保存三門課程的成績;

返回值: 輸入合法返回1,否則返回0;

錯誤處理:若學號、姓名等輸入不合法會有提示及重輸;

函數原型:Status SqLinkListAppend(SqLinkList &L,ElemType e);

功能: 追加一個結點到線性鏈表中;

入口參數:e為所追加的結點名稱,L為e所追加到的線性鏈表的名稱;

出口參數:若追加成功,則e為頭結點,鏈表長度L.length增1;

返回值: 若追加成功返回1;

函數原型:Link SearchNode(SqLinkList L,int NUM);

功能: 查找學號為NUM的學生;

入口參數:查找的鏈表名稱L,學號NUM;

出口參數:若找到結點指針p指向該結點,否則指向空結點;

返回值: 結點指針p;

函數原型:void SearchTeam(SqLinkList L,int team);

功能: 查找學期為team的所有記錄並輸出其信息;

入口參數:查找的鏈表名稱L,要查找的學期team;

出口參數:無;

返回值: 無;

函數原型:void SearchUnpass(SqLinkList L,float s1,float s2,float s3);

功能: 查找所有有掛科記錄的學生並輸出其信息;

入口參數:查找的鏈表名稱L,要查找的各門學科成績s1,s2,s3;

出口參數:無;

返回值: 無;

函數原型:void SqLinkListSearch(SqLinkList L);

功能: 對鏈表進行分類查找;

入口參數:要查找的鏈表名稱L;

出口參數:無;

返回值: 無;

函數原型: void inputData(SqLinkList &L);

功能: 輸入數據,並追加一個結點;

入口參數: L為要追加結點的鏈表名稱;

出口參數: 無;

返回值: 無;

函數原型:void SqLinkListTraverse(SqLinkList L);

功能: 輸出鏈表中所有學生成績列表;

入口參數:L為要輸出信息的鏈表名稱;

出口參數:無;

返回值: 無;

函數原型:void PrintE(ElemType e);

功能: 輸出一個結點的所有信息;

入口參數:要輸出的結點名稱e;

出口參數:無;

返回值: 無;

4 使用程序的說明:

本程序為一個學生成績管理系統。對學生的成績信息進行管理,學生的信息包括學號、姓名、學期、三門課程的成績、平均成績、名次。本管理系統實現學生的學號、姓名、學期、每門課程的成績的錄入,並自動按平均分排名,使用時按屏幕上的提示,輸入使用代碼.如下圖所示:

例如:輸入代碼數字」1」,程序執行」輸入學生成績或已存在的學生成績進行修改」這條小程序.輸入學生個人信息後,如下圖所示:

如此分別輸入相應的程序代碼,就執行相應的程序段.

如下的程序是按學號進行成績排名:

當輸入」6」時,執行相應的程序,即匯總一共輸入學生的人數:

5 總結和體會:

通過對C語言學習,尤其是這學期本班開展C語言雙語教學,體會到學習難的同時,也真正了解到C語言作為一門高級的計算機語言的強大功能,特別是在當今實際生活,生產,辦公,信息管理等方面的強大作用. 這次合作我們遇到了許多的困難。時間的緊迫,知識的不足,給我很大的壓力。最終我還是還是完成了任務。團結就是力量是我這次最真切的感受。

6 程序代碼:

void InitList(SqLinkList &L) {

// 構造一個空的線性表L;

L.head = 0; //頭指針為空;

L.length = 0; //長度初始為0;

}

void EmptyLinkList(SqLinkList &L){

//入口參數為整個線性表的數據,功能為清空線性表;

Node *p;

if(!L.head)printf("系統中不存在記錄。\n");

//頭指針為空時沒有學生錄入;

else {

while (L.head){

//每個循環將下一結點賦值給頭指針,並釋放本結點空間,直至線性表清空;

p=L.head;

L.head=p->next;

free(p);

} //end while;

L.length=0; //長度為0;

printf("該管理系統學生信息已清空。\n");

}//end else;

}

int ScanE(ElemType &e){

//輸入一個學生的成績數據結點。返回0為無效結點數據,1為有效結點數據;

printf("\n學號:");

scanf("%d",&e.num);

if(e.num==0){

//學號為0輸入不合法,重新輸入;

printf("學號輸入不合法.\n");

return 0;

}

printf("\n姓名:");

scanf("%s",&e.name);

printf("\n學期:");

scanf("%d",&e.team);

while(e.team>12){

//系統只記錄小於12的學期數;

printf("輸入的學期不能大於12,請重新輸入:");

scanf("%d",&e.team);

}

printf("\n成績A:");

scanf("%f",&e.s1);

printf("\n成績B:");

scanf("%f",&e.s2);

printf("\n成績C:");

scanf("%f",&e.s3);

return OK;

}

Status SqLinkListAppend(SqLinkList &L,ElemType e){

//追加一個結點到線性表中;

Node *p;

p=SearchNode(L,e.num);

//查找學號為e.num的記錄並將其地址賦給指針p;

if (p==0){

//若不存在添加學號相同的結點,追加一個結點;

p=(Node *)malloc(sizeof(Node));

if (!p) return ERROR;

memcpy(&(p->data),&e,sizeof(ElemType));

p->next=L.head ;

L.head=p;

//追加的一個結點為首結點;

L.length++; //表長度加1;

}

else { //如果該學號記錄已存在,則進行修改操作;

memcpy(&(p->data),&e,sizeof(ElemType));

printf("該學生記錄已經存在,已完成修改操作。\n");

}

return OK;

}

Link SearchNode(SqLinkList L,int NUM){

//查找學生記錄,該學生的學號為NUM;

Node *p;

p=L.head; //p先指在頭結點;

while (p&& p->data.num !=NUM ) p=p->next;

//如果該學生的學號不為NUM則查找下一個結點;

return p;

}

void SearchTeam(SqLinkList L,int team){

//按學期查找並輸出所有該學期存在的記錄;

Node *p;

p=L.head;

int n,sum=0;

//sum記錄該學期的學生總人數;

printf("請輸入您要查詢的學生的學期:");

scanf("%d",&n);

printf("\n學號 姓名 學期 成績A 成績B 成績C 平均成績\n");

while(p&&p->next){

//如果p結點和它的下一結點不為空,且該結點的學期等於要查找學期,則格式輸出所有該學期學生信息;

if(p->data.team==n){

PrintE(p->data);

sum++;

//查找到一個該學期的學生記錄計數加1;

}

p=p->next;

//轉向下一結點;

} //end while;

if(p->data.team==n){

//如果p的下一結點為空,且本結點學期為n,則格式輸出該結點信息;

sum++;

PrintE(p->data);

}

if(sum==0)printf("沒有這學期的記錄。\n");

if(sum)printf("該學期共有%d人的記錄.\n",sum);

}

void SearchUnpass(SqLinkList L,float s1,float s2,float s3){

//查找並輸出有掛科的學生信息;

Node *p;

p=L.head;

int sum=0;

//sum計數掛科總人數,初始為0;

printf("以下是有一門以上不及格科目的學生的成績:\n");

printf("\n學號 姓名 學期 成績A 成績B 成績C 平均成績\n");

while(p&&p->next){

//如果p及其下一結點為真,且該結點有一門以上科目分數低於60則輸出該結點成績並使sum計數加1;

if((p->data.s1<60)||(p->data.s2<60)||(p->data.s3<60))

{

PrintE(p->data);

sum++;

} //end if;

p=p->next;

//轉到下一結點;

} //end while;

if((p->data.s1<60)||(p->data.s2<60)||(p->data.s3<60)){

//查看最後一個結點,若有掛科,sum加1並格式輸出結點信息;

sum++;

PrintE(p->data);

}

if(sum==0)printf("沒有不及格的記錄。\n");

if(sum)printf("共有%d人的掛科記錄.\n",sum);

}

void SqLinkListSearch(SqLinkList L){

//分類查找學生記錄;

Node *p;

p=L.head;

int n,reg; //reg為查詢方式的指令;

printf("1--按學號查詢\n2--按學期查詢\n3--掛科學生信息列表\n");

printf("請您輸入查詢方式:");

scanf("%d",®);

if(L.length){

if(reg>3)printf("對不起沒有您要求的選項。\n");

//若reg>3則輸入不合法;

else if(reg==1){

//reg==1按學號查詢;

printf("請輸入您要查詢的學生的學號:");

scanf("%d",&n);

while(p&&p->next&& p->data.num !=n) p=p->next;

//當p和他下一結點為真時且結點數據不為要查找數據時轉向下一結點;

if(p->data.num==n){

//找到所要查詢結點,格式輸出;

printf("\n學號 姓名 學期 成績A 成績B 成績C 平均成績\n");

PrintE(p->data);

}

else printf("沒有您要查找的學號。\n");

} //end reg==1 if ;

else if(reg==2)SearchTeam(L,p->data.team);

//reg==2,調用SearchTeam函數按學期查詢並輸出;

else if(reg==3)SearchUnpass(L,p->data.s1,p->data.s2,p->data.s3);

//reg==3,調用SearchUnpass函數,輸出全部有掛科記錄的學生信息;

}//end if;

else printf("系統中無記錄.\n");

}

void inputData(SqLinkList &L){

//請求輸入學生成績,則追加一個結點並輸入;

ElemType e;

if (ScanE(e)) SqLinkListAppend(L,e); //輸入數據,追加一個結點;

}

void SqLinkListTraverse(SqLinkList L){

//所有學生信息列表輸出;

Node *p;

char c;

p=L.head;

if(p) //非空表;

{

printf("\n學號 姓名 學期 成績A 成績B 成績C 平均成績\n");

for (p=L.head ;p;p=p->next )PrintE(p->data);

//從第一個結點開始輸出所有信息直到結點為空;

}

else printf("系統中無記錄。\n");

//空表;

c=getchar();

}

void PrintE(ElemType e){

//輸出各科成績和平均成績;

printf("%d\t%s\t%d\t%f\t%f\t%f\t%f\n",e.num,e.name,e.team,e.s1,e.s2,e.s3,(e.s1+e.s2+e.s3)/3);

//格式輸出學生的學號、姓名、學期、A、B、C三門成績以及平均成績;

}

Ⅱ 用C語言設計一個學生成績管理系統

#include <stdio.h>
#include <string.h>

#include <stdlib.h>
#defineMAX1000

/*定義學生成績信息結構*/
struct stu
{

char id[8];
char name[8];


(2)成績管理系統c語言報告擴展閱讀:

short:修飾int,短整型數據,可省略被修飾的int。(K&R時期引入)

long:修飾int,長整型數據,可省略被修飾的int。(K&R時期引入)

long long:修飾int,超長整型數據,可省略被修飾的int。(C99標准新增)

signed:修飾整型數據,有符號數據類型。(C89標准新增)

unsigned:修飾整型數據,無符號數據類型。(K&R時期引入)

restrict:用於限定和約束指針,並表明指針是訪問一個數據對象的唯一且初始的方式。(C99標准新增)

復雜類型關鍵字

struct:結構體聲明。(K&R時期引入)

union:聯合體聲明。(K&R時期引入)

enum:枚舉聲明。(C89標准新增)

typedef:聲明類型別名。(K&R時期引入)

sizeof:得到特定類型或特定類型變數的大小。(K&R時期引入)

inline:內聯函數用於取代宏定義,會在任何調用它的地方展開。(C99標准新增)

Ⅲ 怎樣用C語言寫學生成績管理系統

程序如下: #includex0dx0avoid main()x0dx0a{x0dx0a float student[100][7];x0dx0a//student[][0]存放學號,student[][1]到student[][4]存放四門成績,x0dx0a//student[][5]存放總分,student[][6]存放平均分,student[][7]存放排名x0dx0a int n,i,j,k,p,t,count,flag;x0dx0a int a[100],b[100],c[100];x0dx0a//a[]存放排序後的下標,b[]存放總分(備份),c[]存放排名的數據x0dx0a printf("輸入學生的個數:\n");x0dx0a scanf("%d",&n);x0dx0a for(i=0;i<=n-1;i++)x0dx0a {x0dx0a printf("輸入第%d個學生的學號:",i+1);x0dx0a scanf("%f",&student[i][0]);x0dx0a for(j=0,student[i][5]=0;j<=3;j++)x0dx0a {x0dx0a printf("輸入第%d個學生的第%d門成績:",i+1,j+1);x0dx0a scanf("%f",&student[i][j+1]);x0dx0a student[i][5]+=student[i][j+1]; //計算總分x0dx0a }x0dx0a b[i]=student[i][5]; //把總分再賦給b[]數組,以後排序用x0dx0a student[i][6]=student[i][5]/4; //計算平均分x0dx0a }x0dx0a x0dx0a for(i=0;i<=n-2;i++) //對數組b[](即總分)進行排序x0dx0a for(j=0;j<=n-2-i;j++)x0dx0a {x0dx0a if(b[j]b[i+1])x0dx0a {x0dx0a c[i]=count;x0dx0a count++;x0dx0a }x0dx0a }x0dx0a printf("\n以下是統計結果:\n");x0dx0a printf("學號 s[1] s[2] s[3] s[4] 總分 平均分 排名\n");x0dx0a for(i=0;i<=n-1;i++)x0dx0a {x0dx0a printf("%.0f\t%.0f\t%.0f\t%.0f\t%.0f\t%.0f\t%f\t%d\n",student[a[i]][0],student[a[i]][1],student[a[i]][2],student[a[i]][3],student[a[i]][4],student[a[i]][5],student[a[i]][6],c[i]);x0dx0a }x0dx0a} 有疑問提出

Ⅳ C語言課程設計報告(題目:學生成績管理系統)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 35
char name;
int inth;
struct date
{
int year;
char month;
char day;
};
struct student
{
char no[9];
char name[9];
char sex[3];
struct date birthday;
int score[4];
};
int menu()
{

int code;

printf(" 菜單\n");

printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");

printf("┃ 0.退出 ┃\n");

printf("┃ 1.顯示學生信息 ┃\n");

printf("┃ 2.顯示按姓名排序後的學生信息 ┃\n");

printf("┃ 3.顯示按總分排序後的學生信息 ┃\n");

printf("┃ 4.按學號查學生分數和平均分數 ┃\n");

printf("┃ 5.按姓名查學生分數和平均分數 ┃\n");

printf("┃ 6.查各課程平均分數 ┃\n");

printf("┃ 7.查男女學生的人數 ┃\n");

printf("┃ 8.顯示學生信息表 ┃\n");

printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");

printf("選擇代碼(0,1,2,3,4,5,6,7,8): ");

scanf("%d",&code);

return code;

}

/* 建立學生信息數組 */

void readsi(struct student stud[],int *n)

{

FILE*fp;

int i;

if((fp=fopen("studf.txt","r"))==NULL)

{

printf("不能打開studf.txt文件!\n");

exit(1);

}

for(i=0;!feof(fp);i++)

{

(*n)++;

if(*n>N)

{

printf("最多處理35位學生信息!\n");

return;

}

fscanf(fp,"%s %s %s %d %d %d %d %d %d",stud[i].no,stud[i].name,stud[i].sex,&stud[i].birthday.year,&stud[i].birthday.month,&stud[i].birthday.day,&stud[i].score[0],&stud[i].score[1],&stud[i].score[2]);
// fscanf從一個流中執行格式化輸入
stud[i].score[3]=stud[i].score[0]+stud[i].score[1]+stud[i].score[2];

}

fclose(fp);

}

/* 顯示學生信息 */

void printsi(struct student *pstud,int n)

{

int i,k=0;

printf(" 學號 姓名 性別 年 月 日 數學 英語 C 總分\n");

printf("┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉\n");

printf("==================================================================\n");

for(i=0;i<n;i++)

{

printf("%-8s %-8s %-2s %4d %2d %2d %4d %4d %4d %5d\n",pstud[i].no,pstud[i].name,pstud[i].sex,pstud[i].birthday.year,pstud[i].birthday.month,pstud[i].birthday.day,

pstud[i].score[0],pstud[i].score[1],pstud[i].score[2],pstud[i].score[3]);

k++;

if(k%20==0)

scanf("%*c");

}

}

/* 按學號排序—簡單比較排序法*/

void csort_no(struct student *pstud,int n)

{

struct student temp;

int i,j;

for(i=0;i<n-1;i++)

for(j=i+1;j<n;j++)

if(strcmp(pstud[i].no,pstud[j].no)>0)

{

temp=pstud[i];

pstud[i]=pstud[j];

pstud[j]=temp;

}

}

/* 顯示學生信息表*/

void printtable(struct student *pstud,int n)

{

int i,k=0;struct student studA[N];

for(i=0;i<n;i++)

studA[i]=pstud[i];

csort_no(studA,n);

printf("\n\n");

printf(" 學生信息表\n");

printf(" ==================\n\n");

printf("┏━━━━┳━━━━┳━━━┳━━━━━━┳━━━┳━━━┳━━━┳━━━┓\n");

printf("┃學號 ┃姓名 ┃ 性別 ┃ 年 月 日 ┃ 數學 ┃ 英語 ┃ C ┃ 總分 ┃\n");

printf("┣━━━━╋━━━━╋━━━╋━━━━━━╋━━━╋━━━╋━━━╋━━━┫\n");

printf("┣━━━━╋━━━━╋━━━╋━━━━━━╋━━━╋━━━╋━━━╋━━━┫\n");

for(i=0;i<n;i++)

{

printf("┃%-8s┃%-8s┃ %-2s ┃ %4d %2d %2d ┃ %4d ┃ %4d ┃ %4d ┃ %4d ┃\n",studA[i].no,studA[i].name,studA[i].sex,studA[i].birthday.year,studA[i].birthday.month,studA[i].birthday.day,studA[i].score[0],studA[i].score[1],studA[i].score[2],studA[i].score[3]);

if(i==n-1)

printf("┗━━━━┻━━━━┻━━━┻━━━━━━┻━━━┻━━━┻━━━┻━━━┛\n");

else

printf("┣━━━━╋━━━━╋━━━╋━━━━━━╋━━━╋━━━╋━━━╋━━━┫\n");

k++;

if(k%20==0)

scanf("%*c");

}

}

/* 查各課程平均分數 */

void find_ave(struct student *pstud,int n)

{

static summath=0,sumenglish=0,sumC=0,score=0;int i;struct student studA[N];

for(i=0;i<n;i++)

studA[i]=pstud[i];

csort_no(studA,n);

printf(" 各課程平均分數 \n ");

printf("————————————————————————————\n");

for(i=0;i<n;i++)

{

summath=summath+pstud[i].score[0];

sumenglish=sumenglish+pstud[i].score[1];

sumC=sumC+pstud[i].score[2];

score=score+pstud[i].score[3];

}

printf("數學平均分數:%4d\n",summath/n);

printf("英語平均分數:%4d\n",sumenglish/n);

printf("c平均分數:%4d\n",sumC/n);

printf("總分平均分數:%5d\n",score/n);

}

/* 查男女學生人數 */

void find_pnum(struct student *pstud,int n)

{

int i,j=0,k=0;

for(i=0;i<n;i++)

{

if(strcmp(pstud[i].sex,"男")==0)

j++;

else

k++;

}

printf("男學生人數為%d人",j);

printf("女學生人數為%d人",k);

}

/* 按總分遞減選擇排序(應用指針數組)*/

void ssort(struct student *ptscore[],int n)

{

struct student *temp;

int i,j;

for(i=0;i<n-1;i++)

for(j=0;j<n-i-1;j++)

if(ptscore[j]->score[3]<ptscore[j+1]->score[3])

{

temp=ptscore[j];

ptscore[j]=ptscore[j+1];

ptscore[j+1]=temp;

}

}

/* 按學號查學生信息和平均分數(順序查找)*/

void ssrch_no(struct student *pstud[],int n)

{

int i=0,j=0;char no[9];

printf("請輸入要查找的學生學號:");

scanf("%s",&no);

printf("\n");

for(i=0;i<n;i++)

{

if(strcmp(no,pstud[i]->no)==0)

printf("已找到學號為%-8s的學生\n學號:%-8s\n姓名:%-8s\n性別:%-2s\n%4d年%2d月%2d日\n數學:%4d\n英語:%4d\nc:%4d\n總分%4d\n平均分數為:%4d\n",pstud[i]->no,pstud[i]->no,pstud[i]->name,pstud[i]->sex,pstud[i]->birthday.year,pstud[i]->birthday.month,pstud[i]->birthday.day,pstud[i]->score[0],pstud[i]->score[1],pstud[i]->score[2],pstud[i]->score[3],pstud[i]->score[3]/3);

else

j++;

}

if(j==6)

printf("未找到學號為%-8s的學生\n",no);

}

/* 按姓名查找的學生信息和平均分數(折半查找)*/

void bsrch_name(struct student *pname[],int n)

{
int bsrch(struct student *pname[],int n,char *name);
char name[9];int i;

printf("請輸入要查找的學生姓名:");

scanf("%s",name);

i=bsrch(pname,n,name);

if(i!=-1)

printf("已找到該學生,學生信息:%-8s %-8s %-2s %4d %2d %2d %4d %4d %4d %5d\n",

pname[i]->no,pname[i]->name,pname[i]->sex,

pname[i]->birthday.year,pname[i]->birthday.month,

pname[i]->birthday.day,

pname[i]->score[0],pname[i]->score[1],pname[i]->score[2],

pname[i]->score[3]);

else

printf("%d沒有找到該學生資料!\n",name);

for(;;)

{ i=i-1;

if(strcmp(name,pname[i]->name)==0) printf("已找到該學生,學生信息:%-8s %-8s %-2s %4d %2d %2d %4d %4d %4d %5d\n",

pname[i]->no,pname[i]->name,pname[i]->sex,

pname[i]->birthday.year,pname[i]->birthday.month,

pname[i]->birthday.day,

pname[i]->score[0],pname[i]->score[1],pname[i]->score[2],

pname[i]->score[3]);

else

break;

}

i=bsrch(pname,n,name);

for(;;)

{i=i+1;

if(strcmp(name,pname[i]->name)==0) printf("已找到該學生,學生信息:%-8s %-8s %-2s %4d %2d %2d %4d %4d %4d %5d\n",

pname[i]->no,pname[i]->name,pname[i]->sex,

pname[i]->birthday.year,pname[i]->birthday.month,

pname[i]->birthday.day,

pname[i]->score[0],pname[i]->score[1],pname[i]->score[2],

pname[i]->score[3]);

else

break;

}

}

int bsrch(struct student *pname[],int n,char *name)

{

int lower=0,upper=n-1,mid;

if(strcmp(name,pname[lower]->name)==0) return lower;

else if(strcmp(name,pname[upper]->name)==0) return upper;

else

while(lower<=upper)

{

mid=(lower+upper)/2;

if(strcmp(name,pname[mid]->name)==0)

return mid;

else if(strcmp(name,pname[mid]->name)>0)

lower=mid+1;

else

upper=mid-1;

}

return -1;

}

/* 按姓名遞增冒泡排序(應用指針數組) */

void bsort(struct student *pname[],int n)

{

struct student *temp;

int i,j;

for(i=0;i<n-1;i++)

for(j=0;j<n-i-1;j++)

if(strcmp(pname[j]->name,pname[j+1]->name)>0)

{

temp=pname[j];

pname[j]=pname[j+1];

pname[j+1]=temp;

}

}

/* 按總分名次查找的學生信息和平均分數 */

void printf_ptscore(struct student *ptscore[],int n,int inth)

{

printf("請輸入要查找總分名次:");

scanf("%d",&inth);

inth--;

if(inth>n)

{

printf("未找到總分名次為%5d的學生",inth);

}

else

printf("已找到總分名次為%5d的學生\n學號:%-8s\n姓名:%-8s\n性別:%-2s\n%4d年%2d月%2d日\n數學:%4d\n英語:%4d\nc:%4d\n總分%5d\n平均分數為:%4d",inth+1,ptscore[inth]->no,ptscore[inth]->name,ptscore[inth]->sex,ptscore[inth]->birthday.year,ptscore[inth]->birthday.month,ptscore[inth]->birthday.day,ptscore[inth]->score[0],ptscore[inth]->score[1],ptscore[inth]->score[2],ptscore[inth]->score[3],ptscore[inth]->score[3]/3);

}

/*顯示姓名排序後的學生信息*/

void printsi_p1(struct student *parray[],int n)

{

int i,k=0;

printf(" 按姓名排序後的學生信息\n\n");

printf("學號 姓名 性別 年 月 日 數學 英語 C 總分\n");

printf("******** ------ ** ---- ** -- *** --- *** --- \n");

printf("=====================================================\n");

for(i=0;i<n;i++)

{

printf("%-8s%-8s%-2s%4d %2d %2d %4d %4d %4d %5d\n",

parray[i]->no,parray[i]->name,parray[i]->sex,

parray[i]->birthday.year,parray[i]->birthday.month,parray[i]->birthday.day,

parray[i]->score[0],parray[i]->score[1],parray[i]->score[2],parray[i]->score[3]);

k++;

if(k%20==0)

scanf("%*c");

}

}

/* 顯示按總分排序後的學生信息 */

void printsi_p2(struct student *ptscore[],int n)

{

int i,k=0;

printf("\n\n");

printf(" 按總分排序後的學生信息表\n");

printf(" ==================\n\n");

printf("┏━━━━┳━━━━┳━━━┳━━━━━━┳━━━┳━━━┳━━━┳━━━┓\n");

printf("┃學號 ┃姓名 ┃ 性別 ┃ 年 月 日 ┃ 數學 ┃ 英語 ┃ C ┃ 總分 ┃\n");

printf("┣━━━━╋━━━━╋━━━╋━━━━━━╋━━━╋━━━╋━━━╋━━━┫\n");

printf("┣━━━━╋━━━━╋━━━╋━━━━━━╋━━━╋━━━╋━━━╋━━━┫\n");

for(i=0;i<n;i++)

{

printf("┃%-8s┃%-8s┃ %-2s ┃ %4d %2d %2d ┃ %4d ┃ %4d ┃ %4d ┃ %4d ┃\n",ptscore[i]->no,ptscore[i]->name,ptscore[i]->sex,ptscore[i]->birthday.year,ptscore[i]->birthday.month,ptscore[i]->birthday.day,ptscore[i]->score[0],ptscore[i]->score[1],ptscore[i]->score[2],ptscore[i]->score[3]);

if(i==n-1)

printf("┗━━━━┻━━━━┻━━━┻━━━━━━┻━━━┻━━━┻━━━┻━━━┛\n");

else

printf("┣━━━━╋━━━━╋━━━╋━━━━━━╋━━━╋━━━╋━━━╋━━━┫\n");

k++;

if(k%20==0)

scanf("%*c");

}

}
#include<stdio.h>

#include<stdlib.h>

#include<string.h>
#define N 35
void main()

{

static struct student stud[N];

struct student *pstud[N];

struct student *pname[N];

struct student *ptscore[N];

int code,inth=0;

int n=0,i;

readsi(stud,&n);

for(i=0;i<N;i++)

pstud[i]=&stud[i];

for(i=0;i<N;i++)

pname[i]=&stud[i];

for(i=0;i<N;i++)

ptscore[i]=&stud[i];

bsort(pname,n);

ssort(ptscore,n);

printf("\n 學生信息:\n");

printsi(stud,n);

printf("\n 按<Enter>,進入菜單:\n");

scanf("%*c");

while(1)

{

code=menu();

switch(code)

{

case 0: /* 退出 */

exit(1);

case 1: /* 顯示學生信息 */

printsi(stud,n);

scanf("%*2c");break;

case 2: /* 顯示按姓名排序後的學生信息 */

printsi_p1(pname,n);

scanf("%*2c");break;

case 3: /* 顯示按總分排序後的學生信息 */

printsi_p2(ptscore,n);

scanf("%*2c");break;

case 4: /* 按學號查找學生信息和平均分數 */

ssrch_no(pstud,n);

scanf("%*2c");break;

case 5: /* 按姓名查找學生信息和平均分數 */

bsrch_name(pname,n);

scanf("%*2c");break;

case 6: /* 查各門課的平均分數 */

find_ave(stud,n);

scanf("%*2c");break;

case 7: /* 查男女人數 */

find_pnum(stud,n);

scanf("%*2c");break;

case 8: /* 顯示學生信息表 */

printtable(stud,n);

scanf("%*2c");break;

}

}

}

Ⅳ 怎樣用C語言寫學生成績管理系統

程序如下: #include<stdio.h>
void main()
{
float student[100][7];
//student[][0]存放學號,student[][1]到student[][4]存放四門成績,
//student[][5]存放總分,student[][6]存放平均分,student[][7]存放排名
int n,i,j,k,p,t,count,flag;
int a[100],b[100],c[100];
//a[]存放排序後的下標,b[]存放總分(備份),c[]存放排名的數據
printf("輸入學生的個數:\n");
scanf("%d",&n);
for(i=0;i<=n-1;i++)
{
printf("輸入第%d個學生的學號:",i+1);
scanf("%f",&student[i][0]);
for(j=0,student[i][5]=0;j<=3;j++)
{
printf("輸入第%d個學生的第%d門成績:",i+1,j+1);
scanf("%f",&student[i][j+1]);
student[i][5]+=student[i][j+1]; //計算總分
}
b[i]=student[i][5]; //把總分再賦給b[]數組,以後排序用
student[i][6]=student[i][5]/4; //計算平均分
}

for(i=0;i<=n-2;i++) //對數組b[](即總分)進行排序
for(j=0;j<=n-2-i;j++)
{
if(b[j]<b[j+1])
{
t=b[j];
b[j]=b[j+1];
b[j+1]=t;
}
}
for(i=0,k=0;i<=n-1;i++)//用數組a[]取得排序後總分的下標
{
for(j=0,flag=0;j<=n-1;j++)
{
if(b[i]==student[j][5])
{
if(0==k) //如果數組a[]中有零個元素,就把j直接賦給a[]
{
a[k]=j;
k++;
flag=1;
}
else //如果數組a[]中有元素了,則判斷
{
for(p=0;p<=k-1;p++)
if(a[p]!=j)
{
a[k]=j;
k++;
flag=1;
break;
}
}
}
if(1==flag)
break;
}
}
for(count=1,i=0;i<=n-1;i++) //對c[](排名)進行處理
{
if(b[i]==b[i+1])
{
c[i]=count;
}
else
if(b[i]>b[i+1])
{
c[i]=count;
count++;
}
}
printf("\n以下是統計結果:\n");
printf("學號 s[1] s[2] s[3] s[4] 總分 平均分 排名\n");
for(i=0;i<=n-1;i++)
{
printf("%.0f\t%.0f\t%.0f\t%.0f\t%.0f\t%.0f\t%f\t%d\n",student[a[i]][0],student[a[i]][1],student[a[i]][2],student[a[i]][3],student[a[i]][4],student[a[i]][5],student[a[i]][6],c[i]);
}
} 有疑問提出

Ⅵ C語言 學生成績管理系統

我找的一個代碼!試一下:

c語言學生成績管理系統

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int shoudsave=0; /* */
struct student
{
char num[10];/* 學號 */
char name[20];
char sex[4];
int cgrade;
int mgrade;
int egrade;
int totle;
int ave;
char neartime[10];/* 最近更新時間 */
};

typedef struct node
{
struct student data;
struct node *next;
}Node,*Link;

void menu()
{
printf("********************************************************************************");
printf("\t1登記學生資料\t\t\t\t\t2刪除學生資料\n");
printf("\t3查詢學生資料\t\t\t\t\t4修改學生資料\n");
printf("\t5保存學生資料\t\t\t\t\t0退出系統\n");
printf("********************************************************************************\n");
}

void printstart()
{
printf("-----------------------------------------------------------------------\n");
}
void Wrong()
{
printf("\n=====>提示:輸入錯誤!\n");
}

void Nofind()
{
printf("\n=====>提示:沒有找到該學生!\n");
}

void printc() /* 本函數用於輸出中文 */
{
printf(" 學號\t 姓名 性別 英語成績 數學成績 C語言成績 總分 平均分\n");
}

void printe(Node *p)/* 本函數用於輸出英文 */
{
printf("%-12s%s\t%s\t%d\t%d\t%d\t %d\t %d\n",p->data.num,p->data.name,p->data.sex,p->data.egrade,p->data.mgrade,p->data.cgrade,p->data.totle,p->data.ave);
}

Node* Locate(Link l,char findmess[],char nameornum[]) /* 該函數用於定位連表中符合要求的接點,並返回該指針 */
{
Node *r;
if(strcmp(nameornum,"num")==0) /* 按學號查詢 */
{
r=l->next;
while(r!=NULL)
{
if(strcmp(r->data.num,findmess)==0)
return r;
r=r->next;
}
}
else if(strcmp(nameornum,"name")==0) /* 按姓名查詢 */
{
r=l->next;
while(r!=NULL)
{
if(strcmp(r->data.name,findmess)==0)
return r;
r=r->next;
}
}
return 0;
}

void Add(Link l) /* 增加學生 */
{
Node *p,*r,*s;
char num[10];
r=l;
s=l->next;
while(r->next!=NULL)
r=r->next; /* 將指針置於最末尾 */
while(1)
{
printf("請你輸入學號(以'0'返回上一級菜單:)");
scanf("%s",num);
if(strcmp(num,"0")==0)
break;
while(s)
{
if(strcmp(s->data.num,num)==0)
{
printf("=====>提示:學號為'%s'的學生已經存在,若要修改請你選擇'4 修改'!\n",num);
printstart();
printc();
printe(s);
printstart();
printf("\n");
return;
}
s=s->next;
}

p=(Node *)malloc(sizeof(Node));

strcpy(p->data.num,num);
printf("請你輸入姓名:");
scanf("%s",p->data.name);
getchar();
printf("請你輸入性別:");
scanf("%s",p->data.sex);
getchar();
printf("請你輸入c語言成績:");
scanf("%d",&p->data.cgrade);
getchar();
printf("請你輸入數學成績:");
scanf("%d",&p->data.mgrade);
getchar();
printf("請你輸入英語成績:");
scanf("%d",&p->data.egrade);
getchar();
p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;
p->data.ave=p->data.totle / 3;
/* 信息輸入已經完成 */
p->next=NULL;
r->next=p;
r=p;
shoudsave=1;

}
}

void Qur(Link l) /* 查詢學生 */
{
int sel;
char findmess[20];
Node *p;

if(!l->next)
{
printf("\n=====>提示:沒有資料可以查詢!\n");
return;

}
printf("\n=====>1按學號查找\n=====>2按姓名查找\n");
scanf("%d",&sel);
if(sel==1)/* 學號 */
{
printf("請你輸入要查找的學號:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
printf("\t\t\t\t查找結果\n");
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
else if(sel==2) /* 姓名 */
{
printf("請你輸入要查找的姓名:");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{
printf("\t\t\t\t查找結果\n");
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
else
Wrong();

}

void Del(Link l) /* 刪除 */
{
int sel;
Node *p,*r;
char findmess[20];
if(!l->next)
{
printf("\n=====>提示:沒有資料可以刪除!\n");
return;
}
printf("\n=====>1按學號刪除\n=====>2按姓名刪除\n");
scanf("%d",&sel);
if(sel==1)
{
printf("請你輸入要刪除的學號:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf("\n=====>提示:該學生已經成功刪除!\n");
shoudsave=1;
}
else
Nofind();
}
else if(sel==2)
{
printf("請你輸入要刪除的姓名:");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{
r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf("\n=====>提示:該學生已經成功刪除!\n");
shoudsave=1;
}
else
Nofind();
}
else
Wrong();
}

void Modify(Link l)
{
Node *p;
char findmess[20];
if(!l->next)
{
printf("\n=====>提示:沒有資料可以修改!\n");
return;
}
printf("請你輸入要修改的學生學號:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
printf("請你輸入新學號(原來是%s):",p->data.num);
scanf("%s",p->data.num);
printf("請你輸入新姓名(原來是%s):",p->data.name);
scanf("%s",p->data.name);
getchar();
printf("請你輸入新性別(原來是%s):",p->data.sex);
scanf("%s",p->data.sex);
printf("請你輸入新的c語言成績(原來是%d分):",p->data.cgrade);
scanf("%d",&p->data.cgrade);
getchar();
printf("請你輸入新的數學成績(原來是%d分):",p->data.mgrade);
scanf("%d",&p->data.mgrade);
getchar();
printf("請你輸入新的英語成績(原來是%d分):",p->data.egrade);
scanf("%d",&p->data.egrade);
p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;
p->data.ave=p->data.totle/3;
printf("\n=====>提示:資料修改成功!\n");
shoudsave=1;
}
else
Nofind();

}

void Disp(Link l)
{
int count=0;
Node *p;
p=l->next;

if(!p)
{
printf("\n=====>提示:沒有資料可以顯示!\n");
return;
}
printf("\t\t\t\t顯示結果\n");
printstart();
printc();
printf("\n");
while(p)
{
printe(p);
p=p->next;
}
printstart();
printf("\n");
}

void Tongji(Link l)
{
Node *pm,*pe,*pc,*pt,*pa; /* 用於指向分數最高的接點 */
Node *r=l->next;
if(!r)
{
printf("\n=====>提示:沒有資料可以統計!\n");
return ;
}
pm=pe=pc=pt=pa=r;
while(r!=NULL)
{
if(r->data.cgrade>=pc->data.cgrade)
pc=r;
if(r->data.mgrade>=pm->data.mgrade)
pm=r;
if(r->data.egrade>=pe->data.egrade)
pe=r;
if(r->data.totle>=pt->data.totle)
pt=r;
if(r->data.ave>=pa->data.ave)
pa=r;

r=r->next;
}
printf("------------------------------統計結果--------------------------------\n");
printf("總分最高者:\t%s %d分\n",pt->data.name,pt->data.totle);
printf("平均分最高者:\t%s %d分\n",pa->data.name,pa->data.ave);

printf("英語最高者:\t%s %d分\n",pe->data.name,pe->data.egrade);
printf("數學最高者:\t%s %d分\n",pm->data.name,pm->data.mgrade);
printf("c語言最高者:\t%s %d分\n",pc->data.name,pc->data.cgrade);
printstart();
}

void Sort(Link l)
{
Link ll;
Node *p,*rr,*s;

ll=(Link)malloc(sizeof(Node)); /* 用於做新的連表 */
ll->next=NULL;

if(l->next==NULL)
{
printf("\n=====>提示:沒有資料可以排序!\n");
return ;
}
p=l->next;
while(p)
{
s=(Node*)malloc(sizeof(Node)); /* 新建接點用於保存信息 */
s->data=p->data;
s->next=NULL;

rr=ll;
while(rr->next!=NULL && rr->next->data.totle>=p->data.totle)
rr=rr->next;
if(rr->next==NULL)
rr->next=s;
else
{
s->next=rr->next;
rr->next=s;
}
p=p->next;
}
free(l);
l->next=ll->next;
printf("\n=====>提示:排序已經完成!\n");
}

void Save(Link l)
{
FILE* fp;
Node *p;
int flag=1,count=0;
fp=fopen("c:\\student","wb");
if(fp==NULL)
{
printf("\n=====>提示:重新打開文件時發生錯誤!\n");
exit(1);
}
p=l->next;

while(p)
{
if(fwrite(p,sizeof(Node),1,fp)==1)
{
p=p->next;
count++;
}
else
{
flag=0;
break;
}
}
if(flag)
{
printf("\n=====>提示:文件保存成功.(有%d條記錄已經保存.)\n",count);
shoudsave=0;
}
fclose(fp);
}

void main()
{
Link l;/* 連表 */
FILE *fp; /* 文件指針 */
int sel;
char ch;
char jian;

int count=0;
Node *p,*r;
printf("\t\t\t\t學生成績管理系統\n\t\t\t\t-------福建農業職業學院計應0501 黃歡(32號)\n");
l=(Node*)malloc(sizeof(Node));
l->next=NULL;
r=l;

fp=fopen("C:\\student","rb");
if(fp==NULL)
{
printf("\n=====>提示:文件還不存在,是否創建?(y/n)\n");
scanf("%c",&jian);
if(jian=='y'||jian=='Y')
fp=fopen("C:\\student","wb");
else
exit(0);
}
printf("\n=====>提示:文件已經打開,正在導入記錄......\n");

while(!feof(fp))
{
p=(Node*)malloc(sizeof(Node));
if(fread(p,sizeof(Node),1,fp)) /* 將文件的內容放入接點中 */
{
p->next=NULL;
r->next=p;
r=p; /* 將該接點掛入連中 */
count++;
}
}

fclose(fp); /* 關閉文件 */
printf("\n=====>提示:記錄導入完畢,共導入%d條記錄.\n",count);

while(1)
{
menu();
printf("請你選擇操作:");
scanf("%d",&sel);

if(sel==0)
{
if(shoudsave==1)
{ getchar();
printf("\n=====>提示:資料已經改動,是否將改動保存到文件中(y/n)?\n");
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
Save(l);
}
printf("\n=====>提示:你已經退出系統,再見!\n");
break;
}
switch(sel)
{
case 1:Add(l);break; /* 增加學生 */
case 2:Del(l);break;/* 刪除學生 */
case 3:Qur(l);break;/* 查詢學生 */
case 4:Modify(l);break;/* 修改學生 */
case 5:Save(l);break;/* 保存學生 */
case 9:printf("\t\t\t==========幫助信息==========\n");break;
default: Wrong();getchar();break;
}
}
}
/* */

/*
學生成績管理程序
編制一個統計學生考試分數的管理程序。
設學生成績已以一個學生一個記錄的形式存儲在文件中,
每位學生記錄包含的信息有:姓名,學號和各門功課的成績。
程序具有以下幾項功能:求出各門課程的總分,平均分,按姓名,
按學號尋找其記錄並顯示,瀏覽全部學生成績和按總分由高到低顯示學生信息等。
*/

#include <stdio.h>
#define SWN 3 /* 課程數 */
#define NAMELEN 20 /* 姓名最大字元數 */
#define CODELEN 10 /* 學號最大字元數 */
#define FNAMELEN 80 /* 文件名最大字元數 */
#define BUFLEN 80 /* 緩沖區最大字元數 */
/* 課程名稱表 */
char schoolwork[SWN][NAMELEN+1] = {"Chinese","Mathematic","English"};
struct record
{
char name[NAMELEN+1]; /* 姓名 */
char code[CODELEN+1]; /* 學號 */
int marks[SWN]; /* 各課程成績 */
int total; /* 總分 */
}stu;

struct node
{
char name[NAMELEN+1]; /* 姓名 */
char code[CODELEN+1]; /* 學號 */
int marks[SWN]; /* 各課程成績 */
int total; /* 總分 */
struct node *next; /* 後續表元指針 */
}*head; /* 鏈表首指針 */

int total[SWN]; /* 各課程總分 */
FILE *stfpt; /* 文件指針 */
char stuf[FNAMELEN]; /* 文件名 */

/* 從指定文件讀入一個記錄 */
int readrecord(FILE *fpt,struct record *rpt)
{
char buf[BUFLEN];
int i;
if(fscanf(fpt,"%s",buf)!=1)
return 0; /* 文件結束 */
strncpy(rpt->name,buf,NAMELEN);
fscanf(fpt,"%s",buf);
strncpy(rpt->code,buf,CODELEN);
for(i=0;i<SWN;i++)
fscanf(fpt,"%d",&rpt->marks[i]);
for(rpt->total=0,i=0;i<SWN;i++)
rpt->total+=rpt->marks[i];
return 1;
}
/* 對指定文件寫入一個記錄 */
writerecord(FILE *fpt,struct record *rpt)
{
int i;
fprintf(fpt,"%s\n",rpt->name);
fprintf(fpt,"%s\n",rpt->code);
for(i=0;i<SWN;i++)
fprintf(fpt,"%d\n",rpt->marks[i]);
return ;
}

/* 顯示學生記錄 */
displaystu(struct record *rpt)
{
int i;
printf("\nName : %s\n",rpt->name);
printf("Code : %s\n",rpt->code);
printf("Marks :\n");
for(i=0;i<SWN;i++)
printf(" %-15s : %4d\n",schoolwork[i],rpt->marks[i]);
printf("Total : %4d\n",rpt->total);
}

/* 計算各單科總分 */
int totalmark(char *fname)
{
FILE *fp;
struct record s;
int count,i;
if((fp=fopen(fname,"r"))==NULL)
{
printf("Can't open file %s.\n",fname);
return 0;
}
for(i=0;i<SWN;i++)
total[i]=0;
count=0;
while(readrecord(fp,&s)!=0)
{
for(i=0;i<SWN;i++)
total[i]+=s.marks[i];
count++;
}
fclose(fp);
return count; /* 返回記錄數 */
}

/* 列表顯示學生信息 */
void liststu(char *fname)
{
FILE *fp;
struct record s;
if((fp=fopen(fname,"r"))==NULL)
{
printf("Can't open file %s.\n",fname);
return ;
}
while(readrecord(fp,&s)!=0)
{
displaystu(&s);
printf("\n Press ENTER to continue...\n");
while(getchar()!='\n');
}
fclose(fp);
return;
}

/* 構造鏈表 */
struct node *makelist(char *fname)
{
FILE *fp;
struct record s;
struct node *p,*u,*v,*h;
int i;
if((fp=fopen(fname,"r"))==NULL)
{
printf("Can't open file %s.\n",fname);
return NULL;
}
h=NULL;
p=(struct node *)malloc(sizeof(struct node));
while(readrecord(fp,(struct record *)p)!=0)
{
v=h;
while(v&&p->total<=v->total)
{
u=v;
v=v->next;
}
if(v==h)
h=p;
else
u->next=p;
p->next=v;
p=(struct node *)malloc(sizeof(struct node));
}
free(p);
fclose(fp);
return h;
}

/* 順序顯示鏈表各表元 */
void displaylist(struct node *h)
{
while(h!=NULL)
{
displaystu((struct record *)h);
printf("\n Press ENTER to continue...\n");
while(getchar()!='\n');
h=h->next;
}
return;
}
/* 按學生姓名查找學生記錄 */
int retrievebyn(char *fname, char *key)
{
FILE *fp;
int c;
struct record s;
if((fp=fopen(fname,"r"))==NULL)
{
printf("Can't open file %s.\n",fname);
return 0;
}
c=0;
while(readrecord(fp,&s)!=0)
{
if(strcmp(s.name,key)==0)
{
displaystu(&s);
c++;
}
}
fclose(fp);
if(c==0)
printf("The student %s is not in the file %s.\n",key,fname);
return 1;
}

/* 按學生學號查找學生記錄 */
int retrievebyc(char *fname, char *key)
{
FILE *fp;
int c;
struct record s;
if((fp=fopen(fname,"r"))==NULL)
{
printf("Can't open file %s.\n",fname);
return 0;
}
c=0;
while(readrecord(fp,&s)!=0)
{
if(strcmp(s.code,key)==0)
{
displaystu(&s);
c++;
break;
}
}
fclose(fp);
if(c==0)
printf("The student %s is not in the file %s.\n",key,fname);
return 1;
}

main()
{
int i,j,n;
char c;
char buf[BUFLEN];
FILE *fp;
struct record s;
clrscr();
printf("Please input the students marks record file's name: ");
scanf("%s",stuf);
if((fp=fopen(stuf,"r"))==NULL)
{
printf("The file %s doesn't exit, do you want to creat it? (Y/N) ",stuf);
getchar();
c=getchar();
if(c=='Y'||c=='y')
{
fp=fopen(stuf,"w");
printf("Please input the record number you want to write to the file: ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("Input the student's name: ");
scanf("%s",&s.name);
printf("Input the student's code: ");
scanf("%s",&s.code);
for(j=0;j<SWN;j++)
{
printf("Input the %s mark: ",schoolwork[j]);
scanf("%d",&s.marks[j]);
}
writerecord(fp,&s);
}
fclose(fp);
}
}
fclose(fp);
getchar();
/*clrscr();*/
puts("Now you can input a command to manage the records.");
puts("m : mean of the marks.");
puts("t : total of the marks.");
puts("n : search record by student's name.");
puts("c : search record by student's code.");
puts("l : list all the records.");
puts("s : sort and list the records by the total.");
puts("q : quit!");
while(1)
{
puts("Please input command:");
scanf(" %c",&c); /* 輸入選擇命令 */
if(c=='q'||c=='Q')
{
puts("\n Thank you for your using.");
break; /* q,結束程序運行 */
}
switch(c)
{
case 'm': /* 計算平均分 */
case 'M':
if((n=totalmark(stuf))==0)
{
puts("Error!");
break;
}
printf("\n");
for(i=0;i<SWN;i++)
printf("%-15s's average is: %.2f.\n",schoolwork[i],(float)total[i]/n);
break;
case 't': /* 計算總分 */
case 'T':
if((n=totalmark(stuf))==0)
{
puts("Error!");
break;
}
printf("\n");
for(i=0;i<SWN;i++)
printf("%-15s's total mark is: %d.\n",schoolwork[i],total[i]);
break;
case 'n': /* 按學生的姓名尋找記錄 */
case 'N':
printf("Please input the student's name you want to search: ");
scanf("%s",buf);
retrievebyn(stuf,buf);
break;
case 'c': /* 按學生的學號尋找記錄 */
case 'C':
printf("Please input the student's code you want to search: ");
scanf("%s",buf);
retrievebyc(stuf,buf);
break;
case 'l': /* 列出所有學生記錄 */
case 'L':
liststu(stuf);
break;
case 's': /* 按總分從高到低排列顯示 */
case 'S':
if((head=makelist(stuf))!=NULL)
displaylist(head);
break;
default: break;
}
}
}

Ⅶ C語言程序設計學生成績管理系統

給你把核心大約寫一下吧你再具體修改一下
sum(中間成績求和數據)=o
for(i=0;i<5;i++)
{sum=科目數組名[i][0]+sum<br>}
sum/5=平均成績
sum1=0
for(i=0;i<5;i++)
{
for(j=0;j<50;j++)
{科目數組名[i][j]+sum1=sum1;
}
sum1/50=平均成績
輸出
}
至於找出學生和課程,你找出2維數組里的最大值,也是for循環也能完成,然後看他所在的行列,就能得出相應的學生和課程了、

熱點內容
androiddimens 發布:2025-03-26 01:37:00 瀏覽:471
電視出現認證伺服器無響應怎麼辦 發布:2025-03-26 01:33:21 瀏覽:685
linux安裝mysql55 發布:2025-03-26 01:31:10 瀏覽:758
如何遠程登錄家裡的伺服器 發布:2025-03-26 01:10:49 瀏覽:762
河北長城dns伺服器地址 發布:2025-03-26 01:07:05 瀏覽:837
社保的卡銀行密碼是多少 發布:2025-03-26 01:00:28 瀏覽:974
買手機如何看是正品安卓 發布:2025-03-26 00:28:25 瀏覽:363
對象沒有存儲類型 發布:2025-03-26 00:10:03 瀏覽:402
相冊編程代碼 發布:2025-03-25 23:59:07 瀏覽:741
絕地求生安卓登不進去怎麼辦 發布:2025-03-25 23:58:58 瀏覽:863