c++13周实验:输入/输出流的综合应用
2016-06-06 22:57
429 查看
(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
;
//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
;
//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;
}
学号(字符数组)、
姓名(字符数组)、
五门课的成绩(实型数组)、
平均成绩;
成员函数包括:
从键盘输入一个学生信息、
输出一个学生信息到显示器、
计算平均成绩。
编写主程序,输入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
;
//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
;
//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;
}
相关文章推荐
- STL学习系列之一——标准模板库STL介绍
- C++11 std::function、std::bind
- c++:构造与析构函数基本,银行类
- C++中STL常用算法概要
- c++作业七
- C++ 笔记1: 字符串操作1
- C++中类的6个默认成员函数
- C++走向远洋——64(项目三、数组类模板)
- Microsoft Speech Platform SDK,语音识别
- C++回顾(2)——引用
- C++primer第15章习题解答
- 深入理解C++的多态性
- C++连接MYSQL数据库
- C++的标准命名空间使用
- 跟我一起学C++之从C到C++(结构体内存对齐)
- 稍微深入点理解C++复制控制【转】
- 跟我一起学C++之从C到C++(const与#define)
- C++内存动态分配和引用
- C的读书笔记 --c语言概述
- 【天梯赛-初赛题】L2-004 关于堆的判断