📄 c+++图书管理系统+数据结构.cpp
字号:
#include<iostream>
#include<stdlib.h>
#include<string>
#include<fstream>
#include<conio.h>
#include<math.h>
#define OK 1
#define TURE 1
typedef struct{
char *ch;//若非空串,刚按串长分配存储区,否刚ch为NULL
int length;//串长度
}sstring;
int strassign(sstring &t,char *chars){//生成一个其值等于串常量chars的串t
int i,a;char *c;
t.ch=NULL;
for(i=0,c=chars;*c;++i,++c)
if(!i){t.ch=NULL;t.length=0;}
else{
if(!(t.ch=(char*)realloc(t.ch,(i+1)*sizeof(char))))
exit(OVERFLOW);
t.length=i+1;}
for(a=0;a<t.length;a++){
t.ch[a]=chars[a];
}
return OK;
}
using namespace std;
typedef struct Book //图书类
{
int num;
int lent; //借出
char name[20];
char author[20];
char kind[20];
int exist; //库存
struct Book *next;
}Books;
typedef struct admin //管理员类
{
char adminsname[20];
char password[20];
struct admin *next;
}admins;
typedef struct user //用户类
{
char usersname[20];
char ppassword[20];
struct user *next;
}users;
users *creatusers() //新建用户
{
users *p,*husers,*tail;
char usersname[20],ppassword[20];
int size=sizeof(users);
int end=1;
husers=tail=NULL;
cout<<"请输入用户名ENTER密码ENTER"<<endl;
while(end)
{ cin>>usersname>>ppassword;
p=(users*)malloc(size);
strcpy(p->usersname,usersname);
strcpy(p->ppassword,ppassword);
if(husers==NULL)
husers=p;
else
tail->next=p;
tail=p;
cout<<"继续添加用户?Y=1,N=0"<<endl;
cin>>end;
}
tail->next=NULL;
return husers;
}
void showusers(users *husers)
{
users *p;
if(husers!=NULL)
p=husers;
else {exit(0);}
for(p=husers;p;p=p->next)
{cout<<"用户名:"<<p->usersname<<" 密码:"<<p->ppassword<<'\n';}
}
void showpp(users *husers)
{users *p;char usersname[20];int i=0;
if(husers!=NULL)
p=husers;
else{exit(0);}
cout<<"输入要查看的用户的用户名!"<<endl;
cin>>usersname;
for(p=husers;p;p=p->next)
{if(strcmp(p->usersname,usersname)==0)
{cout<<"用户名:"<<p->usersname<<" 密码:"<<p->ppassword<<'\n';i++;}
}
if(i==0) cout<<"要查找的帐号不存在!"<<endl;
}
users *loadusers(users *husers) //加载用户信息
{
users *p,*tail;
char usersname[20],ppassword[20];
int size=sizeof(users);
husers=tail=NULL;
fstream fp;
fp.open("c:\\users.txt",ios::in);
if(!fp)
{cout<<"文件读取失败!"<<endl;
exit(0);
}
while(fp>>usersname>>ppassword)
{p=(users*)malloc(size);
strcpy(p->usersname,usersname);
strcpy(p->ppassword,ppassword);
if(husers==NULL)
husers=p;
else
tail->next=p;
tail=p;
}
tail->next=NULL;
fp.close();
return husers;
}
users *addusers(users *husers) //增加用户
{
users *ptr,*ptr2,*Book;
int size=sizeof(users);
char ch='a';
while(ch!=' ')
{
Book=(users *)malloc(size);
ptr=Book;
cout<<"输入要添加的帐号名ENTER密码ENTER:"<<endl;
cin>>Book->usersname>>Book->ppassword;
if(husers==NULL)
{
husers=ptr;
husers->next=NULL;
}
else {
for(ptr2=husers;ptr2;ptr2=ptr2->next)
if(ptr2->next==NULL)
{
ptr2->next=Book;
Book->next=NULL;
break;
}
}
cout<<"继续添加请按回车,结束请按空格!"<<endl;
cin.get();
ch=cin.get();
}
return husers;
}
users *delusers(users *husers) //删除用户
{
users *p1,*p2;
char ch='a';
char usersname[20];
while(ch!=' ')
{cout<<"请输入要删除的帐号名称!"<<endl;
cin>>usersname;
if(strcmp(husers->usersname,usersname)==0)
{p2=husers;
husers=husers->next;
free(p2);
}
if(husers==NULL)
return NULL;
p1=husers;
p2=husers->next;
while(p2)
{
if(strcmp(p2->usersname,usersname)==0)
{p1->next=p2->next;
free(p2);
}
else p1=p2;
p2=p1->next;
}
cout<<"继续删除请按回车,结束请按空格"<<endl;
cin.get();
ch=cin.get();
}
return husers;
}
void saveusers(users *husers) //保存用户信息
{
users *p;
fstream op;
op.open("c:\\users.txt",ios::out);
if(!op)
{
cout<<"文件读取失败!"<<endl;
exit(0);
}
for(p=husers;p;p=p->next)
op<<p->usersname<<" "<<p->ppassword<<'\n';
op.close();
cout<<"信息保存成功!"<<endl;
}
int checkusers(users *husers) //用户登陆
{
int i=0;
while(i==0){
users *p;
string pname,pstr1,ppwd,usersname;
char ch;
cout<<"输入用户名:"<<endl;
cin>>pname;
cout<<"输入用户密码:"<<endl;
while((ch=getch())!=13)
{pstr1+=ch;
cout<<"*";
}
cout<<endl;
if(NULL==husers)
{cout<<"密码表为空!"<<endl;
exit(0);
}
for(p=husers;p;p=p->next)
{usersname=p->usersname;
ppwd=p->ppassword;
if(ppwd.compare(pstr1)==0 && usersname.compare(pname)==0)
{
cout<<"成功登录!"<<endl;
i++;
}
}
if(i==0)
{cout<<"密码或者用户名错误请重新输入!"<<endl;}
}
return OK;
}
Books *creatBook() //新建图书
{
Books *p,*hBook,*tail;
int num=1;int exist,a=1,lent=0;
char name[20],kind[20],author[20];
int size=sizeof(Books);
hBook=tail=NULL;
cout<<"输入图书信息:书名ENTER作者ENTER类型ENTER数量ENTER"<<endl;
while(a)
{cin>>name>>author>>kind>>exist;
p=(Books*)malloc(size);
p->num=num;
p->lent=lent;
p->exist=exist;
strcpy(p->name,name);
strcpy(p->author,author);
strcpy(p->kind,kind);
if(hBook==NULL)
hBook=p;
else
tail->next=p;
tail=p;
cout<<"继续输入?Y=1;N=0"<<endl;
cin>>a;
}
tail->next=NULL;
return hBook;
}
void saveBook(Books *hBook) //图书信息保存
{Books *p;
fstream fp;
fp.open("c:\\book.txt",ios::out);
if(!fp)
{cout<<"文件读取失败!"<<endl;
exit(0);
}
for(p=hBook;p;p=p->next)
fp<<p->name<<" "<<p->author<<" "<<p->kind<<" "<<p->exist<<" "<<p->num<<" "<<p->lent<<'\n';
fp.close();
cout<<"信息保存成功!"<<endl;
}
void IndexBook(Books *hBook) //查找
{
char c='a';
int a,t=1;
char name[20],author[20];
Books *p=hBook;
while(c!=' ')
{
cout<<"按书名查找请输入1,按作者查找请输入2:"<<endl;
cin>>a;
switch(a)
{case 1:cout<<"输入要查找的书名!"<<endl;
cin>>name;
for(p=hBook;p;p=p->next)
if(strcmp(name,p->name)==0)
{cout<<"书名:"<<p->name<<"作者:"<<p->author<<"类型:"<<p->kind<<"库存:"<<p->exist<<"编号:"<<p->num<<"借出:"<<p->lent<<endl;
t=0;
}
if(t) cout<<"未找到!"<<endl;
t=1;
break;
case 2:cout<<"输入要查找的书的作者!"<<endl;
cin>>author;
for(p=hBook;p;p=p->next)
if(strcmp(author,p->author)==0)
{cout<<"书名:"<<p->name<<"作者:"<<p->author<<"类型:"<<p->kind<<"库存:"<<p->exist<<"编号:"<<p->num<<"借出:"<<p->lent<<endl;
t=0;
}
if(t) cout<<"未找到!"<<endl;
t=1;
}
cout<<"继续查找请按回车,结束请按空格"<<endl;
cin.get();
c=cin.get();
}
}
Books *addBook(Books *hBook) //新增图书
{
Books *ptr,*ptr2,*Book,*q=hBook;
int x;
for(;q->next;q=q->next);
int size=sizeof(Books);
char ch='a';
while(ch!=' ')
{
Book=(Books *)malloc(size);
ptr=Book;
cout<<"输入要增加图书信息:书名ENTER作者ENTER类型ENTER库存ENTER"<<endl;
cin>>Book->name>>Book->author>>Book->kind>>Book->exist;
Book->lent=0;
x=q->num;
Book->num=(x+1);
if(hBook==NULL)
{
hBook=ptr;
hBook->next=NULL;
}
else {
for(ptr2=hBook;ptr2;ptr2=ptr2->next)
if(ptr2->next==NULL)
{
ptr2->next=Book;
Book->next=NULL;
break;
}
}
cout<<"继续添加请按回车,结束请按空格!"<<endl;
cin.get();
ch=cin.get();
}
return hBook;
}
Books *delBook(Books *hBook) //删除图书
{
Books *p1,*p2;
char ch='a';
int num;
while(ch!=' ')
{cout<<"请输入要删除的图书编号!"<<endl;
cin>>num;
if(hBook->num==num)
{p2=hBook;
hBook=hBook->next;
free(p2);
}
if(hBook==NULL)
return NULL;
p1=hBook;
p2=hBook->next;
while(p2)
{
if(p2->num==num)
{p1->next=p2->next;
free(p2);
}
else p1=p2;
p2=p1->next;
}
cout<<"继续删除请按回车,结束请按空格"<<endl;
cin.get();
ch=cin.get();
}
return hBook;
}
Books *correctBook(Books *hBook) //修改图书信息
{
Books *p;
int t=1;int num;
char c='a';
while(c!=' ')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -