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\ } else
printf(\不存在此学生!\\n\ /*找不到该结点*/
printf(\输入要删除的学生的学号:\ scanf(\ getchar(); }
#ifdef DEBUG
printf(\已经退出了!\\n\#endif
printf(\现在的学生数为:%d个!\\n\ return(head); }
/*==============================================================================================*/
/*====================================================================
==========================*/ void print2311(score *head)
/*函数print2311,功能:显示学生成绩*/ {
score *p;
if(head==NULL)
{printf(\没有任何学生资料!\\n\ else
{printf(\
printf(\ printf(\学号\\t|姓名\\t|语文\\t|英语\\t|数学\\t|\\n\
printf(\打印表格域*/ p=head; do
{printf(\ 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(\个人总分和平均分\\t2单科平均分\\t3总分最高分\\t4总分最低分\\n\ scanf(\ getchar();
switch(x)
/*用switch语句实现功能选择*/ {
case 1: if(head==NULL)
{printf(\没有任何学生资料!\\n\链表为空*/ else {
printf(\
printf(\学号\\t|姓名\\t|语文\\t|英语\\t|数学\\t|总分\\t|平均分\\t|\\n\
printf(\打印表格域*/ while(p!=NULL) {
sum1=p->yuwen+p->yingyu+p->shuxue; /*计算个人总分*/ ave1=sum1/3;/*计算个人平均分*/
printf(\p->shuxue,sum1,ave1); /*打印结果*/
printf(\打印表格域*/ p=p->next;} }
return(head); break; case 2: if(head==NULL)
{printf(\没有任何学生资料!\\n\链表为空*/ 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\\n\ printf(\英语平均分是%.1f\\n\
printf(\数学平均分是%.1f\\n\打印结果*/ return(head); break; case 3:
if(head==NULL)
{printf(\没有任何学生资料!\\n\链表为空*/ max=p->yuwen+p->yingyu+p->shuxue; while(i sum1=p->yuwen+p->yingyu+p->shuxue; /*计算个人总分*/ if(max } printf(\总分最高分:%.1f\ printf(\ return(head); break; case 4: if(head==NULL) {printf(\没有任何学生资料!\\n\链表为空*/ 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\ printf(\ return(head); break; default :printf(\输入错误,请重试!\\n\ } return(head); } /*==============================================================================================*/ /*==============================================================================================*/ save2311(score *p1) /*函数save2311,功能:保存学生的资料*/ { FILE *fp; char filepn[20];/*用来存放文件保存路径以及文件名*/ printf(\请输入文件路径及文件名:\ scanf(\ if((fp=fopen(filepn,\ { printf(\不能打开文件!\\n\ return 0; } while(p1!=NULL) { fprintf(fp,\xue); p1=p1->next;/*下移一个结点*/ } fclose(fp); printf(\文件已经保存!\\n\ return 0; } /*==============================================================================================*/ /*==============================================================================================*/ score *taxis2311(score *head) /*定义排序函数。此函数带回一个指向链表头的指针*/ { score *p,*max; int i,j,x; float fen; char t[10]; if(head==NULL) {printf(\没有任何学生资料,请先建立链表!\\n\链表为空*/ max=p=head; for(i=0;i<80;i++) printf(\ printf(\按学生学号排序\\t2按学生姓名排序\\t3按语文成绩排序\\n\ printf(\按英语成绩排序\\t5按数学成绩排序\\t\\n\ for(i=0;i<80;i++) printf(\ printf(\请选择操作:\ scanf(\选择操作*/
学生成绩信息管理系统(C语言)



