这是我初学C时的期末作业,贴出来。

系统功能层次图

源代码

//头文件
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>//成绩结构体
struct score
{char snum[9];char sname[11];int chinese;int math;int english;int sumcj;//成绩总数 int rank;//排名
};//函数声明
void showmenu(void);//菜单
int xg(int);//修改成绩
void lr(int);//录入成绩
void cx(int);//查询成绩
void xhcx(int);//学号查询
void xmcx(int n);//姓名查询
void allrankcx(int);//排名查询
void showcxmenu(void);//二级菜单,查询菜单
void xs(int);//成绩显示
void jspm(int);//计算排名
int sc(int);//删除成绩
void bccj(void);//保存成绩并退出
//main函数
int main()
{int flag,n=0,count=0;//flag标志位,count计数,当前总人数//-------------判断文件里面有多少条记录--------------------//FILE *fp;fp=fopen("cj.txt","a+");if(fp==NULL){printf("打开文件失败,请重试!\n");getch(); fclose(fp);  exit(0);} int c = 0;while(!feof(fp)){char cc = fgetc(fp);if(cc==EOF){break;}//输出字符
//        putchar(cc);c++;}count = c/14;
//  printf("%d", count);
//  getch();fclose(fp);//---------------------------------//do{showmenu();scanf("%d",&flag);//选择操作 switch(flag){case 1: printf("请输入您要录入的人数:");scanf("%d",&n);lr(n);count += n;break;case 2: count=sc(count);break;case 3: xg(count);break;case 4: cx(count);break;case 5: jspm(count);break;case 6: xs(count);break;case 0: bccj();break; default:printf("输入错误,请重试!\n");getch(); } }while(flag!=0);getch();return 0;
}
//0显示菜单
void showmenu()
{system("cls"); printf("*----------------------------------------------------*\n");printf("*               欢迎使用**成绩管理系统               *\n");printf("*----------------------------------------------------*\n"); printf("*               1: 录入成绩                         *\n");printf("*               2: 删除成绩                         *\n");printf("*               3: 修改成绩                         *\n");printf("*               4: 成绩查询                         *\n");printf("*               5: 成绩计算并排名                   *\n");printf("*               6: 显示成绩信息                     *\n");printf("*               0: 保存信息并退出系统               *\n");printf("*----------------------------------------------------*\n");printf("选择操作<0-6>                                         \n");return;
}
//1录入成绩
void lr(int n){struct score stu[100];FILE *fp;fp=fopen("cj.txt","a+");if(fp==NULL){printf("打开文件失败,请重试!\n");getch(); fclose(fp);exit(0);}printf("请输入全部学生的学号,姓名,语文成绩,数学成绩,英语成绩;\n"); int i;for(i=0;i<n;i++){  printf("----第%d个学生----\n", i+1);printf("学号:");scanf("%s",&stu[i].snum);printf("姓名:");scanf("%s,",&stu[i].sname);printf("语文成绩:");scanf("%d",&stu[i].chinese);printf("数学成绩:");scanf("%d",&stu[i].math);printf("英语成绩:");scanf("%d",&stu[i].english);stu[i].sumcj=0;stu[i].rank=0; //写入数据 fprintf(fp,"%s %s %d %d %d %d %d\n",stu[i].snum,stu[i].sname,stu[i].chinese,stu[i].math,stu[i].english,stu[i].sumcj,stu[i].rank);} fclose(fp);printf("添加学生成功,请按任意键返回\n");getch();}
//2删除成绩
int sc(int n)
{struct score stu[100];struct score sub[99];//删除后的结构体数组 char stnum[9];//学号int find=0;printf("请输入你要删除的学生学号:"); scanf("%s", &stnum);FILE *fp;fp=fopen("cj.txt","r");if(fp==NULL){printf("打开文件失败,请联系管理员\n");getch(); return -1;   }int c=0;int index=0;//用于记录目标序号 while(!feof(fp))//不为空{ fscanf(fp,"%s %s %d %d %d %d %d\n", &stu[c].snum,&stu[c].sname,&stu[c].chinese,&stu[c].math,&stu[c].english,&stu[c].sumcj,&stu[c].rank);if(strcmp(stnum,stu[c].snum)==0){find = 1;//根据学号查找,找到赋值为1 index = c;//记录编号} c++;}fclose(fp);if(n==0){printf("已经没有学生成绩信息了,请按任意键返回\n");getch();  showmenu();return n;}if(find==0){printf("没有该学生成绩信息,请按任意键返回\n");getch();  showmenu();return n;}else {int i;//删除 for(i=0;i<c;i++){if(i < index){sub[i] = stu[i];}else{sub[i] = stu[i+1];}}fp=fopen("cj.txt","w");//写入数据 for(i=0;i<c-1;i++){fprintf(fp,"%s %s %d %d %d %d %d\n",sub[i].snum,sub[i].sname,sub[i].chinese,sub[i].math,sub[i].english,sub[i].sumcj,sub[i].rank);     } fclose(fp);printf("学号为%s的学生成绩删除成功,请按任意键返回\n",stnum);getch();showmenu();return n-1;}
}
//3修改成绩
int xg(int n)
{   struct score stu[100];FILE *fp;char stnum[9];int find=0;  printf("请输入要修改的学生学号:");scanf("%s",stnum);fp=fopen("cj.txt","r");if(fp==NULL){printf("文件打开失败,请联系管理员\n");getch();return -1;   }int c=0;while(!feof(fp)){fscanf(fp,"%s %s %d %d %d %d %d\n",&stu[c].snum,&stu[c].sname,&stu[c].chinese,&stu[c].math,&stu[c].english,&stu[c].sumcj,&stu[c].rank);if(strcmp(stnum,stu[c].snum)==0)  {find=1;//修改操作 printf("找到你要修改成绩的同学,请输入他的成绩:\n");printf("语文成绩: %d,新成绩为:",stu[c].chinese);scanf("%d",&stu[c].chinese);printf("数学成绩: %d,新成绩为:",stu[c].math); scanf("%d",&stu[c].math);printf("英语成绩: %d,新成绩为:",stu[c].english);scanf("%d",&stu[c].english);}c++;   }fclose(fp);if(find==0){printf("没有找到要删除的学生记录,请按任意键退出\n");getch(); } else{fp=fopen("cj.txt","w");int i; for(i=0;i<n;i++){//更新数据 fprintf(fp,"%s %s %d %d %d %d %d\n",stu[i].snum,stu[i].sname,stu[i].chinese,stu[i].math,stu[i].english,stu[i].sumcj,stu[i].rank);   }fclose(fp);     printf("学号为%s同学的成绩已经修改成功,请按任意键返回",stnum);getch(); }showmenu();return 1;
}
//4成绩查询
void cx(int n) //n全班人数
{int k;do{showcxmenu();scanf("%d",&k); switch(k){ case 1:xhcx(n);break;//学号查询 case 2:xmcx(n);break;//姓名查询 case 3:allrankcx(n);break;//全班排名查询case 0:break;default:printf("输入错误,请重新选择\n");getch();} }while(k!=0);return;
}//4.0查询菜单
void showcxmenu()
{system("cls");printf("*----------------------------------------------------*\n");printf("*                    成绩查询菜单                    *\n");printf("*----------------------------------------------------*\n"); printf("*               1: 按学号查询                       *\n");printf("*               2: 按姓名查询                       *\n");printf("*               3: 全班排名查询                     *\n");printf("*               0: 退出查询系统,返回主系统         *\n");printf("*----------------------------------------------------*\n");printf("选择操作<0-3>                                         \n");
}
//4.1学号查询
void xhcx(int n)
{   struct score stu[100];char snum[9];printf("请输入你要查询学生的学号:");scanf("%s",&snum);FILE *fp; fp=fopen("cj.txt ","r");if(fp==NULL){printf("打开文件失败!\n");getch();exit(0); }int c = 0;while(!feof(fp)){fscanf(fp,"%s %s %d %d %d %d %d\n",&stu[c].snum,&stu[c].sname,&stu[c].chinese,&stu[c].math,&stu[c].english,&stu[c].sumcj,&stu[c].rank);c++;}int i;for(i=0;i<n;i++){if(strcmp(snum,stu[i].snum)==0){printf("学号\t姓名\t语文\t数学\t英语\t总分\t名次\n");printf("%s\t%s\t%d\t%d\t%d\t%d\t%d\n",stu[i].snum,stu[i].sname,stu[i].chinese,stu[i].math,stu[i].english,stu[i].sumcj,stu[i].rank);printf("按任意键返回\n");getch();fclose(fp);return;           }}printf("未找到要查询学生的成绩,请重试!\n");getch();fclose(fp);return;
}
//4.2姓名查询
void xmcx(int n)
{struct score stu[100]; char sname[11];printf("请输入你要查询学生的姓名:");scanf("%s",&sname);FILE *fp; fp=fopen("cj.txt ","r");if(fp==NULL){printf("打开文件失败!\n");getch();exit(0); }int c = 0;while(!feof(fp)){fscanf(fp,"%s %s %d %d %d %d %d\n\n",&stu[c].snum,&stu[c].sname,&stu[c].chinese,&stu[c].math,&stu[c].english,&stu[c].sumcj,&stu[c].rank);c++;}int i;for(i=0;i<n;i++){if(strcmp(sname,stu[i].sname)==0){printf("学号\t姓名\t语文\t数学\t英语\t总分\t名次\n");printf("%s\t%s\t%d\t%d\t%d\t%d\t%d\n",stu[i].snum,stu[i].sname,stu[i].chinese,stu[i].math,stu[i].english,stu[i].sumcj,stu[i].rank);printf("按任意键返回\n");getch();fclose(fp);return;}}printf("未找到要查询学生的成绩,请重试!\n");getch();fclose(fp);return;
}
//4.3全班排名查询
void allrankcx(int n)
{struct score stu[100]; struct score temp;  FILE *fp; fp=fopen("cj.txt ","r");if(fp==NULL){printf("打开文件失败!\n");getch();exit(0); }int c = 0;while(!feof(fp)){fscanf(fp,"%s %s %d %d %d %d %d\n",&stu[c].snum,&stu[c].sname,&stu[c].chinese,&stu[c].math,&stu[c].english,&stu[c].sumcj,&stu[c].rank);c++;}int i,j;for(i=0;i<n;i++){if(stu[i].rank == 0){printf("请先进行成绩计算进行排名!!\n");getch();fclose(fp);return;    }stu[i].sumcj = stu[i].chinese + stu[i].math + stu[i].english;//冒泡排序算法:进行 n-1 轮比较for(i=0; i<n-1; i++){//每一轮比较前 n-1-i 个,也就是说,已经排序好的最后 i 个不用比较for(j=0; j<n-1-i; j++){if(stu[j].sumcj > stu[j+1].sumcj){temp = stu[j];stu[j] = stu[j+1];stu[j+1] = temp;}}}printf("学号\t姓名\t语文\t数学\t英语\t总分\t名次\n");for(i=0;i<n;i++){printf("%s\t%s\t%d\t%d\t%d\t%d\t%d\n",stu[i].snum,stu[i].sname,stu[i].chinese,stu[i].math,stu[i].english,stu[i].sumcj,stu[i].rank);}printf("按任意键返回\n");getch();fclose(fp);return;}printf("查询失败,请重试!\n");getch();fclose(fp);return;
}
//5计算排名函数
void jspm(int n)
{struct score stu[100];int i,j,temp;int count;FILE *fp;fp=fopen("cj.txt","r");if(fp==NULL){printf("打开文件失败!\n");getch();exit(0);}int c = 0;while(!feof(fp)){fscanf(fp,"%s %s %d %d %d %d %d\n",&stu[c].snum,&stu[c].sname,&stu[c].chinese,&stu[c].math,&stu[c].english,&stu[c].sumcj,&stu[c].rank);stu[c].sumcj = stu[c].chinese + stu[c].math + stu[c].english;c++;}fclose(fp);//计算排名并存储 for(i=0;i<n;i++){temp=1;//第1名 for(j=0;j<n;j++){if(stu[i].sumcj<stu[j].sumcj) temp++;//如果较小,排名下降1名} stu[i].rank=temp;}//更新记录 fp=fopen("cj.txt","w");for(i=0;i<n;i++){fprintf(fp,"%s %s %d %d %d %d %d\n",stu[i].snum,stu[i].sname,stu[i].chinese,stu[i].math,stu[i].english,stu[i].sumcj,stu[i].rank);   }fclose(fp);printf("数据重新计算和排名成功,请按任意键返回主菜单。\n");getch();return;
}
//6显示成绩信息
void xs(int n)
{struct score stu[100];int i;   printf("成绩信息如下:\n");FILE *fp;fp=fopen("cj.txt","r");if(fp==NULL){printf("打开文件失败,请重试!\n");getch(); fclose(fp);  exit(0);} printf("学号\t姓名\t语文\t数学\t英语\t总分\t名次\n"); int c = 0;while(!feof(fp)){fscanf(fp,"%s %s %d %d %d %d %d\n",&stu[c].snum,&stu[c].sname,&stu[c].chinese,&stu[c].math,&stu[c].english,&stu[c].sumcj,&stu[c].rank);c++;}if(n!=0){//人数不为0 for(i=0;i<c;i++){printf("%s\t%s\t%d\t%d\t%d\t%d\t%d\n",stu[i].snum,stu[i].sname,stu[i].chinese,stu[i].math,stu[i].english,stu[i].sumcj,stu[i].rank);} }fclose(fp); printf("显示完毕 ,请按任意键返回\n");getch();return;
}
//0保存信息并退出系统
void bccj()
{printf("感谢您的使用,欢迎下次使用!\n");getch();    return;
}

系统源码文件

链接:https://pan.baidu.com/s/13Zx6RJiUX2e0nxom22kn5A
提取码:5892

开发环境

操作系统:Windows10
开发工具:Dev-C++

PS:限于本人水平,如有不足还请批评、指出。源码?拿走,拿走。

提醒:由于网友反馈,经过自己的调试,发现诸多问题,部分代码不规范逻辑错误等等,不堪入目,绝不是个良好的程序,但因近期忙于答辩,代码的修改估计在本月月底。在这之前我可能无暇关注博客,对此给大家造成困扰,深感抱歉。——2020.5.18

更新:已对代码进行优化,经过简单调试,没有发现大问题,相信能够满足部分同学的期末作业要求了。源码文件已更新。——2020.5.29

修复BUG:修复删除成绩后,查询成绩信息异常的问题。源码已更新,请重新下载。——2020.6.19
PS:C学得真的是太菜了,请大家多多包涵!!/抱拳/抱拳。。

代码细节优化:考虑到开发工具的兼容问题,已将getch()函数的头文件(conio.h)添加到源代码。函数声明、定义漏写问题(其实是忘了改函数名了)。判断等于NULL报警告?其实该判断是否等于0,大意啊

学生成绩管理系统-C语言(附源码)相关推荐

  1. java计算机毕业设计ssm基于SSM学生信息管理系统37myx(附源码、数据库)

    java计算机毕业设计ssm基于SSM学生信息管理系统37myx(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm ...

  2. java计算机毕业设计ssm学生宿舍管理系统15pjb(附源码、数据库)

    java计算机毕业设计ssm学生宿舍管理系统15pjb(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ ...

  3. 学生信息管理系统(C语言版本+源码)

    学生信息管理系统(C语言版本) 有需要的可以自行下载 链接:https://download.csdn.net/download/qq_52889967/14955434 源码在后面 java+数据库 ...

  4. SSM学生信息管理系统-计算机毕设 附源码70168

    SSM学生信息管理系统 摘要 从20年代开始,计算机疯狂的出现在人们的生活以及工作当中,成为人们生活.工作的好帮手,计算机深入到每家每户当中,网络办公,网络教学更是替换了传统手工记录管理的方式,使用计 ...

  5. 【数据分析】基于matlab GUI学生成绩管理系统【含Matlab源码 1981期】

    ⛄一.案例简介(仅供参考) 1 设计目标 1.1 设计一个基于GUI的学生成绩管理与分析系统 (1)设计一个插入背景的登录界面 (2)以某班某课成绩为研究对象,设计几个对话框,实现: 1.2 查询功能 ...

  6. 学生成绩表c语言,学生成绩管理系统C语言(附完整源代码) .doc

    学生成绩管理系统C语言(附完整源代码) 课程设计报告 学生成绩管理系统 院系: 专业: 班级: 完成日期: 2009年1月03日 设计题目:学生成绩管理系统 目录 1.题目描述2.算法设计/设计思想3 ...

  7. JAVA计算机毕业设计学生学籍信息管理系统计算机(附源码、数据库)

    JAVA计算机毕业设计学生学籍信息管理系统计算机(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Ecl ...

  8. 计算机毕业设计ssm高校学生社团管理系统n4pcu系统+程序+源码+lw+远程部署

    计算机毕业设计ssm高校学生社团管理系统n4pcu系统+程序+源码+lw+远程部署 计算机毕业设计ssm高校学生社团管理系统n4pcu系统+程序+源码+lw+远程部署 本源码技术栈: 项目架构:B/S ...

  9. java计算机毕业设计ssm兴发农家乐服务管理系统n159q(附源码、数据库)

    java计算机毕业设计ssm兴发农家乐服务管理系统n159q(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行 ...

最新文章

  1. 点云处理如何从入门到实践?(附完整学习路线)
  2. Maven实战(三)Eclipse构建Maven项目
  3. 从命令行及java程序运行MyBatis Generator 1.3.x生成MyBatis3.x代码
  4. c语言 指针 pdf,深入理解c指针 PDF扫描版[33MB]
  5. html标签的嵌套规则有哪些,html 标签的嵌套规则
  6. cocos2dx setVisible 与setEnabled 小实例
  7. 玄奥八字V5.6 爆破实例2
  8. stokes方程matlab,Navier-Stokes matlab 238万源代码下载- www.pudn.com
  9. 用Python搞出自己的云词图 | 【带你装起来】
  10. hashmap扩容线程安全问题_HashMap是非线程安全,为什么ConcurrentHashMap能做到线程安全?...
  11. 斐讯n1做服务器性能,斐讯N1:系统配置优化
  12. html文字跳动特效,Javascrip实现文字跳动特效
  13. 立即注册 | 甲骨文云技术嘉年华重磅开启,全球云大会精彩再现!
  14. 汇付国际为跨境电商赋能:做合规的跨境支付平台!
  15. [深度学习] - 网络模型训练过程的 loss 变化分析 (loss / val_loss / test_loss)
  16. 英语软件那些好玩的功能你知道吗
  17. 2.安装node-red
  18. 将sql数据库字段中的NULL都替换为空
  19. 3天学完10套Python顶级教程,端午节技术人消失之谜
  20. CV面试,坐下直接开撸代码,当场给了offer

热门文章

  1. 牛人整理的一些查询国内外文献资料的实用网站,专业啊,吐血推荐!
  2. 华为eNsp 配置ospf协议
  3. 正负数原码、反码、补码以及位运算
  4. 讯飞智能录音笔SR302为职场人带来办公新体验
  5. 君正X2000/X2000E芯片性能和处理器介绍
  6. spring(春天)
  7. Win10重装Win7后开机提示无法验证此文件的数字签名怎么办?
  8. Scrum立会报告+燃尽图(Beta阶段第七次)
  9. ZZULIoj-1088: 手机短号 (多实例)
  10. git错误:exceeds file size limit of 100.0 MB remote: error: hook declined to update refs/heads/master