📄 源文件.cpp
字号:
void Students::addStudents(char *n,char *newname,char *grade)
{
i0;
delflag=0;
strcpy_s(num,n);
strcpy_s(name,newname);
strcpy_s(grades,grade);
while(i<maxbookborrow) //这里将每个新加进来的学生的借书数组初始化为0
{
strcpy_s(bookbw[i].bookborrow,"0");
i++;
}
}
void Students::display()
{
i0;
controlview=0;
cout <<setw(6)<<"学生"<<bh<< num <<setw(12)<<"所在年级:"<<grades<<setw(12) <<"学生姓名:"<<setw(6)<< name<<" 借书"<<bh<<"[";
while(i<maxbookborrow) //为了防止第二次进入程序时,限制借书的本数减少,所以这里显示所借的所有书本
{
if(strcmp(bookbw[i].bookborrow,"0")!=0)
{
if(controlview!=0)
cout<< "|";
cout << bookbw[i].bookborrow;
controlview++;
}
i++;
}
if(controlview==0)
cout<<"未借书";
cout << "]"<<endl;
}
Students::~Students()
{
}
//请保留版权信息:编写者:贵州大学刘二腾,指导老师:曾劼
class StudentDatabase //学生数据库类
{
private:
int top; //学生记录指针
int mid; //用于折半查找分区的变量
Students *stu; //定义存放学生数据的数组
public:
StudentDatabase(); //定义构造函数,将存储学生信息的r.333文本文件读到stu[]中
void Studentsdata(); //学生库维护
Students *chaxun(char *studentsid); //按编号查找
int addStudents(char *n,char *newname,char *grade); //添加学生时先查找是否存在
void display(); //输出所有学生信息
void clear(); //删除所有学生信息
void addstumax(int addmax); //程序用于系统维护菜单中增加学生数组的长度,留空
~StudentDatabase(); //析构函数,在此保存stu[]写到r.333文件中
};
StudentDatabase::StudentDatabase()
{
stu=new Students[pageview.stumax]; //按照程序初始化数据动态分配存储空间
Students temp;
top=-1;
fstream file("s.333",ios::in);
while (1)
{
file.read((char *)&temp,sizeof(temp));
if (!file)break;
top++;
stu[top]=temp;
}
file.close();
}
void StudentDatabase::addstumax(int addmax)
{
}
void StudentDatabase::Studentsdata()
{
i0;
char choice='1';
char sname[studentnamemax];
char grade[gradesmax];
char queren;
char studentsid[studentnum];
Students *s;
while (choice!='0')
{
cout<<"学生维护 "<<caidan;
choice=_getche();
cout<<endl;
if(choice=='c')
choice='7';
switch (choice)
{
case '1':
cout<<inputstudentID;
cin>>studentsid;
s=chaxun(studentsid);
if (s==NULL)
{
cout<<"请输入学生姓名:";
cin>>sname;
cout<<"请输入学生年级:";
cin>>grade;
addStudents (studentsid,sname,grade);
}
else
{
cout<<"该学生"<<bh<<"已经存在,请使用更改菜单操作"<<endl;
}
break;
case '2':
cout<<"请输入要更改的学生"<<bh;
cin>>studentsid;
s=chaxun(studentsid);
if (s==NULL)
{
cout<<nostudent<<endl;
break;
}
cout <<"请输入新的姓名:";
cin >> sname;
s->setname(sname);
cout<<"请输入新的年级(输入0不更改):";
cin>>grade;
if((strcmp(grade,"0"))==0)
break;
else
s->setgrades(grade);
cout<<"更改学生资料成功"<<endl;
break;
case '3':
cout <<inputstudentID;
cin >> studentsid;
s=chaxun(studentsid);
if (s==NULL)
//请保留版权信息:编写者:贵州大学刘二腾,指导老师:曾劼
{
cout << nostudent << endl;
break;
}
s->delstudent();
cout<<"删除"<<studentsid<<"号学生成功!"<<endl;
break;
case '4':
cout <<inputstudentID;
cin >> studentsid;
s=chaxun(studentsid);
if (s==NULL)
{
cout <<nostudent<< endl;
break;
}
s->display();
break;
case '5':
cout<<endl;
display();
cout<<endl;
break;
case '6':
cout<<"确定要删除全部数据吗?(Y|other)";
cin>>queren;
if(queren=='y'||queren=='Y')
{
clear();
cout<<"已经删除全部学生数据!"<<endl;
}
else
{
}
break;
case '7':
system("cls");
break;
default:
if(choice=='0')
system("cls");
else
{
system("cls");
cerr<<"您的输入有误,请重试"<<endl;
}
break;
}
}
}
//请保留版权信息:编写者:贵州大学刘二腾,指导老师:曾劼
int StudentDatabase::addStudents(char *n,char *newname,char *grade)
{
Students *p=chaxun(n);
if (p==NULL)
{
top++;
if(top==pageview.stumax)
{
cout<<"对不起,已经达到您设定的学生存储上限,请使用系统维护菜单修改"<<endl;
top--;
return 0;
}
else
{
stu[top].addStudents(n,newname,grade);
cout<<"添加学生成功"<<endl;
return 1;
}
}
return 0;
}
Students *StudentDatabase::chaxun(char *studentsid)
{
i0;
int j=top;
mid=top/2;
while(i<=mid&&j>=mid) //折半查找分区
{
if (strcmp(stu[i].getnum(),studentsid)==0&&stu[i].getdelflag()==0) //如果找到和学生ID相等的信息而且标记为未删除
{
return &stu[i]; //返回学生信息
}
if(strcmp(stu[j].getnum(),studentsid)==0&&stu[j].getdelflag()==0)
{
return &stu[j];
}
i++;
j--;
}
return NULL;
}
void StudentDatabase::display()
{
i0;
while(i<=top) //显示所有未删除的学生
{
if (stu[i].getdelflag()==0)
stu[i].display();
i++;
}
}
void StudentDatabase::clear()
{
top=-1; //清空时直接将top置1
}
//请保留版权信息:编写者:贵州大学刘二腾,指导老师:曾劼
StudentDatabase::~StudentDatabase()
{
system("cls");
cout<<endl<<"正在保存设置";
i0;
fstream file("s.333",ios::out);
while(i<=top)
{
if (stu[i].getdelflag()==0)
file.write((char *)&stu[i],sizeof(stu[i]));
i++;
}
file.close();
}
int main()
{
pageview.page1(); //显示封面
StudentDatabase studentsdb; //学生数据库类
Students *s; //学生类
Book *b; //书本类
BookDatabase bookdb; //书本数据库类
char bookid[booknum];
char studentsid[studentnum]; //定义书本ID,学生ID变量
char exitagin; //用于确认程序退出,防止误按键引起的退出
char choice='1'; //菜单选择判断变量
while(choice!='0')
{
cout<<"\t --------------------------------------------------------"<<endl<<endl;
cout<<"\t 1:借书 2:还书 3:图书维护 4:学生维护 5:系统维护 0:离开<<";
choice=_getche();
cout<<endl;
if(choice=='c'||choice=='C')
choice='6';
switch (choice)
{
case '0':
//请保留版权信息:编写者:贵州大学刘二腾,指导老师:曾劼
system("cls");
cout<<"您确认退出吗(Y|Others):";
exitagin=_getche();
if(exitagin=='y'||exitagin=='Y')
{
system("cls");
pageview.pagebye();
break;
}
else
system("cls");
choice='6';
break;
case '1':
cout<<"借书 学生"<<bh;
cin >>studentsid;
cout<<"所借 图书"<<bh;
cin >>bookid;
s=studentsdb.chaxun(studentsid); //查询是否存在该学生
if (s==NULL)
{
cerr<<"\t"<<nostudent<<",借书失败,请重试"<< endl;
break;
}
b=bookdb.chaxun(bookid); //查询是否存在该书本
if (b==NULL)
{
cerr<<"\t"<<nobook<<",借书失败,请重试"<<endl;
break;
}
if (b->jieshu()==0) //查询书本是否已经借出
{
cerr<<"\t您输入的图书已借出,借书失败"<<endl;
break;
}
if(s->jieshu(b->getnum())==0) //查询借书学生是否已经超过最大借书量
cout<<bh<<bookid<<"的图书已经借给"<<studentsid<<"号学生"<<endl;
else
{
b->huanshu(); //用于如果借书超过最大借书量则进行自动还书操作已防止书本处于以借状态
cout<<studentsid<<"号学生"<<"已经借满"<<pageview.borrowmax<<"本书"<<endl;
}
//请保留版权信息:编写者:贵州大学刘二腾,指导老师:曾劼
break;
case '2':
cout<<"还书 学生"<<bh;
cin >>studentsid;
cout<<"所还 图书"<<bh;
cin >>bookid;
s=studentsdb.chaxun(studentsid); //查询学生是否在线性表中存在
if(s==NULL)
{
cerr<<"\t"<<nostudent<<",还书失败,请重试" <<endl;
break;
}
b=bookdb.chaxun(bookid); //查询图书是否存在
if(b==NULL)
{
cerr<<"\t"<<nobook<<",还书失败,请重试"<<endl;
break;
}
if(s->huanshu(b->getnum())) //如果为0则不是该生借书,如果为一则在学生库中标记图书已还
{
b->huanshu(); //在书本库中标记图书已还
cout<<bh<<studentsid<<"的学生已经交还"<<bookid<<"号图书"<<endl;
cout<<"借书时间为"<<setprecision(7)<<(int)(b->gettimes())<<"天"<<endl;//显示读者借书的总时间
break;
}
//请保留版权信息:编写者:贵州大学刘二腾,指导老师:曾劼
cerr<<bh<<studentsid<<"的学生未借"<<bookid<<"号图书"<<endl;
break;
case '3':
bookdb.bookdata(); //进入图书维护操作
break;
case '4':
studentsdb.Studentsdata(); //进入学生维护操作
break;
case '5':
system("cls"); //进入系统维护菜单设置每人限制借的书本数
pageview.setborrowmax();
break;
case '6':
system("cls"); //进行清屏操作(当输入C时)
break;
default:
system("cls");
cerr<<"您的输入有误,请重试"<<endl;
break;
}
}
return 0;
}
//请保留版权信息:编写者:贵州大学刘二腾,指导老师:曾劼
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -