C语言版学生成绩管理系统

本文实例为大家分享了C语言版学生成绩管理系统的具体代码,供大家参考,具体内容如下

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#include<string.h>
#include<algorithm>
char buf[255];
char c=14;
char path[]="D:\\data";
char tmp[]="D:\\tmp";
struct Student
{
  char Name[20];
  char No[20];
  char Dept[20];
  char ClassNo[20];
  double Math,Chinese,English;
  double Ave;
  bool Pass;
}students[500];
bool cmp1(Student s1,Student s2)
{
  return s1.Chinese>s2.Chinese;
}
bool cmp2(Student s1,Student s2)
{
  return s1.Math>s2.Math;
}
bool cmp3(Student s1,Student s2)
{
  return s1.English>s2.English;
}
bool cmp4(Student s1,Student s2)
{
  return s1.Ave>s2.Ave;
}
//---------------------------------------------------------void Sort(int cmd)
/*
1 ChineseSort
2 MathSort
3 EnglishSort
4 AveSort
*/
int Sort(int cmd)
{
  Student stu;
  FILE *fp=fopen(path,"ab+");
  int n,cnt=0;
  while((n=fread(&stu,sizeof(stu),1,fp)>0))
  {
    students[cnt++]=stu;
  }
  fclose(fp);
  switch(cmd)
  {
  case 1:
  std::sort(students,students+cnt,cmp1);
    break;
  case 2:
  std::sort(students,students+cnt,cmp2);
    break;
  case 3:
  std::sort(students,students+cnt,cmp3);
    break;
  case 4:
  std::sort(students,students+cnt,cmp4);
    break;
  default:
    exit(0);
  }
  return cnt;
}
//---------------------------------------------------------PrintTitle()
void PrintTitle()
{
  printf("%-8s%-12s%-12s%-8s%-7s%-7s%-7s%-7s%-s\n","姓名","班级","学号","系院","语文","数学","英语","平均分","及格");
}
//---------------------------------------------------------Print(Student stu)
void Print(Student stu)
{
  printf("%-8s%-12s%-12s%-8s%-7.2lf%-7.2lf%-7.2lf%-7.2lf%-s\n",stu.Name,stu.ClassNo,stu.No,stu.Dept,stu.Chinese,stu.Math,stu.English,stu.Ave,stu.Pass?"是":"否");
}
//---------------------------------------------------------PrintNo(char No[])
void PrintNo(char No[])
{
  Student stu;
  int n;
  bool find=0;
  FILE *fp=fopen(path,"ab+");//以ab+方式打开防止data文件不存在时发生错误
  while((n=fread(&stu,sizeof(stu),1,fp))>0)
  {
    if(!strcmp(stu.No,No))
    {
      find=1;
      break;
    }
  }
  fclose(fp);
  if(find)
  {
    PrintTitle();
    Print(stu);
  }
  else
    puts("未找到!");
}
//---------------------------------------------------------PrintClass(char ClassNo[])
void PrintClass(char ClassNo[])
{
  Student stu;
  FILE *fp=fopen(path,"ab+");
  int n,cnt=0;
  while((n=fread(&stu,sizeof(stu),1,fp)>0))
  {
    if(!strcmp(stu.ClassNo,ClassNo))
    {
      if(cnt==0)
        PrintTitle();
      Print(stu);
      cnt++;
    }
  }
  fclose(fp);
  if(cnt==0)
    puts("无数据");
  else
    printf("共%d条\n",cnt);
}
//---------------------------------------------------------PrintDept(char Dept[])
void PrintDept(char Dept[])
{
    Student stu;
  FILE *fp=fopen(path,"ab+");
  int n,cnt=0;
  while((n=fread(&stu,sizeof(stu),1,fp)>0))
  {
    if(!strcmp(stu.Dept,Dept))
    {
      if(cnt==0)
        PrintTitle();
      Print(stu);
      cnt++;
    }
  }
  fclose(fp);
  if(cnt==0)
    puts("无数据");
  else
    printf("共%d条\n",cnt);
}
//---------------------------------------------------------PrintAll()
void PrintAll()
{
  Student stu;
  FILE *fp=fopen(path,"ab+");
  int n,cnt=0;
  while((n=fread(&stu,sizeof(stu),1,fp)>0))
  {
    if(cnt==0)
      PrintTitle();
    Print(stu);
    cnt++;
  }
  fclose(fp);
  if(cnt==0)
    puts("无数据");
  else
    printf("共%d条\n",cnt);
}
//---------------------------------------------------------Input()
Student Input()
{
  Student stu;
  puts("请输入姓名、班级、学号、系院:");
  scanf("%s%s%s%s",&stu.Name,&stu.ClassNo,&stu.No,&stu.Dept);
  puts("请输入各科成绩:语文、数学、英语");
  scanf("%lf%lf%lf",&stu.Chinese,&stu.Math,&stu.English);
  stu.Ave=(stu.Chinese+stu.Math+stu.English)/3;
  if(stu.Chinese>=60&&stu.Math>=60&&stu.English>=60)
    stu.Pass=1;
  else
    stu.Pass=0;
  return stu;
}
//---------------------------------------------------------Insert()
void Insert()
{
  int cmd;
  do{
    Student stu=Input();
    FILE *fp=fopen(path,"ab+");
    fwrite(&stu,sizeof(stu),1,fp);
    fclose(fp);
    puts("录入成功");
    puts("继续录入吗?[1]是[0]否");
    scanf("%d",&cmd);
  }while(cmd==1);
}
//---------------------------------------------------------Del()
void Del()
{
  int cmd,cmd2;
  char No[20];
  do{
  puts("请输入要删除的学号:");
  scanf("%s",&No);
  Student stu;
  FILE *fp=fopen(path,"ab+");
  FILE *fp2=fopen(tmp,"wb");
  int n,find=0;
  while((n=fread(&stu,sizeof(stu),1,fp))>0)
  {
    if(!strcmp(stu.No,No))
    {
      find=1;
      Print(stu);
      puts("确定要删除吗?[1]确定[0]取消");
      scanf("%d",&cmd2);
      if(cmd2==1)
        puts("已删除");
      else
        fwrite(&stu,sizeof(stu),1,fp2);
    }
    else
    fwrite(&stu,sizeof(stu),1,fp2);
  }
  fclose(fp);
  fclose(fp2);
  if(find==0)
  {
    printf("未找到学号%s\n",No);
    remove(tmp);
  }
  else
  {
    remove(path);
    rename(tmp,path);
  }
  puts("继续删除吗?[1]是[0]否");
  scanf("%d",&cmd);
  }while(cmd==1);
}
//---------------------------------------------------------Change()
void Change()
{
  int cmd;
  char No[20];
  do{
  puts("请输入要更改的学号:");
  scanf("%s",&No);
  Student stu;
  int find=0;
  FILE *fp=fopen(path,"ab+");
  FILE *fp2=fopen(tmp,"wb");
  int n;
  while((n=fread(&stu,sizeof(stu),1,fp))>0)
  {
    if(!strcmp(stu.No,No))
    {
      find=1;
      stu=Input();
      fwrite(&stu,sizeof(stu),1,fp2);
    }
    else
      fwrite(&stu,sizeof(stu),1,fp2);
  }
  fclose(fp);
  fclose(fp2);
  if(find)
  {
    remove(path);
    rename(tmp,path);
    puts("更改成功!");
  }
  else
  {
    printf("未找到学号%s\n",No);
    remove(tmp);
  }
  puts("继续更改吗?[1]是[0]否");
  scanf("%d",&cmd);
  }while(cmd==1);
}
//---------------------------------------------------------AboutCourse
void Chinese()
{
  double sum=0,ave;
  int pass=0,fail=0,better=0;
  Student stu;
  FILE *fp=fopen(path,"ab+");
  int n,cnt=Sort(1);
  while((n=fread(&stu,sizeof(stu),1,fp))>0)
  {
    sum+=stu.Chinese;
    if(stu.Chinese>=60)
      {
        pass++;
        if(stu.Chinese>=80)
          better++;
      }
    else
      fail++;
  }
  ave=sum/cnt;
  puts("语文成绩分析……");
  printf("共有%d学生\n优秀:%d人\n及格:%d人\n不及格:%d人\n及格率:%.2lf%%\n",cnt,better,pass,fail,100.0*pass/cnt);
  printf("%-8s%-10s%-12s%-s\n","名次","姓名","学号","语文");
  for(int i=0;i<cnt;i++)
  {
    printf("第%2d名 %-10s%-12s%-8.2lf\n",i+1,students[i].Name,students[i].No,students[i].Chinese);
  }
  printf("平均分:%.2lf\n",ave);
}
void Math()
{
  double sum=0,ave;
  int pass=0,fail=0,better=0;
  Student stu;
  FILE *fp=fopen(path,"ab+");
  int n,cnt=Sort(2);
  while((n=fread(&stu,sizeof(stu),1,fp))>0)
  {
    sum+=stu.Math;
    if(stu.Math>=60)
      {
        pass++;
        if(stu.Math>=80)
          better++;
      }
    else
      fail++;
  }
  ave=sum/cnt;
  puts("数学成绩分析……");
  printf("共有%d学生\n优秀:%d人\n及格:%d人\n不及格:%d人\n及格率:%.2lf%%\n",cnt,better,pass,fail,100.0*pass/cnt);
  printf("%-8s%-10s%-12s%-s\n","名次","姓名","学号","数学");
  for(int i=0;i<cnt;i++)
  {
    printf("第%2d名 %-10s%-12s%-8.2lf\n",i+1,students[i].Name,students[i].No,students[i].Math);
  }
  printf("平均分:%.2lf\n",ave);
}
void English()
{
  double sum=0,ave;
  int pass=0,fail=0,better=0;
  Student stu;
  FILE *fp=fopen(path,"ab+");
  int n,cnt=Sort(3);
  while((n=fread(&stu,sizeof(stu),1,fp))>0)
  {
    sum+=stu.English;
    if(stu.English>=60)
      {
        pass++;
        if(stu.English>=80)
          better++;
      }
    else
      fail++;
  }
  ave=sum/cnt;
  puts("英语成绩分析……");
  printf("共有%d学生\n优秀:%d人\n及格:%d人\n不及格:%d人\n及格率:%.2lf%%\n",cnt,better,pass,fail,100.0*pass/cnt);
  printf("%-8s%-10s%-12s%-s\n","名次","姓名","学号","英语");
  for(int i=0;i<cnt;i++)
  {
    printf("第%2d名 %-10s%-12s%-8.2lf\n",i+1,students[i].Name,students[i].No,students[i].English);
  }
  printf("平均分:%.2lf\n",ave);
}
void Average()
{
  Student stu;
  int n,cnt=Sort(4);
  double sum=0;
  FILE *fp=fopen(path,"ab+");
  while((n=fread(&stu,sizeof(stu),1,fp))>0)
  {
    sum+=stu.Chinese;
    sum+=stu.Math;
    sum+=stu.English;
  }
  puts("平均成绩分析……");
  printf("%-8s%-10s%-12s%-s\n","名次","姓名","学号","平均成绩");
  for(int i=0;i<cnt;i++)
  {
    printf("第%2d名 %-10s%-12s%-8.2lf\n",i+1,students[i].Name,students[i].No,students[i].Ave);
  }
  printf("平均分:%.2lf\n",sum/cnt/3);
}
//---------------------------------------------------------Search()
void Search()
{
  int cmd,cmd2;
  while(1)
  {
    system("cls");
    puts("[1] 按学号查询");
    puts("[2] 按班级查询");
    puts("[3] 输出全部");
    puts("[4] 按系别查询");
    puts("[5] 课程分析");
    puts("[0] 返回主界面");
    scanf("%d",&cmd);
    if(cmd==0)
      break;
    switch(cmd)
    {
    case 1:
      {
      char No[20];
      puts("请输入要查询的学号:");
      scanf("%s",&No);
      PrintNo(No);
      }
      break;
    case 2:
      {
        char ClassNo[20];
        puts("请输入要查询班级号:");
        scanf("%s",&ClassNo);
        PrintClass(ClassNo);
      }
      break;
    case 3:
      PrintAll();
      break;
    case 4:
      {
        char Dept[20];
        puts("请输入要查询的系别:");
        scanf("%s",&Dept);
        PrintDept(Dept);
      }
      break;
    case 5:
      while(1)
      {
        puts("[1] 语文成绩分析");
        puts("[2] 数学成绩分析");
        puts("[3] 英语成绩分析");
        puts("[4] 平均成绩分析");
        puts("[0] 返回上一级");
        scanf("%d",&cmd2);
        if(cmd2==0)
          break;
        switch(cmd2)
        {
        case 1:
          Chinese();
          break;
        case 2:
          Math();
          break;
        case 3:
          English();
          break;
        case 4:
          Average();
          break;
        default:
          puts("不合法指令!");
        }
      }
      break;
    default:
      puts("不合法指令!");
    }
    while(1)
    {
      puts("[0] 返回");
      puts("[1] 录入");
      puts("[2] 删除");
      puts("[3] 修改");
      scanf("%d",&cmd2);
      if(cmd2==0)
        break;
      switch(cmd2)
      {
      case 1:
        Insert();
          break;
      case 2:
        Del();
        break;
      case 3:
        Change();
        break;
      default:
        puts("不合法指令!");
      }
    }
  }
}
//---------------------------------------------------------Menu()
void ShowMenu1()
{
  int i;
  puts("");
  printf("         ");
  for(i=0;i<14;i++)
    putchar(c);
  printf("成绩管理分析系统");
  for(i=0;i<14;i++)
    putchar(c);
  puts("");
  printf("        %c                       %c\n",c,c);
  printf("         %c        请输入指令        %c\n",c,c);
  printf("        %c                       %c\n",c,c);
  printf("         %c        [0] 退出         %c\n",c,c);
  printf("        %c                       %c\n",c,c);
  printf("         %c        [1] 录入         %c\n",c,c);
  printf("        %c                       %c\n",c,c);
  printf("         %c        [2] 删除         %c\n",c,c);
  printf("        %c                       %c\n",c,c);
  printf("         %c        [3] 查询         %c\n",c,c);
  printf("        %c                       %c\n",c,c);
  printf("         %c        [4] 更改         %c\n",c,c);
  printf("        %c                       %c\n",c,c);
  printf("         ");
  for(i=0;i<44;i++)
    putchar(c);
  puts("");
}
void ShowMenu2()
{
  int i;
  puts("");
  printf("         ");
  for(i=0;i<14;i++)
    putchar(c);
  printf("成绩管理分析系统");
  for(i=0;i<14;i++)
    putchar(c);
  puts("");
  printf("         %c                     %c\n",c,c);
  printf("        %c         请输入指令         %c\n",c,c);
  printf("         %c                     %c\n",c,c);
  printf("        %c         [0] 退出          %c\n",c,c);
  printf("         %c                     %c\n",c,c);
  printf("        %c         [1] 录入          %c\n",c,c);
  printf("         %c                     %c\n",c,c);
  printf("        %c         [2] 删除          %c\n",c,c);
  printf("         %c                     %c\n",c,c);
  printf("        %c         [3] 查询          %c\n",c,c);
  printf("         %c                     %c\n",c,c);
  printf("        %c         [4] 更改          %c\n",c,c);
  printf("         %c                     %c\n",c,c);
  printf("         ");
  for(i=0;i<44;i++)
    putchar(c);
  puts("");
}
//---------------------------------------------------------void RandColor()
void RandColor()
{
  int a,b;
  char param[20]="color ",param2[10];
  do{
    a=rand()%16;
    b=rand()%16;
  }while(a==b);
  sprintf(param2,"%x%x",a,b);
  strcat(param,param2);
  system(param);
}
//---------------------------------------------------------main()
int main()
{
  int cmd;
  srand(time(NULL));
  for(int i=0;i<8;i++)
  {
  RandColor();
  system("cls");
  ShowMenu1();
  system("cls");
  ShowMenu2();
  }
  system("color 0a");
  while(1)
  {
    system("cls");
    ShowMenu1();
    printf("[ ]\b\b");
    scanf("%d",&cmd);
    if(cmd==0)
      break;
    switch(cmd)
    {
    case 1:
      Insert();
      break;
    case 2:
      Del();
      break;
    case 3:
      Search();
      break;
    case 4:
      Change();
      break;
    default:
      puts("命令不合法!");
    }
  }
  return 0;
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

您可能感兴趣的文章:

  • C语言单链表版学生信息管理系统
  • C语言实现学生信息管理系统(单链表)
  • C语言学生信息管理系统小项目
  • C语言数组实现学生信息管理系统设计
  • C语言学生信息管理系统设计与实现
  • 基于C语言实现学生成绩管理系统
  • C语言实现通讯管理系统设计
  • C语言实现简单学生成绩管理系统
  • C语言利用结构体数组实现学生成绩管理系统
  • 学生信息管理系统C语言版
(0)

相关推荐

  • C语言学生信息管理系统小项目

    本文为大家分享了C语言学生信息管理系统小项目,供大家参考,具体内容如下 /* 运行环境:我是在linux里面用gcc编译的,在windows里应该也能运行,用的一些文件库函数都是c标准库,没有用linux的系统调用(纠正一下:system("clear")这个系统调用是linux的,windows里面用system("cls") ) (1)问题描述 学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等.试设计一学生信息管理系统,使之能提供以下功

  • C语言实现学生信息管理系统(单链表)

    本文实例为大家分享了C语言实现学生信息管理系统的具体代码,供大家参考,具体内容如下 /*copyright(c)2016.烟台大学计算机学院 * All rights reserved, * 文件名称:text.Cpp * 作者:吴敬超 * 完成日期:2016年7月1日 * 版本号:codeblock * * 问题描述: 学生信息管理系统 * 输入描述: * 程序输出: 输出结果 */ #include <stdio.h> #include <stdlib.h> #include

  • C语言单链表版学生信息管理系统

    本文实例为大家分享了C语言学生信息管理系统的具体代码,供大家参考,具体内容如下 代码: //以单链表作为存储结构,设计和实现课程成绩管理的完整程序. //程序包括如下功能. //1.建立学生成绩表,包含学生的学号.姓名和成绩. //2.可以显示所有学生成绩. //3.可以计算学生的总数. //4.可以按学号和序号查找学生. //5.可以在指定位置插入学生成绩数据. //6.可以删除指定位置的学生数据. //7.可以把学生成绩按从高到低的顺序排序. //作者: yinlinqvan //操作系统:

  • C语言数组实现学生信息管理系统设计

    概述 单纯只用多个数组管理学生成绩信息,不使用结构体,该程序最主要的难点是依据学号或总成绩对学生信息进行排序,借助了临时数组来标记排好序的下标. 运行结果如下: 输入数据: 打印数据: 根据学号对信息进行排序: 根据总成绩对信息进行排序: 根据学号删除某一信息: 代码如下: #include <stdio.h> #include <stdlib.h> //exit函数头文件 #include <string.h> //字符串相关操作头文件 #define MAX_STU

  • 基于C语言实现学生成绩管理系统

    本文实例为大家分享了C语言实现学生成绩管理系统的具体代码,供大家参考,具体内容如下 这里只贴代码,具体介绍省略. #include <stdio.h> #include <io.h> #include <conio.h> #include <stdlib.h> #include <string.h> #define MAX 200 struct student { char no[10]; // 学号 char name[50]; // 姓名 f

  • 学生信息管理系统C语言版

    C语言学生信息管理系统包括以下功能: 1.学生信息的整体注册 2.学生信息的修改 3.学生成绩信息的录入 4.学生信息的添加 5.恢复误删的学生信息 6.学生信息的删除 7.密码修改保存函数 8.学生信息的查询 9.密码修改函数 10.学生信息管理系统的菜单函数 #include "stdio.h" #include "malloc.h" #include "string.h" #include "stdlib.h" #inc

  • C语言利用结构体数组实现学生成绩管理系统

    要求: 某班有最多不超过30人(具体人数由键盘输入)参加期末考试,最多不超过6门(具体门数由键盘输入).定义结构体类型描述学生信息,每个学生信息包括:学号.姓名.多门课的成绩.总成绩和平均成绩.用结构体数组作为函数参数,编程实现如下菜单驱动的学生成绩管理系统. (1) 录入每个学生的学号.姓名和各科考试成绩. (2) 计算每门课程的总分和平均分. (3) 计算每个学生的总分和平均分. (4) 按每个学生的总分由高到低排出名次表. (5) 按学号由小到大排出成绩表. (6) 按姓名的字典顺序排出成

  • C语言实现简单学生成绩管理系统

    本文实例为大家分享了C语言实现学生成绩管理系统的具体代码,供大家参考,具体内容如下 C语言小项目 实现一个学生成绩管理系统 系统功能: 1.实现所有学生成绩的录入(利用结构体数组),当输入字符为end时候,结束成绩的录入:  2.实现所有学生信息的输出  3.输入指定学生姓名,并能输出这名学生的信息  4.将学生成绩按照语文和数学成绩排序 思路: 1. 首先,先把这个小项目的框架打好.考虑要写几个文件,每一个文件里面实现怎样的功能.考虑到这个小项目的代码量以及程序的易读性,我决定将写三个文件.一

  • C语言实现通讯管理系统设计

    本文实例为大家分享了C语言实现通讯管理系统的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<string.h> #include<stdlib.h> typedef struct{ char num[5]; char name[9]; char sex[9]; char phone[13]; char addr[31]; }DataType; typedef struct node{ DataType data; struct

  • C语言学生信息管理系统设计与实现

    本文实例为大家分享了C语言学生信息管理系统的具体代码,供大家参考,具体内容如下 #include"stdio.h" //标准的输入输出函数文件头部说明 #include"math.h" // 数学函数头部说明 #include"string.h" #include"stdlib.h" //通过该函数头部里的函数,改变控制台的背景和颜色 #include"windows.h" //头文件声明,下文用到了改变控

随机推荐