简单小型的图书信息管理系统
身为菜狗能写出来也是蛮不容易的
1、书籍数据文件:每个书籍的信息包含:书名,作者名,类型,出版社,出版时间,销售价格,库存数量;
2、用户数据文件:包含用户名称和密码。
1、用户管理(操作用户数据文件)。
新建用户、修改密码。创建新用户后,将用户信息存储到文件“user.dat”中。
2、新书入库(操作书籍数据文件)。输入你需要添加的书籍信息,根据书名查找相应书籍,如果不存在,执行添加操作,存储到“book.txt”文档。如果存在,系统提示在“此书已存在”。
3、删除书籍(操作书籍数据文件)。根据输入的书名查找相应书籍,如果存在,执行删除操作;如果书籍不存在,系统提示“查无此书”。
4、修改信息(操作书籍数据文件)。根据输入的书名查找相应书籍,如果存在,执行修改操作;如果书籍不存在,系统提示“查无此书”。
5、浏览信息(操作书籍数据文件)。将所含书籍信息的文档“book.txt”经行输出显示。
6、查询书籍
支持以下几种查询方式:
(1)按书名名称查询书籍基本信息(作者名,类型,出版社,出版时间,销售价格,库存数量)
(2)按作者名查询书籍基本信息(书名,类型,出版社,出版时间,销售价格,库存数量)
(3)按类型查询查询书籍基本信息(书名,作者名,出版社,出版时间,销售价格,库存数量)
(4)按出版社查询查询书籍基本信息(书名,作者名,类型,出版时间,销售价格,库存数量)
(5)按出版时间查询查询书籍基本信息(书名,作者名,类型,出版社,销售价格,库存数量)
(6)按销售价格查询查询书籍基本信息(书名,作者名,类型,出版社,出版时间,库存数量)
(7)按库存数量查询查询书籍基本信息(书名,作者名,类型,出版社,出版时间,销售价格)
#include
#include
#include
#define N sizeof(struct BOOK)
#define M sizeof(struct USER)
struct BOOK
{
char name[50]; //书名
char author[50]; //作者名
char type[20]; //类型
char publish[50]; //出版单位
int time ; //出版时间
double price; //价格
int num; //数量
struct BOOK *next; //指针域
};
typedef struct BOOK book ,*linklist;
struct USER
{
char id[50];
char password[20];
struct USER *next1;
};
typedef struct USER user ,*linklist1;
void add(linklist head); //添加
void del(linklist head); //删除
void edit(linklist head); //修改
void print(linklist head); //显示
void find(linklist head); //查找
void NAME1(linklist head); //按书名查找
void AUTHOR1(linklist head); //按作者查找
void TYPE1(linklist head); //按类型查找
void PUBLISH1(linklist head); //按出版社查找
void TIME1(linklist head); //按时间查找
void PRICE1(linklist head); //按价格查找
void NUM1(linklist head); //按数量查找
void output(linklist head); //将链表储存到文件中
void books();
void login(linklist1 head); //用户登录
void creat(linklist1 head); //创建用户
void change(linklist1 head); //修改密码
void output1(linklist1 head);
int main()
{
int select ;
FILE *fp ;
linklist1 head ,p2 ,pre ;
head = (linklist1)malloc(M);
head->next1 = NULL;
pre = (linklist1)malloc(M);
pre = head ;
if((fp = fopen("user.txt","r"))==NULL)
{
printf("打开失败,系统自动退出\n");
exit(0);
}
while(1)
{
p2 = (linklist1)malloc(M);
fscanf(fp,"%s %s",p2->id ,p2->password );
if(feof(fp))
break;
pre->next1 = p2; //尾插法
pre = p2;
}
pre->next1=NULL;
fclose(fp);
while(1)
{
printf("===================================\n");
printf(" 图书管理系统\n");
printf(" 1: 用户登录\n");
printf(" 2: 注册新用户\n");
printf(" 3: 修改密码\n");
printf(" 0: 退出系统\n");
printf("===================================\n");
printf("请输入菜单项:\n\n");
scanf("%d",&select);
printf("\n");
switch(select)
{
case 1:
login(head);
break;
case 2:
creat(head);
output1(head);
break;
case 3:
change(head);
output1(head);
break;
case 0:
exit (0);
}
}
return 0;
}
void change(linklist1 head)
{
linklist1 pre=head,p;
int flag=0;
char m[20];
p=(linklist1)malloc(M);
printf("请输入修改用户名\n");
printf("\n");
scanf("%s",p->id);
printf("\n");
while(pre->next1)
{
if(strcmp(pre->next1->id,p->id)==0)
{
flag=1;
break;
}
pre=pre->next1;
}
if(flag==0)
{
printf("用户不存在\n");
}
else
{
printf("请输入密码:\n");
printf("\n");
scanf("%s",m);
printf("\n");
if(strcmp(pre->next1->password,m)==0)
{
printf("请输入修改密码:\n");
printf("\n");
scanf("%s",p->password);
printf("\n");
p->next1=pre->next1->next1;
pre->next1=p;
printf("修改成功\n");
}
else
printf("密码错误\n");
}
printf("\n");
}
void creat(linklist1 head)
{
linklist1 pre = head,p;
int flag=0;
p=(linklist1)malloc(M);
printf("请输入用户名称:\n");
printf("\n");
scanf("%s",p->id);
printf("\n");
while(pre->next1)
{
pre=pre->next1;
if(strcmp(pre->id,p->id)==0)
{
printf("此用户已存在\n");
flag=1;
break;
}
}
if(flag==0)
{
printf("请输入6位密码\n");
printf("\n");
scanf("%s",p->password);
printf("\n");
p->next1=pre->next1;
pre->next1=p;
printf("注册成功\n");
}
printf("\n");
}
void login(linklist1 head)
{
int flag=0 ;
linklist1 pre=head,p ;
p=(linklist1)malloc(M);
printf("请输入用户名:\n");
printf("\n");
scanf("%s",p->id);
printf("\n");
while(pre->next1)
{
pre=pre->next1;
if(strcmp(pre->id,p->id)==0)
{
flag=1;
break;
}
}
if(flag==0)
{
printf("用户不存在\n");
printf("\n");
}
else
{
printf("请输入密码:\n");
printf("\n");
scanf("%s",p->password);
printf("\n");
if(strcmp(pre->password,p->password)==0)
books();
else
{
printf("密码错误\n");
printf("\n");
}
}
}
void books()
{
int select ;
FILE *fp ;
linklist head ,p2 ,pre ;
head = (linklist)malloc(N);
head->next = NULL;
pre = (linklist)malloc(N);
pre = head ;
if((fp = fopen("book.txt","r"))==NULL)
{
printf("打开失败,系统自动退出\n");
exit(0);
}
while(1)
{
p2 = (linklist)malloc(N);
fscanf(fp,"%s %s %s %s %d %lf %d",p2->name ,p2->author ,p2->type ,p2->publish ,&p2->time ,&p2->price ,&p2->num );
if(feof(fp))
break;
pre->next = p2; //尾插法
pre = p2;
}
pre->next=NULL;
fclose(fp);
while(1)
{
printf("===================================\n");
printf(" 欢迎来到图书管理系统\n");
printf(" 1: 新书入库\n");
printf(" 2: 删除书籍\n");
printf(" 3: 修改信息\n");
printf(" 4: 浏览信息\n");
printf(" 5: 查询书籍\n");
printf(" 0: 退出系统\n");
printf("===================================\n");
printf("请输入菜单项:\n\n");
scanf("%d",&select);
printf("\n");
switch(select)
{
case 1:
add(head);
printf("现在的图书信息为:\n");
print(head);
output(head);
break;
case 2:
del(head);
printf("现在的图书信息为:\n");
print(head);
output(head);
break;
case 3:
edit(head);
printf("现在的图书信息为:\n");
print(head);
output(head);
break;
case 4:
printf("现在的图书信息为:\n");
print(head);
break;
case 5:
find(head);
break;
case 0:
exit (0);
}
}
}
void print(linklist head)
{
printf("====================================图书总览==========================================\n");
printf("书名 作者名 类型 出版社 时间 价格 数量\n");
linklist p=head->next;
while(p)
{
printf("%-30s%-10s%-10s%-20s%-6d%-6.2lf %-2d\n",p->name ,p->author ,p->type ,p->publish ,p->time ,p->price ,p->num);
p=p->next;
}
printf("\n");
}
void add(linklist head)
{
printf("请输入增添图书信息\n");
printf("按照书名,作者,类型,出版社,时间,价格,数量依次输入\n");
linklist pre = head,p;
int flag=0,n;
p=(linklist)malloc(N);
printf("\n");
scanf("%s %s %s %s %d %lf %d",p->name ,p->author ,p->type ,p->publish ,&p->time ,&p->price ,&p->num );
printf("\n");
while(pre->next)
{
pre=pre->next;
if(strcmp(pre->name,p->name)==0)
{
printf("此书已存在\n");
flag=1;
break;
}
}
if(flag==0)
{
p->next=pre->next;
pre->next=p;
printf("\n");
printf("添加成功!\n");
}
printf("\n");
printf("继续添加请输入1,输入其他数字返回首页\n");
printf("\n");
scanf("%d",&n);
if(n==1)
add(head);
printf("\n");
}
void del(linklist head)
{
linklist p = head->next ,pre = head ,q=head;
char NAME[50] ;
int flag=0,n;
printf("请输入删除图书的名字:\n");
printf("\n");
scanf("%s",NAME);
while(q)
{
if(strcmp(q->name,NAME)==0)
{
flag=1;
break;
}
q=q->next;
}
if(flag==0)
{
printf("\n");
printf("查无此书\n\n");
}
else
{
while(p)
{
if(strcmp(p->name,NAME)==0)
{
pre->next = p->next;
free(p);
}
else
{
pre=p;
p=p->next;
}
}
printf("\n");
printf("删除成功!\n");
}
printf("\n");
printf("继续删除请输入1,输入其他数字返回首页\n");
printf("\n");
scanf("%d",&n);
printf("\n");
if(n==1)
del(head);
printf("\n");
}
void edit(linklist head)
{
printf("请输入修改图书的书名:\n");
printf("\n");
linklist p ,q=head;
char NAME[50];
int flag=0,n;
scanf("%s",NAME);
printf("\n");
p = (linklist)malloc(N);
while(q->next)
{
if(strcmp(q->next->name,NAME)==0)
{
flag=1;
break;
}
q=q->next;
}
if(flag==0)
{
printf("查无此书\n");
}
else
{
printf("输入修改信息:\n");
printf("按照书名,作者,类型,出版社,时间,价格,数量依次输入\n");
printf("\n");
scanf("%s %s %s %s %d %lf %d",p->name ,p->author ,p->type ,p->publish ,&p->time ,&p->price ,&p->num );
p->next=q->next->next;
q->next=p;
printf("\n");
printf("修改成功\n");
}
printf("\n");
printf("继续修改请输入1,输入其他数字返回首页\n");
printf("\n");
scanf("%d",&n);
printf("\n");
if(n==1)
edit(head);
printf("\n");
}
void find(linklist head)
{
int select;
printf("===================================\n");
printf(" 1:按书名查询\n");
printf(" 2:按作者查询\n");
printf(" 3:按类型查询\n");
printf(" 4:按出版社查询\n");
printf(" 5:按年份查询\n");
printf(" 6:按价格查询\n");
printf(" 7:按数量查询\n");
printf("===================================\n");
printf("请输入菜单项\n");
printf("\n");
scanf("%d",&select);
printf("\n");
switch(select)
{
case 1:
NAME1(head);
break;
case 2:
AUTHOR1(head);
break;
case 3:
TYPE1(head);
break;
case 4:
PUBLISH1(head);
break;
case 5:
TIME1(head);
break;
case 6:
PRICE1(head);
break;
case 7:
NUM1(head);
break;
}
}
void NAME1(linklist head) //按名字查找
{
linklist p=head;
char NAME[50];
int flag=0,n;
printf("请输入要查找的书名:\n");
printf("\n");
scanf("%s",NAME);
printf("\n");
while(p)
{
if(strcmp(p->name,NAME)==0)
{
flag=1;
break;
}
p=p->next;
}
if(flag==0)
{
printf("查无此书\n");
}
else
{
printf("====================================图书总览==========================================\n");
printf("书名 作者名 类型 出版社 时间 价格 数量\n");
while(p)
{
if(strcmp(p->name,NAME)==0)
{
printf("%-30s%-10s%-10s%-20s%-6d%-6.2lf %-2d\n",p->name ,p->author ,p->type ,p->publish ,p->time ,p->price ,p->num);
}
p=p->next;
}
}
printf("\n");
printf("继续查询请输入1,输入其它数字返回首页\n");
printf("\n");
scanf("%d",&n);
if(n==1)
{
find(head);
}
printf("\n");
}
void AUTHOR1(linklist head) //按作者查找
{
linklist p=head;
char AUTHOR[50];
int flag=0,n;
printf("请输入要查找的作者:\n");
printf("\n");
scanf("%s",AUTHOR);
printf("\n");
while(p)
{
if(strcmp(p->author,AUTHOR)==0)
{
flag=1;
break;
}
p=p->next;
}
if(flag==0)
{
printf("查无此书\n");
}
else
{
printf("====================================图书总览==========================================\n");
printf("书名 作者名 类型 出版社 时间 价格 数量\n");
while(p)
{
if(strcmp(p->author,AUTHOR)==0)
{
printf("%-30s%-10s%-10s%-20s%-6d%-6.2lf %-2d\n",p->name ,p->author ,p->type ,p->publish ,p->time ,p->price ,p->num);
}
p=p->next;
}
}
printf("\n");
printf("继续查询请输入1,输入其它数字返回首页\n");
printf("\n");
scanf("%d",&n);
if(n==1)
{
find(head);
}
printf("\n");
}
void TYPE1(linklist head) //按类型查找
{
linklist p=head;
char TYPE[20];
int flag=0,n;
printf("请输入要查找的类型:\n");
printf("\n");
scanf("%s",TYPE);
printf("\n");
while(p)
{
if(strcmp(p->type,TYPE)==0)
{
flag=1;
break;
}
p=p->next;
}
if(flag==0)
{
printf("查无此书\n");
}
else
{
printf("====================================图书总览==========================================\n");
printf("书名 作者名 类型 出版社 时间 价格 数量\n");
while(p)
{
if(strcmp(p->type,TYPE)==0)
{
printf("%-30s%-10s%-10s%-20s%-6d%-6.2lf %-2d\n",p->name ,p->author ,p->type ,p->publish ,p->time ,p->price ,p->num);
}
p=p->next;
}
}
printf("\n");
printf("继续查询请输入1,输入其它数字返回首页\n");
printf("\n");
scanf("%d",&n);
if(n==1)
{
find(head);
}
printf("\n");
}
void PUBLISH1(linklist head) //按出版社查找
{
linklist p=head;
char PUBLISH[50];
int flag=0,n;
printf("请输入要查找的出版社:\n");
printf("\n");
scanf("%s",PUBLISH);
printf("\n");
while(p)
{
if(strcmp(p->publish,PUBLISH)==0)
{
flag=1;
break;
}
p=p->next;
}
if(flag==0)
{
printf("查无此书\n");
}
else
{
printf("====================================图书总览==========================================\n");
printf("书名 作者名 类型 出版社 时间 价格 数量\n");
while(p)
{
if(strcmp(p->publish,PUBLISH)==0)
{
printf("%-30s%-10s%-10s%-20s%-6d%-6.2lf %-2d\n",p->name ,p->author ,p->type ,p->publish ,p->time ,p->price ,p->num);
}
p=p->next;
}
}
printf("\n");
printf("继续查询请输入1,输入其它数字返回首页\n");
printf("\n");
scanf("%d",&n);
if(n==1)
{
find(head);
}
printf("\n");
}
void TIME1(linklist head) //按时间查找
{
linklist p=head;
int TIME;
int flag=0,n;
printf("请输入要查找的时间:\n");
printf("\n");
scanf("%d",&TIME);
printf("\n");
while(p)
{
if(p->time==TIME)
{
flag=1;
break;
}
p=p->next;
}
if(flag==0)
{
printf("查无此书\n");
}
else
{
printf("====================================图书总览==========================================\n");
printf("书名 作者名 类型 出版社 时间 价格 数量\n");
while(p)
{
if(p->time==TIME)
{
printf("%-30s%-10s%-10s%-20s%-6d%-6.2lf %-2d\n",p->name ,p->author ,p->type ,p->publish ,p->time ,p->price ,p->num);
}
p=p->next;
}
}
printf("\n");
printf("继续查询请输入1,输入其它数字返回首页\n");
printf("\n");
scanf("%d",&n);
if(n==1)
{
find(head);
}
printf("\n");
}
void PRICE1(linklist head) //按价格查找
{
linklist p=head;
double PRICE;
int flag=0,n;
printf("请输入要查找的最高价格:\n");
printf("\n");
scanf("%lf",&PRICE);
printf("\n");
while(p)
{
if(p==head)
p=p->next;
else
{
if(p->price<=PRICE)
{
flag=1;
break;
}
p=p->next;
}
}
if(flag==0)
{
printf("查无此书\n");
}
else
{
printf("====================================图书总览==========================================\n");
printf("书名 作者名 类型 出版社 时间 价格 数量\n");
while(p)
{
if(p->price<=PRICE)
{
printf("%-30s%-10s%-10s%-20s%-6d%-6.2lf %-2d\n",p->name ,p->author ,p->type ,p->publish ,p->time ,p->price ,p->num);
}
p=p->next;
}
}
printf("\n");
printf("继续查询请输入1,输入其它数字返回首页\n");
printf("\n");
scanf("%d",&n);
if(n==1)
{
find(head);
}
printf("\n");
}
void NUM1(linklist head) //按数量查找
{
linklist p=head;
int NUM;
int flag=0,n;
printf("请输入要查找的数量:\n");
printf("\n");
scanf("%d",&NUM);
printf("\n");
while(p)
{
if(p->num==NUM)
{
flag=1;
break;
}
p=p->next;
}
if(flag==0)
{
printf("查无此书\n");
}
else
{
printf("====================================图书总览==========================================\n");
printf("书名 作者名 类型 出版社 时间 价格 数量\n");
while(p)
{
if(p->num==NUM)
{
printf("%-30s%-10s%-10s%-20s%-6d%-6.2lf %-2d\n",p->name ,p->author ,p->type ,p->publish ,p->time ,p->price ,p->num);
}
p=p->next;
}
}
printf("\n");
printf("继续查询请输入1,输入其它数字返回首页\n");
printf("\n");
scanf("%d",&n);
if(n==1)
{
find(head);
}
printf("\n");
}
void output(linklist head) //将链表储存到文件中
{
linklist p=head->next;
FILE *fp;
fp=fopen("book.txt","w");
if(fp==NULL)
{
printf("文件打开失败,自动退出系统\n");
exit(0);
}
while(p)
{
fprintf(fp,"%s %s %s %s %d %lf %d\n",p->name ,p->author ,p->type ,p->publish ,p->time ,p->price ,p->num );
p=p->next;
}
fclose(fp);
}
void output1(linklist1 head)
{