简易图书管理系统
1.0版本:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
typedef struct booklist
{
char num[20];
char name[20];
char writer[20];
char press[20];
float price;
int count;
}BOOKS;
typedef struct book
{
Books onebook;
struct book *next;
}BOOK;
void check();
struct book*searchBook (book,char*);
int bookSearch();
void addBook();
int bookAdd();
void bookPrint();
int deleteBook();
void bookDelete();
int choice();
int addFile();
void check()
{
char userName[5];
char userPWD[5];
int i,sum;
for(i = 1; i < 4; i++)
{
printf("**** (用户名和密码均为abcde) ****\n");
printf("**** 请输入您的用户名: ****\n");
gets(userName);
printf("**** 请输入您的密码: ****\n");
gets(userPWD);
if ((strcmp(userName,"abcde")==0) && (strcmp(userPWD,"abcde")==0))
{
printf("*用户名和密码正确,显示主菜单*\n");
return;
}
else
{
if (i < 3)
{
printf("用户名或密码错误,提示用户重新输入");
printf("用户名或密码错误,请重新输入!");
}
else
{
printf("连续3次输错用户名或密码,退出系统。");
printf("您已连续3次将用户名或密码输错,系统将退出!");
exit(1);
}
}
}
}
BOOK *searchBook (BOOK *listptr,char num[])
{
while(listptr!= NULL)
if(strcmp(listptr->onebook.num,num)==0)
return listptr;
else
listptr=listptr->next;
return 0;
}
void bookSearch(BOOK *firstptr)
{
BOOK *ptr;
char booknum[20];
printf("请输入编号:");
scanf("%s",&booknum);
ptr=searchBook(firstptr,booknum);
if (ptr!=NULL)
{
printf("找到了!\n");
printf("编号:%s\n",ptr->onebook.num);
printf("书名:%s\n",ptr->onebook.name);
printf("作者:%s\n",ptr->onebook.writer);
printf("出版社:%s\n",ptr->onebook.press);
printf("价格:%.2f\n",ptr->onebook.price);
printf("数量:%d\n",ptr->onebook.count);
}
else
printf("未发现此书!\n");
}
int addBook(BOOK *listptr,BOOKS note)
{
while(listptr->next!=0)
listptr=listptr->next;
listptr->next=(BOOK *)malloc(sizeof(BOOK));
listptr->next->onebook=note;
listptr->next->next=0;
return 0;
}
void bookAdd(BOOK *listptr,FILE *fp)
{
int p;
struct booklist note;
printf("请输入编号:\n");
scanf("%s",note.num);
printf("请输入书名:\n");
scanf("%s",note.name);
printf("请输入作者:\n");
scanf("%s",note.writer);
printf("请输入出版社:\n");
scanf("%s",note.press);
printf("请输入价格:\n");
scanf("%f",¬e.price);
printf("请输入数量:\n");
scanf("%d",¬e.count);
p=addBook(listptr,note);
if (p==0)
{
fprintf(fp,"%s %s %s %s %.2f %d\n",note.num,note.name
,note.writer,note.press,note.price,note.count);
printf("添加图书成功!\n");
}
else
printf("添加图书失败!\n");
}
void bookPrint(BOOK *listptr)
{
listptr=listptr->next;
while(listptr!= NULL)
{
printf("%s %s %s %s %.2f %d\n",listptr->onebook.num,listptr->onebook.name,
listptr->onebook.writer,listptr->onebook.press,listptr->onebook.price,listptr->onebook.count);
listptr=listptr->next;
}
}
int deleteBook(BOOK *listptr,char num[])
{
while(listptr->next!=NULL)
{
if (strcmp(listptr->next->onebook.num,num)==0)
{
listptr->next=listptr->next->next;
return 0;
}
else
listptr=listptr->next;
}
return -1;
}
void bookDelete(BOOK *listptr,FILE *fp)
{
char booknum[20];
int p;
BOOKS onebook;
printf("请输入编号:");
scanf("%s",&booknum);
p=deleteBook(listptr,booknum);
if (!p)
{
FILE *fpbak;
if ((fpbak=fopen("c:/dao","a+"))==NULL)
printf("文件打开失败!\n");
fseek(fp,0,SEEK_SET);
while((fscanf(fp,"%s %s %s %s %d\n",&onebook.num,&onebook.name
,&onebook.writer,&onebook.press,&onebook.count))!=EOF)
{
if (strcmp(onebook.num,booknum)!=0)
{
fprintf(fpbak,"%s %s %s %s %.2f %d\n",onebook.num,onebook.name,
onebook.writer,onebook.press,onebook.price,onebook.count);
}
}
fclose(fp);
fclose(fpbak);
if (remove("c:/books.txt" ))
{
printf("删除文件成功!\n");
return ;
}
else
if (rename("c:/booksbak.txt" ,"c:/books.txt" ))
{
printf("重命名失败!\n");
return ;
}
printf("删除成功!\n");
}
else
printf("查无此书!\n");
}
int choice()
{
int c;
printf("******************************************************\n");
printf("*** ***\n");
printf("*** 1.遍历图书 ***\n");
printf("*** 2.查找图书 ***\n");
printf("*** 3.添加图书 ***\n");
printf("*** 4.删除图书 ***\n");
printf("*** 0.退出程序 ***\n");
printf("*** 请选择序号: ***\n");
printf("*** ***\n");
printf("******************************************************\n");
scanf("%d",&c);
return c ;
printf("\n");
}
int addFile(FILE *fp,BOOK *firstptr)
{
BOOKS onebook;
while((fscanf(fp,"%s %s %s %s %.2f %d\n",&onebook.num,&onebook.name
,&onebook.writer,&onebook.press,&onebook.price,&onebook.count))!=EOF)
{
while(firstptr->next!=0)
firstptr=firstptr->next;
firstptr->next=(struct book *)malloc(sizeof(struct book));
firstptr->next->onebook=onebook;
firstptr->next->next=0;
}
return 0;
}
int main()
{
printf("***********************图书管理系统*********************\n");
check();
int ch;
BOOK first;
BOOK *stptr;
first.next=0;
BOOK *firstptr = &first;
FILE *fp;
if ((fp=fopen("c:/books.txt" ,"a+"))==NULL)
printf("文件打开失败!");
addFile(fp,firstptr);
while(1)
{
system("cls");
fflush(stdin);
ch=choice();
switch (ch)
{
case 1:
bookPrint(firstptr);
break;
case 2:
bookSearch(firstptr);
break;
case 3:
bookAdd(firstptr,fp);
break;
case 4:
bookDelete(firstptr,fp);
break;
case 0:
printf("谢谢使用...\n");
exit(0);
default:
printf("请输入正确序号!");
}
system("pause");
}
return 0;
}
注:此图书馆管理系统所用链表为有头节点,包含插入,删除,查找,遍历等基本操作(后续将会继续完善)
2.0:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
typedef struct booklist
{
char num[20];
char name[20];
char writer[20];
char press[20];
float price;
int count;
}BOOKS;
typedef struct book
{
struct booklist onebook;
struct book *next;
}BOOK;
BOOK *creat(BOOKS x);
BOOK *searchBook(BOOK *listptr,char num[]);
void check();
void bookSearch(BOOK *firstptr);
int addBook(BOOK **listptr,BOOKS note);
void bookAdd(BOOK *listptr,FILE *fp);
void bookPrint(BOOK *listptr);
int deleteBook(BOOK **listptr);
void bookDelete(BOOK **listptr,FILE *fp);
int choice();
int addFile(FILE *fp,BOOK *firstptr);
void check()
{
char userName[5];
char userPWD[5];
int i;
for(i = 1; i < 4; i++)
{
printf("**** (用户名和密码均为abcde) ****\n");
printf("**** 请输入您的用户名: ****\n");
gets(userName);
printf("**** 请输入您的密码: ****\n");
gets(userPWD);
if ((strcmp(userName,"abcde")==0) && (strcmp(userPWD,"abcde")==0))
{
printf("*用户名和密码正确,显示主菜单*\n");
return;
}
else
{
if (i < 3)
{
printf("用户名或密码错误,提示用户重新输入");
printf("用户名或密码错误,请重新输入!");
}
else
{
printf("连续3次输错用户名或密码,退出系统。");
printf("您已连续3次将用户名或密码输错,系统将退出!");
exit(1);
}
}
}
}
BOOK *creat(BOOKS x)
{
BOOK* tmp = (BOOK*)malloc(sizeof(BOOK));
tmp->onebook = x;
tmp->next = NULL;
return tmp;
}
BOOK *searchBook (BOOK *listptr,char num[])
{
while(listptr!= 0)
if(strcmp(listptr->onebook.num,num)==0)
return listptr;
else
listptr=listptr->next;
return 0;
}
void bookSearch(BOOK *firstptr)
{
BOOK *ptr;
char booknum[20];
printf("请输入编号:");
scanf("%s",&booknum);
ptr=searchBook(firstptr,booknum);
if (ptr!=NULL)
{
printf("找到了!\n");
printf("编号:%s\n",ptr->onebook.num);
printf("书名:%s\n",ptr->onebook.name);
printf("作者:%s\n",ptr->onebook.writer);
printf("出版社:%s\n",ptr->onebook.press);
printf("价格:%.2f\n",ptr->onebook.price);
printf("数量:%d\n",ptr->onebook.count);
}
else
printf("未发现此书!\n");
}
int addBook(BOOK **listptr,BOOKS note)
{
if(*listptr==0)
{
*listptr = creat(note);
}
BOOK *listail = *listptr;
while(listail->next != NULL)
{
listail = listail->next;
}
listail->next = creat(note);
return 0;
}
void bookAdd(BOOK *listptr,FILE *fp)
{
BOOKS note;
fp=fopen("c:/books.txt","w");
if(fopen("c:/books.txt","w")==NULL)
printf("打开文件失败\n");
printf("请输入编号:\n");
scanf("%s",note.num);
printf("请输入书名:\n");
scanf("%s",note.name);
printf("请输入作者:\n");
scanf("%s",note.writer);
printf("请输入出版社:\n");
scanf("%s",note.press);
printf("请输入价格:\n");
scanf("%f",¬e.price);
printf("请输入数量:\n");
scanf("%d",¬e.count);
addBook(&listptr,note);
fputs("\n", fp);
fputs(note.num, fp);
fputs("\n", fp);
fputs(note.name, fp);
fputs("\n", fp);
fputs(note.writer, fp);
fputs("\n", fp);
fputs(note.press, fp);
fputs("\n", fp);
fprintf(fp,"%.2f %d\n",note.price,note.count);
printf("添加图书成功!\n");
fclose(fp);
}
void bookPrint(BOOK *listptr)
{
listptr=listptr->next;
while(listptr!= NULL)
{
printf("%s %s %s %s %.2f %d\n",listptr->onebook.num,listptr->onebook.name,
listptr->onebook.writer,listptr->onebook.press,listptr->onebook.price,listptr->onebook.count);
listptr=listptr->next;
}
}
int deleteBook(BOOK **listptr)
{
if((*listptr)==NULL)
{
return 0;
}
else
{
BOOK *tmp=(*listptr);
(*listptr)=(*listptr)->next;
}
}
void bookDelete(BOOK **listptr,FILE *fp)
{
char booknum[20];
BOOKS onebook;
printf("请输入编号:");
scanf("%s",&booknum);
deleteBook(listptr);
FILE *fpbak;
if((fpbak=fopen("c:/books.txt","a+"))==NULL)
printf("文件打开失败!\n");
fseek(fp,0,SEEK_SET);
while((fscanf(fp,"%s %s %s %s %d\n",&onebook.num,&onebook.name
,&onebook.writer,&onebook.press,&onebook.count))!=EOF)
{
if(strcmp(onebook.num,booknum)!=0)
{
fputs("\n", fp);
fputs(onebook.num, fp);
fputs("\n", fp);
fputs(onebook.name, fp);
fputs("\n", fp);
fputs(onebook.writer, fp);
fputs("\n", fp);
fputs(onebook.press, fp);
fputs("\n", fp);
fprintf(fp,"%.2f %d\n",onebook.price,onebook.count);
}
}
fclose(fp);
fclose(fpbak);
if (remove("c:/books.txt" ))
{
printf("删除文件成功!\n");
return ;
}
else if (rename("c:/booksbak.txt" ,"c:/books.txt" ))
{
printf("重命名失败!\n");
return ;
}
printf("删除成功!\n");
}
int choice()
{
int c;
printf("******************************************************\n");
printf("*** ***\n");
printf("*** 1.遍历图书 ***\n");
printf("*** 2.查找图书 ***\n");
printf("*** 3.添加图书 ***\n");
printf("*** 4.删除图书 ***\n");
printf("*** 0.退出程序 ***\n");
printf("*** 请选择序号: ***\n");
printf("*** ***\n");
printf("******************************************************\n");
scanf("%d",&c);
return c ;
printf("\n");
}
int addFile(FILE *fp,BOOK *firstptr)
{
BOOKS onebook;
fp=fopen("c:/books.txt","a+");
while((fscanf(fp,"%s %s %s %s %.2f %d\n",&onebook.num,&onebook.name
,&onebook.writer,&onebook.press,&onebook.price,&onebook.count))!=EOF)
{
while(firstptr->next!=0)
firstptr=firstptr->next;
firstptr->next=(BOOK *)malloc(sizeof(BOOK));
firstptr->next->onebook=onebook;
firstptr->next->next=NULL;
}
return 0;
fclose(fp);
}
int main()
{
printf("***********************图书管理系统*********************\n");
check();
int ch;
int a = 0;
BOOK first;
BOOK *stptr;
first.next=NULL;
BOOK *firstptr = &first;
FILE *fp;
if ((fp=fopen("C:\\books.txt" ,"w+"))==NULL)
printf("打开文件!");
addFile(fp,firstptr);
while(1)
{
system("cls");
fflush(stdin);
ch=choice();
switch (ch)
{
case 1:
bookPrint(firstptr);
break;
case 2:
bookSearch(firstptr);
break;
case 3:
bookAdd(firstptr,fp);
break;
case 4:
bookDelete(&firstptr,fp);
break;
case 0:
printf("谢谢使用...\n");
exit(0);
default:
printf("请输入正确序号!");
}
system("pause");
}
return 0;
}
注:略有问题,望斧正!
—————————一个永远在路上的编程小菜鸟—