学生成绩管理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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;
主函数: int main()
新建函数:infor *init()
输入函数:infor *creat()
显示函数: struct infor *view(struct infor *head)
删除函数: infor *delete(infor *head)
按名字寻找函数: void lookup(infor *head)
保存函数: void save(infor *head)
按总分排序函数: infor *sort(infor *head)
计算总分和均分函数: void zong(struct infor *head) 修改函:void change(struct infor *head)
按学号排序函数: infor *index(infor *h)
3 系统实现
3.1 题目一
(源代码)
#include
#include
#include
#define N 4
struct infor
{
int term; // 定义学期(1或2) int no; //学号
int clas; //定义班级(1或2班)
char name[9]; //姓名
float chinese; //定义四门成绩
float english;
float math;
float computer;
struct infor *link;
};
int n=0 ;
//***************************************************************************** *
//函数功能:创建链表,录入学生的相关信息,此函数返回一个指向链表头的指针
//***************************************************************************** *
struct infor *creat()
{
struct infor *head=NULL,*p=NULL,*q=NULL;
char c;
fflush(stdin);
printf("是否要输入信息(y/n):");
scanf("%c",&c);
p=q=(struct infor *)malloc(sizeof(struct infor));
q=head;
while(p!=NULL&&c=='y')
{
n++;
p=(struct infor *)malloc(sizeof(struct infor));
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);