當前位置:首頁 » 編程語言 » c語言成績管理系統
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言成績管理系統

發布時間: 2022-01-12 12:58:15

c語言成績管理系統

#include"stdio.h"
structstu{
intsid,score;
charg;
};
voidscorein(structstu*p,intn){
inti,t;
for(i=0;i<n;i++){
scanf("%d%d",&p[i].sid,&p[i].score);
p[i].g=(t=p[i].score)>89&&t<101?'A':t>79&&t<90?'B':t>69&&t<80?'C':t>59&&t<70?'D':'E';
}
}
intsum(structstu*p,intn){
ints=0;
while(n--)
s+=p++->score;
returns;
}
voiddssort(structstu*p,intn){
inti,j,k;
structstut;
printf(" STUID SCORE CLASS ===================== ");
for(i=0;i<n;i++){
for(k=i,j=k+1;j<n;j++)
if(p[k].score<p[j].score)
k=j;
if(k!=i)
t=p[k],p[k]=p[i],p[i]=t;
printf("%d %d %c ",p[i].sid,p[i].score,p[i].g);
}
}
voididsort(structstu*p,intn){
inti,j,k;
structstut;
printf(" STUID SCORE CLASS ===================== ");
for(i=0;i<n;i++){
for(k=i,j=k+1;j<n;j++)
if(p[k].sid>p[j].sid)
k=j;
if(k!=i)
t=p[k],p[k]=p[i],p[i]=t;
printf("%d %d %c ",p[i].sid,p[i].score,p[i].g);
}
}
voidquery(structstu*p,intn){
intid;
printf(" PleaseenterID(int)... ");
scanf("%d",&id);
while(id-p->sid&&n)
p++,n--;
if(n>=0){
printf("STUID SCORE CLASS ===================== ");
printf("%d %d %c ",p->sid,p->score,p->g);
}
else
printf("Nofind! ");
}
voidlevel(structstu*p,intn){
intd[5],i;
chars[5][7]={"優秀","良好","中等","及格","不及格"};
printf("統計信息如下: ");
for(i=0;i<5;d[i++]=0);
for(i=0;i<n;i++,d[p++->g-'A']++);
for(i=0;i<5;i++)
printf("%6s: %d %.2f%% ",s[i],d[i],d[i]/(n+0.0)*100);
}
voidoutinfo(structstu*p,intn){
inti;
printf(" STUID SCORE ============= ");
for(i=0;i<n;i++)
printf("%d %d ",p[i].sid,p[i].score);
}
intmain(intargc,char*argv[]){
intn,s;
structstua[30];
printf("Pleaseentern(int0<n<31)... ");
if(scanf("%d",&n)!=1||n<1||n>30){
printf("Inputerror,exit... ");
return0;
}
scorein(a,n);//輸入
dssort(a,n);//分數降序
idsort(a,n);//學號升序
query(a,n);//查詢
level(a,n);//等級和百分比
outinfo(a,n);//輸出各位學生信息
printf("總分:%d",s=sum(a,n));
printf("平均分:%.2f ",s/(n+0.0));
return0;
}

運行樣例:

② 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;
}
}
}
/* */

③ C語言,學生成績管理系統

C語言課程設計任務書
一、題目: 學生成績管理
二、目的與要求
1. 目的:
(1)基本掌握面向過程程序設計的基本思路和方法;
(2)達到熟練掌握C語言的基本知識和技能;
(3)能夠利用所學的基本知識和技能,解決簡單的程序設計問題
2. 要求
基本要求:
1. 要求利用C語言面向過程的編程思想來完成系統的設計;
2. 突出C語言的函數特徵,以多個函數實現每一個子功能;
3. 畫出功能模塊圖;
4. 進行簡單界面設計,能夠實現友好的交互;
5. 具有清晰的程序流程圖和數據結構的詳細定義;
6. 熟練掌握C語言對文件的各種操作。
創新要求:
在基本要求達到後,可進行創新設計,如系統用戶功能控制,對管理員級和一般級別的用戶系統功能操作不同
三、信息描述
輸入一個班10個學生的學號和每個學生考試三門功課(數學、英語、計算機基礎)的成績。編程計算出每個學生的總分和平均分,並按學生成績優劣排序,最後列印一張按高分到低分名次排序的成績單。要求:
1)排序用一個函數實現。
2)列印的成績單表項包括:序號,學號、數學、英語、計算機、總分、平均分。
3)按實驗報告電子模板格式填寫實驗內容。
四、功能描述
1. 學生基本信息及成績所選科目成績的錄入。
2. 基本信息的查詢(分系、班級;分科目)與修改。
3. 對每系或每班各科成績進行分析(即求單科平均成績、及格率和優秀率);
4. 對所開課程的成績分析(求其平均成績,最高分和最低分);
5. 對學生考試成績進行排名(單科按系別或班級進行排名,對每一個班級,同一學期學生總體成績進行排名,並顯示各科成績信息)
五、解決方案
1. 分析程序的功能要求,劃分程序功能模塊。
2. 畫出系統流程圖。
3. 代碼的編寫。定義數據結構和各個功能子函數。
4. 程序的功能調試。
5. 完成系統總結報告以及使用說明書
六、進度安排
此次課程設計時間為兩周,分四個階段完成:
1. 分析設計階段。指導教師應積極引導學生自主學習和鑽研問題,明確設計要求,找出實現方法,按照需求分析、總體設計、詳細設計這幾個步驟進行。
2. 編碼調試階段:根據設計分析方案編寫C代碼,然後調試該代碼,實現課題要求的功能。
3. 總結報告階段:總結設計工作,寫出課程設計說明書,要求學生寫出需求分析、總體設計、詳細設計、編碼、測試的步驟和內容。
4. 考核階段。
#include <stdio.h>
#include <stdlib.h>
#define STU_NUM 10 /*宏定義學生的數量*/
struct student /*定義一個結構體用來存放學生學號、三門課成績、總分及平均成績*/
{
char stu_id[20]; /*學生學號;*/
float score[3]; /*三門課成績;*/
float total; /*總成績;*/
float aver; /*平均成績;*/
};
/*排序用一個函數來實現*/
void SortScore(student *stu,int n)
{
student stud;
for(int i = 0; i < n-1; i++)
for(int j = i+1 ; j < n; j++)
{
if(stu[i].total < stu[j].total)
{
stud = stu[i];
stu[i] = stu[j];
stu[j] = stud;
}
}
}
int main( )
{
student stu[STU_NUM]; /*創建結構體數組中有10個元素,分別用來保存這10個人的相關信息。*/
/*輸入這十個學生的相關信息*/
for(int i = 0; i<STU_NUM; i++)
{
printf("請輸入第%d個學生的學號:",i+1);
scanf("%s",&stu[i].stu_id);
printf("輸入第%d個學生的數學成績:",i+1);
scanf("%f",&stu[i].score[0]);
printf("輸入第%d個學生的英語成績:",i+1);
scanf("%f",&stu[i].score[1]);
printf("輸入第%d個學生的計算機成績:",i+1);
scanf("%f",&stu[i].score[2]);
stu[i].total = stu[i].score[0]+stu[i].score[1]+stu[i].score[2];
stu[i].aver = stu[i].total/3;
}
printf("\n");

SortScore(stu,STU_NUM);/*調用排序函數*/
/*輸出排序後的各學生的成績*/
for(i = 0 ; i < STU_NUM; i++)
{
printf("序號: %d\t",i);
printf("學號:%s\t",stu[i].stu_id);
printf("數學:%f\t",stu[i].score[0]);
printf("英語:%f\t",stu[i].score[1]);
printf("計算機:%f\t",stu[i].score[2]);
printf("平均成績:%f\t",stu[i].aver);
printf("總分:%f\t",stu[i].total);
printf("\n\n");
}
return 0;
}
註:(源程序中主要標識符含義說明)
#define STU_NUM 10 /*宏定義學生的數量*/
struct student /*定義一個結構體用來存放學生學號、三門課成績、總分及平均成績*/
{
char stu_id[20]; /*學生學號;*/
float score[3]; /*三門課成績;*/
float total; /*總成績;*/
float aver; /*平均成績;*/
}
實驗結果:
輸入 :(只輸入後面的數字,前面的文字是自己產生的)。
請輸入第1個學生的學號:001
輸入第1個學生的數學成績:1
輸入第1個學生的英語成績:1
輸入第1個學生的計算機成績:1
請輸入第2個學生的學號:002
輸入第2個學生的數學成績:2
輸入第2個學生的英語成績:2
輸入第2個學生的計算機成績:2
請輸入第3個學生的學號:003
輸入第3個學生的數學成績:3
輸入第3個學生的英語成績:3
輸入第3個學生的計算機成績:3
請輸入第4個學生的學號:004
輸入第4個學生的數學成績:4
輸入第4個學生的英語成績:4
輸入第4個學生的計算機成績:4
請輸入第5個學生的學號:005
輸入第5個學生的數學成績:5
輸入第5個學生的英語成績:5
輸入第5個學生的計算機成績:5
請輸入第6個學生的學號:006
輸入第6個學生的數學成績:6
輸入第6個學生的英語成績:6
輸入第6個學生的計算機成績:6
請輸入第7個學生的學號:007
輸入第7個學生的數學成績:7
輸入第7個學生的英語成績:7
輸入第7個學生的計算機成績:7
請輸入第8個學生的學號:008
輸入第8個學生的數學成績:8
輸入第8個學生的英語成績:8
輸入第8個學生的計算機成績:8
請輸入第9個學生的學號:009
輸入第9個學生的數學成績:9
輸入第9個學生的英語成績:9
輸入第9個學生的計算機成績:9
請輸入第10個學生的學號:010
輸入第10個學生的數學成績:10
輸入第10個學生的英語成績:10
輸入第10個學生的計算機成績:10
輸出:
序號: 0 學號:010 數學:10.000000 英語:10.000000 計算機:10.000000
平均成績:10.000000 總分:30.000000

序號: 1 學號:009 數學:9.000000 英語:9.000000 計算機:9.000000
平均成績:9.000000 總分:27.000000

序號: 2 學號:008 數學:8.000000 英語:8.000000 計算機:8.000000
平均成績:8.000000 總分:24.000000

序號: 3 學號:007 數學:7.000000 英語:7.000000 計算機:7.000000
平均成績:7.000000 總分:21.000000

序號: 4 學號:006 數學:6.000000 英語:6.000000 計算機:6.000000
平均成績:6.000000 總分:18.000000

序號: 5 學號:005 數學:5.000000 英語:5.000000 計算機:5.000000
平均成績:5.000000 總分:15.000000

序號: 6 學號:004 數學:4.000000 英語:4.000000 計算機:4.000000
平均成績:4.000000 總分:12.000000

序號: 7 學號:003 數學:3.000000 英語:3.000000 計算機:3.000000
平均成績:3.000000 總分:9.000000

序號: 8 學號:002 數學:2.000000 英語:2.000000 計算機:2.000000
平均成績:2.000000 總分:6.000000

序號: 9 學號:001 數學:1.000000 英語:1.000000 計算機:1.000000
平均成績:1.000000 總分:3.000000
七、撰寫課程設計報告或課程設計總結
課程設計報告要求:
總結報告包括需求分析、總體設計、詳細設計、編碼(詳細寫出編程步驟)、測試的步驟和內容、課程設計總結、參考資料等,不符合以上要求者,則本次設計以不及格記。

C語言常見錯誤
書寫標識符時,忽略了大小寫字母的區別
main()
{
int a=5;
printf("%d",A);
}
編譯程序把a和A認為是兩個不同的變數名,而顯示出錯信息。C認為大寫字母和小寫字母是兩個不同的字元。習慣上,符號常量名用大寫,變數名用小寫表示,以增加可讀性。
2.忽略了變數的類型,進行了不合法的運算。
main()
{
float a,b;
printf("%d",a%b);
}
%是求余運算,得到a/b的整余數。整型變數a和b可以進行求余運算,而實型變數則不允許進行「求余」運算。
3.將字元常量與字元串常量混淆。
char c;
c="a";
在這里就混淆了字元常量與字元串常量,字元常量是由一對單引號括起來的單個字元,字元串常量是一對雙引號括起來的字元序列。C規定以「\」作字元串結束標志,它是由系統自動加上的,所以字元串「a」實際上包含兩個字元:『a'和『\',而把它賦給一個字元變數是不行的。
4.忽略了「=」與「==」的區別。
在許多高級語言中,用「=」符號作為關系運算符「等於」。如在BASIC程序中可以寫
if (a=3) then …
但C語言中,「=」是賦值運算符,「==」是關系運算符。如:
if (a==3) a=b;
前者是進行比較,a是否和3相等,後者表示如果a和3相等,把b值賦給a。由於習慣問題,初學者往往會犯這樣的錯誤。
5.忘記加分號。
分號是C語句中不可缺少的一部分,語句末尾必須有分號。
a=1
b=2
編譯時,編譯程序在「a=1」後面沒發現分號,就把下一行「b=2」也作為上一行語句的一部分,這就會出現語法錯誤。改錯時,有時在被指出有錯的一行中未發現錯誤,就需要看一下上一行是否漏掉了分號。
{ z=x+y;
t=z/100;
printf("%f",t);
}
對於復合語句來說,最後一個語句中最後的分號不能忽略不寫(這是和PASCAL不同的)。
6.多加分號。
對於一個復合語句,如:
{ z=x+y;
t=z/100;
printf("%f",t);
};
復合語句的花括弧後不應再加分號,否則將會畫蛇添足。
又如:
if (a%3==0);
I++;
本是如果3整除a,則I加1。但由於if (a%3==0)後多加了分號,則if語句到此結束,程序將執行I++語句,不論3是否整除a,I都將自動加1。
再如:
for (I=0;I<5;I++);
{scanf("%d",&x);
printf("%d",x);}
本意是先後輸入5個數,每輸入一個數後再將它輸出。由於for()後多加了一個分號,使循環體變為空語句,此時只能輸入一個數並輸出它。
7.輸入變數時忘記加地址運算符「&」。
int a,b;
scanf("%d%d",a,b);
這是不合法的。Scanf函數的作用是:按照a、b在內存的地址將a、b的值存進去。「&a」指a在內存中的地址。
8.輸入數據的方式與要求不符。①scanf("%d%d",&a,&b);
輸入時,不能用逗號作兩個數據間的分隔符,如下面輸入不合法:
3,4
輸入數據時,在兩個數據之間以一個或多個空格間隔,也可用回車鍵,跳格鍵tab。
②scanf("%d,%d",&a,&b);
C規定:如果在「格式控制」字元串中除了格式說明以外還有其它字元,則在輸入數據時應輸入與這些字元相同的字元。下面輸入是合法的:
3,4
此時不用逗號而用空格或其它字元是不對的。
3 4 3:4
又如:
scanf("a=%d,b=%d",&a,&b);
輸入應如以下形式:
a=3,b=4
9.輸入字元的格式與要求不一致。
在用「%c」格式輸入字元時,「空格字元」和「轉義字元」都作為有效字元輸入。
scanf("%c%c%c",&c1,&c2,&c3);
如輸入a b c
字元「a」送給c1,字元「 」送給c2,字元「b」送給c3,因為%c只要求讀入一個字元,後面不需要用空格作為兩個字元的間隔。
10.輸入輸出的數據類型與所用格式說明符不一致。
例如,a已定義為整型,b定義為實型
a=3;b=4.5;
printf("%f%d\n",a,b);
編譯時不給出出錯信息,但運行結果將與原意不符。這種錯誤尤其需要注意。
11.輸入數據時,企圖規定精度。
scanf("%7.2f",&a);
這樣做是不合法的,輸入數據時不能規定精度。
12.switch語句中漏寫break語句。
例如:根據考試成績的等級列印出百分制數段。
switch(grade)
{ case 'A':printf("85~100\n");
case 'B':printf("70~84\n");
case 'C':printf("60~69\n");
case 'D':printf("<60\n");
default:printf("error\n");
由於漏寫了break語句,case只起標號的作用,而不起判斷作用。因此,當grade值為A時,printf函數在執行完第一個語句後接著執行第二、三、四、五個printf函數語句。正確寫法應在每個分支後再加上「break;」。例如
case 'A':printf("85~100\n");break;
13.忽視了while和do-while語句在細節上的區別。
(1)main()
{int a=0,I;
scanf("%d",&I);
while(I<=10)
{a=a+I;
I++;
}
printf("%d",a);
}
(2)main()
{int a=0,I;
scanf("%d",&I);
do
{a=a+I;
I++;
}while(I<=10);
printf("%d",a);
}
可以看到,當輸入I的值小於或等於10時,二者得到的結果相同。而當I>10時,二者結果就不同了。因為while循環是先判斷後執行,而do-while循環是先執行後判斷。對於大於10的數while循環一次也不執行循環體,而do-while語句則要執行一次循環體。
14.定義數組時誤用變數。
int n;
scanf("%d",&n);
int a[n];
數組名後用方括弧括起來的是常量表達式,可以包括常量和符號常量。即C不允許對數組的大小作動態定義。
15.在定義數組時,將定義的「元素個數」誤認為是可使的最大下標值。
main()
{static int a[10]={1,2,3,4,5,6,7,8,9,10};
printf("%d",a[10]);
}
C語言規定:定義時用a[10],表示a數組有10個元素。其下標值由0開始,所以數組元素a[10]是不存在的。
16.初始化數組時,未使用靜態存儲
int a[3]={0,1,2};
這樣初始化數組是不對的。C語言規定只有靜態存儲(static)數組和外部存儲(exterm)數組才能初始化。應改為:
static int a[3]={0,1,2};
17.在不應加地址運算符&的位置加了地址運算符。
scanf("%s",&str);
C語言編譯系統對數組名的處理是:數組名代表該數組的起始地址,且scanf函數中的輸入項是字元數組名,不必要再加地址符&。應改為:
scanf("%s",str);
18.同時定義了形參和函數中的局部變數。
int max(x,y)
int x,y,z;
{z=x>y?x:y;
return(z);
}
形參應該在函數體外定義,而局部變數應該在函數體內定義。應改為:
int max(x,y)
int x,y;
{int z;
z=x>y?x:y;
return(z);
}

④ c語言的學生成績管理系統

#include<iostream>
#include<iomanip>
#include<fstream>
#include<string>

using namespace std;

#define max 100;

class student
{
public:
student *next;
public:
string name;//姓名
long num;//學號
int x,y,z;//數學,語文,英語
int AA;//總分
void play(){cout<<name<<"學生的學號是"<<num<<",數學:"<<x<<",語文:"<<y<<",英語:"<<z<<",總分:"<<AA<<endl;};
student(string sname,long snum,int sx,int sy,int sz)
{
name=sname;
num=snum;
x=sx;
y=sy;
z=sz;
}
};

class cla
{
public:
cla()//構造函數
{
stu=0;
sload();
}
~cla()//析構函數
{
student *p;
p=stu;
while(p)
{
p=p->next;
delete stu;
stu=p;
}
stu=0;
}
void sadd(); //添加
void sremove(); //刪除
void samend(); //修改
void ssearch(); //查詢
void staxis(); //排序
void ssave(); //保存
void sload(); //讀取

//排序函數
void pxh();
void psx();
void pyw();
void pyy();
void pAA();
private:
student *stu; //頭接點
};

void cla::sadd()//添加
{
student *q;
string name1;
long num1;
int x1,y1,z1;

system("cls");
cout<<"\n **增加的學生** \n"<<endl;
cout<<"請輸入學生的(中間用空格間隔) "<<endl;
cout<<"姓名 學號 數學成績 語文成績 英語成績:"<<endl;
cin>>name1>>num1>>x1>>y1>>z1;

q=new student(name1,num1,x1,y1,z1);
q->next=0;
q->AA=x1+y1+z1;

if(stu)
{
student *t;
t=stu;
if(t->num==num1)
{
cout<<"學號已存在,請重新輸入"<<endl;
return;
}
while(t->next)
{
if(t->num==num1)
{
cout<<"學號已存在,請重新輸入"<<endl;
return;
}
t=t->next;
}
t->next=q;
}
else
{
stu=q;
}
cout<<"輸入完畢"<<endl;
}

void cla::sremove()//刪除
{
system("cls");
int num1;
cout<<"\n** 刪除學生信息 **\n";
cout<<"請輸入想要刪除學生的學號:";
cin>>num1;

//查找要刪除的結點
student *p1,*p2;
p1=stu;
while(p1)
{
if(p1->num==num1)
break;
else
{
p2=p1;
p1=p1->next;
}
}

//刪除結點
if(p1!=NULL)//若找到結點,則刪除
{
p1->play();
cout<<"確定刪除嗎?[Y/N]"<<endl;
char c;cin>>c;
if(toupper(c)!='Y') return;

if(p1==stu) //若要刪除的結點是第一個結點
{
stu=p1->next;
delete p1;
}
else //若要刪除的結點是後續結點
{
p2->next=p1->next;
delete p1;
}
cout<<"找到學號為"<<num1<<"的學生,並刪除\n";
}
else //未找到結點
cout<<"未找到想要刪除的學生!\n";
}

void cla::samend()//修改
{
system("cls");
long num1;
cout<<"\n** 修改學生信息 **\n";
cout<<"輸入要修改學生的學號";
cin>>num1;

//查找要修改的結點
student *p1,*p2;
p1=stu;
while(p1)
{
if(p1->num==num1)
break;
else
{
p2=p1;
p1=p1->next;
}
}
if(p1!=NULL)
{
cout<<"學號是"<<num1<<"的學生的信息"<<endl;
cout<<"姓名 "<<p1->name<<"數學"<<p1->x<<"語文"<<p1->y<<"英語"<<p1->z<<endl;
cout<<"請輸入修改後的信息:姓名 數學成績 語文成績 英語成績"<<endl;
cin>>p1->name>>p1->x>>p1->y>>p1->z;
p1->AA=p1->x+p1->y+p1->z;
cout<<"修改成功"<<endl;
}
else //未找到接點
cout<<"未找到!\n";
}

void cla::ssearch()//查詢
{
system("cls");
cout<<"\n** 查詢學生信息 **\n"<<endl;
cout<<"請輸入查詢方式:"<<endl;
cout<<"1.按學號查詢"<<endl;
cout<<"2.按姓名查詢"<<endl;
cout<<"3.返回"<<endl;
char c; cin>>c;
switch (c)
{
case '1':
{
long num1;
cout<<"要查詢的學號"<<endl;
cin>>num1;
//查找要查詢的結點
student *p1,*p2;
p1=stu;
while(p1)
{
if(p1->num==num1)
break;
else
{
p2=p1;
p1=p1->next;
}
}

if(p1!=NULL)
{
cout<<"學號是"<<num1<<"的學生的信息"<<endl;
cout<<"姓名:"<<p1->name<<" 數學:"<<p1->x<<" 語文:"<<p1->y<<" 英語:"<<p1->z<<endl;
cout<<"查詢完畢...";
}
else //未找到接點
cout<<"未找到!\n";
break;
}
case '2':
{
string name1;
cout<<"要查詢的學生姓名"<<endl;
cin>>name1;
//查找要查詢的結點
student *p1,*p2;
p1=stu;
while(p1)
{
if(p1->name==name1)
break;
else
{
p2=p1;
p1=p1->next;
}
}

if(p1!=NULL)
{
cout<<name1<<"的學生的信息"<<endl;
cout<<"學號:"<<p1->num<<" 數學:"<<p1->x<<" 語文:"<<p1->y<<" 英語:"<<p1->z<<endl;
cout<<"查詢完畢...";
}
else //未找到接點
cout<<"未找到!\n";
break;
}
case '3': return;
}

}

void cla::pxh() //按學號排序
{
student *p1,*p2;
int n;
p1=stu;
n=1;
while(p1->next)
{ n++; p1=p1->next; }
cout<<"共有"<<n<<"條信息..."<<endl;
int i;
p1=stu;
for(i=1;i<n;i++)
{
p1=stu;
if (p1->num>p1->next->num) // 如果頭結點大於第二個的
{
p2=p1->next;
p1->next=p1->next->next;
p2->next=p1; //頭結點交換
stu=p2;
}
p1=stu;
while(p1->next->next) //中間的交換
{
p2=p1;
p1=p1->next;
if(p1->num>p1->next->num)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next; //交換
}
}
}

p1=stu;
do
{
p1->play();
p1=p1->next;
}while(p1);
}

void cla::psx()//按數學成績排序
{
student *p1,*p2;
int n;
p1=stu;
n=1;
while(p1->next)
{ n++; p1=p1->next; }
cout<<"共有"<<n<<"條信息..."<<endl;
int i;
p1=stu;
for(i=1;i<n;i++)
{ p1=stu;
if (p1->x>p1->next->x) // 如果頭結點大於第二個的
{ p2=p1->next;
p1->next=p1->next->next;
p2->next=p1; //頭結點交換
stu=p2;
}
p1=stu;
while(p1->next->next) //中間的交換
{ p2=p1;
p1=p1->next;
if(p1->x>p1->next->x)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next; //交換
}
}
}
p1=stu;
do
{ p1->play();
p1=p1->next;
}while(p1);
}

void cla::pyw()//按語文成績排序
{
student *p1,*p2;
int n;
p1=stu;
n=1;
while(p1->next)
{ n++; p1=p1->next; }
cout<<"共有"<<n<<"條信息..."<<endl;
int i;
p1=stu;
for(i=1;i<n;i++)
{ p1=stu;
if (p1->y>p1->next->y) // 如果頭結點大於第二個的
{ p2=p1->next;
p1->next=p1->next->next;
p2->next=p1; //頭結點交換
stu=p2;
}
p1=stu;
while(p1->next->next) //中間的交換
{ p2=p1;
p1=p1->next;
if(p1->y>p1->next->y)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next; //交換
}
}
}
p1=stu;
do
{ p1->play();
p1=p1->next;
}while(p1);
}

void cla::pyy()//按英語成績排序
{
student *p1,*p2;
int n;
p1=stu;
n=1;
while(p1->next)
{ n++; p1=p1->next; }
cout<<"共有"<<n<<"條信息..."<<endl;
int i;
p1=stu;
for(i=1;i<n;i++)
{ p1=stu;
if (p1->z>p1->next->z) // 如果頭結點大於第二個的
{ p2=p1->next;
p1->next=p1->next->next;
p2->next=p1; //頭結點交換
stu=p2;
}
p1=stu;
while(p1->next->next) //中間的交換
{ p2=p1;
p1=p1->next;
if(p1->z>p1->next->z)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next; //交換
}
}
}
p1=stu;
do
{ p1->play();
p1=p1->next;
}while(p1);
}

void cla::pAA()//按總分排序
{
student *p1,*p2;
int n;
p1=stu;
n=1;
while(p1->next)
{ n++; p1=p1->next; }
cout<<"共有"<<n<<"條信息..."<<endl;
int i;
p1=stu;
for(i=1;i<n;i++)
{ p1=stu;
if (p1->AA>p1->next->AA) // 如果頭結點大於第二個的
{ p2=p1->next;
p1->next=p1->next->next;
p2->next=p1; //頭結點交換
stu=p2;
}
p1=stu;
while(p1->next->next) //中間的交換
{ p2=p1;
p1=p1->next;
if(p1->AA>p1->next->AA)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next; //交換
}
}
}
p1=stu;
do
{ p1->play();
p1=p1->next;
}while(p1);
}

void cla::staxis()//排序
{

system("cls");
char c;
cout<<"請選擇以何種方式排序:"<<endl;
cout<<"1……以學號排序"<<endl;
cout<<"2……以數學成績排序"<<endl;
cout<<"3……以語文成績排序"<<endl;
cout<<"4……以英語成績排序"<<endl;
cout<<"5……以總分排序"<<endl;
cout<<"6……返回"<<endl;
cout<<"請選擇(1-6)"<<endl;
cin>>c;

switch (c)
{
case '1':pxh(); break;
case '2':psx(); break;
case '3':pyw(); break;
case '4':pyy(); break;
case '5':pAA(); break;
case '6':return;
}

}

void cla::ssave() //保存到文件
{
system("cls");
char c;
cout<<"\n保存學生信息(將覆蓋原文件),是否繼續?[Y/N]:"; cin>>c;
if(toupper(c)!='Y') return;

ofstream tfile("date.txt",ios_base::binary);
student *p=stu;
while(p)// 寫入文件
{
tfile<<p->name<<"\t"<<p->num<<"\t"<<p->x<<"\t"<<p->y<<"\t"<<p->z;
tfile<<endl;
p=p->next;
}
tfile.close();
cout<<"保存完畢..."<<endl;
}

void cla::sload() //讀取
{
student *p;
p=stu;
while(p)
{
stu=p->next;
delete p;
p=stu;
}

ifstream tfile("date.txt",ios_base::binary);

string name1;
long num1;
int x1,y1,z1;

tfile>>name1>>num1>>x1>>y1>>z1;
while(tfile.good())
{
//創建學生接點
student *s;
s=stu;
s=new student(name1,num1,x1,y1,z1);
s->next=0;
s->AA=x1+y1+z1;
if(stu) //若已經存在結點
{
student *p2;
p2=stu;
while(p2->next) //查找尾結點
{
p2=p2->next;
}
p2->next=s; //連接
}
else //若不存在結點(表空)
{
stu=s; //連接
}
tfile>>name1>>num1>>x1>>y1>>z1;
}
tfile.close();
cout<<"\n學生信息已經裝入...\n";

}

int main()
{
char c;
cla a;
do
{
cout<<"\n 學 生 成 績 管 理 系 統 \n";
cout<<"**************************************\n";
cout<<" 作者:軟體工程06110119:zgjxwl \n";
cout<<" 1……增加學生 \n";
cout<<" 2……刪除學生 \n";
cout<<" 3……修改學生 \n";
cout<<" 4……查詢學生信息 \n";
cout<<" 5……排序 \n";
cout<<" 6……保存信息 \n";
cout<<" 7……讀取信息 \n";
cout<<" 8……退出 \n";
cout<<"**************************************\n";
cout<<"請選擇(1-8):";
cin>>c;
switch(c)
{
case '1': a.sadd();break;
case '2': a.sremove();break;
case '3': a.samend();break;
case '4': a.ssearch();break;
case '5': a.staxis();break;
case '6': a.ssave();break;
case '7': a.sload();break;
}

}while(c!='8');
}

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

#include <stdio.h>

#define MAX 40

typedef struct{
char name[15];
int num;
int C;
int E;
int M;
int sum;
}student_t;

typedef struct{
int n;
student_t stu[MAX];
}class_t;

enum{
ADD_STUDENT = 1,
SHOW_STUDENT = 2,
DELETE_STUDENT = 3,
SORT_STUDENT = 4,
FIND_STUDENT = 5,
QUIT
};

void input_student(student_t *pstu)
{
int ret;

again_input:
printf("學號\t姓名\tC語言\t英語\t數學\t\n");
ret = scanf("%d %s %d %d %d",&pstu->num,pstu->name,&pstu->C,&pstu->E,&pstu->M);
if(ret < 5){
printf("Input error,must input string,int,int\n");
while ( getchar() != '\n')
;
goto again_input;
}
pstu->sum=(pstu->C+pstu->E+pstu->M);
printf("input end!\n");

return;
}

int add_student(class_t *pclass,student_t *pstu)
{
if(pclass->n >= MAX){
printf("The class is full!\n");
return -1;
}

pclass->stu[pclass->n ++] = *pstu;

return 0;
}

void show(student_t *pstu)
{
printf("%d %s %d %d %d %d\n",pstu->num,pstu->name,pstu->C,pstu->E,pstu->M,pstu->sum);
return;
}

void show_student(class_t *pclass)
{
int i;

printf("學號\t姓名\tC語言\t英語\t數學\t總分\t\n");
for(i = 0;i < pclass->n;i ++){
show(&pclass->stu[i]);
}

return;
}

int delete_student(class_t *pclass,char *stu_name)
{
int i,j;

for(i = 0, j = 0;i < pclass->n;i ++){
if(strcmp(pclass->stu[i].name,stu_name) != 0){
pclass->stu[j++] = pclass->stu[i];
}
}

if(i == j){
printf("The delete student:%s is not exist!\n",stu_name);
return 0;
}else{
pclass->n = j;
return i - j;
}
}

void sort_student(class_t *pclass)
{
int i,j;
int flag;
student_t student;

for(i = 0;i < pclass->n - 1;i ++){
for(j = 0,flag = 0;j < pclass->n - 1 - i;j ++){
if(pclass->stu[j].sum > pclass->stu[j + 1].sum){
student = pclass->stu[j];
pclass->stu[j] = pclass->stu[j+1];
pclass->stu[j+1] = student;
flag = 1;
}
}

if(!flag){
break;
}
}

return;
}

int find_student(class_t *pclass,char *stu_name)
{
int i;
int count = 0;

for(i = 0;i < pclass->n;i ++){
if(strcmp(pclass->stu[i].name,stu_name) == 0){
show(&pclass->stu[i]);
count ++;
}
}

return count;
}

int main(int argc, const char *argv[])
{
int n;
int choice;
char name[15];
class_t class = {0};
student_t student;

while(1)
{
puts("------------------------------------------");
puts("1.添加 2.查詢 3.刪除 4.排序 5.查找 6.退出");
puts("------------------------------------------");

printf("choice > ");
scanf("%d",&choice);

switch(choice){
case ADD_STUDENT:
input_student(&student);
add_student(&class,&student);
break;

case SHOW_STUDENT:
show_student(&class);
break;
case DELETE_STUDENT:
printf("Input delete student name : ");
scanf("%s",name);
n = delete_student(&class,name);
if(n > 0){
printf("Delete %d students!\n",n);
}
break;

case SORT_STUDENT:
sort_student(&class);
show_student(&class);
break;

case FIND_STUDENT:
printf("Input find student name : ");
scanf("%s",name);
n = find_student(&class,name);
printf("Find %d students!\n",n);
break;

case QUIT:
printf("quit student system!\n");
goto quit;
}
}
quit:
return 0;
}

⑥ C語言(學生成績管理系統)

#include "stdio.h"
#include "string.h"
long yz(int a,int b,int c)
{
int o;
o=a+b+c;
return o; }

long sb(int o)
{long v;
v=o/3;
return v; }

void menu(){
printf("1:輸入成績。計算總分\n");
printf("2:平均分排序\n");
printf("3:學號排序\n");
printf("4:查詢成績\n");
printf("5:退出");
printf("_____________________\n");
}
void main()
{
long m[3];
long v;
char n[3][30];
int i,a[3],b[3],c[3],o,x,y,j[3],p[3],e,r,t,u,w;
menu();
scanf("%d",&t);
while(i!=5)
{
menu();
switch(t){
case 1: {for(i=0;i<3;i++)
{printf("請輸入學號、名字、成績:數學,語文,英語:");
printf("\n");
scanf("%d%d%d%d%d",&m[i],n[i],&a[i],&b[i],&c[i]);
o=yz(a[i],b[i],c[i]);
v=sb(o);
printf("總分=%d",o);
printf("\n");
printf("平均分=%d",v);
o=j[i];
v=p[i];}
menu();
scanf("%d",&t);}
case 2:
{for(i=0;i<3;i++)
for(x=i+1;x<3;x++)
if(p[i]<p[x])
{y=p[i];
p[i]=p[x];
p[x]=y;
menu();
scanf("%d",&t);
}
for(i=0;i<3;i++)
printf("%d ",p[i]);
printf("\n"); }
case 3:
{ printf("學號、總成績、平均分");
for(i=0;i<3;i++)
{printf("%d%d%d",m[i],j[i],p[i]);}
printf("\n");
menu();
scanf("%d",&t);}
case 4:
{ printf("請輸入要查詢的學生學號");
scanf("%d",&e);
if(e>=0&&e<3)
printf("%d%d%d%d%d%d%d",m[e],n[e],a[e],b[e],c[e],j[e],p[e]);
else printf("查無此人");
menu();
scanf("%d",&t);}
}
}
getch();
}

⑦ C語言編寫成績管理系統

程序:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int man=0;
int j;
char str[20];
struct student
{
char id[11];
char name[10];
int n1;
int n2;
int n3;
int n4;
int n5;
int n6;
int n7;
int n8;
int n9;
int zong;
int ping;
}student[100],temp;
void read(void)
{
FILE *cj;
int i,k;
man=0;
while(1)
{
printf("請輸入要讀取的文件:\n");
scanf("%s",&str);
if((cj=fopen(str,"r"))==NULL)
{
printf("打開失敗\n");
}
else
{
break;
}
}
for(i=0;i<500;i++)
{
if(fscanf(cj,"%s %s %d %d %d %d %d %d %d %d %d",&student[i].id,&student[i].name,&student[i].n1,&student[i].n2,&student[i].n3,&student[i].n4,&student[i].n5,&student[i].n6,&student[i].n7,&student[i].n8,&student[i].n9)==-1)
{
break;
}
man=man+1;
}
printf("從%s讀取去了「%d」條記錄\n",str,man);
for(k=0;k<man;k++)
{
student[k].zong=student[k].n1+student[k].n2+student[k].n3+student[k].n4+student[k].n5+student[k].n6+student[k].n7+student[k].n8+student[k].n9;
}
for(i=0;i<man;i++)
{
student[i].ping=student[i].zong/9;
}
fclose(cj);
}
void write(void)
{
FILE *cj;
int i;
char me;
printf("請確認是否保存(是:y,否:任意鍵):\n");
scanf("%s",&me);
if(me=='y')
{
if((cj=fopen(str,"w"))==NULL)
{
printf("保存失敗\n");
}
for(i=0;i<man;i++)
{
fprintf(cj,"%s %s %d %d %d %d %d %d %d %d %d\n",student[i].id,student[i].name,student[i].n1,student[i].n2,student[i].n3,student[i].n4,student[i].n5,student[i].n6,student[i].n7,student[i].n8,student[i].n9);
}
printf("存了「%d」條記錄到%s\n",man,str);
fclose(cj);
}
else
return;
}
void save(void)
{
FILE *cj;
int i;
char me;
printf("請輸入新的文件名:\n");
scanf("%s",&str);
printf("請確認是否保存(是:y,否:任意鍵):\n");
scanf("%s",&me);
if(me=='y')
{
if((cj=fopen(str,"w"))==NULL)
{
printf("保存失敗\n");
}
for(i=0;i<man;i++)
{
fprintf(cj,"%s %s %d %d %d %d %d %d %d %d %d\n",student[i].id,student[i].name,student[i].n1,student[i].n2,student[i].n3,student[i].n4,student[i].n5,student[i].n6,student[i].n7,student[i].n8,student[i].n9);
}
printf("存了「%d」條記錄到%s\n",man,str);
fclose(cj);
}
else
return;
}
void print(void)
{
int i;
for(i=0;i<72;i++)
printf("*");
printf("\n");
printf(" | 學號 姓名 1 2 3 4 5 6 7 8 9 平均分 總分 | \n");
for(i=0;i<man;i++)
{
printf(" | %10s %-6s %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d | \n",student[i].id,student[i].name,student[i].n1,student[i].n2,student[i].n3,student[i].n4,student[i].n5,student[i].n6,student[i].n7,student[i].n8,student[i].n9,student[i].ping,student[i].zong);
}
for(i=0;i<72;i++)
printf("*");
printf("\n");
}
void inquiry(void)
{
int i;
char id[10];
while(1)
{
printf("請輸入要查人的學號或名字(輸入-1即返回上一級):\n");
scanf("%s",&id);
if(id[0]=='-'&&id[1]=='1')
{
printf("exit\n");
break;
}
else
{
for(i=0;i<man;i++)
{
if(strcmp(student[i].id,id)==0)
{
j=i;
break;
}
if(strcmp(student[i].name,id)==0)
{
j=i;
break;
}

j=-1;

}
if(j==-1)
{
printf("無此人\n");
}
else
{
printf(" | 學號 姓名 1 2 3 4 5 6 7 8 9 總分 平均分 | \n");
printf(" | %10s %-6s %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d | \n",student[j].id,student[j].name,student[j].n1,student[j].n2,student[j].n3,student[j].n4,student[j].n5,student[j].n6,student[j].n7,student[j].n8,student[j].n9,student[i].ping,student[i].zong);
}
}
}
}
void fail(void)
{
int i;
printf("有不及格成績的學生為:\n");
for(i=0;i<man;i++)
{
if(student[i].n1<60||student[i].n2<60||student[i].n3<60||student[i].n4<60||student[i].n5<60||student[i].n6<60||student[i].n7<60||student[i].n8<60||student[i].n9<60)
{
printf(" | %10s %-6s %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d | \n",student[i].id,student[i].name,student[i].n1,student[i].n2,student[i].n3,student[i].n4,student[i].n5,student[i].n6,student[i].n7,student[i].n8,student[i].n9,student[i].ping,student[i].zong);
}
}
}
void compositor(void)
{
int i,k;
char m;
printf("請選擇干什麼排序:\n");
printf("1.成績1\n");
printf("2.成績2\n");
printf("3.成績3\n");
printf("4.成績4\n");
printf("5.成績5\n");
printf("6.成績6\n");
printf("7.成績7\n");
printf("8.成績8\n");
printf("9.成績9\n");
printf("0.總成績或平均成績\n");
scanf("%s",&m);
if(m=='0')
{
for(k=man;k>0;k--)
{
for(i=0;i<k;i++)
{
if(student[i].zong<student[i+1].zong)
{
temp=student[i];
student[i]=student[i+1];
student[i+1]=temp;
}
}
}
}
else if(m=='1')
{
for(k=man;k>0;k--)
{
for(i=0;i<k;i++)
{
if(student[i].n1<student[i+1].n1)
{
temp=student[i];
student[i]=student[i+1];
student[i+1]=temp;
}
}
}
}
else if(m=='2')
{
for(k=man;k>0;k--)
{
for(i=0;i<k;i++)
{
if(student[i].n2<student[i+1].n2)
{
temp=student[i];
student[i]=student[i+1];
student[i+1]=temp;
}
}
}
}
else if(m=='3')
{
for(k=man;k>0;k--)
{
for(i=0;i<k;i++)
{
if(student[i].n3<student[i+1].n3)
{
temp=student[i];
student[i]=student[i+1];
student[i+1]=temp;
}
}
}
}
else if(m=='4')
{
for(k=man;k>0;k--)
{
for(i=0;i<k;i++)
{
if(student[i].n4<student[i+1].n4)
{
temp=student[i];
student[i]=student[i+1];
student[i+1]=temp;
}
}
}
}
else if(m=='5')
{
for(k=man;k>0;k--)
{
for(i=0;i<k;i++)
{
if(student[i].n5<student[i+1].n5)
{
temp=student[i];
student[i]=student[i+1];
student[i+1]=temp;
}
}
}
}
else if(m=='6')
{
for(k=man;k>0;k--)
{
for(i=0;i<k;i++)
{
if(student[i].n6<student[i+1].n6)
{
temp=student[i];
student[i]=student[i+1];
student[i+1]=temp;
}
}
}
}
else if(m=='7')
{
for(k=man;k>0;k--)
{
for(i=0;i<k;i++)
{
if(student[i].n7<student[i+1].n7)
{
temp=student[i];
student[i]=student[i+1];
student[i+1]=temp;
}
}
}
}
else if(m=='8')
{
for(k=man;k>0;k--)
{
for(i=0;i<k;i++)
{
if(student[i].n8<student[i+1].n8)
{
temp=student[i];
student[i]=student[i+1];
student[i+1]=temp;
}
}
}
}
else if(m=='9')
{
for(k=man;k>0;k--)
{
for(i=0;i<k;i++)
{
if(student[i].n9<student[i+1].n9)
{
temp=student[i];
student[i]=student[i+1];
student[i+1]=temp;
}
}
}
}
else
printf("無此功能\n");
}
void raise(void)
{
printf("請輸入添加人的學號:\n");
scanf("%s",&student[man].id);
printf("請輸入添加人的姓名:\n");
scanf("%s",&student[man].name);
printf("請輸入添加人的成績1:\n");
scanf("%d",&student[man].n1);
printf("請輸入添加人的成績2:\n");
scanf("%d",&student[man].n2);
printf("請輸入添加人的成績3:\n");
scanf("%d",&student[man].n3);
printf("請輸入添加人的成績4:\n");
scanf("%d",&student[man].n4);
printf("請輸入添加人的成績5:\n");
scanf("%d",&student[man].n5);
printf("請輸入添加人的成績6:\n");
scanf("%d",&student[man].n6);
printf("請輸入添加人的成績7:\n");
scanf("%d",&student[man].n7);
printf("請輸入添加人的成績8:\n");
scanf("%d",&student[man].n8);
printf("請輸入添加人的成績9:\n");
scanf("%d",&student[man].n9);
student[man].zong=student[man].n1+student[man].n2+student[man].n3+student[man].n4+student[man].n5+student[man].n6+student[man].n7+student[man].n8+student[man].n9;
student[man].ping=student[man].zong/9;
man=man+1;
}
void alter(void)
{
int i;
char id[10];
printf("請輸入要修改人的學號:\n");
scanf("%s",&id);
for(i=0;i<man;i++)
{
if(strcmp(student[i].id,id)==0)
{
j=i;
break;
}

j=-1;

}
if(j==-1)
{
printf("無此人\n");
}
else
{
printf("請輸入要修改為的學號:\n");
scanf("%s",&student[j].id);
printf("請輸入要修改為的姓名:\n");
scanf("%s",&student[j].name);
printf("請輸入要修改為的成績1:\n");
scanf("%d",&student[j].n1);
printf("請輸入要修改為的成績2:\n");
scanf("%d",&student[j].n2);
printf("請輸入要修改為的成績3:\n");
scanf("%d",&student[j].n3);
printf("請輸入要修改為的成績4:\n");
scanf("%d",&student[j].n4);
printf("請輸入要修改為的成績5:\n");
scanf("%d",&student[j].n5);
printf("請輸入要修改為的成績6:\n");
scanf("%d",&student[j].n6);
printf("請輸入要修改為的成績7:\n");
scanf("%d",&student[j].n7);
printf("請輸入要修改為的成績8:\n");
scanf("%d",&student[j].n8);
printf("請輸入要修改為的成績9:\n");
scanf("%d",&student[j].n9);
student[j].zong=student[j].n1+student[j].n2+student[j].n3+student[j].n4+student[j].n5+student[j].n6+student[j].n7+student[j].n8+student[j].n9;
student[j].ping=student[j].zong/9;
}
}
void deletes()
{
int i,k;
char id[10];
printf("請輸入要刪除人的學號:\n");
scanf("%s",&id);
for(i=0;i<man;i++)
{
if(strcmp(student[i].id,id)==0)
{
j=i;
break;
}

j=-1;

}
if(j==-1)
{
printf("無此人\n");
}
else
{
for(k=j;k<man;k++)
{
student[j]=student[j+1];
j=j+1;
}
man=man-1;
}
}
void menu(void)
{
int i;
printf("\n");
for(i=0;i<10;i++)
printf(" ");
for(i=0;i<60;i++)
printf("*");
for(i=0;i<9;i++)
printf(" ");
printf("\n");
for(i=0;i<10;i++)
printf(" ");
printf("# 1.顯示學生成績信息 6.查詢不及格學生信息 #\n");
for(i=0;i<10;i++)
printf(" ");
printf("# 2.按成績由高到低排序 7.修改學生成績信息 #\n");
for(i=0;i<10;i++)
printf(" ");
printf("# 3.添加學生成績信息 8.讀取文件 #\n");
for(i=0;i<10;i++)
printf(" ");
printf("# 4.刪除學生成績信息 9.保存文件 #\n");
for(i=0;i<10;i++)
printf(" ");
printf("# 5.查詢學生成績信息 -. 另存為 #\n");
for(i=0;i<10;i++)
printf(" ");
printf("# +.退出 #\n");
for(i=0;i<10;i++)
printf(" ");
for(i=0;i<60;i++)
printf("*");
for(i=0;i<9;i++)
printf(" ");
printf("\n");
}
int main(void)
{
char i;
read();
menu();
while(1)
{
printf("請輸入要選擇的需要功能的序列號(輸入0顯示菜單):\n");
scanf("%s",&i);
if(i=='1')
{
print();
}
else if(i=='2')
{
compositor();
print();
}
else if(i=='3')
{
raise();
print();
}
else if(i=='4')
{
deletes();
print();
}
else if(i=='5')
{
inquiry();
}
else if(i=='6')
{
fail();
}
else if(i=='7')
{
alter();
print();
}
else if(i=='8')
{
read();
}
else if(i=='9')
{
write();
}
else if(i=='0')
{
menu();
}
else if(i=='+')
{
break;
}
else if(i=='-')
{
save();
}
else
{
printf("無此功能,請重新輸入序列號\n");
}
}
return 0;
}
記事本文件:你可以隨意起名,但要放在和程序同目錄
0615438101 顧佳 44 67 72 60 66 65 93 82 67
0615438103 金一宇 60 77 75 75 78 77 97 74 76
0615438104 李陽濤 50 76 66 73 74 80 92 89 74
0615438105 馬凱 66 76 77 66 75 72 95 82 75
0615438106 史超 47 71 65 61 85 72 89 83 70
0615438108 徐磊 60 75 66 80 76 80 92 68 74
0615438109 楊浩 60 81 70 91 83 72 93 72 78
0615438110 於澤 61 75 78 70 87 73 84 92 77
0615438111 張昊 60 71 57 82 72 63 86 38 67
0615438112 張政 60 67 69 80 66 61 87 88 73
0615438114 周艨 61 69 71 38 74 77 76 89 67
0615438131 張楠 86 74 72 90 80 81 97 80 84
0615438132 王凡 29 68 48 35 46 76 88 62 54

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

[cpp]viewplainprint?
<spanstyle="font-size:16px;">#include"stdio.h"

#include"string"

/*定義學生結構體*/

structStudent

{

charID[20];

charName[20];

floatMark1;

floatMark2;

floatMark3;

floatAverage;

};


/*聲明學生數組及學生數量*/

structStudentstudents[1000];

intnum=0;/*求平均值*/

floatAvg(structStudentstu)

{

return(stu.Mark1+stu.Mark2+stu.Mark3)/3;

}/*通過學號返回數組下標*/

intStudent_SearchByIndex(charid[])

{

inti;

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

{

if(strcmp(students[i].ID,id)==0)

{

returni;

}

}

return-1;

}/*通過姓名返回數組下標*/

intStudent_SearchByName(charname[])

{

inti;

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

{

if(strcmp(students[i].Name,name)==0)

{

returni;

}

}

return-1;

}/*顯示單條學生記錄*/

voidStudent_DisplaySingle(intindex)

{

printf("%10s%10s%8s%8s%8s%10s ","學號","姓名","成績","成績","成績","平均成績");

printf("------------------------------------------------------------- ");

printf("%10s%10s%8.2f%8.2f%8.2f%10.2f ",students[index].ID,students[index].Name,

students[index].Mark1,students[index].Mark2,students[index].Mark3,students[index].Average);

}/*插入學生信息*/

voidStudent_Insert()

{

while(1)

{

printf("請輸入學號:");

scanf("%s",&students[num].ID);

getchar();printf("請輸入姓名:");

scanf("%s",&students[num].Name);

getchar();printf("請輸入成績:");

scanf("%f",&students[num].Mark1);

getchar();printf("請輸入成績:");

scanf("%f",&students[num].Mark2);

getchar();printf("請輸入成績:");

scanf("%f",&students[num].Mark3);

getchar();students[num].Average=Avg(students[num]);

num++;printf("是否繼續?(y/n)");

if(getchar()=='n')

{

break;

}

}}/*修改學生信息*/

voidStudent_Modify()

{

//floatmark1,mark2,mark3;

while(1)

{

charid[20];

intindex;

printf("請輸入要修改的學生的學號:");

scanf("%s",&id);

getchar();

index=Student_SearchByIndex(id);

if(index==-1)

{

printf("學生不存在! ");

}

else

{

printf("你要修改的學生信息為: ");

Student_DisplaySingle(index);

printf("--請輸入新值-- ");


printf("請輸入學號:");

scanf("%s",&students[index].ID);

getchar();


printf("請輸入姓名:");

scanf("%s",&students[index].Name);

getchar();


printf("請輸入成績:");

scanf("%f",&students[index].Mark1);

getchar();


printf("請輸入成績:");

scanf("%f",&students[index].Mark2);

getchar();


printf("請輸入成績:");

scanf("%f",&students[index].Mark3);

getchar();


students[index].Average=Avg(students[index]);

}

printf("是否繼續?(y/n)");

if(getchar()=='n')

{

break;

}

}

}/*刪除學生信息*/

voidStudent_Delete()

{

inti;

while(1)

{

charid[20];

intindex;

printf("請輸入要刪除的學生的學號:");

scanf("%s",&id);

getchar();

index=Student_SearchByIndex(id);

if(index==-1)

{

printf("學生不存在! ");

}

else

{

printf("你要刪除的學生信息為: ");

Student_DisplaySingle(index);

printf("是否真的要刪除?(y/n)");

if(getchar()=='y')

{

for(i=index;i<num-1;i++)

{

students[i]=students[i+1];//把後邊的對象都向前移動

}

num--;

}

getchar();

}

printf("是否繼續?(y/n)");

if(getchar()=='n')

{

break;

}

}

}/*按姓名查詢*/

voidStudent_Select()

{

while(1)

{

charname[20];

intindex;

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

scanf("%s",&name);

getchar();

index=Student_SearchByName(name);

if(index==-1)

{

printf("學生不存在! ");

}

else

{

printf("你要查詢的學生信息為: ");

Student_DisplaySingle(index);

}

printf("是否繼續?(y/n)");

if(getchar()=='n')

{

break;

}

}

}/*按平均值排序*/

voidStudent_SortByAverage()

{

inti,j;

structStudenttmp;

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

{

for(j=1;j<num-i;j++)

{

if(students[j-1].Average<students[j].Average)

{

tmp=students[j-1];

students[j-1]=students[j];

students[j]=tmp;

}

}

}

}/*顯示學生信息*/

voidStudent_Display()

{

inti;

printf("%10s%10s%8s%8s%8s%10s ","學號","姓名","成績","成績","成績","平均成績");

printf("------------------------------------------------------------- ");

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

{

printf("%10s%10s%8.2f%8.2f%8.2f%10.2f ",students[i].ID,students[i].Name,

students[i].Mark1,students[i].Mark2,students[i].Mark3,students[i].Average);

}

}/*將學生信息從文件讀出*/

voidIO_ReadInfo()

{

FILE*fp;

inti;

if((fp=fopen("Database.txt","rb"))==NULL)

{

printf("不能打開文件! ");

return;

}

if(fread(&num,sizeof(int),1,fp)!=1)

{

num=-1;

}

else

{

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

{

fread(&students[i],sizeof(structStudent),1,fp);

}

}

fclose(fp);

}/*將學生信息寫入文件*/

voidIO_WriteInfo()

{

FILE*fp;

inti;

if((fp=fopen("Database.txt","wb"))==NULL)

{

printf("不能打開文件! ");

return;

}

if(fwrite(&num,sizeof(int),1,fp)!=1)

{

printf("寫入文件錯誤! ");

}

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

{

if(fwrite(&students[i],sizeof(structStudent),1,fp)!=1)

{

printf("寫入文件錯誤! ");

}

}

fclose(fp);

}

/*主程序*/

voidmain()

{

intchoice;

IO_ReadInfo();

while(1)

{

/*主菜單*/

printf(" ------學生成績管理系統------ ");

printf("1.增加學生記錄 ");

printf("2.修改學生記錄 ");

printf("3.刪除學生記錄 ");

printf("4.按姓名查詢學生記錄 ");

printf("5.按平均成績排序 ");

printf("6.退出 ");

printf("請選擇(1-6):");

scanf("%d",&choice);

getchar();

switch(choice)

{

case1:

Student_Insert();

break;

case2:

Student_Modify();

break;

case3:

Student_Delete();

break;

case4:

Student_Select();

break;

case5:

Student_SortByAverage();

Student_Display();

break;

case6:

exit(0);

break;

}

IO_WriteInfo();

}

}
</span>

⑨ c語言成績管理系統

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#defineN10
structstudent
{
charnum[5];
charname[20];
intscore;
};
structstudentstu[N]={{"1","張三",90},{"2","李四",87},{"3","王五",76},{"4","趙六",67},{"5","劉七",56}};

intcount=5;

voidinsert(inti)//輸入學生具體信息的函數
{
printf("第%d個學生的姓名:",i+1);

scanf("%s",stu[i].name);

printf(" ");

printf("第%d個學生的分數:",i+1);

scanf("%d",&stu[i].score);

printf(" ");

count++;
sprintf(stu[i].num,"%d",count);
}

voidinput()//輸入數據的函數
{
system("color3e");
voidmenu();
voidinsert(inti);
inti,j,k,l,r;
printf("您想輸入幾個學生的信息?(1-%d)[]",N-5);
scanf("%d",&j);
r=5+j;
for(i=5;i<r;i++)
{
printf(" 輸入第%d個學生的信息。 ",i+1);
insert(i);
}
do
{
printf("返回菜單請按1![]");
scanf("%d",&k);
if(k==1)
{
system("cls");
menu();
}
else
l=0;
}while(l==0);
}

voidsearch()//查詢成績的函數
{
voidmenu();
voidprintf_one(intk);
structstudents;
inti,k,w0,w1,w2;
do
{
printf("請選擇查找的類別:1.姓名2.學號[]");
scanf("%d",&w1);
if(w1<1||w1>2)
{
printf("輸入錯誤!請重新輸入! ");
w2=1;
}
else
w2=0;
}while(w2==1);
if(w1==1)//按姓名查找
{
do
{
k=-1;
do
{
printf(" 請輸入您想查找的學生的姓名! Name:");
scanf("%s",s.name);
for(i=0;i<5;i++)
if(strcmp(s.name,stu[i].name)==0)
{
k=i;
s=stu[i];
}
if(k==-1)//沒有找到
{
into;
printf(" 沒有這個學生的信息! ");
printf("Whatdoyouwanttodo? 1.繼續2.返回菜單[]");
scanf("%d",&o);
if(o==1)
{
system("cls");
search();//繼續查找
}
else
{
system("cls");
menu();//返回菜單
}
}
}while(k==-1);
system("cls");
printf_one(k);//查找到以後輸出這個學生的信息
printf(" Whatdoyouwanttodo? 1.繼續2.返回菜單[]");
scanf("%d",&w0);
}while(w0==1);
system("cls");
menu();//不在查找時返回菜單
}
else//按學號查找
{
do
{
k=-1;
do
{
printf(" 請輸入您想查找的學生的學號! Num:");
scanf("%s",s.num);
for(i=0;i<5;i++)
if(strcmp(s.num,stu[i].num)==0)//找到了
{
k=i;
s=stu[i];
}
if(k==-1)//沒有找到
{
into;
printf(" 沒有這個學生的信息! ");
printf("Whatdoyouwanttodo? 1.繼續2.返回菜單[]");
scanf("%d",&o);
if(o==1)
{
system("cls");
search();//繼續查找
}
else
{
system("cls");
menu();//返回菜單
}
}
}while(k==-1);
system("cls");
printf_one(k);//找到後輸出這個學生的信息
printf(" Whatdoyouwanttodo? 1.繼續2.返回菜單[]");
scanf("%d",&w0);
}while(w0==1);
system("cls");
menu();//不在查找時返回菜單
}

}voidxiugai()//修改學生信息的函數
{
voidmenu();
voidprintf_one(intk);
voidxiugai_2();
structstudents;
inti,n,k,w0=1,w1,w2=0,o;
do
{
k=-1;
do
{
printf(" 請輸入您想要修改的學生的姓名!Name:");
scanf("%s",s.name);
for(i=0;i<5;i++)
if(strcmp(s.name,stu[i].name)==0)//與其中一個學生匹配
{
k=i;
s=stu[i];
}
if(k==-1)//沒有找到輸入的學生
{
printf(" 沒有這個學生的信息! ");
printf("Whatdoyouwanttodo? 1.繼續2.返回菜單[]");
scanf("%d",&o);
if(o==1)
{
system("cls");
//xiugai();//繼續修改
}
else
{
system("cls");
menu();//返回菜單
}
}

}while(k==-1);
system("cls");
printf("修改這個學生的分數:");

scanf("%d",&stu[k].score);
printf(" ");
printf_one(k);//輸出這個學生的信息
printf(" Whatdoyouwanttodo? 1.繼續2.返回菜單[]");
scanf("%d",&o);
if(o!=1)
{
system("cls");
menu();//返回菜單
}
}while(1);
}voidprintf_all()//輸出所有學生成績的函數
{
voidmenu();
system("color4e");
inti,j,k;
for(i=0;i<N;i++)
{
printf("學號:%s姓名:%s分數:%d ",stu[i].num,stu[i].name,stu[i].score);
}
do
{
printf("返回菜單請按1[]");
scanf("%d",&j);
if(j==1)
{
system("cls");
menu();
}
else
{
k=0;
}
}while(k==0);
}voidprintf_one(intk)//輸出某一個學生的信息的函數
{
printf("學號:%s姓名:%s分數:%d",stu[k].num,stu[k].name,stu[k].score);
}


voidExit()//退出系統的函數
{
exit(0);
}

voidmenu()//菜單函數
{
system("color2e");
printf(" 歡迎使用學生學籍管理系統! ");
printf(" ");
intn,m;
do
{
puts(" ********************菜單*********************");
puts(" *********************************************");
puts(" **************學生學籍管理系統***************");
puts(" *********************************************");
puts(" *********************************************");
puts(" *******1--輸入數據****");
puts(" *******2--查詢成績****");
puts(" *******3--修改成績****");
puts(" *******4--輸出所有學生成績****");
puts(" *******5--統計及格和優秀的人數****");
puts(" *******6--輸出所有不及格學生的成績**");
puts(" *******7--輸出所有優秀學生姓名和成績*");
puts(" *******8--退出系統****");
puts(" *********************************************");
printf("請選擇服務種類(1~8):[]");
scanf("%d",&n);
if(n<1||n>8)
{
system("cls");
printf("選擇錯誤!請重新選擇! ");
m=1;
}
else
{
m=0;
}
}while(m==1);
switch(n)
{
case1:system("cls");input();break;
case2:system("cls");search();break;
case3:system("cls");xiugai();break;
case4:system("cls");printf_all();break;
//case5:system("cls");tongji();break;
//case6:system("cls");printf_all_bujige()break;
//case7:system("cls");printf_all_youxiu()break;
case8:Exit();break;
}
}

intmain()
{
menu();
return0;
}

⑩ C語言編成績管理系統

本答案僅供參考,這種問題,估計回答的人也不多,因為你的分少,而且問題規模大.建議自己去完成剩下的工作吧.
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#define N 3
typedef struct z1
{
char no[11];
char name[15];
int score[N];
float sum;
float average;
int order;
struct z1 *next;
}STUDENT;
STUDENT *init();
STUDENT *create();
STUDENT *del(STUDENT *h);
void print(STUDENT *h);
void search1(STUDENT *h);
void search2(STUDENT *h);
STUDENT *insert(STUDENT *h);
void sort(STUDENT *h);
void save(STUDENT *h);
void tongji(STUDENT *h);
int menu_select();
STUDENT *load();
void inputs(char *prompt,char *s,int count);
STUDENT *load();
main()
{
int i;
STUDENT *head;
head=init();
for(;;)
{
switch(menu_select())
{
case 0:head=init();break;
case 1:head=create();break;
case 2:head=insert(head);break;
case 3:save(head);break;
case 4:print(head);break;
case 5:search1(head);break;
case 6:head=del(head);break;
case 7:sort(head);break;
case 8:tongji(head);break;
case 9:search2(head);break;
case 10:exit(0);
}
}
}
int menu_select()
{
char *menu[]={"************菜單************",
"0. 初始化鏈表",
"1. 輸入學生成績",
"2. 插入學生成績",
"3. 保存學生記錄",
"4. 顯示學生記錄",
"5. 按學號查找學生信息",
"6. 刪除指定學號的學生信息",
"7. 按某一門課對學生成績排序",
"8. 統計某門課程的學生成績",
"9. 按姓名查找學生信息",
"10. 退出系統"};
char s[3];
int c,i;
for(i=0;i<=11;i++)
printf(" %s\n",menu[i]);
do
{
printf("\n請選擇0~10中的某一個選項\n");
scanf("%s",s);
c=atoi(s);
}while(c<0||c>10);
return c;
}
STUDENT *init()
{
return NULL;
}
STUDENT *create()
{
int i;int s;
STUDENT *h=NULL,*info;
for(;;)
{
info=(STUDENT *)malloc(sizeof(STUDENT));
if(!info)
{
printf("\n內存不足");
return NULL;
}
inputs("輸入學號:",info->no,11);
if(info->no[0]=='@')break;
inputs("輸入姓名:",info->name,15);
printf("開始輸入%d門課的成績\n",N);
s=0;
for(i=0;i<N;i++)
{
do{
printf("第%d門分數:",i+1);
scanf("%d",&info->score[i]);
if(info->score[i]>100||info->score[i]<0)
printf("輸入成績錯誤,請重新輸入:\n");
}while(info->score[i]>100||info->score[i]<0);
s=s+info->score[i];
}
info->sum=s;
info->average=(float)s/N;
info->order=0;
info->next=h;
h=info;
}
return h;
}
void inputs(char *prompt,char *s,int count)
{
char p[255];
do
{
printf(prompt);
scanf("%s",p);
if(strlen(p)>count)
printf("\n太長了!\n");
}while(strlen(p)>count);
strcpy(s,p);
}
void print(STUDENT *h)
{
int i=0;
STUDENT *p;
p=h;
printf("\n\n\n***********************學生***********************\n");
printf("|序號|學號 | 姓名 | 語文 | 英語 |數學 | 總分 |平均分 |名次 |\n");
printf("|---|-------|--------|----|----|----|------|------|---|\n");
while(p!=NULL)
{
i++;
printf("|%3d |%-10s|%-8s|%4d|%4d|%4d|%4.2f|%4.2f|%3d|\n",i,p->no,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
p=p->next;
}
printf("***********************end***********************\n");
}
STUDENT *del(STUDENT *h)
{
STUDENT *p,*q;
char s[11];
printf("請輸入要刪除的學生的學號\n");
scanf("%s",s);
q=p=h;
while(strcmp(p->no,s)&&p!=NULL)
{
q=p;
p=p->next;
}
if(p==NULL)
printf("\n鏈表中沒有學號為%s的學生\n",s);
else
{
printf("\n\n\n***********************找到了***********************\n");
printf("|學號 | 姓名 | 語文 | 英語 | 數學 | 總分 | 平均分 | 名次 |\n");
printf("|----------|----------|----|----|----|------|------|---|\n");
printf("|%-10s|%-8s|%4d|%4d|%4d|%4.2f|%4.2f|%3d|\n",p->no,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
printf("***********************end***********************\n");
printf("請按任意鍵刪除\n");
getchar();
if(p==h)
h=p->next;
else q->next=p->next;
free(p);
printf("\n已經刪除學號為%s的學生\n",s);
printf("不要忘了保存數據\n");
}
return h;
}
void search1(STUDENT *h)
{
STUDENT *p;
char s[11];
printf("請輸入你要查找的同學的學號\n");
scanf("%s",s);
p=h;
while(strcmp(p->no,s)&&p!=NULL)
p=p->next;
if(p==NULL)
printf("'n沒有學號為%s的學生\n",s);
else
{
printf("\n\n\n***********************找到了***********************\n");
printf("|學號 | 姓名 | 語文 | 英語 | 數學 | 總分 | 平均分 | 名次 |\n");
printf("|----------|-----------|----|----|----|------|------|---|\n");
printf("|%-10s|%-8s|%4d|%4d|%4d|%4.2f|%4.2f|%3d|\n",p->no,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
printf("***********************end***********************\n");
}
}
void search2(STUDENT *h)
{
STUDENT *p;
char s[11];
printf("請輸入你要查找的同學的姓名\n");
scanf("%s",s);
p=h;
while(strcmp(p->name,s)&&p!=NULL)
p=p->next;
if(p==NULL)
printf("\n沒有姓名為%s的學生\n",s);
else
{
printf("\n\n\n***********************找到了***********************\n");
printf("|學號 | 姓名 | 語文 | 英語 | 數學 | 總分 | 平均分 | 名次 |\n");
printf("|----------|-----------|----|----|----|------|------|---|\n");
printf("|%-10s|%-8s|%4d|%4d|%4d|%4.2f|%4.2f|%3d|\n",p->no,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
printf("***********************end***********************\n");
}
}
STUDENT *insert(STUDENT *h)
{
STUDENT *p,*q,*info;
char s[11];
int s1,i;
printf("請輸入插入點的學生學號\n");
scanf("%s",s);
printf("\n請輸入新的學生信息\n");
info=(STUDENT *)malloc(sizeof(STUDENT));
if(!info)
{
printf("\n內存不足!");
return NULL;
}
inputs("輸入學號:",info->no,11);
inputs("輸入姓名:",info->name,15);
printf("請輸入%d門課的分數\n",N);
s1=0;
for(i=0;i<N;i++)
{
do{
printf("分數%d",i+1);
scanf("%d",&info->score[i]);
if(info->score[i]>100||info->score[i]<0)
printf("輸入數據有誤,請重新輸入\n");
}while(info->score[i]>100||info->score[i]<0);
s1=s1+info->score[i];
}
info->sum=s1;
info->average=(float)s1/N;
info->order=0;
info->next=NULL;
p=h;
q=h;
while(strcmp(p->no,s)&&p!=NULL)
{q=p;p=p->next;}
if(p==NULL)
if(p==h)
h=info;
else q->next=info;
else
if(p==h)
{
info->next=p;
h=info;
}
else
{
info->next=p;
q->next=info;
}
printf("\n已經插入了%s這個學生\n",info->name);
printf("----不要忘了存檔啊--\n");
return(h);
}
void save(STUDENT *h)
{
FILE *fp;
STUDENT *p;
char outfile[10];
printf("請輸入保存文件的文件名,例如 c:\\f1\\te.txt:\n");
scanf("%s",outfile);
if((fp=fopen(outfile,"wb"))==NULL)
{
printf("不能打開文件\n");
exit(1);
}
printf("\n正在保存......\n");
p=h;
while(p!=NULL)
{
fwrite(p,sizeof(STUDENT),1,fp);
p=p->next;
}
fclose(fp);
printf("------保存成功!!!------\n");
}
void sort(STUDENT *h)
{
int i=0,j;
STUDENT *p,*q,*t,*h1;
printf("請輸入要按哪門課程的編號來排序:(0.語文 1.數學 2.英語)\n");
scanf("%d",&j);
h1=h->next;
h->next=NULL;
while(h1!=NULL)
{
t=h1;
h1=h1->next;
p=h;
q=h;
while(t->score[j]<p->score[j]&&p!=NULL)
{
q=p;
p=p->next;
}
if(p==q)
{
t->next=p;
h=t;
}
else
{
t->next=p;
q->next=t;
}
}
p=h;
while(p!=NULL)
{
i++;
p->order=i;
p=p->next;
}
print(h);
printf("排序成功!!!\n");
}
void tongji(STUDENT *h)
{
STUDENT *p;
int a,b,i;
printf("請輸入課程編號\n");
scanf("%d",&i);
printf("請輸入分數段:\n");
scanf("%d,%d",&a,&b);
p=h;
while(p!=NULL)
{
printf("\n\n\n***********************找到了***********************\n");
if(p->score[i]>=a&&p->score[i]<=b)
{
printf("|學號 | 姓名 | 語文 | 英語 | 數學 | 總分 | 平均分 | 名次 |\n");
printf("|--------|---------|----|----|----|------|------|---|\n");
printf("|%-10s|%-8s|%4d|%4d|%4d|%4.2f|%4.2f|%3d|\n",p->no,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
}
p=p->next;
}
printf("***********************end***********************\n");
}