收藏 分销(赏)

学生成绩综合管理系统.docx

上传人:精**** 文档编号:2827803 上传时间:2024-06-06 格式:DOCX 页数:29 大小:143.74KB 下载积分:10 金币
下载 相关 举报
学生成绩综合管理系统.docx_第1页
第1页 / 共29页
学生成绩综合管理系统.docx_第2页
第2页 / 共29页


点击查看更多>>
资源描述
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<stdio.h> #include<stdlib.h> #include <string.h> #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); } q->link=NULL; //链表结尾 return(head); //链表返回头指针 } //****************************************************************************** //函数功效:实现对学生信息修改 //****************************************************************************** void change(struct infor *head) { struct infor *p=head; char ch,m; char name[9]; //定义一个数组,存放学生姓名 int num; if(p==NULL)printf("犯错!请先输入学生信息!"); while(1) //设置循环控制 { printf("\t\t\t请选择要修改信息!\t\n"); printf("\t\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); // 输出要修改信息 printf("\t\t\t a、学号: \n"); printf("\t\t\t b、姓名: \n"); printf("\t\t\t c、班级: \n"); printf("\t\t\t d、成绩: \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); } else printf("无法查找到该学生!\n"); //找不到信息 } else if(ch=='b') //按学号修改该班级学生信息 { printf("你要修改信息是:姓名!\n"); printf("请输入你要修改学生学号:"); scanf("%d",&num); if(num==p->no) //输入学号,判定条件 { printf("请输入该学生姓名:"); scanf("%s",p->name); //输入要做修改学生姓名 } else printf("无法查找到该学生!\n"); //找不到信息 } else if(ch=='c') { printf("你要修改信息是:班级!\n"); //按学号修改班级 printf("请输入你要修改学生学号:"); scanf("%d",&num); if(num==p->no) { printf("请输入该学生班级:"); //输入要做修改班级 scanf("%d",p->clas); } else printf("无法查找到该学生!\n"); //找不到信息 } else if(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); } else printf("无法查找该学生信息!\n"); //找不到信息 } else printf("犯错!\n"); p=p->link; printf("是否还要继续修改信息(y/n):"); //判定,是否还要修改信息,跳出循环 fflush(stdin); if((m=getchar())=='n')break; } } //****************************************************************************** //函数功效:根据学号查询学生信息 //****************************************************************************** void checkno(struct infor *head) { //按学号查询学生成绩 struct infor *p; p=head; int num,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("没找到该学生信息!"); //找不到信息 } void checkclass(struct infor *head) { int banji,i=0; struct infor *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("没找到学生信息!"); //输犯错误,找不到信息 } } void checkterm(struct infor *head) //定义按学期查找信息函数 { int xueqi,i=0; struct infor *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("没找到学生信息!"); //找不到信息 } } void norich(struct infor *head) //定义一个函数,查找不及格学生 { struct infor *p; p=head; int num,i=0; float toa; 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; } } } void search(struct infor *head) //定义一个查询学生信息函数,调用各子函数,进行查询 { char k,ch; struct infor *p=head; while(p!=NULL) //设置循环控制条件 { //输出查询方法 printf("\t\t\t 你要选择何种方法查询成绩!\n"); printf("\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); printf("\t\t\t a、学号: \n"); printf("\t\t\t b、班级: \n"); printf("\t\t\t c、学期: \n"); printf("\t\t\t d、不及格学生: \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; //跳出循环,返回主菜单 } } //****************************************************************************** //函数功效:对学生成绩进行统计,按班级求总分及平均分 //****************************************************************************** void zong(struct infor *head) //对该班级学生成绩求总分、平均分 { float toa=0,ave=0; int i=0; struct infor *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; //指向下一个结点 } } void paixu(struct infor *head) //对该班级学生成绩进行排序 { int i=0,j; float a[10],t; //把结点信息输入到数组,然后排序 struct infor *p=head; while(p!=NULL) { a[i]=p->chinese+p->math+p->computer+p->english; i++; p=p->link; } for(j=0;j<4;j++) //用数组排序 for(i=0;i<3-j;i++) if(a[i]<a[i+1]) { t=a[i]; a[i]=a[i+1]; a[i+1]=t; i++; } for(i=0;i<4;i++) //输出排序后总分 printf("%f ",a[i]); } void deal(struct infor * head) //按学号和班级对学生成绩进行统计 { struct infor *p; p=head; int clas; char ch1,ch2; printf("请输入要统计成绩班级(1或2):"); //输入要统计成绩班级 scanf("%d",&clas); printf("正在统计该班级学生总分,请稍侯!!!\n"); while(1) //设置循环控制条件 { zong(p); //调用总分函数 printf("是否还要继续统计其它学生成绩(y/n):"); fflush(stdin); if((ch1=getchar())=='n')break; } printf("是否要对该班学生成绩进行排序(y/n):"); fflush(stdin); //清盘 if((ch2=getchar()!='n')) {printf("正在对该班学生总分进行排序,请稍侯!!!\n"); paixu(p); //调用排序函数 printf("\n");} } //****************************************************************************** //函数功效:信息浏览,查看库中全部统计 //****************************************************************************** struct infor *view(struct infor *head) { struct infor *p; p=head; printf("-------------------------------------------------------------------------\n"); printf("学期\t学号\t班别\t姓名\t语文\t数学\t英语\t计算机\t\n"); printf("-------------------------------------------------------------------------\n"); while(p!=NULL) { printf("%d\t",p->term); //查询学期 printf("%d
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服