学生信息管理系统.docx
《学生信息管理系统.docx》由会员分享,可在线阅读,更多相关《学生信息管理系统.docx(20页珍藏版)》请在冰豆网上搜索。
![学生信息管理系统.docx](https://file1.bdocx.com/fileroot1/2023-6/3/7617f707-f973-4e30-b263-68b7db057fd1/7617f707-f973-4e30-b263-68b7db057fd11.gif)
学生信息管理系统
/*
2014/05/27
学生信息管理系统源码(面向对象设计c++)
foract_head
*/
一、#ifndef_ACT_H
#define_ACT_H
#include"std.h"
usingnamespacestd;
classAct
{
private:
inttop;//数组下表指示器
Studentstd[1000];
public:
voidadd();
voiddisplay();
voiddel();
voidquery();
Student*querybynum(longnum);
Student*querybyname(charname[]);
voidmodif();
};
ostream&operator<<(ostream&os,Student&t)
{
longnum;
stringname;//!
//charname[50];//error!
charsex,c='y';
intage;
inttag;
num=t.getnum();
name=t.getname();
sex=t.getsex();
age=t.getage();
tag=t.gettag();
os<returnos;
}
//Non-memberoverloaded>>operator.
istream&operator>>(istream&is,Student&t)
{
longnum;
charname[50];
charsex,c='y';
intage;
inttag;
is>>num>>name>>sex>>age>>tag;
t.setnum(num);
t.setname(name);
t.setsex(sex);
t.setage(age);
t.settag();
returnis;
}
voidAct:
:
add()
{
Students,s1;
longnum;
charname[50];
charsex,c='y';
intage;
inttag;
ofstreamfile("std.txt",ios:
:
app);//追加!
不同于ate!
打开一个输出文件用于在文件尾添加数据
while
(1)
{
cout<<"请输入一个学生信息:
(学号、姓名、性别(W:
代表女性woman,M:
代表男性man)、年龄)";
//file>>s;
cin>>num>>name>>sex>>age;
s.setnum(num);
s.setname(name);
s.setsex(sex);
s.setage(age);
s.settag();
file<
cout<<"学生信息添加成功\n";
cout<<"是否继续输入学生信息:
(Y/N)";
cin>>c;
if(c=='n'||c=='N')
break;
}
file.close();
}
voidAct:
:
display()
{
top=-1;
Students[1000],s1;//s[n],n不能太大!
ifstreamfile("std.txt");
//fstreamfile("d:
\\std.txt",ios_base:
:
out);
while
(1)
{
//file.read((char*)&s,sizeof(s));
//file.read(reinterpret_cast(&s),sizeof(s));
file>>s1;
if(!
file.eof())
break;//安排位置要注意,以防多输出随机数据
top++;
cout<<"\t\t第"<(学号、姓名、性别、年龄、标识符)\n"<cout<<"\t\t"<s[top]=s1;
}
file.close();
}
voidAct:
:
query()
{
intc2;
Student*s;//一个临时的指针
cout<<"1按学号来查询:
"<cout<<"2按姓名来查询:
"<cout<<"\t\t请选择:
\n";
cin>>c2;
switch(c2)
{
case1:
cout<<"请输入要查询的学生的学号:
";
longnum;
cin>>num;
s=querybynum(num);
if(s==NULL)
cout<<"在文件中不含有该生信息..."<else
{cout<cout<<"----------------------------------------------------------\t"<s->display();
break;
}
case2:
cout<<"请输入要查询的学生的姓名:
";
charname[50];
cin>>name;
s=querybyname(name);
if(s==NULL)
cout<<"在文件中不含有该生信息..."<else
cout<cout<<"----------------------------------------------------------\t"<s->display();
break;
default:
cout<<"输入有误!
请重新输入!
\n";
break;
}
}
//根据指定学号进行查找
Student*Act:
:
querybynum(longnum)
{
inttop=-1;
Students;
//cout<<"hehe"<ifstreamfile("std.txt");
//file>>s;
while(!
file.eof())
{
//file.read((char*)&s,sizeof(s));
file>>s;
top++;
//cout<std[top]=s;
}
file.close();
//cout<<"hehe"<for(inti=0;i<=top;i++)
if(std[i].getnum()==num)
return&std[i];
returnNULL;//找不到,返回一个NULL值
}
Student*Act:
:
querybyname(charname[])
{
inttop=-1;
Students;
ifstreamfile("std.txt",ios:
:
binary);
while
(1)
{
file>>s;
if(!
file)
break;
top++;
std[top]=s;
}
file.close();
for(inti=0;i<=top;i++)
if(strcmp(std[i].getname(),name)==0&&std[i].gettag()==0)
return&std[i];
returnNULL;//找不到,返回一个NULL值
}
voidAct:
:
modif()
{
longnum;
charname[50];
charsex;
intage;
Student*s;
charyn;//yorn
cout<<"请输入要修改学生的学号:
"<cin>>num;
s=querybynum(num);
if(s==NULL)
cout<<"在数据库中不含有该生信息..."<else
{
cout<<"学生的学号是否需被修改?
(y/n)"<cin>>yn;
if(yn=='Y'||yn=='y')
{
cout<<"请输入学生的新学号:
"<cin>>num;
s->setnum(num);
}
cout<<"学生的姓名是否需被修改?
(y/n)"<cin>>yn;
if(yn=='Y'||yn=='y')
{
cout<<"请输入学生的新姓名:
"<cin>>name;
s->setname(name);
}
cout<<"学生的性别是否需被修改?
(y/n)"<cin>>yn;
if(yn=='Y'||yn=='y')
{
cout<<"请输入学生的新性别:
"<cin>>sex;
s->setsex(sex);
}
cout<<"学生的年龄是否需被修改?
(y/n)"<cin>>yn;
if(yn=='Y'||yn=='y')
{
cout<<"请输入学生的新年龄:
"<cin>>age;
s->setage(age);
}
cout<<"学生信息修改完毕,修改后的信息如下:
\n\n\n";
cout<cout<<"----------------------------------------------------------\t"<s->display();
//file<<*s//error!
//老师,文件的输出,修改后的数据该如何输出,指针不是很会用诶
ofstreamfile("std.txt");
for(inti=0;i<=top;i++)
{
//if(std[i].gettag()==0)//只有没删除的才存盘!
file<}
file.close();
}
}
voidAct:
:
del()
{
longnum;
Students,*p=NULL;
intk=0,i;
charyn;
ifstreamfile("std.txt");
while
(1)
{
cout<<"请输入要删除学生的学号:
\n";
cin>>num;
inttop=-1;
while(!
file.eof())
{
file>>s;
top++;
std[top]=s;
}
file.close();
for(inti=0;i<=top;i++)
if(std[i].getnum()==num)
{
k=i;
break;
}
if(k<0)
{
cout<<"输入有误!
\n";
}
else
{
for(i=k;i{
std[i]=std[i+1];
}
top--;
}
ofstreamfile("std.txt");
for(i=0;ifile<cout<<"删除成功!
\n";
//for(i=0;i//std[i]->diplay();
file.close();
cout<<"是否继续删除?
(y/n):
\n";
cin>>yn;
if(yn=='n'||yn=='N')
break;
}
}
#endif/*_ACT_H*/
二、#ifndef_HEADER_H
#define_HEADER_H
#include
#include
#include
#include
#endif/*_HEADER_H*/
三、
/*
2014/05/27
学生信息管理系统
forstd_head
*/
#ifndef_STD_H
#define_STD_H
#include"header.h"
usingnamespacestd;
classStudent
{
private:
longnum;
charname[50];
charsex;
intage;
inttag;//定义标志位——0:
未删除;1:
已删除
public:
voidsetnum(longn);
voidsetname(charname[]);
voidsetsex(charsex);
voidsetage(intage);
voidsettag();//此处不用参数,写在具体的函数体内,不需要用户知道
longgetnum();
char*getname();//一定不能写成chargetname()
chargetsex();
intgetage();
intgettag();
voiddisplay();
//voidadd(longnum,charname[],charsex,intage);
voiddel();
};
voidStudent:
:
setnum(longn)
{
//this->num=n;//this指针存在于类的成员函数中,指向被调用函数所在的类实例的地址。
num=n;
}
voidStudent:
:
setname(charname[])
{
strcpy(this->name,name);
//strcpy(name,nam);
}//!
voidStudent:
:
setsex(charsex)
{
this->sex=sex;//只是因为参数跟类成员变量重名了,得加this
}
voidStudent:
:
setage(intage)
{
this->age=age;
}
voidStudent:
:
settag()
{
this->tag=0;
}
longStudent:
:
getnum()
{
returnnum;
}
char*Student:
:
getname()
{
returnname;
}//!
charStudent:
:
getsex()
{
returnsex;
}
intStudent:
:
getage()
{
returnage;
}
intStudent:
:
gettag()
{
returntag;
}
voidStudent:
:
display()
{
cout<cout<<"----------------------------------------------------------\t"<}
/*voidStudent:
:
add(longnum,charname[],charsex,intage)
{
this->num=num;
strcpy(this->name,name);
this->sex=sex;
this->age=age;
this->tag=0;
}*/
voidStudent:
:
del()
{
this->tag=1;
}
#endif/*_STD_H*/
四、
/*
2014/05/27
学生信息管理系统
forstd_head
*/
#ifndef_UI_H
#define_UI_H
#include"header.h"
#include"act.h"
classUi
{
public:
voidmenu();
private:
intc;
};
voidUi:
:
menu()
{
intc;
Actdb;
while
(1)
{
cout<<"\n\n";
cout<<"\t******●欢迎进入济南大学学生信息管理系统******"<cout<<"\t****●添加学生信息,请按1****"<cout<<"\t****●显示学生信息,请按2****"<cout<<"\t****●查询学生信息,请按3****"<cout<<"\t****●修改学生信息,请按4****"<cout<<"\t****●删除学生信息,请按5****"<cout<<"\t****●退出系统,请按0****"<cout<<"请选择您要进行的操作:
"<cin>>c;
switch(c)
{
getchar();
case1:
db.add();
break;
case2:
db.display();
break;
case3:
db.query();
break;
case4:
db.modif();
break;
case5:
db.del();
break;
case0:
exit(0);
break;
default:
cout<<"输入有误!
请重新输入!
\n"<break;
}
}
}
#endif/*_UI_H*/
五、
/*
2014/05/27
学生信息管理系统
*/
#include
#include"ui.h"
usingnamespacestd;
intmain()
{
Uia;
a.menu();
return0;
}