02周:项目三扩展:学生成绩管理系统
2014-03-09 15:14
302 查看
/* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 作 者:王颖 * 完成日期:2014 年 3 月 7 日 * 版 本 号:v1.0 * 输入描述: 无 * 问题描述:文件加结构体实现系统;学生成绩管理系统 * 程序输出:略 * 问题分析:略 * 算法设计:略 */ #include <iostream> #include <string> #include<fstream> #include<conio.h> #include <stdlib.h> using namespace std; struct Student { char num[13]; char name[10]; int cpp; int math; int english; int grade; double average; }; void calculate(Student s[],int n); //计算总分和均分,数据在s数组中,共有n个元素 void sort1(Student [],int); //按总分降序排序 void sort2(Student [],int); //按学号升序排序 void output(Student [],int); //输出成绩单 void outputExcellent(Student [],int); //输出奖学金的名单:单科不低于60 void major(Student [],int);//输出C++不及格名单和成绩 int main() { int i; int stuNum=0; //这里之前出现错误,忘记赋值=0了。 Student stu[200]; 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(); cout<<"数据读取完毕!"<<endl; calculate(stu,stuNum); int c; cout<<"请选择下面的功能:"<<endl; cout<<"1.输出成绩单"<<endl; cout<<"2.按总分排序并输出成绩单"<<endl; cout<<"3.输出获得奖学金的同学的名单"<<endl; cout<<"4.输出C++不及格同学的姓名和C++成绩"<<endl; cout<<"5.按学号升序排序"<<endl; cout<<"0.结束"<<endl; cin>>c; switch(c) { case 1: cout<<"下面是成绩单:"<<endl; output(stu,stuNum); break; case 2: sort1(stu,stuNum); cout<<"按总分降序排序后:"<<endl; output(stu,stuNum); break; case 3: cout<<"可获奖学金的名单:"<<endl; outputExcellent(stu,stuNum); break; case 4: cout<<"不及格同学的名单:"; major(stu,stuNum); break; case 5: sort2(stu,stuNum); cout<<"按学号升序排序后:"<<endl; output(stu,stuNum); break; default:cout<<"error!"; break; } getch(); return 0; } //计算总分和均分,数据在s数组中,共有n个元素 void calculate(Student s[],int n) { int i; for(i=0; i<n; i++) { s[i].grade=s[i].cpp+s[i].math+s[i].english; s[i].average=s[i].grade/3; } } //按总分降序排序 void sort1(Student s[],int n) { int i,j; Student t; for(i=0; i<n-1; i++) for(j=0; j<n-i-1; j++) { if(s[j].grade<s[j+1].grade) { t=s[j]; s[j]=s[j+1]; s[j+1]=t; } } } //按学号升序排序 void sort2(Student s[],int n) { int i,j; Student t; for(i=0; i<n-1; i++) for(j=0; j<n-i-1; j++) { if(s[j].num>s[j+1].num) //t.num=s[j].num;这样不对,因为char[]不能直接赋值。不光要换学号,后边的成绩,名字也要换 { t=s[j]; s[j]=s[j+1]; s[j+1]=t; } } } //输出成绩单 void output(Student s[],int n) { int i; cout<<"学号"<<'\t'<<'\t'<<"姓名"<<'\t'<<"总分"<<'\t'<<"均分"<<endl; for(i=0; i<n; i++) { cout<<s[i].num<<'\t'<<s[i].name<<'\t'<<s[i].grade<<'\t'<<s[i].average; cout<<endl; } } //输出可获奖学金的名单:单科不低于60 void outputExcellent(Student s[],int n) { int i; cout<<"学号"<<'\t'<<'\t'<<"姓名"<<'\t'<<"总分"<<'\t'<<"均分"<<endl; 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<<'\t'<<s[i].average; cout<<endl; } } } //输出C++不及格名单和成绩 void major(Student s[],int n) { int i; cout<<"学号"<<'\t'<<'\t'<<"姓名"<<'\t'<<"C++"<<endl; for(i=0; i<n; i++) { if(s[i].cpp<=60) { cout<<s[i].num<<'\t'<<s[i].name<<'\t'<<s[i].cpp; cout<<endl; } } }
心得体会:慢慢来···
相关文章推荐
- Struts2+Hibernate整合应用开发步骤
- (转)协议森林14 逆袭 (CIDR与NAT)
- 【转】HTML5拖拽文件到浏览器并实现文件上传下载
- win7下配置java环境变量
- c# 获取某日期所在周的第一天和最后一天(转)
- android apk包反编译、破解心得
- C/C++编程语言中的基础知识(一)--格式化输入输出
- 浮点数精度误差带来的一个BUG
- 操作系统(8)存储器管理
- Bootstrap3.0入门学习系列规划[持续更新]
- div 的jQuery resize事件
- gpio: sysfs interface
- 马尔科夫随机场Markov Random Field
- QT UI编程细节(待续)
- DXUT CD3DArcBall类
- HDVPSS模块介绍及使用(DM81xx)
- mac的PATH等环境变量设置和java设置
- Anciroid的IPC机制-Binder原理
- Unity3D笔记 英保通三 脚本编写 、物体间通信
- 软工文档总结