1.学生成绩管理系统 学生信息包括学号可以查成绩吗、姓名、至少四门功课的成绩、总分及平均分等。

扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
下载作业帮安装包
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
1.学生成绩管理系统 要求: (1)由键盘输入每个学生的学号和四门课程的成绩; (2)计算每个学生的平均分1.学生成绩管理系统
(1)由键盘输入每个学生的学号和四门课程的成绩; (2)计算每个学生的平均分和总分; (3)按总分从高到低排出名次,并按名次输出学生的基本信息,包括学号、各科成绩,平均分和总分;(4)根据用户要求,输出某门课程(由键盘输入课程号且成绩在90分以上(含90分))且总分在前五名的学生情况,包括学号、各科成绩、平均分和总分;
作业帮用户
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
我这里有个系统,是我们的课设,粘上#include #include#include
/*其它说明*/#include
/*字符串函数*/#include
/*内存操作函数*/#include
/*字符操作函数*/#include
/*动态地址分配函数*/#define LEN sizeof(STUDENT)typedef struct stu
/*定义结构体数组用于缓存数据*/{char num[6];char name[10];int score[3];struct stu *
/*链表*/}STUDENT; /*函数原型*/STUDENT
/*初始化函数*/int menu_select();
/*菜单函数*/STUDENT *create();
/*创建链表*/void print(STUDENT *head);
/* 显示全部记录函数*/void search(STUDENT *head);
/*查找记录函数*/STUDENT *delete(STUDENT *head);
/*删除记录函数*/STUDENT *sort(STUDENT *head);
/*排序函数*/STUDENT *insert(STUDENT *head,STUDENT *new);
/*插入记录函数*/void save(STUDENT *head);
/*保存文件函数*/STUDENT *load();
/*读文件函数*//*主函数界面*/void main(){STUDENT *head,head=init();
/*链表初始化,使head的值为NULL*/for(;;)
/*循环无限次*/
{switch(menu_select())
case 1:head=create();
case 2:print(head);
case 3:head=sort(head);
case 4:head=delete(head);
case 5:search(head);
/*查找*/case 6:head=insert(head,&new);
/*&new表示返回地址*/
case 7:save(head);
case 8:head=load();
case 9:exit(0);
/*如菜单返回值为9则程序结束*/
}}/*初始化函数*/STUDENT *init(){return NULL;
/*返回空指针*/}/*菜单选择函数*/menu_select(){
/*定义时间结构体*/getdate(&d);
/*读取系统日期并把它放到结构体d中*/printf("按任意键进入主菜单");
/*按任意键进入主菜单*/getch();
/*从键盘读取一个字符,但不显示于屏幕*/ clrscr();
/*清屏*/printf("********************************************************************************\n");printf("\t\t
欢迎进入\n");printf("\n\t\t
学生成绩管理系统\n");printf("\n\t
制作者:西北民族大学08级通信工程(1)班
吴欣萌 马云 向昊瀚 程冲冲 \n");printf("*************************************MENU***************************************\n");printf("\t\t\t1. 输入学生成绩记录\n");printf("\t\t\t2. 显示学生成绩\n");printf("\t\t\t3. 排序\n");printf("\t\t\t4. 删除记录\n");printf("\t\t\t5. 按姓名查询成绩\n");printf("\t\t\t6. 插入记录\n");printf("\t\t\t7. 保存\n");printf("\t\t\t8. 读取\n");printf("\t\t\t9. 退出\n");printf("********************************************************************************\n");printf("\t\t\t\t%d\\%d\\%d\n",d.da_year,d.da_mon,d.da_day);
/*显示当前系统日期*/do{
printf("\n\t\t\t请选择项目(1~9):");
scanf("%d",&n);
}while(n9);
/*如果选择项不在1~9之间则重输*/
return(n);
/*返回选择项,主函数根据该数调用相应的函数*/}/*输入函数*/STUDENT *create(){int i,s;STUDENT *head=NULL,*p;
/* 定义函数.此函数带回一个指向链表头的指针*/clrscr();for(;;)
{p=(STUDENT *)malloc(LEN);
/*开辟一个新的单元*/
/*如果指针p为空*/
{printf("\n内存已满!");
/*输出内存溢出*/
return (head);
/*返回头指针,下同*/
printf("输入学号(按'*'输入结束):");
scanf("%s",p->num);
if(p->num[0]=='*')
/*如果学号首字符为0则结束输入*/
printf("输入姓名:");
scanf("%s",p->name);
printf(" 请输入成绩\n");
/*提示开始输入成绩*/
/*计算每个学生的总分,初值为0*/
for(i=0;i<3;i++)
/*3门课程循环3次*/
printf("成绩%d:",i+1);
scanf("%d",&p->score[i]);
if(p->score[i]score[i]>100)
/*确保成绩在0~100之间*/
printf("请输入0~100之间的数\n");
}while(p->score[i]score[i]>100);
s=s+p->score[i];
/*累加各门成绩*/
/*将总分保存*/
p->average=(float)s/3;
/*先用强制类型转换将s转换成float型,再求平均值*/
p->order=0;
/*未排序前此值为0*/
/*将头结点做为新输入结点的后继结点*/
/*新输入结点为新的头结点*/
return(head);}/* 显示全部记录函数*/void print(STUDENT *head){int i=0;
/* 统计记录条数*/STUDENT *p;
/*移动指针*/clrscr();p=
/*初值为头指针*/printf("\n**********************************学生成绩表**********************************\n");printf("-------------------------------------------------------------------------------\n");printf("|记录号|
排名 |\n");printf("-------------------------------------------------------------------------------\n");while(p!=NULL)
i++;printf("|
i, p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
}printf("-------------------------------------------------------------------------------\n");printf("**************************************结束**************************************\n");} /*排序函数*/STUDENT *sort(STUDENT *head){int i=0;
/*保存名次*/STUDENT *p1,*p2,*t,*
/*定义临时指针*/temp=head->
/*将原表的头指针所指的下一个结点作头指针*/head->next=NULL;
/*第一个结点为新表的头结点*/while(temp!=NULL)
/*当原表不为空时,进行排序*/
/*取原表的头结点*/
temp=temp->
/*原表头结点指针后移*/
/*设定移动指针p1,从头指针开始*/
/*设定移动指针p2做为p1的前驱,初值为头指针*/
while(t->averageaverage&&p1!=NULL)
/*作成绩平均分比较*/
/*待排序点值小,则新表指针后移*/
if(p1==p2)
/*p1==p2,说明待排序点值大,应排在首位*/
t->next=p1;
/*待排序点的后继为p*/
/*新头结点为待排序点*/
/*待排序点应插入在中间某个位置p2和p1之间,如p为空则是尾部*/
t->next=p1;
/*t的后继是p1*/
p2->next=t;
/*p2的后继是t*/
/*已排好序的头指针赋给p1,准备填写名次*/while(p1!=NULL)
/*当p1不为空时,进行下列操作*/
/*结点序号*/
p1->order=i;
/*将结点序号赋值给名次*/
/*指针后移*/
}printf("排序成功\n");
/*排序成功*/return (head);}/*删除记录函数*/STUDENT *delete(STUDENT *head){int n=0;STUDENT *p1,*p2;
/*p1为查找到要删除的结点指针,p2为其前驱指针*/char c,s[6];
/*s[6]用来存放学号,c用来输入字母*/clrscr();printf("请输入要删除的学生的学号: ");scanf("%s",s);p1=p2=
/*给p1和p2赋初值头指针*/while(strcmp(p1->num,s) && p1 != NULL)
/*当记录的学号不是要找的,或指针不为空时*/
/*将p1指针值赋给p2作为p1的前驱指针*/
/*将p1指针指向下一条记录*/
}if(strcmp(p1->num,s)==0)
/*学号找到了*/
{printf("**************************************信息如下************************************\n");
printf("-------------------------------------------------------------------------------\n");
| 排名 |\n");
printf("-------------------------------------------------------------------------------\n");
p1->num,p1->name,p1->score[0],p1->score[1],p1->score[2],p1->sum,p1->average,p1->order);
printf("-------------------------------------------------------------------------------\n");
printf("***************************************结束**************************************\n");
printf("确定要删除吗? Y/N ?"); /*提示是否要删除,输入Y删除,N则退出*/
{scanf("%c",&c);
if(c=='n'||c=='N')
/*如果不删除,则跳出本循环*/
if(c=='y'||c=='Y')
if(p1==head)
/*若p1==head,说明被删结点是首结点*/
/*把第二个结点地址赋予head*/
p2->next=p1->
/*否则将一下结点地址赋给前一结点地址*/
printf("\n学号%s已删除 \n",s);
printf("请保存\n");
/*删除后就跳出循环*/
printf("\n没有找到该生\n");
/*找不到该结点*/return(head);} /*查找记录函数*/void search(STUDENT *head){STUDENT *p;
移动指针*/char s[5];
/*存放姓名用的字符数组*/clrscr();printf("请输入要查找的姓名\n");scanf("%s",s);p=
/*将头指针赋给p*/while(strcmp(p->name,s) && p != NULL)
/*当记录的姓名不是要找的,或指针不为空时*/
/*移动指针,指向下一结点*/
if(p!=NULL)
/*如果指针不为空*/
{printf("\n*************************************查找************************************\n");
printf("-------------------------------------------------------------------------------\n");
| 排名 |\n");
printf("-------------------------------------------------------------------------------\n");
p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
printf("-------------------------------------------------------------------------------\n");
printf("***************************************结束**************************************\n");
printf("\n没有该学生\n");
/*显示没有该学生*/}
/*插入记录函数*/STUDENT
*insert(STUDENT *head,STUDENT *new){STUDENT *p0,*p1,*p2;int n=0,sum1,i;p1=
/*使p1指向第一个结点*/p0=
/*p0指向要插入的结点*/printf("\n请输入一个新记录\n");
/*提示输入记录信息*/printf("输入学号:");scanf("%s",new->num);printf("输入姓名:");scanf("%s",new->name);printf("请输入成绩\n");sum1=0;
/*保存新记录的总分,初值为0*/for(i=0;i<3;i++)
printf("成绩%d:",i+1);
scanf("%d",&new->score[i]);
if(new->score[i]>100||new->score[i]<0)
printf("请输入0~100之间的数\n");
}while(new->score[i]>100||new->score[i]<0);
sum1=sum1+new->score[i];
/*累加各门成绩*/
}new->sum=sum1;
/*将总分存入新记录中*/new->average=(float)sum1/3;new->order=0;if(head==NULL)
/*原来的链表是空表*/
{head=p0;p0->next=NULL;}
/*使p0指向的结点作为头结点*/else
{while((p0->averageaverage)&&(p1->next!=NULL))
/*使p2指向刚才p1指向的结点*/
/*p1后移一个结点*/
if(p0->average>=p1->average)
{if(head==p1)head=p0;
/*插到原来第一个结点之前*/
else p2->next=p0;
/*插到p2指向的结点之后*/
p0->next=p1;}
{p1->next=p0;p0->next=NULL;} /*插到最后的结点之后*/
}n=n+1; /*结点数加1*/head=sort(head);
/*调用排序的函数,将学生成绩重新排序*/printf("\n学生%s记录已插入\n",new->name);printf("请保存\n");return(head);}/*保存数据到文件函数*/void save(STUDENT *head){FILE *
/*定义指向文件的指针*/STUDENT *p;
/* 定义移动指针*/char outfile[10];printf("请输入要保存文件名称 例如c:\\score\n");scanf("%s",outfile);if((fp=fopen(outfile,"wb"))==NULL)
/*为输出打开一个二进制文件,为只写方式*/
printf("无法保存到文件!请检查路径是否正确!\n");
/*若打不开则返回菜单*/
}printf("\n正在保存\n");p=
/*移动指针从头指针开始*/while(p!=NULL)
/*如p不为空*/
fwrite(p,LEN,1,fp);
/*写入一条记录*/
/*指针后移*/
}fclose(fp);
/*关闭文件*/printf("保存成功!\n");}/* 从文件读数据函数*/STUDENT *load(){STUDENT *p1,*p2,*head=NULL;
/*定义记录指针变量*/FILE *
/* 定义指向文件的指针*/char infile[10];printf("请输入读取文件名称 例如 c:\\score\n");scanf("%s",infile);if((fp=fopen(infile,"rb"))==NULL)
/*打开一个二进制文件,为只读方式*/
printf("打开失败!请检查路径是否正确!\n");
return(head);
}printf("\n正在打开!\n");p1=(STUDENT *)malloc(LEN);
/*开辟一个新单元*/if(!p1)
printf("没有存储!\n");
return(head);
/*申请到空间,将其作为头指针*/while(!feof(fp))
/*循环读数据直到文件尾结束*/
if(fread(p1,LEN,1,fp)!=1)
/*如果没读到数据,跳出循环*/
p1->next=(STUDENT *)malloc(LEN);
/*为下一个结点开辟空间*/
if(!p1->next)
printf("没有存储!\n");
return (head);
/*使p2指向刚才p1指向的结点*/p1=p1->
/*指针后移,新读入数据链到当前表尾*/
}p2->next=NULL;
/*最后一个结点的后继指针为空*/fclose(fp);printf("已成功读取!\n");return (head);}
不知道能不能用。
为您推荐:
扫描下载二维码1.学生成绩管理系统 要求: (1)由键盘输入每个学生的学号和四门课程的成绩; (2)计算每个学生的平均分_百度知道
1.学生成绩管理系统 要求: (1)由键盘输入每个学生的学号和四门课程的成绩; (2)计算每个学生的平均分
1.学生成绩管理系统
(1)由键盘输入每个学生的学号和四门课程的成绩;
(2)计算每个学生的平均分和总分;
(3)按总分从高到低排出名次,并按名次输出学生的基本信息,包括学号、各科成绩,平均分和总分;
(4)根据用户要求,输出某门...
我有更好的答案
import java.util.Spublic class Student { public static void main(String[] args) {
Scanner s=new Scanner(System.in);
System.out.print(&输入学生姓名:&);
String name=s.nextLine();
System.out.print(&输入语文成绩:&);
int Chinese=s.nextInt();
System.out.print(&输入数学成绩:&);
int Math=s.nextInt();
System.out.print(&输入英语成绩:&);
int English=s.nextInt();
System.out.print(&输入Java成绩:&);
int Java=s.nextInt();
System.out.println(name+&
&+&的成绩为:&+&&#92;t&+&语文:&+Chinese+&&#92;t&+&数学:&+Math+&&#92;t&+&英语:&+English+&&#92;t&+&Java:&+Java);
System.out.println(&平均成绩为:&+(double)(Chinese+Math+English+Java)/4);
s.close(); } }
采纳率:72%
我这里有个系统,是我们的课设,粘上#include &stdio.h&#include&dos.h&#include&stdlib.h&
/*其它说明*/#include&string.h&
/*字符串函数*/#include&mem.h&
/*内存操作函数*/#include&ctype.h&
/*字符操作函数*/#include&alloc.h&
/*动态地址分配函数*/#define LEN sizeof(STUDENT)typedef struct stu
/*定义结构体数组用于缓存数据*/{char num[6];char name[10];int score[3];struct stu *
/*链表*/}STUDENT; /*函数原型*/STUDENT
/*初始化函数*/int menu_select();
/*菜单函数*/STUDENT *create();
/*创建链表*/void print(STUDENT *head);
/* 显示全部记录函数*/void search(STUDENT *head);
/*查找记录函数*/STUDENT *delete(STUDENT *head);
/*删除记录函数*/STUDENT *sort(STUDENT *head);
/*排序函数*/STUDENT *insert(STUDENT *head,STUDENT *new);
/*插入记录函数*/void save(STUDENT *head);
/*保存文件函数*/STUDENT *load();
/*读文件函数*//*主函数界面*/void main(){STUDENT *head,head=init();
/*链表初始化,使head的值为NULL*/for(;;)
/*循环无限次*/
{switch(menu_select())
case 1:head=create();
case 2:print(head);
case 3:head=sort(head);
case 4:head=delete(head);
case 5:search(head);
/*查找*/case 6:head=insert(head,&new);
/*&new表示返回地址*/
case 7:save(head);
case 8:head=load();
case 9:exit(0);
/*如菜单返回值为9则程序结束*/
}}/*初始化函数*/STUDENT *init(){return NULL;
/*返回空指针*/}/*菜单选择函数*/menu_select(){
/*定义时间结构体*/getdate(&d);
/*读取系统日期并把它放到结构体d中*/printf(&按任意键进入主菜单&);
/*按任意键进入主菜单*/getch();
/*从键盘读取一个字符,但不显示于屏幕*/ clrscr();
/*清屏*/printf(&********************************************************************************&#92;n&);printf(&&#92;t&#92;t
欢迎进入&#92;n&);printf(&&#92;n&#92;t&#92;t
学生成绩管理系统&#92;n&);printf(&&#92;n&#92;t
制作者:西北民族大学08级通信工程(1)班
吴欣萌 马云 向昊瀚 程冲冲 &#92;n&);printf(&*************************************MENU***************************************&#92;n&);printf(&&#92;t&#92;t&#92;t1. 输入学生成绩记录&#92;n&);printf(&&#92;t&#92;t&#92;t2. 显示学生成绩&#92;n&);printf(&&#92;t&#92;t&#92;t3. 排序&#92;n&);printf(&&#92;t&#92;t&#92;t4. 删除记录&#92;n&);printf(&&#92;t&#92;t&#92;t5. 按姓名查询成绩&#92;n&);printf(&&#92;t&#92;t&#92;t6. 插入记录&#92;n&);printf(&&#92;t&#92;t&#92;t7. 保存&#92;n&);printf(&&#92;t&#92;t&#92;t8. 读取&#92;n&);printf(&&#92;t&#92;t&#92;t9. 退出&#92;n&);printf(&********************************************************************************&#92;n&);printf(&&#92;t&#92;t&#92;t&#92;t%d&#92;&#92;%d&#92;&#92;%d&#92;n&,d.da_year,d.da_mon,d.da_day);
/*显示当前系统日期*/do{
printf(&&#92;n&#92;t&#92;t&#92;t请选择项目(1~9):&);
scanf(&%d&,&n);
}while(n&1||n&9);
/*如果选择项不在1~9之间则重输*/
return(n);
/*返回选择项,主函数根据该数调用相应的函数*/}/*输入函数*/STUDENT *create(){int i,s;STUDENT *head=NULL,*p;
/* 定义函数.此函数带回一个指向链表头的指针*/clrscr();for(;;)
{p=(STUDENT *)malloc(LEN);
/*开辟一个新的单元*/
/*如果指针p为空*/
{printf(&&#92;n内存已满!&);
/*输出内存溢出*/
return (head);
/*返回头指针,下同*/
printf(&输入学号(按&#39;*&#39;输入结束):&);
scanf(&%s&,p-&num);
if(p-&num[0]==&#39;*&#39;)
/*如果学号首字符为0则结束输入*/
printf(&输入姓名:&);
scanf(&%s&,p-&name);
printf(& 请输入成绩&#92;n&);
/*提示开始输入成绩*/
/*计算每个学生的总分,初值为0*/
for(i=0;i&3;i++)
/*3门课程循环3次*/
printf(&成绩%d:&,i+1);
scanf(&%d&,&p-&score[i]);
if(p-&score[i]&0 || p-&score[i]&100)
/*确保成绩在0~100之间*/
printf(&请输入0~100之间的数&#92;n&);
}while(p-&score[i]&0 || p-&score[i]&100);
s=s+p-&score[i];
/*累加各门成绩*/
/*将总分保存*/
p-&average=(float)s/3;
/*先用强制类型转换将s转换成float型,再求平均值*/
p-&order=0;
/*未排序前此值为0*/
/*将头结点做为新输入结点的后继结点*/
/*新输入结点为新的头结点*/
return(head);}/* 显示全部记录函数*/void print(STUDENT *head){int i=0;
/* 统计记录条数*/STUDENT *p;
/*移动指针*/clrscr();p=
/*初值为头指针*/printf(&&#92;n**********************************学生成绩表**********************************&#92;n&);printf(&-------------------------------------------------------------------------------&#92;n&);printf(&|记录号|
排名 |&#92;n&);printf(&-------------------------------------------------------------------------------&#92;n&);while(p!=NULL)
i++;printf(&|
i, p-&num,p-&name,p-&score[0],p-&score[1],p-&score[2],p-&sum,p-&average,p-&order);
}printf(&-------------------------------------------------------------------------------&#92;n&);printf(&**************************************结束**************************************&#92;n&);} /*排序函数*/STUDENT *sort(STUDENT *head){int i=0;
/*保存名次*/STUDENT *p1,*p2,*t,*
/*定义临时指针*/temp=head-&
/*将原表的头指针所指的下一个结点作头指针*/head-&next=NULL;
/*第一个结点为新表的头结点*/while(temp!=NULL)
/*当原表不为空时,进行排序*/
/*取原表的头结点*/
temp=temp-&
/*原表头结点指针后移*/
/*设定移动指针p1,从头指针开始*/
/*设定移动指针p2做为p1的前驱,初值为头指针*/
while(t-&average&p1-&average&&p1!=NULL)
/*作成绩平均分比较*/
/*待排序点值小,则新表指针后移*/
if(p1==p2)
/*p1==p2,说明待排序点值大,应排在首位*/
t-&next=p1;
/*待排序点的后继为p*/
/*新头结点为待排序点*/
/*待排序点应插入在中间某个位置p2和p1之间,如p为空则是尾部*/
t-&next=p1;
/*t的后继是p1*/
p2-&next=t;
/*p2的后继是t*/
/*已排好序的头指针赋给p1,准备填写名次*/while(p1!=NULL)
/*当p1不为空时,进行下列操作*/
/*结点序号*/
p1-&order=i;
/*将结点序号赋值给名次*/
/*指针后移*/
}printf(&排序成功&#92;n&);
/*排序成功*/return (head);}/*删除记录函数*/STUDENT *delete(STUDENT *head){int n=0;STUDENT *p1,*p2;
/*p1为查找到要删除的结点指针,p2为其前驱指针*/char c,s[6];
/*s[6]用来存放学号,c用来输入字母*/clrscr();printf(&请输入要删除的学生的学号: &);scanf(&%s&,s);p1=p2=
/*给p1和p2赋初值头指针*/while(strcmp(p1-&num,s) && p1 != NULL)
/*当记录的学号不是要找的,或指针不为空时*/
/*将p1指针值赋给p2作为p1的前驱指针*/
/*将p1指针指向下一条记录*/
}if(strcmp(p1-&num,s)==0)
/*学号找到了*/
{printf(&**************************************信息如下************************************&#92;n&);
printf(&-------------------------------------------------------------------------------&#92;n&);
| 排名 |&#92;n&);
printf(&-------------------------------------------------------------------------------&#92;n&);
p1-&num,p1-&name,p1-&score[0],p1-&score[1],p1-&score[2],p1-&sum,p1-&average,p1-&order);
printf(&-------------------------------------------------------------------------------&#92;n&);
printf(&***************************************结束**************************************&#92;n&);
printf(&确定要删除吗? Y/N ?&); /*提示是否要删除,输入Y删除,N则退出*/
{scanf(&%c&,&c);
if(c==&#39;n&#39;||c==&#39;N&#39;)
/*如果不删除,则跳出本循环*/
if(c==&#39;y&#39;||c==&#39;Y&#39;)
if(p1==head)
/*若p1==head,说明被删结点是首结点*/
/*把第二个结点地址赋予head*/
p2-&next=p1-&
/*否则将一下结点地址赋给前一结点地址*/
printf(&&#92;n学号%s已删除 &#92;n&,s);
printf(&请保存&#92;n&);
/*删除后就跳出循环*/
printf(&&#92;n没有找到该生&#92;n&);
/*找不到该结点*/return(head);} /*查找记录函数*/void search(STUDENT *head){STUDENT *p;
移动指针*/char s[5];
/*存放姓名用的字符数组*/clrscr();printf(&请输入要查找的姓名&#92;n&);scanf(&%s&,s);p=
/*将头指针赋给p*/while(strcmp(p-&name,s) && p != NULL)
/*当记录的姓名不是要找的,或指针不为空时*/
/*移动指针,指向下一结点*/
if(p!=NULL)
/*如果指针不为空*/
{printf(&&#92;n*************************************查找************************************&#92;n&);
printf(&-------------------------------------------------------------------------------&#92;n&);
| 排名 |&#92;n&);
printf(&-------------------------------------------------------------------------------&#92;n&);
p-&num,p-&name,p-&score[0],p-&score[1],p-&score[2],p-&sum,p-&average,p-&order);
printf(&-------------------------------------------------------------------------------&#92;n&);
printf(&***************************************结束**************************************&#92;n&);
printf(&&#92;n没有该学生&#92;n&);
/*显示没有该学生*/}/*插入记录函数*/STUDENT
*insert(STUDENT *head,STUDENT *new){STUDENT *p0,*p1,*p2;int n=0,sum1,i;p1=
/*使p1指向第一个结点*/p0=
/*p0指向要插入的结点*/printf(&&#92;n请输入一个新记录&#92;n&);
/*提示输入记录信息*/printf(&输入学号:&);scanf(&%s&,new-&num);printf(&输入姓名:&);scanf(&%s&,new-&name);printf(&请输入成绩&#92;n&);sum1=0;
/*保存新记录的总分,初值为0*/for(i=0;i&3;i++)
printf(&成绩%d:&,i+1);
scanf(&%d&,&new-&score[i]);
if(new-&score[i]&100||new-&score[i]&0)
printf(&请输入0~100之间的数&#92;n&);
}while(new-&score[i]&100||new-&score[i]&0);
sum1=sum1+new-&score[i];
/*累加各门成绩*/
}new-&sum=sum1;
/*将总分存入新记录中*/new-&average=(float)sum1/3;new-&order=0;if(head==NULL)
/*原来的链表是空表*/
{head=p0;p0-&next=NULL;}
/*使p0指向的结点作为头结点*/else
{while((p0-&average&p1-&average)&&(p1-&next!=NULL))
/*使p2指向刚才p1指向的结点*/
/*p1后移一个结点*/
if(p0-&average&=p1-&average)
{if(head==p1)head=p0;
/*插到原来第一个结点之前*/
else p2-&next=p0;
/*插到p2指向的结点之后*/
p0-&next=p1;}
{p1-&next=p0;p0-&next=NULL;} /*插到最后的结点之后*/
}n=n+1; /*结点数加1*/head=sort(head);
/*调用排序的函数,将学生成绩重新排序*/printf(&&#92;n学生%s记录已插入&#92;n&,new-&name);printf(&请保存&#92;n&);return(head);}/*保存数据到文件函数*/void save(STUDENT *head){FILE *
/*定义指向文件的指针*/STUDENT *p;
/* 定义移动指针*/char outfile[10];printf(&请输入要保存文件名称 例如c:&#92;&#92;score&#92;n&);scanf(&%s&,outfile);if((fp=fopen(outfile,&wb&))==NULL)
/*为输出打开一个二进制文件,为只写方式*/
printf(&无法保存到文件!请检查路径是否正确!&#92;n&);
/*若打不开则返回菜单*/
}printf(&&#92;n正在保存&#92;n&);p=
/*移动指针从头指针开始*/while(p!=NULL)
/*如p不为空*/
fwrite(p,LEN,1,fp);
/*写入一条记录*/
/*指针后移*/
}fclose(fp);
/*关闭文件*/printf(&保存成功!&#92;n&);}/* 从文件读数据函数*/STUDENT *load(){STUDENT *p1,*p2,*head=NULL;
/*定义记录指针变量*/FILE *
/* 定义指向文件的指针*/char infile[10];printf(&请输入读取文件名称 例如 c:&#92;&#92;score&#92;n&);scanf(&%s&,infile);if((fp=fopen(infile,&rb&))==NULL)
/*打开一个二进制文件,为只读方式*/
printf(&打开失败!请检查路径是否正确!&#92;n&);
return(head);
}printf(&&#92;n正在打开!&#92;n&);p1=(STUDENT *)malloc(LEN);
/*开辟一个新单元*/if(!p1)
printf(&没有存储!&#92;n&);
return(head);
/*申请到空间,将其作为头指针*/while(!feof(fp))
/*循环读数据直到文件尾结束*/
if(fread(p1,LEN,1,fp)!=1)
/*如果没读到数据,跳出循环*/
p1-&next=(STUDENT *)malloc(LEN);
/*为下一个结点开辟空间*/
if(!p1-&next)
printf(&没有存储!&#92;n&);
return (head);
/*使p2指向刚才p1指向的结点*/p1=p1-&
/*指针后移,新读入数据链到当前表尾*/
}p2-&next=NULL;
/*最后一个结点的后继指针为空*/fclose(fp);printf(&已成功读取!&#92;n&);return (head);}
不知道能不能用。
本回答被提问者采纳
为您推荐:
其他类似问题
学生成绩管理系统的相关知识
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 sql 成绩最高学生学号 的文章

 

随机推荐