C语言课程设计作业–图书馆系统
这系统功能挺强大的,管理员密码:666666
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<time.h>
#include<malloc.h>
#include<conio.h>
struct _BOOK//只有价钱 和状态 已经借书人性别是整形
{
char book_name[20];
char book_num[15];
double book_prices;
char author_name[20];
int _state;
char Borrower_name[20];
char Borrower_num[15];
int Borrower_sex;
struct _BOOK *next;
};
struct _VIP//借书人的信息
{
char vip_name[20];
char vip_num[15];
char vip_mm[19];
int vip_sex;
int many;
struct _VIP *next;
};
struct _BOOK *head_book;
struct _VIP *head_vip,*vip=NULL;//该vip是间接地址指针
int login_state,book_many,vip_many;
char _num[20],_mm[20],admin_mm[]="123456";//记录用户的登录信息
int main()
{
struct _BOOK *creat_book();//ok
struct _VIP* creat_vip();//ok
bool check_name(char *s);//
struct _BOOK* look_book0(char *str);
void* p_malloc(int a);
bool add_book();
void delete_book(struct _BOOK *p,int);
void revise_book1(struct _BOOK *p,int);
bool revise_book2(struct _BOOK *p,int);
void revise_book3(struct _BOOK *p,int);
void revise_book4(struct _BOOK *p,int);
bool revise_book5(struct _BOOK *p,int);
bool revise_book0(struct _BOOK *p,int);
void look_book1(struct _BOOK *p,int);
void look_book2(char *name,int);
void look_book3(char *title,int);
struct _VIP* look_vip0(char *num);
void revise_vip1(struct _VIP *p,int);
void revise_vip2(struct _VIP *p,int);
void revise_vip3(struct _VIP *p,int);
void add_vip();
bool vip_login();
bool _continue();
bool borrow_book();
bool back_book();
void book_updated();
void vip_updated();
void all_book(int);
void all_vip();
void reset_book();
void reset_vip();
void revise_color();
head_book=creat_book();//ok
head_vip=creat_vip();//ok
void welcome_op();
void identity_op();
welcome_op();
identity_op();
}
struct _BOOK *creat_book()//创建一个book信息的链表~导入图书信息//OK//
{
struct _BOOK *h,*p,*s;
void* p_malloc(int);
int n;//n为图书的个数
FILE *fp;
if((fp=fopen("book.txt","rb"))==NULL)
{
fp=fopen("book.txt","wb");
int a=0;
fwrite(&a,4,1,fp);
fclose(fp);
printf("未找到book.txt文件,已经自动创建!,请重新启动该程序
");
exit(1);
}
fread(&n,sizeof(int),1,fp);
book_many=n;
h=(struct _BOOK*)p_malloc(sizeof(struct _BOOK));
h->author_name[0]=' ';
h->book_name[0]=' ';
h->book_num[0]=' ';
h->Borrower_name[0]=' ';
h->Borrower_num[0]=' ';
h->_state=0;
h->next=NULL;
p=h;
for(int i=0;i<n;i++)//
{
if((s=(struct _BOOK*)malloc(sizeof(struct _BOOK)))==NULL)
{
printf("error!
");
exit(1);
}
p->next=s;
if(fread(s,sizeof(struct _BOOK),1,fp)==EOF)
break;
s->next=NULL;
p=s;
}//文件读入完成
fclose(fp);
head_book=h;
return h;
}
struct _VIP* creat_vip()//~导入vip信息
{
void* p_malloc(int);
struct _VIP *h,*p,*s;
int n;//n为注册VIP个数
FILE *fp;
if((fp=fopen("vip.txt","rb"))==NULL)//准备读取文件
{
fp=fopen("vip.txt","wb");
int a=0;
fwrite(&a,4,1,fp);
printf("未找到vip.txt文件,已经自动创建!,请重新启动该程序
");
exit(1);
}
fread(&n,sizeof(int),1,fp);
vip_many=n;
h=(struct _VIP*)p_malloc(sizeof(struct _VIP));
h->many=0;
h->vip_mm[0]=' ';
h->vip_name[0]=' ';
h->vip_num[0]=' ';
h->vip_sex=0;
h->next=NULL;
p=h;
for(int i=0;i<n;i++)
{
s=(struct _VIP*)p_malloc(sizeof(struct _VIP));
p->next=s;
if(fread(s,sizeof(struct _VIP),1,fp)==EOF)
{
break;
}
s->next=NULL;
p=s;
}//文件读入完成
fclose(fp);
head_vip=h;
return h;
}
bool check_mm(char *s)//检查mm是否合法,并且带不符合时的警告
{
int len,flag=0;
len=strlen(s);
if(len>=18||len<10)
{
printf(" *密码长度在10~17位之间!!
");
getch();
return 1;
}
for(int i=0;i<len;i++)
{
if( (s[i]>='a'&&s[i]<='z') || (s[i]>='A'&&s[i]<='Z') || s[i]=='_' || (s[i]>='0'&&s[i]<='9') || s[i]=='.')
continue;
else
{
flag=1;
break;
}
}
if(flag)
{
printf("所用密码不合法! 请重新输入
");
getch();
return 1;
}
return 0;
}
bool check_name(char *s)//检查名字是否合格,不允许出现空白符就行
{
int len,flag=0;
len=strlen(s);
if(len>20||len<2)
{
printf(" *****名字太短或太长!
");
getch();
return 1;
}
for(int i=0;i<len;i++)
{
if(s[i]==' '||s[i]==' ')
{
flag=1;
break;
}
}
if(flag)
{
printf(" *****名字不能包含空白符
");
getch();
return 1;
}
return 0;
}
bool check_num(char *s)//检查编号是否符合
{
int len;
len=strlen(s);
if(len!=10)
{
printf(" *编号只能是一串十位的数字编号!
");
getch();
return 1;
}
for(int i=0;i<len;i++)
{
if(s[i]>='0'&&s[i]<='9')
continue;
printf(" *编号只能是一串十位的数字编号!
");
getch();
return 1;
}
return 0;
}
struct _BOOK* look_book0(char *str)//通过*编号*,查找对应书编号结构体所在地址的前一个*地址*,如s的前一个地址//没找到对应编号则返回NULL
{
bool flag=1;
struct _BOOK *p,*s;
p=head_book;
s=p->next;//对s进行判断
while(s!=NULL)
{
flag=strcmp(s->book_num,str);//0是找到了
if(!flag)
break;
p=s;
s=p->next;
}
if(!flag)
return p;
return NULL;
}
void * p_malloc(int a)//带警告的malloc
{
void *p;
if((p=malloc(a))==NULL)
{
printf(" *****error!
");
getch();
exit(1);
}
return p;
}
bool add_book()//书名 作者 编号 价钱//////////////
{
bool revise_book0(struct _BOOK *p,int);
void delete_book(struct _BOOK *p,int);
void reset_book();
void reset_vip();
char *num;
struct _BOOK *p,*s;
num=(char*)p_malloc(15);
s=head_book->next;
p=(struct _BOOK*)p_malloc(sizeof(struct _BOOK));
head_book->next=p;
p->next=s;
do
{
fflush(stdin);
printf(" 请输入新输入书的编号:");
gets(num);
}
while(check_num(num));
if(look_book0(num)!=NULL)
{
printf(" *该书编号已经存在!!
");
getch();
free(num);
free(p);
return 0;
}
strcpy(p->book_num,num);
free(num);
if(!revise_book0(head_book,1))
{
delete_book(head_book,1);
return 0;
}
book_many++;
reset_book();
reset_vip();
printf(" 书籍添加成功
");
getch();
return 1;
}
void delete_book(struct _BOOK *p,int sign)//*删除*对应地址的书的信息//间接指针
{
void reset_book();
struct _BOOK *s;
s=p->next;
p->next=s->next;
free(s);//释放s指向的区域//未测试不知道是否会死机;
book_many--;
if(!sign)
{
printf(" 删除成功
");
getch();
}
}
void revise_book1(struct _BOOK *p,int sign)//通过地址*修改*book的书名//参数的对应编号的地址的前一个地址//sign为1时表明在注册 2表示修改的全体参数
{
struct _BOOK *s;
s=p->next;
char *mod;
mod=(char*)p_malloc(20);
fflush(stdin);
if(sign==1)
printf(" 请输入该书的书名:");
else
printf(" 请输入修改后的书名:");
do
{
gets(mod);
}
while(check_name(mod));
strcpy(s->book_name,mod);
if(!sign)
{
printf(" 修改信息成功
");
getch();
}
free(mod);
}
bool revise_book2(struct _BOOK *p,int sign)//通过地址*修改*借书的状态//进入按提示输入/ 0为不在书架
{
struct _BOOK *s;
bool revise_book5(struct _BOOK *p,int);
s=p->next;
if(sign==1)
printf(" 请确定所添加的该书的状态0/1(1为在书架,0为不在书架):");
else
printf(" 请输入修改后的状态0/1(1为在书架,0为不在书架):");
scanf("%d",&s->_state);
if(s->_state)
{
s->Borrower_name[0]=' ';
s->Borrower_num[0]=' ';
s->Borrower_sex=0;
if(!sign)
{
printf(" 状态信息修改成功
");
getch();
}
return 1;
}
else
{
if(!revise_book5(p,1))
return 0;
else
{
if(!sign)
{
printf("状态信息修改成功
");
getch();
}
return 1;
}
}
}
void revise_book3(struct _BOOK *p,int sign)//通过地址*修改*书的作者名称
{
char *mod;
mod=(char*)p_malloc(20);
fflush(stdin);
do
{
if(sign==1)
printf(" 请输入所进该书的作者名:");
else
printf(" 请输入该书修改后的作者名:");
gets(mod);
}
while(check_name(mod));
p=p->next;
strcpy(p->author_name,mod);
if(!sign)
{
printf(" 修改成功
");
getch();
}
free(mod);
}
void revise_book4(struct _BOOK *p,int sign)//通过地址*修改*书的价格
{
p=p->next;
if(sign==1)
printf(" 请输入该进图书的价格:");
else
printf(" 请输入新的价格:");
scanf("%lf",&p->book_prices);
if(!sign)
{
printf(" 价格修改成功
");
getch();
}
}
bool revise_book5(struct _BOOK *p,int sign)//通过地址修改书的状态信息//改变该间接指向的用户信息
{
struct _VIP *pp,*ss;
struct _BOOK *s;
char *mod;
struct _VIP* look_vip0(char *num);
mod=(char*)p_malloc(20);//输入用户的号码
fflush(stdin);
printf(" 请输入该用户的号码:");
do
{
gets(mod);
}
while(check_num(mod));
if((pp=look_vip0(mod))==NULL)//所要操作的VIP的间接指针
{
printf(" *****抱歉,该用户编号不存在(返回原来的界面)
");
getch();
free(mod);
return 0;
}
ss=pp->next;
s=p->next;
strcpy(s->Borrower_name,ss->vip_name);
strcpy(s->Borrower_num,ss->vip_num);
s->Borrower_sex=ss->vip_sex;
if(!sign)
{
printf("该书用户信息修改成功
");
getch();
}
free(mod);
return 1;
}
bool revise_book0(struct _BOOK *p,int sign)//通过地址*修改*书的所有参数//sign 在此中要么为1要么为2
{
revise_book1(p,sign);
revise_book4(p,sign);
revise_book3(p,sign);
if(!revise_book2(p,sign))
return 0;
return 1;
}
void look_book1(struct _BOOK *p,int sign)//通过地址*输出*书的基本*信息*//0代表基本信息 1代表详细信息***************
{
p=p->next;
printf("《%-20s》 %-18s %-20s %-20.2lf ",p->book_name,p->book_num,p->author_name,p->book_prices);
if(p->_state)
printf("%-20s","在架");
else
printf("%-20s","不在架");
if(!sign)
printf("
");
else
{
printf("%-20s %-20s
",p->Borrower_name,p->Borrower_num);
}
}
void look_book2(char *name,int sign)//通过作者名*输出*书的基本*信息*
{
int flag=0;
struct _BOOK *p,*s;
p=head_book;
s=p->next;
while(s!=NULL)
{
if(!strcmp(s->author_name,name))
{
look_book1(p,sign);
flag++;
}
p=s;
s=p->next;
}
if(!flag)
printf("
抱歉,此书库没有该作者所创作的书...................................
");
else
printf("
以上共有%d个查询结果.....................................
",flag);
getch();
}
void look_book2_(int sign)//带提示输入 book2//OK
{
char *mod;
mod=(char*)p_malloc(20);
fflush(stdin);
do
{
printf(" 请输入作者名:");
gets(mod);
}
while(check_name(mod));
look_book2(mod,sign);
free(mod);
}
void look_book3(char *title,int sign)//通过书名*输出*书的基本*信息*//OK
{
struct _BOOK *p,*s;
int flag=0;
p=head_book;
s=p->next;
while(s!=NULL)
{
if(!strcmp(s->book_name,title))
{
look_book1(p,sign);
flag++;
}
p=s;
s=p->next;
}
if(!flag)
printf("
抱歉,此书库没有该书......................
");
else
printf("
以上共有%d个查询结果......................
",flag);
getch();
}
void look_book3_(int sign)//带提示的 书名 信息//OK
{
char *mod;
mod=(char*)p_malloc(20);
fflush(stdin);
do
{
printf(" 请输入书名:");
gets(mod);
}
while(check_name(mod));
look_book3(mod,sign);
free(mod);
}
void look_book4(int sign)//带提示的 编号找到信息//OK
{
struct _BOOK *p;
char *mod;
mod=(char*)p_malloc(20);
fflush(stdin);
do
{
printf(" 请输入该书的编号:");
gets(mod);
}
while(check_num(mod));
p=look_book0(mod);
if(p==NULL)
{
printf(" *该书编不存在!!!
");
getch();
free(mod);
return;
}
look_book1(p,sign);
getch();
free(mod);
}
struct _VIP* look_vip0(char *num)//通过*vip号码* *找到*对应地址的*前一个地址*
{
struct _VIP *p,*s;
int flag=0;
p=head_vip;
s=p->next;
while(s!=NULL)
{
if(!strcmp(s->vip_num,num))
{
flag=1;
break;
}
p=s;
s=p->next;
}
if(flag)
return p;
else
return NULL;
}
void revise_vip1(struct _VIP *p,int sign)//通过地址*修改*vip性别
{
p=p->next;
printf(" 请确认您的性别0/1(0男 1女):");
scanf("%d",&p->vip_sex);
fflush(stdin);
if(!sign)
{
printf(" 性别修改成功
");
getch();
}
}
void revise_vip2(struct _VIP *p,int sign)//通过地址*修改*密码
{
char *mod;
mod=(char*)p_malloc(20);
p=p->next;
fflush(stdin);
do
{
if(sign)
printf(" 请设置您的密码:");
else
printf(" 请输入您要设置的密码:");
gets(mod);
}
while(check_mm(mod));
strcpy(p->vip_mm,mod);
strcpy(_mm,mod);
if(!sign)
{
printf(" 密码修改成功
");
getch();
}
free(mod);
}
void revise_vip3(struct _VIP *p,int sign)//通过地址*修改*昵称
{
p=p->next;
char *mod;
mod=(char*)p_malloc(20);
fflush(stdin);
do
{
printf(" 请输入您要设置的昵称:");
gets(mod);
}
while(check_name(mod));
strcpy(p->vip_name,mod);
if(!sign)
{
printf(" 昵称修改成功
");
getch();
}
free(mod);
}
void add_vip()//账号 密码 性别 昵称
{
char *num;
void reset_book();
void reset_vip();
struct _VIP *p,*s;
num=(char*)p_malloc(20);
s=head_vip->next;
p=(struct _VIP*)p_malloc(sizeof(struct _VIP));
head_vip->next=p;
p->next=s;
fflush(stdin);
do
{
printf(" 请输入您的学号(工号):");
gets(num);
}
while(check_num(num));
if(look_vip0(num)!=NULL)
{
printf(" *此号码已经存在!!
");
getch();
free(num);
free(p);
return ;
}
strcpy(p->vip_num,num);
free(num);
revise_vip1(head_vip,1);
revise_vip2(head_vip,1);
revise_vip3(head_vip,1);
p->many=0;
vip_many++;
reset_book();
reset_vip();
printf(" 账号注册成功请注意保管
");
getch();
}
bool vip_login()//登陆 登陆成功返回1 失败返回0//没有该账号//密码错误,
{
struct _VIP *p,*s;
fflush(stdin);
do
{
printf(" 请输入您的账号:");
gets(_num);
}
while(check_num(_num));
do
{
printf(" 请输入您的密码:");
gets(_mm);
}
while(check_mm(_mm));
if((p=look_vip0(_num))==NULL)
{
login_state=0;
printf(" *****没有该账号
");
getch();
return 0;
}
else//找到对应的账号
{
s=p->next;
if(strcmp(s->vip_mm,_mm))
{
login_state=0;
printf("密码错误
");
getch();
return 0;
}
login_state=1;
printf("登陆成功
");
getch();
vip=p;//信息导入
return 1;
}
}
bool _continue()//通过发送是否继续,并且加以用户的判断返回对应值
{
char mod;
fflush(stdin);
printf(" continue(y/n)?:");
mod=getchar();
if(mod=='y'||mod=='Y')
return 1;
return 0;
}
bool borrow_book()//借书 借书成功返回1 失败返回0 ///*通过提示输入编号来借书*//不在书架,或者编号不存在返回0
{
char *num;
struct _BOOK *p;
struct _VIP *vvip;
void reset_book();
void reset_vip();
void login_state2();
int flag=0;
num=(char*)p_malloc(20);
do
{
fflush(stdin);
printf(" 请输入所借书的索书号:");
gets(num);
if(!check_num(num))
{
flag=1;
break;
}
printf(" *****您输入的编号不合法!
");
getch();
}
while(_continue());
if(!flag)
{
free(num);
return 0;
}
if((p=look_book0(num))==NULL)
{
printf(" 抱歉没有找到该编号对应的书
");
getch();
free(num);
return 0;
}
p=p->next;//找到对应编号对应的书
vvip=vip->next;
if(!p->_state)
{
printf(" 抱歉该编号对应的书不在书架
");
getch();
free(num);
return 0;
}
p->_state=0;//借书成功
strcpy(p->Borrower_name,vvip->vip_name);
strcpy(p->Borrower_num,vvip->vip_num);
p->Borrower_sex=vvip->vip_sex;
vvip->many++;
reset_book();
reset_vip();
login_state2();
printf(" 借书成功
");
getch();
free(num);
return 1;
}
bool back_book()//还书 通过对应的编号还书//如果用户不想输入或者书编对应的借书人不是自己//或者在书架 /
{
struct _BOOK *p;
struct _VIP *vvip;//中间用一下
void login_state2();
void reset_book();
void reset_vip();
char *num;
int flag=0;
num=(char*)p_malloc(20);
do
{
fflush(stdin);
printf(" 请输入所还书的书编号:");
gets(num);
if(!check_num(num))
{
flag=1;
break;
}
}
while(_continue());
if(!flag)
{
free(num);
return 0;
}
if((p=look_book0(num))==NULL)
{
printf(" *此书编不存在!!!
");
getch();
free(num);
return 0;
}
p=p->next;//有该书
vvip=vip->next;
if(strcmp(p->Borrower_num,vvip->vip_num))
{
printf("抱歉,您未借此编号的书
");
getch();
free(num);
return 0;
}
p->_state=1;
p->Borrower_name[0]=' ';
p->Borrower_num[0]=' ';
vvip->many--;
free(num);
reset_book();
reset_vip();
login_state2();
printf(" 还书成功
");
getch();
return 1;
}
void book_updated()//把所有数据保存
{
struct _BOOK *p,*s;
FILE *fp;
p=head_book;
s=p->next;
if((fp=fopen("d:\bookinformation\book.txt","wb"))==NULL)
{
printf("open file:book error!!
");
exit(1);
}
fwrite(&book_many,sizeof(int),1,fp);
while(s!=NULL)
{
fwrite(s,sizeof(struct _BOOK),1,fp);
p=s;
s=p->next;
}
fclose(fp);
}
void vip_updated()//vip数据保存
{
struct _VIP *pp,*ss;
FILE *fp;
pp=head_vip;
ss=pp->next;
if((fp=fopen("d:\bookinformation\vip.txt","wb"))==NULL)//准备读取文件
{
printf("open file:vip error!!
");
exit(1);
}
fwrite(&vip_many,sizeof(int),1,fp);
while(ss!=NULL)
{
fwrite(ss,sizeof(struct _VIP),1,fp);
pp=ss;
ss=pp->next;
}
fclose(fp);
}
void all_book(int sign)//输出所有书的基本信息
{
system("cls");
struct _BOOK *p,*s;
void print_biao();
void print_biao2();
p=head_book;
s=p->next;
if(!sign)
print_biao();
else
print_biao2();
while(s!=NULL)
{
look_book1(p,sign);
p=s;
s=p->next;
}
printf("
以上共有%d个结果......................
",book_many);
getch();
}
void print_biao()//输出一个book信息表头
{
printf("%-247s %-20s %-20s %-20s %-20s
","书名","编号","作者","价格","状态");
}
void print_biao2()//输出一个详细书籍信息的表头
{
printf("%-24s %-20s %-20s %-20s %-20s%-20s %-20s
","书名","编号","作者","价格","状态","Borrow name","Borrow num");
}
void all_vip()//输出所有VIP的基本信息 测试用
{
struct _VIP *pp,*ss;
pp=head_vip;
ss=pp->next;
while(ss!=NULL)
{
printf("nick:%20s num:%20s mm:%20s sex: ",ss->vip_name,ss->vip_num,ss->vip_mm);
if(ss->vip_sex)
printf("女
");
else
printf("男
");
pp=ss;
ss=pp->next;
}
puts("—————————————————————————————————————————————————————");
printf("
以上共有%d个结果.........................
",vip_many);
getch();
}//2
void free_book()//释放book 链表内存
{
struct _BOOK *p,*s;
p=head_book;
s=p->next;
while(s!=NULL)
{
free(p);
p=s;
s=p->next;
}
free(p);
}
void free_vip()//释放vip链表内存
{
struct _VIP *pp,*ss;
pp=head_vip;
ss=pp->next;
while(ss!=NULL)
{
free(pp);
pp=ss;
ss=pp->next;
}
free(pp);
login_state=0;
}
void reset_book()//用在已经打开链表的情况
{
book_updated();
free_book();
creat_book();
}
void reset_vip()
{
vip_updated();
free_vip();
creat_vip();
}
void welcome_op()//OK 欢迎界面
{
system("cls");
puts(" -----------------------------------------
");
puts(" ----------欢迎进入图书信息管理系统-------
");
puts(" -----------------------------------------
");
getch();
}
void identity_op()// //选择用户界面
{
void _tourist();
void _vip();
void _administrator();
void revise_color();
char flag=0;
do
{
system("cls");
puts(" -----------------------------------------
");
puts(" ① 游客
");
puts(" ② 会员
");
puts(" ③ 管理员
");
puts(" ④ 调色人员
");
puts("
");
fflush(stdin);
printf(" 请确认您的身份:[ ]");
flag=getchar();
switch(flag)
{
case '1':_tourist();break;
case '2':if(vip_login()) _vip();break;//登陆成功才可进入vip页面
case '3':_administrator();break;
case '4':revise_color();break;
default : fflush(stdin);puts(" 您的输入有误,请重新输入.
");puts("plese enter any key return
");getch();
}
}
while(1);//为了减少空间复杂度
}
void _tourist()//OK//游客身份的界面//有BUg 同时输入123时只取第一个
{
char flag=0;
do
{
system("cls");
puts(" 尊敬的游客您好:
");
puts("
");
puts(" 1.查看所有书籍信息
");
puts(" 2.根据书名查看信息
");
puts(" 3.根据作者名查看书籍信息
");
puts(" 4.根据编号查看书籍信息
");
puts(" 5.返回上一界面
");
puts(" 6.注册会员
");
puts(" 7.退出系统
");
puts("
");
fflush(stdin);
printf(" 请输入您要选的功能:[ ]");
flag=getchar();
switch(flag)
{
case '1':all_book(0);break;
case '2':look_book3_(0);break;
case '3':look_book2_(0);break;
case '4':look_book4(0);break;
case '5':return;
case '6':add_vip();break;
case '7':exit(0);
default : fflush(stdin);puts(" *****您的输入有误,请重新输入.
");getch();
}
}
while(1);
}
void _vip()//会员身份的界面//进入就已经登陆 //ok
{
char flag=0;
void revise_vip();
void look_vip(struct _VIP *pp,int);
do
{
system("cls");
puts(" 尊敬的会员您好:
");
puts(" 1.查看所有书籍信息
");
puts(" 2.根据书名查看信息
");
puts(" 3.根据作者名查看书籍信息
");
puts(" 4.根据编号查看书籍信息
");
puts(" 5.借书
");
puts(" 6.还书
");
puts(" 7.查看个人信息
");
puts(" 8.个人信息修改
");
puts(" 9.退出登陆
");
fflush(stdin);
printf(" 请输入您要选的功能:[ ]");
flag=getchar();
switch(flag)
{
case '1':all_book(0);break;
case '2':look_book3_(0);break;
case '3':look_book2_(0);break;
case '4':look_book4(0);break;
case '5':borrow_book();break;
case '6':back_book();break;
case '7':look_vip(vip,0);break;
case '8':revise_vip();break;
case '9':login_state=0;vip=NULL;return;
default : fflush(stdin);puts(" ****您的输入有误,请重新输入.
");getch();
}
}
while(1);
}
void _administrator()//管理员身份
{
char mod[20];
void revise_book_();
void look_vip1();
void delete_vip1();
void delete_vip(struct _VIP *pp);
void delete_book1();
printf("请输入管理员密码:");
scanf("%s",mod);
if(strcmp(mod,admin_mm))
{
puts(" 密码错误!");
getch();
return ;
}
do
{
char flag=0;
system("cls");
puts(" 管理员您好:
");
puts("
");
puts(" 1.查看所有书籍的详细信息
");
puts(" 2.根据书名查看详细信息
");
puts(" 3.根据作者名查看书籍详细信息
");
puts(" 4.根据编号查看书籍详细信息
");
puts(" 5.查看所有vip会员信息
");
puts(" 6.查看某一会员的信息
");
puts(" 7.删除某一会员的信息
");
puts(" 8.添加书籍
");
puts(" 9.删除书籍
");
puts(" a.修改某一书籍的信息
");
puts(" b.返回上一界面
");
puts(" c.退出系统
");
fflush(stdin);
printf(" 请输入您要选的功能:[ ]");
flag=getchar();
switch(flag)
{
case '1':all_book(1);break;
case '2':look_book3_(1);break;
case '3':look_book2_(1);break;
case '4':look_book4(1);break;
case '5':all_vip();break;
case '6':look_vip1();break;
case '7':delete_vip1();break;
case '8':add_book();break;
case '9':delete_book1();break;
case 'a':revise_book_();break;
case 'b':return;
case 'c':exit(0);
default : fflush(stdin);puts(" *****您的输入有误,请重新输入.
");getch();
}
}
while(1);
}
void revise_vip()//修改vip的所有信息
{
void look_vip(struct _VIP *pp,int);
void login_state2();
struct _VIP *pp;
pp=vip;
look_vip(pp,1);
revise_vip1(pp,1);
revise_vip2(pp,1);
revise_vip3(pp,1);
reset_book();
reset_vip();
login_state2();
puts(" 信息修改成功
");
getch();
}
void look_vip(struct _VIP *pp,int sign)//间接地址查看信息
{
pp=pp->next;
if(!sign)
printf("您的个人信息:
");
else if(sign==1)
printf("您此时的个人信息:
");
else
printf("该用户的个人信息:
");
printf("nick:%20s num:%20s mm:%20s 性别: ",pp->vip_name,pp->vip_num,pp->vip_mm);
if(pp->vip_sex)
printf("女
");
else
printf("男
");
if(!sign)
getch();
}
void login_state2()//不带提示信息的重新登陆VIP
{
struct _VIP *pp,*ss;
pp=head_vip;
ss=pp->next;
while(ss!=NULL)
{
if(!strcmp(ss->vip_num,_num))
{
login_state=1;
vip=pp;
return;
}
pp=ss;
ss=pp->next;
}
}
void look_vip1()//带查看某一会员信息
{
struct _VIP *pp;
char *num;
num=(char*)p_malloc(20);
fflush(stdin);
do
{
printf(" 请输入所要查看会员的账号:");
gets(num);
}
while(check_num(num));
if((pp=look_vip0(num))==NULL)
{
printf(" *****该会员不存在!
");
getch();
free(num);
return ;
}
else
{
pp=pp->next;
printf("nick:%20s num:%20s mm:%20s sex: ",pp->vip_name,pp->vip_num,pp->vip_mm);
if(pp->vip_sex)
printf("女
");
else
printf("男
");
getch();
free(num);
return;
}
}
void delete_vip1()//带提示删除会员信息
{
struct _VIP *pp;
char *num;
void delete_vip(struct _VIP *pp);
num=(char*)p_malloc(20);
fflush(stdin);
do
{
printf(" 请输入所要删除会员的账号:");
gets(num);
}
while(check_num(num));
if((pp=look_vip0(num))==NULL)
{
printf(" *****该会员不存在!
");
getch();
free(num);
return ;
}
else
{
look_vip(pp,2);
delete_vip(pp);
printf(" 删除成功
");
getch();
free(num);
return;
}
}
void delete_vip(struct _VIP *pp)//根据间接地址删除会员信息
{
struct _VIP *ss;
ss=pp->next;
pp->next=ss->next;
free(ss);
vip_many--;
reset_vip();
}
void delete_book1()//带提示的删除某一书籍 1表示还书 0表示删除书的操作
{
struct _BOOK *p;
char *num;
num=(char*)p_malloc(20);
fflush(stdin);
do
{
printf("请输入所要删除的书编号:");
gets(num);
}
while(check_num(num));
if((p=look_book0(num))==NULL)
{
free(num);
return;
}
else
{
printf("该书的信息为:
");
print_biao2();
look_book1(p,2);
delete_book(p,1);
reset_book();
reset_vip();
printf("该书已从书库移除
");
getch();
free(num);
return;
}
}
void revise_book_()//带提示的修改书的全部参数
{
struct _BOOK *p;
char *num;
num=(char*)p_malloc(20);
fflush(stdin);
do
{
printf(" 请输入所修改书的编号:");
gets(num);
}
while(check_num(num));
if((p=look_book0(num))==NULL)
{
printf(" *该书编号不存在!!!
");
getch();
free(num);
return;
}
else
{
printf("该书的信息:
");
print_biao2();
look_book1(p,1);
if(!revise_book0(p,2))
{
free(num);
return;
}
else
{
free(num);
reset_book();
reset_vip();
printf(" 该书的所有参数修改成功
");
getch();
return;
}
}
}
void revise_color()
{
system("cls");
char a[2],b[2],color[10]="color ";
puts(" 0 = 黑色
");
puts(" 1 = 蓝色
");
puts(" 2 = 绿色
");
puts(" 3 = 湖蓝色
");
puts(" 4 = 红色
");
puts(" 5 = 紫色
");
puts(" 6 = 黄色
");
puts(" 7 = 白色
");
puts(" 8 = 灰色
");
puts(" 9 = 淡蓝色
");
puts(" A = 淡绿色
");
puts(" B = 淡浅绿色
");
puts(" C = 淡红色
");
puts(" D = 淡紫色
");
puts(" E = 淡黄色
");
puts(" F = 亮白色
");
puts(" 原色 窗口色选0,字体颜色选7");
puts(" 白枫色 窗口色选f,字体颜色选4");
puts(" 请输入窗口背景色 窗口字体颜色(用空格隔开):
");
scanf("%s",a);
scanf("%s",b);
if(((a[0]>='0'&&a[0]<='9')||(a[0]>='A'&&a[0]<='F')||(a[0]>='a'&&a[0]<='f'))&&((b[0]>='0'&&b[0]<='9')||(b[0]>='A'&&b[0]<='F')||(b[0]>='a'&&b[0]<='f')))
{
if(a[0]==b[0])
{
printf("You can't choose the same color
");
getch();
}
else
{
color[6]=a[0];
color[7]=b[0];
color[8]=' ';
system(color);
}
}
else
{
printf("输入格式错误
");
getch();
}
return;
}