C++TXT 文件写入读取实例

代码:

#include <fstream>
#include <iostream>
#include <stdio.h>
using namespace std;
const int n=10;  //这里只是对 10 个数据进行操作
int main()
{
         ofstream fout("file1.txt"); //创建待写入数据文件
         for(int i=0;i<n;++i)
         {
                   fout.width(2);  //设定宽度为 2 ,默认右对齐
                   fout<<i<<"n";  //依次写入数据,其他类型原理相同
         }
         fout.close();  //关闭文件,写入成功
         ifstream fin;
         fin.open("file1.txt");  //用成员函数 open()打开已经存在的文件
         int m=0;
         for(int a=0;a<n;++a)
         {
                   fin>>m;
                   cout<<m<<"n";
         }
         fin.close();
         return 0;
}

 

参考:
http://www.cnblogs.com/tgyf/archive/2013/05/05/3060823.html
http://wenku.baidu.com/view/c26a86272f60ddccda38a045.html

 

数组的传递
http://see.xidian.edu.cn/cpp/biancheng/view/43.html

 

不按回车获取信息

getch()
http://blog.csdn.net/fengzizhuang/article/details/28275645

C++系统设计

C++语言程序设计系统设计

完成时间: 2014.6.1

实验环境: VC++6.0

去年的期末实验题《学生成绩统计管理系统》

 

代码:

#include<iostream>
#include<fstream> //文件操作头文件
#include<iomanip> //setw 函数头文件
//头文件结束
using namespace std;
#define MAXNUM 100 //定义最大容量
#define MAXGRADE 100 //定义成绩上限
int num=0;
//类开始
class Student
{
public:
 void setStudent(int i,char *nam,int englis,int mat,int cj);
 void showStudent();
 int getid()
 {
 return id;
 };
 char *getname()
 {
 return name;
 };
 int gete()
 {
 return english;
 };
 int getm()
 {
 return math;
 };
 int getcjj()
 {
 return cjj;
 };
private:
 int id; //学号
 char name[16]; //姓名
 int english; //英语成绩
 int math; //数学成绩
 int cjj; //C++成绩
};
void Student::setStudent(int i,char *nam,int englis,int mat,int cj)
{
 id=i;
 strcpy(name,nam);
 english=englis;
 math=mat;
 cjj=cj;
}
void Student::showStudent()
{
 cout<<setw(12)<<id<<setw(6)<<name<<setw(6)<<english<<setw(6)<<math<<setw(6)<<cjj<<endl;
}
//函数声明开始
void ShowMenu(); //显示菜单
void DoMenu(Student *T,char n); //菜单操作
void ShowTip(int num); //显示操作提示
void View(Student *T); //显示学生数据
void Insert(Student *T); //添加学生数据
void Load(Student *T); //初始化加载文件中学生数据
void Clear(); //清空数据
void Change(Student *T); //更改数据
void Delete(Student *T); //删除数据
void Save(Student *T); //保存数据
void Statistic(Student *T); //单个数据统计
void AllStatistic(Student *T); //整体数据统计
//程序 Main 开始
void main()
{
 Student T[MAXNUM];
 char cz;
 Load(T);
 ShowMenu();
 while(1)
 {
 ShowTip(1);
 cin>>cz;
 system("cls"); //清除屏幕
 ShowMenu();
 DoMenu(T,cz);
 }
}
//函数定义开始
void ShowMenu()
{
 cout<<"|----------------------------------|"<<endl;
 cout<<"| 学生成绩管理系统 |"<<endl;
 cout<<"|----------------------------------|"<<endl;
 cout<<"| 0.显示数据 |"<<endl;
 cout<<"| 1.数据添加 |"<<endl;
 cout<<"| 2.数据修改 |"<<endl;
 cout<<"| 3.数据删除 |"<<endl;
 cout<<"| 4.清空所有数据 |"<<endl;
 cout<<"| 5.个人成绩统计 |"<<endl;
 cout<<"| 6.学生成绩概况 |"<<endl;
 cout<<"| 7.保存数据文件 |"<<endl;
 cout<<"| 8.退出程序 |"<<endl;
 cout<<"| |"<<endl;
 cout<<"| By:李博、孙煖 |"<<endl;
 cout<<"|----------------------------------|"<<endl;
}
void DoMenu(Student *T,char n)
{
 switch(n)
 {
 case '0':
 View(T);
 break;
 case '1':
 Insert(T);
 break;
 case '2':
 Change(T);
 break;
 case '3':
 Delete(T);
 break;
 case '4':
 Clear();
 break;
 case '5':
 Statistic(T);
 break;
 case '6':
 AllStatistic(T);
 break;
 case '7':
 Save(T);
 break;
 case '8':
 exit(0);
 default:
 ShowTip(999);
 }
}
void ShowTip(int num)
{
 switch(num)
 {
 case 1:
 cout<<"请按序号输入数字进行操作:";
 break;
 case 2:
 cout<<"无学生记录!"<<endl;
 break;
 case 3:
 cout<<"在学号处输入 0 则结束并返回主菜单。"<<endl;
 break;
 case 4:
 cout<<"无法录入!学生人数已达最大值!"<<endl;
 break;
 case 5:
 cout<<"请输入学号:";
 break;
 case 6:
 cout<<"请输入姓名:";
 break;
 case 7:
 cout<<"请输入英语成绩:";
 break;
 case 8:
 cout<<"请输入数学成绩:";
 break;
 case 9:
 cout<<"请输入 C++成绩:";
 break;
 case 10:
 cout<<"错误:请输入整数!"<<endl;
 break;
 case 11:
 cout<<"结束:已返回主菜单!"<<endl;
 break;
 case 12:
 cout<<"此学号已存在!"<<endl;
 break;
 case 13:
 cout<<"数据已清空!"<<endl;
 break;
 case 14:
 cout<<"此学号不存在!"<<endl;
 break;
 case 15:
 cout<<"成功保存数据到 data.txt !"<<endl;
 break;
 case 16:
 //cout<<"数据添加:"<<endl;
 cout<<"|----------------------------------|"<<endl;
 cout<<"| 数据添加 |"<<endl;
 cout<<"|----------------------------------|"<<endl;
 cout<<"|提示:成绩上限为"<<MAXGRADE<<",超出自动替换 |"<<endl;
 cout<<"|----------------------------------|"<<endl;
 break;
 case 17:
 //cout<<"数据修改:"<<endl;
 cout<<"|----------------------------------|"<<endl;
 cout<<"| 数据修改 |"<<endl;
 cout<<"|----------------------------------|"<<endl;
 break;
 case 18:
 //cout<<"数据删除:"<<endl;
 cout<<"|----------------------------------|"<<endl;
 cout<<"| 数据删除 |"<<endl;
 cout<<"|----------------------------------|"<<endl;
 break;
 case 19:
 //cout<<"个人成绩统计:"<<endl;
 cout<<"|----------------------------------|"<<endl;
 cout<<"| 个人成绩统计 |"<<endl;
 cout<<"|----------------------------------|"<<endl;
 break;
 default:
 cout<<"输入错误!"<<endl;
 break;
 }
}
void View(Student *T)//查看所有学生的信息
{
 if(num==0)
 {
 ShowTip(2);
 }
 else
 {
 cout<<"共有"<<num<<"条学生记录"<<endl;
 cout<<setw(12)<<"学号"<<setw(6)<<"姓名"<<setw(6)<<"英语"<<setw(6)<<"数学"<<setw(6)<<"C++"<<endl;
 for(int i=0;i<num;i++)
 {
 T[i].showStudent();
 }
 }
}
void Load(Student *T)//从文件中载入学生信息
{
 int id;
 char name[16];
 int english;
 int math;
 int cjj;
 ifstream infile("data.txt"); //打开数据文件

 if(!infile)
 {
 ofstream fout("data.txt"); //创建待写入数据文件
 fout.close(); //关闭文件
 }
 else
 {
 for(int i=0; infile>>id; i++) //从文件中读取保存的学生数据
 {

 infile>>name;
 infile>>english;
 infile>>math;
 infile>>cjj;
 T[i].setStudent(id,name,english,math,cjj);
 num++;
 }
 }
 infile.close(); //关闭文件
}
void Insert(Student *T)
{
 int id;
 char name[16];
 int english;
 int math;
 int cjj;
 int i;
 system("cls"); //清除屏幕
 ShowTip(16);
 ShowTip(3);
 while(1)
 {
part0:
 cin.sync(); //清空输入缓冲区
 if(num==(MAXNUM-1))
 {
 ShowTip(4);
 return;
 }
 ShowTip(5);
 if(!(cin>>id)) //输入的不是数字,重新提示输入
 {
 ShowTip(10);
 cin.clear(); //清除状态标志,
 cin.sync(); //清空输入缓冲区
 continue;
 }
 if(id==0) //输入 0 结束录入
 {
 system("cls"); //清除屏幕
 ShowMenu();
 ShowTip(11);
 return ;
 }
 for(i=0;i<num;i++)
 {
 if(T[i].getid()==id) //查找此学号是否已存在
 {
 ShowTip(12);
 goto part0 ;
 }
 }
 cin.sync(); //清空输入缓冲区
 ShowTip(6);
 cin>>name; //读取一行
 cin.sync(); //清空输入缓冲区
part1:
 ShowTip(7);
 if(!(cin>>english)) //输入的不是数字,重新提示输入
 {
 ShowTip(10);
 cin.clear(); //清除状态标志,
 cin.sync(); //清空输入缓冲区
 goto part1;
 }
 cin.sync(); //清空输入缓冲区
part2:
 ShowTip(8);
 if(!(cin>>math)) //输入的不是数字,重新提示输入
 {
 ShowTip(10);
 cin.clear(); //清除状态标志,
 cin.sync(); //清空输入缓冲区
 goto part2;
 }
 cin.sync(); //清空输入缓冲区
part3:
 ShowTip(9);
 if(!(cin>>cjj)) //输入的不是数字,重新提示输入
 {
 ShowTip(10);
 cin.clear(); //清除状态标志,
 cin.sync(); //清空输入缓冲区
 goto part3;
 }
 if(english>MAXGRADE)english=MAXGRADE;
 if(math>MAXGRADE)math=MAXGRADE;
 if(cjj>MAXGRADE)cjj=MAXGRADE;
 num++; //学生人数增 1
 int k=0; //用来记录要插入信息的位置,以及顺序是否被改变
 for(i=0;i<num-1;i++)
 {
 if(T[i].getid()>id)
 {
 k=i;
 for(int j=num-1;j>k;j--)
 {
 T[j]=T[j-1];
 }
 T[k].setStudent(id,name,english,math,cjj); //将新录入的学生加入数组中
 k=1;//顺序改变后改变 K 的值不为 0 ,防止新加入的数据为最小即 K=0 ,改变顺序后,下面的添加代码又执行
 break;
 }
 }
 if(k==0)
 {
 T[num-1].setStudent(id,name,english,math,cjj);
 }
 }
}
void Clear()
{
 num=0;
 ShowTip(13);
}
void Change(Student *T)
{
 int id;
 char name[16];
 int english;
 int math;
 int cjj;
 int k;//判断学生是否存在
 system("cls"); //清除屏幕
 ShowTip(17);
 ShowTip(3);
 while(1)
 {
 cin.sync(); //清空输入缓冲区
 k=0;
 ShowTip(5);
 if(!(cin>>id)) //输入的不是数字,重新提示输入
 {
 ShowTip(10);
 cin.clear(); //清除状态标志,
 cin.sync(); //清空输入缓冲区
 }
 if(id==0) //输入 0 结束录入
 {
 system("cls"); //清除屏幕
 ShowMenu();
 ShowTip(11);
 return ;
 }
 for(int i=0;i<num;i++)
 {
 if(T[i].getid()==id) //查找此学号是否已存在
 {
 //执行更改代码
 cin.sync(); //清空输入缓冲区
 ShowTip(6);
 cin>>name; //读取一行
 cin.sync(); //清空输入缓冲区
part1:
 ShowTip(7);
 if(!(cin>>english)) //输入的不是数字,重新提示输入
 {
 ShowTip(10);
 cin.clear(); //清除状态标志,
 cin.sync(); //清空输入缓冲区
 goto part1;
 }
 cin.sync(); //清空输入缓冲区
part2:
 ShowTip(8);
 if(!(cin>>math)) //输入的不是数字,重新提示输入
 {
 ShowTip(10);
 cin.clear(); //清除状态标志,
 cin.sync(); //清空输入缓冲区
 goto part2;
 }
 cin.sync(); //清空输入缓冲区
part3:
 ShowTip(9);
 if(!(cin>>cjj)) //输入的不是数字,重新提示输入
 {
 ShowTip(10);
 cin.clear(); //清除状态标志,
 cin.sync(); //清空输入缓冲区
 goto part3;
 }
 if(english>MAXGRADE)english=MAXGRADE;
 if(math>MAXGRADE)math=MAXGRADE;
 if(cjj>MAXGRADE)cjj=MAXGRADE;
 T[i].setStudent(id,name,english,math,cjj); //将学生加入数组中
 k=1;//学生存在
 }
 }
 if(k==0)
 {
 ShowTip(2);
 }
 }
}
void Delete(Student *T)
{
 int id;
 int k;//用来记录数据所在位置
 system("cls"); //清除屏幕
 ShowTip(18);
 ShowTip(3);
 while(1)
 {
 k=0;
 ShowTip(5);
 if(!(cin>>id)) //输入的不是数字,重新提示输入
 {
 ShowTip(10);
 cin.clear(); //清除状态标志,
 cin.sync(); //清空输入缓冲区
 }
 if(id==0) //输入 0 结束录入
 {
 system("cls"); //清除屏幕
 ShowMenu();
 ShowTip(11);
 return ;
 }
 //执行删除代码,删除方法:找到数据所在位置,把后面的数据依次往前替换,替换掉需要删除的数据
 for(int i=0;i<num;i++)
 {
 if(T[i].getid()==id)
 {
 if(num==1){
 num=0;
 k=1;//数据改变了
 ShowTip(13);
 break;
 }
 else if((i+1)==num)
 {
 num--;
 k=1;//数据改变了
 ShowTip(13);
 break;
 }
 else
 {
 for(k=i;k<(num-1);k++)
 {
 T[k]=T[k+1];
 }
 num--; //
 k=1;//数据改变了
 ShowTip(13);
 break;
 }
 }
 }
 if(k==0)
 {
 //找不到这个人
 ShowTip(14);
 }
 }
}
void Save(Student *T)
{
 int id;
 char *name;
 int english;
 int math;
 int cjj;
 ofstream fout("data.txt"); //打开待写入数据文件
 for(int i=0;i<num;i++)
 {
 id=T[i].getid();
 name=T[i].getname();
 english=T[i].gete();
 math=T[i].getm();
 cjj=T[i].getcjj();
 fout<<id<<" "<<name<<" "<<english<<" "<<math<<" "<<cjj<<"n"; //依次写入数据,其他类型原理相同
 }
 fout.close(); //关闭文件,写入成功
 ShowTip(15);
}
void Statistic(Student *T)
{
 int id;
 char *name;
 int AllGrade,AllGrade2;
 double AverageGrade;
 int k;//判断学生是否存在
 system("cls"); //清除屏幕
 ShowTip(19);
 ShowTip(3);
 while(1)
 {
 k=0;
 int Rank=1;
 ShowTip(5);
 if(!(cin>>id)) //输入的不是数字,重新提示输入
 {
 ShowTip(10);
 cin.clear(); //清除状态标志,
 cin.sync(); //清空输入缓冲区
 }
 if(id==0) //输入 0 结束录入
 {
 system("cls"); //清除屏幕
 ShowMenu();
 ShowTip(11);
 return ;
 }
 for(int i=0;i<num;i++)
 {
 if(T[i].getid()==id) //查找此学号是否已存在
 {
 //执行统计代码
 name=T[i].getname();
 AllGrade=T[i].gete()+T[i].getm()+T[i].getcjj();
 AverageGrade=AllGrade/3;
 //执行排名统计
 for(int s=0;s<num;s++)
 {
 AllGrade2=T[s].gete()+T[s].getm()+T[s].getcjj();
 if((AllGrade<AllGrade2) || (AllGrade==AllGrade2 && id>T[s].getid()))
 {
 Rank++;
 }
 }
 cout<<setw(12)<<"学号"<<setw(6)<<"姓名"<<setw(12)<<"平均成绩"<<setw(12)<<"总成绩"<<setw(6)<<"排名"<<endl;
 cout<<setw(12)<<id<<setw(6)<<name<<setw(12)<<AverageGrade<<setw(12)<<AllGrade<<setw(6)<<Rank<<endl;
 k=1;//学生存在
 }
 }
 if(k==0)
 {
 ShowTip(2);
 }
 }
}
void AllStatistic(Student *T)
{
 //各科平均成绩、各科成绩"优秀"、"良好"、"中等"、"及格"、"不及格"的人数及其所占比例

 //做二级页面,二级菜单
 if(num==0){
 goto part;
 }
 system("cls"); //清除屏幕
 cout<<"|----------------------------------|"<<endl;
 cout<<"| 学生成绩概况 |"<<endl;
 cout<<"|----------------------------------|"<<endl;
 cout<<"| 0.返回主菜单 |"<<endl;
 cout<<"| 1.查看英语成绩概况 |"<<endl;
 cout<<"| 2.查看数学成绩概况 |"<<endl;
 cout<<"| 3.查看 C++ 成绩概况 |"<<endl;
 cout<<"| 4.查看总分成绩概况 |"<<endl;
 cout<<"| |"<<endl;
 cout<<"| By:李博、孙煖 |"<<endl;
 cout<<"|----------------------------------|"<<endl;
 char cz2;
 int alGrade,avGrade,Grade,num1,num2,num3,num4,num5,pernum1,pernum2,pernum3,pernum4,pernum5,perggnum;
 char *Subject;
 while(1)
 {
 alGrade=avGrade=num1=num2=num3=num4=num5=/*pernum1=pernum2=pernum3=pernum4=pernum5=perggnum=*/0;
 ShowTip(1);
 cin>>cz2;
 system("cls"); //清除屏幕
 cout<<"|----------------------------------|"<<endl;
 cout<<"| 学生成绩概况 |"<<endl;
 cout<<"|----------------------------------|"<<endl;
 cout<<"| 0.返回主菜单 |"<<endl;
 cout<<"| 1.查看英语成绩概况 |"<<endl;
 cout<<"| 2.查看数学成绩概况 |"<<endl;
 cout<<"| 3.查看 C++ 成绩概况 |"<<endl;
 cout<<"| 4.查看总分成绩概况 |"<<endl;
 cout<<"| |"<<endl;
 cout<<"| By:李博、孙煖 |"<<endl;
 cout<<"|----------------------------------|"<<endl;
 int i;
 switch(cz2)
 {
 case '0':
 goto part;
 case '1':
 Subject="英语";
 for(i=0;i<num;i++)
 {
 alGrade=alGrade+T[i].gete();//计算总成绩
 Grade=T[i].gete()/10;
 switch(Grade)
 {
 case 0:
 case 1:
 case 2:
 case 3:
 case 4:
 case 5:
 num5++;
 break;
 case 6:
 num4++;
 break;
 case 7:
 num3++;
 break;
 case 8:
 num2++;
 break;
 default:
 num1++;
 break;
 }
 }
 avGrade=alGrade/num;//计算平均成绩
 break;
 case '2':
 Subject="数学";
 for(i=0;i<num;i++)
 {
 alGrade=alGrade+T[i].getm();//计算总成绩
 Grade=T[i].getm()/10;
 switch(Grade)
 {
 case 0:
 case 1:
 case 2:
 case 3:
 case 4:
 case 5:
 num5++;
 break;
 case 6:
 num4++;
 break;
 case 7:
 num3++;
 break;
 case 8:
 num2++;
 break;
 default:
 num1++;
 break;
 }
 }
 avGrade=alGrade/num;//计算平均成绩
 break;
 case '3':
 Subject="C++ ";
 for(i=0;i<num;i++)
 {
 alGrade=alGrade+T[i].getcjj();//计算总成绩
 Grade=T[i].getcjj()/10;
 switch(Grade)
 {
 case 0:
 case 1:
 case 2:
 case 3:
 case 4:
 case 5:
 num5++;
 break;
 case 6:
 num4++;
 break;
 case 7:
 num3++;
 break;
 case 8:
 num2++;
 break;
 default:
 num1++;
 break;
 }
 }
 avGrade=alGrade/num;//计算平均成绩
 break;
 case '4':
 Subject="总分";
 for(i=0;i<num;i++)
 {
 alGrade=alGrade+T[i].gete()+T[i].getm()+T[i].getcjj();//计算总成绩
 }
 avGrade=alGrade/num;//计算平均成绩
 break;
 default:
 ShowTip(999);
 break;
 }
 pernum1=num1*100/num;
 pernum2=num2*100/num;
 pernum3=num3*100/num;
 pernum4=num4*100/num;
 pernum5=num5*100/num;
 perggnum=(num1+num2+num3+num4)*100/num;
 if(Subject=="总分")
 {
 cout<<"n"<<Subject<<" 统计如下: n"<<"总分:"<<alGrade<<"n 平均分:"<<avGrade<<"n 统计人数:"<<num<<"人"<<endl;
 }
 else
 {
 cout<<"n"<<Subject<<" 统计如下:"<<endl;
 cout<<setw(12)<<"优秀人数:"<<setw(4)<<num1<<"人("<<pernum1<<"%)"<<setw(10)<<"90 分及以上"<<endl;
 cout<<setw(12)<<"良好人数:"<<setw(4)<<num2<<"人("<<pernum2<<"%)"<<setw(10)<<"80 ~ 89 分"<<endl;
 cout<<setw(12)<<"中等人数:"<<setw(4)<<num3<<"人("<<pernum3<<"%)"<<setw(10)<<"70 ~ 79 分"<<endl;
 cout<<setw(12)<<"及格人数:"<<setw(4)<<num4<<"人("<<pernum4<<"%)"<<setw(10)<<"60 ~ 69 分"<<endl;
 cout<<setw(12)<<"不及格人数:"<<setw(4)<<num5<<"人("<<pernum5<<"%)"<<setw(10)<<"60 分以下"<<endl;
 cout<<"统计人数:"<<num<<"人"<<" 总合格率:"<<perggnum<<"%"<<endl;
 }
 }
part://goto 跳板
 system("cls"); //清除屏幕
 ShowMenu();
 if(num==0){
 ShowTip(2);
 }
 ShowTip(11);
}