/*
* 作    者: 霍雨佳
* 完成日期:2014 年3月6日
* 版 本 号:v1.0
* 问题描述:利用结构体数组等知识对学生的成绩进行统计。
* 样例输入:略
* 样例输出:略
* 问题分析:
(1)输出结构体数组中所有同学的记录。
(2)输出按总分排序后的成绩单;
(3)有30名同学可以获得奖学金,规则是总分高者优先,有挂科者不得奖学金,请输出可以的奖学金的同学的名单
(4) 输出C++不及格同学学号姓名及C++成绩
(5) 输出总成绩大于260的同学名单
*/
#include <iostream>
#include <cstdlib>//调用 exit(1)需要包含cstdlib
#include <fstream>//操作文件必写
#include <iomanip>
#include <cstdio>
using namespace std;
struct Student
{
char num[13];   //学号
char name[10];
int cpp;
int math;
int english;
int grade;    //总成绩
};
void output(Student s [],int n);//输出所有同学的记录
void sort(Student s [],int n);//按总分排序(降序)
void put(Student s [],int n);//输出排序后的成绩单
void out(Student s [],int n);//输出得奖学金同学名单
void outm(Student s [],int n);//输出C++不及格同学学号姓名及C++成绩
void outn(Student s [],int n);//输出总成绩大于260的同学名单
int main()
{
int i;
Student stu[1500];
int stuNum=0;
//从文件中读取数据,存放到定义的结构体数组中
ifstream infile("score.txt",ios::in);//以输入方式打开文件
if(!infile)//测试是否成功打开
{
cerr<<"open error!"<<endl;
exit(1);
}
i=0;
while(infile>>stu[i].num>>stu[i].name>>stu[i].cpp>>stu[i].math>>stu[i].english)
{
stu[i].grade=stu[i].cpp+stu[i].math+stu[i].english;//计算总成绩
++stuNum;
++i;
}
infile.close();
sort(stu,stuNum);
int order;//order 操作指令
cout<<" 1.输出成绩单"<<endl;
cout<<" 2.输出按总分排序后的成绩单"<<endl;
cout<<" 3.输出获得奖学金同学名单"<<endl;
cout<<" 4.输出C++不及格同学姓名及C++成绩"<<endl;
cout<<" 5.输出总成绩大于260的同学名单"<<endl;
cout<<" 0.结束"<<endl;
cout<<"请输入操作指令(0-5)"<<endl;
fflush(stdin);     //清空缓存区
do
{
cin>>order;
switch(order)
{
case 1:
output(stu,stuNum);//输出所有同学的记录
break;
case 2:
put(stu,stuNum);//输出排序后的成绩单
break;
case 3:
out(stu,stuNum);//输出得奖学金同学名单
break;
case 4:
outm(stu,stuNum);//输出C++不及格同学学号姓名及C++成绩
break;
case 5:
outn(stu,stuNum);//输出总成绩大于260的同学名单
break;
default:
break;
return 0;
}
}while(order!=0);
return 0;
}
void output(Student s[],int n)//输出所有同学的记录
{
int j;
cout<<setw(13)<<"学号"<<setw(13)<<"姓名"<<setw(13)<<"C++"<<setw(13)<<"高数"<<setw(13)<<"英语"<<setw(13)<<"总分"<<endl;
for(j=0; j<n; j++)
{
cout<<setw(13)<<s[j].num<<setw(13)<<s[j].name<<setw(13)<<s[j].cpp<<setw(13)<<s[j].math<<setw(13)<<s[j].english<<setw(13)<<s[j].grade<<endl;
}
}
void sort(Student s[],int n)//按总分排序(降序)
{
int j,i;
Student m;
for(j=0; j<n-1; j++) //冒泡排序法
{
for(i=0; i<n-1-j; i++)
{
if(s[i].grade<s[i+1].grade)
{
m=s[i];
s[i]=s[i+1];
s[i+1]=m;
}
}
}
}
void put(Student s[],int n)     //输出排序后成绩单
{
int j;
cout<<"排序后成绩单为:"<<endl;
cout<<setw(13)<<"学号"<<setw(13)<<"姓名"<<setw(13)<<"C++"<<setw(13)<<"高数"<<setw(13)<<"英语"<<setw(13)<<"总分"<<endl;
for(j=0; j<n; j++)
{
cout<<setw(13)<<s[j].num<<setw(13)<<s[j].name<<setw(13)<<s[j].cpp<<setw(13)<<s[j].math<<setw(13)<<s[j].english<<setw(13)<<s[j].grade<<endl;
}
}
void out(Student s [],int n)//输出得奖学金同学名单
{
int i;
cout<<"奖学金同学名单为:"<<endl;
for(i=0; i<30;)
{
if(s[i].cpp>=60&&s[i].math>=60&&s[i].english>=60)
{
cout<<setw(13)<<s[i].num<<setw(13)<<s[i].name<<setw(13)<<s[i].cpp<<setw(13)<<s[i].math<<setw(13)<<s[i].english<<setw(13)<<s[i].grade<<endl;
i++;
}
}
}
void outm(Student s [],int n)//输出C++不及格同学学号姓名及C++成绩
{
int i;
cout<<"C++不及格同学学号姓名及C++成绩"<<endl;
cout<<setw(13)<<"学号"<<setw(13)<<"姓名"<<setw(13)<<"C++"<<endl;
for(i=0; i<n; i++)
{
if(s[i].cpp<60)
{
cout<<setw(13)<<s[i].num<<setw(13)<<s[i].name<<setw(13)<<s[i].cpp<<endl;
}
}
}
void outn(Student s [],int n)//输出总成绩大于260的同学名单
{
int i;
cout<<"总成绩大于260的同学名单为:"<<endl;
for(i=0; i<n; i++)
{
if(s[i].grade>=260)
{
if(i%5==0)
{
cout<<endl;
}
cout<<s[i].name<<" ";
}
}
}

运行结果:

啦啦啦,终于可以了~~~

开始只能输入一项指令,不能循环,后来发现用do-while结构就能解决此问题,哈哈~~~~

加油加油!!!

2-文件+结构体实现实用系统(拓展)相关推荐

  1. 2-3文件+结构体实现实用系统

    /* * 作 者: 霍雨佳 * 完成日期:2014 年3月6日 * 版 本 号:v1.0 * 问题描述:利用结构体数组等知识对学生的成绩进行统计. * 样例输入:略 * 样例输出:略 * 问题分析:( ...

  2. 基于C++结构体的通讯录系统

    基于C++结构体的通讯录系统 说明 该程序系统并不完美,存在一定的缺陷,仅供初学者参考,不论是功能上,还是界面上,读者可自行修改,创新. 核心代码块即功能展示 1.添加联系人功能 //添加联系人 vo ...

  3. 在linux c 以结构体形式写文件 结构体参数如何在函数中传递,Linux安全审计机制模块实现分析(16)-核心文件之三auditsc.c文件描述及具体变量、函数定义...

    原标题:Linux安全审计机制模块实现分析(16)-核心文件之三auditsc.c文件描述及具体变量.函数定义 2.4.3文件三auditsc.c2.4.3.1 文件描述 kernel/auditsc ...

  4. c语言链表成绩管理系统排序,【C项目】 文件,结构体,链表,排序, 学生信息管理系统...

    1.密码登录: 2.通过键盘输入学生信息,包括学生学号.姓名.成绩: 3.将输入的信息保存到指定文件中: 4.从文件中读取学生信息: 5.显示全部学生信息: 6.按学生总分进行降序排序: 7.删除学生 ...

  5. 学生考勤日期链表排序c语言,【C项目】 文件,结构体,链表,排序, 学生信息管理系统(示例代码)...

    1.密码登录: 2.通过键盘输入学生信息,包括学生学号.姓名.成绩: 3.将输入的信息保存到指定文件中: 4.从文件中读取学生信息: 5.显示全部学生信息: 6.按学生总分进行降序排序: 7.删除学生 ...

  6. OS / Linux / 文件描述符以及 file 结构体

    零.前言 程序可以理解为硬盘上的普通二进制文件:进程是加载到内存中的二进制文件,除了加载到内存中的二进制文件外,还附有所有对于该二进制文件描述信息的结构体,描述该进程的结构体叫PCB(进程控制块),在 ...

  7. c语言record的作用,C语言基础 record 2-指针,结构体,链表,文件的输入输出

    指针: 1.指针的概念: 内存区的每一个字节有一个编号,这就是 '地址',由于通过地址能找到所需的变量单元,而地址指向该变量单元,所以将地址形象化称为 '指针'.C/C++中是可多继承的指针,而Jav ...

  8. linux文件编程(3)—— main函数传参、myCp(配置成环境变量)、修改配置文件、整数和结构体数组写到文件

    参考:linux文件编程(3)-- 文件编程的简单应用:myCp.修改配置文件 作者:丶PURSUING 发布时间: 2021-04-09 23:45:05 网址:https://blog.csdn. ...

  9. Windows API的时间结构体、时间转换及时间获取

    Windows API的时间结构体.时间转换及时间获取   时间格式:DosDateTime <====>FileTime <====> SystemTime |        ...

最新文章

  1. iis5.1配置php5.3.1详解,WinXP IIS 5.1 PHP 5.3 VC9.0 配置详解
  2. python正则表达式re.sub用法
  3. 提取ESX/ESXI4.0脚本安装文件ks.cfg、ks-first.cfg和ks-first-safe.cfg
  4. 【JAVA学习笔记】个人设定
  5. js escape,unescape解决中文乱码问题的方法
  6. Oracle中如何使用imp语言导入dmp文件
  7. Not So Simple Polygon Embedding CodeForces - 1354C2(计算几何)
  8. riak php7,Laravel中服务提供者的register和boot分别是干什么
  9. C语言实现随机抽取纸牌
  10. すぬけ君の地下鉄旅行 / Snuke's Subway Trip(AtCoder-2069)
  11. MyBatis中jdbcType和Oracle以及MySql数据类型对应关系表
  12. ICMP数据包-实战分析
  13. python批量检索文献_导师每天都让查文献,如何才能快速查找文献呢?
  14. hp笔记本如何看序列号
  15. 真是其了怪的jwplayer
  16. 知识图谱可视化工具选型
  17. 互联网变迁-真实化信息的转移
  18. android wifi智能硬件4g,智能硬件 篇五:把WiFi带在身上,告别宽带!华为随行WiFi2畅享版真实体验...
  19. 德日车企瓜分美系车在华市场
  20. Ubuntu下最便捷好用微信、QQ(Wine-Tim Wine-QQ )没有之一

热门文章

  1. 缓存穿透和缓存雪崩的一些解决方案
  2. vue+django2.0.2-rest-framework 生鲜项目(三)
  3. windows XP无法使用suspend to RAM (s3)功能的解决过程
  4. 新课发布-SpringBoot2.0缓存中间件Redis技术入门与实战(抢红包系统设计与实战)
  5. linux下IIC驱动解释
  6. 【Java】 8.7 使用红-黄-红色渐变来绘制一个填充矩形
  7. tf.greater(a,b)
  8. 输入手机号获取验证码的注册页面,说出测试过程
  9. 基于Springboot+Vue网上试衣镜服装穿搭网站设计
  10. R语言 编写自定义函数