从键盘输入5名学生的信息,包含学号,姓名,数学成绩英语成绩,C语言成绩,_百度知道
从键盘输入5名学生的信息,包含学号,姓名,数学成绩英语成绩,C语言成绩,
&pb-&a[i]) {aa=p%d",*pb:\); t",max=a[i];tmax\);next=NULL;math);}void main(){ tName\\,min=a[0]:\,a[i]); char name[20],bb-&
printf(&n&
printf(&%d&} }
printf(&);please input the Eplease );i&i++) {
pb=(struct StuNode *)malloc(sizeof(struct StuNode));
for(i=0; int Eplease input the C score,bb->,max);
pb-&math+pb-& for(i=0; int C;tscore\;n":\
fflush(stdin););a[i]) {bb= struct StuNode *%d&%d&t%d\
if(max&;%s\
else pf-&)。我是怎么编的哪里错了;t%s\:\ printf(& struct StuNode *create(int n){ struct StuNode *head=NULL;t%s\\ scanf(&n&English);
if(i==0) head=,*
printf(&tmin\); int i,aa-&
a[i]=pb-&num););tscore\;#include&n&),min),*
printf(&这5名学生3门课的总分分别为;;n&n&n&nNum\please input the NO;t%d\next=pb。#include<,max=a[0];please input ttName\
printf(&n; return(head);n;C;
printf(&i++)
printf(& struct StuNode *head,aa-& head=create(n);C);;English+pb-&
scanf(":\.h&%d ":\};nNum\:\.h&name),&pb-&
scanf(",*#include<,min=a[i];t",&n);
printf(&stdio,a[10];}
if(min&i<.h&name求每个学生3门课成绩;n",输出总分最高和最低的同学学生学号姓名和总分;%s\
printf(&struct StuNode{ char num[10],&pb-&
gets(pb-&n"
提问者采纳
我已经试过了,min=a[i],min=a[i],改为min=a[0],min不可能大于a[i];=a[i]) {bb=pb,要在这一句前再赋给min一个值;if(min&a[i]) {bb=pb,刚开始”min=a[0]而开始运行后;}逻辑错误if(min&}就行了
提问者评价
其他类似问题
键盘输入的相关知识
其他3条回答
什么意思,看不懂~~~~~
用结构体编的啊。。
pb=(struct StuNode *)malloc(sizeof(struct StuNode));放一句在for前面
再放一句在if前面
#include&stdio.h&#include&string.h&#include&stdlib.h&struct StuNode{ char num[10]; char name[20];
int E int C; struct StuNode *}; struct StuNode *create(int n){ struct StuNode *head=NULL,*pf,*pb,*aa,* int i,a[10]={},max=a[0],min=a[0];//把a[0]初始化 for(i=0;i&n;i++) {
pb=(struct StuNode *)malloc(sizeof(struct StuNode));
fflush(stdin);
printf(&please input the NO:\n&);
gets(pb-&num);
printf(&please input the name:\n&);
gets(pb-&name);
printf(&please input the math score:\n&);
scanf(&%d&,&pb-&math);
printf(&please input the English score:\n&);
scanf(&%d&,&pb-&English);
printf(&please input the C score:\n&);
scanf(&%d&,&pb-&C);
a[i]=pb-&math+pb-&English+pb-&C;
pb-&next=NULL;
if(i==0) head=
else pf-&next=
if(max&a[i]) {aa=pb,max=a[i];}
if(min&a[i]) {bb=pb,min=a[i];} }
printf(&这5名学生3门课的总分分别为:\n&);
for(i=0;i&n;i++)
printf(&%d &,a[i]);
printf(&\nNum\tName\tscore\tmax\n&);
printf(&%s\t%s\t%d\t&,aa-&num,aa-&name,max);
printf(&\nNum\tName\tscore\tmin\n&);
printf(&%s\t%s\t%d\t&,bb-&num,bb-&name,min); return(head);}void main(){
struct StuNode * printf(&please input the number of student:\n&); scanf(&%d&,&n); head=create(n);}
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁来 自:鄂州
等 级:业余侠客
帖 子:112
专家分:203
这不是我们C语言学习阶段的考察试题么
没事来C一下...&&&
等 级:新手上路
帖 子:23
是啊&&& 是我们课程设计题目
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
哪去自己改
附件: 只有本站会员才能下载或查看附件,请
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
===========深入&-----------------&浅出============
来 自:そ ら
等 级:黑侠
帖 子:358
专家分:620
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&看热闹
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
自己改????zenmenengzheyang ??
到底是“出来混迟早要还”还是“杀人放火金腰带”?
版权所有,并保留所有权利。
Powered by , Processed in 0.029699 second(s), 8 queries.
Copyright&, BCCN.NET, All Rights Reserved求以下c语言编程:一个简单的学生成绩管理系统。其中每个学生信息包括学号、姓名、数学成绩、英语成绩_百度知道
求以下c语言编程:一个简单的学生成绩管理系统。其中每个学生信息包括学号、姓名、数学成绩、英语成绩
在录入时如果已有学号相同的学生信息一个简单的学生成绩管理系统。 编写函数fun1(),具体功能为,检查录入时的学号冲突情况,通过函数fun2()实现:当出现学号相同的结点时。要求。4)通过函数fun3()实现输出平均成绩最高的学生数据(包括学号,需提示用户。5)通过函数fun4()实现按某门课程(如计算机)成绩排序。7)编写打印输出函数fun6()、3门课程成绩。对于需要重新输入信息的结点、average、姓名。菜单、数学成绩。编写一个菜单程序分别完成以下功能,将信息从头到尾打印出来,实现数据的更新、姓名、name。
3)排序采用冒泡法或选择法、英语成绩。其中每个学生信息包括学号、score[3]、平均分数),其功能为,以新的数据代替原来的数据,每个记录包括num,并允许用户重新输入信息(即用新的数据覆盖原来数据)或不重新输入的选择:1)使用结构体数组。
2)各功能分别通过函数调用实现:每个学生的信息使用结构体变量存储、计算机成绩。
4)查询采用顺序查找方法;6)通过函数fun5()实现根据学号查询某学生三门课程的成绩
提问者采纳
p-&/);t\n& /
} /!\);||c=='
printf(".2f | %-5d|\score[i];100);n& / /,&c);t\
return(head); void Save(STUDENT *head) { FILE *fp,*最后一个结点的后继指针为空*/ /average&t\t forget to Save the N
return(head);n&y'; / /\ /n没有这个学生在表上\||c==' /:c;*提示开始输入成绩*/*使p0指向的结点作为头结点*/,指向下一结点*/:%d-%d-%d\);n&*新输入结点为新的头结点*/*作成绩平均分比较*/t 使用学生管理系统1;
return (head);
printf(",i+1);score[i]&
printf(&t\\,s) &&%s&
p1=*定义结构体数组用于缓存数据*/ /
if(p-& /*输入学生成绩记录*/.&n&\tm_mday); /*初始化函数*/
p1=(STUDENT *)malloc(LEN),p1-&%s". 插入 Insert record to list\t\-------------------------------------------------------------------------------\
scanf(&t\);*原表头结点指针后移*/*把第二个结点地址赋予head*/
p1=);*先用强制类型转换将s转换成float型;n&next,p-&);
temp=temp-&*如果没读到数据,p-&pause&*写入一条记录*/:\!feof(fp)) /*输入函数*/next=p1; /
head=Init();*定义记录指针变量*/t输入你的选择Enter your choice(1~9);\t6;
p=数据错误Dnext=p0;
scanf(".2f | %-5d|\
scanf(&\ /*移动指针*/
fflush(stdin););;%s&请输入个姓名来查找. 显示 Print the record\/cls&
return(head);3; } /*清屏*/\);next,p1-&n************************************STUDENT************************************\);); /
char s[5];t\ } / t=time(NULL); /score[i]&score[2];t8;);*将头结点做为新输入结点的后继结点*/
p1-&*如果选择项不在1~9之间则重输*/ /
if((fp=fopen();;
p0=New,p-&
return(n);)*给p1和p2赋初值头指针*/
char infile[10];* 显示全部记录函数*/ /n&n",c用来输入字母*/:list end); / /;score[i]& int Menu_Select() { int n:head=Insert(\,p1-&/ /
p->!=NULL) /
if(p1==p2) /*第一个结点为新表的头结点*/
head=p0;*否则将一下结点地址赋给前一结点地址*/: %s 学生以被删除(student have been D
else p2->,s;n",i;n":head=Load(),s)==0) /n".0\ /n't\,1.;n按任一键进入主菜单;
while(strcmp(p1-&t3;).;n& } /*待排序点值小; //).;
printf(". 保存 Save the file\输入学号E /| Num | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |\0)
p=(STUDENT *)malloc(LEN).L /);t 欢迎 Welcome to\ /); /))==NULL) /))==NULL) /!p) /*原来的链表是空表*/,说明被删结点是首结点*/*找不到该结点*/ / /n********************************************************************************\,p->,fp);*p0指向要插入的结点*/);
return (head);
n输出内存溢出;
case 9;average>,New->. 输入学生成绩记录 Enter the record\,应排在首位*/***************************************END**************************************\); /!=NULL) /,p-&score[1];n",p-& /,
head=p1-&\next=NULL;100) /);n",s);*定义时间结构体*/!O\
printf(",下同*/*开辟一个新的单元*/*学号找到了*/
*关闭文件*/:head=Create(); /********************************************************************************\ } /
head=p;\,*p2;;输入学号Enter the num(0,将其作为头指针*/*循环读数据直到文件尾结束*/num); } /); / / /num[0]=='*取原表的头结点*/order=0;score[i]&n&
printf(&n& /n& / /*如果学号首字符为0则结束输入*/n\ /t\. O;):&%c&\. 排序 Sort to make New a file\score[1]; /n你成功的从文件中读取了数据;请输入3门成绩Please enter the %d scores\w&
while((p0-&#define LEN sizeof(STUDENT) typedef struct stu /*p1==p2.)\
scanf(&*显示没有该学生*/,或指针不为空时*/n&* 统计记录条数*/
printf(& } /,初值为0*/ /cls&**************************************END**************************************\
printf(& /
printf(&n&t1;*待排序点的后继为p*/,N则退出*/ /,p-&
printf(&p1-&-------------------------------------------------------------------------------\ STUDENT *Sort(STUDENT *head) { int i=0;
time_ /t\ } / /
for(i=0;t\
p=p->,使head的值为NULL
}while(n&*当记录的姓名不是要找的; /,跳出循环*/
printf(&n&*3门课程循环3次*/:c;*结点数加1*/n&);t\.\
sum1=sum1+New-&\:Save(head);.;&New表示返回地址
case 7;order); /*插到p2指向的结点之后*/n=n-1;average=(float)sum1/
if(p,s[6]; /
printf(&*其它说明*/; /.,从头指针开始*/p1-&t\链表初始化, p-&t\);\*初值为头指针*/,1; }STUDENT!=NULL) /*新头结点为待排序点*/ /t\)
scanf(&*p1为查找到要删除的结点指针;n& /
fwrite(p;t当前系统日期;*指针后移; /:exit(0);).h&0 || p->,大致功能相当#include &*确保成绩在0~100之间*/break,&p-&
p-& /,p-&*排序*/ /average=(float)s/
t-&-------------------------------------------------------------------------------\score\\ / /*调用排序的函数;*移动指针从头指针开始*/
p1=p2=*将原表的头指针所指的下一个结点作头指针*/3;n",再求平均值*/
t=n&r&score E
system(&\0'
if(strcmp(p1-&
p-&排序成功 Sorting is sucessful,则新表指针后移*/n&数据错误;
p2=p1:& /n学号为(Num);n&);| %3d | %4s | %-4s | %3d | %3d | %3d | %3d | %4;*将总分存入新记录中*/\%s& /next=NULL;n&*返回选择项!\ /*累加各门成绩*/,*head=NULL;t\.h&
if(c=='num);***************************************END**************************************\n&getch(););*返回头指针;n& #include &\score[0];
return (head); /i&*申请到空间;
printf(":\-------------------------------------------------------------------------------\next=t;
/),p1->,输入Y删除,please enter again,i+1);.\n&next=p0.:".\,s);next=p1; } /-------------------------------------------------------------------------------\*如果指针不为空*/),为只写方式*/cls&
while(strcmp(p-&
name[5];*若p1==*为输出打开一个二进制文件;*开辟一个新单元*/*保存数据到文件函数*/n是否要删除; /
p=p-&*插入*/%d&);-------------------------------------------------------------------------------\score[2];n& /
printf(",
i; STUDENT *Insert(STUDENT *head.;next)
printf(",for example c,初值为0*/n没有该学生 There is no num %s /n&保存成功;*保存*/score[0],p->,p-&;
printf(".;
printf(&n&
p2=head!p1-&score[i]).\:\);),*t;输出文件例如;);n&
printf(",3);average&&p1;; /,p1-&n&;*查找记录函数*/i&
s=0; } / /,&;next,p2为其前驱指针*/
for(;t7;* 定义函数;
return(head). Please ente
/*为下一个结点开辟空间*/,&New);%d&name);); } /
printf(& /*指针后移*/t\*已排好序的头指针赋给p1;n": &3;
p=score[i]&**************************************FOUND************************************\nYou have success to rea*插到原来第一个结点之前*/内存溢出;score[2];9););score[i]&break!=NULL) /
p2=p1:head=Delete(head);
/\n&*将p1指针值赋给p2作为p1的前驱指针*/
p= /n*************************************FOUND************************************\ /
printf(".\
p0-& /*主函数界面*/%s&n&cls&); void Print(STUDENT *head) { int i=0;\
p2-&*保存名次*/ /. Don'?&*寻找*/n&*存放姓名用的字符数组*/:Search(head);
printf(&| %4s | %4s | %3d | %3d | %3d | %3d | %4. 退出 Quit\
printf(&%s&*输出内存溢出*/ /输入名字E*当p1不为空时;\n",p->,New->.;
char outfile[10];*排序成功*/\成绩score%d; /
printf(&n&* 定义指向文件的指针*/
fclose(fp);
printf(&t\);*t的后继是p1*/
printf(&*删除记录函数*/);%s&
printf(& /*使p2指向刚才p1指向的结点*/,&New-& /*从键盘读取一个字符; /*设定移动指针p1.;); /
scanf(&); / /
printf(",初值为头指针*//;
head=p1;score[0];*当记录的学号不是要找的.;; STUDENT *Init() {
return NULL;*将p1指针指向下一条记录*/N'\.\order=0;*定义临时指针*/n&;
printf(& STUDENT *Create() { name),p-&*排序函数*/n学生Student %s 已被更新next=NULL; system(". 读取 Load the file\
if(p-&num,p1->,New-& int main() { STUDENT *
t-&average,*p2;倒入文件例如;| Rec | Num | Name | Sc1 | Sc2 | Sc3 | Sum | Ave | Order |\,输入Y删除;
case 3.\\!=NULL))
fclose(fp).\N ;
printf(&1||n&next=(STUDENT *)malloc(LEN):",*p,LEN;;*如果指针p为空*/ pt=localtime(&t); /. \);-------------------------------------------------------------------------------\Y')
if(p1==head) /*提示是否要删除,N则退出\n&*插入记录函数*/ /.此函数带回一个指向链表头的指针*/n=n+1;
STUDENT *p1;
if((fp=fopen(
printf(&别忘了保存;
p1-& /);n&
s=s+p-&\n&*退出*/
FILE **读取*/.\,*
if(head==NULL) / #include &cls":\!=NULL) /*当原表不为空时;score E;| Num | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |\.S=p1-&
printf(&\order);*待排序点应插入在中间某个位置p2和p1之间.\);t4;n保存中,准备填写名次*/
printf(&n&
i++.,outfile);
case 6;*结点序号*/100||New-& STUDENT *Delete(STUDENT *head) { /next=p1;score\
p1=next= STUDENT *Load() { STUDENT *p1;
printf(".h&);*指针后移*/ /
}while(p->,pt-&
temp=head-&\);
printf(&n&* 定义移动指针*/t\,infile);
return (head);;!= NULL) /*读取系统日期并把它放到结构体中*/,s) && p1 ;*如p不为空*/
printf(".\.Save t
printf(",3); /t\
if(New->:",fp):&
return(head),则跳出本循环*/
p1-&score[i]>,*p2;t\
case 2;循环无限次 {
switch(Menu_Select())
case 1;*未排序前此值为0*/
printf(&t forget to Sscore[i];
printf(&n寻找文件;n&*p1后移一个结点*/
while(p;*如果不删除; struct tm *sum:head=Sort(head); } /)
/average&);打不开文件Cannot open the file\*移动指针;n&
}while(New-&next=NULL;*使p1指向第一个结点*/,说明待排序点值大,将学生成绩重新排序*/
p1=p1-&*累加各门成绩*/n&n&tm_mon+1;\
printf(&n". 寻找 Search record on name\*若打不开则返回菜单*/* 移动指针*/t2; /!\
system(&t\,主函数根据该数调用相应的函数*/ /.,为只读方式*/n".\);请输入要删除的学号 Please enter the D输入名字En&;/
printf(&*显示*/
printf(",新读入数据链到当前表尾*/!\average)
if(head==p1)head=p0!\100||New-&
while(t-& /
printf(":&
case 5;);| %4s | %4s | %3d | %3d | %3d | %3d | %4;nPlease enter a N*将头指针赋给p*/
STUDENT *head=NULL,进行排序*/*字符串函数*/:Print(head);
score[3];*提示输入记录信息*/
\nThere is no num %s
STUDENT *p,N /n&score[i]&);*定义指向文件的指针*/,STUDENT *New) { STUDENT *p0;
STUDENT *p1; { char
printf(&i++)
printf(&*将结点序号赋值给名次*/);tm_year+1900,如p为空则是尾部*/*显示当前系统日期*/.;*设定移动指针p2做为p1的前驱;).\ void Search(STUDENT *head) { STUDENT *p;
if(c=='n&t\i++) /
scanf("!=NULL)
if(fread(p1;*将总分保存*/
printf(& /;Please enter the %);
printf("!= NULL) /*************************************MENU***************************************\%s&n&
head=Sort(head); /t\O); /,*p1;*保存新记录的总分;*删除后就跳出循环*/%d&;
printf(",进行下列操作*/ /t\);\score[i]);;); /*插到最后的结点之后*//name)!=1)
scanf(",",s),或指针不为空时*/
p1=p1->,p->,*p2.2f | %-5d|\n&*返回空指针*/*按任一键进入主菜单*/
printf(& /sum=s;nAre you sure to Delete the student Y/\,pt-&score[1];)!\成绩score%d;n&),p-&
if(; int sum1;t\,&n);;
New-&*p2的后继是t*/,p->,s);sum=sum1;
STUDENT *p;\); /
printf(".,但不显示于屏幕*/
scanf(",s);
struct stu **计算每个学生的总分; /
printf(",pt-&n& /,
p1-&);*打开一个二进制文件,please enter again.. 删除 Delete a record\
printf(&);-------------------------------------------------------------------------------\-------------------------------------------------------------------------------\
printf(&*使p2指向刚才p1指向的结点*/ /3;t5;0 || p-&);order=i;不要忘了保存Don' /); #include &,LEN;*删除*/.h&average)&&(p1-&n\打不开文件Can not open the file,p-&t9;*s[6]用来存放学号;
p2-&next,请重新输入 Dorder);
head=t;如菜单返回值为9则程序结束
sum1=0;0);
system(&next=p1->已调通;* 从文件读数据函数*//
scanf(&)*菜单选择函数*/
其他类似问题
学生成绩管理系统的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁求以下c语言编程:一个简单的学生成绩管理系统。其中每个学生信息包括学号、姓名、数学成绩、英语成绩_百度知道
求以下c语言编程:一个简单的学生成绩管理系统。其中每个学生信息包括学号、姓名、数学成绩、英语成绩
通过函数fun2()实现:每个学生的信息使用结构体变量存储,实现数据的更新。5)通过函数fun4()实现按某门课程(如计算机)成绩排序,将信息从头到尾打印出来。
2)各功能分别通过函数调用实现。其中每个学生信息包括学号,以新的数据代替原来的数据,并允许用户重新输入信息(即用新的数据覆盖原来数据)或不重新输入的选择:在录入时如果已有学号相同的学生信息,每个记录包括num。菜单、姓名、数学成绩。要求。 编写函数fun1()。对于需要重新输入信息的结点。7)编写打印输出函数fun6()、英语成绩、score[3]。
4)查询采用顺序查找方法,其功能为、计算机成绩:1)使用结构体数组、姓名。编写一个菜单程序分别完成以下功能。4)通过函数fun3()实现输出平均成绩最高的学生数据(包括学号;6)通过函数fun5()实现根据学号查询某学生三门课程的成绩,检查录入时的学号冲突情况。
3)排序采用冒泡法或选择法,具体功能为一个简单的学生成绩管理系统、3门课程成绩,需提示用户、average、平均分数)、name:当出现学号相同的结点时
提问者采纳
0);!=1))!=NULL)
i++;):list end);n&
p1=head:head=Sort(head);n&t\ /n", / /**************************************FOUND************************************\
case 5; /),初值为0*/,&p-&-------------------------------------------------------------------------------\
s=0;*读取系统日期并把它放到结构体中*/next=NULL; /tm_mday);
return(head);| %4s | %4s | %3d | %3d | %3d | %3d | %4; } /*定义时间结构体*/,大致功能相当#include &*寻找*/,p-&
sum1=0;n输出内存溢出;
fwrite(p,应排在首位*/N'
return(head);*p1后移一个结点*/\n');
if(New-&);
FILE *n& } / /*移动指针从头指针开始*/
STUDENT *p.0\);n按任一键进入主菜单;score[i]& /*否则将一下结点地址赋给前一结点地址*/\\.\next=(STUDENT *)malloc(LEN);
printf(".2f | %-5d|\*p2的后继是t*/next)
printf(& /)
/,3);next=NULL;*新头结点为待排序点*/
if((fp=fopen(
while(p1; /);
struct stu *next. 排序 Sort to make New a file\ void Search(STUDENT *head) { STUDENT *p;average)
if(head==p1)head=p0;\ } /%s".;t1;| %4s | %4s | %3d | %3d | %3d | %3d | %4,&)
printf(&3;),i;););*p1为查找到要删除的结点指针;n&n&n& /*设定移动指针p2做为p1的前驱;n". Out of memory:&num.;*将头指针赋给p*/n& /,&New); /n=n-1;
printf(& } /int n,i+1),1;*移动指针*/.Save the file successfully,*p2;-------------------------------------------------------------------------------\
p2-&不要忘了保存Don'*开辟一个新的单元*/.\
temp=temp-&r&next:exit(0),
printf(".;%s&.\%s&);*已排好序的头指针赋给p1;next=p1;
return(head););%s&n&
while(p;输入名字E /;*其它说明*/:\
char outfile[10];
p=*主函数界面*/score[i],New-& /num[0]=='\
if(c==' /
;n************************************STUDENT************************************\score[i]<,s);* 定义移动指针*/ /t\n& /
p0=N100) /n". 输入学生成绩记录 Enter the record\
p->,&New-&
p=p-& /3,输入Y删除.h&
}while(New-&t\
while(t->,或指针不为空时*/
printf(&*删除后就跳出循环*/如菜单返回值为9则程序结束
return 0;*待排序点应插入在中间某个位置p2和p1之间;n".\n&
printf(& /n&
p=order=0!= NULL) / /,p-& /num);
t=time(NULL);*确保成绩在0~100之间*/average<,c用来输入字母*/n*************************************FOUND************************************\,s);p1-&
printf(&*原表头结点指针后移*/);)
if(p1==head) /%s&
STUDENT *p1;
if(p0-&*将头结点做为新输入结点的后继结点*/t3. 保存 Save the file\,p-&
case 3,s)==0) /输入名字Enter the name,p-&score[1].h&next=p0;
head=Sort(head);*按任一键进入主菜单*/\-------------------------------------------------------------------------------\); /9););
scanf(&nYou have success to reascore E /.\!Out of memory,&break,p-& /t2;);n&
p1=p1-&*p0指向要插入的结点*/#define LEN sizeof(STUDENT) typedef struct stu /
p2=),进行下列操作*/*输入学生成绩记录*/n",将学生成绩重新排序*/*清屏*/
t=*显示没有该学生*/next=p1->!\ /average&&p1:\
for(i=0,s) && p :c,p1->,p1-&);n&
}while(p-& /,新读入数据链到当前表尾*/
return(n);\*定义记录指针变量*/\next.\\*如果指针不为空*/*返回头指针; } /
/ STUDENT *Insert(STUDENT *n\n=n+1;%s&).;打不开文件Cannot open the file\t7;
else p2-&0)
printf(& }STUDENT;*待排序点值小;
printf(& /
printf(& /);n&\getch():head=Load();
printf(&*开辟一个新单元*/:\
}while(n& /.;
for(;);/**************************************END**************************************\ /)%s&
printf(&Please enter the %name);\n&n&\ /t\); } /,p1-&成绩score%d;order=0;i++) /,*t;
return(head);n&;3;*p1==p2..;*菜单选择函数*/ /n&
fclose(fp);score[i]&): ".\,*
while(strcmp(p-&
printf(",为只写方式*/
p1=(STUDENT *)malloc(LEN);/
p1-&t\);n&
if(,p-&pause&*删除*/
temp=head-&);
printf(&n",LEN;*保存名次*/:&数据错误;100);
head=p0; / /
scanf(&t\t forget to Save the New file:Search(head);*当原表不为空时,初值为0*/0 || p-& /输出文件例如;
p0-&cls". 插入 Insert record to list\,p1-&* 移动指针*/
scanf(",N则退出*/.;next=p1;
p1-&输入学号E
return (head);
printf(& int main() { STUDENT *num);
p2-& /);/sum=sum1;
time_);\
system(& STUDENT *Create() {
/).h&&New表示返回地址
case 7;);y':%d-%d-%d\,再求平均值*/
case 8; // } /; /*将原表的头指针所指的下一个结点作头指针*/t\;*使p2指向刚才p1指向的结点*/%d& #include &n&| %3d | %4s | %-4s | %3d | %3d | %3d | %3d | %4;倒入文件例如;
case 9,*p1; } /*若打不开则返回菜单*/n&):head=Create();;********************************************************************************\
p1=p1-&n是否要删除,&n),p2为其前驱指针*/| Rec | Num | Name | Sc1 | Sc2 | Sc3 | Sum | Ave | Order |\
printf("!p1-&排序成功 S); struct tm *
p2=p1;score E*使p2指向刚才p1指向的结点*/0 || p-& } /n&; /Y'
} /n\%s&/,指向下一结点*/!= NULL) /
printf(":".\order=i;t输入你的选择Enter your choice(1~9);-------------------------------------------------------------------------------\ /,跳出循环*/i&*将总分保存*/,但不显示于屏幕*/
printf(&*插入记录函数*/n&)
p=(STUDENT *)malloc(LEN);
head=p1->!=NULL) /
p2=p1;t 欢迎 Welcome to\score[0];
return (head);/t\ / /,则新表指针后移*/*返回空指针*/tm_mon+1;)., p-&*待排序点的后继为p*/*累加各门成绩*/*设定移动指针p1;);))==NULL) /\,3); /*最后一个结点的后继指针为空*/,输入Y删除;
head=Init(); /
STUDENT *p;请输入3门成绩Please enter the %d scores\.;
p1=p1-&*读取*/
/ /)%d&n&; #include &;
printf(&*3门课程循环3次*/,pt-&
printf(& /1||n>,准备填写名次*/t\请输入要删除的学号 Please enter the Dn&t\-------------------------------------------------------------------------------\
printf(&*指针后移;*如果指针p为空*/ /:&
p2=p1;*输出内存溢出*/n&*保存数据到文件函数*/
printf(&*学号找到了*/.\
p=*当记录的姓名不是要找的;*指针后移*/score[2];
scanf(&t\
printf(& / STUDENT *Delete(STUDENT *head) { /next=NULL. 退出 Quit\.\ /);*保存*/
char s[5];*原来的链表是空表*/
p->:head=Insert(* 定义指向文件的指针*/
if(fread(p1;*返回选择项;
if(p1==p2) /next=),p-&***************************************END**************************************\ system(":\score\t\: %s 学生以被删除(student have been Dorder);
printf(&%d&):&
printf(",将其作为头指针*/n&;t\,p-&
printf(".\n&t forget to S
printf(":head=Delete(head);next=NULL; / /next=t;
printf(&n&
system(&*未排序前此值为0*/!=NULL) / /
printf(&nPlease enter a New record,或指针不为空时*/ /*第一个结点为新表的头结点*/.h>!\,
p->,s);t\n&t\,说明被删结点是首结点*/ /\
for(;*退出*/n&););
while((p0-& /next=p0; /
head=t;*插到p2指向的结点之后*/*保存新记录的总分;*给p1和p2赋初值头指针*/););; /:Print(head);); /score[2];*如果选择项不在1~9之间则重输*/n保存中;n"!\ { char
num[6];nAre you sure to Delete the student Y/\ /*先用强制类型转换将s转换成float型;p1-&*找不到该结点*/||c==',初值为头指针*/.;tm_year+1900,*p2;score[2],下同*/average=(float)s/
printf(&\score\n&;
p=p-&*插到原来第一个结点之前*/ / /||c=='
return(head); / /*初值为头指针*/-------------------------------------------------------------------------------\
New->,pt-&t\,进行排序*/*当p1不为空时;
*提示开始输入成绩*/,STUDENT *New) { STUDENT *p0;
if(head==NULL) /):c;
printf(&请输入个姓名来查找;i<.;*将总分存入新记录中*/
scanf(&n&num!=NULL) /\.&n",p->,p1-&
STUDENT *p1;=p1-&n你成功的从文件中读取了数据;*计算每个学生的总分;*结点序号*/*输入函数*/.;n",for example c:&*插到最后的结点之后*/average<,outfile);*新输入结点为新的头结点*/n********************************************************************************\,p-& /,主函数根据该数调用相应的函数*/
p0-&*关闭文件*/order);*如果不删除;sum=s;
while( /\);n".2f | %-5d|\
printf(&***************************************END**************************************\name); STUDENT *Load() { STUDENT *p1;n& /n寻找文件;打不开文件C /cls&score[i]& /,*p; #include & pt=localtime(&t););循环无限次 {
switch(Menu_Select())
case 1:Save(head). Please ente输入学号Enter the num(0,N则退出\cls& / } /-------------------------------------------------------------------------------\
p1=score[1];););
if((fp=fopen(t\score[i]);order);\
printf(&t\t4;
printf(&链表初始化,N
printf(&n&*为输出打开一个二进制文件;
printf(& /
printf(&n&100||New-& /
STUDENT *head=NULL;n&*从键盘读取一个字符;0'
p1=head,s) && p1 ;*作成绩平均分比较*/;
p=p->. 寻找 Search record on name\,*p2,
name[5],则跳出本循环*/t\score[i]& /,
i;average. \*如果没读到数据,p-& void Print(STUDENT *head) { int i=0;
while(,i+1);| Num | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |\);),s[6];*排序函数*/*字符串函数*/); /
head=p.\
printf(&score[i]>,&c);*使p0指向的结点作为头结点*/*存放姓名用的字符数组*/.)\);*显示*/!=NULL) /); void Save(STUDENT *head) { FILE *
fclose(fp),p1-&average)&&(p1-&*使p1指向第一个结点*//t\ /!\
p-&t6;*把第二个结点地址赋予head*/*调用排序的函数;*指针后移*/Out of memory!p) /*写入一条记录*/
head=p1,从头指针开始*/
printf(&*提示是否要删除;t\
char infile[10];n&
printf(& /*定义结构体数组用于缓存数据*/nThere is no num %s-------------------------------------------------------------------------------\内存溢出,使head的值为NULL
for(,*head=NULL;\.;*取原表的头结点*/))==NULL) / int Menu_Select() { n&*若p1==*将p1指针指向下一条记录*/n",如p为空则是尾部*/.2f | %-5d|\);t\!=NULL))
p2=p1;*s[6]用来存放学号;n&
printf(& /score[0];*t的后继是p1*/
p1=p2=;*累加各门成绩*/
printf(&*循环读数据直到文件尾结束*/
p1=p1->,说明待排序点值大;n&*初始化函数*/\/
system(&num,p1->,s);
if(c==');!=NULL) /!\ /*提示输入记录信息*/t8; /n没有该学生 There is no num %s* 定义函数;t\
if(p.S\* 从文件读数据函数*/;);\ /*结点数加1*/)?&average=(float)sum1/ /
score[3]; /. 读取 Load the file\ /,fp);
return (head); / /t\; /.Loading the file. 删除 Delete a record\
while(strcmp(p1->,fp);
printf(&); /.:& } /t 使用学生管理系统1,*p2;n&n&保存成功; /\ STUDENT *Init() {
return NULL;
sum1=sum1+New-&
system(",p-&*将p1指针值赋给p2作为p1的前驱指针*/,pt-&
fflush(stdin);score[i]>, /,p-&
printf(&*为下一个结点开辟空间*/
s=s+p-& /,infile);
printf(&score[i]&*插入*/
p0-&name).;\
printf(&*排序成功*/);
printf(",s;
printf(&3,p->!p1)
if(strcmp(p1-&
printf(&);*将结点序号赋值给名次*/,New->!\* 统计记录条数*/
printf(&\t\*定义指向文件的指针*/
p1->,请重新输入 Data error,New-&score[0];*打开一个二进制文件;t\score[i]),LEN,为只读方式*/
/cls& int sum1;
scanf(&score[i];
printf(&)!feof(fp)) / /);-------------------------------------------------------------------------------\\* 显示全部记录函数*/
t-&/);average&*************************************MENU***************************************\;n学号为(Num); /);\n& /n没有这个学生在表上\\*排序*/
return (head);*申请到空间; /*当记录的学号不是要找的.\数据错误D STUDENT *Sort(STUDENT *head) { int i=0; /. Don'*如果学号首字符为0则结束输入*/| Num | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |\.;t5;别忘了保存;\*删除记录函数*/,1;t9; /*移动指针;
printf(". 显示 Print the record\); /100||New-&score[1];
printf(&n&*如p不为空*/n学生Student %s 已被更新N .此函数带回一个指向链表头的指针*/ /,p-&n&成绩score%d;
New-&t当前系统日期,s);*显示当前系统日期*/i++)
printf(&%c&
printf(&*定义临时指针*/cls&
printf(& /
if(p-&*查找记录函数*/n",p->已调通
其他类似问题
学生成绩管理系统的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}