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

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

* 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. .NET反编译之Reflector基础示例

    这几日由于公司需要, 看了些.NET反编译技巧,特地和大家分享下 .NET反编译工具很多,Reflector是其中一个很优秀的工具,所以就用它来进行反编译工作了.今天我们就用"繁星代码生成器 ...

  2. 从涂鸦到发布——理解API的设计过程(转)

    英文原文:From Doodles to Delivery: An API Design Process 要想设计出可以正常运行的Web API,对基于web的应用的基本理解是一个良好的基础.但如果你 ...

  3. Cordic 算法的原理介绍

    cordic 算法知道正弦和余弦值,求反正切,即角度. 采用用不断的旋转求出对应的正弦余弦值,是一种近似求解发. 旋转的角度很讲求,每次旋转的角度必须使得 正切值近似等于 1/(2^N).旋转的目的是 ...

  4. POJ 2762 Going from u to v or from v to u?(强连通分量+拓扑排序)

    职务地址:id=2762">POJ 2762 先缩小点.进而推断网络拓扑结构是否每个号码1(排序我是想不出来这点的. .. ).由于假如有一层为2的话,那么从此之后这两个岔路的点就不可 ...

  5. 一个由proguard与fastJson引起的血案(转)

    更新微信sdk导致ComposeData中的内部类ComposeDataSender方法被混淆 根本原因,fastjson使用姿势不对. 问题描述: 一个发件人列表里,应当呈现的数据(这里命名为Com ...

  6. 【ORACLE】使用数据泵的生产环境impd,expdp数据迁移

    ********************************************** ** 原文: blog.csdn.net/clark_xu  徐长亮专栏 **************** ...

  7. zoj 3203 Light Bulb,三分之二的基本问题

    Light Bulb Time Limit: 1 Second      Memory Limit: 32768 KB Compared to wildleopard's wealthiness, h ...

  8. ubunut 查看port被哪个程序占用

    查看8087port被哪个程序占用 lsof -i :8087 -n

  9. android 登录推断是否邮箱或手机号

    /** * 验证邮件是合法的输入 *  * @param strEmail * @return */ public static boolean isEmail(String strEmail) { ...

  10. hdu Max Sum Plus Plus(dp+滚动数组)

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1024 m为段,要深刻理解题意,并没有说是段与段要连接. 题解链接:http://blog.csdn.n ...