/* (盯着先拔头筹程序)

* 该计划的版权声明和版本号

* Copyright (c) 2011, 烟台大学计算机学院学生的学校

* All rights reserved.

* 文件名: 学生成绩管理系统

* 作 者: 刘江波

* 完毕日期: 2012 年 6 月 23 日

* 版 本 号: v.623

* 对任务及求解方法的描写叙述部分

* 程序头部的凝视结束

*/

#include "stdio.h"

#include"string"

/*定义学生结构体*/

struct Student

{

     char ID[20];

     char Name[20];

     float Mark1;

     float Mark2;

     float Mark3;

     float Average;

};

/*声明学生数组及学生数量*/

struct Student students[1000];

int num=0;

/*求平均值*/

float Avg(struct Student stu)

{

     return (stu.Mark1+stu.Mark2+stu.Mark3)/3;

}

/*通过学号返回数组下标*/

int Student_SearchByIndex(char id[])

{

     int i;

     for (i=0;i<num;i++)

     {

         if (strcmp(students[i].ID,id)==0)

         {

              return i;

         }

     }

     return -1;

}

/*通过姓名返回数组下标*/

int Student_SearchByName(char name[])

{

     int i;

     for (i=0;i<num;i++)

     {

         if (strcmp(students[i].Name,name)==0)

         {

              return i;

         }

     }

     return -1;

}

/*显示单条学生记录*/

void Student_DisplaySingle(int index)

{

     printf("%10s%10s%8s%8s%8s%10s\n","学号","姓名","成绩","成绩","成绩","平均成绩");

     printf("-------------------------------------------------------------\n");

     printf("%10s%10s%8.2f%8.2f%8.2f%10.2f\n",students[index].ID,students[index].Name,

              students[index].Mark1,students[index].Mark2,students[index].Mark3,students[index].Average);

}

/*插入学生信息*/

void Student_Insert()

{

     while(1)

     {

         printf("请输入学号:");

         scanf("%s",&students[num].ID);

         getchar();

         printf("请输入姓名:");

         scanf("%s",&students[num].Name);

         getchar();

         printf("请输入成绩:");

         scanf("%f",&students[num].Mark1);

         getchar();

         printf("请输入成绩:");

         scanf("%f",&students[num].Mark2);

         getchar();

         printf("请输入成绩:");

         scanf("%f",&students[num].Mark3);

         getchar();

         students[num].Average=Avg(students[num]);

         num++;

         printf("是否继续?

(y/n)");

         if (getchar()=='n')

         {

              break;

         }

     }

}

/*改动学生信息*/

void Student_Modify()

{

     //float mark1,mark2,mark3;

     while(1)

     {

         char id[20];

         int index;

         printf("请输入要改动的学生的学号:");

         scanf("%s",&id);

         getchar();

         index=Student_SearchByIndex(id);

         if (index==-1)

         {

              printf("学生不存在!\n");

         }

         else

         {

              printf("你要改动的学生信息为:\n");

              Student_DisplaySingle(index);

              printf("-- 请输入新值--\n");

              printf("请输入学号:");

              scanf("%s",&students[index].ID);

              getchar();

              printf("请输入姓名:");

              scanf("%s",&students[index].Name);

              getchar();

              printf("请输入成绩:");

              scanf("%f",&students[index].Mark1);

              getchar();

              printf("请输入成绩:");

              scanf("%f",&students[index].Mark2);

              getchar();

              printf("请输入成绩:");

              scanf("%f",&students[index].Mark3);

              getchar();

              students[index].Average=Avg(students[index]);

         }

         printf("是否继续?(y/n)");

         if (getchar()=='n')

         {

              break;

         }

     }

}

/*删除学生信息*/

void Student_Delete()

{

     int i;

     while(1)

     {

         char id[20];

         int index;

         printf("请输入要删除的学生的学号:");

         scanf("%s",&id);

         getchar();

         index=Student_SearchByIndex(id);

         if (index==-1)

         {

              printf("学生不存在!\n");

         }

         else

         {

              printf("你要删除的学生信息为:\n");

              Student_DisplaySingle(index);

              printf("是否真的要删除?

(y/n)");

              if (getchar()=='y')

              {

                   for (i=index;i<num-1;i++)

                   {

                       students[i]=students[i+1];//把后边的对象都向前移动

                   }

                   num--;

              }

              getchar();

         }

         printf("是否继续?

(y/n)");

         if (getchar()=='n')

         {

              break;

         }

     }

}

/*按姓名查询*/

void Student_Select()

{

     while(1)

     {

         char name[20];

         int index;

         printf("请输入要查询的学生的姓名:");

         scanf("%s",&name);

         getchar();

         index=Student_SearchByName(name);

         if (index==-1)

         {

              printf("学生不存在!\n");

         }

         else

         {

              printf("你要查询的学生信息为:\n");

              Student_DisplaySingle(index);

         }

         printf("是否继续?(y/n)");

         if (getchar()=='n')

         {

              break;

         }

     }

}

/*按平均值排序*/

void Student_SortByAverage()

{

     int i,j;

     struct Student tmp;

     for (i=0;i<num;i++)

     {

         for (j=1;j<num-i;j++)

         {

              if (students[j-1].Average<students[j].Average)

              {

                   tmp=students[j-1];

                   students[j-1]=students[j];

                   students[j]=tmp;

              }

         }

     }

}

/*显示学生信息*/

void Student_Display()

{

     int i;

     printf("%10s%10s%8s%8s%8s%10s\n","学号","姓名","成绩","成绩","成绩","平均成绩");

     printf("-------------------------------------------------------------\n");

     for (i=0;i<num;i++)

     {

         printf("%10s%10s%8.2f%8.2f%8.2f%10.2f\n",students[i].ID,students[i].Name,

              students[i].Mark1,students[i].Mark2,students[i].Mark3,students[i].Average);

     }

}

/*将学生信息从文件读出*/

void IO_ReadInfo()

{

     FILE *fp;

     int i;

     if ((fp=fopen("Database.txt","rb"))==NULL)

     {

         printf("不能打开文件!\n");

         return;

     }

     if (fread(&num,sizeof(int),1,fp)!=1)

     {

         num=-1;

     }

     else

     {

         for(i=0;i<num;i++)

         {

              fread(&students[i],sizeof(struct Student),1,fp);

         }

     }

     fclose(fp);

}

/*将学生信息写入文件*/

void IO_WriteInfo()

{

     FILE *fp;

     int i;

     if ((fp=fopen("Database.txt","wb"))==NULL)

     {

         printf("不能打开文件!\n");

         return;

     }

     if (fwrite(&num,sizeof(int),1,fp)!=1)

     {

         printf("写入文件错误!\n");

     }

     for (i=0;i<num;i++)

     {

         if (fwrite(&students[i],sizeof(struct Student),1,fp)!=1)

         {

              printf("写入文件错误!\n");

         }

     }    

     fclose(fp);

}

/*主程序*/

void main()

{

     int choice;

     IO_ReadInfo();

     while(1)

     {

         /*主菜单*/

         printf("\n------ 学生成绩管理系统------\n");

         printf("1. 添加学生记录\n");

         printf("2. 改动学生记录\n");

         printf("3. 删除学生记录\n");

         printf("4. 按姓名查询学生记录\n");

         printf("5. 按平均成绩排序\n");

         printf("6. 退出\n");

         printf("请选择(1-6):");

         scanf("%d",&choice);

         getchar();

         switch(choice)

         {

         case 1:

              Student_Insert();

              break;

         case 2:

              Student_Modify();

              break;

         case 3:

              Student_Delete();

              break;

         case 4:

              Student_Select();

              break;

         case 5:

              Student_SortByAverage();

              Student_Display();

              break;

         case 6:

              exit(0);

              break;

         }

         IO_WriteInfo();

     }

}

《C语言 学生成绩管理系统》的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. SOA两个接口通常用于实现更:SOAP vs REST

    SOA协作架构异构系统,因此,一个跨操作系统的需求.跨语言的通用信息交换格公式. SOAP和REST它们是基于消息正文文本,在跨平台方面相比二进制消息优点.因此,作为选择SOA实施通常用于界面.但SO ...

  2. poj 2482 Stars in Your Window(扫描线)

    id=2482" target="_blank" style="">题目链接:poj 2482 Stars in Your Window 题目大 ...

  3. 【IOS 开发】Object-C 入门 Xcode 环境具体解释

    作者 : 韩曙亮 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/38424965 一. Xcode 环境安装 与 project ...

  4. Hadoop获得先进的步步高(四)-试Hadoop

    四.试Hadoop 一个简单的求每年温度最大值的程序. 1.准备两个文本測试数据 准备两个名为data1.txt及data2.txt的文件.用于做为计算的输入数据,将其放于/home/fenglibi ...

  5. Flux是一个Facebook团队的前端开发架构

    Flux是一个Facebook团队的前端开发架构 Flux introduction 本文组成: React 官方文档翻译 相关实践心得. 内容上是Flux的介绍,例子将会在以后写出.一旦稍微多了解一 ...

  6. C# .net基于Http实现web server(web服务)

    原文:C# .net基于Http实现web server(web服务) 什么是 web server?  百度百科是这么解释的: Web Server中文名称叫网页服务器或web服务器.WEB服务器也 ...

  7. 你可以不知道原因,但是,我们不能停止努力。httplook抓取路由配置界面信息

    因为实验室的项目要求,需要动态控制路由的配置信息,我们知道.路由选择需要购买的访问后,:http://192.168.1.1 路由配置页面.配置,不须要人手工操作.甚至定时任务配置的时候,就须要进一步 ...

  8. Leetcode:convert_sorted_array_to_binary_search_tree

    一.     称号 排序后的数组成二叉搜索树. 二.     分析 BST的中序遍历是一个sorted-array,再构造回去成一个BST,先将中间的元素作为根节点,这个节点的左右各自是左子树和右子树 ...

  9. ios 调节器 modal 得知

    代码中创建: 1.appdelegate 该contoller放置controller下一个 - (BOOL)application:(UIApplication *)application didF ...

  10. [全国首发]Swift视频教程

    我真的很抱歉,每个人,从7带班开始到现在,最后的成品带. 到了最新的版本号,Swift语言一直在更新,非常多写法都变了.大家能够加我私人微信:wanghj29,我会在朋友圈更新swift的最新动态.此 ...