学生成绩信息管理系统C语言呕心沥血整理版.docx

上传人:b****7 文档编号:25502569 上传时间:2023-06-09 格式:DOCX 页数:41 大小:444.56KB
下载 相关 举报
学生成绩信息管理系统C语言呕心沥血整理版.docx_第1页
第1页 / 共41页
学生成绩信息管理系统C语言呕心沥血整理版.docx_第2页
第2页 / 共41页
学生成绩信息管理系统C语言呕心沥血整理版.docx_第3页
第3页 / 共41页
学生成绩信息管理系统C语言呕心沥血整理版.docx_第4页
第4页 / 共41页
学生成绩信息管理系统C语言呕心沥血整理版.docx_第5页
第5页 / 共41页
点击查看更多>>
下载资源
资源描述

学生成绩信息管理系统C语言呕心沥血整理版.docx

《学生成绩信息管理系统C语言呕心沥血整理版.docx》由会员分享,可在线阅读,更多相关《学生成绩信息管理系统C语言呕心沥血整理版.docx(41页珍藏版)》请在冰豆网上搜索。

学生成绩信息管理系统C语言呕心沥血整理版.docx

学生成绩信息管理系统C语言呕心沥血整理版

1.题目

《学生成绩管理系统》的设计与实现

2。

功能

(1)每一条记录包括一个学生的学号、姓名、3门成绩、平均成绩。

(2)输入功能:

可以一次完成无数条记录的输入.

(3)显示功能:

完成全部学生记录的显示。

(4)查找功能:

完成按姓名查找学生记录,并显示.

(5)排序功能:

按学生平均成绩进行排序。

(6)插入功能:

按平均成绩高低插入一条学生记录。

(7)保存功能:

将学生记录保存在任何自定义的文件中,如保存在:

c:

\score.

(8)读取功能:

将保存在文件中的学生记录读取出来.

(9)有一个清晰美观界面来调用各个功能

3。

要求

(1)整个系统均用C语言实现;

(2)利用指针、链表来实现学生成绩的数据结构设计;

(3)系统具有输入、显示、查询、删除、排序、插入,保存、读取基本功能;

(4)系统的各个功能模块都用函数的形式来实现;

(5)可以将学生成绩信息保存在文件中。

(6)可以将学生信息从文件中读取出来。

4。

源程序

#include

h〉

#include〈stdio。

h〉

#include

h〉

#defineLENsizeof(structscorenode)

#defineDEBUG

#include〈string.h>

structscorenode

{intnumber;/*学号*/

charname[10];/*姓名*/

floatyuwen;/*语文成绩*/

floatyingyu;/*英语成绩*/

floatshuxue;/*数学成绩*/

structscorenode*next;

};

typedefstructscorenodescore;

intn,k;/*n,k为全局变量,本程序中的函数均可以使用它*/

/*==============================================================================================*/

score*creat2311(void)

/*函数creat2311,功能:

创建链表,此函数带回一个指向链表头的指针*/

{

score*head;

score*p1,*p2,*p3,*max;

inti,j;

floatfen;

chart[10];

n=0;

p1=p2=p3=(score*)malloc(LEN);head=p3;/*开辟一个新单元*/

printf(”请输入学生资料,输0退出!

\n");

repeat1:

printf("请输入学生学号(学号应大于0):

”);/*输入学号,学号应大于0*/

scanf("%d",&p1—〉number);

while(p1->number〈0)

{getchar();

printf(”输入错误,请重新输入学生学号:

”);

scanf(”%d",&p1->number);}

/*输入学号为字符或小于0时,程序报错,提示重新输入学号*/

if(p1-〉number==0)

gotoend;/*当输入的学号为0时,转到末尾,结束创建链表*/

else

p3=head;

if(n〉0)

{for(i=0;i〈n;i++)

{if(p1—>number!

=p3-〉number)

p3=p3—〉next;

else

{printf("学号重复,请重输!

\n”);

gotorepeat1;

/*当输入的学号已经存在,程序报错,返回前面重新输入*/

}

printf(”请输入学生姓名:

");

scanf(”%s”,&p1—〉name);/*输入学生姓名*/

printf("请输入语文成绩(0~100):

");/*输入语文成绩,成绩应在0-100*/

scanf(”%f”,&p1->yuwen);

while(p1-〉yuwen〈0||p1—〉yuwen〉100)

{getchar();

printf(”输入错误,请重新输入语文成绩");/*输入错误,重新输入语文成绩直到正确为止*/

scanf(”%f”,&p1—〉yuwen);}

printf(”请输入英语成绩(0~100):

”);/*输入英语成绩,成绩应在0—100*/

scanf(”%f”,&p1—〉yingyu);

while(p1—〉yingyu〈0||p1—〉yingyu〉100)

{getchar();

printf("输入错误,请重新输入英语成绩”);/*输入错误,重新输入英语成绩直到正确为止*/

scanf("%f",&p1—〉yingyu);}

printf(”请输入数学成绩(0~100):

”);/*输入数学成绩,成绩应在0-100*/

scanf("%f”,&p1-〉shuxue);

while(p1—〉shuxue<0||p1—〉shuxue〉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退出!

\n”);

repeat2:

printf(”请输入学生学号(学号应大于0):

”);

scanf("%d”,&p1—>number);/*输入学号,学号应大于0*/

while(p1->number〈0)

{getchar();

printf("输入错误,请重新输入学生学号:

”);

scanf("%d”,&p1—>number);}

/*输入学号为字符或小于0时,程序报错,提示重新输入学号*/

if(p1—〉number==0)

gotoend;/*当输入的学号为0时,转到末尾,结束创建链表*/

else

p3=head;

if(n>0)

{for(i=0;i〈n;i++)

{if(p1—〉number!

=p3—〉number)

p3=p3—〉next;

else

{printf(”学号重复,请重输!

\n”);

gotorepeat2;

/*当输入的学号已经存在,程序报错,返回前面重新输入*/

}

}

}

printf(”请输入学生姓名:

”);

scanf("%s",&p1—>name);/*输入学生姓名*/

printf("请输入语文成绩(0~100):

”);

scanf(”%f",&p1—〉yuwen);/*输入语文成绩,成绩应在0-100*/

while(p1—>yuwen〈0||p1->yuwen>100)

{getchar();

printf(”输入错误,请重新输入语文成绩”);

scanf("%f",&p1—〉yuwen);}/*输入错误,重新输入语文成绩直到正确为止*/

printf("请输入英语成绩(0~100):

”);

scanf(”%f”,&p1-〉yingyu);/*输入英语成绩,成绩应在0-100*/

while(p1->yingyu<0||p1—〉yingyu〉100)

{getchar();

printf("输入错误,请重新输入英语成绩”);

scanf(”%f”,&p1—>yingyu);}/*输入错误,重新输入英语成绩直到正确为止*/

printf("请输入数学成绩(0~100):

");

scanf("%f”,&p1-〉shuxue);/*输入数学成绩,成绩应在0—100*/

while(p1—〉shuxue<0||p1->shuxue〉100)

{getchar();

printf("输入错误,请重新输入数学成绩”);

scanf(”%f",&p1—〉shuxue);}/*输入错误,重新输入数学成绩直到正确为止*/

end:

p1=head;

p3=p1;

for(i=1;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",n);

return(head);

}

/*==============================================================================================*/

/*==============================================================================================*/

score*load2311(score*head)

/*函数load2311,功能:

从文件读入学生记录*/

{score*p1,*p2;

intm=0;

charfilepn[10];

FILE*fp;

printf(”请输入文件路径及文件名:

”);

scanf("%s",filepn);/*输入文件路径及名称*/

if((fp=fopen(filepn,"r+"))==NULL)

printf("不能打开文件!

\n”);

return0;

}

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\t|%s\t|%。

1f\t|%.1f\t|%。

1f\t|\n”,p1-〉number,p1—>name,p1—〉yuwen,p1—>yingyu,p1—〉shuxue);

/*文件读入与显示*/

head=NULL;

do

n=n+1;

if(n==1)head=p1;

elsep2—>next=p1;

p2=p1;

p1=(score*)malloc(LEN);/*开辟一个新单元*/

fscanf(fp,"%d%s%f%f%f\n”,&p1—〉number,p1—〉name,&p1-〉yuwen,&p1—>yingyu,&p1-〉shuxue);

printf(”|%d\t|%s\t|%.1f\t|%。

1f\t|%。

1f\t|\n”,p1—>number,p1—〉name,p1—〉yuwen,p1—〉yingyu,p1->shuxue);

/*文件读入与显示*/

}while(!

feof(fp));

p2—〉next=p1;

p1—〉next=NULL;

n=n+1;

}printf("—--———-———-——-—————-———————————-———-—————\n");/*表格下线*/

fclose(fp);/*结束读入,关闭文件*/

return(head);

/*==============================================================================================*/

/*==============================================================================================*/

score*add2311(score*head,score*stu)

/*函数add2311,功能:

追加学生资料,并且将所有学生资料按学号排序*/

{

score*p0,*p1,*p2,*p3,*max;

inti,j;

floatfen;

chart[10];

p3=stu=(score*)malloc(LEN);/*开辟一个新单元*/

printf(”\n输入要增加的学生的资料!

”);

repeat4:

printf(”请输入学生学号(学号应大于0):

”);

scanf(”%d”,&stu—〉number);

/*输入学号,学号应大于0*/

while(stu->number〈0)

{getchar();

printf(”输入错误,请重新输入学生学号:

");

scanf("%d”,&stu—〉number);}/*输入错误,重新输入学号*/

/******************************************************/

if(stu—〉number==0)

gotoend2;/*当输入的学号为0时,转到末尾,结束追加*/

else

p3=head;

if(n>0)

{for(i=0;i〈n;i++)

{if(stu—>number!

=p3->number)

p3=p3—〉next;

else

{printf(”学号重复,请重输!

\n");

gotorepeat4;

/*当输入的学号已经存在,程序报错,返回前面重新输入*/

}

}

/******************************************************/

printf(”输入学生姓名:

”);

scanf("%s",stu-〉name);/*输入学生姓名*/

printf("请输入语文成绩(0~100):

”);

scanf("%f”,&stu—〉yuwen);/*输入语文成绩,成绩应在0-100*/

while(stu—>yuwen〈0||stu—>yuwen>100)

{getchar();

printf(”输入错误,请重新输入语文成绩”);

scanf(”%f”,&stu-〉yuwen);}/*输入错误,重新输入语文成绩直到正确为止*/

printf(”请输入英语成绩(0~100):

”);

scanf(”%f”,&stu-〉yingyu);/*输入英语成绩,成绩应在0—100*/

while(stu—〉yingyu<0||stu-〉yingyu〉100)

{getchar();

printf(”输入错误,请重新输入英语成绩");

scanf("%f”,&stu—〉yingyu);}/*输入错误,重新输入英语成绩直到正确为止*/

printf("请输入数学成绩(0~100):

”);

scanf("%f”,&stu—>shuxue);/*输入数学成绩,成绩应在0—100*/

while(stu-〉shuxue〈0||stu—〉shuxue〉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",n);

return(head);

}

/*==============================================================================================*/

/*==============================================================================================*/

score*search2311(score*head)

/*函数search2311,功能:

查询学生成绩*/

{intnumber;

score*p1,*p2;

printf("输入要查询的学生的学号,”);

scanf(”%d”,&number);

while(number!

=0)

{

if(head==NULL)

{printf(”\n没有任何学生资料!

\n”);return(head);}

printf("————-——-————---—————--—-—-——-——-———-—----\n”);

printf(”|学号\t|姓名\t|语文\t|英语\t|数学\t|\n”);

printf(”————-——--—----—-—-————--——--——---————————\n");/*打印表格域*/

p1=head;

while(number!

=p1—〉number&&p1—>next!

=NULL)

{p2=p1;p1=p1->next;}

if(number==p1—>number)

{printf("|%d\t|%s\t|%。

1f\t|%.1f\t|%。

1f\t|\n”,p1->number,p1—〉name,p1—〉yuwen,p1-〉yingyu,p1-〉shuxue);

printf("—--————-—--————--————-—-———-—-———-——————-\n");}/*打印表格域*/

else

printf(”%d不存在此学生!

\n”,number);

printf(”输入要查询的学生的学号,”);

scanf("%d”,&number);

printf(”已经退出了!

\n”);

return(head);}

/*==============================================================================================*/

/*==============================================================================================*/

score*del2311(score*head)/*函数del2311,功能:

删除学生资料*/

score*p1,*p2;

intnumber;

printf(”输入要删除的学生的学号(输入0时退出):

");

scanf("%d",&number);

getchar();

while(number!

=0)/*输入学号为0时退出*/

{

if(head==NULL)

printf(”\n没有任何学生资料!

\n”);

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;

/*否则将下一个结点地址赋给前一

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 社交礼仪

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1