学生成绩管理系统讲解学习.docx

上传人:b****3 文档编号:26796992 上传时间:2023-06-22 格式:DOCX 页数:30 大小:139.37KB
下载 相关 举报
学生成绩管理系统讲解学习.docx_第1页
第1页 / 共30页
学生成绩管理系统讲解学习.docx_第2页
第2页 / 共30页
学生成绩管理系统讲解学习.docx_第3页
第3页 / 共30页
学生成绩管理系统讲解学习.docx_第4页
第4页 / 共30页
学生成绩管理系统讲解学习.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

学生成绩管理系统讲解学习.docx

《学生成绩管理系统讲解学习.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统讲解学习.docx(30页珍藏版)》请在冰豆网上搜索。

学生成绩管理系统讲解学习.docx

学生成绩管理系统讲解学习

1问题描述

学生成绩管理系统

学生成绩管理系统

学生信息包括学期、学号、班级、姓名,和语文、数学、英语、计算机四门课成绩。

并按班级、学期查询学生成绩,并能录入、修改,求学生平均成绩和总成绩,输出不及格科目,按班级输出成绩单,按班级对学生成绩进行排序。

2系统分析

2.1题目要求

学生成绩管理系统设计

学生成绩信息包括:

学期,学号,班别,姓名,四门课程成绩(语文、数学、英语和计算机)。

主要功能:

(1)能按学期、按班级完成对学生成绩的录入、修改

(2)能按班级统计学生的成绩,求学生的总分及平均分,设计并输出统计报表

(3)能查询学生成绩,不及格科目及学生名单

(4)能按班级输出学生的成绩单

(5)能按班级,按课程,对学生成绩进行排序。

要求:

使用二进制文件方式存储数据,系统以菜单方式工作

2.2算法设计

(1)创建主菜单

(2)实现学生成绩信息录入

(3)实现学生成绩信息修改

(4)实现学生成绩信息查询

(a)按学期、班级查询学生的成绩

(b)按学号查询学生的成绩

(c)查询不及格的科目和学生名单

(5)实现学生成绩成绩统计

(a)按班级统计学生的总分、平均分

(b)按班级、课程对学生的总分进行排序

(6)实现学生成绩信息浏览

2.3流程图

 

2.4关键问题

难点:

指针p、函数。

解决:

head=NULL无条件循环

指针p指向新开辟的单元

指针p是否为空

是否

输入学号p->num

输出p->num是否为@

内存是否

溢出输入姓名p->name

停止for(i=0;i<3;i++)

输入输入成绩

返回p->sum=s;

菜单p->average=(float)s/3;

主函数:

intmain()

新建函数:

infor*init()

输入函数:

infor*creat()

显示函数:

structinfor*view(structinfor*head)

删除函数:

infor*delete(infor*head)

按名字寻找函数:

voidlookup(infor*head)

保存函数:

voidsave(infor*head)

按总分排序函数:

infor*sort(infor*head)

计算总分和均分函数:

voidzong(structinfor*head)

修改函:

voidchange(structinfor*head)

按学号排序函数:

infor*index(infor*h)

 

3系统实现

3.1题目一

(源代码)

#include

#include

#include

#defineN4

structinfor

{

intterm;//定义学期(1或2)

intno;//学号

intclas;//定义班级(1或2班)

charname[9];//姓名

floatchinese;//定义四门成绩

floatenglish;

floatmath;

floatcomputer;

structinfor*link;

};

intn=0;

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

//函数功能:

创建链表,录入学生的相关信息,此函数返回一个指向链表头的指针

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

structinfor*creat()

{

structinfor*head=NULL,*p=NULL,*q=NULL;

charc;

fflush(stdin);

printf("是否要输入信息(y/n):

");

scanf("%c",&c);

p=q=(structinfor*)malloc(sizeof(structinfor));

q=head;

while(p!

=NULL&&c=='y')

{

n++;

p=(structinfor*)malloc(sizeof(structinfor));

printf("请输入要录入学生信息的学期:

");

fflush(stdin);

scanf("%d",&p->term);//学期只能为1或2

while(p->term!

=1&&p->term!

=2)

{

getchar();

printf("输入错误!

请重新输入:

");//若学期不为1或2,则输入有误

scanf("%d",&p->term);

}

printf("请输入要录入学生成绩信息的班级:

");

fflush(stdin);//班级只能为1或2

scanf("%d",&p->clas);

while(p->clas!

=1&&p->clas!

=2)

{

getchar();

printf("输入错误!

请重新输入:

");

scanf("%d",&p->clas);

}

printf("请输入该班的学生信息!

\n");//输入学生信息(包括学号、四门成绩)

printf("请输入学生学号:

");

fflush(stdin);

scanf("%d",&p->no);

printf("请输入学生姓名:

");

fflush(stdin);

scanf("%s",p->name);//输入学生姓名

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

");//输入四门成绩

scanf("%f",&p->chinese);

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

");

scanf("%f",&p->math);

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

");

scanf("%f",&p->english);

printf("请输入计算机成绩(0-100):

");

scanf("%f",&p->computer);

if(n==1)//创建新结点

head=p;

else

q->link=p;

q=p;

printf("是否还要输入信息(y/n):

");

fflush(stdin);

scanf("%c",&c);

}

q->link=NULL;//链表结尾

return(head);//链表返回头指针

}

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

//函数功能:

实现对学生信息的修改

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

voidchange(structinfor*head)

{

structinfor*p=head;

charch,m;

charname[9];//定义一个数组,存储学生的姓名

intnum;

if(p==NULL)printf("出错!

请先输入学生信息!

");

while

(1)//设置循环控制

{

printf("\t\t\t请选择要修改的信息!

\t\n");

printf("\t\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");//输出要修改的信息

printf("\t\t\ta、学号:

\n");

printf("\t\t\tb、姓名:

\n");

printf("\t\t\tc、班级:

\n");

printf("\t\t\td、成绩:

\n");

printf("\t\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");

fflush(stdin);//清盘

scanf("%c",&ch);

if(ch=='a')

{

printf("你要修改的信息是:

学号!

\n");//按姓名修改学号

printf("请输入你要修改的学生姓名:

");

scanf("%s",name);

if(strcmp(name,p->name)==0)

{

printf("请输入该学生新的学号:

");//输入新学号

scanf("%d",&p->no);

}

elseprintf("无法查找到该学生!

\n");//找不到信息

}

elseif(ch=='b')//按学号修改该班级学生的信息

{

printf("你要修改的信息是:

姓名!

\n");

printf("请输入你要修改的学生的学号:

");

scanf("%d",&num);

if(num==p->no)//输入学号,判断条件

{

printf("请输入该学生的姓名:

");

scanf("%s",p->name);//输入要做修改的学生姓名

}

elseprintf("无法查找到该学生!

\n");//找不到信息

}

elseif(ch=='c')

{

printf("你要修改的信息是:

班级!

\n");//按学号修改班级

printf("请输入你要修改的学生的学号:

");

scanf("%d",&num);

if(num==p->no)

{

printf("请输入该学生的班级:

");//输入要做修改的班级

scanf("%d",p->clas);

}

elseprintf("无法查找到该学生!

\n");//找不到信息

}

elseif(ch=='d')

{

printf("你要修改的信息是:

成绩!

\n");//按学号修改成绩

printf("请输入你要修改的学生的学号:

");

scanf("%d",&num);

if(num==p->no)//输入学号

{

printf("请输入该学生新的语文成绩:

");

scanf("%f",p->chinese);

printf("请输入该学生新的数学成绩:

");

scanf("%f",p->math);//输入新的四门成绩

printf("请输入该学生新的英语成绩:

");

scanf("%f",p->english);

printf("请输入该学生新的计算机成绩:

");

scanf("%f",p->computer);

}

elseprintf("无法查找该学生的信息!

\n");//找不到信息

}

elseprintf("出错!

\n");

p=p->link;

printf("是否还要继续修改信息(y/n):

");//判断,是否还要修改信息,跳出循环

fflush(stdin);

if((m=getchar())=='n')break;

}

}

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

//函数功能:

按照学号查询学生信息

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

voidcheckno(structinfor*head)

{//按学号查询学生的成绩

structinfor*p;

p=head;

intnum,i=0;

printf("请输入你要查询的学生学号:

\n");

scanf("%d",&num);

if(num==p->no)//输入学号,判断条件

{

printf("--------------------------------------------------------------------------");

printf("\t学期\t学号\t班别\t姓名\t语文\t数学\t英语\t计算机\t\n");

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

printf("%d\t",p->term);

printf("%d\t",p->no);

printf("%d\t",p->clas);//输出学生的班级

printf("%s\t",p->name);

printf("%1f\t",p->chinese);//输出四门成绩

printf("%1f\t",p->math);

printf("%1f\t",p->english);

printf("%1f\t",p->computer);

i=2;

}

if(i==0)

printf("没找到该学生的信息!

");//找不到信息

}

voidcheckclass(structinfor*head)

{

intbanji,i=0;

structinfor*p=head;

while(p!

=NULL)//按班级查询学生的成绩

{

printf("请输入你要查询成绩的班级:

");

scanf("%d",&banji);

if(banji==p->clas)

{

printf("请输出%d班所有同学的成绩:

",banji);

printf("--------------------------------------------------------------------------");

printf("\t学期\t学号\t班别\t姓名\t语文\t数学\t英语\t计算机\t\n");

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

printf("%d\t",p->term);//输出要查询成绩的班级

printf("%d\t",p->no);//输出查询成绩的学生学号

printf("%d\t",p->clas);//输出要查询成绩的班级

printf("%s\t",p->name);//输出要查询成绩的学生姓名

printf("%1f\t",p->chinese);

printf("%1f\t",p->math);//输出四门成绩

printf("%1f\t",p->english);

printf("%1f\t",p->computer);

printf("\n");

i=2;

}

p=p->link;

if(i==0)

printf("没找到学生信息!

");//输出错误,找不到信息

}

}

voidcheckterm(structinfor*head)//定义按学期查找信息的函数

{

intxueqi,i=0;

structinfor*p=head;

while(p!

=NULL)//设置循环控制

{

//按学期查询学生的成绩

printf("请输入你要查询成绩的学期:

");

scanf("%d",&xueqi);

if(xueqi==p->term)

{

printf("请输出第%d学期所有班级的信息:

");

printf("--------------------------------------------------------------------------");

printf("\t学期\t学号\t班别\t姓名\t语文\t数学\t英语\t计算机\t\n");

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

printf("%d\t",p->term);

printf("%d\t",p->no);

printf("%d\t",p->clas);

printf("%s\t",p->name);//输出姓名

printf("%1f\t",p->chinese);

printf("%1f\t",p->math);

printf("%1f\t",p->english);//输出四门成绩

printf("%1f\t",p->computer);

printf("\n");

i=2;

}

p=p->link;

if(i==0)

printf("没找到学生信息!

");//找不到信息

}

}

voidnorich(structinfor*head)//定义一个函数,查找不及格的学生

{

structinfor*p;

p=head;

intnum,i=0;

floattoa;

printf("请输入要查询成绩的学生学号:

");

scanf("%d",&num);

if(num==p->no)

{

printf("正在查询该学生的成绩,请稍侯>>>>>\n");//查询学生的成绩,输出不及格的科目

while(p!

=NULL)

{

if(p->chinese<60)

{

printf("该学生的语文不及格!

\n");

printf("\n");

i++;

}

if(p->math<60)//输出该学生的不及格科目

{

printf("该学生的数学不及格!

\n");

printf("\n");

i++;

}

if(p->english<60)

{

printf("该学生的英语不及格!

\n");//对各门成绩进行判断

printf("\n");

printf("\n");

i++;

}

if(p->computer<60)

{

printf("该学生的计算机不及格!

\n");

printf("\n");

i++;

}

if(i>0)

printf("%s同学共有%d门成绩不及格!

\n学号是:

%d\n",p->name,i,p->no);

printf("\n");

toa=p->chinese+p->math+p->english+p->computer;

if(toa<240)

printf("不及格学生名单为:

%s",p->name);//输出不及格的学生名单

p=p->link;

}

}

}

voidsearch(structinfor*head)//定义一个查询学生信息的函数,调用各子函数,进行查询

{

chark,ch;

structinfor*p=head;

while(p!

=NULL)//设置循环控制条件

{//输出查询方式

printf("\t\t\t你要选择何种方式查询成绩!

\n");

printf("\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");

printf("\t\t\ta、学号:

\n");

printf("\t\t\tb、班级:

\n");

printf("\t\t\tc、学期:

\n");

printf("\t\t\td、不及格的学生:

\n");

printf("\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");

fflush(stdin);

scanf("%c",&k);

switch(k)

{

case'a':

checkno(head);break;//调用学号函数

case'b':

checkclass(head);break;

case'c':

checkterm(head);break;

case'd':

norich(head);break;

}

printf("\n");

printf("是否还要继续查询学生的信息(y/n):

");

fflush(stdin);

if((ch=getchar())=='n')break;//跳出循环,返回主菜单

}

}

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

//函数功能:

对学生成绩进行统计,按班级求总分及平均分

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

voidzong(structinfor*head)//对该班级的学生成绩求总分、平均分

{

floattoa=0,ave=0;

inti=0;

structinfor*p=head;

while(p!

=NULL)

{

toa=p->chinese+p->math+p->english+p->computer;//输出学生的总分和平均分成绩

ave=toa/N;

printf("第%d个学生的总分为:

%1f!

\n",i+1,toa);

printf("\n");

printf("第%d个学生的平均分:

%1f!

\n",i+1,ave);

printf("\n");

printf("已经统计了第%d个学生的成绩!

\n",i+1);//统计完毕

printf("\n");

i++;

p=p->link;//指向下一个结点

}

}

voidpaixu(structinfor*head)//对该班级的学生成绩进行排序

{

inti=0,j;

floata[10],t;//把结点信息输入到数组,然后排序

structinfor*p=head;

while(p!

=NULL)

{

a

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

当前位置:首页 > 初中教育 > 科学

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

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