求C语言学生成绩管理系统,紧急!!!
#include
#include
#include
#define LEN sizeof(struct scorenode)
#define DEBUG
#include
struct scorenode
{int number;/*学号*/
char name[10];/*姓名*/
float yuwen;/*语文成绩*/
float yingyu;/*英语成绩*/
float shuxue;/*数学成绩 */
struct scorenode *next;
};
typedef struct scorenode score;
int n,k;/*n,k为全局变量,本程序中的函数均可以使用它*/
/*==============================================================================================*/
score *creat2311(void)
/*函数creat2311,功能:创建链表,此函数带回一个指向链表头的指针*/
{
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退出!
");
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("学号重复,请重输!
");
goto repeat1;
/*当输入的学号已经存在,程序报错,返回前面重新输入*/
}
}
}
}
printf("请输入学生姓名:");
scanf("%s",&p1->name);/*输入学生姓名*/
printf("请输入语文成绩(0~100):");/*输入语文成绩,成绩应在0-100*/
scanf("%f",&p1->yuwen);
while(p1->yuwenyuwen>100)
{getchar();
printf("输入错误,请重新输入语文成绩");/*输入错误,重新输入语文成绩直到正确为止*/
scanf("%f",&p1->yuwen);}
printf("请输入英语成绩(0~100):");/*输入英语成绩,成绩应在0-100*/
scanf("%f",&p1->yingyu);
while(p1->yingyuyingyu>100)
{getchar();
printf("输入错误,请重新输入英语成绩");/*输入错误,重新输入英语成绩直到正确为止*/
scanf("%f",&p1->yingyu);}
printf("请输入数学成绩(0~100):");/*输入数学成绩,成绩应在0-100*/
scanf("%f",&p1->shuxue);
while(p1->shuxueshuxue>100)
{getchar();
printf("输入错误,请重新输入数学成绩");
scanf("%f",&p1->shuxue);}/*输入错误,重新输入数学成绩直到正确为止*/
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退出!
");
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("学号重复,请重输!
");
goto repeat2;
/*当输入的学号已经存在,程序报错,返回前面重新输入*/
}
}
}
}
printf("请输入学生姓名:");
scanf("%s",&p1->name);/*输入学生姓名*/
printf("请输入语文成绩(0~100):");
scanf("%f",&p1->yuwen);/*输入语文成绩,成绩应在0-100*/
while(p1->yuwenyuwen>100)
{getchar();
printf("输入错误,请重新输入语文成绩");
scanf("%f",&p1->yuwen);}/*输入错误,重新输入语文成绩直到正确为止*/
printf("请输入英语成绩(0~100):");
scanf("%f",&p1->yingyu);/*输入英语成绩,成绩应在0-100*/
while(p1->yingyuyingyu>100)
{getchar();
printf("输入错误,请重新输入英语成绩");
scanf("%f",&p1->yingyu);}/*输入错误,重新输入英语成绩直到正确为止*/
printf("请输入数学成绩(0~100):");
scanf("%f",&p1->shuxue);/*输入数学成绩,成绩应在0-100*/
while(p1->shuxueshuxue>100)
{getchar();
printf("输入错误,请重新输入数学成绩");
scanf("%f",&p1->shuxue);}/*输入错误,重新输入数学成绩直到正确为止*/
}
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->yuwen;
max->yuwen=p1->yuwen;
p1->yuwen=fen;
/*交换前后结点中的语文成绩,使之与学号相匹配*/
fen=max->yingyu;
max->yingyu=p1->yingyu;
p1->yingyu=fen;
/*交换前后结点中的英语成绩,使之与学号相匹配*/
fen=max->shuxue;
max->shuxue=p1->shuxue;
p1->shuxue=fen;
/*交换前后结点中的数学成绩,使之与学号相匹配*/
}
}
max=head;p1=head;/*重新使max,p指向链表头*/
}
p2->next=NULL;/*链表结尾*/
printf("输入的学生数为:%d个!
",n);
return(head);
}
/*==============================================================================================*/
/*==============================================================================================*/
score *load2311(score *head)
/*函数load2311,功能:从文件读入学生记录*/
{ score *p1,*p2;
int m=0;
char filepn[10];
FILE *fp;
printf("请输入文件路径及文件名:");
scanf("%s",filepn);/*输入文件路径及名称*/
if((fp=fopen(filepn,"r+"))==NULL)
{
printf("不能打开文件!
");
return 0;
}
fscanf(fp," 考试成绩管理系统
");
fscanf(fp," 作者:梅雪 班级:03电信 学号:303073011
");
fscanf(fp,"-----------------------------------------
");
fscanf(fp,"|学号|姓名|语文|英语|数学|
");
fscanf(fp,"-----------------------------------------
");/*读入表格域*/
printf(" 考试成绩管理系统
");
printf(" 作者:梅雪 班级:03电信 学号:303073011
");
printf("-----------------------------------------
");
printf("|学号|姓名|语文|英语|数学|
");
printf("-----------------------------------------
");/*打印表格域*/
m=m+1;
if(m==1)
{
p1=(score *)malloc(LEN); /*开辟一个新单元*/
fscanf(fp,"%d%s%f%f%f",&p1->number,p1->name,&p1->yuwen,&p1->yingyu,&p1->shuxue);
printf("|%d|%s|%.1f|%.1f|%.1f|
",p1->number,p1->name,p1->yuwen,p1->yingyu,p1->shuxue);
/*文件读入与显示*/
head=NULL;
do
{
n=n+1;
if(n==1) head=p1;
else {p2->next=p1;
p2=p1};
p1=(score *)malloc(LEN); /*开辟一个新单元*/
fscanf(fp,"%d%s%f%f%f
",&p1->number,p1->name,&p1->yuwen,&p1->yingyu,&p1->shuxue);
printf("|%d|%s|%.1f|%.1f|%.1f|
",p1->number,p1->name,p1->yuwen,p1->yingyu,p1->shuxue);
/*文件读入与显示*/
}while(!feof(fp));
p2->next=p1;
p1->next=NULL;
n=n+1;
}printf("-----------------------------------------
");/*表格下线*/
fclose(fp);/*结束读入,关闭文件*/
return (head);
}
/*==============================================================================================*/
/*==============================================================================================*/
score *add2311(score *head,score *stu)
/*函数add2311,功能:追加学生资料,并且将所有学生资料按学号排序*/
{
score *p0,*p1,*p2,*p3,*max;
int i,j;
float fen;
char t[10];
p3=stu=(score *)malloc(LEN);/*开辟一个新单元*/
printf("
输入要增加的学生的资料!");
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("学号重复,请重输!
");
goto repeat4;
/*当输入的学号已经存在,程序报错,返回前面重新输入*/
}
}
}
}
/******************************************************/
printf("输入学生姓名:");
scanf("%s",stu->name); /*输入学生姓名*/
printf("请输入语文成绩(0~100):");
scanf("%f",&stu->yuwen); /*输入语文成绩,成绩应在0-100*/
while(stu->yuwenyuwen>100)
{getchar();
printf("输入错误,请重新输入语文成绩");
scanf("%f",&stu->yuwen);} /*输入错误,重新输入语文成绩直到正确为止*/
printf("请输入英语成绩(0~100):");
scanf("%f",&stu->yingyu);/*输入英语成绩,成绩应在0-100*/
while(stu->yingyuyingyu>100)
{getchar();
printf("输入错误,请重新输入英语成绩");
scanf("%f",&stu->yingyu);}/*输入错误,重新输入英语成绩直到正确为止*/
printf("请输入数学成绩(0~100):");
scanf("%f",&stu->shuxue);/*输入数学成绩,成绩应在0-100*/
while(stu->shuxueshuxue>100)
{getchar();
printf("输入错误,请重新输入数学成绩");
scanf("%f",&stu->shuxue);}/*输入错误,重新输入数学成绩直到正确为止*/
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->yuwen;
max->yuwen=p1->yuwen;
p1->yuwen=fen;
/*交换前后结点中的语文成绩,使之与学号相匹配*/
fen=max->yingyu;
max->yingyu=p1->yingyu;
p1->yingyu=fen;
/*交换前后结点中的英语成绩,使之与学号相匹配*/
fen=max->shuxue;
max->shuxue=p1->shuxue;
p1->shuxue=fen;
/*交换前后结点中的数学成绩,使之与学号相匹配*/
}
}
max=head;p1=head;/*重新使max,p指向链表头*/
} end2:
printf("现在的学生数为:%d个!
",n);
return(head);
}
/*==============================================================================================*/
/*==============================================================================================*/
score *search2311(score *head)
/*函数search2311,功能:查询学生成绩*/
{int number;
score *p1,*p2;
printf("输入要查询的学生的学号,");
scanf("%d",&number);
while(number!=0)
{
if(head==NULL)
{printf("
没有任何学生资料!
");return(head);}
printf("-----------------------------------------
");
printf("|学号|姓名|语文|英语|数学|
");
printf("-----------------------------------------
");/*打印表格域*/
p1=head;
while(number!=p1->number&&p1->next!=NULL)
{p2=p1;p1=p1->next;}
if(number==p1->number)
{printf("|%d|%s|%.1f|%.1f|%.1f|
",p1->number,p1->name,p1->yuwen,p1->yingyu,p1->shuxue);
printf("-----------------------------------------
");}/*打印表格域*/
else
printf("%d不存在此学生!
",number);
printf("输入要查询的学生的学号,");
scanf("%d",&number);
}
printf("已经退出了!
");
return(head);}
/*==============================================================================================*/
/*==============================================================================================*/
score *del2311(score *head)/*函数del2311,功能:删除学生资料*/
{
score *p1,*p2;
int number;
printf("输入要删除的学生的学号(输入0时退出):");
scanf("%d",&number);
getchar();
while(number!=0)/*输入学号为0时退出*/
{
if(head==NULL)
{
printf("
没有任何学生资料!
");
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
",number);n=n-1;
}
else
printf("%d不存在此学生!
",number);
/*找不到该结点*/
printf("输入要删除的学生的学号:");
scanf("%d",&number);
getchar();
}
#ifdef DEBUG
printf("已经退出了!
");
#endif
printf("现在的学生数为:%d个!
",n);
return(head);
}
/*==============================================================================================*/
/*==============================================================================================*/
void print2311(score *head)
/*函数print2311,功能:显示学生成绩*/
{
score *p;
if(head==NULL)
{printf("
没有任何学生资料!
");}
else
{printf("%d
",n);
printf("-----------------------------------------
");
printf("|学号|姓名|语文|英语|数学|
");
printf("-----------------------------------------
");/*打印表格域*/
p=head;
do
{printf("|%d|%s|%.1f|%.1f|%.1f|
",p->number,p->name,p->yuwen,p->yingyu,p->shuxue);
printf("-----------------------------------------
");/*打印表格域*/
p=p->next;}while (p!=NULL);/*打印完成了*/
}
}
/*==============================================================================================*/
/*==============================================================================================*/
score *statistics2311(score *head)
/*函数statistics2311,功能:统计学生成绩*/
{
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个人总分和平均分2单科平均分3总分最高分4总分最低分
");
scanf("%d",&x);
getchar();
switch(x)
/*用switch语句实现功能选择*/
{
case 1: if(head==NULL)
{printf("
没有任何学生资料!
");return(head);}/*链表为空*/
else
{
printf("---------------------------------------------------------
");
printf("|学号|姓名|语文|英语|数学|总分|平均分|
");
printf("---------------------------------------------------------
");/*打印表格域*/
while(p!=NULL)
{
sum1=p->yuwen+p->yingyu+p->shuxue; /*计算个人总分*/
ave1=sum1/3;/*计算个人平均分*/
printf("|%d|%s|%.1f|%.1f|%.1f|%.1f|%.1f|
",p->number,p->name,p->yuwen,p->yingyu,p->shuxue,sum1,ave1);
/*打印结果*/
printf("---------------------------------------------------------
");/*打印表格域*/
p=p->next;}
}
return(head); break;
case 2: if(head==NULL)
{printf("
没有任何学生资料!
");return(head);}/*链表为空*/
while(p!=NULL)
{
sum1=sum1+p->yuwen;
sum2=sum2+p->yingyu;
sum3=sum3+p->shuxue;/*计算总分*/
y=y+1;
ave1=sum1/y;
ave2=sum2/y;
ave3=sum3/y;/*计算平均分*/
p=p->next;/*使p指向下一个结点*/
}
printf("语文平均分是%.1f
",ave1);
printf("英语平均分是%.1f
",ave2);
printf("数学平均分是%.1f
",ave3);/*打印结果*/
return(head); break;
case 3:
if(head==NULL)
{printf("
没有任何学生资料!
");return(head);}/*链表为空*/
max=p->yuwen+p->yingyu+p->shuxue;
while(i<n)
{
i=i+1;
sum1=p->yuwen+p->yingyu+p->shuxue; /*计算个人总分*/
if(max<sum1)
max=sum1;
p=p->next;
}
printf("总分最高分:%.1f",max);
printf("
");
return(head); break;
case 4: if(head==NULL)
{printf("
没有任何学生资料!
");return(head);}/*链表为空*/
while(p!=NULL)
{
min=p->yuwen+p->yingyu+p->shuxue;
while(p!=NULL)
{sum2=p->yuwen+p->yingyu+p->shuxue;
if(min>sum2)
min=sum2;
p=p->next;
}
}
printf("总分最低分:%.1f",min);
printf("
");
return(head); break;
default :printf("输入错误,请重试!
");
}
return(head);
}
/*==============================================================================================*/
/*==============================================================================================*/
save2311(score *p1)
/*函数save2311,功能:保存学生的资料*/
{
FILE *fp;
char filepn[20];/*用来存放文件保存路径以及文件名*/
printf("请输入文件路径及文件名:");
scanf("%s",filepn);
if((fp=fopen(filepn,"w+"))==NULL)
{
printf("不能打开文件!
");
return 0;
}
fprintf(fp," 考试成绩管理系统
");
fprintf(fp," 作者:梅雪 班级:03电信 学号:303073011
");
fprintf(fp,"-----------------------------------------
");
fprintf(fp,"|学号|姓名|语文|英语|数学|
");
fprintf(fp,"-----------------------------------------
");
/*打印表格域*/
while(p1!=NULL)
{
fprintf(fp,"%d%s%.1f%.1f%.1f
",p1->number,p1->name,p1->yuwen,p1->yingyu,p1->shuxue);
p1=p1->next;/*下移一个结点*/
}
fclose(fp);
printf("文件已经保存!
");
return 0;
}
/*==============================================================================================*/
/*==============================================================================================*/
score *taxis2311(score *head)
/*定义排序函数。此函数带回一个指向链表头的指针*/
{ score *p,*max;
int i,j,x;
float fen;
char t[10];
if(head==NULL)
{printf("
没有任何学生资料,请先建立链表!
");return(head);}/*链表为空*/
max=p=head;
for(i=0;i<80;i++)
printf("*");
printf("1按学生学号排序2按学生姓名排序3按语文成绩排序
");
printf("4按英语成绩排序5按数学成绩排序
");
for(i=0;i<80;i++)
printf("*");
printf("请选择操作:");
scanf("%d",&x);/*选择操作*/
getchar();
switch(x) /*用switch语句实现功能选择*/
{case 1 :
for(i=1;i<n;i++)
{
for(j=i+1;j<=n;j++)
{
max=p;
p=p->next;
if(max->number>p->number)
{
k=max->number;
max->number=p->number;
p->number=k;
/*交换前后结点中的学号值,使得学号大者移到后面的结点中*/
strcpy(t,max->name);
strcpy(max->name,p->name);
strcpy(p->name,t);
/*交换前后结点中的姓名,使之与学号相匹配*/
fen=max->yuwen;
max->yuwen=p->yuwen;
p->yuwen=fen;
/*交换前后结点中的语文成绩,使之与学号相匹配*/
fen=max->yingyu;
max->yingyu=p->yingyu;
p->yingyu=fen;
/*交换前后结点中的英语成绩,使之与学号相匹配*/
fen=max->shuxue;
max->shuxue=p->shuxue;
p->shuxue=fen;
/*交换前后结点中的数学成绩,使之与学号相匹配*/
}
}
max=head;p=head;/*重新使max,p指向链表头*/
}
print2311(head);break;/*打印值排序后的链表内容
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "malloc.h"
typedef char ElemType;
#define OK 1
#define ERROR 0
#define OVER -1
typedef struct node
{
int number;
char name[20];
int chinese,math,english;
struct node *next;
} LinkList;
LinkList *InitList()
{
LinkList *H;
H=(LinkList *)malloc(sizeof(LinkList));
H->next=NULL;
return(H);
}
int Length_list(LinkList *H)
{
LinkList *p;
int j=0;
p=H;
while(p->next!=NULL)
{ p=p->next;
j++;
}
return j;
}
void CreateList(LinkList *H,int n)
{
int i;
LinkList *s,*last;
char ch;
last=H;
for(i=1;i<=n;i++)
{ s=(LinkList *)malloc(sizeof(LinkList));
printf("
请输入第%d个学生的学号:",i);
scanf("%d",&s->number);
printf("
请输入第%d个学生的姓名:",i);
scanf("%s",&s->name);
printf("
请输入第%d个学生的语文、数学和英语成绩:",i);
scanf("%d%d%d",&s->chinese,&s->math,&s->english);
s->next=NULL;
last->next=s;
last=s;
}
}
LinkList *Locate(LinkList *H,int num)
{
LinkList *p;
p=H->next;
while(p!=NULL&&p->number!=num)
p=p->next;
return p;
}
LinkList *GetList(LinkList *H,int i)
{
LinkList *p;
int j=0;
p=H;
while(p->next!=NULL &&j<i)
{
p=p->next;
j++;
}
if(j==i)
return p;
else
return NULL;
}
int InsList(LinkList *p,LinkList x)
{
LinkList *s;
s=(LinkList *)malloc(sizeof(LinkList));
s->number=x.number;
strcpy(s->name,x.name);
s->chinese=x.chinese;
s->math=x.math;
s->english=x.english;
s->next=p->next;
p->next=s;
return OK;
}
int Ins_List(LinkList *H,int i,LinkList x)
{
LinkList *p;
p=GetList(H,i-1);
if(p!=NULL)
{
InsList(p,x);
return OK;
}
else
return ERROR;
}
int DelList(LinkList *p,LinkList *x)
{
LinkList *s;
s=p->next;
x->number=s->number;
strcpy(x->name,s->name);
x->chinese=s->chinese;
x->math=s->math;
x->english=s->english;
p->next=s->next;
free(s);
return OK;
}
int Del_List(LinkList *H,int i,LinkList *x)
{
LinkList *p;
p=GetList(H,i-1);
if(p!=NULL&&p->next!=NULL)
{
DelList(p,x);
return OK;
}
else
return ERROR;
}
out()
{
printf("
*****************************************");
printf("
请输入序号(0-4)选择要进行的操作:");
printf("
0-------退出");
printf("
1-------建立一个学生信息表");
printf("
2-------插入一个学生信息");
printf("
3-------删除一个学生信息");
printf("
4-------查找一个学生是否在该学生信息表中");
printf("
*****************************************
");
}
void DisLinkList(LinkList *H)
{
LinkList *p;
printf("
所有学生的信息如下:");
printf("
学号 姓名 语文 数学 英语
");
p=H->next;
while(p!=NULL)
{
printf("%2d%10s%9d%9d%9d
",p->number,p->name,p->chinese,p->math,p->english);
p=p->next;
}
}
void main()
{
LinkList *H,*p,*q,x;
int i,n,menux,flag,num;
//clrscr();
out();
H=InitList();
scanf("%d",&menux);
do{switch(menux)
{
case 0: exit(0); break;
case 1:
printf("
请输入要生成学生信息表的元素各数:");
scanf("%d",&n);
CreateList(H,n);
printf("建立的学生信息表为:
");
DisLinkList(H);
break;
case 2:
printf("
请输入要插入的学生位置:");
scanf("%d",&i);
printf("
请输入要插入的学生信息:");
printf("
请输入学生的学号:");
scanf("%d",&x.number);
printf("
请输入学生的姓名:");
scanf("%s",&x.name);
printf("
请输入学生的语文 数学和英语成绩:");
scanf("%d%d%d",&x.chinese,&x.math,&x.english);
flag=Ins_List(H,i,x);
if(flag)
{
printf("
插入后的学生信息表为:");
DisLinkList(H);
}
break;
case 3:
printf("请输入要删除的学生的位置:");
scanf("%d",&i);
flag=Del_List(H,i,&x);
if(flag)
{
printf("
删除第%d个学生后,表中信息为:",i);
DisLinkList(H);
}
break;
case 4:
printf("
请输入查找的学生学号:
");
scanf("%d",&num);
if((q=Locate(H,num))!=NULL)
{
printf("
在学生信息表中存在着学号为%d的学生!",num);
printf("
学号 姓名 语文 数学 英语
");
printf("%2d%10s%9d%9d%9d",q->number,q->name,q->chinese,q->math,q->english);
}
else
printf("
在学生信息表中不存在着学号为%d的学生!",num);
break;
default:
printf("
输入选项错误,请重新输入(0-4)!");
}
out();
scanf("%d",&menux);
}while(1);
}
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define MAX 80 //学生最大人数
#define max 3 //科目数量
struct classname //科目结构体,科目名称,该科目分数
{
char name[20];
float score;
};
struct student //学生结构体,学号,学生姓名,科目,平均分,总分
{
char no[20];
char std_name[20];
struct classname km[max];
float ave;
float sum;
int save; //检验数,没有添加删除函数,此变量没有作用,可删除,但是注意删除要把初始函数里的初始语句也删除
};
struct student stu[MAX];//全局变量,结构体数组
int nu=0;//全局变量 文件已存人数
void chushi()//程序初始化函数,对全局变量stu初始化
{
int i,j;
for(i=0;i<MAX;i++)
{
for(j=0;j<20;j++)
{
stu[i].no[j]='\0';
stu[i].std_name[j]='\0';
stu[i].km[j].name[j]='\0';
stu[i].km[j].score=0;
}
stu[i].ave=0;
stu[i].sum=0;
stu[i].save=0;
}
}
void av()/*求平均值*/
{
int i;
for(i=0;i<nu;i++)
{
stu[i].sum=stu[i].km[0].score+stu[i].km[1].score+stu[i].km[2].score;
stu[i].ave=stu[i].sum/3;
}
}
void first_check()
{
FILE *p;//文件指针
int i,j;
struct classname frist[max];//临时变量,接收第一次输入的科目名称
for(i=0;i<max;i++)
{
for(j=0;j<20;j++)
frist[i].name[j]='\0';
frist[i].score=0;
}
if ((p=fopen("e:\\kemu.txt","r"))==NULL)//如果文件不存在,执行下面语句
{
printf("您好,欢迎使用学生成绩管理系统\n\n因为您是第一次使用,请输入科目名称(三科)\n\n");
p=fopen("e:\\kemu.txt","w");//建立科目文件,保存c盘根目录
printf("输入课程1名称:");
scanf("%s",frist[0].name);
fprintf(p,"%s\n",frist[0].name);//课程写入文件
printf("输入课程2名称:");
scanf("%s",frist[1].name);
fprintf(p,"%s\n",frist[1].name);//同上
printf("输入课程3名称:");
scanf("%s",frist[2].name);
fprintf(p,"%s\n",frist[2].name);//同上
}
system("cls");//清屏函数
fclose(p);
}
void save_nu()//往人数文件写入人数信息
{
FILE *p;
p=fopen("e:\\renshu.txt","w");
fprintf(p,"%d\n",nu);
fclose(p);
}
void Save_add(int n)//写入成绩信息,成绩文件已存在,在文件内部末尾追加写入
{
FILE * p;
int i;
p= fopen("e:\\chengji.txt","at");
if (p == NULL)
{
printf("文件不存在!!\n");
exit(0);
}
save_nu();
for (i = 0;i<n;i++)
if(stu[i].save==1)
{
stu[i].sum=stu[i].km[1].score+stu[i].km[2].score+stu[i].km[3].score;
stu[i].ave=stu[i].sum/3;
fprintf(p,"%s %s %2.1f %2.1f %2.1f %2.1f %2.1f \n",stu[i].no,stu[i].std_name,stu[i].km[0].score,stu[i].km[1].score,stu[i].km[2].score,stu[i].ave,stu[i].sum);
}
fclose(p);
}
void Save()//写入成绩信息,成绩文件不存在,新建成绩文件并写入信息
{
FILE * p;
int i;
p= fopen("e:\\chengji.txt","w");
if (p == NULL)
{
printf("文件不存在!!\n");
exit(0);
}
save_nu();
for (i = 0;i<nu;i++)
if(stu[i].save==1)
{
av();
fprintf(p,"%s %s %2.1f %2.1f %2.1f %2.1f %2.1f \n",stu[i].no,stu[i].std_name,stu[i].km[0].score,stu[i].km[1].score,stu[i].km[2].score,stu[i].ave,stu[i].sum);
}
fclose(p);
}
int read_nu()//读取人数文件中存在的人数信息
{
FILE *p;
char ch,s[10]={'\0'};
int i=0;
p=fopen("e:\\renshu.txt","r");
if(p==NULL)
{
save_nu();
return 0;
}
ch=fgetc(p);
while(ch!='\n')
{
s[i]=ch;
ch=fgetc(p);
i++;
}
nu=atoi(s);
fclose(p);
return 0;
}
int read_km()//读取科目文件中存储的科目信息
{
FILE *p;
int i,j=0;
char s[20]={'\0'};
chushi();
p=fopen("e:\\kemu.txt","r");
if(p==NULL)
{
printf("ERROR read_km");
return 0;
}
fgets(s,20,p);
while(strlen(s)!=0)
{
for(i=0;i<strlen(s);i++)
if(s[i]==10)
{
s[i]='\0';
break;
}
for(i=0;i<=nu;i++)
strcpy(stu[i].km[j].name,s);
for(i=0;i<20;i++)
s[i]='\0';
j++;
fgets(s,20,p);
}
return 0;
}
void read()//重要函数!读取成绩文件中以存储的学生成绩信息并存入内存
{
FILE *p;
int i,j,n,k,z=0;
char s[50]={'\0'};
char o[10]={'\0'};
p=fopen("e:\\chengji.txt","r");
if(p==NULL)
printf("ERROR_read");
chushi();
read_km();
fgets(s,50,p);
while(strlen(s)!=0)
{
j=0;
for(i=0;i<50;i++)
{
if(s[i]!='\n')
{
n=0;
while(j==0)
{
if(s[i]!=' ')
{
stu[z].no[n]=s[i];
n++;i++;
}
else
break;
}
while(j==1)
{
if(s[i]!=' ')
{
stu[z].std_name[n]=s[i];
n++;i++;
}
else
break;
}
while(j==2)
{
if(s[i]!=' ')
{
o[n]=s[i];
n++;i++;
}
else
{
stu[z].km[0].score=atoi(o);
break;
}
}
while(j==3)
{
if(s[i]!=' ')
{
o[n]=s[i];
n++;i++;
}
else
{
stu[z].km[1].score=atoi(o);
break;
}
}
while(j==4)
{
if(s[i]!=' ')
{
o[n]=s[i];
n++;i++;
}
else
{
stu[z].km[2].score=atoi(o);
break;
}
}
while(j==5)
{
if(s[i]!=' ')
{
o[n]=s[i];
n++;i++;
}
else
{
stu[z].ave=atoi(o);
break;
}
}
while(j==6)
{
if(s[i]!=' ')
{
o[n]=s[i];
n++;i++;
}
else
{
stu[z].sum=atoi(o);
break;
}
}
for(k=0;k<10;k++)
o[k]='\0';
}
else
break;
j++;
}
for(i=0;i<50;i++)
s[i]='\0';
fgets(s,50,p);
z++;
}
}
void putin()//功能函数,录入学生成绩信息
{
int n,i=0;
char ch;
read_km();
do
{
printf("\t\t\t\t录入学生信息\n输入第%d个学生的信息\n",i+1);
printf("\n输入学生学号:");
scanf("%s",stu[i].no);
printf("\n输入学员姓名:");
scanf("%s",stu[i].std_name);
printf("\n输入语文%s的分数:",stu[0].km[0].name);
scanf("%f",&stu[i].km[0].score);
printf("\n输入数学%s的分数:",stu[0].km[1].name);
scanf("%f",&stu[i].km[1].score);
printf("\n输入英语%s的分数:",stu[0].km[2].name);
scanf("%f",&stu[i].km[2].score);
stu[i].save=1;
printf("\n\n");
i++;
n=i;
printf("是否继续输入?(Y/N)");
fflush(stdin);
ch=getch();
system("cls");
}
while(ch!='n'&&ch!='N');
system("cls");
if(nu==0)
{
nu=n;
Save();
}
else
{
nu=n+nu;
Save_add(n);
}
}
int putout()//功能函数,显示学生信息
{
int i;char s;
if(nu==0)
{
printf("学生信息为零!请录入...");
return 0;
}
read();
do
{
printf("学生成绩信息:\n\n");
for(i=0;i<nu;i++)
printf("学号:%s 姓名:%s\n%s分数:%2.1f\t%s分数:%2.1f\t%s 分数:%2.1f\n平均分数:%2.1f\t总成绩:%2.1f\n\n",stu[i].no,stu[i].std_name,stu[i].km[0].name,stu[i].km[0].score,stu[i].km[1].name,stu[i].km[1].score,stu[i].km[2].name,stu[i].km[2].score,stu[i].ave,stu[i].sum);
printf("\t\t按任意键返回主菜单");
fflush(stdin);
s=getch();
}
while(!s);
system("cls");
return 0;
}
int sort()/*排序数据函数*/
{
struct student temp;
int i,j;
char s;
if(nu==0)
{
printf("学生信息为零!请录入...");
return 0;
}
read();
for(i=1;i<nu;i++)
{
for(j=1;j<=nu-i;j++)
{
if(stu[j-1].ave<stu[j].ave)
{
temp=stu[j];
stu[j]=stu[j-1];
stu[j-1]=temp;
}
}
}
do
{
printf("学生成绩信息:\n\n");
for(i=0;i<nu;i++)
printf("学号:%s 姓名:%s 平均成绩:%2.1f\n\n",stu[i].no,stu[i].std_name,stu[i].ave);
printf("\t\t按任意键返回主菜单");
fflush(stdin);
s=getch();
}
while(!s);
system("cls");
return 0;
}
int find()/*查询函数*/
{
int j,i=0;
int c=0;
char search[20]={'\0'};
char as;
if(nu==0)
{
printf("学生信息为零!请录入...");
return 0;
}
read();
do
{
printf("输入要查询课程名称:");
scanf("%s",search);
for(j=0;j<max;j++)
if(!strcmp(stu[i].km[j].name,search))
{
c=1;
printf("\n该课程不及格学生姓名:\n");
for(i=0;i<nu;i++)
if(stu[i].km[j].score<60)
printf("%s\n",stu[i].std_name);
}
if(c==0)
printf("无此课程!");
printf("\n\t\t按任意键返回主菜单");
fflush(stdin);
as=getch();
}
while(!as);
system("cls");
return 0;
}
int tongji()//功能函数,统计学生成绩信息
{
int j,m,z,i=0;
char s;
if(nu==0)
{
printf("学生信息为零!请录入...");
return 0;
}
read();
for(z=0;z<max;z++)
{
m=stu[i].km[z].score;j=0;
printf("%s 最高分: ",stu[i].km[z].name);
for(i=0;i<nu;i++)
if(m<stu[i].km[z].score)
{
m=stu[i].km[z].score;
j=i;
}
printf("%s\t",stu[j].std_name);
j=0;i=0;m=stu[i].km[z].score;
printf("%s 最低分: ",stu[i].km[z].name);
for(i=0;i<nu;i++)
if(m>stu[i].km[z].score)
{
m=stu[i].km[z].score;
j=i;
}
printf("%s\t",stu[j].std_name);
m=0;j=0;i=0;
printf("%s 平均分: ",stu[i].km[z].name);
for(i=0;i<nu;i++)
m=m+stu[i].km[z].score;
printf("%d\n",m/nu);
m=0;i=0;
printf("%s 分数低于的60人数: ",stu[i].km[z].name);
for(i=0;i<nu;i++)
if(stu[i].km[z].score<60)
m++;
printf("%d\t",m);
m=0;j=0;i=0;
printf("%s 分数高于60的人数: ",stu[i].km[z].name);
for(i=0;i<nu;i++)
if(stu[i].km[z].score>60)
m++;
printf("%d\n\n",m);
}
do
{
printf("\t\t按任意键返回主菜单");
fflush(stdin);
s=getch();
}
while(!s);
system("cls");
return 0;
}
void main()/*主函数*/
{
int as;
first_check();
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");
printf("\t\t\t\t选择功能选项:");
fflush(stdin);
read_nu();
scanf("%d",&as);
switch(as)
{
case 1:system("cls");putin();break;
case 2:system("cls");putout();break;
case 3:system("cls");sort();break;
case 4:system("cls");find();break;
case 5:system("cls");tongji();break;
case 6:system("exit");exit(0);
default:system("cls");goto start;
}
}
while(1);
/*至此功能选择结束*/
}
怎么发给你?
用C语言 设计一学生成绩管理系统,要求: 1. 学生成绩的信息包括:学号...
printf("Please enter the %d scores\\n",3); \/*提示开始输入成绩*\/ s=0; \/*计算每个学生的总分,初值为0*\/ for(i=0;i<3;i++) \/*3门课程循环3次*\/ { do{ printf("score%d:",i+1); scanf("%d",&p->score[i]); if(p->score[i]<0 || p->score[i]>100) \/*确保成绩在0~100之间*...
C语言学生成绩管理系统
printf("第%d名学生信息:\\n\\n",i+1); printf("学号: %s\\n",temp.num); printf("姓名: %s\\n",temp.name); printf("班级: %s\\n",temp.class); printf("成绩: %.2f %.2f %.2f\\n",temp.score[0],temp.score[1],temp.score[2]); printf("平均分: %.2f\\n",temp.ave); printf("***...
用c语言编写学生成绩档案管理,要求:(1)输入若干条记录并保存文件(指...
printf("\\n没有该学生 There is no num %s student on the list.\\n",s); \/*显示没有该学生*\/ } \/*删除记录函数*\/ STUDENT *Delete(STUDENT *head) { \/\/int n; STUDENT *p1,*p2; \/*p1为查找到要删除的结点指针,p2为其前驱指针*\/ char c,s[6]; \/*s[6]用来存放学号,c用来输入字母*\/ ...
怎样用C语言写学生成绩管理系统?
student[][1]到student[][4]存放四门成绩,\\x0d\\x0a\/\/student[][5]存放总分,student[][6]存放平均分,student[][7]存放排名\\x0d\\x0a int n,i,j,k,p,t,count,
如何用C语言实现根据学号查询学生成绩信息
单纯只用多个数组管理学生成绩信息,不使用结构体,该程序最主要的难点是依据学号或总成绩对学生信息进行排序,借助了临时数组来标记排好序的下标。 运行结果如下: 输入数据: 根据总成绩排序: 根据学号删除学生信息: 贴上代码(有点多) #include <stdio.h> #include <stdlib.h> \/\/exit函数头文件 #include <stri...
C语言 学生成绩管理系统 急!~~~
C语言 学生成绩管理系统 急!~~~ 选题一:学生成绩管理1.题目描述编写一个程序来管理学生成绩,本系统能实现以下功能:输入信息:学生成绩的输入;修改信息:对学生成绩进行添加、删除与修改;查询:能够根据学号或姓... 选题一:学生成绩管理1. 题目描述编写一个程序来管理学生成绩,本系统能实现以下功能:输入信息:学生成绩...
学生成绩管理系统(C语言)
int score[NUM_SUBJECT]; \/*各门学科成绩*\/ float total; \/*总分*\/ float average; \/*平均分*\/ int order; \/*名次*\/ }STUDENT;int REC_NUM=0; \/*学生记录数*\/ char*subject[]={"数学","电脑","物理","电工学"};char*menu[]={"***MENU***","1. Enter ne...
求C语言学生成绩管理系统代码。要能用的。
求C语言学生成绩管理系统代码。要能用的。 1.输入:函数input把20学生的学号,姓名,性别,年龄,四科成绩以及平均成绩和总成绩放在一个结构体数组中,学生的学号,姓名,四科成绩由键盘输入,然后计算出平均成绩和总成绩放在一... 1.输入:函数 input 把20学生的学号,姓名,性别,年龄,四科成绩以及平均成绩和总成绩放在...
用C语言写学生成绩管理系统基本功能:1、 输入一个班级的学生基本信息...
printf("请输入学生的姓名:");printf("请输入学生的性别:");printf("请输入学生的年龄:");printf("请输入学生的宿舍号码:");printf("请输入学生的电话号码:");while(!feof(fp)){ p=(struct stud_node *)malloc(size);fscanf(fp,"%ld%c%c%d%ld%ld",&ID,&name,&sex,&age,&dormnumber,...
c语言实现学生成绩管理系统
printf("C语言的成绩:\\n"); scanf("%f",&a[i].score[0]); printf("Access的成绩:\\n"); scanf("%f",&a[i].score[1]); printf("Dreamweaver的成绩:\\n"); scanf("%f",&a[i].score[2]); a[i].sum=a[i].sum+a[i].score[0]+a[i].score[1]+a[i].score[2]; a[i].averge=a[...
浑知心安: #includestruct student { char num[10];char name[20];char sex[5];float grade[7];float v;float sum;}stu[50]; int k=0;void input(); void output(); void search(); void average(); void sort(); void save(); void main() { int a;do{printf("\n\n **************...
方山县18530033719: 编程如何用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*/ ...
方山县18530033719: 怎么用c语言编写一个学生成绩管理系统啊?急…… - ?
浑知心安: C语言课程设计报告-------学生成绩简单管理程序 一、系统菜单的主要功能 (1)输入若干条记录 (2)显示所有记录 (3)按学号排序 (4)插入一条记录 (5)按姓名查找,删除一条记录 (6)查找并显示一条记录 (7)输出统计信息 (新增)...
方山县18530033719: 急!!!!!!!!学生成绩管理系统 C语言程序设计 - ?
浑知心安: #include<iostream.h> #include<string.h> #include<fstream.h> class stu { char name[20]; double math,chinese,english,average,sum; public: stu() { } stu(char n[20],double ma,double chin,double eng) { strcpy(name,n); math=ma; chinese=chin; english=...
方山县18530033719: c语言 学生成绩管理系统设计学生成绩信息包括:学号,姓名,三门课程成绩(数学、英语和计算机)等.主要功能:(1) 计算各个学生的总分及平均分,... - ?
浑知心安:[答案] 希望对你有所帮助.#include"stdio.h"#include"stdlib.h"#include"string.h"#define N 3typedef struct z1{ char no[11]; char name[15]; int score[N]; float sum; float average; int order; ...
方山县18530033719: 急求课程设计 c语言学生成绩管理系统 - ?
浑知心安: 我有个用文件输入的,可以用来实现. #include #include #include #define N 3 /*学生人数*/ #define M 3 /*课程门数*/ void input(); void display(); void select(); void statistics(); void dataSave(); void dataLoad(); void menu(); float courses[N][M]; FILE *fp; void input() /*输入成绩*/ { int i=0; int j=0; for(i=0;i
方山县18530033719: c语言设计学生成绩管理系统 - ?
浑知心安: #include<iostream> #include<cstdio> #include<cmath> #include<vector> #include<list> #include<cstring> #include<map> #include<set> #include<algorithm> #include<queue> using namespace std; int n; struct birth {int year,month,day; };struct ...
方山县18530033719: 我急需一个C语言编写的"小型学生成绩管理系统",希望大家能帮我一下 - ?
浑知心安: #include #include...
方山县18530033719: 学生成绩管理系统C语言编程 急需 .................................. - ?
浑知心安: 这个程序共114行,分6个功能部分,分别是:输入,修改,查询,统计,显示,退出.整体上讲比较简单,自己编的,希望你能采纳!!! #include<stdio.h> #include<stdlib.h> int score[20]; void input( int score[20]) { int i; printf("Please input ...