第17周项目6--学生成绩统计(文件操作2-设计自定义函数实现任务)
2014-12-23 08:34
681 查看
/* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作 者:刘畅 * 完成日期:2014 年 12 月 23 日 * 版 本 号:v1.0 * * 问题描述: score.txt中是一些同学的学号、姓名、C++、高数、英语成绩,利用前面定义的结构体数组,读取文件score.txt中的数据,完成下面的应用: 在前面工作的基础拟出新的需求,将程序用一个“菜单”组织起来(如图所示),做成一个“学生成绩管理系统”之类的应用程序。 •从文件中读出数据,存放到结构体数组中; •求出每名同学的总分(可以在读入过程中“顺便”计算); •输出结构体数组中所有同学的记录。 •按总分排序(降序); •输出排序后的成绩单; •有30名同学可以获得奖学金,规则是总分高者优先,有挂科不能得奖学金。请输出可以得奖学金同学的名单。若符合得将的最后一名同学有重复(例如总分全为S),则总分为S的同学全得奖。 。 * 输入描述:已初始化,无需输入。 * 程序输出:按照要求输出同学的成绩单。
#include <iostream> #include <fstream> #include <cstdlib> using namespace std; struct Student { char num[13]; char name[10]; int cpp; int math; int english; int grade; }; int main() { int i,n,stuNum=0; Student stu[1000]; 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(); void Outputscore(Student s[],int num); void sort(Student s[],int num); void outputExcellent(Student s[],int num); void outputCfail(Student s[],int num); void outputallfail(Student s[],int num); do { cout<<"请选择下面的功能:"<<endl; cout<<"1. 输出成绩单"<<endl; cout<<"2. 按总分排序并输出成绩单"<<endl; cout<<"3. 输出获得奖学金的同学的名单"<<endl; cout<<"4. 输出C++不及格同学姓名和C++成绩"<<endl; cout<<"5. 输出三科都不及格同学的成绩单"<<endl; cout<<"0. 结束"<<endl; cout<<"请选择(0-5):"; cin>>n; switch(n) { case 1: Outputscore(stu,stuNum); break; case 2: sort(stu,stuNum); Outputscore(stu,stuNum); break; case 3: outputExcellent(stu,stuNum); break; case 4: outputCfail(stu,stuNum); break; case 5: outputallfail(stu,stuNum); break; case 0: return 0; } cout<<endl; } while (1); } void Outputscore(Student s[],int num) { int i; for (i=0; i<num; ++i) { cout<<s[i].num<<"\t"<<s[i].name<<"\t"<<s[i].cpp<<"\t"<<s[i].math<<"\t"<<s[i].english<<"\t"<<s[i].grade<<endl; } cout<<endl; } void sort(Student s[],int num) { Student t; int i,j; for (j=0; j<=num-1; ++j) { for (i=0; i<num-1-j; ++i) { if (s[i].grade<s[i+1].grade) { t=s[i]; s[i]=s[i+1]; s[i+1]=t; } } } } void outputExcellent(Student s[],int num) { int i; for(i=0; i<30; ++i) { if((s[i].cpp>=60)&&(s[i].math>=60)&&(s[i].english>=60)) { cout<<s[i].num<<'\t'<<s[i].name<<'\t'<<s[i].grade<<endl; } } for(i=30; i<num; ++i) { if(s[i].grade==s[29].grade) cout<<s[i].num<<'\t'<<s[i].name<<'\t'<<s[i].grade<<endl; } } void outputCfail(Student s[],int num) { int i; for (i=0; i<num; ++i) { if (s[i].cpp<60) cout<<s[i].num<<"\t"<<s[i].name<<"\t"<<s[i].cpp<<endl; } } void outputallfail(Student s[],int num) { int i; for (i=0; i<num; ++i) { if((s[i].cpp<60)&&(s[i].math<60)&&(s[i].english<60)) cout<<s[i].num<<"\t"<<s[i].name<<"\t"<<s[i].cpp<<"\t"<<s[i].math<<"\t"<<s[i].english<<"\t"<<s[i].grade<<endl; else cout<<"恭喜你没有全挂!!!还有希望,好好加油!!"<<endl; } }
运行结果:
学习心得:
在前面的基础上改的,突然有了疑问,在第5种输出的时候,怎么让它只输出一次(除了设置变量记录满足if中的要求的次数,然后用是否为0判断再输出那句话的方法外)。
相关文章推荐
- 第17周项目6--学生成绩统计(文件操作1)
- C++第六周任务5:解决用一个项目多个文件的方式实现,其中两个类的声明放在一个.h文件中,每个类的成员函数分别放一个文件,main()函数用一个文件。体会这样安排的优点。
- 第17周项目6-学生成绩统计(从文件中读入)
- 将任务4的解决用一个项目多个文件的方式实现,其中两个类的声明放在一个.h文件中,每个类的成员函数分别放一个文件,main()函数用一个文件。
- java 实现 文件操作工具集。包括文件、目录树的拷贝、删除、移动、查找等工具函数
- 试用socket api借口设计一个文件传送软件,并编程实现,可自定义文件传输的通信。
- php文件操作实现自定义日志记录
- asp结合fso实现文件或文件夹创建删除等操作的函数
- 文件操作(文件系统设计项目总结)
- 第十一周上机任务项目5-体验文件操作练习1
- asp下利用fso实现文件夹或文件移动改名等操作函数
- 《C++第六周实验报告5-1》---将任务4的解决用一个项目多个文件的方式实现
- SQL自定义函数实现字符串截取转化为整型(主要用于对批量数据的操作)
- 设计一程序(Copy.java),可以实现文件的复制操作
- 第十一周上机任务项目5-体验文件操作练习2
- 16周任务三 score 学生类的文件操作
- 使用Windows的SHFileOperation外壳函数实现文件操作
- 自己实现的C语言string.h 头文件的字符串函数与几个内存操作函数
- Linux下文件读写操作一例(C标准库函数方式实现)
- C#--第四周实验--任务3--定义一个人员类Cperson,在此基础上派生出学生类CStudent和教师类CTeacher,实现输入输出功能的成员函数。