c語言學生成績管理系統源代碼
1. 求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");
}
你可以改一下。希望對你有用
2. 怎樣用C語言寫學生成績管理系統
程序如下: #include
3. 學生成績管理系統C語言代碼
#include"stdio.h"
#include<string.h>
#include<stdlib.h>
#define N 30
struct student
{
int num;
char name[20];
int age;
int Math;
int English;
int Physical;
long int sum;
}stu[N];
enter()
{int i,n;
printf("How many students(1-%d)?:",N);
scanf("%d",&n);
printf("\nEnter data now\n\n");
for(i=0;i<n;i++)
{printf("\n Input %dth student record.\n",i+1);
input(i);
}
if(i!=0) save(n);
printf_back(); /* browse or back */
}
add()
{int i,n,m,k;
FILE *fp;
n=load();
printf("How many students are you want to add(1-%d)?:",N-n);
scanf("%d",&m);
k=m+n;
for(i=n;i<k;i++)
{printf("\n Input %dth student record.\n",i+1);
input(i);
}
if((fp=fopen("score.txt","ab"))==NULL)
{printf("Cannot open file.\n");
}
for(i=n;i<k;i++)
if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
printf("file write error.\n");
fclose(fp);
printf_back();
}
/* insert()
{int n,c;
struct student s;
n=load();
puts("\n Input one data.\n");
do
{input(n);
printf_face();
printf_one(n);
printf("\n\nAre you sure?\n\n\t 1.Sure\t2.cancel and again\t3.Back without save [ ]\b\b");
scanf("%d",&c);
if(c==1)
{
save(n+1);
printf_back();
}
else if(c!=2) menu();
}
while(c==2);
} */
modify()
{struct student s;
FILE *fp;
int i,n,k,w0=1,w1,w2=0;
n=load();
do
{
k=-1;
printf_face();
for(i=0;i<n;i++)
{if((i!=0)&&(i%10==0))
{printf("\n\nRemember NO.031073- which needed modify.Pass any key to continue ...");
getch();
puts("\n\n");
}
printf_one(i);
printf("\n");
}
do
{printf("\n\nEnter NO.031073- that you want to modify! NO.:031073-");
scanf("%d",&s.num);
for(i=0;i<n;i++)
if(s.num==stu[i].num)
{k=i;
s=stu[i]; /* chengji beifei */
}
if(k==-1) printf("\n\nNO exist!please again");
}
while(k==-1);
printf_face();
printf_one(k);
w1=modify_data(k,n);
if(w1==1)
{printf("\nSuccessful ^_^.\n\nAre you modify another?\n\n\t1.Yes2.Back with save\t[ ]\b\b");
scanf("%d",&w0);
w2=1;
}
else
{w0=0; /* end */
if(w2==1)
stu[k]=s;
}
if(w0!=1&&w2==1) save(n); /* w0!=1 return w2==1 modify */
}
while(w0==1);
menu();
}
delete()
{struct student s;
FILE *fp;
int i,n,k,w0=1,w1,w2=0;
n=load();
do
{
k=-1;
printf_face();
for(i=0;i<n;i++)
{if((i!=0)&&(i%10==0))
{printf("\n\nRemember NO.031073- which needed delete.Pass any key to continue ...");
getch();
puts("\n\n");
}
printf_one(i);
printf("\n");
}
do
{printf("\n\nEnter NO.031073- that you want to delete! NO.:031073-");
scanf("%d",&s.num);
for(i=0;i<n;i++)
if(s.num==stu[i].num)
{k=i;
s=stu[i]; /* chengji beifei */
}
if(k==-1) printf("\n\nNO exist!please again");
}
while(k==-1);
printf_face();
printf_one(k);
printf("\nAre you sure?\n\n\t1.Sure2.Back without save in this time [ ]\b\b");
scanf("%d",&w1);
if(w1==1)
{
stu[k].sum=0;
printf("\nSuccessful ^_^.\n\nAre you delete another?\n\n\t1.Yes2.Back with save\t[ ]\b\b");
scanf("%d",&w0);
w2=1;
}
else
{w0=0; /* end */
if(w2==1)
stu[k]=s;
}
if(w0!=1&&w2==1) save(n);
}
while(w0==1);
menu();
}
modify_score()
{struct student s;
FILE *fp;
int i,n,k,w0=1,w1,w2=0;
n=load();
do
{
k=-1;
printf_face();
for(i=0;i<n;i++)
{if((i!=0)&&(i%10==0))
{printf("\n\nRemember NO.031073 which score needed modify.Pass any key to continue ...");
getch();
puts("\n\n");
}
printf_one(i);
printf("\n");
}
do
{printf("\n\nEnter NO.031073- that you want to modify! NO.:031073-");
scanf("%d",&s.num);
for(i=0;i<n;i++)
if(s.num==stu[i].num)
{k=i;
s=stu[i]; /* chengji beifei */
}
if(k==-1) printf("\n\nNO exist!please again");
}
while(k==-1);
printf_face();
printf_one(k);
w1=modify_score1(k);
if(w1==1)
{printf("\nSuccessful ^_^.\n\nAre you modify another score?\n\n\t1.Yes2.Back with save\t[ ]\b\b");
scanf("%d",&w0);
w2=1;
}
else
{w0=0; /* end */
if(w2==1)
stu[k]=s;
}
if(w0!=1&&w2==1) save(n); /* w0!=1 return w2==1 modify */
}
while(w0==1);
menu();
}
order()
{int i,j,k,n;
struct student s;
n=load();
for(i=0;i<n-1;i++)
{k=i;
for(j=i+1;j<n;j++)
if(stu[j].num<stu[k].num) k=j;
s=stu[i];stu[i]=stu[k];stu[k]=s;
}
save(n);
puts("\n\n");
printf_back();
}
browse()
{int i,j,n;
n=load();
printf_face();
for(i=0;i<n;i++)
{if((i!=0)&&(i%10==0))
{printf("\n\nPass any key to contiune ...");
getch();
puts("\n\n");
}
printf_one(i);
printf("\n");
}
printf("\tThere are %d record.\n",n);
printf("\nPass any key to back...");
getch();
menu();
}
save(int n)
{FILE *fp;
int i;
if((fp=fopen("score.txt","wb"))==NULL)
{printf("\nCannot open file\n");
return NULL;
}
for(i=0;i<n;i++)
if(stu[i].sum!=0)
if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
printf("file write error\n");
fclose(fp);
}
load()
{FILE *fp;
int i;
if((fp=fopen("score.txt","rb"))==NULL)
{printf("\nCannot open file\n");
return NULL;
}
for(i=0;!feof(fp);i++)
fread(&stu[i],sizeof(struct student),1,fp);
fclose(fp);
return(i-1);
}
no_input(int i,int n)
{int k,w1;
do
{w1=0;
printf("NO.:031073-");
scanf("%d",&stu[i].num);
if(stu[i].num<1 || stu[i].num>N)
{puts("Input error! Only be made up of(1-N).Please reinput!\n");
w1=1;
}
if(w1!=1)
for(k=0;k<n;k++)
if(k!=i&&(stu[k].num==stu[i].num))
{puts("This record is exist. Please reinput!\n");
w1=1;break;
}
}
while(w1==1);
}
enter_score(int i)
{printf("Math English Physical");
scanf("%d %d %d",&stu[i].Math,&stu[i].English,&stu[i].Physical);
}
sum(int i)
{
stu[i].sum=stu[i].Math+stu[i].English+stu[i].Physical;
}
input(int i)
{no_input(i,i);
printf("name: age:");
scanf("%s %d",stu[i].name,&stu[i].age);
enter_score(i);
sum(i);
}
modify_score1(int i)
{int c,w1;
do
{
puts("\nmodify by=>\n\n 1.Math 2.English 3.Physical4.all score 5.cancel and back");
printf("Which you needed?:[ ]\b\b");
scanf("%d",&c);
if(c>5||c<1)
{puts("\nChoice error! Please again!");
getchar();
}
}
while(c>5||c<1);
do
{switch(c)
{
case 1:printf("Math:");scanf("%d",&stu[i].Math);break;
case 2:printf("English:");scanf("%d",&stu[i].English);break;
case 3:printf("Physical:");scanf("%d",&stu[i].Physical);break;
case 4:enter_score(i);break;
case 5:break;
}
if(c>0&&c<5) sum(i);
puts("\nNow:\n");
printf_face();
printf_one(i);
printf("\nAre you sure?\n\n\t1.Sure 2.No and remodify3.Back without save in this time [ ]\b\b");
scanf("%d",&w1);
}
while(w1==2);
return(w1);
}
modify_data(int i,int n)
{int c,w1;
do
{
puts("\nmodify by=>\n\n 1.NO. 2.name 3.age 4.Math 5.English 6.Physical7.all score 8.all data 9.cancel and back");
printf("Which you needed?:[ ]\b\b");
scanf("%d",&c);
if(c>9||c<1)
{puts("\nChoice error! Please again!");
getchar();
}
}
while(c>9||c<1);
do
{switch(c)
{case 1:no_input(i,n);break;
case 2:printf("name:");scanf("%s",stu[i].name);break;
case 3:printf("age:");scanf("%d",&stu[i].age);break;
case 4:printf("Math:");scanf("%d",&stu[i].Math);break;
case 5:printf("English:");scanf("%d",&stu[i].English);break;
case 6:printf("Physical:");scanf("%d",&stu[i].Physical);break;
case 7:enter_score(i);break;
case 8:input(i);break;
case 9:break;
}
if(c>3&&c<8) sum(i);
puts("\nNow:\n");
printf_face();
printf_one(i);
printf("\nAre you sure?\n\n\t1.Sure 2.No and remodify3.Back without save in this time [ ]\b\b");
scanf("%d",&w1);
}
while(w1==2);
return(w1);
}
printf_face()
{printf("\nNO.031073 name age Math English Physical sum\n");
}
printf_one(int i)
{
printf("%6d %8s %4d",stu[i].num,stu[i].name,stu[i].age);
printf("%5d %5d %8d %10d",stu[i].Math,stu[i].English,stu[i].Physical,stu[i].sum);
}
printf_back()
{int k,w;
printf("\n\n\tSuccessful.^_^\n\n");
printf("What do you want to do?\n\n\t1.Browse all now\t2.Back:[ ]\b\b");
scanf("%d",&w);
if(w==1) browse();
else menu();
}
menu()
{int w1;
char n;
do
{
puts("\t\t****************MENU****************\n\n");
puts("\t\t\t\tA.Enter new data");
puts("\t\t\t\tB.Addition data");
puts("\t\t\t\tC.Modify data");
puts("\t\t\t\tD.Delete data");
puts("\t\t\t\tE.Modify score");
puts("\t\t\t\tF.Order by number");
puts("\t\t\t\tG.Browse all");
puts("\t\t\t\tH.Exit");
puts("\n\n\t\t************************************\n");
printf("Choice your number(A-H):[ ]\b\b");
n=getchar();
printf("\n");
if(n<'A'||n>'H')
w1=1;
else w1=0;
}
while(w1==1);
switch(n)
{case 'A':enter();break;
case 'B':add();break;
case 'C':modify();break;
case 'D':delete();break;
case 'E':modify_score();break;
case 'F':order();break;
case 'G':browse();break;
case 'H':exit(0);
}
}
char password[7]="123456";
main()
{
char s[7];
printf("\t\t請輸入密碼:\n\t\t\n\t\t");
scanf("%s",s);
if(!strcmp(s,password))
{
printf("\n\t\t恭喜你進入學生成績管理系統\n");
menu();
}
else
{
printf("\t\t 密碼錯誤\n\n");
main();
}
}
4. c語言程序學生成績管理系統源代碼
頭文件:::
#ifndef H_STUDENT_HH
#define H_STUDENT_HH
#include "stdio.h"
#include "string.h"
#include "malloc.h"
#define LEN sizeof(struct message_student) /*一個結構體數組元素的長度*/
#define numsubs 5 /*學科數目*/
typedef struct message_student /*結構體定義*/
{
char number[6];
char name[20];
char sex[4];
float subject[numsubs];
float score;
float average;
int index;
}student;
extern int numstus; /*學生數目*/
extern student *pointer; /*指向結構體數組*/
extern int lens;
int menu_select(); /*函數聲明*/
int openfile(student stu[]);
int findrecord(student stud[]);
int writetotext(student stud[]);
void welcome();
void display1();
void showtable();
void sort(student stu[]);
void deleterecord(student stu[],int i);
void addrecord(student stud[]);
void display(student stud[],int n1,int n2);
void amendrecord(student stud[]);
void count(student stud[]);
void sortnum(student stud[]);
void sortnum2(student stud[]);
void sortname(student stud[]);
void sortname2(student stud[]);
void sortcount(student stud[]);
void sortcount2(student stud[]);
void statistic(student stud[]);
void display1();
#endif
#include "head.h"
int menu_select()
{
char c;
printf("\n\n");
printf(" | 1. 增加學生記錄 5.統計信息 |\n");
printf(" | 2. 查詢學生記錄 6.打開文件 |\n");
printf(" | 3. 修改學生記錄 7.保存文件 |\n");
printf(" | 4. 學生紀錄排序 8.顯示記錄 |\n");
printf(" | 0.退出系統 |\n");
printf("\n\n");
printf("請選擇(0-8):");
c=getchar();
getchar();
return (c-'0');
}
#include "head.h"
int findrecord(student stud[]) /*查找信息*/
{
char str[2];
int i,num;
if(numstus==0)
{
printf("沒有可被查找的記錄\n");
return -1;
}
else
{
printf("以何種方式查找?\n1.學號\t2.姓名\t3.名次\n");
gets(str);
if(str[0]=='1') /*按學號查找*/
{
printf("請輸入學號:");
gets(str);
for(i=0;i<=numstus;i++)
if(strcmp(str,stud[i].number)==0)
{
display(stud,i,i);
break;
}
else continue;
}
else if(str[0]=='2') /*按姓名查找*/
{
printf("請輸入姓名:");
gets(str);
for(i=0;i<=numstus;i++)
if(strcmp(str,stud[i].name)==0)
{
display(stud,i,i);
break;
}
else continue;
}
else if(str[0]=='3') /*按名次查找*/
{
printf("請輸入名次:");
scanf("%d",&num);
getchar();
for(i=0;i<=numstus;i++)
if(num==stud[i].index)
{
display(stud,i,i);
break;
}
else continue;
}
if(i>numstus)
{
printf("沒有查找所要的信息。\n");
return -1;
}
return i;
}
}
#include"head.h"
int openfile(student stu[])
{
int i=0,j;
FILE *fp;
char filename[20],str[2];
if(numstus!=0)
{
printf("已經有記錄存在,是否保存?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')
writetotext(stu);
}
printf("請輸入文件名:");
gets(filename);
numstus=0;
if((fp=fopen(filename,"rb+"))==NULL)
{
printf("無法打開該文件\n");
return(-1);
}
fscanf(fp,"%d",&numstus);
fgetc(fp);
while(i<numstus)
{
fscanf(fp,"%s",stu[i].number);
fscanf(fp,"%s",stu[i].name);
fscanf(fp,"%s",stu[i].sex);
for(j=0;j<numsubs;j++)
fscanf(fp,"%f",&stu[i].subject[j]);
fscanf(fp,"%f",&stu[i].score);
fscanf(fp,"%f",&stu[i].average);
fscanf(fp,"%d",&stu[i].index);
i++;
}
fclose(fp);
printf("文件讀取成功\n");
printf("是否顯示紀錄?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')
display(stu,0,numstus-1);
return(0);
}
#include "head.h"
void sort(student stud[])
{
int i,j=0;
char str[5];
student *p;
p=stud;
if(numstus==0)
{
printf("沒有可供查詢的記錄!");
}
while(1)
{
for(i=0;;i++)
{
printf(" 請輸入查詢方式:");
printf("(直接輸入回車則結束查詢操作)\n");
printf("1.按照學號\t");
printf("2.按照姓名\t");
printf("3.按照名次\n");
gets(str);
if(strlen(str)==0) break;
if(str[0]=='1')
{
printf("請輸入排序次序:\n");
printf("1.升序排列\t");
printf("2.降序排列\n");
gets(str);
if(str[0]=='1')
sortnum2(p);
else
sortnum(p);
display(stud,0,numstus-1);
}
else if(str[0]=='2')
{
printf("請輸入排序次序:\n");
printf("1.升序排列\t");
printf("2.降序排列\n");
gets(str);
if(str[0]=='1')
sortname2(p);
else
sortname(p);
display(stud,0,numstus-1);
}
else if(str[0]=='3')
{
printf("請輸入排序次序:\n");
printf("1.升序排列\t");
printf("2.降序排列\n");
gets(str);
if(str[0]=='1')
sortcount2(p);
else
sortcount(p);
display(stud,0,numstus-1);
}
else printf("請輸入1~3");
printf("是否退出排序?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y') break;
}
return;
}
}
void sortnum(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i<numstus;i++)
for(j=0;j<numstus-i-1;j++)
{
if(strcmp(stud[j+1].number,stud[j].number)>0)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortnum2(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i<numstus;i++)
for(j=0;j<numstus-i-1;j++)
{
if(strcmp(stud[j].number,stud[j+1].number)>0)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortname(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i<numstus;i++)
for(j=0;j<numstus-i-1;j++)
{
if(strcmp(stud[j+1].name,stud[j].name)>0)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortname2(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i<numstus;i++)
for(j=0;j<numstus-i-1;j++)
{
if(strcmp(stud[j].name,stud[j+1].name)>0)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortcount(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i<numstus;i++)
for(j=0;j<numstus-i-1;j++)
{
if(stud[j+1].index>stud[j].index)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortcount2(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i<numstus;i++)
for(j=0;j<numstus-i-1;j++)
{
if(stud[j].index>stud[j+1].index)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
#include"head.h"
void statistic(student stud[]) /*新增功能,輸出統計信息*/
{
int i,j=0,k=0;
char c1,str[2];
float average[numsubs],sum=0;
if(numstus==0)
printf("沒有可被查找的記錄\n");
else
{
while(1)
{
printf("下面將統計考試成績\n");
printf("請選擇你要統計哪科的成績 1.A\t2.B\t3.C\t4.D\t5.E\n");
c1=getchar();
printf("\t一共有個%d記錄\n",numstus); /*總共記錄數*/
switch(c1)
{
case '1':
for(i=0;i<numstus;i++) /*循環輸入判斷*/
{
sum+=stud[i].subject[0];
if(stud[k].subject[0]>stud[i].subject[0]) k=i;
if(stud[j].subject[0]<stud[i].subject[0]) j=i;
}
average[0]=sum/numstus;
printf("\t科目A的最高分:\n"); /*最高分*/
printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[0]);
printf("\t科目A的最低分是:\n"); /*最低分*/
printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[0]);
printf("\t科目A的平均分是 %5.2f\n",average[0]); /*平均分*/
break;
case '2':
for(i=0;i<numstus;i++) /*循環輸入判斷*/
{
sum+=stud[i].subject[1];
if(stud[k].subject[1]>stud[i].subject[1]) k=i;
if(stud[j].subject[1]<stud[i].subject[1]) j=i;
}
average[1]=sum/numstus;
printf("\t科目B的最高分:\n"); /*最高分*/
printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[1]);
printf("\t科目B的最低分是:\n"); /*最低分*/
printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[1]);
printf("\t科目B的平均分是 %5.2f\n",average[1]); /*平均分*/
break;
case '3':
for(i=0;i<numstus;i++) /*循環輸入判斷*/
{
sum+=stud[i].subject[2];
if(stud[k].subject[2]>stud[i].subject[2]) k=i;
if(stud[j].subject[2]<stud[i].subject[2]) j=i;
}
average[2]=sum/numstus;
printf("\t科目C的最高分:\n"); /*最高分*/
printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[2]);
printf("\t科目C的最低分是:\n"); /*最低分*/
printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[2]);
printf("\t科目C的平均分是 %5.2f\n",average[2]); /*平均分*/
break;
case '4':
for(i=0;i<numstus;i++) /*循環輸入判斷*/
{
sum+=stud[i].subject[3];
if(stud[k].subject[3]>stud[i].subject[3]) k=i;
if(stud[j].subject[3]<stud[i].subject[3]) j=i;
}
average[3]=sum/numstus;
printf("\t科目D的最高分:\n"); /*最高分*/
printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[3]);
printf("\t科目D的最低分是:\n"); /*最低分*/
printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[3]);
printf("\t科目D的平均分是 %5.2f\n",average[3]); /*平均分*/
break;
case '5':
for(i=0;i<numstus;i++) /*循環輸入判斷*/
{
sum+=stud[i].subject[4];
if(stud[k].subject[4]>stud[i].subject[4]) k=i;
if(stud[j].subject[4]<stud[i].subject[4]) j=i;
}
average[4]=sum/numstus;
printf("\t科目E的最高分:\n"); /*最高分*/
printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[4]);
printf("\t科目E的最低分是:\n"); /*最低分*/
printf("\t\t學號:%s 姓名:%s 分數:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[4]);
printf("\t科目E的平均分是 %5.2f\n",average[4]); /*平均分*/
break;
default:printf("輸入錯誤!請輸入1~5之間的數\n");
}
sum=0;
getchar();
printf("是否繼續進行統計?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y') ;
else break;
}
}
}
#include"head.h"
int writetotext(student stud[]) /*將所有記錄寫入文件*/
{
int i=0,j;
FILE *fp;
char filename[20];
printf("輸入文件名稱:");
gets(filename);
fp=fopen(filename,"w");
fprintf(fp,"%d\n",numstus);
while(i<numstus)
{
fprintf(fp,"%s %s %s ",stud[i].number,stud[i].name,stud[i].sex);
for(j=0;j<numsubs;j++)
fprintf(fp,"%f ",stud[i].subject[j]);
fprintf(fp,"%f %f %d ",stud[i].score,stud[i].average,stud[i].index);
i++;
}
fclose(fp);
printf("已成功存儲!\n");
display(stud,0,numstus-1);
numstus=0;
return 0;
}
#include"head.h"
void welcome()
{
printf("\t*************************************************************\n");
printf("\t\t\t\t這是一個學生成績管理系統\n\t\t\t\t 傾情奉獻 歡迎使用!\n");
printf("\t*************************************************************\n");
}
void showtable()
{
printf("---------------------------------------------------------------------------------------\n");
printf("學號\t姓名\t性別\tA\tB\tC\tD\tE\t總分\t平均分\t名次\n");
printf("---------------------------------------------------------------------------------------\n");
}
void display(student stud[],int n1,int n2)
{
int i;
showtable(); /*顯示表頭*/
for(i=n1;i<=n2;i++)
printf("%s\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%d\t\n",stud[i].number,stud[i].name,stud[i].sex,stud[i].subject[0],stud[i].subject[1],stud[i].subject[2],stud[i].subject[3],stud[i].subject[4],stud[i].score,stud[i].average,stud[i].index);
/*通過循環輸出數據*/
}
void display1()
{
printf("\t\t本系統由計應精英一組親情製作\n\n");
printf("\t\t製作人員列表: (按比劃)\n");
printf("\t\t王慶斌\t\t\t張威\n\t\t李智\t\t\t周在峰\n\t\t楊凱\t\t\t胡楊\n");
printf("\n\n");
getchar();
}
#include"head.h"
#include<string.h>
void amendrecord(student stud[])
{
char str[5]; /*供用戶輸入*/
int i=-1,j;
if(numstus==0) /*沒有記錄返回*/
printf("沒有可供修改的記錄!");
while(i<0)
{
i=findrecord(stud);
if(i>=0)
{
printf("要刪除這個學生的信息嗎?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')
{
deleterecord(stud,i);
count(stud);
}
else
{
printf("確定要修改這個學生的信息嗎?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')
{
printf("下面請重新輸入學生的信息:\n");
printf("請輸入學號:");
gets(stud[i].number);
printf("請輸入姓名:");
gets(stud[i].name);
printf("請輸入性別(男/女 1/0):");
gets(str);
if(str[0]=='0')
strcpy(stud[i].sex,"女");
else
strcpy(stud[i].sex,"男");
stud[i].score=0;
printf("請按順序輸入成績:");
for(j=0;j<numsubs;j++)
{
scanf("%f",&stud[i].subject[j]);
stud[i].score+=stud[i].subject[j];
}
getchar();
stud[i].average=stud[i].score/numsubs;
}
count(stud);
}
display(stud,0,numstus-1);
}
printf("是否繼續進行其他修改?(y/n)\n");
gets(str);
if(str[0]=='y'||str[0]=='Y')
i=-1;
else i=1;
}
}
void deleterecord(student stu[],int i) /*刪除信息*/
{
int j;
while(i>=0)
{
for(j=i;j<numstus;j++)
stu[j]=stu[j+1];
numstus--;
printf("刪除成功!\n");
}
}
void count(student stud[])
{
int i,j;
for(i=0;i<numstus;i++)
{
stud[i].index=1;
for(j=0;j<numstus;j++)
if(stud[j].score>stud[i].score)
stud[i].index++;
}
}
#include "head.h"
void addrecord(student stud[])
{
int i=0,j,num;
char str[5];
if(numstus!=0)
{
printf("已有記錄存在是否覆蓋?(y/n)\n");
gets(str);
if(str[0]=='Y'||str[0]=='y')
i=0;
else i=numstus;
}
printf("請輸入增加的學生信息條目數:");
scanf("%d",&num);
if(i==0)
numstus=num;
else numstus+=num;
if(numstus>lens)
{
lens+=50;
pointer=(student *)realloc(pointer,lens*LEN);
}
printf("請輸入學生信息:\n");
for(;i<numstus;i++)
{
getchar();
printf("請輸入學號:");
gets(pointer[i].number);
printf("請輸入姓名:");
gets(pointer[i].name);
printf("請輸入性別(男/女 1/0):");
gets(pointer[i].sex);
if(pointer[i].sex[0]=='0') strcpy(pointer[i].sex,"女");
else strcpy(pointer[i].sex,"男");
printf("請輸入各科成績:(按ABCDE的順序):");
stud[i].score=0;
for(j=0;j<numsubs;j++)
{
scanf("%f",&stud[i].subject[j]); /*計算總分*/
stud[i].score+=stud[i].subject[j];
}
stud[i].average=stud[i].score/numsubs; /*計算平均分*/
}
count(stud); /*附名次*/
display(stud,0,numstus-1);
getchar();
}#include "head.h"
int numstus;
int lens;
student *pointer;
void main()
{
int i=1;
char str[2];
lens=100;
pointer=(student *)malloc(lens*LEN); /*分配內存*/
numstus=0;
welcome(); /*歡迎界面*/
while(i>0)
{
i=menu_select(); /*控制菜單*/
switch(i)
{
case 1:addrecord(pointer);break; /*增加學生信息*/
case 2:findrecord(pointer);break; /*查詢學生信息*/
case 3:amendrecord(pointer);break; /*修改學生信息*/
case 4:sort(pointer);break; /*學生信息排序*/
case 5:statistic(pointer);break; /*統計信息*/
case 6:openfile(pointer);break; /*打開文件*/
case 7:writetotext(pointer);break; /*保存文件*/
case 8:display(pointer,0,numstus-1);break; /*顯示記錄*/
case 0:
if(numstus!=0) printf("是否保存當前記錄?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')
writetotext(pointer);
i=-1;break; /*退出系統*/
default:printf("請輸入數字0~8:\n");i=1; /*輸入錯誤*/
}
}
printf("\t\t歡迎再次使用本系統。\n\n");
display1();
}
自己一改就能用,給我加分哈!
5. 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';
}
運行測試:
6. c語言編寫查詢學生成績管理程序。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>struct record
{
char xuehao[10];//學號
char name[20]; //姓名
char sex[3];//性別
int ke1;//數學
int ke2 ;//語文
int ke3;//英語
int pin;
}stu[50];
int k=1,n,m;void readfile();
void seek();
void insert();
void del();
void save();
void menu();
void seek()
{int i,j,item,flag;<br>char s1[20];<br>printf("------------------\n");<br>printf("1.按學號查詢\n");<br>printf("2.退出本菜單\n");<br>printf("------------------\n");<br>while(1)<br>{ printf("請選擇子菜單編號:");<br>scanf("%d",&item);<br>flag=0;<br>switch(item)<br>{<br>case 1:<br>printf("請輸入要查詢的學生的學號:\n");<br>scanf("%s",s1);<br>for(i=0;i<n;i++)<br>if(strcmp(stu[i].xuehao,s1)==0)<br>{ flag=1;<br>printf("該學生學號,姓名,性別,數學,語文,英語 分別為:\n");<br>printf(" %s %s %s %d %d %d",stu[i].xuehao,stu[i].name,<br>stu[i].sex,stu[i].ke1,stu[i].ke2,stu[i].ke3);<br>}
if(flag==0)
printf("該學號不存在!\n"); break;
case 2:return;
default:printf("請在1-2之間選擇\n");
}
}
}
void insert()
{ int i=n,j,flag;
printf("請輸入待增加的學生數:\n");
scanf("%d",&m);
do
{ flag=1;
while(flag)
{ flag=0;
printf("請輸入第 %d 個學生的學號:\n",i+1);
scanf("%s",stu[i].xuehao);
for(j=0;j<i;j++)
if(strcmp(stu[i].xuehao,stu[j].xuehao)==0)
{ printf("已有該學號,請檢查後重新錄入!\n");
flag=1;
break;
}
}
printf("請輸入第 %d 個學生的姓名:",i+1);
scanf("%s",stu[i].name);
printf("\n請輸入第 %d 個學生的性別:",i+1);
scanf("%s",stu[i].sex);
printf("\n請輸入第 %d 個學生的數學成績:",i+1);
scanf("%d",&stu[i].ke1);
printf("\n請輸入第 %d 個學生的語文成績:",i+1);
scanf("%d",&stu[i].ke2);
printf("\n請輸入第 %d 個學生的英語成績:",i+1);
scanf("%d",&stu[i].ke3);if(flag==0)
{ i=i;
i++;
}
}while(i<n+m);
n+=m;
printf("錄入完畢!\n\n");
}void del()
{ int i,j,flag=0;
char s1[20];
printf("請輸入要刪除學生的學號:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(stu[i].xuehao,s1)==0)
{ flag=1;
for(j=i;j<n-1;j++)
stu[j]=stu[j+1];
}
if(flag==0)
printf("該學號不存在!\n");
if(flag==1)
{ printf("刪除成功,顯示結果請選擇菜單6\n");
n--;
}
}
void readfile()
{
char buf[80],*p="student.dat";
FILE *fp;
int i=0;
if ((fp=fopen("student.dat","r"))==NULL)
{ printf("Open file %s error! Strike any key to exit!",p);
system("pause");
exit(0);
}
while(fscanf(fp,"%s%s%s%d%d%d",stu[i].xuehao,stu[i].name,
stu[i].sex,&stu[i].ke1,&stu[i].ke2,&stu[i].ke3)==6)
{ i++;
i=i;
}
fclose(fp);
n=i;
printf("錄入完畢!\n");
}void save()
{ int i,j,k,flag=0;
FILE *fp;
fp=fopen("student.dat","w");
for(i=0;i<m;i++)
{
fprintf(fp,"%s%s%d%d%d",stu[i].xuehao,stu[i].name,stu[i].sex,&stu[i].ke1,
&stu[i].ke2,&stu[i].ke3);
fclose(fp);
printf("已儲存");
}
}
void paixu()
{
int i,j,k,t;
for(i=0;i<m;i++)
{
stu[i].pin=(stu[i].ke1+stu[i].ke2+stu[i].ke3)/3;
}
for(i=0;i<=m-2;i++)
{
k=i;
for(j=i+1;j<=m-1;j++)
if(stu[j].pin<stu[k].pin)
k=j;
if(k!=i)
{
t=stu[k].pin;
stu[k].pin=stu[i].pin;
stu[i].pin=t;
}
}
for(i=0;i<m;i++)
{printf("第 %d 個學生的姓名%s:",i+1,stu[i].name);<br> printf("\n第 %d 個學生的性別:%s",i+1,stu[i].sex);<br> printf("\n第 %d 個學生的數學成績:%d",i+1,stu[i].ke1);<br> printf("\n第 %d 個學生的語文成績:%d",i+1,stu[i].ke2);<br> printf("\n第 %d 個學生的英語成績:%d",i+1,stu[i].ke3);<br> printf("\n第 %d 個學生的平均成績:%d",i+1,stu[i].pin);<br> }
}
void menu()
{ int nub;
printf(" \n\n學生成績管理系統\n\n");
printf("*****系統功能菜單*****\n");
printf("----------------------\n");
printf("1.輸入學生信息\n");
printf("2.查詢學生信息\n");
printf("3.按學號刪除信息\n");
printf("4.讀入學生信息\n");
printf("5.保存信息(要把修改保存到文件,退出程序前必須執行本項)\n");
printf("6.查詢學生平均成績信息\n");
printf("0.退出系統\n");
printf("----------------------\n");
printf("請選擇菜單編號:");
scanf("%d",&nub);
switch(nub)
{
case 1:insert();break;
case 2:seek();break;
case 3:del();break;
case 4:readfile();break;
case 5:save();break;
case 6:paixu();break;
case 0:k=0;break;
default:printf("請在0-6之間選擇\n");
}}
void main()
{
while(k)
menu();
}
//平均數是排序後,輸出的,如果你不想直接輸入,那就不要對每個學生進行選擇排序了
7. 【急】求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 read();;
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;
};
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;
}
}
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");
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("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 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 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");
}
8. C語言學生成績管理系統代碼
#include<stdio.h>
#include<string.h>
//外部函數聲明
void menu();
void line();
/* 定義全局變數其中n代表學生人數,ave[5]代表每科成績的平均分,high[5]每科成績的最高分,
min[5]代表每科成績的最低分,student_ave[100]代表每個學生五門成績的平均分*/
int n,i,j;
float ave[5]={0},high[5]={0},min[5]={0},student_ave[100];
//定義全局結構體
struct student
{
long int num; //學生學號
char name[20]; //學生姓名
float score[5]; //學生成績
}stu[100];
//主函數開始
int main()
{
void enter(); //enter:輸入學生成績函數(這是函數聲明)
void export(); //export:輸出學生成績函數(這是函數聲明)
void stat(); //stat:學生成績統計函數(這是函數聲明)
void rank(); //rank:學生成績排名函數(這是函數聲明)
void query(); //query:學生成績查詢函數(這是函數聲明)
//定義內部變數
//界面框架
menu();
printf(" 學生成績管理信息系統\n");
printf(">>請根據以下提示命令字元進行操作!\n");
printf("q:退出 a:成績輸入 p:成績輸出 s:成績統計 w:成績排名 t:成績查詢\n");
menu();
//函數調用,選擇成績管理方式
printf("請選擇成績管理方式>>");
while(1)
{
char c;
printf(">>\n");
scanf("%c",&c);
if (c=='q') printf("這是退出學生成績管理信息系統函數\n>>\n");break;
switch(c)
{
case'a':enter();break;
case'p':export(); break;
case's':stat();break;
case'v':rank();break;
case't':query();break;
default:("命令無效,請重新輸入!\n");
}
}
return 0;
}
//主函數部分結束
//定義函數
void menu()
{
printf("*******************************************************************************\n");
}
//定義下劃線函數
void line()
{
printf("--------------------------------------------------------------------------------\n");
}
//定義學生成績輸入函數開始
void enter()
{
menu();
printf("學生成績輸入\n請按以下格式進行數據輸入\n");
printf("請輸入學生學號姓名>>");
printf(" 學號 學生姓名\n");
printf("請輸入學生成績 >> ");
printf(" A成績 B成績 C成績 D成績 E成績\n");
printf("例如\n請輸入學生學號姓名>>");
printf("2012060402,張三\n");
printf("請輸入學生成績 >> ");
printf("95.5,97.0,89.0,92.0,85.0\n");
menu();
//輸入學生成績格式備注
printf("\n請輸入學生人數 >> ");
scanf("%d",&n);
//用for循環輸入學生成績
for(i=0;i<n;i++)
{
printf("請輸入學生學號姓名>>");
scanf("%ld,%s",&stu[i].num,stu[i].name);
printf("請輸入學生成績 >> ");
scanf("%f",&stu[i].score[0]);
scanf("%f",&stu[i].score[1]);
scanf("%f",&stu[i].score[2]);
scanf("%f",&stu[i].score[3]);
scanf("%f\n",&stu[i].score[4]);
getchar();
student_ave[i]=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2]+stu[i].score[3]+stu[i].score[4])/5;
//用for循環計算每科成績z總分
for(j=0;j<5;j++)
{
ave[j]=ave[j]+stu[i].score[j];
}
//用for循環得出每科成績最高分
for(j=0;j<5;j++)
{
if(high[j]<=stu[i].score[j])
{
high[j]=stu[i].score[j];
}
}
//用for循環得出每科成績最低分
for(j=0;j<5;j++)
{
if(i==0)
{
min[j]=stu[i].score[j];
}
if(min[j]>=stu[i].score[j])
{
min[j]=stu[i].score[j];
}
}
}
//學生成績輸入完成
//用for循環計算每科成績平均分
for(j=0;j<5;j++)
{
ave[j]=ave[j]/n;
}
getchar();
menu();
printf("\n");
}
//定義學生成績輸入函數結束
//定義學生成績輸出函數開始
void export()
{
int i;
printf(" 學號 姓名 成績A 成績B 成績C 成績D 成績E\n");
for(i=0;i<n;i++)
{
printf("%9ld %15s %7.1f %7.1f %7.1f %7.1f %7.1f\n",stu[i].num,stu[i].name,
stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4]);
}
menu();
}
//定義學生成績輸出函數結束
//定義學生成績統計函數開始
void stat()
{
printf("各科平均成績如下!\n");
line();
printf("\n");
printf(" 成績A 成績B 成績C 成績D 成績E\n");
//這是每科成績平均分
for(i=0;i<5;i++)
{
printf(" %6.1f ",ave[i]);
}
printf("\n");
printf("\n");
//只是每科成績的最高分
printf("各科最高分如下!\n");
line();
printf("\n");
printf(" 成績A 成績B 成績C 成績D 成績E\n");
for(j=0;j<5;j++)
{
printf(" %6.1f ",high[j]);
}
printf("\n");
printf("\n");
//這是每科成績最低分
printf("各科最低分如下!\n");
line();
printf("\n");
printf(" 成績A 成績B 成績C 成績D 成績E\n");
for(i=0;i<5;i++)
{
printf(" %6.1f ",min[i]);
}
printf("\n");
printf("\n");
}
//定義學生成績統計函數結束
//定義學生成績排名函數開始
void rank()
{
int k=1,z;
float t=0;
float student_high[100]={0};
printf("學生成績排名如下:\n\n");
line();
printf("\n");
printf("名次 學號 姓名 成績A 成績B 成績C 成績D 成績E 平均分 \n");
//把每個學生五門課的成績按從大到小的順序排列並存在數組student_high[]中去
for(i=0;i<n;i++)
{
student_high[i]=student_ave[i];
}
for(j=0;j<n;j++)
{
for(i=0;i<n-j;i++)
{
if(student_high[i]<=student_high[i+1])
{
t=student_high[i+1];
student_high[i+1]=student_high[i];
student_high[i]=t;
}
}
}
//按成績排名輸出學生成績信息
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(student_high[i]==student_high[i+1])
{
i++;
}
if(student_high[i]==student_ave[j])
{
printf("%d %ld %15s %7.1f %7.1f %7.1f %7.1f %7.1f %7.1f\n",k,stu[j].num,stu[j].name,
stu[j].score[0],stu[j].score[1],stu[j].score[2],stu[j].score[3],stu[j].score[4],student_ave[j]);
for(z=j+1;z<n;z++)
{
if(student_high[i]==student_ave[z])
{
k++;
}
}
}
}
k++;
}
line();
printf("\n");
}
//定義學生成績排名函數結束
//定義學生成績查詢函數開始
void query()
{
//查詢成績格式
char c2,shu_name[20]; //c2代表查詢成績控制字元。shu_name[]代表輸入查詢姓名,shu_num代表輸入查詢學號
int shu_num;
menu();
printf("學生成績查詢\n請按以下方式查詢\na:按學生姓名查詢 b:按學生學號查詢 q:退出\n");
menu();
printf("\n\n");
//選擇查詢方式
while(c2!='q')
{
printf("請選擇查詢成績方式>>");
scanf("%c",&c2);
getchar();
//按姓名查詢成績
if(c2=='a')
{
line();
printf("請輸入學生姓名>>");
scanf("%s",shu_name);
getchar();
for(i=0;i<n;i++)
{
if(strcmp(shu_name,stu[i].name)==0)
{
printf(" 學號 姓名 成績A 成績B 成績C 成績D 成績E\n");
printf("%ld %15s %7.1f %7.1f %7.1f %7.1f %7.1f\n",stu[i].num,stu[i].name,
stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4]);
}
else if(shu_name!=stu[i].name&&i==(n-1))
{
printf("無此學生成績\n");
}
}
line();
printf("\n");
}
//按學號查詢成績
else if(c2=='b')
{
line();
printf("請輸入學生學號>>");
scanf("%d",&shu_num);
getchar();
for(i=0;i<n;i++)
{
if(shu_num==stu[i].num)
{
printf(" 學號 姓名 成績A 成績B 成績C 成績D 成績E\n");
printf("%ld %15s %7.1f %7.1f %7.1f %7.1f %7.1f\n",stu[i].num,stu[i].name,
stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4]);
}
else if(shu_num!=stu[i].num&&i==(n-1))
{
printf("無此學生成績\n");
}
}
line();
printf("\n");
}
}
line();
printf("\n\n");
}
//定義學生成績查詢函數結束
9. 用C語言設計一個學生成績管理系統
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#defineMAX1000
/*定義學生成績信息結構*/
struct stu
{
char id[8];
char name[8];
(9)c語言學生成績管理系統源代碼擴展閱讀:
short:修飾int,短整型數據,可省略被修飾的int。(K&R時期引入)
long:修飾int,長整型數據,可省略被修飾的int。(K&R時期引入)
long long:修飾int,超長整型數據,可省略被修飾的int。(C99標准新增)
signed:修飾整型數據,有符號數據類型。(C89標准新增)
unsigned:修飾整型數據,無符號數據類型。(K&R時期引入)
restrict:用於限定和約束指針,並表明指針是訪問一個數據對象的唯一且初始的方式。(C99標准新增)
復雜類型關鍵字
struct:結構體聲明。(K&R時期引入)
union:聯合體聲明。(K&R時期引入)
enum:枚舉聲明。(C89標准新增)
typedef:聲明類型別名。(K&R時期引入)
sizeof:得到特定類型或特定類型變數的大小。(K&R時期引入)
inline:內聯函數用於取代宏定義,會在任何調用它的地方展開。(C99標准新增)