学生管理系统
#include<fstream>
#include<iostream>
#include <algorithm>sort
#include<string>
#include<iomanip>
using namespace std;
class data
{
public:
void input();
int num;
char name[10];
char sex;
float score[4];
float sum_score;
float ave_score;
};
void data::input()
{
cout<<"学号(整型) 姓名(字符串) 性别(字符型) 高数.离散.C++.英语(浮点型)"<<endl;
cin>>num>>name>>sex>>score[0]>>score[1]>>score[2]>>score[3];
sum_score=score[0]+score[1]+score[2]+score[3];
ave_score=sum_score/4;
}
class student:public data
{
public:
student();
void creat_data();
void updata_data();
void search_data();
void delete_data();
void paixu();
void display();
void run();
void help();
protected:
data ll;
fstream file;
ofstream outfile;
};
student::student()
{
char a;
cout<<"是否清空文件数据,第一次运行程序请新建文件数据(Y,N)"<<endl;
while(1)
{
cin>>a;
a=tolower(a);
if(a=='y'||a=='n')
break;
else
cout<<"输入数据有误,请重新输入:"<<endl;
}
if(a=='y')
{
outfile.open("filename1.bin",ios::out);
outfile.close();
}
file.open("filename1.bin",ios::in|ios::out|ios::binary);
system("cls");
}
void student::creat_data()
{
file.seekp(0,ios::beg);
char tag;
int i=0;
while(1)
{
ll.input();
file.seekp(0,ios::end);
file.write((char*)&ll,sizeof(ll));
cout<<"是否继续建立(Y,N)"<<endl;
cin>>tag;
tag=tolower(tag);
while(tag!='y'&&tag!='n')
{
cout<<"error"<<endl;
cout<<"请重新输入:"<<endl;
cin>>tag;
tag=tolower(tag);
}
if(tag=='n')
break;
}
file.seekg(0,ios::beg);
cout<<"学号"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"高数"<<'\t'<<"C++"<<'\t'<<"离散"<<'\t'<<"英语"<<'\t'<<"总分"<<'\t'<<"平均分"<<endl;
while(!file.eof())
{
if(file.peek()==EOF)
{break;}
file.read((char*)&ll,sizeof(ll));
cout<<ll.num<<'\t'<<ll.name<<'\t'<<ll.sex<<'\t'<<ll.score[0]<<'\t'
<<ll.score[1]<<'\t'<<ll.score[2]<<'\t'<<ll.score[3]<<'\t'<<ll.sum_score<<'\t'<<ll.ave_score<<'\t'<<endl;
}
file.clear();
}
void student::updata_data()
{
int n;int y=0;
cout<<"请输入要更新同学的学号"<<endl;
cin>>n;
file.seekg(0,ios::beg);
while(!file.eof())
{
file.read((char*)&ll,sizeof(ll));
if(ll.num==n)
break;
}
if(!file.eof())
{
cout<<"该同学原始数据:"<<endl;
cout<<"学号"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"高数"<<'\t'<<"C++"<<'\t'<<"离散"<<'\t'<<"英语"<<'\t'<<"总分"<<'\t'<<"平均分"<<endl;
cout<<ll.num<<'\t'<<ll.name<<'\t'<<ll.sex<<'\t'<<ll.score[0]<<'\t'
<<ll.score[1]<<'\t'<<ll.score[2]<<'\t'<<ll.score[3]<<'\t'<<ll.sum_score<<'\t'<<ll.ave_score<<'\t'<<endl;
ll.input();
file.seekp(-sizeof(ll),ios::cur);
file.write((char*)&ll,sizeof(ll));
}
else
{
cout<<"无此学号!!!"<<endl;
file.clear();
}
if(!file.eof())
{
cout<<"学号"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"高数"<<'\t'<<"C++"<<'\t'<<"离散"<<'\t'<<"英语"<<'\t'<<"总分"<<'\t'<<"平均分"<<endl;
file.seekg(0,ios::beg);
while(!file.eof())
{
if (file.peek() == EOF)
break;
file.read((char*)&ll,sizeof(ll));
cout<<ll.num<<'\t'<<ll.name<<'\t'<<ll.sex<<'\t'<<ll.score[0]<<'\t'
<<ll.score[1]<<'\t'<<ll.score[2]<<'\t'<<ll.score[3]<<'\t'<<ll.sum_score<<'\t'<<ll.ave_score<<'\t'<<endl;
}
file.clear();
}
}
void student::search_data()
{
int aa;
cout<<"请输入要查询的学号:"<<endl;
cin>>aa;
file.seekg(0,ios::beg);
while(!file.eof())
{
if(file.peek()==EOF)
{break;}
file.read((char*)&ll,sizeof(ll));
if(ll.num==aa)
{
cout<<"该同学数据:"<<endl;
cout<<"学号"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"高数"<<'\t'<<"C++"<<'\t'<<"离散"<<'\t'<<"英语"<<'\t'<<"总分"<<'\t'<<"平均分"<<endl;
cout<<ll.num<<'\t'<<ll.name<<'\t'<<ll.sex<<'\t'<<ll.score[0]<<'\t'
<<ll.score[1]<<'\t'<<ll.score[2]<<'\t'<<ll.score[3]<<'\t'<<ll.sum_score<<'\t'<<ll.ave_score<<'\t'<<endl;
break;
}
}
if(file.eof())
{
cout<<"无此学号!!!"<<endl;
}
file.clear();
}
void student::delete_data()
{
ofstream outfile1("filename2.bin",ios::out);
int aa;int gg=0;
cout<<"请输入要删除的学号:"<<endl;
cin>>aa;
file.seekg(0,ios::beg);
while(!file.eof())
{
if(file.peek()==EOF)
{break;}
file.read((char*)&ll,sizeof(ll));
if(ll.num!=aa)
outfile1.write((char*)&ll,sizeof(ll));
if(ll.num==aa)
{
gg=1;
cout<<"该同学数据:"<<endl;
cout<<"学号"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"高数"<<'\t'<<"C++"<<'\t'<<"离散"<<'\t'<<"英语"<<'\t'<<"总分"<<'\t'<<"平均分"<<endl;
cout<<ll.num<<'\t'<<ll.name<<'\t'<<ll.sex<<'\t'<<ll.score[0]<<'\t'
<<ll.score[1]<<'\t'<<ll.score[2]<<'\t'<<ll.score[3]<<'\t'<<ll.sum_score<<'\t'<<ll.ave_score<<'\t'<<endl;
}
}
file.clear();
file.close();
outfile1.close();
remove("filename1.bin");//删除文件
rename("filename2.bin","filename1.bin");//更改文件名
file.open("filename1.bin",ios::in|ios::out|ios::binary);
if(gg==1)
{
file.seekg(0,ios::beg);
cout<<"文件里剩余数据:"<<endl;
cout<<"学号"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"高数"<<'\t'<<"C++"<<'\t'<<"离散"<<'\t'<<"英语"<<'\t'<<"总分"<<'\t'<<"平均分"<<endl;
while(!file.eof())
{
if(file.peek()==EOF)
break;
file.read((char*)&ll,sizeof(ll));
cout<<ll.num<<'\t'<<ll.name<<'\t'<<ll.sex<<'\t'<<ll.score[0]<<'\t'
<<ll.score[1]<<'\t'<<ll.score[2]<<'\t'<<ll.score[3]<<'\t'<<ll.sum_score<<'\t'<<ll.ave_score<<'\t'<<endl;
}
}
if(gg==0)
{cout<<"无此学号?"<<endl;}
file.clear();
}
void student::paixu()
{
cout<<" ******************************************************************************"<<endl;
cout<<" 请选择排序方式 "<<endl;
cout<<" ******************************************************************************"<<endl;
cout<<" * 1.★学号 2.★高数 *"<<endl;
cout<<" * 3.★C++ 4.★离散 *"<<endl;
cout<<" * 5.★英语 6.★总分 *"<<endl;
cout<<" * 7.★平均分 8.★退出 *"<<endl;
cout<<" * *"<<endl;
cout<<" ******************************************************************************"<<endl<<endl;
cout<<"请选择:";
float er[50];int pp=0;data data1[50];
int xuan;cin>>xuan;
switch(xuan)
{
case 1:
{
file.seekg(0,ios::beg);
while(!file.eof())
{
if(file.peek()==EOF)
break;
file.read((char*)&ll,sizeof(ll));
er[pp]=ll.num;
pp++;
}
file.clear();
sort(er,er+pp);
cout<<"排序后同学数据:"<<endl;
cout<<"学号"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"高数"<<'\t'<<"C++"<<'\t'<<"离散"<<'\t'<<"英语"<<'\t'<<"总分"<<'\t'<<"平均分"<<endl;
for(int k=0;k<pp;k++)
{
file.seekg(0,ios::beg);
while(!file.eof())
{
if(file.peek()==EOF)
break;
file.read((char*)&ll,sizeof(ll));
if(er[k]==ll.num)
{
data1[k]=ll;
cout<<ll.num<<'\t'<<ll.name<<'\t'<<ll.sex<<'\t'<<ll.score[0]<<'\t'
<<ll.score[1]<<'\t'<<ll.score[2]<<'\t'<<ll.score[3]<<'\t'<<ll.sum_score<<'\t'<<ll.ave_score<<'\t'<<endl;
break;
}
}
}
break;
}
case 2:
{
file.seekg(0,ios::beg);
while(!file.eof())
{
if(file.peek()==EOF)
break;
file.read((char*)&ll,sizeof(ll));
er[pp]=ll.score[0];
pp++;
}
file.clear();
sort(er,er+pp);
cout<<"排序后同学数据:"<<endl;
cout<<"学号"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"高数"<<'\t'<<"C++"<<'\t'<<"离散"<<'\t'<<"英语"<<'\t'<<"总分"<<'\t'<<"平均分"<<endl;
for(int k=0;k<pp;k++)
{
file.seekg(0,ios::beg);
while(!file.eof())
{
if(file.peek()==EOF)
break;
file.read((char*)&ll,sizeof(ll));
if(er[k]==ll.score[0])
{
data1[k]=ll;
cout<<ll.num<<'\t'<<ll.name<<'\t'<<ll.sex<<'\t'<<ll.score[0]<<'\t'
<<ll.score[1]<<'\t'<<ll.score[2]<<'\t'<<ll.score[3]<<'\t'<<ll.sum_score<<'\t'<<ll.ave_score<<'\t'<<endl;
break;
}
}
}
break;
}
case 3:
{
file.seekg(0,ios::beg);
while(!file.eof())
{
if(file.peek()==EOF)
break;
file.read((char*)&ll,sizeof(ll));
er[pp]=ll.score[1];
pp++;
}
file.clear();
sort(er,er+pp);
cout<<"排序后同学数据:"<<endl;
cout<<"学号"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"高数"<<'\t'<<"C++"<<'\t'<<"离散"<<'\t'<<"英语"<<'\t'<<"总分"<<'\t'<<"平均分"<<endl;
for(int k=0;k<pp;k++)
{
file.seekg(0,ios::beg);
while(!file.eof())
{
if(file.peek()==EOF)
break;
file.read((char*)&ll,sizeof(ll));
if(er[k]==ll.score[1])
{
data1[k]=ll;
cout<<ll.num<<'\t'<<ll.name<<'\t'<<ll.sex<<'\t'<<ll.score[0]<<'\t'
<<ll.score[1]<<'\t'<<ll.score[2]<<'\t'<<ll.score[3]<<'\t'<<ll.sum_score<<'\t'<<ll.ave_score<<'\t'<<endl;
break;
}
}
}
break;
}
case 4:
{
file.seekg(0,ios::beg);
while(!file.eof())
{
if(file.peek()==EOF)
break;
file.read((char*)&ll,sizeof(ll));
er[pp]=ll.score[2];
pp++;
}
file.clear();
sort(er,er+pp);
cout<<"排序后同学数据:"<<endl;
cout<<"学号"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"高数"<<'\t'<<"C++"<<'\t'<<"离散"<<'\t'<<"英语"<<'\t'<<"总分"<<'\t'<<"平均分"<<endl;
for(int k=0;k<pp;k++)
{
file.seekg(0,ios::beg);
while(!file.eof())
{
if(file.peek()==EOF)
break;
file.read((char*)&ll,sizeof(ll));
if(er[k]==ll.score[2])
{
data1[k]=ll;
cout<<ll.num<<'\t'<<ll.name<<'\t'<<ll.sex<<'\t'<<ll.score[0]<<'\t'
<<ll.score[1]<<'\t'<<ll.score[2]<<'\t'<<ll.score[3]<<'\t'<<ll.sum_score<<'\t'<<ll.ave_score<<'\t'<<endl;
break;
}
}
}
break;
}
case 5:
{
file.seekg(0,ios::beg);
while(!file.eof())
{
if(file.peek()==EOF)
break;
file.read((char*)&ll,sizeof(ll));
er[pp]=ll.score[3];
pp++;
}
file.clear();
sort(er,er+pp);
cout<<"排序后同学数据:"<<endl;
cout<<"学号"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"高数"<<'\t'<<"C++"<<'\t'<<"离散"<<'\t'<<"英语"<<'\t'<<"总分"<<'\t'<<"平均分"<<endl;
for(int k=0;k<pp;k++)
{
file.seekg(0,ios::beg);
while(!file.eof())
{
if(file.peek()==EOF)
break;
file.read((char*)&ll,sizeof(ll));
if(er[k]==ll.score[3])
{
data1[k]=ll;
cout<<ll.num<<'\t'<<ll.name<<'\t'<<ll.sex<<'\t'<<ll.score[0]<<'\t'
<<ll.score[1]<<'\t'<<ll.score[2]<<'\t'<<ll.score[3]<<'\t'<<ll.sum_score<<'\t'<<ll.ave_score<<'\t'<<endl;
break;
}
}
}
break;
}
case 6:
{
file.seekg(0,ios::beg);
while(!file.eof())
{
if(file.peek()==EOF)
break;
file.read((char*)&ll,sizeof(ll));
er[pp]=ll.sum_score;
pp++;
}
file.clear();
sort(er,er+pp);
cout<<"排序后同学数据:"<<endl;
cout<<"学号"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"高数"<<'\t'<<"C++"<<'\t'<<"离散"<<'\t'<<"英语"<<'\t'<<"总分"<<'\t'<<"平均分"<<endl;
for(int k=0;k<pp;k++)
{
file.seekg(0,ios::beg);
while(!file.eof())
{
if(file.peek()==EOF)
break;
file.read((char*)&ll,sizeof(ll));
if(er[k]==ll.sum_score)
{
data1[k]=ll;
cout<<ll.num<<'\t'<<ll.name<<'\t'<<ll.sex<<'\t'<<ll.score[0]<<'\t'
<<ll.score[1]<<'\t'<<ll.score[2]<<'\t'<<ll.score[3]<<'\t'<<ll.sum_score<<'\t'<<ll.ave_score<<'\t'<<endl;
break;
}
}
}
break;
}
case 7:
{
file.seekg(0,ios::beg);
while(!file.eof())
{
if(file.peek()==EOF)
break;
file.read((char*)&ll,sizeof(ll));
er[pp]=ll.ave_score;
pp++;
}
file.clear();
sort(er,er+pp);
cout<<"排序后同学数据:"<<endl;
cout<<"学号"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"高数"<<'\t'<<"C++"<<'\t'<<"离散"<<'\t'<<"英语"<<'\t'<<"总分"<<'\t'<<"平均分"<<endl;
for(int k=0;k<pp;k++)
{
file.seekg(0,ios::beg);
while(!file.eof())
{
if(file.peek()==EOF)
break;
file.read((char*)&ll,sizeof(ll));
if(er[k]==ll.ave_score)
{
data1[k]=ll;
cout<<ll.num<<'\t'<<ll.name<<'\t'<<ll.sex<<'\t'<<ll.score[0]<<'\t'
<<ll.score[1]<<'\t'<<ll.score[2]<<'\t'<<ll.score[3]<<'\t'<<ll.sum_score<<'\t'<<ll.ave_score<<'\t'<<endl;
break;
}
}
}
break;
}
case 8:
{
exit(1);
break;
}
}
cout<<"排序后数据是否存入文件(Y,N):"<<endl;
char a;
while(1)
{
cin>>a;
a=tolower(a);
if(a=='y'||a=='n')
break;
else
cout<<"输入数据有误,请重新输入:"<<endl;
}
if(a=='y')
{
file.seekp(0,ios::beg);
for(int f=0;f<pp;f++)
file.write((char*)&data1[f],sizeof(data1[f]));
}
file.clear();
}
void student::display()
{
file.seekg(0,ios::end);
int i=file.tellg();
if(i==0)
cout<<"文件里没有数据,请建立数据:"<<endl;
file.seekg(0,ios::beg);
if(i!=0)
cout<<"学号"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"高数"<<'\t'<<"C++"<<'\t'<<"离散"<<'\t'<<"英语"<<'\t'<<"总分"<<'\t'<<"平均分"<<endl;
while(!file.eof())
{
if(file.peek()==EOF)
break;
file.read((char*)&ll,sizeof(ll));
cout<<ll.num<<'\t'<<ll.name<<'\t'<<ll.sex<<'\t'<<ll.score[0]<<'\t'
<<ll.score[1]<<'\t'<<ll.score[2]<<'\t'<<ll.score[3]<<'\t'<<ll.sum_score<<'\t'<<ll.ave_score<<'\t'<<endl;
}
file.clear();
}
void student::help()
{
cout<<"①该系统可以保存数据供下次使用,也可下次运行时清空数据"<<endl<<endl;
cout<<"②该系统排序有7种方式"<<endl<<endl;
cout<<"③若你要想以某种顺序显示数据,请先以该种方式排序后存入文件在显示"<<endl<<endl;
cout<<"④该系统可以增加数据,数据在文件末尾"<<endl<<endl;
system("pause");
cout<<"\t\t***************************************************"<<endl;
cout<<"\t\t********** **********"<<endl;
cout<<"\t\t********** 欢迎使用 **********"<<endl;
cout<<"\t\t********** **********"<<endl;
cout<<"\t\t********** 软件四班-王新 **********"<<endl;
cout<<"\t\t********** **********"<<endl;
cout<<"\t\t********** 学生信息管理系统 **********"<<endl;
cout<<"\t\t********** **********"<<endl;
cout<<"\t\t***************************************************"<<endl;
system("pause");
system("cls");
cout<<"\t\t 系统设计日期:二〇一二年六月九日 "<<endl<<endl;;
cout<<"\t\t 系统仍有许多不足之处,敬请见谅 "<<endl<<endl;
cout<<"\t\t 如发现错误,请联系QQ 993636112 "<<endl;
}
void student::run()
{
int tt=1;int num=0;int num1=sizeof(ll);
while(!(tt==8))
{
file.seekp(0,ios::end);
num=file.tellp();
cout<<"系统正在进入主菜单..."<<endl<<endl;
system("pause");
system("cls");
cout<<" ******************************************************************************"<<endl;
cout<<" 欢迎使用学生信息管理管理 "<<endl;
cout<<" ******************************************************************************"<<endl;
cout<<" * 1.★添加数据 2.★更新数据 *"<<endl;
cout<<" * 3.★查询数据 4.★删除数据 *"<<endl;
cout<<" * 5.★排序(升序) 6.★显示文件数据 *"<<endl;
cout<<" * 7.★系统信息 8.★ 退出 *"<<endl;
cout<<" * *"<<endl;
cout<<" ******************************************************************************"<<endl;
cout<<" "<<endl;
cout<<" *****************************"<<"目前文件共有"<<setw(2)<<num/num1<<"个数据"<<"*****************************"<<endl<<endl;
cout<<"请输入1-8之间的任意一数字:"<<endl;
cin>>tt;
system("cls");
switch(tt)
{
case 1:creat_data();break;
case 2:updata_data();break;
case 3:search_data();break;
case 4:delete_data();break;
case 5:paixu();break;
case 6:display();break;
case 7:help();break;
case 8:exit(1);break;
}
}
}
void main()
{
system("title 文件写的简单学生管理系统-王新");
//system("mode con cols=90 lines=40");
system("color e0");
student b;
b.run();
}