📄 sdatabase.cpp
字号:
#include <iostream.h>
#include <string.h>
#include <fstream.h>
#include <iomanip.h>
#include "SDatabase.h"
SDatabase::SDatabase() //构造函数,将stud.txt读到student[]中
{
Stud s;
top=-1;
fstream file("stud.txt",ios::in);
while(1)
{
file.read((char *)&s,sizeof(s));
if (!file) break;
top++;
student[top]=s;
}
file.close();
}
void SDatabase::clear() //删除所有学生信息
{
top=-1;
}
int SDatabase::addstudent(char *n,char *na,char *s,char *m,char *a,char *b) //添加学生时先查找是否存在
{
Stud *p=query(n);
if(p==NULL)
{
top++;
student[top].addstudent(n,na,s,m,a,b);
return 1;
}
else
{
cout<<"该学号已存在!请另取学号"<<endl;
return 0;
}
}
Stud *SDatabase::query(char *n) //按学号查找
{
for(int i=0;i<=top;i++)
if(strcmp(n,student[i].getno())==0 && student[i].gettag()==0)
return &student[i];
return NULL;
}
Stud *SDatabase::rquery(char *na) //按姓名查找
{
for(int i=0;i<=top;i++)
if(strcmp(na,student[i].getname())==0 && student[i].gettag()==0)
return &student[i];
return NULL;
}
void SDatabase::disp() //输出所有学生信息
{
cout<<endl;
cout<<setw(15)<<"***********学号"<<setw(10)<<"姓名"<<setw(10)<<"性别"<<setw(10)<<"民族"<<setw(10)<<"出生地"<<setw(10)<<" 出生年月"<<"**************\n"<<endl;
for (int i=0;i<=top;i++)
{
if(student[i].gettag()==0)
student[i].disp();
}
}
void SDatabase::paixu() //按学号排序
{
Stud s;
for(int i=0;i<=top-1;i++)
for(int j=0;j<=top-i-1;j++)
if(strcmp(student[j].getno(),student[j+1].getno())>0)
{
s=student[j+1];
student[j+1]=student[j];
student[j]=s;
}
cout<<"\n 排序成功!"<<endl;
}
void SDatabase::studentdata() //学生库维护
{
int choice=1;
int choice1=1;
int choice2=1;
char c;
char rno[10];
char rname[20];
char rsex[5];
char rminzu[5];
char raddress[20];
char rbirth[20];
Stud *r;
while(choice!=0) //选择需要的操作
{
cout<<"\n学生管理系统 1:新增 2:更改 3:删除 4:查找 5:显示 6:全删 7:排序 0:退出 =>";
cin>>choice;
switch (choice)
{
case 1:
cout<<"\n 输入学生学号:";
cin>>rno;
cout<<" 输入学生姓名:";
cin>>rname;
cout<<" 输入性别:";
cin>>rsex;
cout<<" 输入民族:";
cin>>rminzu;
cout<<" 输入出生地点:";
cin>>raddress;
cout<<" 输入出生年月:";
cin>>rbirth;
addstudent(rno,rname,rsex,rminzu,raddress,rbirth);
break;
case 2:
cout << " 输入学生学号:";
cin >> rno;
r=query(rno);
if (r==NULL)
{
cout << " 该学生不存在" << endl;
break;
}
while(choice1!=0) //选择想更改的内容
{
cout<<"想更改的内容:1:姓名 2:性别 3:民族 4:出生地点 5:出生年月 0:退出 =>";
cin>>choice1;
switch(choice1)
{
case 1:
cout << " 输入新的姓名:";
cin >> rname;
r->changename(rname);
break;
case 2:
cout << " 输入新的性别:";
cin >> rsex;
r->changesex(rsex);
break;
case 3:
cout << " 输入新的民族:";
cin >> rminzu;
r->changeminzu(rminzu);
break;
case 4:
cout << " 输入新的出生地点:";
cin >> raddress;
r->changeaddress(raddress);
break;
case 5:
cout << " 输入新的出生年月:";
cin >> rbirth;
r->changebirth(rbirth);
break;
}
}
break;
case 3:
cout << "\n 输入学生学号:";
cin >>rno;
r=query(rno);
if (r==NULL)
{
cout << " 该学生不存在" << endl;
break;
}
cout<<"是否真的删除? y/n ";
cin>>c;
if(c=='y')
{
r->delstud();
cout<<"\n"<<setw(10)<<"删除成功!"<<endl;
break;
}
else
break;
case 4:
cout<<"1:按学号查找 2:按姓名查找 =>";
cin>>choice2;
switch (choice2)
{
case 1:
cout << "\n 输入学生学号:";
cin >> rno;
r=query(rno);
break;
case 2:
cout<< "\n 输入学生姓名:";
cin >> rname;
r=rquery(rname);
break;
}
if (r==NULL)
{
cout << " 该学生不存在" << endl;
break;
}
r->disp();
break;
case 5:
disp();
break;
case 6:
cout<<"是否真的全部删除? y/n ";
cin>>c;
if(c=='y')
{
clear();
cout<<"\n"<<setw(10)<<"删除成功!"<<endl;
break;
}
else
break;
case 7:
paixu();
break;
}
}
}
SDatabase::~SDatabase() //析构函数,将student[]写入stud.txt文件中
{
fstream file("stud.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();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -