用C语言实现一个学生成绩管理系统
题目: 学生成绩管理系统
功能: 实现学生信息管理。包括:录入、查询、排序等功能。
要求: 用数据文件保存学生基本信息(学号 姓名 课程1 课程2 课程3…) ,利用菜单可以循环实现各个功能。
进一步要求*: (1) 能够实现增加、删除、修改功能;
(2) 能够实现统计功能等。
思路简介: 要采用模块化思想,对不同的功能编写不同的函数进行实现
不足之处: 没有查重处理,需要进一步完善
比如此结构体中,定义有学号,在函数查找、修改等功能中也是通过学号来查找。
没有查重则对结果影响比较大。举例来说,原本数据存有学号为 20190156 的学生
。当你选择增加数据且再次输入一个学号为 20190518 的学生数据时,程序并不会
报错,只是默默的存在在数据文件中。所以这就带来了很大的隐患。当你继续选择
查找功能时,假如你输入的学号是 20190518 ,这时候计算机就不知道怎么处理了
。在实际生活中情况可能更复杂,带来更大的隐患。所以应该增加查重环节并对数
据进一步处理。

欢迎大家关注我的公众号【kingdeguo
项目地址: https://github.com/KingdeGuo/student_management_system

#include <stdio.h>
#include <string.h>
#include <stdlib.h>   //提供 exit() 函数支持
#define SIZE 100000
//#include"conio.h"//声明函数原型
void finput();    //存入数据
void flist();     //输出数据
void fsearch();   //查找数据
void fadden();    //增加数据
void fchange();   //修改数据
void ftaxis();    //数据排序
void stat();      //统计数据//定义结构体
struct student
{int num;        //存放char name[10];  //定义名字数组变量int C;          //C 语言成绩int Maths;      //数学课成绩int En;         //英语课成绩float ave;      //三门课平均成绩
} stu[SIZE];        //在定义结构体时同时声明结构体变量int main()
{int n;for(;;)          //使程序能够循环,在循环内部判断何时结束 {printf("\n\n");        //与上次的输出结果保持间隔,便于美观 printf(" _________________________________\n");//菜单输出 printf(" |           MENU                |\n");printf("    |       1.Input data            |\n");               printf(" |       2.Output data           |\n");printf("    |       3.Search data           |\n");printf("    |       4.Add data              |\n");printf("    |       5.Revise data           |\n");printf("    |       6.Sort data             |\n");printf("    |       7.Statistics            |\n");printf("    |       8.  quit                |\n");printf("    |_______________________________|\n");printf("  Please choose your function:(1-8):");          //功能选择 scanf("%d",&n);printf("\n");if(n>0&&n<=8) {switch(n) {case 1:finput();break;case 2:flist();break;case 3:fsearch();break;case 4:fadden();break;case 5:fchange();break;case 6:ftaxis();break;case 7:stat();case 8:         printf("\n    ~~~~~~~~~~~~~~~~~~~~~~~~~~\n");     //退出提示printf("             Goodbye!         \n");printf("    ~~~~~~~~~~~~~~~~~~~~~~~~~~\n");exit(0);//将程序退出 }} else //没有按规范选择功能,要进行错误提示     //错误提示{printf("\n    ~~~~~~~~~~~~~~~~~~~~~~~~~~\n");printf("           error input!       \n");printf("    ~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
//          break; //应该将这一句话去掉才能使在输错的情况下也进行菜单循环 }}return 0;
}
/*
主函数部分结束
*/ /*
下面是模块化设计
每个功能对应一个函数
*/ //part 1 : 进行信息录入
void finput()
{FILE *fp;            //声明指针变量 int i,p;fp=fopen("grades","wb");          //首次打开文件, 若没有文件将会自动创建新文件 for(i=0; i<SIZE; i+1) {printf("1 to continue and 0 to end input: ");        //询问是否继续输入 scanf("%d",&i);if(i==0) {fclose(fp);return;} else {printf("Please inut your school number, C grade, Math grade, English grade:\n");scanf("%d%s%d%d%d",&stu[i].num,stu[i].name,&stu[i].C,&stu[i].Maths,&stu[i].En);stu[i].ave=(stu[i].C+stu[i].Maths+stu[i].En)/3.0;fwrite(&stu[i],sizeof(struct student),1,fp);}}fclose(fp);         //记得关闭文件,这是一个好习惯!
}//part 2: 将结果输出
void flist()
{FILE *fp;int i;fp=fopen("grades","rb");printf("____________________________________________________________________________________________________\n"); printf("|                                                  Report                                           |\n");printf("|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");printf("|        ID      |    name   |    C grade    |    Math grade   |   English grade   |    Average     |\n");printf("|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");for(i=0; fread(&stu[i],sizeof(struct student),1,fp)==1; i++) printf("|%11d%15s%13d%17d%18d%19.2f\n",stu[i].num,stu[i].name,stu[i].C,stu[i].Maths,stu[i].En,stu[i].ave);/*此处采用字宽输入比加空格更好, 因为若是使用空格输入,当学号或者名字前后输入的长度不一致时,格式会乱掉,导致无法对其格式 */ printf("|___________________________________________________________________________________________________|\n\n");fclose(fp);
}//part 3:查找数据
void fsearch()
{FILE *fp;int i,num,flag=0;//flag 用来判断是否需要进行错误提示 fp=fopen("grades","rb");rewind(fp);printf("Which one are you searching? Input the School number: ");scanf("%d",&num);for(i=0; i<=SIZE; i++){if(stu[i].num==num) {printf("____________________________________________________________________________________________________\n");//与上文采用相同的输出格式,会显得统一整洁 printf(" Here are the rusults                                                                               \n");printf("|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");printf("|        ID      |    name   |    C grade    |    Math grade   |   English grade   |    Average     \n");printf("|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");printf("|%11d%15s%13d%17d%18d%19.2f\n",stu[i].num,stu[i].name,stu[i].C,stu[i].Maths,stu[i].En,stu[i].ave);printf("|__________________________________________________________________________________________________|\n\n");flag+=1;}}if(flag==0){printf("\n    ~~~~~~~~~~~~~~~~~~~~~~~~~~\n");printf("           error input!       \n");printf("    ~~~~~~~~~~~~~~~~~~~~~~~~~~\n");}
//  printf("___________________________________________________________________________________________________________\n\n");fclose(fp);
}//part 4:增加数据
void fadden()
{int i,s;FILE *fp;fp=fopen("grades","ab+");rewind(fp);printf("___________________________________________________________________________ ________________________\n");printf("|                                                  Report                                          |\n");printf("|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");printf("|        ID      |    name   |    C grade    |    Math grade   |   English grade   |    Average     \n");printf("|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");for(i=0; fread(&stu[i],sizeof(struct student),1,fp)==1; i++) printf("|%11d%15s%13d%17d%18d%19.2f\n",stu[i].num,stu[i].name,stu[i].C,stu[i].Maths,stu[i].En,stu[i].ave);printf("____________________________________________________________________________________________________\n");s=i;            //记录学号位置,从此处开始增加新的数据 for(i=s; i<SIZE; i++) {printf("1 to continue and 0 to end input: ");scanf("%d",&i);if(i==0) {fclose(fp);return;} else {printf("Please inut your school number, C grade, Math grade, English grade:\n");scanf("%d%s%d%d%d",&stu[i].num,stu[i].name,&stu[i].C,&stu[i].Maths,&stu[i].En);stu[i].ave=(stu[i].C+stu[i].Maths+stu[i].En)/3.0;fwrite(&stu[i],sizeof(struct student),1,fp);}}fclose(fp);
}//part 5:修改数据
void fchange()
{FILE *fp;int i,num,n;int flag=0;printf("Which one are you searching? Input the School number: ");scanf("%d",&num);printf("\n");for(i=0; i<=SIZE; i++)if(stu[i].num==num) {printf("____________________________________________________________________________________________________\n");printf("|                                                  Report                                           |\n");printf("|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");printf("|        ID      |    name   |    C grade    |    Math grade   |   English grade   |    Average     |\n");printf("|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");printf("|%11d%15s%13d%17d%18d%19.2f\n",stu[i].num,stu[i].name,stu[i].C,stu[i].Maths,stu[i].En,stu[i].ave);printf("|___________________________________________________________________________________________________|\n\n");n=i;flag=1;break;}if(flag==0) {printf("\n    ~~~~~~~~~~~~~~~~~~~~~~~~~~\n");printf("           error input!       \n");printf("    ~~~~~~~~~~~~~~~~~~~~~~~~~~\n");return;}printf("\n\n");fp=fopen("grades","rb+");fseek(fp,n*sizeof(struct student),0);printf("Please inut your school number, C grade, Math grade, English grade:\n");scanf("%d%s%d%d%d",&stu[i].num,stu[i].name,&stu[i].C,&stu[i].Maths,&stu[i].En);stu[i].ave=(stu[i].C+stu[i].Maths+stu[i].En)/3.0;fwrite(&stu[i],sizeof(struct student),1,fp);fclose(fp);fp=fopen("grades","rb");printf("_______________________________________________________________________________ _____________________\n");printf("|                                                  Report                                           |\n");printf("|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");printf("|        ID      |    name   |    C grade    |    Math grade   |   English grade   |    Average     |\n");printf("|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");for(i=0; fread(&stu[i],sizeof(struct student),1,fp)==1; i++) {printf("|%11d%15s%13d%17d%18d%19.2f\n",stu[i].num,stu[i].name,stu[i].C,stu[i].Maths,stu[i].En,stu[i].ave);}printf("|___________________________________________________________________________________________________|\n");fclose(fp);
}//part 6:按平均成绩进行排序
void ftaxis()
{int i,j,n;FILE *fp;struct student t;fp=fopen("grades","rb");printf("____________________________________________________________________________________________________ \n");printf("|                                                  Report                                           |\n");printf("|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");printf("|        ID      |    name   |    C grade    |    Math grade   |   English grade   |    Average     |\n");printf("|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");for(i=0; fread(&stu[i],sizeof(struct student),1,fp)==1; i++)printf("|%11d%15s%13d%17d%18d%19.2f\n",stu[i].num,stu[i].name,stu[i].C,stu[i].Maths,stu[i].En,stu[i].ave);printf("|___________________________________________________________________________________________________|\n\n");fclose(fp);n=i;for(i=0; i<n; i++)for(j=i+1; j<n; j++)if(stu[i].ave<stu[j].ave) {t=stu[i];stu[i]=stu[j];stu[j]=t;}fp=fopen("grades","wb");printf("\n\n\n");printf("_____________________________________________________________________________________________________\n");printf("|                                                  Report                                           |\n");printf("|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");printf("|        ID      |    name   |    C grade    |    Math grade   |   English grade   |    Average     |\n");printf("|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");for(i=0; i<n; i++) {fwrite(&stu[i],sizeof(struct student),1,fp);printf("|%11d%15s%13d%17d%18d%19.2f\n",stu[i].num,stu[i].name,stu[i].C,stu[i].Maths,stu[i].En,stu[i].ave);}printf("|___________________________________________________________________________________________________|\n");fclose(fp);
}//part 6: 统计指定分数之上的人数
void stat()
{FILE *fp;int i,num,flag=0,count=0;//flag 用来判断是否需要进行错误提示, count用来统计个数float score_; fp=fopen("grades","rb");rewind(fp);printf("Do you want to know the percentage of the total score?\nEnter your number: ");scanf("%f",&score_);for(i=0; i<=SIZE; i++){if(score_ < stu[i].ave ) {count++;flag=1;}}if(flag == 1)printf("%d in total above your number\n",count);if(flag==0){printf("\n    ~~~~~~~~~~~~~~~~~~~~~~~~~~\n");printf("           error input!       \n");printf("    ~~~~~~~~~~~~~~~~~~~~~~~~~~\n");}
//  printf("___________________________________________________________________________________________________________\n\n");fclose(fp);
}

欢迎大家交流指正~

用C语言实现一个学生成绩管理系统 实现学生信息管理。包括:录入、查询、排序等功能。 要求: 用数据文件保存学生基本信息(学号 姓名 课程1 课程2 课程3…) ,利用菜单可以循环实现各个功能。相关推荐

  1. c语言利用指针函数等完成学生成绩管理系统,课程设计C语言可视化程序学生成绩管理系统...

    <课程设计C语言可视化程序学生成绩管理系统>由会员分享,可在线阅读,更多相关<课程设计C语言可视化程序学生成绩管理系统(37页珍藏版)>请在人人文库网上搜索. 1.C语言可视化 ...

  2. c语言成绩管理系统总结分析报告,c语言下学生成绩管理系统程序设计报告

    <c语言下学生成绩管理系统程序设计报告>由会员分享,可在线阅读,更多相关<c语言下学生成绩管理系统程序设计报告(17页珍藏版)>请在人人文库网上搜索. 1.信息技术学院本科课程 ...

  3. 成绩分析系统c语言实验报告,学生成绩管理系统实验报告

    <学生成绩管理系统实验报告>由会员分享,可在线阅读,更多相关<学生成绩管理系统实验报告(13页珍藏版)>请在人人文库网上搜索. 1.学生成绩管理系统实验报告实验名称:学生成绩管 ...

  4. c语言程序学生成绩系统论文,c语言程序设计-学生成绩管理系统论文.doc

    c语言程序设计-学生成绩管理系统论文 C语言程序设计课程设计报告 - PAGE 11 - 中南民族大学工商学院 电子信息与计算机技术系 项目名称: 学生成绩管理系统 学生姓名: 学 号: 班 级: 指 ...

  5. 用C语言链表编写学生成绩管理系统

    本代码供读者学习使用,请不要随意转载. 一.设计题目:学生成绩管理系统 二.目的与要求 每位学生记录包含有学号.姓名.性别.出生日期.三门功课的成绩(高等数学.大学英语.C语言).总分和平均分 系统菜 ...

  6. 用链表c语言程序设计,C语言程序设计-基于链表的学生成绩管理系统

    <C语言程序设计-基于链表的学生成绩管理系统>由会员分享,可在线阅读,更多相关<C语言程序设计-基于链表的学生成绩管理系统(18页珍藏版)>请在人人文库网上搜索. 1.华北科技 ...

  7. 干货干货~C语言版学生成绩管理系统【数据结构课程设计,百行代码实现功能强化版(内附源码)】

    前言 关于这个系统是我们专业要求做的一个课程设计,本来是上个学期交的,我也是上个学期弄好的,打算发出来,但是一直没交上去(怕交上去之前发出来老师说我作弊...),今天就把我做的这个系统分享给大家,不足 ...

  8. c语言成绩管理系统教程,C语言学生成绩管理系统教程.doc

    C语言学生成绩管理系统教程 实训报告 题 目: 学生成绩管理系统院 系: 专 业: 姓 名: 学 号: 指导教师: 日 期: 目录 TOC \o "1-3" \h \z \u HY ...

  9. 学生成绩管理系统(C语言大作业)

    设计一个学生成绩管理系统,包括学生成绩数据的增删改查等基本操作,通过编程实现如下菜单驱动的学生成绩管理系统: (1)录入每个学生的学号.姓名和各科考试成绩: (2)计算每门课程的总分和平均分: (3) ...

最新文章

  1. 青少年电子信息智能创新大赛 赛项说明(Scratch编程创新挑战赛)
  2. SpringMVC学习(二)——SpringMVC架构及组件(及其运行原理)
  3. PAT条条大路通罗马
  4. 从贝叶斯理论到马尔可夫随机场(MRF)--以图像分割为例
  5. 32/100. Binary Tree Inorder Traversal
  6. 基于JAVA+Servlet+JSP+MYSQL的毕业生离校管理系统
  7. SHELL编程传递参数方法详解$# $* $0 $1 $2 $...
  8. HTTPRunner学习笔记
  9. CUTE FTP 控制连接已关闭
  10. linux新漏洞,「漏洞通告」Linux Kernel 信息泄漏权限提升漏洞(CVE-2020-8835)
  11. android147 360 程序锁
  12. 全球与中国调频广播发射机市场深度研究分析报告
  13. 2019腾讯后台开发详细面试流程
  14. 欢迎使用传真服务器系统,coFax传真服务器 OCR页面号码识别传真
  15. 一个月可以学会单片机嘛?单片机编程学多久?
  16. 曲线运动与万有引力公式_高中物理公式:曲线运动公式
  17. ARX助手最新版适配多版本
  18. 极客公园创新大会 IF 2018,用科技主义和独立思维击退喧嚣
  19. 中医针灸学综合练习题库【2】
  20. WordPress实现评论显示IP归属地方法

热门文章

  1. 【深度学习之美】“机器学习”三重门,“中庸之道”趋若人(入门系列之四)
  2. 单片机应用系统设计技术——可预设电压的数控电源
  3. 2015年8月2日23:07:44 最近一周的工作思想汇报
  4. 程序员突破内卷大法:软件架构师成长之路(干货系列,说人话接地气)
  5. 【LaTex】宏包pageno的使用方法,命令\pageno的用法
  6. Packet Tracer has stopped working unexpectedly.
  7. 安装程序错误0x80070422
  8. 情人节程序员表白代码合集
  9. 打包Asp.Net 网站成为一个exe 方便快捷的进行客户演示
  10. [Writeup]百度一下,你就知道