出现这样的错误fatal error C1083: Cannot open include file: 'student.h': No such file or
#include <iostream.h>
#include "student.h"
#include "dbstudent.h"
void main()
{
int choice=-9999;
Dbstudent s;
while(choice!=0)
{
cout<<"\n\n\t\t**** 学生信息管理系统 ****\n\n";
cout<<"\t\t**** 1 添加学生信息 ****\n";
cout<<"\t\t**** 2 显示学生信息 ****\n";
cout<<"\t\t**** 3 查询学生信息 ****\n";
cout<<"\t\t**** 4 修改学生信息 ****\n";
cout<<"\t\t**** 5 删除一个信息 ****\n";
cout<<"\t\t**** 6 删除全部信息 ****\n";
cout<<"\t\t**** 0 退出 系统 ****\n";
cout<<"请选择所需要的操作:";
cin>>choice;
switch(choice)
{
case 1:
s.addstudent();
break;
case 2:
s.display();
break;
case 3:
s.query();
break;
case 4:
s.modifystudent();
break;
case 5:
s.deletestudent();
break;
case 6:
s.clear();
break;
case 0:
break;
default:
break;
};
}
学生头文件
class Student
{
private:
int num;
char name[10];
char sex;
int age;
int tag; //定义一个标志位,0:未删除 1:已经删除
public:
// 写出set和get函数,和其他的函数
void setnum(int num);
void setname(char name[]);
void setsex(char sex);
void setage(int age);
void settag(); //此处不需要参数,写在具体的函数体内,这样,用户不知道。
//注意:get函数是有返回值类型的
int getnum();
char* getname(); //一定不能写成:char getname();
char getsex();
int getage();
int gettag();
//打印函数
void display();
//增加一个学生新信息
void addstudent(int num,char name[],char sex,int age);
//删除一个学生信息
void deletestudent();
};
创建一个长度为100的对象数组
class Dbstudent
{
private:
int top; //数组下标指示器,
Student student[100];
public:
Dbstudent();
~Dbstudent();
void addstudent();//添加学生
void display(); //打印,显示
void clear();//删除数据库中所有的信息
void deletestudent();//按照给定的学号进行单个的删除
void query();//查询模块
Student* querybynum(int num); //根据指定的学号进行查找
Student* querybyname(char name[]);//
void modifystudent();
};
/*student.cpp是对 student.h这个接口的具体的函数实现*/
#include "student.h"
#include <string.h>
#include <iostream.h>
#include <iomanip.h>
// 写出set和get函数,和其他的函数
void Student::setnum(int num)
{
this->num=num;
}
void Student::setname(char name[])
{
//this->name=name; //error
strcpy(this->name,name);
}
void Student::setsex(char sex)
{
this->sex=sex;
}
void Student::setage(int age)
{
this->age=age;
}
函数体内,这样,用户不知道。
{
this->tag=0;
}
//注意:get函数是有返回值类型的
int Student::getnum()
{
return num;
}
char* Student::getname() //一定不能写成:char getname();
{
return name;
}
char Student::getsex()
{
return sex;
}
int Student::getage()
{
return age;
}
int Student::gettag()
{
return tag;
}
//打印函数
void Student::display()
{
cout<<setw(8)<<num<<setw(8)<<name<<setw(8)<<sex<<setw(8)<<age<<endl;
cout<<" -------------------------------"<<endl;
}
//增加一个学生新信息
void Student::addstudent(int num,char name[],char sex,int age)
{
this->num=num;
strcpy(this->name,name);
this->sex=sex;
this->age=age;
this->tag=0;
}
//删除一个学生信息
void Student::deletestudent()
{
this->tag=1;
}
/*dbstudent.cpp是对 dbstudent.h这个接口的具体的函数实现构造函数*/
Dbstudent::Dbstudent()
{
//构造函数负责从磁盘中读取数据,放置到对象数组中(内存)
top=-1;
Student s;//定义一个临时的对象
fstream file("student.txt",ios::in);
while(1)
{
file.read((char*)&s,sizeof(s));
if(!file) break;//如果读取为空,则终止
top++;
student[top]=s;
}
file.close();//文件使用完毕后,一定要及时关闭
}
析构函数
Dbstudent:: ~Dbstudent()
{
//析构函数负责在退出程序时,把当前编辑的内容保存到磁盘上。
fstream file("student.txt",ios::out);
for(int i=0;i<=top;i++)
{
if(student[i].gettag()==0) //只有没删除的,才存盘
file.write( (char*)&student[i], sizeof(student[i]) );
}
file.close();//关闭文件
cout<<"数据已经存入数据库,可以关闭当前控制台程序..."<<endl;
}
添加学生
Dbstudent:: ~Dbstudent()
{
//析构函数负责在退出程序时,把当前编辑的内容保存到磁盘上。
fstream file("student.txt",ios::out);
for(int i=0;i<=top;i++)
{
if(student[i].gettag()==0) //只有没删除的,才存盘
file.write( (char*)&student[i], sizeof(student[i]) );
}
file.close();//关闭文件
cout<<"数据已经存入数据库,可以关闭当前控制台程序..."<<endl;
}
查询学生信息
void Dbstudent::query()//查询模块
{
int choice =-999;
Student* s; //一个临时的指针
cout<<"1 按照学号查询:"<<endl;
cout<<"2 按照姓名查询:"<<endl;
cout<<"请选择:";
cin>>choice;
switch(choice)
{
case 1:
cout<<"请输入要查询学生的学号:";
int num;
cin>>num;
s = querybynum(num);
if(s==NULL)
cout<<"在数据库中没有该生的信息..."<<endl;
else
cout<<setw(8)<<"学号"<<setw(8)<<"姓名"<<setw(8)<<"性别"<<setw(8)<<"年龄"<<endl;
cout<<" -------------------------------"<<endl;
s->display();
break;
case 2:
cout<<"请输入要查询学生的姓名:";
char name[10];
cin>>name;
s = querybyname(name);
if(s==NULL)
cout<<"在数据库中没有该生的信息..."<<endl;
else
cout<<setw(8)<<"学号"<<setw(8)<<"姓名"<<setw(8)<<"性别"<<setw(8)<<"年龄"<<endl;
cout<<" -------------------------------"<<endl;
s->display();
break;
default:
break;
};
}
Student* Dbstudent::querybynum(int num) //根据指定的学号进行查找
{
for(int i=0;i<=top;i++)
if (student[i].getnum()==num && student[i].gettag()==0 )
return &student[i]; //在数组中找到了,并且没有被删除,就返回他的地址
return NULL;//找不到,返回一个NULL
}
Student* Dbstudent::querybyname(char name[])
{
for(int i=0;i<=top;i++)
if (strcmp(student[i].getname(),name)==0 && student[i].gettag()==0 )
return &student[i]; //在数组中找到了,并且没有被删除,就返回他的地址
return NULL;//找不到,返回一个NULL
}
修改学生信息
void Dbstudent::modifystudent()
{
int num;
char name[10];
char sex;
int age;
Student* s; //一个临时的指针
char yn;//定一个接受y 或n 的字符
cout<<"请输入要修改学生的学号:"<<endl;
cin>>num;
s=querybynum(num);
if(s==NULL)
cout<<"在数据库中没有该生的信息,无法修改"<<endl;
else
{
//提示学生学号是否需要修改
cout<<"学生的学号是否需要修改?(yes/no)"<<endl;
cin>>yn;
if(yn=='Y' || yn=='y')
{
cout<<"请输入学生的新学号:";
cin>>num;
s->setnum(num);
}
//提示学生姓名是否需要修改
cout<<"学生的姓名是否需要修改?(yes/no)"<<endl;
cin>>yn;
if(yn=='Y' || yn=='y')
{
cout<<"请输入学生的新姓名:";
cin>>name;
s->setname(name);
}
//提示学生性别是否需要修改
cout<<"学生的性别是否需要修改?(yes/no)"<<endl;
cin>>yn;
if(yn=='Y' || yn=='y')
{
cout<<"请输入学生的新性别:";
cin>>sex;
s->setsex(sex);
}
//提示学生年龄是否需要修改
cout<<"学生的年龄是否需要修改?(yes/no)"<<endl;
cin>>yn;
if(yn=='Y' || yn=='y')
{
cout<<"请输入学生的新年龄:";
cin>>age;
s->setage(age);
}
cout<<"学生信息修改完毕,修改后的信息如下:\n\n\n";
cout<<setw(8)<<"学号"<<setw(8)<<"姓名"<<setw(8)<<"性别"<<setw(8)<<"年龄"<<endl;
cout<<" -------------------------------"<<endl;
s->display();
}
}