C 的行不?
等等,要菜单就是说要支持MFC
如果你不嫌弃,就先试试这个吧,手头只有这个了。
#include lt;stringgt;//字符串头文件
#include lt;fstreamgt;//文件头文件
#include lt;iostreamgt; //是指标准库中输入输出流的头文件using namespace std;//使用名称空间std
const int BMAX=50; //书最多个数
/ /图书管理模块
//图书类别
类图书
{
public:
int no ; // 图书编号
char name[20]; // 图书名称
int b_flag; //1为在架,2为借出
int b_del; //1为存在,2为删除
public :
book(){} //构造函数
void setno(int n)
{
no=n; // 图书编号取值
}
int getno()
{
return no; //返回图书编号值
}
void setname(char na[])
{
strcpy(name, na); //字符串复制
}
char* getname()
{
return name; //返回图书名称
}
void borbook()
{
b_flag=2; / /借书标志
}
void delbook()
{
b_del=2; //删除标志
}
void addbook(int no,char na[]) // 增加图书功能
{
setno(no);
setname(na);
b_flag=1;
b_del=1;
}
}
//图书数据库类
bdatabase类
{
public:
book btarray[BMAX]; //图书集合
int top;
public:
bdatabase()
{
book b;
top=-1;
fstream file("book.txt",ios::in); // 打开文件
while (1)
{
file.read((char *)amp;b,sizeof(b));
if (!file) break;
top ;
p>
btarray[top] = b;
}
file.close(); //关闭文件
}
~bdatabase() //解析构造函数,将btarray[]写入到book.txt文件中
{
fstream file("book.txt",ios:: out);
for (int i=0;ilt;=top;i )
{
if (btarray[i].b_del==1 )
file.write((char *)amp;btarray[i],sizeof(btarray[i]));
}
file.close ();
}
void addbooks() //往图书数据库中加图书
{
book bk; p>
int no;
char bname[20];
coutlt;lt;"请输入书号: ";
cingt;gt; no;
coutlt;lt;endllt;lt;"请输入书名:";
cingt;gt;bname;
coutlt;lt;endl ;
bk.b_flag=1;
bk.addbook(no, bname);
top ;
btarray[top] =bk;
return;
}
int findbooks(int suffix) //查找图书,该函数用于借书这本书操作,suffix是队列下标
{
int no;
coutlt;lt;"请输入书号: ";
cingt;gt;否;
for(int i=0; ilt;=top; i )
{
if(btarray[i].no==no amp ;amp; btarray[i].b_del==1)
{
返回 i;
}
}
返回-1;
}
int findbooks()
//查找图书,该函数用于图书维护
{
int no;
char value[6];
coutlt ;lt;"请输入书号: ";
cingt;gt;否;
for(int i=0; ilt;=top; i )
{
if(btarray[i].no==无 amp;amp; btarray[i].b_del==1)
{
if (btarray[i].b_flag==1) strcpy(value,"在架");
if(btarray[i].b_flag==2) strcpy(value,"借出");
coutlt;lt;"书号: "lt;lt;btarray[i].nolt;lt;" 书名: "lt;lt;btarray[i].namelt;lt;" 图书状态:"lt;lt;值lt;lt;endl;
返回i;
}
}
返回-1;
}
void editbooks() //编辑图书
{
int cur;
cur = findbooks ();
if (cur==-1)
{ coutlt;lt;"没有这本书"lt;lt;endl;
return ;
}
coutlt;lt;"书号: "lt;lt;btarray[cur].nolt;lt;"书名: "lt;lt;btarray[cur ].namelt;lt;endl;
coutlt;lt;"请修改数据:"lt;lt;endl;
coutlt;lt;endllt;lt;"书名: ";
cingt;gt;btarray[cur].name;
return ;
}
void delbooks() / /删除图书
{
int cur;
cur = findbooks();
if (cur==-1)
{
return;
}
if(btarray[cur].b_flag==2) //删除时判断图书是否存在借出
{
coutlt;lt;"该图书已经借出,请在归还后再删除。
"lt;lt;endl;
返回;
}
btarray[cur].b_del=2;
返回;
}
void listbooks() // 显示全部图书
{
char value[6];
for(int i=0;ilt;=top;i)
{
if(btarray[i].b_del==1)
{
if(btarray[i].b_flag==1) strcpy(value,"在架");
if(btarray[i].b_flag==2) strcpy( value,"借出");
coutlt;lt;"书号: "lt;lt;btarray[i].nolt;lt;"书名: "lt;lt;btarray[i] .namelt;lt;" 图书状态:"lt;lt;valuelt;lt;endl;
}
}
返回;
}
}
//读者管理模块
//读者类别
类读者
{
public:
int no;
char name[20];
int r_del; //1存在,2删除
int r_bor; //1借过书,2没有借书
book brbook;
public:
void addreader( int id, char na[])//增加读者
{
no = id;
strcpy(name, na);
r_del=1;
}
void setbrbook(book bt) //设置借书标记
{
brbook = bt;
}
book getbrbook()
{
return brbook; // 返回借书信息
}
};
//读卡器数据库类
class rdatabase
{
public:
reader rdarray[BMAX];
int top;
public:
rdatabase()
{
reader rd;
top=-1;
fstream file("reader.txt",ios::in); //打开文件 p>
while (1)
{
file.read((char *)amp
;rd,sizeof(rd));
if (!file) break;
top ;
rdarray[top]=rd;
}
file.close(); //关闭文件
}
~rdatabase()//解析结构函数
{
fstream file("reader.txt",ios::out);
for (int i=0;ilt;=top;i )
{
if (rdarray[i].r_del==1)
file.write((char *)amp;rdarray[i],sizeof(rdarray[i] ]));
}
file.close();
}
void addreaders() // 添加读者 p>
{
reader rd;
int no;
char rname[20];
coutlt;lt; "请输入学号: ";
cingt;gt;no;
coutlt;lt;endllt;lt;"请输入姓名: ";
cingt;gt;rname;
coutlt;lt;endl;
rd.addreader(no,rname);
rd.r_bor=2;
rd.addreader(no,rname);
rd.r_bor=2;
p>
top ;
rdarray[top]=rd;
return;
}
int findreaders(int suffix ) //查找读者,这个函数用于借书还书操作。
参数后缀是集群下标
{
int no;
coutlt;lt;"请输入学号: ";
cingt;gt;no;
for(int i=0;ilt;=top;i )
{
if(rdarray[i].no ==无amp;amp; rdarray[i].r_del==1)
{
return i;
}
}
return -1;
}
int findreaders() //查找读者,该函数用于读者维护操作
{
int no;
char value[3];
coutlt;lt;"请输入学号: ";
cingt;gt;no;
for(int i=0;ilt;=top;i )
{
if(rdarray[i].no ==无amp;amp; rdarray[i].r_del==1)
{
if(rdarray[i].r_bor==1) strcpy(value,"借");
if(rdarray[i].r_bor==2) strcpy(value,"无");
coutlt;lt;"学号: "lt;lt ;rdarray[i].nolt;lt;" 姓名: "lt;lt;rdarray[i].namelt;lt;" 是否借书: "lt;lt;valuelt;lt;endl;
return i;
}
}
return -1;
}
void editreaders() / /编辑读者信息
{
int cur;
cur = findreaders();
if (cur==-1)
{ coutlt;lt;“没有该学生”lt;lt;endl;
return;
}
coutlt;lt ;"请修改数据:"lt;lt;endl;
coutlt;lt;endllt;lt;"姓名: ";
cingt;gt;rdarray[cur].name ;
return ;
}
void delreaders() //删除读者,如果借书要还书后才能删除
{
int cur;
cur = findreaders()
;
if (cur==-1)
{
返回;
}
if( rdarray[cur].r_bor==1)
{
coutlt;lt;“该用户借了图书,请还书后再删除”lt;lt;endl; p>
返回;
}
rdarray[cur].r_del=2;
返回;
} p>
void listreaders() //显示所有读卡器
{
char value[3];
for(int i=0;ilt ;=top; i )
{
if(rdarray[i].r_del==1)
{
if( rdarray[i].r_bor==1) strcpy(value,"借");
if(rdarray[i].r_bor==2) strcpy(value,"无");
coutlt;lt;"学号: "lt;lt;rdarray[i].nolt;lt;" 姓名: "lt;lt;rdarray[i].namelt;lt;" 是否借书: "lt ;lt;valuelt;lt;endl;
}
}
返回;
}
}
void bookjiemain() //图书维护子菜单
{
coutlt;lt;"|------------ ---------|"lt;lt;endl;
coutlt;lt;"| 图书维护 |"lt;lt;endl;
coutlt;lt ;"| (1)增加|"lt;lt;endl;
coutlt;lt;"| (2)更改 |"lt;lt;endl;
coutlt;lt;"| (3)除除 |"lt;lt;endl;
coutlt;lt;"| (4)查找 |"lt;lt;endl;
coutlt;lt;"| (5)显示 |"lt;lt;endl;
coutlt;lt;"| (6)返回上一层 |"lt;lt;endl;
coutlt;lt;"|------------------------| "lt;lt;endl;
}
void readerjiemian() //读者维
护子菜单
{
coutlt;lt;"|------------------------|"lt;lt ;endl;
coutlt;lt;"| 读者维护 |"lt;lt;endl;
coutlt;lt;"| (1)增加 |"lt;lt;lt; endl;
coutlt;lt;"| (2)更改 |"lt;lt;endl;
coutlt;lt;"| (3)除除 |"lt; lt;endl;
coutlt;lt;"| (4)查找|"lt;lt;endl;
coutlt;lt;"| (5)显示|" lt;lt;endl;
coutlt;lt;"| (6)返回上一层 |"lt;lt;endl;
coutlt;lt;"|--- ------------------|"lt;lt;endl;
}
void mainjiemian() //主界面
{
coutlt;lt;"******************************** ****************"lt;lt;endl;
coutlt;lt;"*图书管理系系统*"lt;lt;endl;
coutlt;lt;"* *"lt;lt;endl;
coutlt;lt;"* (1)借书*"lt;lt;endl;
>coutlt;lt;"* *"lt;lt;endl;
coutlt;lt;"* (2) 还书 *"lt;lt;endl;
coutlt;lt;"* *"lt;lt;endl;
coutlt;lt;"* (3)图书管理*"lt;lt;endl;
coutlt; lt;"* *"lt;lt;endl;
coutlt;lt;"* (4)用户管理 *"lt;lt;endl;
coutlt;lt;" *
*"lt;lt;endl;
coutlt;lt;"* (0) 退出 *"lt;lt;endl;
coutlt;lt;"**** **********************************************“lt;lt;endl;
}
voidborrowtoreturn(char br)
//借书还书函数。参数br用来判断是“借书”还是“还书” ”.1为“借书”,2为“还书”
{
int rdid=0;
int bkid=0;
int rsuffix, bsuffix;
bdatabase t_bd;
rdatabase t_rd;
if(br=='1') //借书
{
rsuffix=t_rd.findreaders(rdid);
bsuffix=t_bd.findbooks(bkid);
if (rsuffix= =-1 || b后缀==-1)
返回;
if(t_bd.btarray[bsuffix].b_flag==2)
{
coutlt;lt;"图书已借出,请选择其他图书"lt;lt;endl;
return;
}
if(t_rd.rdarray[rsuffix].r_bor==1)
{
coutlt;lt;"你已经借过图书,请先归还再借其他图书"lt ;lt;endl;
返回;
}
t_bd.btarray[bsuffix].b_flag=2;
t_rd.rdarray [rsuffix].r_bor=1;
t_rd.rdarray[rsuffix].brbook=t_bd.btarray[bsuffix];
返回;
} p>
if(br=='2')
{
rsuffix=t_rd.findreaders(rdid);
bsuffix=t_bd.findbooks (bkid);
if (rsuffix==-1 || bsuffix==-1 )
返回;
if(t_rd.rdarray[rsuffix].brbook.no==t_bd.btarray[bsuffix].no)
{
t_bd.btarray[bsuffix].b_flag=1;
t_rd.rdarray[rsuffix].r_bor=2;
t_rd.rdarray[ rsuffix].brbook=t_bd.btarray[bsuffix];
}
>
else
{
coutlt;lt;“请重新输入,读者借的图书号不正确”lt;lt;endl;
返回;
}
返回;
}
}
void booksmange()
{
char in;
bdatabase bd;
do{
bookjiemain();
cingt;gt;in;
switch (in)
{
case '1':
bd.addbooks() ;
中断;
case '2':
bd.editbooks();
中断;
案例 '3':
bd.delbooks();
中断;
案例 '4':
bd.findbooks ();
中断;
case '5':
bd.listbooks();
中断;
case '6':
break;
默认:coutlt;lt;"输入错误,请从新输入。"lt;lt;endl;;
}
}while(in!='6');
return;
}
void readermange()
{
char in;
rdatabase bd;
do{
readerjiemian();
do{
readerjiemian();
p>
cingt;gt;in;
switch (in)
{
case '1':
bd .addreaders();
中断;
case '2':
bd.editreaders();
中断;
中断;
bd.editreaders();
中断;
p>
case '3':
bd.delreaders();
中断;
case '4':
bd.findreaders();
中断;
case '5':
bd.listreaders();
中断;
case '6':
break;
默认:coutlt;lt;"输入错误,请从新输入。
"lt;lt;endl;
}
}while(in!='6');
return;
}
int main(int argc, char* argv[])
{ char in;
do{
mainjiemian();
cingt;gt;in;
switch (in)
{
case '1':
借用返回(in);
中断;
case '2':
借用返回(in);
中断; p>
case '3':
booksmange();
break;
case '4':
readermange ();
中断;
case '0':
中断;
默认:coutlt;lt;"输入错误,请从新输入。"lt;lt;endl;
}
}while(in!='0');
return 0;
}