学生成绩管理系统:

系统功能需求描述

管理内容包括:  学号、姓名、班级、五门课成绩。

主要功能有:  添加、修改、删除、读出、写入、查找、排序、计算总分、平均分、分类汇总等。

具体包括:

1. 输入学生的成绩信息,包含学号、姓名、性别等基本信息和各课成绩;

2. 显示全部学生各科成绩信息;

3. 对各科成绩统计分析(总分、平均分、最高分、最低分、及格率等);

4. 统计各科各分数段人数;

5. 按学号或姓名查找并显示某个学生的各科成绩;

6. 按课程成绩或总分由高到低排序显示;

7. 更新某个学生的基本信息或课程成绩;

8. 将学生的成绩信息保存到一个文件中;

9. 读入文件中保存的学生信息。

编写代码,运行程序后,显现下面的参考界面:

请选择(1~9,0:退出):

选择一个菜单后,显示结果。

 输入:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char v[1000];
char o[1000];
struct grade{            //创建链表int num;char name[16];int clase;double score[5];double sum;double sever;struct grade *next;struct grade *head,*rear,*p,*q;
}*head,*fp;
void creat(){                //初始化表头struct grade *p,*q;head=NULL;p=head;p=(struct grade*)malloc(sizeof(struct grade));p->num=0;strcpy(p->name,"王二小");p->clase=1;p->score[0]=100;p->score[1]=100;p->score[2]=100;p->score[3]=100;p->score[4]=100;head=p;head->next=NULL;q=p;return ;
}
void outpu(){                //输出函数struct grade *p,*q;p=head;printf("学号\t姓名\t班级\t语文\t数学\t英语\t物理\t化学\n");while(p!=NULL){printf("%d\t%s\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",p->num,p->name,p->clase,p->score[0],p->score[1],p->score[2],p->score[3],p->score[4]);p=p->next;}return ;
}
void deleted(int n){                //删除功能定义struct grade *p,*q;p=head;int t;while(n!=p->num&&p->next!=NULL){q=p;p=p->next;}if(n==p->num){if(p==head){head=p->next;free(p);printf("删除成功!\n"); outpu();printf("输入任意键继续...\n");scanf("%s",&o);system("cls");}else{q->next=p->next;free(p);printf("删除成功!\n"); outpu();printf("输入任意键继续...\n");scanf("%s",&o);system("cls");}}else {printf("找不到该学生!");printf("输入任意键继续...\n");scanf("%s",&o);system("cls");}return ;
}
void add(struct grade *t)                    //插入功能定义
{struct grade *p,*q;printf("是否需要导入文件“成绩名单”:是(1)、否(0)\n");scanf("%s",o);if(strcmp(o,"1")==0){FILE *fp;if((fp=fopen("成绩名单.txt","r+"))==NULL){printf("无文件!\n");printf("输入任意键继续...\n");scanf("%s",&o);system("cls");return ;} fp=fopen("成绩名单.txt","r+");p=head;q=p;while(!feof(fp)){p->next=NULL;     //链接链表,顺序。。。 q->next=p;q=p; p=(struct grade*)malloc(sizeof(struct grade));fscanf(fp,"%d%s%d%lf%lf%lf%lf%lf",&p->num,p->name,&p->clase,&p->score[0],&p->score[1],&p->score[2],&p->score[3],&p->score[4]); }fclose(fp);printf("导入成功!\n");printf("输入任意键继续...\n");scanf("%s",&o);system("cls"); } else{int n,e;while(1){p=head,q=NULL;t=(struct grade*)malloc(sizeof(struct grade));printf("请输入加入学生信息(学号、姓名、班级以及五门课程分数):\n");scanf("%d%s%d%lf%lf%lf%lf%lf",&t->num,t->name,&t->clase,&t->score[0],&t->score[1],&t->score[2],&t->score[3],&t->score[4]);while(t->num<p->num&&p!=NULL){q=p;p=p->next;}if(p=head){t->next=p->next;p->next=t; }else{q->next=t;t->next=p;}printf("是否继续:是(1)、否(0)\n");scanf("%s",&v);if(n!=1) {outpu();printf("输入任意键继续...\n");scanf("%s",&o);system("cls");break;
}
}
}return ;
}
void change(){                //修改功能定义struct grade *p,*q;p=head;q=NULL;int n;printf("请输入需修改学生学号:\n");scanf("%d",&n);while(p->next!=NULL&&n!=p->num){q=p;p=p->next;}int a,b,d,t;double e;char c[16];while(1){if(n==p->num){printf("请输入需要修改该学生的信息种类:\n");printf("姓名(1)\n");printf("班级(2)\n");printf("语文成绩(3)\n");printf("数学成绩(4)\n");printf("英语成绩(5)\n");printf("物理成绩(6)\n");printf("化学成绩(7)\n");scanf("%d",&a);if(a==1){printf("请输入修改后的内容:\n");scanf("%s",&c);strcpy(p->name,c);} else if(a==2){printf("请输入修改后的内容:\n");scanf("%d",&b);p->clase=b;} else if(a==3){printf("请输入修改后的内容:\n");scanf("%lf",&e);p->score[0]=e;} else if(a==4){printf("请输入修改后的内容:\n");scanf("%lf",&e);p->score[1]=e;} else if(a==5){printf("请输入修改后的内容:\n");scanf("%lf",&e);p->score[2]=e;} else if(a==6){printf("请输入修改后的内容:\n");scanf("%lf",&e);p->score[3]=e; } else if(a==7){printf("请输入修改后的内容:\n");scanf("%lf",&e);p->score[4]=e;} else{printf("输入错误!\n"); }}else if(n!=p->num){printf("找不到该学生!"); }outpu();printf("是否继续更改:是(1)、否(0)\n");scanf("%s",&v);if(v!=0) {printf("输入任意键继续...\n");scanf("%s",&o);system("cls");break;}}return ;
}
void csum(){                        //计算个人总分struct grade *p,*q;p=head;int i,t;printf("学号\t姓名\t总分\t\n");while(p!=NULL){p->sum=0.0;for(i=0;i<5;i++){p->sum+=p->score[i];}printf("%d\t%s\t%.2f\n",p->num,p->name,p->sum);p=p->next;}printf("输入任意键继续...\n");scanf("%s",&o);system("cls");return ;
}
void csever(){                        //计算个人平均分struct grade *p,*q;p=head;int i,t;printf("学号\t姓名\t平均分\t\n");while(p!=NULL){p->sum =0.0;for(i=0;i<5;i++){p->sum+=p->score[i];}p->sever=0.0;p->sever=p->sum/5.0;printf("%d\t%s\t%.2f\n",p->num,p->name,p->sever);p=p->next;}printf("输入任意键继续...\n");scanf("%s",&o);system("cls");return ;
}
void refer(){                        //查询功能定义struct grade *p,*q;p=head,q=NULL;int a,n;char s[16];while(1){printf("请输入查询学生成绩方式:学号(0)、姓名(1)\n");scanf("%d",&a);if(a==0){printf("请输入需查询学生的学号:\n");scanf("%d",&n);p=head;while(p->next!=NULL&&n!=p->num){q=p;p=p->next;}printf("学号\t姓名\t班级\t语文\t数学\t英语\t物理\t化学\n");if(n==p->num){printf("%d\t%s\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",p->num,p->name,p->clase,p->score[0],p->score[1],p->score[2],p->score[3],p->score[4]);} else if(n!=p->num){printf("找不到该学生!\n"); }} else if(a==1){printf("请输入需查询学生的姓名:\n");scanf("%s",&s);p=head;while(p->next!=NULL&&strcmp(p->name,s)!=0){             //可能会错,字符串比较大小形式不一样 q=p;p=p->next;}printf("学号\t姓名\t班级\t语文\t数学\t英语\t物理\t化学\n");if(strcmp(p->name,s)==0){printf("%d\t%s\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",p->num,p->name,p->clase,p->score[0],p->score[1],p->score[2],p->score[3],p->score[4]);} else if(strcmp(p->name,s)!=0){printf("找不到该学生!\n"); }} else {printf("输入错误!\n"); }printf("是否继续:是(1)、否(0)\n");scanf("%s",&v);if(v!=0) {system("cls");break;}}return ;
}
void clrefer(){                //按班级查询struct grade *p,*q;p=head;int a,sum=0,t;printf("请输入你想查询的班级:\n");scanf("%d",&a);printf("学号\t姓名\t班级\t语文\t数学\t英语\t物理\t化学\n");while(p!=NULL){if(a==p->clase){printf("%d\t%s\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",p->num,p->name,p->clase,p->score[0],p->score[1],p->score[2],p->score[3],p->score[4]);sum++;}p=p->next;}if(sum==0){printf("此班级人数为空!\n");}printf("输入任意键继续...\n");scanf("%s",&o);system("cls");return ;
}
void sort(int n){   //n代表按哪一门科目进行成绩排序 struct grade *p,*q;p=head;double a[1000],b[1000];int i=0,sum=0,t;while(p!=NULL){a[i]=p->score[n];sum++;p=p->next;i++;}double max;i=0;while(max!=-1){p=head;max=-2.0;while(p!=NULL){if(p->score[n]>max){max=p->score[n];}p=p->next;}b[i]=max;i++;p=head;while(p!=NULL){if(max==p->score[n]){p->score[n]=-1;}p=p->next;}}p=head;i=0;while(p!=NULL){p->score[n]=a[i];p=p->next;i++;}printf("学号\t姓名\t班级\t语文\t数学\t英语\t物理\t化学\n");for(i=0;i<sum;i++){p=head;while(p->next!=NULL){if(b[i]==p->score[n]) break;p=p->next;}printf("%d\t%s\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",p->num,p->name,p->clase,p->score[0],p->score[1],p->score[2],p->score[3],p->score[4]);}printf("输入任意键继续...\n");scanf("%s",&o);system("cls"); return ;
}
void clsum(){                    //计算班级总分与平均分struct grade *p,*q;int n;printf("请输入需要查询的班级号:\n");scanf("%d",&n);p=head;int t;double count=0;double sumn[5]={0},severd[5]={0};while(p!=NULL){if(n==p->clase){sumn[0]+=p->score[0];sumn[1]+=p->score[1];sumn[2]+=p->score[2];sumn[3]+=p->score[3];sumn[4]+=p->score[4];count++;}p=p->next;}printf("\t\t语文\t数学\t英语\t物理\t化学\t\n");if(count!=0){severd[0]=sumn[0]/count;severd[1]=sumn[1]/count;severd[2]=sumn[2]/count;severd[3]=sumn[3]/count;severd[4]=sumn[4]/count;printf("%d班各科总分:  %.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",n,sumn[0],sumn[1],sumn[2],sumn[3],sumn[4]);printf("%d班各科平均分:%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",n,severd[0],severd[1],severd[2],severd[3],severd[4]);}else {printf("无此班级!\n");}printf("输入任意键继续...\n");scanf("%s",&o);system("cls");return ;
}
void saved(){                //保存修改struct grade *p,*q;FILE *fp;fp=fopen("成绩名单.txt","w+");p=head;while(p!=NULL){fprintf(fp,"%d\t%s\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",p->num,p->name,p->clase,p->score[0],p->score[1],p->score[2],p->score[3],p->score[4]);p=p->next;}fclose(fp);return ;
}
int main()
{struct grade *p,*q;int a,t;creat();while(1){printf("\t\t欢迎来到学习成绩管理系统!\t\t\n");printf("\t\t\t成绩管理\t\t\n");printf("\t\t=======================\t\t\n");printf("\t\t1、输入学生成绩\t\n");printf("\t\t2、修改学生成绩\t\n");printf("\t\t3、删除学生成绩\t\n");printf("\t\t4、计算每位学生的总分\t\n");printf("\t\t5、计算每位学生的平均分\t\n");printf("\t\t6、按学号或姓名查询学生成绩\t\n");printf("\t\t7、按班级查询学生成绩\t\n");printf("\t\t8、成绩排序\t\n");printf("\t\t9、按班级统计学科总分、平均分\t\n");printf("\t\t请选择(1~9,0:退出):\t\n");scanf("%d",&a);if(a==1){ add(p); //插入 ,不行 } else if(a==2){         //成功 change();} else if(a==3){            //成功 int b;printf("请输入需删除的学生学号:\n");scanf("%d",&b);deleted(b);} else if(a==4){csum();} else if(a==5){csever();} else if(a==6){refer();} else if(a==7){clsum();} else if(a==8){printf("请输入按哪一门科目排序:\n");printf("语文成绩(0)\n");printf("数学成绩(1)\n");printf("英语成绩(2)\n");printf("物理成绩(3)\n");printf("化学成绩(4)\n");scanf("%d",&a);sort(a);} else if(a==9){clsum();} else if(a==0) {printf("是否需要保存修改:是(1)、否(0)\n");scanf("%s",o);if(strcmp(o,"1")==0){saved();}printf("保存成功!\n"); break;} else {printf("输入错误!\n");printf("输入任意键继续...\n");scanf("%s",&o);system("cls");}}//    freopen("a.txt","r",stdin);//freopen("b.txt","w",stdout);return 0;} 

总结:

1、还是有一些bug存在,但基本可以作为C语言学习的完结性代码。

2、还是缺少即时注释的习惯,以后要注意,目标为注释与代码比例1:3的程度。

3、C语言正式完结,向java进军!

C完结:学生成绩管理系统【2018.3.26】相关推荐

  1. 基于JavaWeb的学生成绩管理系统

    目 录 摘 要 1 Abstract 2 第一章 绪 论 1 1.1研究的背景及意义 1 1.1.1选题的背景 1 1.2系统目标 1 1.3组员分工 2 第二章 需求分析 3 2.1功能需求分析 3 ...

  2. C语言项目—学生成绩管理系统(完结)

    C语言项目 1.学生成绩管理系统 本项目旨在增强,学习C语言的指针和链表部分知识 1.1 功能需求部分介绍 此处首先介绍一下该项目要完成的功能主要包括如下9个功能: 1.录入学生信息:即链表的功能 2 ...

  3. 基于python的学生成绩管理系统毕业设计源码071143

    Django学生成绩管理 摘   要 在国家重视教育影响下,教育部门的密确配合下,对教育进行改革.多样性.质量等等的要求,使教育系统的管理和运营比过去十年前更加理性化.依照这一现实为基础,设计一个快捷 ...

  4. (附源码)python+mysql+基于python的学生成绩管理系统 毕业设计071143

    Django学生成绩管理 摘 要 在国家重视教育影响下,教育部门的密确配合下,对教育进行改革.多样性.质量等等的要求,使教育系统的管理和运营比过去十年前更加理性化.依照这一现实为基础,设计一个快捷而又 ...

  5. python+mysql+基于python的学生成绩管理系统 毕业设计-附源码071143

    Django学生成绩管理 摘   要 在国家重视教育影响下,教育部门的密确配合下,对教育进行改革.多样性.质量等等的要求,使教育系统的管理和运营比过去十年前更加理性化.依照这一现实为基础,设计一个快捷 ...

  6. 基于GUI的学生成绩管理系统

    基于GUI的学生成绩管理系统 一.项目背景 二.项目要求 三.前期准备 1.软硬件平台 2. MySQL驱动 四.核心类介绍 1.Student类 2.UserInterface类 2.1.变量定义 ...

  7. 学生成绩管理系统——课程设计报告

    学期末课程设计的作业,利用链表和文件的操作.日后再完善一些功能介绍. /************************************* *******程序名称:学生成绩管理系统 ***** ...

  8. 学生成绩管理系统java+mysql+swing入门级项目开发

    夫陶公清风千古,余又何人,敢称庶几 代码已移至Gitee : https://gitee.com/BreezAm/edu-student 文章目录 简要: 登陆运行效果 主界面运行效果图 界面设置运行 ...

  9. SWT学生成绩管理系统

    这个程序终于完完整整地做完了,虽然还不完善,但基本的功能实现了.这个程序零零散散花费了我近一个月的时间,在这一个月的时间里,通过别人的帮助和对程序的调试本人收获不小.希望通过这个博客和大家分享一下我在 ...

最新文章

  1. CentOS 6.0 VNC远程桌面配置
  2. 如何进入、退出docker的container
  3. SqlDataAdapter隐式打开关闭connection
  4. CanalSharp-mysql数据库binlog的增量订阅消费组件Canal的.NET客户端
  5. docx 图片预处理 Java_如何在java中将docx文件头图像复制到另一个docx文件中
  6. 放大镜_屏幕放大镜怎么样使用方法
  7. php中heredoc的使用方法
  8. python中sendmessage的使用_SendMessage函数完全使用手册
  9. 类与对象(面向对象的编程语言java)
  10. TPM分析笔记(二)TPM2.0 规范文档
  11. WTL入门(二) WTL简介
  12. 10 05 05 繁杂
  13. 机器人鸣人是哪一集_博人传鸣人出场集数 博人传佐助哪几集出现过
  14. 注意力机制在NLP问题中的介绍与调查-论文翻译
  15. oracle 安装截图,ORACLE WIN7安装过程截图
  16. 扎克伯格“致敬”微信,但Facebook Pay能像微信支付一样成功吗?
  17. ACCU天气API以及Okhttp、Retrofit、RxJava的使用
  18. 接口测试 - 从0不到1的心路历程 (二)
  19. 计算机应用研修活动,井研职中计算机应用专业校本研修活动方案.doc
  20. 安装VSFTPD后, FTP连接抛OOPS: tcp_wrappers is set to YES but no tcp wrapper support compiled in

热门文章

  1. GitHub 标星 15w,如何用 Python 实现所有算法?
  2. 工作中提高效率:高效能的七个习惯的实践
  3. 硬件设计6---什么是滞回电路
  4. Kotlin 超车指南
  5. 一个岔路口分别通向诚实国和说谎国。
  6. 学生用计算机坏了怎么办,电脑坏了,我来教你怎么处理!修电脑再也不求人!...
  7. Excel中文转拼音(完整版)
  8. solaris oracle zfs 调优,使用闪存存储时调优 ZFS
  9. VC-dimension
  10. 云主机是怎么配置软件的