當前位置:首頁 » 考試成績 » c語音編寫學生成績管理

c語音編寫學生成績管理

發布時間: 2020-12-03 09:02:47

A. 用C語言編寫一個學生成績管理系統。

#include<stdio.h> /*引用庫函數*/
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
typedef struct /*定義結構體數組*/
{
char num[10]; /*學號*/
char name[20]; /*姓名*/
int score; /*成績*/
}Student;
Student stu[80]; /*結構體數組變數*/
int menu_select() /*菜單函數*/
{
char c;
do{
system("cls"); /*運行前清屏*/
printf("\t\t****學生成績管理系統****\n"); /*菜單選擇*/
printf("\t\t | 1. 輸入學生信息|\n");
printf("\t\t | 2. 顯示學生信息 |\n");
printf("\t\t | 3. 排序 |\n");
printf("\t\t | 4. 增添學生信息 |\n");
printf("\t\t | 5. 刪除學生信息 |\n");
printf("\t\t | 6. 查詢 |\n");
printf("\t\t | 7. 統計 |\n");
printf("\t\t | 0. 退出 |\n");
printf("\t\t*****************************************\n");
printf("\t\t\t請選擇操作(0-9):");
c=getchar(); /*讀入選擇*/
}while(c<'0'||c>'9');
return(c-'0'); /*返回選擇*/
}
int Input(Student stud[],int n) /*輸入若干條記錄*/
{int i=0;
char sign,x[10]; /*x[10]為清除多餘的數據所用*/
while(sign!='n'&&sign!='N') /*判斷*/
{ printf("\t\t\t學號:"); /*交互輸入*/
scanf("\t\t\t%s",stud[n+i].num);
printf("\t\t\t學生姓名:");
scanf("\t\t\t%s",stud[n+i].name);
printf("\t\t\t學生成績:");
scanf("\t\t\t%d",&stud[n+i].score);
gets(x); /*清除多餘的輸入*/
printf("\t\t\t需要輸入更多信息?(Y/N)");
scanf("\t\t\t%c",&sign); /*輸入判斷*/
i++;

}
return(n+i);
}
void Display(Student stud[],int n) /*顯示所有記錄*/
{
int i;
printf("\t\t\t-----------------------------------\n"); /*格式頭*/
printf("\t\t\t學號\t\t姓名\t\t成績\n");
printf("\t\t\t-----------------------------------\n");
for(i=1;i<n+1;i++) /*循環輸入*/
{
printf("\t\t\t%-16s%-15s%d\n",stud[i-1].num,stud[i-1].name,stud[i-1].score);
if(i>1&&i%10==0) /*每十個暫停*/
{printf("\t\t\t-----------------------------------\n"); /*格式*/
printf("\t\t\t");
system("pause");
printf("\t\t\t-----------------------------------\n");
}
}
printf("\t\t\t");
system("pause");
}
void Sort_by_num(Student stud[],int n) /*按學號排序*/
{ int i,j,*p,*q,s;
char t[10];
for(i=0;i<n-1;i++) /*冒泡法排序*/
for(j=0;j<n-1-i;j++)
if(strcmp(stud[j].num,stud[j+1].num)>0)
{strcpy(t,stud[j+1].num);
strcpy(stud[j+1].num,stud[j].num);
strcpy(stud[j].num,t);
strcpy(t,stud[j+1].name);
strcpy(stud[j+1].name,stud[j].name);
strcpy(stud[j].name,t);
p=&stud[j+1].score;

q=&stud[j].score;
s=*p;
*p=*q;
*q=s;
}
}
int Insert_a_record(Student stud[],int n) /*插入一條記錄*/
{char x[10]; /*清除多餘輸入所用*/
printf("\t\t\t學號:"); /*互動式輸入*/
scanf("\t\t\t%s",stud[n].num);
printf("\t\t\t學生姓名:");
scanf("\t\t\t%s",stud[n].name);
printf("\t\t\t學生成績:");
scanf("\t\t\t%d",&stud[n].score);
gets(x);
n++;
Sort_by_num(stud,n); /*調用排序函數*/
printf("\t\t\t添加成績信息!\n"); /*返回成功信息*/
return(n);
}
int Delete_a_record(Student stud[],int n) /*按姓名查找,刪除一條記錄*/
{ char s[20];
int i=0,j;
printf("\t\t\t請輸入所要刪除數據的姓名:"); /*互動式問尋*/
scanf("%s",s);
while(strcmp(stud[i].name,s)!=0&&i<n) i++; /*查找判斷*/
if(i==n)
{ printf("\t\t\t未找到數據!\n"); /*返回失敗信息*/
return(n);
}
for(j=i;j<n-1;j++) /*刪除操作*/
{

strcpy(stud[j].num,stud[j+1].num);
strcpy(stud[j].name,stud[j+1].name);
stud[j].score=stud[j+1].score;
}
printf("\t\t\t刪除結束!\n"); /*返回成功信息*/
return(n-1);
}
void Query_a_record(Student stud[],int n) /*查找並顯示一個記錄*/
{ char s[20];
int i=0;
printf("\t\t\t請輸入您所查找的學生姓名:"); /*互動式輸入*/
scanf("\t\t\t%s",s);
while(strcmp(stud[i].name,s)!=0&&i<n) i++; /*查找判斷*/
if(i==n)
{ printf("\t\t\t未找到!\n"); /*輸入失敗信息*/
return;

}
printf("\t\t\t學號是:%s\n",stud[i].num); /*輸出該學生信息*/
printf("\t\t\t成績是:%d\n",stud[i].score);
}
void Statistic(Student stud[],int n) /*新增功能,輸出統計信息*/
{ int i,j=0,k=0,sum=0;
float aver; /*成績平均值*/
for(i=0;i<n;i++) /*循環輸入判斷*/
{
sum+=stud[i].score;
if(stud[j].score>stud[i].score) j=i;
if(stud[k].score<stud[i].score) k=i;
}
aver=1.0*sum/n;
printf("\t\t\t總共有 %d 條信息.\n",n); /*總共記錄數*/
printf("\t\t\t最高分:\n"); /*最高分*/

printf("\t\t\t學號:%s 姓名:%s 成績:%d\n",stud[j].num,stud[j].name,stud[j].score);
printf("\t\t\t最低分:\n"); /*最低分*/
printf("\t\t\t學號:%s 姓名:%s 成績:%d\n",stud[k].num,stud[k].name,stud[k].score);
printf("\t\t\t平均分 %5.2f\n",aver); /*平均分*/
}

void main() /*主函數*/
{
int n=0;
for(;;)
{
switch(menu_select()) /*選擇判斷*/
{
case 1:
printf("\t\t\t輸入學生信息\n"); /*輸入若干條記錄*/
n=Input(stu,n);
break;
case 2:
printf("\t\t\t顯示所有學生信息\n"); /*顯示所有記錄*/
Display(stu,n);
break;
case 3:
printf("\t\t\t排序\n");
Sort_by_num(stu,n); /*按學號排序*/
printf("\t\t\t排序結束!\n");
printf("\t\t\t");
system("pause");
break;
case 4:

printf("\t\t\t增添學生信息\n");
n=Insert_a_record(stu,n); /*插入一條記錄*/
printf("\t\t\t");
system("pause");
break;
case 5:
printf("\t\t\t刪除一個學生信息\n");
n=Delete_a_record(stu,n); /*按姓名查找,刪除一條記錄*/
printf("\t\t\t");
system("pause");
break;
case 6:
printf("\t\t\t查詢\n");
Query_a_record(stu,n); /*查找並顯示一個記錄*/
printf("\t\t\t");
system("pause");
break;
case 7:
printf("\t\t\t統計\n");
Statistic(stu,n); /*新增功能,輸出統計信息*/
printf("\t\t\t");
system("pause");
break;
case 0:
printf("\t\t\t程序結束\n"); /*結束程序*/
printf("\t\t\t");
system("pause");
exit(0);
}
}
}

B. 編程如何用C語言編寫一個學生成績管理系統程序

我們才做了這個作業。。。
#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>
#define LEN sizeof(struct scorenode)
#define DEBUG
#include <string.h>
struct scorenode
{
int number;/*學號*/
char name[8];/*姓名*/
float cj1;/*成績1*/
float cj2;/*成績2*/
float cj3;/*成績3 */
struct scorenode *next;
};
typedef struct scorenode score;
int n,k;/*n,k為全局變數,本程序中的函數均可以使用它*/
/*==============================================================================================*/
score *creat(void)
/*函數creat,功能:創建鏈表,此函數帶回一個指向鏈表頭的指針*/
{
score*head;
score *p1,*p2,*p3,*max;
int i,j;
float fen;
char t[10];
n=0;
p1=p2=p3=(score *)malloc(LEN);head=p3; /*申請一個新單元*/
printf("請輸入學生資料,輸0退出!\n");
repeat1: printf("請輸入學生學號(學號應大於0):");/*輸入大於0的學號*/
scanf("%d",&p1->number);
while(p1->number<0)
{
getchar();
printf("輸入錯誤,請重新輸入學生學號:");
scanf("%d",&p1->number);
}
/*輸入學號為字元或小於0時,程序報錯,提示重新輸入學號*/
if(p1->number==0)
goto end;/*當輸入的學號為0時,轉到末尾,結束創建鏈表*/
else
{
p3=head;
if(n>0)
{
for(i=0;i<n;i++)
{
if(p1->number!=p3->number)
p3=p3->next;
else
{
printf("學號重復,請重輸!\n");
goto repeat1;
/*當輸入的學號已經存在,程序報錯,返回前面重新輸入*/
}
}
}
}
printf("請輸入學生姓名:");
scanf("%s",&p1->name); /*輸入學生姓名*/
printf("請輸入cj1(0~100):"); /*輸入cj1,成績應在0-100*/
scanf("%f",&p1->cj1);
while(p1->cj1<0||p1->cj1>100)
{
getchar();
printf("輸入錯誤,請重新輸入cj1"); /*輸入錯誤,重新輸入成績1*/
scanf("%f",&p1->cj1);
}
printf("請輸入cj2(0~100):"); /*輸入cj2,成績應在0-100*/
scanf("%f",&p1->cj2);
while(p1->cj2<0||p1->cj2>100)
{
getchar();
printf("輸入錯誤,請重新輸入cj2"); /*輸入錯誤,重新輸入cj2直到正確為止*/
scanf("%f",&p1->cj2);
}
printf("請輸入cj3(0~100):");/*輸入cj3,成績應在0-100*/
scanf("%f",&p1->cj3);
while(p1->cj3<0||p1->cj3>100)
{
getchar();
printf("輸入錯誤,請重新輸入cj3");
scanf("%f",&p1->cj3);} /*輸入錯誤,重新輸入cj3直到正確為止*/
head=NULL;
while(p1->number!=0)
{
n=n+1;
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
p1=(score *)malloc(LEN);
printf("請輸入學生資料,輸0退出!\n");
repeat2:printf("請輸入學生學號(學號應大於0):");
scanf("%d",&p1->number); /*輸入學號,學號應大於0*/
while(p1->number<0)
{
getchar();
printf("輸入錯誤,請重新輸入學生學號:");
scanf("%d",&p1->number);
}
/*輸入學號為字元或小於0時,程序報錯,提示重新輸入學號*/
if(p1->number==0)
goto end; /*當輸入的學號為0時,轉到末尾,結束創建鏈表*/
else
{
p3=head;
if(n>0)
{
for(i=0;i<n;i++)
{
if(p1->number!=p3->number)
p3=p3->next;
else
{
printf("學號重復,請重輸!\n");
goto repeat2;
/*當輸入的學號已經存在,程序報錯,返回前面重新輸入*/
}
}
}
}
printf("請輸入學生姓名:");
scanf("%s",&p1->name);/*輸入學生姓名*/
printf("請輸入cj1(0~100):");
scanf("%f",&p1->cj1);/*輸入cj1,成績應在0-100*/
while(p1->cj1<0||p1->cj1>100)
{
getchar();
printf("輸入錯誤,請重新輸入cj1");
scanf("%f",&p1->cj1);}/*輸入錯誤,重新輸入cj1直到正確為止*/
printf("請輸入cj2(0~100):");
scanf("%f",&p1->cj2);/*輸入cj2,成績應在0-100*/
while(p1->cj2<0||p1->cj2>100)
{
getchar();
printf("輸入錯誤,請重新輸入cj2");
scanf("%f",&p1->cj2);
} /*輸入錯誤,重新輸入cj2績直到正確為止*/
printf("請輸入cj3(0~100):");
scanf("%f",&p1->cj3);/*輸入cj3,成績應在0-100*/
while(p1->cj3<0||p1->cj3>100)
{
getchar();
printf("輸入錯誤,請重新輸入cj3");
scanf("%f",&p1->cj3);} /*輸入錯誤,重新輸入cj3直到正確為止*/
}
end: p1=head;
p3=p1;
for(i=1;i<n;i++)
{
for(j=i+1;j<=n;j++)
{
max=p1;
p1=p1->next;
if(max->number>p1->number)
{
k=max->number;
max->number=p1->number;
p1->number=k;
/*交換前後結點中的學號值,使得學號大者移到後面的結點中*/
strcpy(t,max->name);
strcpy(max->name,p1->name);
strcpy(p1->name,t);
/*交換前後結點中的姓名,使之與學號相匹配*/
fen=max->cj1;
max->cj1=p1->cj1;
p1->cj1=fen;
/*交換前後結點中的cj1,使之與學號相匹配*/
fen=max->cj2;
max->cj2=p1->cj2;
p1->cj2=fen;
/*交換前後結點中的cj2,使之與學號相匹配*/
fen=max->cj3;
max->cj3=p1->cj3;
p1->cj3=fen;
/*交換前後結點中的cj3,使之與學號相匹配*/
}
}
max=head;p1=head;/*重新使max,p指向鏈表頭*/
}
p2->next=NULL;/*鏈表結尾*/
printf("輸入的學生數為:%d個!\n",n);
return(head);
}
score *add(score *head,score *stu)
/*函數add,功能:追加學生資料,並且將所有學生資料按學號排序*/
{
score *p0,*p1,*p2,*p3,*max;
int i,j;
float fen;
char t[10];
p3=stu=(score *)malloc(LEN);/*開辟一個新單元*/
printf("\n輸入要增加的學生的資料!");
repeat4: printf("請輸入學生學號(學號應大於0):");
scanf("%d",&stu->number);
/*輸入學號,學號應大於0*/
while(stu->number<0)
{
getchar();
printf("輸入錯誤,請重新輸入學生學號:");
scanf("%d",&stu->number);} /*輸入錯誤,重新輸入學號*/
/******************************************************/
if(stu->number==0)
goto end2;/*當輸入的學號為0時,轉到末尾,結束追加*/
else
{
p3=head;
if(n>0)
{for(i=0;i<n;i++)
{if(stu->number!=p3->number)
p3=p3->next;
else
{
printf("學號重復,請重輸!\n");
goto repeat4;
/*當輸入的學號已經存在,程序報錯,返回前面重新輸入*/
}
}
}
}
/******************************************************/
printf("輸入學生姓名:");
scanf("%s",stu->name); /*輸入學生姓名*/
printf("請輸入cj1(0~100):");
scanf("%f",&stu->cj1); /*輸入cj1,成績應在0-100*/
while(stu->cj1<0||stu->cj1>100)
{getchar();
printf("輸入錯誤,請重新輸入cj1");
scanf("%f",&stu->cj1);
} /*輸入錯誤,重新輸入cj1直到正確為止*/
printf("請輸入cj2(0~100):");
scanf("%f",&stu->cj2);/*輸入cj2,成績應在0-100*/
while(stu->cj2<0||stu->cj2>100)
{
getchar();
printf("輸入錯誤,請重新輸入cj2");
scanf("%f",&stu->cj2);}/*輸入錯誤,重新輸入cj2直到正確為止*/
printf("請輸入cj3(0~100):");
scanf("%f",&stu->cj3);/*輸入cj3,成績應在0-100*/
while(stu->cj3<0||stu->cj3>100)
{
getchar();
printf("輸入錯誤,請重新輸入cj3");
scanf("%f",&stu->cj3);}/*輸入錯誤,重新輸入cj3直到正確為止*/
p1=head;
p0=stu;
if(head==NULL)
{head=p0;p0->next=NULL;}/*當原來鏈表為空時,從首結點開始存放資料*/
else/*原來鏈表不為空*/
{
if(p1->next==NULL)/*找到原來鏈表的末尾*/
{
p1->next=p0;
p0->next=NULL;/*將它與新開單元相連接*/
}
else
{
while(p1->next!=NULL)/*還沒找到末尾,繼續找*/
{
p2=p1;p1=p1->next;
}
p1->next=p0;
p0->next=NULL;
}
}
n=n+1;
p1=head;
p0=stu;
for(i=1;i<n;i++)
{
for(j=i+1;j<=n;j++)
{
max=p1;
p1=p1->next;
if(max->number>p1->number)
{
k=max->number;
max->number=p1->number;
p1->number=k;
/*交換前後結點中的學號值,使得學號大者移到後面的結點中*/
strcpy(t,max->name);
strcpy(max->name,p1->name);
strcpy(p1->name,t);
/*交換前後結點中的姓名,使之與學號相匹配*/
fen=max->cj1;
max->cj1=p1->cj1;
p1->cj1=fen;
/*交換前後結點中的cj1,使之與學號相匹配*/
fen=max->cj2;
max->cj2=p1->cj2;
p1->cj2=fen;
/*交換前後結點中的cj2績,使之與學號相匹配*/
fen=max->cj3;
max->cj3=p1->cj3;
p1->cj3=fen;
/*交換前後結點中的cj3,使之與學號相匹配*/
}
}
max=head;p1=head;/*重新使max,p指向鏈表頭*/
} end2:
printf("現在的學生數為:%d個!\n",n);
return(head);
}
/*========================================================
======================================*/
score *search(score *head)
/*函數search,功能:查詢學生成績*/
{int number;
score *p1,*p2;
printf("輸入要查詢的學生的學號,");
scanf("%d",&number);

while(number!=0)
{
if(head==NULL)
{printf("\n沒有任何學生資料!\n");return(head);}

printf("-----------------------------------------\n");
printf("|學號\t|姓名\t|cj1\t|cj2\t|cj3\t|\n");
printf("-----------------------------------------\n");/*列印表格域*/
p1=head;
while(number!=p1->number&&p1->next!=NULL)
{p2=p1;p1=p1->next;}
if(number==p1->number)
{printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\n",p1->number,p1->name,p1->cj1,p1->cj2,p1->cj3);
printf("-----------------------------------------\n");}/*列印表格域*/
else
printf("%d不存在此學生!\n",number);
printf("輸入要查詢的學生的學號,");
scanf("%d",&number);
}
printf("已經退出了!\n");
return(head);
}/*=============================================
=================================================*/
score *del(score *head)/*函數del,功能:刪除學生資料*/
{
score *p1,*p2;
int number;
printf("輸入要刪除的學生的學號(輸入0時退出):");
scanf("%d",&number);
getchar();
while(number!=0)/*輸入學號為0時退出*/
{

if(head==NULL)
{
printf("\n沒有任何學生資料!\n");
return(head);
}
p1=head;
while(number!=p1->number&&p1->next!=NULL)
/*p1指向的不是所要找的首結點,並且後面還有結點*/
{
p2=p1;p1=p1->next;
} /*p1後移一個結點*/

if(number==p1->number)
/*找到了*/
{
if(p1==head)
head=p1->next;
/*若p1指向的是首結點,把地二個結點地址賦予head*/
else
p2->next=p1->next;
/*否則將下一個結點地址 賦給前一結點地址*/
printf("已經刪除:%d\n",number);n=n-1;
}
else
printf("%d不存在此學生!\n",number);
/*找不到該結點*/
printf("輸入要刪除的學生的學號:");
scanf("%d",&number);
getchar();
}
#ifdef DEBUG
printf("已經退出了!\n");
#endif
printf("現在的學生數為:%d個!\n",n);
return(head);
} /*==================================================
============================================*/
score *statistics(score *head)
/*函數statistics,功能:統計學生成績*/
{
float sum1=0,sum2=0,sum3=0,ave1=0,ave2=0,ave3=0,max=0,min;
score *p;
int x,y=0,i=0;
p=head;
printf("1個人總分和平均分\t2單科平均分\t3總分最高分\t4總分最低分\n");
scanf("%d",&x);
getchar();
switch(x)
/*用switch語句實現功能選擇*/
{
case 1: if(head==NULL)
{printf("\n沒有任何學生資料!\n");return(head);}/*鏈表為空*/
else
{
printf("---------------------------------------------------------\n");
printf("|學號\t|姓名\t|cj1\t|cj2\t|cj3\t|總分\t|平均分\t|\n");
printf("---------------------------------------------------------\n");/*列印表格域*/
while(p!=NULL)
{
sum1=p->cj1+p->cj2+p->cj3; /*計算個人總分*/
ave1=sum1/3;/*計算個人平均分*/

printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|%.1f\t|%.1f\t|\n",p->number,p->name,p->cj1,p->cj2,p->cj3,sum1,ave1);
/*列印結果*/
printf("---------------------------------------------------------\n");/*列印表格域*/
p=p->next;}
}
return(head); break;
case 2: if(head==NULL)
{printf("\n沒有任何學生資料!\n");return(head);}/*鏈表為空*/
while(p!=NULL)
{
sum1=sum1+p->cj1;
sum2=sum2+p->cj2;
sum3=sum3+p->cj3;/*計算總分*/
y=y+1;
ave1=sum1/y;
ave2=sum2/y;
ave3=sum3/y;/*計算平均分*/
p=p->next;/*使p指向下一個結點*/
}
printf("cj1平均分是%.1f\n",ave1);
printf("cj2平均分是%.1f\n",ave2);
printf("cj3平均分是%.1f\n",ave3);/*列印結果*/
return(head); break;
case 3:
if(head==NULL)
{printf("\n沒有任何學生資料!\n");return(head);}/*鏈表為空*/
max=p->cj1+p->cj2+p->cj3;
while(i<n)
{
i=i+1;
sum1=p->cj1+p->cj2+p->cj3; /*計算個人總分*/
if(max<sum1)
max=sum1;
p=p->next;
}
printf("總分最高分:%.1f",max);
printf("\n");
return(head); break;
case 4: if(head==NULL)
{printf("\n沒有任何學生資料!\n");return(head);}/*鏈表為空*/
while(p!=NULL)
{
min=p->cj1+p->cj2+p->cj3;
while(p!=NULL)
{sum2=p->cj1+p->cj2+p->cj3;

if(min>sum2)
min=sum2;
p=p->next;
}
}

printf("總分最低分:%.1f",min);
printf("\n");
return(head); break;

default :printf("輸入錯誤,請重試!\n");
}
return(head);

}
/*===========================================================
===================================*/
int save(score *p1)
/*函數save,功能:保存學生的資料*/
{
FILE *fp;

char filepn[20];/*用來存放文件保存路徑以及文件名*/

printf("請輸入文件路徑及文件名:");
scanf("%s",filepn);
if((fp=fopen(filepn,"w+"))==NULL)
{
printf("不能打開文件!\n");
return 0;
}

fprintf(fp," 學生成績管理系統 \n");
fprintf(fp,"-------------------------------------------------------\n");
fprintf(fp,"| 學號\t| 姓名\t| cj1\t| cj2\t| cj3\t|\n");
fprintf(fp,"-------------------------------------------------------\n");
/*列印表格域*/
while(p1!=NULL)
{
fprintf(fp,"%d\t%s\t%.1f\t%.1f\t%.1f\t\n",p1->number,p1->name,p1->cj1,p1->cj2,p1->cj3);

p1=p1->next;/*下移一個結點*/

}
fclose(fp);
printf("文件已經保存!\n");
return 0;
}
int menu()/*函數menu,功能:菜單選擇界面*/
{
int i,k;
printf("\t\t\t\t學生成績管理系統\n");
for(i=0;i<80;i++)
printf("*");
printf("\t\t1創建資料\t\t\t2查詢成績\t\t\n");
printf("\t\t3刪除資料\t\t\t4追加資料\t\t\n");
printf("\t\t5統計成績\t\t\t6保存資料\t\t\n");
/*菜單選擇界面*/

for(i=0;i<80;i++)
printf("*");
printf("請選擇您所要的操作(選擇(0)退出):");
scanf("%d",&k);/*選擇操作*/
getchar();

return (k);}

/*==============================================================================================*/
main() /*主函數main,功能:通過調用creat,search,del,add,print,ststistics,save,taxis等函數,實現學生成績查詢系統功能*/
{
score *head=0,*stu=0;
while(1)
{
k=menu();
switch(k)/*用switch語句實現功能選擇*/
{
case 1: head=creat();break;/*調用創建鏈表函數*/
case 2: head=search(head);break;/*調用查詢函數*/
case 3: head=del(head); break;/*調用刪除函數*/
case 4: head=add(head,stu);break;/*調用追加函數*/
case 5: statistics(head); break;/*調用統計函數*/
case 6: save(head);break;/*調用保存函數*/
case 0: exit(0);/*退出系統,返回主界面*/
default: printf("輸入錯誤,請重試!\n");
}
}
}

C. 怎樣用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]);
}
} 有疑問提出

D. 怎樣用c語言編寫一個學生成績管理系統

#include
"stdio.h"
#include
"stdlib.h"
#include
"string.h"
#define
NULL
0
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\t6統計學生成績\n");
printf("\t7排序學生成績\t\t\t\t\t8保存學生資料\n");
printf("\t9獲取幫助信息\t\t\t\t\t0退出系統\n");
printf("********************************************************************************\n");
}

E. C語言編寫一個簡單的學生成績管理系統

C語言程序:

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

typedefstructstudent
{
charname[20]; /*姓名*/
intcode; /*學號*/
intkor,eng,math; /*3門課程的成績*/
}STUDENT;

/*返回輸入數據*/
STUDENTInput();

/*輸出所有輸入的數據*/
voidOutput(STUDENTinfo[],intcnt);

/*將輸入分數轉換為A-F*/
chargrade(intscore);

intmain()
{
STUDENTS[10];
intcnt=0,select;
inti,j;
intcode;

while(1)
{
printf(" 學生信息管理系統 ");
printf(" 1 添加 ");
printf(" 2 刪除 ");
printf(" 3 查詢 ");
printf(" 0 結束 ");
printf(" 您的選擇[0-3]:");
scanf("%d",&select);

if(select<0||select>3)
continue;
if(select==0)
{
printf("退出系統! ");
break;
}

if(select==1) /*添加*/
{
S[cnt++]=Input();
}
elseif(select==2) /*刪除*/
{
printf(" 待刪除學生的學號:");
scanf("%d",&code);

for(i=0;i<cnt;i++)
if(S[i].code==code)
break;
if(i>=cnt)
{
printf("學號不存在,刪除失敗! ");
}
else{
for(j=i+1;j<cnt;j++)
{
strcpy(S[j-1].name,S[j].name);
S[j-1].code=S[j].code;
S[j-1].kor=S[j].kor;
S[j-1].eng=S[j].eng;
S[j-1].math=S[j].math;
}
cnt--;
printf("刪除成功! ");
}
}
else /*查詢*/
{
printf(" 待查找學生的學號:");
scanf("%d",&code);

for(i=0;i<cnt;i++)
if(S[i].code==code)
break;
if(i>=cnt)
{
printf("學號不存在,查找失敗! ");
}
else
{
printf(" 查詢結果: ");
Output(S,i);
}
}
}

return0;
}

/*返回輸入數據*/
STUDENTInput()
{
STUDENTstu;
printf(" 新學生信息 ");
printf(" 學號:");
scanf("%d",&stu.code);
printf(" 姓名:");
getchar();
gets(stu.name);
printf(" 3門課程成績(以空格分隔):");
scanf("%d%d%d",&stu.kor,&stu.eng,&stu.math);

returnstu;
}

/*輸出所有輸入的數據*/
voidOutput(STUDENTinfo[],intcnt)
{
printf("學號:%d ",info[cnt].code);
printf("姓名:");
puts(info[cnt].name);
printf("成績:%c%c%c ",grade(info[cnt].kor),grade(info[cnt].eng),grade(info[cnt].math));
}

/*將輸入分數轉換為A-F*/
chargrade(intscore)
{
if(score<0||score>100)
return'F';
if(score>=90)
return'A';
if(score>=80)
return'B';
if(score>=70)
return'C';
if(score>=60)
return'D';
else
return'E';
}


運行測試:

F. 用C語言編寫一個簡單的學生成績管理的程序

我以前寫了個,你拿去參考下吧:
#include <time.h>
#include<stdio.h>
#include<conio.h>
#include <stdlib.h>
#include<string.h>
#define MAX 80
void input();
void sort();
void display();
void insert();
void del();
void average();
void find();
void save();
void read();
void del_file();
void average();
void modify();
int now_no=0;
struct student
{
int no;
char name[20];
char sex[4];
float score1;
float score2;
float score3;
float sort;
float ave;
float sum;
};
struct student stu[MAX],*p;
main()/*主函數*/
{
int as;
start: printf("\n\t\t\t歡迎使用學生成績管理系統\n");
/*一下為功能選擇模塊*/
do
{
printf("\n\t\t\t\t1.錄入學員信息\n\t\t\t\t2.顯示學員信息\n\t\t\t\t3.成績排序信息\n\t\t\t\t4.添加學員信息\n\t\t\t\t5.刪除學員信息\n\t\t\t\t6.修改學員信息\n\t\t\t\t7.查詢學員信息\n\t\t\t\t8.從文件讀入學員信息\n\t\t\t\t9.刪除文件中學員信息\n\t\t\t\t10.保存學員信息\n\t\t\t\t11.退出\n");
printf("\t\t\t\t選擇功能選項:");
fflush(stdin);
scanf("%d",&as);
switch(as)
{
case 1:system("cls");input();break;
case 2:system("cls");display();break;
case 3:system("cls");sort();break;
case 4:system("cls");insert();break;
case 5:system("cls");del();break;
case 6:system("cls");modify();break;
case 7:system("cls");find();break;
case 8:system("cls");read();break;
case 9:system("cls");del_file();break;
case 10:system("cls");save();break;
case 11:system("exit");exit(0);
default:system("cls");goto start;
}
}while(1);
/*至此功能選擇結束*/
}
void input()/*原始數據錄入模塊*/
{
int i=0;
char ch;
do
{
printf("\t\t\t\t1.錄入學員信息\n輸入第%d個學員的信息\n",i+1);
printf("\n輸入學生編號:");
scanf("%d",&stu[i].no);
fflush(stdin);
printf("\n輸入學員姓名:");
fflush(stdin);
gets(stu[i].name);
printf("\n輸入學員性別:");
fflush(stdin);
gets(stu[i].sex);
printf("\n輸入學員成績1:");
fflush(stdin);
scanf("%f",&stu[i].score1);
printf("\n輸入學員成績2:");
fflush(stdin);
scanf("%f",&stu[i].score2);
printf("\n輸入學員成績3:");
fflush(stdin);
scanf("%f",&stu[i].score3);
printf("\n\n");
i++;
now_no=i;
printf("是否繼續輸入?(Y/N)");
fflush(stdin);
ch=getch();
system("cls");
}
while(ch!='n'&&ch!='N');
system("cls");
}
void sort()/*排序數據函數*/
{
struct student temp;
int i,j;
average();
for(i=1;i<now_no;i++)
{
for(j=1;j<=now_no-i;j++)
{
if(stu[j-1].ave<stu[j].ave)
{
temp=stu[j];
stu[j]=stu[j-1];
stu[j-1]=temp;
}
}
}
}
void display()/*顯示數據函數*/
{
int i;
char as;
average();
do
{
printf("\t\t\t班級學員信息列表\n");
printf("\t編號\t姓名\t性別\t成績1\t成績2\t成績3\t平均值\n");
for(i=0;i<now_no&&stu[i].name[0];i++)printf("\t%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave);
printf("\t\t按任意鍵返回主菜單.");
fflush(stdin);
as=getch();
}
while(!as);
system("cls");
}
void insert()/*插入數據函數*/
{
char ch;
do
{
printf("\n\t\t輸入新插入學員隊信息\n");
printf("\n輸入學生編號:");
scanf("%d",&stu[now_no].no);
fflush(stdin);
printf("\n輸入學員姓名:");
fflush(stdin);
gets(stu[now_no].name);
printf("\n輸入學員性別:");
fflush(stdin);
gets(stu[now_no].sex);
printf("\n輸入學員成績1:");
fflush(stdin);
scanf("%f",&stu[now_no].score1);
printf("\n輸入學員成績2:");
fflush(stdin);
scanf("%f",&stu[now_no].score2);
printf("\n輸入學員成績3:");
fflush(stdin);
scanf("%f",&stu[now_no].score3);
printf("\n\n");
now_no=now_no+1;
sort();
printf("是否繼續輸入?(Y/N)");
fflush(stdin);
ch=getch();
system("cls");
}
while(ch!='n'&&ch!='N');
}
void del()/*刪除數據函數*/
{
int inum,i,j;
printf("輸入要刪除學員的編號:");
fflush(stdin);
scanf("%d",&inum);
for(i=0;i<now_no;i++)
{
if(stu[i].no==inum)
{
if(i==now_no)now_no-=1;
else
{
stu[i]=stu[now_no-1];
now_no-=1;
}
sort();
break;
}
}
system("cls");
}
void save()/*保存數據函數*/
{
FILE *fp;
int i;
char filepath[20];
printf("輸入要保存的文件路徑:");
fflush(stdin);
gets(filepath);
if((fp=fopen(filepath,"w"))==NULL)
{
printf("\n保存失敗!");
exit(0);
}
for(i=0;i<now_no;i++)
{
stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3;
stu[i].ave=stu[i].sum/3;
fprintf(fp,"\t%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave);
}
fclose(fp);
printf("學生信息已保存在%s中!\n",filepath);
system("pause");
system("cls");
}
void find()/*查詢函數*/
{
int i;
char str[20],as;
do
{
printf("輸入要查詢的學生姓名:");
fflush(stdin);
gets(str);
for(i=0;i<now_no;i++)
if(!strcmp(stu[i].name,str))
{
printf("\t編號\t姓名\t性別\t成績1\t成績2\t成績3\t平均值\n");
printf("\t%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave);
}
printf("\t\t按任意鍵返回主菜單.");
fflush(stdin);
as=getch();
}
while(!as);
system("cls");
}
void average()/*求平均數*/
{
int i;
for(i=0;i<now_no;i++)
{
stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3;
stu[i].ave=stu[i].sum/3;
}
}
void modify()/*修改數據函數*/
{
int i;
char str[20],as;
printf("輸入要修改的學生姓名:");
fflush(stdin);
gets(str);
for(i=0;i<now_no;i++)
if(!strcmp(stu[i].name,str))
{
system("cls");
printf("\n\t\t輸入新插入學員隊信息\n");
printf("\n輸入學生編號:");
fflush(stdin);
scanf("%d",&stu[i].no);
printf("\n輸入學員性別:");
fflush(stdin);
gets(stu[i].sex);
printf("\n輸入學員成績1:");
fflush(stdin);
scanf("%f",&stu[i].score1);
printf("\n輸入學員成績2:");
fflush(stdin);
scanf("%f",&stu[i].score2);
printf("\n輸入學員成績3:");
fflush(stdin);
scanf("%f",&stu[i].score3);
printf("\n\n");
sort();
break;
}
system("cls");
}

void read()
{
FILE *fp;
int i;
char filepath[20];
printf("輸入要讀入的文件路徑:");
fflush(stdin);
gets(filepath);
if((fp=fopen(filepath,"r"))==NULL)
{
printf("找不到%s文件!\n",filepath);
system("pause");
exit(0);
}
now_no=0;
for(i=0;i<MAX&&!feof(fp);i++)
{
fscanf(fp,"\t%d\t%s\t%s\t%f\t%f\t%f\t%f\n",&stu[i].no,stu[i].name,stu[i].sex,&stu[i].score1,&stu[i].score2,&stu[i].score3,&stu[i].ave);
now_no++;
}
fclose(fp);
printf("保存的在文件%s中的所有信息已經讀入!\n",filepath);
system("pause");
system("cls");
}

void del_file()
{
FILE *fp;
char filepath[20];
printf("輸入要刪除的文件路徑:");
fflush(stdin);
gets(filepath);
fp=fopen(filepath,"w");
fclose(fp);
printf("保存的在文件%s中的所有信息已經刪除!\n",filepath);
system("pause");
system("cls");
}

G. 用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;
}
}
}
/* */

H. 用C語言編寫一個學生成績管理系統

// test4.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
struct Student //學生結構體
{
char name[20]; //名字
char sex[10]; //性別
char zuanye[20]; //專業
char code[13]; //學號
char department[20]; //學院
char degree[20]; //學歷
};
struct node
{
struct Student data;
struct node *next;
};
//---------------------------------------------------------------------------------
void print_menu(void) // 列印總菜單
{
printf(" |--------------------------------------------------|\n");
printf(" | 總 菜 單 : |\n");
printf(" |--------------------------------------------------|\n");
printf(" | 1--增加一個學生信息 | 5--刪除一個學生信息 |\n");
printf(" | 2--顯示一個學生信息 | 6--統計功能 |\n");
printf(" | 3--顯示一個班級信息 | 7--結束 |\n");
printf(" | 4--修改一個學生信息 | \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 |\n");
printf(" |--------------------------------------------------|\n");
}
void print_menu4(void ) //列印修改功能
{

printf(" |--------------------------------------------------|\n");
printf(" | 修 改 功 能 : |\n");

printf(" |--------------------------------------------------|\n");
printf(" | 1--修改名字 | 5--修改學院 |\n");
printf(" | 2--修改性別 | 6--修改專業 |\n");
printf(" | 3--修改學號 | 7--不作修改 |\n");
printf(" | 4--修改學歷 | \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 |\n");
printf(" |--------------------------------------------------|\n");
printf("再次選擇選項 :");
}

void print_static_function_menu(void) //列印統計功能
{
printf(" |--------------------------------------------------|\n");
printf(" | 統 計 功 能 : |\n");
printf(" |--------------------------------------------------|\n");
printf(" | 1.男/女人數 | 3.一個專業人數 |\n");
printf(" | 2.一個班級人數 | 4.結束 |\n");
printf(" |--------------------------------------------------|\n");
printf("請選擇選項:\n");

}

int compareCode(char a[],char b[]) //比較 判斷是否是同一個班級
{
for(int i=0;i<9;i++)
if(a[i]!=b[i]) break;
if(i==9) return 1;
else return 0;
}

//-------------------------------------------------------------------------------------
void main() //主函數從這里開始
{
system("color 3");
printf("\n\n\n");
printf(" \3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\n");
printf(" \3\3\3\3\3\3\3\3\3\3 學 生 證 管 理 程 序 \3\3\3\3\3\3\3\3\n");
printf(" \3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\n");
printf(" \3\3\3\3\3\3 作者: \3\3\3\3\3\3\3\n");
printf(" \3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\n");
int choice;
struct node *studentlist=(struct node*)malloc(sizeof(struct node)); //學生鏈表頭 //////////////////////////////////////////////////////////
studentlist->next=NULL;
struct node *temp=NULL;
struct node *p=(struct node*)malloc(sizeof(struct node));
char tempcode[13]; //臨時學號
char tempclass[11]; //臨時班級
char tempzuanye[20];//臨時專業
int count=0;
int choice6,count_male,count_female;
const int sizeStu=sizeof(struct Student);
struct Student data;

FILE *fp;
if((fp=fopen("d:\\學生證管理程序.dat","rb"))==NULL)
{
fp=fopen("d:\\學生證管理程序.dat","wb");

}
fclose(fp);

fp=fopen("d:\\學生證管理程序.dat","rb");
while(fread(&data,sizeStu,1,fp)==1)
{
p->data=data;
p->next=NULL;
if(studentlist==NULL)
studentlist=p;
else
{ temp=studentlist;
while(temp->next!=NULL){temp=temp->next;}
temp->next=p;
}
p=(struct node*)malloc(sizeof(struct node));

}
fclose(fp);

print_menu(); //列印菜單
scanf("%d",&choice); //讀進選項
while(choice!=7) //未遇到結束鍵
{
switch(choice)
{
//----------------------------------------------------------------
//選項1,增加學生學生證信息
case 1: //輸入一個學生信息

p=(node*) malloc(sizeof(node));
printf("\n請輸入姓名:");
scanf("%s",p->data.name);
printf("\n請輸入性別(男/女):");
scanf("%s",p->data.sex);
printf("\n請輸入學號(12位):");
scanf("%s",p->data.code);
printf("\n請輸入學制(本科生/研究生):");
scanf("%s",p->data.degree);
printf("\n請輸入學院:");
scanf("%s",p->data.department);
printf("\n請輸入專業:");
scanf("%s",p->data.zuanye);
p->next=NULL;
//----------------------------------------------------------鏈表連接
if(studentlist==NULL) { studentlist=p; studentlist->next=NULL;}
else {
temp=studentlist;
while(temp->next!=NULL) ////////////////////
{
temp=temp->next;
}
temp->next=p;
p->next=NULL;
}
break;
//---------------------------------------------------------------------
//選項2,顯示給定學生學生證信息
case 2: printf("\n請輸入學生學號(12位數):");

scanf("%s",tempcode);
temp=studentlist;
while(temp!=NULL) //尋找響應的學生
{
if(strcmp(tempcode,temp->data.code)==0) break;
temp=temp->next;
}
if(temp==NULL) printf("\n不能找到該學生信息.\n");
else {
printf("------------------------------------------------\n");
printf("姓名: %s\n",temp->data.name);
printf("性別: %s\n",temp->data.sex);
printf("學號: %s\n",temp->data.code);
printf("學歷: %s\n",temp->data.degree);
printf("學院: %s\n",temp->data.department);
printf("專業: %s\n",temp->data.zuanye);
printf("------------------------------------------------\n\n");
}
break;
//-----------------------------------------------------------------
//選項3,顯示給定班級的學生信息
case 3:printf("\n請輸入班級號 :"); //輸入班級號
scanf("%s",tempclass);
while(strlen(tempclass)<10) //班級號位數小於10時,重新輸入
{
printf("錯誤的班級號,請重新輸入:");
scanf("%s",tempclass);
}
count=0; //班級學生數
temp=studentlist;
while(temp!=NULL) //檢索鏈表,並列印相應學生的學生證信息
{
if(compareCode(tempclass,temp->data.code)) {//列印屬於這個班級的學生
printf("-----------------------------------------------\n");
printf("姓名: %s\n",temp->data.name);
printf("性別: %s\n",temp->data.sex);
printf("學號: %s\n",temp->data.code);
printf("學歷: %s\n",temp->data.degree);
printf("學院: %s\n",temp->data.department);
printf("專業: %s\n",temp->data.zuanye);
printf("-----------------------------------------------\n");
count++;
}
temp=temp->next;
}
if(count==0) printf("該班級還未有成員.\n");
break;
//-------------------------------------------------------------------
//選項4,修改給定學生的信息
case 4: printf("請輸入要作修改的學生證號:");
scanf("%s",tempcode);
temp=studentlist;
while(temp!=NULL) //尋找響應的學生
{
if(strcmp(tempcode,temp->data.code)==0) break;
temp=temp->next;

}
if(temp==NULL) printf("\n找不到相應學生的信息.\n");//找不到相應的學生
else {
int choice2;
print_menu4();
scanf("%d",&choice2);
while(choice2!=7)
{
switch(choice2)
{
case 1:printf("修改名字:"); //修改名字
scanf("%s",temp->data.name);
break;
case 2:printf("修改性別:");//修改性別
scanf("%s",temp->data.sex);
break;
case 3:printf("修改學號:");//修改學號
scanf("%s",temp->data.code);
break;
case 4:printf("修改學歷 :"); //修改學歷
scanf("%s",temp->data.degree);
break;
case 5:printf("修改學院:"); //修改學院
scanf("%s",temp->data.department);
case 6:printf("修改專業:");//修改專業
scanf("%s",temp->data.zuanye);
break;
default: break;
}
printf("請選擇選項:");
scanf("%d",&choice2); //再次選擇菜單選項
}
}
break;
//----------------------------------------------------------------
//選項5,刪除給定學號的學生
case 5: printf("\n輸入學號 :"); //輸入學號
scanf("%s", tempcode);
temp=studentlist;
p=temp;
while(temp!=NULL) //尋找相應的學生
{
if(strcmp(tempcode,temp->data.code)==0) break;
p=temp;
temp=temp->next;
}
if(temp==NULL) printf("\n找不到該學生信息.\n"); //找不到
else if(temp==studentlist) {studentlist=temp->next; free(temp);}
else {
p->next=temp->next;//找到時刪除
free(temp);
}
break;
//------------------------------------------------------------------
//選項6,統計功能
case 6: print_static_function_menu();
scanf("%d",&choice6);//選擇菜單選項
while(choice6!=4)
{
switch(choice6)
{
//選項1,統計男女個數
case 1:temp=studentlist;
count_male=0; //男生數
count_female=0; //女生數
while(temp!=NULL) //檢索鏈表查找
{
if(strcmp(temp->data.sex,"男")==0) count_male++;
if(strcmp(temp->data.sex,"女")==0) count_female++;
temp=temp->next;
}
printf("男: %d\n",count_male);
printf("女: %d\n",count_female);
break;
//選項2,統計給定班級的人數
case 2:printf("請輸入班級號:");
scanf("%s",tempclass); //給定班級
temp=studentlist;
count=0;
while(temp!=NULL) //檢索鏈表查找
{
if(compareCode(temp->data.code,tempclass)==1) count++;
temp=temp->next;
}
printf("%s班級總人數為: %d\n",tempclass,count);
break;
case 3:printf("請輸入專業:");
scanf("%s",tempzuanye); //給定專業
temp=studentlist;
count=0;
while(temp!=NULL) //檢索鏈表查找
{
if(strcmp(temp->data.zuanye,tempzuanye)==0) count++;
temp=temp->next;
}
printf("%s專業總人數為: %d\n",tempzuanye,count);
break;
//預設項
default: break;
}
printf("請選擇選項:");
scanf("%d",&choice6);
}

break;
//-----------------------------------------------------------------
default:free(p); break;
}

if((fp=fopen("d:\\學生證管理程序.dat","wb"))==NULL)
{
printf("文件無法打開!");
return;
}
p=studentlist;
while(p)
{
fwrite(&p->data,sizeStu,1,fp);
p=p->next;
}
fclose(fp);
print_menu( );//列印菜單 進入循環
scanf("%d",&choice);
}
}

I. 用C語言寫個學生成績管理系統程序

#include <memory.h> /* TC mem.h */
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>

#define FILE1 "1.txt"
#define FILE2 "2.txt"
#define FILE3 "3.txt"
#define FILE4 "4.txt"
struct STUDENT
{
char name[20];
int number;
int chinese;
int math;
int english;
int total;
};
typedef STUDENT student;
int count = 0;
student *ss = NULL;

void combine2files()
{
FILE *in, *out;
student s;

out = fopen(FILE3, "w");
in = fopen(FILE1, "r");

if (!in || !out)
{
printf("can't open file(s)\n");
exit(-1);
}

while (1)
{
s.name[0] = '\0';
fscanf(in, "%s %d %d %d %d", s.name, &s.number, &s.chinese, &s.math, &s.english);

if (s.name[0] == '\0')
break;

++count;
fprintf(out, "%s %d %d %d %d\n", s.name, s.number, s.chinese, s.math, s.english);
/* printf("%s %d %d %d %d\n", s.name, s.number, s.chinese, s.math, s.english); */
}

fclose(in);
fflush(in);
in = fopen(FILE2, "r");

if (!in)
{
fclose(out);
printf("can't open file\n");
exit(-1);
}

while (1)
{
s.name[0] = '\0';
fscanf(in, "%s %d %d %d %d", s.name, &s.number, &s.chinese, &s.math, &s.english);

if (s.name[0] == '\0')
break;

++count;
fprintf(out, "%s %d %d %d %d\n", s.name, s.number, s.chinese, s.math, s.english);
/* printf("%s %d %d %d %d\n", s.name, s.number, s.chinese, s.math, s.english); */
}

fclose(in);
fclose(out);
}

void check4makeup()
{
FILE *in, *out;
student s;

out = fopen(FILE4, "w");
in = fopen(FILE3, "r");

if (!in || !out)
{
printf("can't open file(s)\n");
exit(-1);
}

while (1)
{
s.name[0] = '\0';
fscanf(in, "%s %d %d %d %d", s.name, &s.number, &s.chinese, &s.math, &s.english);

if (s.name[0] == '\0')
break;

if (s.chinese < 60 || s.math < 60 || s.english < 60)
fprintf(out, "%s %d %d %d %d\n", s.name, s.number, s.chinese, s.math, s.english);
}

fclose(in);
fclose(out);
}

void selectsort(int type = 0)
{
int i, j, k;
student s;

for (i = 0; i < count - 1; ++i)
{
k = i;
for (j = i + 1; j < count; ++j)
{
if (type == 0)
{
if (ss[k].total < ss[j].total)
k = j;
}
else
{
if (strcmp(ss[k].name, ss[j].name) < 0)
k = j;
}
}

if (k != i)
{
memcpy(&s, &ss[i], sizeof(student));
memcpy(&ss[i], &ss[k], sizeof(student));
memcpy(&ss[k], &s, sizeof(student));
}
}
}

void bubblesort()
{
int i, j;
student s;

for (i = 0; i < count - 1; ++i)
{
for (j = count - 1; j > i; --j)
if (ss[j].total > ss[j-1].total)
{
memcpy(&s, &ss[j-1], sizeof(student));
memcpy(&ss[j-1], &ss[j], sizeof(student));
memcpy(&ss[j], &s, sizeof(student));
}
}
}

void outputrecords()
{
int i;
printf("No:\tName:\t\tTotal:\tChinese:\tMath:\tEnglish:\n");

for (i = 0; i < count; ++i)
{
printf("%d\t%s\t\t%d\t%d\t\t%d\t%d\n",
ss[i].number, ss[i].name, ss[i].total, ss[i].chinese, ss[i].math, ss[i].english);
}
}

void sortrecords()
{
int i = 0;
FILE *fp;
char choice;

fp = fopen(FILE3, "r+");

if (!fp)
{
printf("can't open file\n");
exit(-1);
}

while (1)
{
fscanf(fp, "%s %d %d %d %d", ss[i].name, &ss[i].number,
&ss[i].chinese, &ss[i].math, &ss[i].english);

if (i == count)
break;

ss[i].total = ss[i].chinese + ss[i].math + ss[i].english;
++i;
}

rewind(fp);
puts("Please select the sort method:");
puts("1. Bubble Sort");
puts("2. Selection Sort");
choice = getchar();

if (choice == '1')
bubblesort();
else
selectsort();

rewind(fp);
fclose(fp);
}
int binsearch(const char *name)
{
int low = 0;
int high = count - 1;

while (low <= high)
{
int mid = (low + high) / 2;

if (!strcmp(ss[mid].name, name))
{
return mid;
}
else
{
if (strcmp(ss[mid].name, name) > 0)
high = mid - 1;
else
low = mid + 1;
}
}

return -1;
}

int seqsearch(const char *name)
{
int i;

for (i = 0; i < count; ++i)
{
if (!strcmp(ss[i].name, name))
return i;
}
return -1;
}

void findrecord()
{
char nm[20], choice;
int i;

putchar('\n');
selectsort(1);
while (1)
{
printf("Please input the student name you want to find(!=end):\n");
scanf("%s", nm);

if (nm[0] == '!')
break;

puts("Please select the search method:");
puts("1. binary Search");
puts("2. Sequence Search");
choice = getchar();
getchar();

if (choice == '1')
i = binsearch(nm);
else
i = seqsearch(nm);

if (i != -1)
printf("No: %d Name: %s Total: %d Chinese: %d Math: %d English %d\n",
ss[i].number, ss[i].name, ss[i].total, ss[i].chinese, ss[i].math, ss[i].english);
else
printf("Not Found\n");
}
}

void main()
{
combine2files();
ss = (student *)malloc(sizeof(student) * count);
check4makeup();
sortrecords();
outputrecords();
findrecord();
free(ss);
}

熱點內容
武漢大學學生會輔導員寄語 發布:2021-03-16 21:44:16 瀏覽:612
七年級學生作文輔導學案 發布:2021-03-16 21:42:09 瀏覽:1
不屑弟高考成績 發布:2021-03-16 21:40:59 瀏覽:754
大學畢業證會有成績單 發布:2021-03-16 21:40:07 瀏覽:756
2017信陽學院輔導員招聘名單 發布:2021-03-16 21:40:02 瀏覽:800
查詢重慶2018中考成績查詢 發布:2021-03-16 21:39:58 瀏覽:21
結業考試成績怎麼查詢 發布:2021-03-16 21:28:40 瀏覽:679
14中醫醫師資格筆試考試成績查分 發布:2021-03-16 21:28:39 瀏覽:655
名著賞析課程標准 發布:2021-03-16 21:27:57 瀏覽:881
北京大學商業領袖高端培訓課程 發布:2021-03-16 21:27:41 瀏覽:919