c++13周实验:输入/输出流的综合应用
来源:互联网 发布:便携式安全座椅 知乎 编辑:程序博客网 时间:2024/06/14 19:02
(1) 定义类CStudent,数据成员包括:
学号(字符数组)、
姓名(字符数组)、
五门课的成绩(实型数组)、
平均成绩;
成员函数包括:
从键盘输入一个学生信息、
输出一个学生信息到显示器、
计算平均成绩。
编写主程序,输入n个学生的信息,然后依次输出。
要求:姓名可包含空格,学生个数n提示用户输入,输出时要按列对齐的格式、小数点后精确到1位小数。
(2)改写上题主程序,将用户输入的学生信息写入文本文件student.txt中;然后再从文件中读出并显示在屏幕上。
(1):
///////////////////////////////////////////CStudent.h//////////////////////////////////
#include<iostream>
#include<iomanip>
using namespace std;
class CStudent
{
protected:
char num[25],name[40];
float subject[5] ;
float average;
public:
static int counter;
void Setdata ()
{cout<<"请输入第"<<counter<<"个学生的学号: "<<endl;
cin>>num;
cout<<"请输入第"<<counter<<"个学生的姓名: "<<endl;
int i=0;
name[0]=cin.get(); ////////输入学号时候的回车问题,让name【0】接受那个回车,然后再让它接受一下姓名 的字符来覆盖那个多余的回车 ,
do{ /////当然也可以用cin.get()吃掉那个该死的回车 .用这个do-while循环有点不太好,直接cin.get()就好,还可节省代码。
name[i]=cin.get();
} while(name[i++]!='\n'&&i<40) ;
name[i-1]='\0';
cout<<"请依次输入第"<<counter<<"个学生的各科成绩: "<<endl;
for(i=0;i<5;i++)
{
cin>>subject[i];
}
counter++;
}
void ShowDate()
{
cout<<"下面输出第"<<counter<<"学生的各项信息:"<<endl;
cout<<"学号:\t\t"<<num<<endl;
cout<<"姓名:\t\t"<<name<<endl;
cout<<"第一科的成绩:\t"<<setiosflags(ios::fixed)<<setprecision(1)<<subject[0]<<endl;
cout<<"第二科的成绩:\t"<<setiosflags(ios::fixed)<<setprecision(1)<<subject[1]<<endl;
cout<<"第三科的成绩:\t"<<setiosflags(ios::fixed)<<setprecision(1)<<subject[2]<<endl;
cout<<"第四科的成绩:\t"<<setiosflags(ios::fixed)<<setprecision(1)<<subject[3]<<endl;
cout<<"第五科的成绩:\t"<<setiosflags(ios::fixed)<<setprecision(1)<<subject[4]<<endl;
cout<<"平均的成绩:\t"<<setiosflags(ios::fixed)<<setprecision(1)<<GetAver()<<endl;
counter++;
}
float GetAver()
{ float sum=0;
for(int i=0;i<5;i++)
{
sum+=subject[i];
}
return sum/5;
}
};
int CStudent::counter=1;
////////////////////////////////////////////////////////////////main.cpp////////////////////////////////////
#include "CStudent.h"
int main()
{ int n,i;
CStudent *p;
cout<<"请输入要输入的学生的个数N:"<<endl;
cin>>n;
p=new CStudent [n];
//reference(*p,n);
for(i=0;i<n;i++)
{
p[i].Setdata ();
}
CStudent::counter=1;
for(i=0;i<n;i++)
{
p[i].ShowDate();
}
return 0;
delete []p;
}
(2):
///////////////////////////////////////////CStudent.h//////////////////////////////////
#include<iostream>
#include<iomanip>
using namespace std;
class CStudent
{
protected:
char num[25],name[40];
float subject[5] ;
float average;
public:
static int counter;
void Setdata ()
{cout<<"请输入第"<<counter<<"个学生的学号: "<<endl;
cin>>num;
cout<<"请输入第"<<counter<<"个学生的姓名: "<<endl;
int i=0;
name[0]=cin.get(); ////////////可以只写一个cin.get()来接受那个多余的回车符
do{
name[i]=cin.get();
} while(name[i++]!='\n'&&i<40) ;
name[i-1]='\0';
cout<<"请依次输入第"<<counter<<"个学生的各科成绩: "<<endl;
for(i=0;i<5;i++)
{
cin>>subject[i];
}
counter++;
}
char *GetName()
{
return name;
}
char *GetNum()
{
return num;
}
float GetSub()
{
return subject[counter++];
}
void ShowDate()
{
cout<<"下面输出第"<<counter<<"学生的各项信息:"<<endl;
cout<<"学号:\t\t"<<num<<endl;
cout<<"姓名:\t\t"<<name<<endl;
cout<<"第一科的成绩:\t"<<setiosflags(ios::fixed)<<setprecision(1)<<subject[0]<<endl;
cout<<"第二科的成绩:\t"<<setiosflags(ios::fixed)<<setprecision(1)<<subject[1]<<endl;
cout<<"第三科的成绩:\t"<<setiosflags(ios::fixed)<<setprecision(1)<<subject[2]<<endl;
cout<<"第四科的成绩:\t"<<setiosflags(ios::fixed)<<setprecision(1)<<subject[3]<<endl;
cout<<"第五科的成绩:\t"<<setiosflags(ios::fixed)<<setprecision(1)<<subject[4]<<endl;
cout<<"平均的成绩:\t"<<setiosflags(ios::fixed)<<setprecision(1)<<GetAver()<<endl<<endl;
counter++;
}
float GetAver()
{ float sum=0;
for(int i=0;i<5;i++)
{
sum+=subject[i];
}
return sum/5;
}
};
int CStudent::counter=1;
////////////////////////////////////////////////////////////////main.cpp////////////////////////////////////
#include "CStudent.h"
#include<fstream>
int main()
{ int n,i;
CStudent *p;
fstream f;
cout<<"请输入要输入的学生的个数N:"<<endl;
cin>>n;
p=new CStudent [n];
//reference(*p,n);
for(i=0;i<n;i++)
{
p[i].Setdata ();
}
CStudent::counter=1; ///////////
while((cin.get())=='\n')
{ break;
}
system("cls");
for(i=0;i<n;i++)
{
p[i].ShowDate();
}
/////////
f.open("student.txt",ios::out);
if(f.fail())
{
cout<<"打开文件失败!"<<endl;
exit(1);
}
for(i=0;i<n;i++)
{ CStudent::counter=0;
f<<"第"<<i+1<<"学生的各项信息:"<<endl;
f<<"学号:\t\t"<<p[i].GetNum()<<endl;
f<<"姓名:\t\t"<<p[i].GetName()<<endl;
f<<"第一科的成绩:\t"<<p[i].GetSub()<<endl;
f<<"第二科的成绩:\t"<<p[i].GetSub()<<endl;
f<<"第三科的成绩:\t"<<p[i].GetSub()<<endl;
f<<"第四科的成绩:\t"<<p[i].GetSub()<<endl;
f<<"第五科的成绩:\t"<<p[i].GetSub()<<endl;
f<<"平均的成绩:\t"<<p[i].GetAver()<<endl<<endl;
}
f.close();
f.open("student.txt",ios::in);
if(f.fail())
{
cout<<"打开文件失败!"<<endl;
exit(2);
}
char str[200];
f.getline(str,200);
while(!f.eof())
{
cout << str<<endl ; // 输出一行字符
f.getline(str, 200);
}
cout<<endl;
f.close();
return 0;
delete []p;
}
- c++13周实验:输入/输出流的综合应用
- C#--第三周实验--任务1--输入一组整数,输出所有的奇数(控制台应用)
- C#--第三周实验--任务3--输入学号和姓名,输出学号为奇数的所有学生。(控制台应用)
- C#--第2周实验--创建一个控制台应用--输入并输出一行字符串
- C#--第2周实验--任务三--编写一个控制台应用--输入x计算并输出分段函数F(x)的值
- C#--第2周实验--任务六--编写一个控制台应用--输出所有的水仙花数
- C#--第三周实验--任务2--输入一个由若干字符组成的字符串,输出其中的大写字母、小写字母、数字和其他字符的个数(控制台应用)
- 实验二 线性表的综合实验(c++)
- 实验二 线性表的综合实验(c++)
- 实验二 线性表的综合实验(c++)
- C#--第2周实验--任务10--编写一个控制台应用--输入一个整数,将其各位数字颠倒顺序后输出
- C语言实验:输入任意一个年份和月份,输出该月份的公历日历
- C语言实验:输入任意一个年份和月份,输出该月份的公历日历
- 【C++】输出比输入数值小的所有素数(数据结构实验1)
- 【C++】输出比输入数值小的所有素数(数据结构实验2)
- C的输入和输出
- C 的输入和输出
- 输入流和输出流的简单应用
- 阅读碎片
- android studio R文件有问题
- for 循环 and while 循环(三)
- machine learning in action 之一 —— 环境配置
- PYTHON_DAY_9_20160602
- c++13周实验:输入/输出流的综合应用
- Spark之DataFrame通过编码创建
- 【leetcode】235. Lowest Common Ancestor of a Binary Search Tree
- Android DrawerLayout简单实现侧滑菜单
- Servlet 生命周期、工作原理
- struts2 fileUpload glassfish 上载文件限制修
- hibernate框架知识
- Android的线程和线程池
- HNOI2014 世界树 基于虚树的树形动态规划