//采用分文件编写
//学生信息管理系统主函数
//******************
#include <iostream>
#include "Admin.h"
int main()
{
Admin a;
a.load();
a.start();
return 0;
}
//******************
//Admin.h
//******************
#include "Student.h"
class Admin
{
private:
public:
Admin();
Student *s[100];
void load();
void start();
void add();
void save();
void showAll(); //所有学生信息
void Del();//删除学生信息
void change();
void search();
void searchByNum();
void searchByName();
void Avgscore();
};
//******************
//Admin.cpp
//******************
#include"Admin.h"
void Admin::load()
{
ifstream fin("d:/1.txt",ios::in);
if(!fin)
{
cerr<<"读取文档失败"<<endl;
return;
}
int num;
string name;
char sex;
float score;
int i=0;
while(i<100)
{
fin>>name;
fin>>num;//fin对文件的内容进行读操作 头文件<ifstream>
fin>>sex;
fin>>score;
if(fin.eof())//eof表示文件或标准输入的结尾
{
break;
}
s[i] = new Student(name,num,sex,score);
i++;
}
cout<<"读档完成"<<endl;
fin.close();
}
Admin::Admin()
{
for(int i=0;i<100;i++)
{
s[i] = NULL;//初始化数组为空
}
}
void Admin::add()//增加
{
int num;
string name;
float score;
char sex;
cout<<"请输入姓名:"<<endl;
cin>>name;
cout<<"请输入学号:"<<endl;
cin>>num;
cout<<"请输入性别(b/g):"<<endl;
cin>>sex;
cout<<"请输入成绩:"<<endl;
cin>>score;
for(int i=0;i<100;i++)
{
if(s[i]==NULL)
{
s[i] = new Student(name,num,sex,score);
break;
}
}
cout<<"添加完成!"<<endl;
}
void Admin::save()
{
ofstream fout("d:/1.txt",ios::out);
if(!fout)
{
cerr<<"无法打开文件 存档失败!"<<endl;
}
for(int i=0;i<100;i++)
{
if(s[i]==NULL)
{
break;
}
s[i]->saveToFile(fout);//只能用指向不能用点,因为指向对象为指针
}
cout<<"存档成功!"<<endl;
fout.close();
}
void Admin::showAll()//输出信息
{
cout<<"**全部学生信息**"<<endl;
cout<<"****姓名**"<<"**学号**"<<"**性别**"<<"**成绩****"<<endl;
for(int i=0;i<100;i++)
{
if(s[i]==NULL)
{
break;
}
s[i]->display();
}
cout<<endl;
}
void Admin::Del()//删除信息
{
string name;
cout<<"请输入要删除的学生姓名"<<endl;
cin>>name;
string input;
int i;
for(int i=0;i<100;i++)
{
if(s[i]==NULL)
{
cout<<"查无此人!"<<endl;
return;
}
if(s[i]->isEqual1(name))
{
s[i]->display();
cout<<"确认删除吗?y/n"<<endl;
cin>>input;
if(input=="y")
{
delete s[i];
for(int j=i+1;j<100;j++)
{
if(s[j]==NULL)
{
s[j-1] = NULL;
break;
}
s[j-1] = s[j];
}
cout<<"删除成功"<<endl;
return;
}
else
{
cout<<"取消删除操作"<<endl;
}
break;
}
}
}
void Admin::change()//更改信息
{
string name;
float score;
int num;
char sex;
cout<<"请输入修改学生的姓名"<<endl;
cin>>name;
for(int i=0;i<100;i++)
{
if(s[i] == NULL)
{
cout<<"查无此人"<<endl;
return;
}
if(s[i]->isEqual1(name))
{
s[i]->display();
cout<<"请选择您想更改的信息"<<endl;
cout<<"1.学号 2.性别 3.成绩 4.退出程序"<<endl;
int a;
while(cin>>a)
{
if(a==1)
{
cout<<"请更改学生的学号:"<<endl;
cin>>num;
s[i]->set1(num);
}
if(a==2)
{
cout<<"请更改学生的性别:"<<endl;
cin>>sex;
s[i]->set2(sex);
}
if(a==3)
{
cout<<"请更改学生的成绩:"<<endl;
cin>>score;
s[i]->set3(score);
}
if(a==4)
{
break;
}
}
cout<<"修改完成,以下为修改后的数据"<<endl;
s[i]->display();
break;
}
}
}
void Admin::searchByNum()//按学号查询
{
cout<<"请输入所查学生学号"<<endl;
int num;
int i;
cin>>num;
for(int i=0;i<100;i++)
{
if(s[i] == NULL )
{
cout<<"查无此人"<<endl;
return;
}
if(s[i]->isEqual(num))
{
s[i]->display();
break;
}
}
}
void Admin::searchByName() //按姓名查询
{
int n=0;
string name;
cout<<"请输入查询姓名:"<<endl;
cin>>name;
for(int i=0;i<100;i++)
{
if(s[i]==NULL)
{
break;
}
if(s[i]->isEqual1(name))
{
s[i]->display();
n++;
}
}
if(n==0)
{
cout<<"未找到所查询学生"<<endl;
}
else
{
cout<<endl;
cout<<"共找到"<<n<<"条记录"<<endl;
}
}
void Admin::search()//查询
{
cout<<"请输入查询方式"<<endl;
cout<<"1.按学号查询 2.按姓名查询 "<<endl;
int input;
cin>>input;
switch(input)
{
case 1:
searchByNum();
break;
case 2:
searchByName();
break;
case 3:
return;
break;
}
}
void Admin::Avgscore()// 求平均成绩
{
double sum = 0;
double ave = 0;
int j = 0;
for(int i=0;i<100;i++)
{
if(s[i]==NULL)
{
break;
}
sum+=s[i]->score;
j++;
}
ave = sum/j;
cout<<"平均分为:"<<ave<<endl;
}
void Admin::start() //输出界面
{
int inputNum;
cout<<"*************************"<<endl;
cout<<"欢迎使用学生信息管理系统"<<endl;
while(1)
{
cout<<endl;
cout<<"*****请选择你的操作*****"<<endl;
cout<<"***** 1、添加学生信息 *****"<<endl;
cout<<"***** 2、删除学生信息 *****"<<endl;
cout<<"***** 3、修改学生信息 *****"<<endl;
cout<<"***** 4、查找学生信息 *****"<<endl;
cout<<"***** 5、输出学生信息 *****"<<endl;
cout<<"***** 6、求学生平均分*****"<<endl;
cout<<"***** 7、退出管理系统 *****"<<endl;
cin>>inputNum;
switch(inputNum)
{
case 1:
add();
save();
break;
case 2:
Del();
save();
break;
case 3:
change();
save();
break;
case 4:
search();
break;
case 5:
showAll();
break;
case 6:
Avgscore();
break;
case 7:
cout<<"退出成功"<<endl;
return;
break;
}
}
}
//******************
//student.h
//******************
#include<iostream>
#include<string.h>
#include<fstream>
using namespace std;
class Student
{
public:
Student();
Student(string name,int num,char sex,float score);
void saveToFile(ofstream &);
void display();
bool isEqual(int);
bool isEqual1(string);
void set(string ,int ,char ,float );
void set1(int );
void set2(char );
void set3(float );
float score;
private:
string name;
int num;
char sex;
};
//******************
//student.cpp
//******************
#include "Student.h"
Student::Student()
{
}
Student::Student(string n,int n1,char s,float s1)
{
name = n;
num = n1;
sex = s;
score = s1;
}
bool Student::isEqual(int n)
{
if(num==n)
{
return true;
}
else
return false;
}
bool Student::isEqual1(string n)
{
if(name==n)
{
return true;
}
else
return false;
}
void Student::set(string n,int n1,char s,float s1)
{
name = n;
num = n1;
sex = s;
score = s1;
}
void Student::set1(int n1)
{
num = n1;
}
void Student::set2(char s)
{
sex = s;
}
void Student::set3(float s1)
{
score = s1;
}
void Student::saveToFile(ofstream &fout)
{
fout<<name<<" "<<num<<" "<<sex<<" "<<score;
}
void Student::display()
{
cout<<" "<<name<<" "<<num<<" "<<sex<<" "<<score;
cout<<endl;
}
希望大佬指点!!