cin>>q->name;
q->num = x;
temp = p->link;
p->link = q;
q->link = temp;
}return p;
}void listclear(str
这是当初我做的那个,用链表做的,各项都能实现好好熟悉一下,希望对你有帮助
#include
#include
#include
struct stud_node{
int num;
char name[20];
int score;
struct stud_node next;
};
struct stud_node Create_Stu_Doc(); //新建链表
struct stud_node InsertDoc(struct stud_node head,struct stud_node stud); //插入
struct stud_node DeleteDoc(struct stud_node head,int num); //删除
void Print_Stu_Doc(struct stud_node head); //遍历
int main(void)
{struct stud_node head,p;
int cho,num,score;
char name[20];
int size=sizeof(struct stud_node);
do{
printf("1:Create 2:Insert 3:Delete 4:Print 0:Exitn");
scanf("%d",&cho);
switch(cho){
case 1:
head=Create_Stu_Doc();
break;
case 2:
printf("Input nun,nameand score:n");
scanf("%d%s%d",&num,name,&score);
p=(struct stud_node )malloc(size);
p->num=num;
strcpy(p->name,name);
p->score=score;
head=InsertDoc(head,p);
break;
case 3:
printf("Input num:n");
scanf("%d",&num);
head=DeleteDoc(head,num);
break;
case 4:
Print_Stu_Doc(head);
break;
case 0:
break;
}}while(cho!=0);
return 0;
}//新建链表
struct stud_node Create_Stu_Doc()
{struct stud_node head,p;
int num,score;
char name[20];
int size=sizeof(struct stud_node);
head=NULL;
printf("Input num,name,score:n");
scanf("%d%s%d",&num,name,&score);
while(num!=0){
p=(struct stud_node )malloc(size);
p->num=num;
strcpy(p->name,name);
p->score=score;
head=InsertDoc(head,p);
scanf("%d%s%d",&num,name,&score);
}return head;
}//插入作
struct stud_node InsertDoc(struct stud_node head,struct stud_node stud)
{struct stud_node ptr,ptr1, ptr2;
ptr2=head;
ptr=stud; //ptr指向待插入的新的学生记录结点
//原链表为空时的插入
if(head==NULL){
head=ptr; //新插入结点成为头结点
head->next=NULL;
}else{ //原链表不为空时的插入
while((ptr->num>ptr2->num)&&(ptr2->next!=NULL)){
ptr1=ptr2;
ptr2=ptr2->next;
}if(ptr->num<=ptr2->num){
if(head==ptr2) head=ptr;
else ptr1->next=ptr;
ptr->next=ptr2;
}else{ //新插入结点成为尾结点//
ptr2->next=ptr;
ptr->next=NULL;
return head;
}//删除作//
struct stud_node DeleteDoc(struct stud_node head,int num)
{struct stud_node ptr1,ptr2;
//要被删除的结点为表头结点
while(head!=NULL && head->num==num){
ptr2=head;
head=head->next;
free(ptr2);
}if(head==NULL) //链表空
return NULL;
//要被删除的结点为非表头结点
ptr1=head;
ptr2=head->next; //从表头的下一个结点搜索所有符合删除要求的结点
while(ptr2!=NULL){
if(ptr2->num==num){
ptr1->next=ptr2->next;
free(ptr2);
}else
ptr1=ptr2;
ptr2=ptr1->next;
}return head;
}//遍历作printf("n输入学生编号:");
void Print_Stu_Doc(struct stud_node head)
{struct stud_node ptr;
if(head==NULL){
printf("nNo Recordn");
return;
}printf("nThe Student Records Are: n");
printf(" Num name scoren");
for(ptr=head;ptr;ptr=ptr->next)
printf("%8d %20s %6dn",ptr->num,ptr->name,ptr->score);
}
两年前做的,现在都不会C语言了。
下面的代码应该是对的。没有注释,但应该能看的懂,起名字也很不规范。只有信息输入、和查询,还有平均成绩。不求得分,只是拿出来共享一下,提供个参考。
#include
#include
void fine(int size[][6],char xh[][5],char name[][9])
{int i,a,b;
char d[5];
for(;;)
{printf("请输入要查找的学号或姓名:");
scanf("%s",d);
for(i=0;i
if(strcmp(d,xh[i])==0||strcmp(d,name[i])==0)
{printf("学号:%st",xh[i]);
printf("成绩:");
for(a=0;a<5;a++)
{printf("%d ",size[i][a]);
}printf("n平均成绩:%dnn",size[i][5]);
{int size[pl][6],a,i;
char b, name[pl][9], xh[pl][5];
for(i=0;i
{printf("学号:");
scanf("%s",xh[i]);
printf("姓名:");
scanf("%s",name[i]);
printf("成绩:");
size[i][5]=0;
for(a=0;a<5;a++)
{scanf("%d",&size[i][a]);
size[i][5]+=size[i][a];
}size[i][5]/=5;
}for(i=0;i
{printf("学号:%st",xh[i]);
printf("成绩:");
for(a=0;a<5;a++)
{printf("%d ",size[i][a]);
}printf("n平均成绩:%dn",size[i][5]);
}fflush(stdin);
printf("是否要查找:y or n:n");
scanf("%c",&b);
if(b=='y'||b=='Y')
fine(size,xh,name);
}
学生成绩管理系统C语言不用链表而用结构体数组如何实现
scanf("%f",&stu[i].score1);原理一样的,只要把链表中的指针域去掉,然后再定义一个结构体数组就可以了.其它什么查询增加,排序比链表都简单.排序可以用选择法,冒泡都可以.不多就是下面一个.
#include"stdio.h"
#include"string.h"
struct
student
{char
name[10];
int
no;
int
score[5];
};
struct
student
ss[25];
float
er1[25],sum[25],er2[5];
void
fun1()
/求每个同学的平均分并输出/
{int
i,j,s=0;
for(i=0;i}p=l->next;<25;i++)
{for(j=0;j<5;j++)
s+=ss[i].score[j];
er1[i]=s/5.0;
printf("the%dstudent's
erage
score
is%f",i+1,er1[i]);
void
funn2()
/求门课的平均分并输出/
{int
i,j=0,s=0;
for(j=0;j<5;j++)
{for(i=0;i<25;i++)
s+=ss[i].score[j];
er2[j]=s/25.0;
printf("the%d
lesson's
erage
scroe
is%f",j+1,er2[j]);
void
sort()/排序/
{int
i,j,k,t;
float
m;
char
s[10];
for(i=0;i<24;i++)
{int ch;{k=i;
for(j=i+1;j<25;j++)
if(er1[k]
90||er1[i]>85)
printf("number%d,erage
score%f",ss[i].no,er1[i]);
main()
{int
i,j;
void
fun1();
void
fun2();
void
funn3();
void
funn4();
void
sort();
void
fun5();
printf("please
25
students'name
and
score:n");
for(i=0;i<25;i++)
{printf("the
number
%d
student's
name
and
number
is:",i+1);
scanf("%s,%d",ss[i].name,&ss[i].no);
printf("please
number
%d
students'five
lesson's
score:n",i+1);
for(j=0;j<5;j++)
scanf("%d",&ss[i].score[j]);
}fun1();
sort();
void
fun5();
funn3();
funn4();
}
C语言课程设计—学生成绩管理系统<急!!!!!>注意要求,谢谢
}}#include "stdio.h"
input#include "stdlib.h"
#include "string.h"
int shoudse=0; //
struct student
{char num[10];//学号
char name[20];
char [4];
int cgrade;
int mgrade;
int egrade;
int totle;
int e;
char neartime[10];//最近更新时间
};
typedef struct node
{struct student data;
struct node next;
}Node,Link;
void menu()
{printf("");
printf("t1输入ttttt2删除n");
printf("t3查询ttttt4修改n");
printf("t5显示ttttt6统计学生成绩n");
printf("t7排序学生成绩ttttt8保存n");
printf("t9获取帮助信息ttttt0退出系统n");
printf("n");
}void printstart()
{printf("-----------------------------------------------------------------------n");
}void Wrong()
}void Nofind()
{printf("n=====>提示:没有找到该学生!n");
}void printc() // 本函数用于输出中文
{printf(" 学号t 姓名 性别 英语成绩 数学成绩 C语言成绩 总分 平均分n");
}void printe(Node p)//本函数用于输出英文
{printf("%-12s%st%st%dt%dt%dt %dt %dn",p->data.num,p->data.name,p->data.,p->data.egrade,p->data.mgrade,p->data.cgrade,p->data.totle,p->data.e);
}Node Locate(Link l,char findmess[],char nameornum[]) //该函数用于定位连表中符合要求的接点,并返回该指针
{Node r;
if(strcmp(nameornum,"num")==0) //按学号查询
{r=l->next;
while(r!=NULL)
{if(strcmp(r->data.num,findmess)==0)
return r;
r=r->next;
else if(strcmp(nameornum,"name")==0) //按姓名查询
{r=l->next;
while(r!=NULL)
{if(strcmp(r->data.name,findmess)==0)
return r;
r=r->next;
return 0;
}void Add(Link l) //增加学生
{Node p,r,s;
char num[10];
r=l;
s=l->next;
while(r->next!=NULL)
r=r->next; //将指针置于最末尾
while(1)
{printf("请你输入学号(以'0'返回上一级菜单:)");
scanf("%s",num);
if(strcmp(num,"0")==0)
break;
{if(strcmp(s->data.num,num)==0)
{printf("=====>提示:学号为'%s'的学生已经存在,若要修改请你选择'4 修改'!n",num);
printstart();
printc();
printe(s);
printstart();
printf("n");
return;
}s=s->next;
}p=(Node )malloc(sizeof(Node));
strcpy(p->data.num,num);
printf("请你输入姓名:");
scanf("%s",p->data.name);
getchar();
printf("请你输入性别:");
scanf("%s",p->data.);
getchar();
printf("请你输入c语言成绩:");
scanf("%d",&p->data.cgrade);
getchar();
printf("请你输入数学成绩:");
scanf("%d",&p->data.mgrade);
getchar();
printf("请你输入英语成绩:");
scanf("%d",&p->data.egrade);
getchar();
p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;
p->data.e=p->data.totle / 3;
//信息输入已经完成
p->next=NULL;
r->next=p;
r=p;
shoudse=1;
void Qur(Link l) //查询学生
{int sel;
char findmess[20];
Node p;
if(!l->next)
{printf("n=====>提示:没有资料可以查询!n");
return;
}printf("n=====>1按学号查找n=====>2按姓名查找n");
scanf("%d",&sel);
if(sel==1)//学号
{printf("请你输入要查找的学号:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{printf("tttt查找结果n");
printstart();
printc();
printe(p);
printstart();
}else
Nofind();
}else if(sel==2) //姓名
{printf("请你输入要查找的姓名:");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{printf("tttt查找结果n");
printstart();
printc();
printe(p);
printstart();
}else
Nofind();
}else
Wrong();
}void Del(Link l) //删除
{int sel;
Node p,r;
char findmess[20];
if(!l->next)
{printf("n=====>提示:没有资料可以删除!n");
return;
}printf("n=====>1按学号删除n=====>2按姓名删除n");
scanf("%d",&sel);
if(sel==1)
{printf("请你输入要删除的学号:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf("n=====>提示:该学生已经成功删除!n");
shoudse=1;
}else
Nofind();
}else if(sel==2)
{printf("请你输入要删除的姓名:");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf("n=====>提示:该学生已经成功删除!n");
shoudse=1;
}else
Nofind();
}else
Wrong();
}void Modify(Link l)
{Node p;
char findmess[20];
if(!l->next)
{printf("n=====>提示:没有资料可以修改!n");
return;
}printf("请你输入要修改的学生学号:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{printf("请你输入新学号(原来是%s):",p->data.num);
scanf("%s",p->data.num);
printf("请你输入新的c语言成绩(原来是%d分):",p->data.cgrade);printf("请你输入新姓名(原来是%s):",p->data.name);
scanf("%s",p->data.name);
getchar();
printf("请你输入新性别(原来是%s):",p->data.);
scanf("%s",p->data.);
scanf("%d",&p->data.cgrade);
getchar();
scanf("%d",&p->data.mgrade);
getchar();
printf("请你输入新的英语成绩(原来是%d分):",p->data.egrade);
scanf("%d",&p->data.egrade);
p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;
p->data.e=p->data.totle/3;
printf("n=====>提示:资料修改成功!n");
shoudse=1;
}else
Nofind();
}void Disp(Link l)
{int count=0;
Node p;
p=l->next;
if(!p)
{printf("n=====>提示:没有资料可以显示!n");
return;
}printf("tttt显示结果n");
printstart();
printc();
printf("n");
while(p)
{printe(p);
p=p->next;
}printstart();
printf("n");
}void Tongji(Link l)
{Node pm,pe,pc,pt,pa; //用于指向分数的接点
Node r=l->next;
if(!r)
{printf("n=====>提示:没有资料可以统计!n");
return ;
}pm=pe=pc=pt=pa=r;
while(r!=NULL)
{if(r->data.cgrade>=pc->data.cgrade)
pc=r;
if(r->data.mgrade>=pm->data.mgrade)
pm=r;
if(r->data.egrade>=pe->data.egrade)
pe=r;
if(r->data.totle>=pt->data.totle)
pt=r;
if(r->data.e>=pa->data.e)
pa=r;
r=r->next;
}printf("------------------------------统计结果--------------------------------n");
printf("总分者:t%s %d分n",pt->data.name,pt->data.totle);
printf("平均分者:t%s %d分n",pa->data.name,pa->data.e);
printf("英语者:t%s %d分n",pe->data.name,pe->data.egrade);
printf("数学者:t%s %d分n",pm->data.name,pm->data.mgrade);
printf("c语言者:t%s %d分n",pc->data.name,pc->data.cgrade);
printstart();
}void Sort(Link l)
{Link ll;
Node p,rr,s;
ll=(Link)malloc(sizeof(Node)); //用于做新的连表
ll->next=NULL;
if(l->next==NULL)
{printf("n=====>提示:没有资料可以排序!n");
return ;
while(p)
{s=(Node)malloc(sizeof(Node)); //新建接点用于保存信息
s->data=p->data;
s->next=NULL;
rr=ll;
while(rr->next!=NULL && rr->next->data.totle>=p->data.totle)
rr=rr->next;
if(rr->next==NULL)
rr->next=s;
{s->next=rr->next;
rr->next=s;
}p=p->next;
}free(l);
l->next=ll->next;
printf("n=====>提示:排序已经完成!n");
}void Se(Link l)
{FILE fp;
Node p;
int flag=1,count=0;
fp=fopen("c:student","wb");
if(fp==NULL)
{printf("n=====>提示:重新打开文件时发生错误!n");
exit(1);
while(p)
{if(fwrite(p,sizeof(Node),1,fp)==1)
{p=p->next;
count++;
}else
{flag=0;
break;
if(flag)
{printf("n=====>提示:文件保存成功.(有%d条记录已经保存.)n",count);
shoudse=0;
}fclose(fp);
{Link l;//连表
FILE fp; //文件指针
int sel;
char ch;
char jian;
int count=0;
Node p,r;
printf("tttt学生成绩管理系统ntttt-------07康尼学院 XX(123456789)n");
l=(Node)malloc(sizeof(Node));
l->next=NULL;
r=l;
fp=fopen("C:student","rb");
if(fp==NULL)
{printf("n=====>提示:文件还不存在,是否创建?(y/n)n");
scanf("%c",&jian);
if(jian=='y'||jian=='Y')
fp=fopen("C:student","wb");
exit(0);
}printf("n=====>提示:文件已经打开,正在导入记录......n");
while(!feof(fp))
{p=(Node)malloc(sizeof(Node));
if(fread(p,sizeof(Node),1,fp)) //将文件的内容放入接点中
{p->next=NULL;
r->next=p;
r=p; //将该接点挂入连中
count++;
fclose(fp); //关闭文件
printf("n=====>提示:记录导入完毕,共导入%d条记录.n",count);
while(1)
{menu();
printf("请你选择作:");
scanf("%d",&sel);
if(sel==0)
{if(shoudse==1)
{ getchar();
printf("n=====>提示:资料已经改动,是否将改动保存到文件中(y/n)?n");
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
Se(l);
}printf("n=====>提示:你已经退出系统,再见!n");
break;
}switch(sel)
{case 1:Add(l);break; //增加学生
case 2:Del(l);break;//删除学生
case 3:Qur(l);break;//查询学生
case 4:Modify(l);break;//修改学生
case 5:Disp(l);break;//显示学生
case 6:Tongji(l);break;//统计学生
case 7:Sort(l);break;//排序学生
case 8:Se(l);break;//保存学生
case 9:printf("ttt==========帮助信息==========n");break;
default: Wrong();getchar();break;
}//
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int shoudse=0; / /
struct student
{char num[10];/ 学号 /
char name[20];
char class[10];
char term[2];
int ygrade;
int cgrade;
int mgrade;
int egrade;
int totle;
int e;
char neartime[10];/ 最近更新时间 /
};
typedef struct node
{struct student data;
struct node next;
}Node,Link;
void menu()
{printf("");
printf("t1登记ttttt2删除n");
printf("t3查询ttttt4修改n");
printf("t5保存ttttt0退出系统n");
printf("n");
}void printstart()
{printf("-----------------------------------------------------------------------n");
}void Wrong()
}void Nofind()
{printf("n=====>提示:没有找到该学生!n");
}void printc() / 本函数用于输出中文 /
{printf(" 学号t 姓名 班级 学期 语言成绩 英语成绩 数学成绩 C语言成绩 总分 平均分n");
}void printe(Node p)/ 本函数用于输出英文 /
{printf("%-12s%st%st%st%dt%dt%dt %dt %dn",p->data.num,p->data.name,p->data.class,p->data.term,p->data.ygrade,p->data.egrade,p->data.mgrade,p->data.cgrade,p->data.totle,p->data.e);
}Node Locate(Link l,char findmess[],char nameornum[]) / 该函数用于定位连表中符合要求的接点,并返回该指针 /
{Node r;
if(strcmp(nameornum,"num")==0) / 按学号查询 /
{r=l->next;
while(r!=NULL)
{if(strcmp(r->data.num,findmess)==0)
return r;
r=r->next;
else if(strcmp(nameornum,"name")==0) / 按姓名查询 /
{r=l->next;
while(r!=NULL)
{if(strcmp(r->data.name,findmess)==0)
return r;
r=r->next;
return 0;
}void Add(Link l) / 增加学生 /
{Node p,r,s;
char num[10];
r=l;
s=l->next;
while(r->next!=NULL)
r=r->next; / 将指针置于最末尾 /
while(1)
{printf("请你输入学号(以'0'返回上一级菜单:)");
scanf("%s",num);
if(strcmp(num,"0")==0)
break;
{if(strcmp(s->data.num,num)==0)
{printf("=====>提示:学号为'%s'的学生已经存在,若要修改请你选择'4 修改'!n",num);
printstart();
printc();
printe(s);
printstart();
printf("n");
return;
}s=s->next;
}p=(Node )malloc(sizeof(Node));
strcpy(p->data.num,num);
printf("请你输入姓名:");
scanf("%s",p->data.name);
getchar();
printf("请你输入班级:");
scanf("%s",p->data.class);
getchar();
printf("请你输入学期:");
scanf("%s",p->data.term);
getchar();
printf("请你输入语文成绩:");
scanf("%d",&p->data.ygrade);
getchar();
printf("请你输入c语言成绩:");
scanf("%d",&p->data.cgrade);
getchar();
printf("请你输入数学成绩:");
scanf("%d",&p->data.mgrade);
getchar();
printf("请你输入英语成绩:");
scanf("%d",&p->data.egrade);
getchar();
p->data.totle=p->data.ygrade+p->data.egrade+p->data.cgrade+p->data.mgrade;
p->data.e=p->data.totle / 3;
/ 信息输入已经完成 /
p->next=NULL;
r->next=p;
r=p;
shoudse=1;
void Qur(Link l) / 查询学生 /
{int sel;
char findmess[20];
Node p;
if(!l->next)
{printf("n=====>提示:没有资料可以查询!n");
return;
}printf("n=====>1按学号查找n=====>2按姓名查找n");
scanf("%d",&sel);
if(sel==1)/ 学号 /
{printf("请你输入要查找的学号:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{printf("tttt查找结果n");
printstart();
printc();
printe(p);
printstart();
}else
Nofind();
}else if(sel==2) / 姓名 /
{printf("请你输入要查找的姓名:");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{printf("tttt查找结果n");
printstart();
printc();
printe(p);
printstart();
}else
Nofind();
}else
Wrong();
}void Del(Link l) / 删除 /
{int sel;
Node p,r;
char findmess[20];
if(!l->next)
{printf("n=====>提示:没有资料可以删除!n");
return;
}printf("n=====>1按学号删除n=====>2按姓名删除n");
scanf("%d",&sel);
if(sel==1)
{printf("请你输入要删除的学号:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf("n=====>提示:该学生已经成功删除!n");
shoudse=1;
}else
Nofind();
}else if(sel==2)
{printf("请你输入要删除的姓名:");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf("n=====>提示:该学生已经成功删除!n");
shoudse=1;
}else
Nofind();
}else
Wrong();
}void Modify(Link l)
{Node p;
char findmess[20];
if(!l->next)
{printf("n=====>提示:没有资料可以修改!n");
return;
}printf("请你输入要修改的学生学号:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{printf("请你输入新学号(原来是%s):",p->data.num);
scanf("%s",p->data.num);
printf("请你输入新姓名(原来是%s):",p->data.name);
scanf("%s",p->data.name);
getchar();
printf("请你输入新班级(原来是%s):",p->data.class);
scanf("%s",p->data.class);
getch();
printf("请你输入新学期(原来是%s):",p->data.term);
scanf("%s",p->data.term);
getchar();
printf("请你输入新的语文成绩(原来是%d分):",p->data.ygrade);
scanf("%d",&p->data.ygrade);
getchar();
scanf("%d",&p->data.cgrade);
getchar();
scanf("%d",&p->data.mgrade);
getchar();
printf("请你输入新的英语成绩(原来是%d分):",p->data.egrade);
scanf("%d",&p->data.egrade);
p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;
p->data.e=p->data.totle/3;
printf("n=====>提示:资料修改成功!n");
shoudse=1;
}else
Nofind();
}void Disp(Link l)
{int count=0;
Node p;
p=l->next;
if(!p)
{printf("n=====>提示:没有资料可以显示!n");
return;
}printf("tttt显示结果n");
printstart();
printc();
printf("n");
while(p)
{printe(p);
p=p->next;
}printstart();
printf("n");
}void Tongji(Link l)
{Node pm,pe,pc,pa; / 用于指向不及格学生的接点 /
Node r=l->next;
if(!r)
{printf("n=====>提示:没有资料可以统计!n");
return ;
}pm=pe=pc=pa=r;
while(r!=NULL)
{if(r->data.ygrade<60)
pa=r;
if(r->data.cgrade<60)
pc=r;
if(r->data.mgrade<60)
pm=r;
if(r->data.egrade<60)
pe=r;
r=r->next;
}printf("------------------------------统计结果--------------------------------n");
printf("语文不及格:t%s %d分n",pe->data.name,pe->data.ygrade);
printf("英语不及格:t%s %d分n",pe->data.name,pe->data.egrade);
printf("数学不及格:t%s %d分n",pm->data.name,pm->data.mgrade);
printf("c语言不及格:t%s %d分n",pc->data.name,pc->data.cgrade);
printstart();
}void Sort(Link l)
{Link ll;
Node p,rr,s;
ll=(Link)malloc(sizeof(Node)); / 用于做新的连表 /
ll->next=NULL;
if(l->next==NULL)
{printf("n=====>提示:没有资料可以排序!n");
return ;
while(p)
{s=(Node)malloc(sizeof(Node)); / 新建接点用于保存信息 /
s->data=p->data;
s->next=NULL;
rr=ll;
while(rr->next!=NULL && rr->next->data.totle>=p->data.totle)
rr=rr->next;
if(rr->next==NULL)
rr->next=s;
{s->next=rr->next;
rr->next=s;
}p=p->next;
}free(l);
l->next=ll->next;
printf("n=====>提示:排序已经完成!n");
}void Se(Link l)
{FILE fp;
Node p;
int flag=1,count=0;
fp=fopen("c:student","wb");
if(fp==NULL)
{printf("n=====>提示:重新打开文件时发生错误!n");
exit(1);
while(p)
{if(fwrite(p,sizeof(Node),1,fp)==1)
{p=p->next;
count++;
}else
{flag=0;
break;
if(flag)
{printf("n=====>提示:文件保存成功.(有%d条记录已经保存.)n",count);
shoudse=0;
}fclose(fp);
{Link l;/ 连表 /
FILE fp; / 文件指针 /
int sel;
char ch;
char jian;
int count=0;
Node p,r;
l=(Node)malloc(sizeof(Node));
l->next=NULL;
r=l;
fp=fopen("C:student","rb");
if(fp==NULL)
{printf("n=====>提示:文件还不存在,是否创建?(y/n)n");
scanf("%c",&jian);
if(jian=='y'||jian=='Y')
fp=fopen("C:student","wb");
exit(0);
}printf("n=====>提示:文件已经打开,正在导入记录......n");
while(!feof(fp))
{p=(Node)malloc(sizeof(Node));
if(fread(p,sizeof(Node),1,fp)) / 将文件的内容放入接点中 /
{p->next=NULL;
r->next=p;
r=p; / 将该接点挂入连中 /
count++;
fclose(fp); / 关闭文件 /
printf("n=====>提示:记录导入完毕,共导入%d条记录.n",count);
while(1)
{menu();
printf("请你选择作:");
scanf("%d",&sel);
if(sel==0)
{if(shoudse==1)
{ getchar();
printf("n=====>提示:资料已经改动,是否将改动保存到文件中(y/n)?n");
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
Se(l);
}printf("n=====>提示:你已经退出系统,再见!n");
break;
}switch(sel)
{case 1:Add(l);break; / 增加学生 /
case 3:Qur(l);break;/ 查询学生 /
case 4:Modify(l);break;/ 修改学生 /
case 5:Se(l);break;/ 保存学生 /
case 9:printf("ttt==========帮助信息==========n");break;
default: Wrong();getchar();break;
}
将这个学生成绩管理系统[C语言]不用链表而用结构体数组实现
funn2();看看我变得这个,希望对你有所启发
printf("请输入分数段:n");/ Note:Your cho is C IDE /
#define pl 64#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "ctype.h"
#include "math.h"
#define N 3 /这是总的学生数,你可以想多少就多少/
char name[N][20];
int i,num[N];
float yuwen[N],shuxue[N],yingyu[N];
int input()
{for(i=0;i{printf("请输入第[%d]学生的姓名n",i+1);
scanf("%s",name[i]);
printf("请输入第[%d]学生的学号n",i+1);
scanf("%d",&num[i]);
printf("请输入第[%d]学生的语文成绩n",i+1);
scanf("%f",&yuwen[i]);
printf("请输入第[%d]学生的数学成绩n",i+1);
scanf("%f",&shuxue[i]);
printf("请输入第[%d]学生的英语成绩n",i+1);
scanf("%f",&yingyu[i]);
}return(i);
}void sort1()
{int n;
float t;
int i,j;
char a[10];
for(i=0;ifor(j=i+1;j{if(num[i]>num[j]) /条件成立,交换前后学号/
{ n=num[j];
num[j]=num[i];
num[i]=n;
strcpy(a,name[j]); /交换前后姓名,使与学号相对应/
strcpy(name[j],name[i]);
strcpy(name[i],a);
t=yuwen[j]; /交换前后语文成绩,使与学号想对应/
yuwen[j]=yuwen[i];
yuwen[i]=t;
t=shuxue[j]; /交换前后数学成绩,使与学号想对应/
shuxue[j]=shuxue[i];
shuxue[i]=t;
t=yingyu[j]; /交换前后英语成绩,使与学号想对应/
yingyu[j]=yingyu[i];
yingyu[i]=t;
printf("学生成绩按学号排序:n");
printf("姓名t学号t语文成绩t数学成绩t英语成绩n");
for(i=0;iprintf("%st%dt%.2ftt%.2ftt%.2fn",name[i],num[i],yuwen[i],shuxue[i],yingyu[i]);
}void sort2()
{int i,j;
float t;
char a[10];
int b;
for(i=0;ifor(j=i+1;j{if(yuwen[j]+shuxue[j]+yingyu[j]>yuwen[i]+shuxue[i]+yingyu[i])
{b=num[i];
num[i]=num[j];
num[j]=b;
strcpy(a,name[j]);/交换前后姓名,使与学号相对应/
strcpy(name[j],name[i]);
strcpy(name[i],a);
t=yuwen[i]; /交换前后语文成绩,使与学号想对应/
yuwen[i]=yuwen[j];
yuwen[j]=t;
t=shuxue[i]; /交换前后数学成绩,使与学号想对应/
shuxue[i]=shuxue[j];
shuxue[j]=t;
t=yingyu[i]; /交换前后英语成绩,使与学号想对应/
yingyu[i]=yingyu[j];
yingyu[j]=t;
printf("学生成绩按总分排序:n");
printf("姓名t学号t总分n");
for(i=0;i{printf("%st%dt%.2f",name[i],num[i],yuwen[i]+shuxue[i]+yingyu[i]);
printf("n");
void stat()
{int i,j;
float max1,max2,max3,min1,min2,min3;
float sum1=0,sum2=0,sum3=0;
float er1,er2,er3;
printf("姓名t学号t语文t数学t英语t总分t平均分n");
for(i=0;i{printf("%st%dt%.2ft%.2ft%.2ft%.2ft%.2f",name[i],num[i],yuwen[i],shuxue[i],yingyu[i],
yuwen[i]+shuxue[i]+yingyu[i],(yuwen[i]+shuxue[i]+yingyu[i])/3);
printf("n");
}for(i=0;i{sum1=sum1+yuwen[i];
sum2=sum2+shuxue[i];
sum3=sum3+yingyu[i];
}er1=sum1/N;/求平均分/
er2=sum2/N;
er3=sum3/N;
max1=yuwen[N-1];min1=yuwen[0];/求语文成绩的分和分/
for(j=0;j{if(max1max1=yuwen[j];
if(min1>yuwen[j])
min1=yuwen[j];
}max2=shuxue[N-1];min2=shuxue[0]; /求数学成绩的分和分/
for(j=0;j{if(max2if(min2>shuxue[j])
min2=shuxue[j];
}max3=yingyu[N-1];min3=yingyu[0];/求英语成绩的分和分/
for(j=0;j{if(max3max3=yingyu[j];
if(min3>yingyu[j])
min3=yingyu[j];
}printf("语文成绩统计:n");
printf("平均分:%.2ft""分:%.2ft""分:%.2fn",er1,max1,min1);
printf("数学成绩统计:n");
printf("平均分:%.2ft""分:%.2ft""分:%.2fn",er2,max2,min2);
printf("英语成绩统计:n");
printf("平均分:%.2ft""分:%.2ft""分:%.2fn",er3,max3,min3);
{ int k;
while(1)
{printf("学生成绩管理系统n");
printf("tt | 1. 输入 |n");
printf("tt | 2. 学生成绩排序 |n");
printf("tt | 3. 学生成绩统计 |n");
printf("tt | 0. 退出 |n");
printf("n");
printf("请输入(0~3)选择:");
scanf("%d",&k);
switch(k) /用switch语句实现功能选择/
{case 1: input();break;/输入函数/
case 2: sort1();sort2();break;/成绩排序函数/
case 3: stat();break;/成绩统计函数/
case 0: exit(0);break;/退出/
}
用C++编写学生成绩管理系统
ADDR plocal;#include
#include
#include
#include
#include
#include
struct student //定义一个学生结构体
{char name[8];
int num;
int GS,YYfloat cj2;/成绩2/,JSJ,SUM;
};
int s=0;
class student1 //定义一个学生类
{private:
student stu[40];
char name,add;
int num;
int GS,YY,JSJ,SUM;
public:
void sr(char ,int,char ,int,int,int);
void print(int);
int jc(int xxh)
{int m=0;
while(m<=s+1)
if(xxh==stu[m++].num)
break;
if(m>s+1)
return 0;
return 1;
}void cz(int);
void sc(int);
void sum(int);
};
void student1::sr(char xm,int xh,char dz,int gs,int yy,int jsj) //输入模块
{strcpy(stu[s].name,xm);
stu[s].num=xh;
strcpy(stu[s].add,dz);
stu[s].GS=gs;
stu[s].YY=yy;
stu[s].JSJ=jsj;
}void student1::print(int s) //输出模块
{cout<
cout<cout<cout<cout<cout<cout<cout<}void student1::cz(int s) //查找模块
{int xxh,p;
while(s==0)
{cout<<"没有记录,请先输入记录!"<break;
}if(s!=0)
{cout<<"请输入您要查找的学号:";
cin>>xxh;
while (xxh<100000||xxh>999999) //判断输入的学号是否正确
{cout<<"您输入的学号不正确,请输入一个六位数的学号"<cin>>xxh;
}while(s!=0) //查找是否有符合条件的记录
{p=1;
if (xxh==stu[s].num)
{cout<<"姓名t学号t地址t高数t英语t计算机"<cout<cout<cout<cout<cout<cout<getch();
break;
}else
p=0;
s--;
cout<<"很抱歉,没有找到您要查找的学号!"<getch();
}void student1::sc(int n) //删除模块
{int xxh,p;
char da;
while(s==0)
{cout<<"没有记录,请先输入记录!"<break;
}if(s!=0)
{cout<<"请输入您要删除的学号:";
cin>>xxh;
while (xxh<100000||xxh>999999)
{cout<<"您输入的学号不正确,请您输入一个六位数的学号" <cin>>xxh;
}for(int i=1;i<=n;i++)
{if(stu[i].num!=xxh)
p=0;
if(stu[i].num==xxh)
{cout<<"姓名t学号t地址t高数t英语t计算机"<cout<cout<cout<cout<cout<cout<cout<<"您确实要删除该学生的记录吗?(y/n)";
cin>>da;
if(da=='y'||da=='Y')
{for(int j=fflush(stdin);i;j<=n-1;j++) //删除记录
{strcpy(stu[j].name,stu[j+1].name);
stu[j].num=stu[j+1].num;
strcpy(stu[j].add,stu[j+1].add);
stu[j].GS=stu[j+1].GS;
stu[j].YY=stu[j+1].YY;
stu[j].JSJ=stu[j+1].JSJ;
}cout<<"该记录已删除!"<s=s-1;
p=1;
break;
}else
{cout<<"该记录未删除!"<p=1;
cout<<"很抱歉,没有找到您要找的学号!"<}getch();
}void student1::sum(int s) //排序模块
{int chang;
int b[40];
while(s==0)
{cout<<"没有记录,请先输入记录!"<break;
}if(s!=0)
{cout<<"姓名t学号t地址t英语t";
cout<<"高数t计算机t总分"<for(int k=1;k<=s;k++)
{b[k]=stu[k].GS+stu[k].YY+stu[k].JSJ;
stu[k].SUM=stu[k].GS+stu[k].YY+stu[k].JSJ;
}for(int i=1;i<=s;i++) //利用冒泡法对B[]进行排序
for(int j=1;j<=s-i;j++)
if(b[j]
{chang=b[j];
b[j]=b[j+1];
b[j+1]=chang;
}for(int h=1;h<=s;h++) //输出与B[]中相同总分所对应的内容
for(int e=1;e<=s;e++)
if(b[h]==stu[e].SUM)
{cout<cout<cout<cout<cout<cout<cout<getch();
{student1 st;
char da,a;
char xm,dz;
int gs,yy,jsj,xh;
time_t t;
time(&t);
while(1)
{("cls");
cout<<" 版权所有:张珊珊 肖朋丽 姚约汉"<cout<cout<<" 学生成绩管理系统"<cout<<" 显示系统时间和日期:"<cout<<"1.输入/添加"<cout<<"2.显示"<cout<<"3.按学号查找"<cout<<"4.删除记录"<cout<<"5.按总分进行排序"<cout<<"6.退出"<cout<<"请选择作(1-6)"<cin>>a;
t: if(a=='6') break;
switch (a)
{case '1':
{cout<<"请依次输入学生的姓名,学号,地址,高数,英语,计算机:"<xm=new char[];dz=new char[];
cin>>xm>>xh>>dz>>gs>>yy>>jsj;
while(st.jc(xh)) //调用JC模块判断学号是否重复
{cout<<"学号重复,请重新输入!"<cin>>xh;
}s=s+1;
st.sr(xm,xh,dz,gs,yy,jsj);
cout<<"是否继续输入?(y/n)";
cin>>da;
while (da=='y'||da=='Y') //判断是否要继续输入
{cout<<"请依次输入学生的姓名,学号,地址,高数,英语,计算机:"<xm=new char[];dz=new char[];
cin>>xm>>xh>>dz>>gs>>yy>>jsj;
while(st.jc(xh))
{cout<<"学号重复,请重新输入!"<cin>>xh;
}s=s+1;
st.sr(xm,xh,dz,gs,yy,jsj);
cout<<"是否继续输入?(y/n)";
cin>>da;
}getch();
case '2':
{if(s==0) //判断是否有记录输入
{cout<<"没有记录,请先输入记录!"<getch();
break;
}if(s!=0)
{cout<<"序号"<<"t";
cout<<"姓名"<<"t";
cout<<"学号"<<"t";
cout<<"地址"<<"t";
cout<<"高数"<<"t";
cout<<"英语"<<"t";
cout<<"计算机"<for(int i=1;i<=s;i++)
st.print(i);
getch();
}};break;
case '3':st.cz(s);break;
case '4':st.sc(s);break;
case '5':st.sum(s);break;
default:
{while(a=='0'||a>'6') //判断选项是否正确
{cout<<"错误选项,请重新选择!"<cin>>a;
}goto t;
cout<<"谢谢您的使用!"<}