当前位置:首页 » 编程语言 » 图书馆理系统c语言
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

图书馆理系统c语言

发布时间: 2022-12-21 12:06:23

c语言图书管理系统

这不是按你这个要求的图书管理系统,不过你可以修改一下,你自己看下吧。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//
#define MAXSIZE 100 //最大值定义为100
#define LIST_INIT_SIZE 100//图书证使用者最大值定义为100
//借书人的结构体

typedef struct Boro//借书行为
{
char BNum[20];//借书的书号
char RetDate[8];//归还日期
struct Boro *next;
}Bor;

typedef struct LinkBook
{
Bor *next;//该图书证的借书行为
char CNum[20];//证号
int Total;//借书的数量
}lend[LIST_INIT_SIZE];//借书人数组

//图书的结构体信息

typedef struct LNode
{
char CardNum[20];//图书证号
struct LNode *next;
}LinkList; //借书人

typedef struct book
{//每种图书需要登记的内容包括书号ISBN、书名、作者、出版社、总库存量和现库存量。
char num[20];//书号
char name[20];//书名
char auth[20];//作者
char pub[20];//出版社
int TotNum;//总库存
int NowNum;//现库存
LinkList *next;//借了该书的人
}ook[MAXSIZE];
//

int Retotal;//读者数量
int total; //定义外部变量.书的种类数
//
//结构体初始化
void InitBo(ook &boo) //初始化图书信息
{
for(int i=0;i<MAXSIZE;i++)
{
boo[i].NowNum=0;
boo[i].TotNum=0;
boo[i].next=NULL;
}
}

void InitRe(lend &Lin) //初始化借阅者信息
{
for(int i=0;i<LIST_INIT_SIZE;i++)
Lin[i].next=NULL;
}

//

int mid=0;//外部函数mid,用来返回查找到的位置

bool BinarySearch(ook boo,char SearchNum[]) //二分法查找比较书号
{ //用bool函数,但由于函数不能有两个返回值,所以设置一个外部变量mid,用来返回查找到的位置
int low=0,high=total-1;
int found=0;
while(low<=high)
{
mid=(low+high)/2; //中间点
if(strcmp(boo[mid].num,SearchNum)==0) //书号相同
{
found=1;
return true;
}//查找成功
if(strcmp(boo[mid].num,SearchNum)!=0)//书号不同
high=mid-1;
else low=mid+1;
}
if(found==0)
return false; //查找失败
}

void Buy(ook &boo, char BuyNum[])
{//1、 采编入库:新购入一种书,如果该书在图书账目中已经存在,则将其库存量增加(包
//括总库存量和现库存量),如果该书不存在,则在图书账目中增加一种书,总库存量和现库存量均为1。
if(BinarySearch(boo,BuyNum)) //如果书库中有此书
{
boo[mid].TotNum++; //总库存加1
boo[mid].NowNum++; //现库存加1
printf("入库成功.\n");
printf("已更改书库中该书的信息。编号 %s 的书 %s 作者是 %s ,出版社是 %s ,目前的总库存是 %d ,现库存是 %d 。\n",boo[mid].num,boo[mid].name,boo[mid].auth,boo[mid].pub,boo[mid].TotNum,boo[mid].NowNum);
}
if(!BinarySearch(boo,BuyNum))
{
int i;
for(i=total;i>mid&&total;i--) //插在适合位置 保持有序
boo[i]=boo[i-1]; //空出插入位置

printf("该书在书库中不存在。设立新书目,请补全书的详细信息。\n");
strcpy(boo[i].num,BuyNum);
printf("该书购入的数量是:");
scanf(" %d",&boo[i].NowNum);
boo[i].TotNum=boo[i].NowNum;
printf("该书的名字是:");
scanf(" %s",&boo[i].name);
printf("该书的作者是:");
scanf(" %s",&boo[i].auth);
printf("该书的出版社是:");
scanf(" %s",&boo[i].pub);//补全信息
boo[i].next=NULL;
total++;//总量+1
printf("已增加该书的信息。编号 %s 的书 %s 作者是 %s ,出版社是 %s ,目前的总库存是 %d ,现库存是 %d 。\n",boo[i].num,boo[i].name,boo[i].auth,boo[i].pub,boo[i].TotNum,boo[i].NowNum);
printf("入库成功.\n");
}
}

void Delete(ook &boo,char DeleteNum[])
{//2、 清空库存:某一种书已无保留价值,将它从图书账目中注销。

if(BinarySearch(boo,DeleteNum)==false||total==0) //如果无此书
printf("书库中没有该书.\n");
if(BinarySearch(boo,DeleteNum))//若有
{
if(!boo[mid].next)
{
int j;
for( j=mid;j<total;j++)
boo[j]=boo[j+1];

strcpy(boo[j].num,boo[j+1].num);
strcpy(boo[j].name,boo[j+1].name);
strcpy(boo[j].auth,boo[j+1].auth);
strcpy(boo[j].pub,boo[j+1].pub);
boo[j].TotNum=boo[j+1].TotNum;
boo[j].NowNum=boo[j+1].NowNum;
printf("已成功删除该书.\n");
}

else printf("该书有借阅者,无法删除。\n");

}
}

void Borrow(ook &boo,lend &Lin,char BorrowNum[],char CaNum[])
{//3、 借阅:如果一种书的现库存量大于零,则借出一本书,将现库存量减1,
//并登记借阅者的图书证号和归还期限。

Bor *p,*q;
LinkList *m,*n;
if(!BinarySearch(boo,BorrowNum)||total==0) //如果没有找到此书
printf("书库里没这书。\n");//如果有这书

if(BinarySearch(boo,BorrowNum)) //书库里有
{
if(boo[mid].NowNum>0) //看现库存是否大于0
{
boo[mid].NowNum--;//借出一本,少1
if(boo[mid].next==NULL) //若该书信息下显示该种书还没被人借过
{
m=(LinkList *)malloc(sizeof(LNode));//分配
boo[mid].next=m;//该图书信息中的链表的第一个结点
strcpy(m->CardNum,CaNum);
m->next=NULL;//后一个结点为空
}
else //如果已经有人在借这书了
{
m=boo[mid].next;
while(m->next) //遍历到最后一个结点
m=m->next;
n=(LinkList *)malloc(sizeof(LNode));//分配空间,增加1个结点
m->next=n;
strcpy(n->CardNum,CaNum);//记录证号
n->next=NULL;
}
int i=0;
for(i=0;i<Retotal;i++)//
{
if(!strcmp(Lin[i].CNum,CaNum))//如果已经有该图书证的信息
{
p=Lin[i].next;
while(p->next)p=p->next;//遍历到最后一个结点
q=(Bor *)malloc(sizeof(Boro));//分配空间
p->next=q;
strcpy(q->BNum,BorrowNum); //记录书号
printf("输入归还日期:");
scanf("%s",&q->RetDate);
q->next=NULL;
printf("借阅成功.\n");
break; //找到证了就跳出循环
}
}
if(i==Retotal)//如果没有这张证的信息
{
strcpy(Lin[i].CNum,CaNum); //记录证号
p=(Bor *)malloc(sizeof(Boro)); //分配空间
Lin[i].next=p;
strcpy(p->BNum,BorrowNum);
printf("输入归还日期:");
scanf(" %s",&p->RetDate);
p->next=NULL;
Retotal++; //借阅证号信息总数加1
printf("借阅成功.\n");
}
}
else printf("借阅失败.该书现在库存为0.\n");
}
}

void Return(ook &boo,lend &Lin,char ReturnNum[],char BorrowerNum[])
{//4、 归还:注销对借阅者的登记,改变该书的现存量。
Bor *p,*q;
LinkList *m,*n;
int flag=0;//设置一个参数
if(!BinarySearch(boo,ReturnNum)||!total) //没书
printf("书库中无此书.\n");
if(BinarySearch(boo,ReturnNum)) //有书
{
m=boo[mid].next;
if(!strcmp(m->CardNum,BorrowerNum)) //如果是第一个借的人还的
{
boo[mid].NowNum++; //现库存加1
boo[mid].next=m->next; //删除结点
free(m); //释放该结点的空间空间
}
else
{
while(m->next) //查找归还者的借阅者结点
{
if(!strcmp(m->next->CardNum,BorrowerNum)) //如果找到
{
n=m->next; //n为归还者的借阅结点
m->next=n->next; //m指向归还者的借阅结点的下一结点
free(n); //释放空间
boo[mid].NowNum++; //现库存加1
break;
}
m=m->next;
}
}
}
//在借阅者表里查找借阅者信息
for(int i=0;i<Retotal;i++)
{
if(!strcmp(Lin[i].CNum,BorrowerNum)) //如果找到借阅者
{
p=Lin[i].next;
if(!strcmp(p->BNum,ReturnNum)) //如果是归还的是借的第一本书
{
Lin[i].next=p->next; //指向下一借书结点
free(p); //释放结点空间
printf("成功归还该书.\n");
flag=1;
break;
}
else //找不到
{
while(p->next) //找到归还书的借书结点
{
if(!strcmp(p->next->BNum,ReturnNum)) //如果找到
{
q=p->next; //q为归还书的借书结点
p->next=q->next; //p指向下一借书结点
free(q); //释放空间
printf("成功归还该书.\n");
flag=1;
break;
}
p=p->next;
}
}
}
}
for(int k=0;k<Retotal;k++)
if(!Lin[k].next)
{
int j;
for(j=k;j<Retotal;j++)
Lin[j]=Lin[j+1]; //其后都往前移一位,覆盖掉当前信息
strcpy(Lin[j].CNum," "); //删除图书证号
Retotal--; //图书证数减1
} //删除当前状态下没借书的图书证的信息,节省空间
if(flag==0) printf("无该证信息.\n");
}

//5、 查找:实现按三种查询条件之一查找:按书号查找、
//按书名查找、按作者查找。注:可不实现组合查找,即几个条件组合查找。
void SearchByNum(ook &boo,char SeaNum[])
{//BY NUM 根据书号查找
LinkList *p;
p=boo[mid].next;
if(BinarySearch(boo,SeaNum)==false)printf("对不起,未找到您想查找的书。\n");//二分查找 没找到
else//找到了的话
{
{
printf("┏━━━━━━━┳━━━━━━━┳━━━━━━━━┳━━━━━━━━┳━━━━━┳━━━━━┓\n");
printf("┃ 书号 ┃ 书名 ┃ 作者 ┃ 出版社 ┃ 现库存 ┃ 总库存 ┃\n");
printf("┣━━━━━━━╋━━━━━━━╋━━━━━━━━╋━━━━━━━━╋━━━━━╋━━━━━┫\n");
printf("┃%14s┃%14s┃%16s┃%16s┃%10d┃%10d┃\n",boo[mid].num,boo[mid].name,boo[mid].auth,boo[mid].pub,boo[mid].NowNum,boo[mid].TotNum);
printf("┗━━━━━━━┻━━━━━━━┻━━━━━━━━┻━━━━━━━━┻━━━━━┻━━━━━┛\n");
if(boo[mid].next!=NULL)
{
printf("┏━━━━━━━┓\n");
printf("┃ 已借该书的 ┃\n");
printf("┃ 图书证号 ┃\n");
while(p)
{
printf("┣━━━━━━━┫\n");
printf("┃%14s┃\n",p->CardNum);
p=p->next;
}
printf("┗━━━━━━━┛\n");
}

}
while(p)
{
printf(" %s ",p->CardNum);//在按书号查找的函数里也显示借了这本书的借阅者的证号
p=p->next;
}
printf(" \n");
}//显示查找的书籍的信息
}

void SearchByName(ook &boo)
{//BY NAME 根据书名查找
char SeaName[20];
printf("输入想查找的书的书名:\n");
scanf(" %s",&SeaName);
printf("找到符合该书名的书的详细信息如下:\n");
for(int i=0;i<total;i++)
{
if(strcmp(SeaName,boo[i].name)==0)//如果书名一样
{
printf("书号:%s\n书名:%s\n作者:%s\n出版社:%s\n总库存量:%d\n现库存量:%d\n\n",boo[i].num,boo[i].name,boo[i].auth,boo[i].pub,boo[i].TotNum,boo[i].NowNum);
}//显示符合信息的所有书籍的信息
}
}

void SearchByAuth(ook &boo)
{// BY AUTH 根据作者查找
char SeaAuth[20];
printf("输入想查找的书的作者:\n");
scanf(" %s",&SeaAuth);
printf("找到符合该作者的书的详细信息如下:\n");
for(int i=0;i<total;i++)
{
if(strcmp(SeaAuth,boo[i].auth)==0)//如果作者一样
{
printf("书号:%s\n书名:%s\n作者:%s\n出版社:%s\n总库存量:%d\n现库存量:%d\n\n",boo[i].num,boo[i].name,boo[i].auth,boo[i].pub,boo[i].TotNum,boo[i].NowNum);
}//显示符合信息的所有书籍的信息
}
}

//6、 查看:可查看某图书证号的借阅者借阅的全部图书,可查看全部超期未还的图书。

void ViewCard(ook &boo,lend &Lin)
{//查看某图书证号的借阅者借阅的全部图书
char Num[20];
printf("请输入您所想要查看的图书证号:\n");
scanf(" %s",&Num);
Bor *p;
int qqq=0;

for(int i=0;i<Retotal;i++)
{
if(strcmp(Lin[i].CNum,Num)==0) //找到该证
{
printf("这个证借的书有:\n");
p=Lin[i].next;
while(p)
{
printf(" %s ",p->BNum); //书号
p=p->next;
}
printf("\n");
qqq=1;
break;
}
}
if(qqq==0)
printf("该证不存在.\n");
}

void ViewBook(ook &boo,lend &Lin)
{//查看全部超期未还的图书
char date[8];
Bor *p;
printf("请输入日期(请按格式20060605输入):\n");
scanf(" %s",&date);
printf("所有超期未还的书有:\n");
for(int i=0;i<Retotal;i++)
{
p=Lin[i].next;
while(p)//当p不空时
{
if(strcmp(p->RetDate,date)<0) //超过日期
{
printf("书号为 %s 证号为 %s 应归还日期为 %s \n",p->BNum,Lin[i].CNum,p->RetDate);
}//显示所有超期未还的书的信息
p=p->next;
}
}
}

void Menu() //菜单
{
printf("┏—————————————————M E N U————————————————┓\n");
printf("│ │\n");
printf("│ 1. 采编入库:新购入一种书,如果该书在图书账目中已经存在, │\n");
printf("│ 则将其库存量增加(包括总库存量和现库存量)。 │\n");
printf("│ 如果该书不存在,则在图书账目中增加一种书, │\n");
printf("│ 总库存量和现库存量均为输入的数字。 │\n");
printf("│ 2. 清空库存:某一种书已无保留价值,将它从图书账目中注销。 │\n");
printf("│ 3. 借阅:如果一种书的现库存量大于零,则借出一本书,将现库存量减1, │\n");
printf("│ 并登记借阅者的图书证号和归还期限。 │\n");
printf("│ 4. 归还:注销对借阅者的登记,改变该书的现存量。 │\n");
printf("│ 5. 按书号查找。 │\n");
printf("│ 6. 按书名查找。 │\n");
printf("│ 7. 按作者查找。 │\n");
printf("│ 8. 查看某图书证号的借阅者借阅的全部图书。 │\n");
printf("│ 9. 查看全部超期未还的图书。 │\n");
printf("│ 0. 退出图书管理系统。 │\n");
printf("│ │\n");
printf("┗—————————————请 选 择 你 需 要 的 操 作————————————┛\n");
}

void main()
{
ook Bo;
lend Lin;
char BNum[20];
char CNum[20];
printf("-----------------------欢 迎 进 入 图 书 管 理 系 统!---------------------------\n\n");
int choice=10;
int SearchCho=10,ViewCho=10;
while(choice!=0)
{
Menu();//显示菜单
scanf(" %d",&choice);
switch(choice)
{
case 1://采编入库
printf("请输入入库的书的书号:");
scanf(" %s",BNum);
Buy(Bo,BNum);
break;

case 2://清空库存
printf("请输入想要清除的书的书号:");
scanf(" %s",BNum);
Delete(Bo,BNum);
break;

case 3://借阅
printf("请输入想要借阅的书的书号:\n");
scanf(" %s",&BNum);
printf("请输入图书证号:");
scanf(" %s",&CNum);
Borrow(Bo,Lin,BNum,CNum);
break;

case 4://归还
printf("请输入想要归还的书的书号:\n");
scanf(" %s",&BNum);
printf("请输入图书证号:");
scanf(" %s",&CNum);
Return(Bo,Lin,BNum,CNum);
break;

case 5://查找//根据书号查找
printf("请输入书号:");//输入书号查找
scanf(" %s",&BNum);
SearchByNum(Bo,BNum);
break;

case 6://根据书名查找
SearchByName(Bo);
break;

case 7://根据作者查找
SearchByAuth(Bo);
break;

case 8://查看某图书证所借的所有书
ViewCard(Bo,Lin);
break;

case 9: //查看全部超期未还的书
ViewBook(Bo,Lin);
break;

case 0://退出系统
exit(0);break;

default:printf("输入错误!\n");exit(0);break;

}
}
}

❷ c语言图书管理系统

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

typedef int BOOL;

typedef struct bookinfo
{
char number[15];/*产品编号*/
char name[30];/*产品名称*/
float price;/*单价*/
char auther[20];/*作者*/
BOOL isExit;/*存在状态*/
char lendername[20];/*借书人姓名*/
char lendersex[2];/*借书人性别*/
char lendernum[15];/*借书人学号*/
}BOOKINFO;

void menu()
{
printf("\n\n\n\n\n\n\n");
printf("\t\t\t图书管理系统\n");
printf("\t\t\t1:新进图书基本信息的输入\n");
printf("\t\t\t2:显示全部记录\n");
printf("\t\t\t3:根据图书名称查询图书基本信息\n");
printf("\t\t\t4:根据图书名称对撤销的图书信息进行删除\n");
printf("\t\t\t5:按照图书名称从小大到排序\n");
printf("\t\t\t6:统计某价格以上的图书数量\n");
printf("\t\t\t7:列出所有未借出去的图书信息\n");
printf("\t\t\t8:退出\n");
}
void choice_1_input_new()/*输入新进的图书信息*/
{
char choice;
FILE *p;
BOOKINFO newbook;

system("cls");
while(1)
{
printf("输入图书编号:");
gets(newbook.number);

printf("输入图书名称:");
gets(newbook.name);

printf("输入图书单价:");
scanf("%f",&newbook.price);
while(getchar()!='\n');

printf("输入图书的作者:");
gets(newbook.auther);

printf("输入借书人姓名:");
gets(newbook.lendername);

printf("输入借书人性别:");
gets(newbook.lendersex);

printf("输入借书人学号:");
gets(newbook.lendernum);

printf("是否保存该条书目?(Y/N)\n");
choice=getch();
while(choice!='Y'&&choice!='y'&&choice!='N'&&choice!='n')
choice=getch();
if(choice=='Y'||choice=='y')
{
newbook.isExit=1;/*将图书状态设置成1,表示没有借出*/

p=fopen("c:\\bookinfo.data","ab");
fwrite(&newbook,sizeof(BOOKINFO),1,p);
fclose(p);

printf("\n该条书目已添加到c:\\bookinfo.data文件中!\n");
}
else
{
printf("\n本条书目未保存!\n");
}
printf("\n是否继续添加书目?(Y/N)\n");
choice=getch();
while(choice!='Y'&&choice!='y'&&choice!='N'&&choice!='n')
choice=getch();
if(choice=='Y'||choice=='y')
continue;
else
break;
}
}
void choice_2_display_all()/*显示全部图书信息*/
{
FILE *p;
int n;
BOOKINFO bookinfo[100];
int booknumber=0;

system("cls");
p=fopen("c:\\bookinfo.data","rb");
while(!feof(p))
{
fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p);
booknumber++;
}
/*booknumber--;使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
booknumber--;
if(booknumber==0)
{
printf("没有任何图书信息!\n\n");
}
else
{
n=0;
printf(" 图书信息如下\n");
printf(" 图书信息 | 借书人信息 \n");
printf("编号 名称 单价 作者 图书状态 | 姓名 性别 学号\n");
while(n<booknumber)
{
printf("%-6s%-12s%-8.1f%-8s%-9d| %-12s%-8s%-8s\n",
bookinfo[n].number,bookinfo[n].name,bookinfo[n].price,
bookinfo[n].auther,bookinfo[n].isExit,bookinfo[n].lendername,
bookinfo[n].lendersex,bookinfo[n].lendernum);
n++;
}
}
printf("\n\n按任意键回到主菜单!\n");
getch();
}

void choice_3_search_according_name()/*根据图书名称显示图书的信息*/
{
char search[20]="";/*search用来存放要查询的书名*/
int n;
FILE *p;
char choice;
BOOKINFO bookinfo[100];
int booknumber=0;

system("cls");
p=fopen("c:\\bookinfo.data","rb");
while(!feof(p))
{
fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p);
booknumber++;
}
booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
while(1)
{
printf("输入要查询的书本名称:");
gets(search);
if(booknumber==0)
{
printf("书库中没有任何信息!\n\n");
printf("按任意键回到主菜单!\n\n");
getch();
break;
}/*if结束*/
else
{
for(n=0;n<booknumber;n++)
if(strcmp(bookinfo[n].name,search)==0)
{
printf("该书的详细信息如下:\n");
printf(" 图书信息 | 借书人信息 \n");
printf("编号 名称 单价 作者 图书状态 | 姓名 性别 学号\n");
printf("%-6s%-12s%-8.1f%-8s%-9d| %-12s%-8s%-8s\n",
bookinfo[n].number,bookinfo[n].name,bookinfo[n].price,
bookinfo[n].auther,bookinfo[n].isExit,bookinfo[n].lendername,
bookinfo[n].lendersex,bookinfo[n].lendernum);
break;
}
if(n>=booknumber)
printf("没有查找该书的任何信息!\n");
printf("\n\n是否继续查询?(Y/N)\n");
choice=getch();
while(choice!='Y'&&choice!='y'&&choice!='N'&&choice!='n')
choice=getch();
if(choice=='Y'||choice=='y')
continue;
else
break;
}/*else结束*/
}/*while(1)结束*/
}
void choice_4_delete_according_name()/*根据图书名称对图书信息进行删除*/
{
char search[20]="";/*search用来存放要删除的书名*/
int n,i;
FILE *p;
char choice;
BOOKINFO bookinfo[100];
int booknumber;

system("cls");
while(1)
{
printf("输入要删除的书本名称:");
gets(search);
p=fopen("c:\\bookinfo.data","rb");
booknumber=0;
while(!feof(p))
{
fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p);
booknumber++;
}
booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
if(booknumber==0)
{
printf("书库中没有任何信息!\n\n");
printf("按任意键回到主菜单!\n\n");
getch();
break;
}/*if结束*/
else
{
for(n=0;n<booknumber;n++)
if(strcmp(bookinfo[n].name,search)==0)
{
break;
}
if(n>=booknumber)
printf("没有查找该书的任何信息!\n");
else
{
printf("是否确认需要删除该条书目?(Y/N)");
choice=getch();
while(choice!='Y'&&choice!='y'&&choice!='N'&&choice!='n')
choice=getch();
if(choice=='Y'||choice=='y')
{
for(i=n;i<booknumber-1;i++)
bookinfo[i]=bookinfo[i+1];
booknumber--;

p=fopen("c:\\bookinfo.data","wb");
for(n=0;n<booknumber;n++)
fwrite(&bookinfo[n],sizeof(BOOKINFO),1,p);
fclose(p);

printf("删除成功!\n");
}
else
printf("\n\n该条书目没有被删除!");
}
printf("\n\n是否继续进行删除操作?(Y/N)\n");
choice=getch();
while(choice!='Y'&&choice!='y'&&choice!='N'&&choice!='n')
choice=getch();
if(choice=='Y'||choice=='y')
continue;
else
break;
}/*else结束*/
}/*while(1)结束*/
}
void choice_5_sort_according_name()/*根据图书名称排序*/
{
FILE *p;
int m,n;
BOOKINFO temp;
BOOKINFO bookinfo[100];
int booknumber;

p=fopen("c:\\bookinfo.data","rb");
booknumber=0;
system("cls");
while(!feof(p))
{
fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p);
booknumber++;
}
booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
if(booknumber==0)
{
printf("没有任何图书信息!\n\n");
}
else
{
for(m=0;m<booknumber-1;m++)
for(n=m+1;n<booknumber;n++)
if(strcmp(bookinfo[m].name,bookinfo[n].name)>0)
{
temp=bookinfo[m];
bookinfo[m]=bookinfo[n];
bookinfo[n]=temp;
}
p=fopen("c:\\bookinfo.data","wb");
for(m=0;m<booknumber;m++)
fwrite(&bookinfo[m],sizeof(BOOKINFO),1,p);
fclose(p);
printf("\n\n完成排序!\n\n");
}
printf("按任意键回到主菜单!\n");
getch();
}

void choice_6_display_high_price()/*根据价格列出图书信息*/
{
float price;
FILE *p;
int n;
int count=0;
BOOKINFO bookinfo[100];
int booknumber;

system("cls");
printf("请输入价格:");
scanf("%f",&price);
p=fopen("c:\\bookinfo.data","rb");
booknumber=0;
while(!feof(p))
{
fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p);
booknumber++;
}
booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
if(booknumber==0)
{
printf("没有任何图书信息!\n\n");
}
else
{
for(n=0;n<booknumber;n++)
{
if(bookinfo[n].price>=price)
count++;
}
if(count==0)
printf("书库中没有比%.1f$价格高的图书!",price);
else
{
printf(" 价格高于%.1f$的图书信息如下\n",price);
printf(" 图书信息 | 借书人信息 \n");
printf("编号 名称 单价 作者 图书状态 | 姓名 性别 学号\n");
for(n=0;n<booknumber;n++)
{
if(bookinfo[n].price>=price)
printf("%-6s%-12s%-8.1f%-8s%-9d| %-12s%-8s%-8s\n",
bookinfo[n].number,bookinfo[n].name,bookinfo[n].price,
bookinfo[n].auther,bookinfo[n].isExit,bookinfo[n].lendername,
bookinfo[n].lendersex,bookinfo[n].lendernum);
}
}
}
printf("\n\n按任意键回到主菜单!\n");
getch();
}
void choice_7_display_according_exitflag()/*根据存在状态列出图书信息*/
{
FILE *p;
int n;
int count=0;
BOOKINFO bookinfo[100];
int booknumber;

system("cls");
booknumber=0;
p=fopen("c:\\bookinfo.data","rb");
while(!feof(p))
{
fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p);
booknumber++;
}
booknumber--;
fclose(p);
if(booknumber==0)
{
printf("书库中没有任何书目存在!\n");
}
else
{
for(n=0;n<booknumber;n++)
if(bookinfo[n].isExit==1)
count++;
if(count==0)
printf("书库中的书籍全部借出!\n");
else
{
printf("书库中未被借出的图书信息如下:\n\n");
printf(" 图书信息 | 借书人信息 \n");
printf("编号 名称 单价 作者 图书状态 | 姓名 性别 学号\n");
for(n=0;n<booknumber;n++)
if(bookinfo[n].isExit==1)
{
printf("%-6s%-12s%-8.1f%-8s%-9d| %-12s%-8s%-8s\n",
bookinfo[n].number,bookinfo[n].name,bookinfo[n].price,
bookinfo[n].auther,bookinfo[n].isExit,bookinfo[n].lendername,
bookinfo[n].lendersex,bookinfo[n].lendernum);
}
}
}
printf("\n按任意键返回主菜单!\n");
getch();
}

void main()
{
char choice;
clock_t tm;
FILE *p;
if((p=fopen("c:\\bookinfo.data","rb"))==NULL)
{
p=fopen("c:\\bookinfo.data","wb");
fclose(p);
}
while(1)
{
system("cls");
menu();
choice=getch();
switch(choice)
{
case '1':choice_1_input_new();break;/*输入新进的图书信息*/
case '2':choice_2_display_all();break;/*显示全部图书信息*/
case '3':choice_3_search_according_name();break;/*根据图书名称显示图书的信息*/
case '4':choice_4_delete_according_name();break;/*根据图书名称对图书信息进行删除*/
case '5':choice_5_sort_according_name();break;/*根据图书名称排序*/
case '6':choice_6_display_high_price();break;/*根据价格列出图书信息*/
case '7':choice_7_display_according_exitflag();break;/*根据存在状态列出图书信息*/
case '8':printf("\n\n\t\t\t谢谢使用,再见!\n\t\t\t按任意键退出!\n");getch();return;
default:
printf("\n\n\t\t\t请输入菜单中的数字!(1~8)");
tm=clock();
while(clock()<tm+1800);
break;
}
}
}
写的很赶,不知道行不行
程序很长,但是没什么复杂的东西。
要是写的不好,楼主就将就吧。

❸ 用C语言编写一个简单的图书管理小程序

源代码如下:

#include<iostream>

#include<iomanip>

#include<string>

#include<fstream>

#include<stdio.h>

using namespace std;

const int maxb=10000; //最多的图书

class book//图书类

{

int tag; //删除标记1:已删0:未删

int number; //isbn书号

char name[20]; //书名

char author[10]; //主编

char number2[10];//版次

char position[20];//出版社

char time[20];//出版年

void addbook(int n,char *na,char *au,char *n2,char *da,char *ti,int pr) //增加图书
{

tag=0;

number=n;

price=pr;

strcpy(name,na);

strcpy(author,au);

strcpy(number2,n2);

strcpy(position,da);

strcpy(time,ti);

onshelf=1;

}

(3)图书馆理系统c语言扩展阅读

1、源程序中,很多符号都是成对匹配出现的,为避免遗漏必须配对使用的符号。

2、用花括号括起来的部分,但从程序结构清晰,便于阅读、理解、维护的角度出发,建议在书写程序时应遵循以下规则,以养成良好的编程习惯。

3、一个说明或一条语句占一行,与该结构开始处的左花括号对齐。

❹ C语言编程图书管理系统

#include#include#include#include#includestructbook{charnumber[100];chartittle[100];charwriter[100];charpublisher[100];chardate[100];charprice[100];charstatus[100];charreader[100];};voidsearch_book();voidborrow_book();voidreturn_book();voidadd_book();voiddelete_book();voidmodify_book();voidscan_book();intmain(){intc1=0,c2,c3;intl,x,z;while(1){system("color2C");printf("\t\t\t^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^\n");printf("\t\t\t|*-*-*-图书管理系统*-*-*|\n");printf("\t\t\t*[1]用户登录*\n");printf("\t\t\t*[2]管理员登录*\n");printf("\t\t\t^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^\n");printf("\n");printf("请选择你的操作:");scanf("%d",&c1);system("cls");break;}if(c1==1){while(1){system("color2C");printf("\t\t\t^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^\n");printf("\t\t\t|*-*-*-图书管理系统*-*-*|\n");printf("\t\t\t*[1]查询图书*\n");printf("\t\t\t|[2]借阅图书|\n");printf("\t\t\t*[3]借还图书*\n");printf("\t\t\t*[4]浏览图书信息*\n");printf("\t\t\t|[5]退出图书管理系统|\n");printf("\t\t\t^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^\n");printf("\n");printf("请选择你的操作:");scanf("%d",&c2);getchar();switch(c2){case1:search_book();break;case2:borrow_book();break;case3:return_book();break;case4:scan_book();break;case5:system("cls");return0;}}}if(c1==2){while(1){system("color2C");printf("\t\t\t^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^\n");printf("\t\t\t|*-*-*-图书管理系统*-*-*|\n");printf("\t\t\t|[1]添加图书|\n");printf("\t\t\t*[2]删减图书*\n");printf("\t\t\t|[3]修改图书信息|\n");printf("\t\t\t*[4]浏览图书信息*\n");printf("\t\t\t|[5]退出图书管理系统|\n");printf("\t\t\t^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^\n");printf("\n");printf("请选择你的操作:");scanf("%d",&c3);getchar();switch(c3){case1:add_book();break;case2:delete_book();break;case3:modify_book();break;case4:scan_book();break;case5:system("cls");return0;}}}}/*查询图书*/voidsearch_book(){FILE*fp;structbookn;structbooknn;intl,r;charx,z;fp=fopen("F:\\课程设计\\图书管理系统.txt","rb");while(1){l=0;system("cls");printf("请输入图书名称:");scanf("%s",n.tittle);fflush(stdin);rewind(fp);while(1){fread(&nn,sizeof(nn),1,fp);if(feof(fp))break;r=strcmp(n.tittle,nn.tittle);if(r==0){l=1;break;}}if(l==0){printf("没有要查询的图书!!!\n\n");}else{printf("查询的图书为:");printf("\n");printf("****************************************\n");printf("编号书名作者出版社出版时间价格状态借阅者\n");printf("\n");printf("%s%s%s%s%s%s%s",nn.number,nn.tittle,nn.writer,nn.publisher,nn.date,nn.price,nn.status,nn.reader);printf("\n\n\n");}printf("是否继续查询图书?[是(y)/否(n)]?\n\n");do{x=getche();}while(x!='n'&&x!='y');if(x=='n')break;}fclose(fp);system("cls");}//添加voidadd_book(){FILE*fp;structbookn;structbooknn;charx,z;intl,r;fp=fopen("F:\\课程设计\\图书管理系统.txt","ab+");do{system("cls");do{l=0;printf("\n");printf("编号书名作者出版社出版时间价格状态借阅者\n");fflush(stdin);scanf("%s%s%s%s%s%s%s%s",n.number,n.tittle,n.writer,n.publisher,n.date,n.price,n.status,n.reader);system("cls");rewind(fp);while(!feof(fp)){fread(&nn,sizeof(nn),1,fp);r=strcmp(n.tittle,nn.tittle);if(r==0){l=1;printf("该图书已存在,请输入新的图书信息:\n\n");break;}}}while(l);fwrite(&n,sizeof(n),1,fp);printf("\n");printf("是否继续输入新的图书信息[y/n]\n\n");do{x=getche();}while(x!='n'&&x!='y');}while(x=='y');fclose(fp);system("cls");}//删除图书voiddelete_book(){FILE*fp,*fp1;charx,z;structbookn;structbooknn;intl,r;fp=fopen("F:\\课程设计\\图书管理系统.txt","ab+");while(1){l=0;system("cls");printf("\n");printf("请输入需要删除的图书名:\n\n");fflush(stdin);scanf("%s",&n.tittle);rewind(fp);while(1){fread(&nn,sizeof(nn),1,fp);if(feof(fp))break;r=strcmp(n.tittle,nn.tittle);if(r==0){l=1;break;}}if(l==0){printf("\n");printf("对不起,未找到该图书\n");}else{printf("\n");printf("****************************************\n");printf("编号书名作者出版社出版时间价格状态借阅者\n");printf("\n");printf("%s%s%s%s%s%s%s%s",nn.number,nn.tittle,nn.writer,nn.publisher,nn.date,nn.price,nn.status,nn.reader);printf("\n");printf("确认删除图书信息?[是(y)/否(n)]\n\n");do{z=getche();}while(z!='n'&&z!='y');if(z=='n')break;else{fp1=fopen("F:\\课程设计\\图书管理系统new.txt","wb");rewind(fp);while(1){fread(&nn,sizeof(nn),1,fp);if(feof(fp))break;r=strcmp(n.tittle,nn.tittle);if(r!=0)fwrite(&nn,sizeof(nn),1,fp1);}fclose(fp);fclose(fp1);fp=fopen("F:\\课程设计\\图书管理系统.txt","wb");fp1=fopen("F:\\课程设计\\图书管理系统new.txt","rb");while(1){fread(&nn,sizeof(nn),1,fp1);if(feof(fp1))break;fwrite(&nn,sizeof(nn),1,fp);}fclose(fp);fclose(fp1);}}printf("\n");printf("是否继续删除图书信息?[是(y)/否(n)]\n");do{x=getche();}while(x!='n'&&x!='y');if(x=='n')break;}fclose(fp);system("cls");}//修改图书信息voidmodify_book(){FILE*fp;structbookn;structbooknn;intl,r;charx,z;fp=fopen("F:\\课程设计\\图书管理系统.txt","rb+");while(1){l=0;printf("\n");system("cls");printf("请输入需要修改的图书名:\n\n");fflush(stdin);scanf("%s",&n.tittle);system("cls");rewind(fp);while(1){fread(&nn,sizeof(nn),1,fp);if(feof(fp))break;r=strcmp(n.tittle,nn.tittle);if(r==0){l=1;break;}}if(l==0){printf("\n");printf("对不起,未找到该图书信息\n\n");}else{printf("\n");printf("****************************************\n");printf("编号书名作者出版社出版时间价格状态借阅者\n");printf("\n");printf("%s%s%s%s%s%s%s%s",nn.number,nn.tittle,nn.writer,nn.publisher,nn.date,nn.price,nn.status,nn.reader);printf("请依次修改图书信息\n\n\n");fflush(stdin);scanf("%s%s%s%s%s%s%s%s",n.number,n.tittle,n.writer,n.publisher,n.date,n.price,n.status,n.reader);fseek(fp,sizeof(nn),1);fwrite(&n,sizeof(nn),1,fp);}printf("\n");printf("是否继续修改用户信息[y/n]?\n\n");do{x=getch();}while(x!='n'&&x!='y');if(x=='n')break;}fclose(fp);system("cls");}//借书voidborrow_book(){FILE*fp;structbookn;structbooknn;charx,z;intl,r;fp=fopen("F:\\课程设计\\图书管理系统.txt","rb+");while(1){l=0;system("cls");printf("\n");printf("请输入需要借阅的图书名:\n");fflush(stdin);scanf("%s",&n.tittle);rewind(fp);while(1){fread(&nn,sizeof(nn),1,fp);if(feof(fp))break;r=strcmp(n.tittle,nn.tittle);if(r==0){l=1;break;}}if(l==0){printf("\n");printf("对不起,未找到该图书。\n");}else{printf("\n");printf("****************************************\n");printf("编号书名作者出版社出版时间价格状态借阅者\n");printf("\n");printf("%s%s%s%s%s%s%s%s",nn.number,nn.tittle,nn.writer,nn.publisher,nn.date,nn.price,nn.status,nn.reader);printf("\n");fflush(stdin);printf("请输入图书信息并修改在库状态及借阅者信息");printf("****************************************\n");printf("编号书名作者出版社出版时间价格状态借阅者\n");printf("\n");scanf("%s%s%s%s%s%s%s%s",n.number,n.tittle,n.writer,n.publisher,n.date,n.price,n.status,n.reader);fseek(fp,sizeof(nn),1);fwrite(&n,sizeof(nn),1,fp);}printf("\n");printf("是否继续借书?[是(y)/否(n)]\n\n");do{x=getch();}while(x!='n'&&x!='y');if(x=='n')break;}fclose(fp);system("cls");}//还书voidreturn_book(){FILE*fp;structbookn;structbooknn;charx,z;intl,r;fp=fopen("F:\\课程设计\\图书管理系统.txt","rb+");while(1){l=0;system("cls");printf("\n");printf("请输入需要借还的图书名:\n");fflush(stdin);scanf("%s",&n.tittle);rewind(fp);while(1){fread(&nn,sizeof(nn),1,fp);if(feof(fp))break;r=strcmp(n.tittle,nn.tittle);if(r==0){l=1;break;}}if(l==0){printf("\n");printf("对不起,未找到该图书。\n");}else{printf("\n");printf("****************************************\n");printf("编号书名作者出版社出版时间价格状态借阅者\n");printf("\n");printf("%s%s%s%s%s%s%s%s",nn.number,nn.tittle,nn.writer,nn.publisher,nn.date,nn.price,nn.status,nn.reader);printf("\n");fflush(stdin);printf("请输入图书信息并修改在库状态\n\n");printf("****************************************\n");printf("编号书名作者出版社出版时间价格状态借阅者\n");printf("\n");scanf("%s%s%s%s%s%s%s%s",n.number,n.tittle,n.writer,n.publisher,n.date,n.price,n.status,n.reader);fseek(fp,-(int)sizeof(nn),1);fwrite(&n,sizeof(nn),1,fp);}printf("\n");printf("是否继续还书?[是(y)/否(n)]\n");do{x=getche();}while(x!='n'&&x!='y');if(x=='n')break;}fclose(fp);system("cls");}//浏览voidscan_book(){FILE*fp;charx,z;structbookn;fp=fopen("F:\\课程设计\\图书管理系统.txt","rb");rewind(fp);system("cls");while(1){fread(&n,sizeof(n),1,fp);if(feof(fp))break;else{printf("********************************************\n");printf("编号书名作者出版社出版时间价格状态借阅者\n");printf("\n");printf("%s%s%s%s%s%s%s%s",n.number,n.tittle,n.writer,n.publisher,n.date,n.price,n.status,n.reader);printf("\n");}}printf("\n");printf("回到主菜单请按回车");do{x=getche();}while(x!='\r');if(x=='\r'){fclose(fp);system("cls");}}

❺ c语言图书管理系统程序设计

一 程序设计说明书
【设计题目】 图书馆借阅管理
【问题描述】图书馆,适合用C++面向对象的功能来描述。图书馆管理系统分为借书、还书、图书管理和读者服务等四个部分。设计一个读者类Reader,记录每个读者基本信息;读者库类Rdatabase,记录所有读者信息;图书类Book, 记录每本书的基本信息;图书库类Bdatabase, 记录所有图书信息。
【基本要求】
1读者库类RDatabase中,其构造函数中,将read.txt文件中所有读入读者记录rede[]中。处理完毕,在析构函数中将read[]中的所有未删记录写入到read.txt中。
2图书库类BDatabase中,其构造函数中,将book.txt文件中所有读入图书记录book[]中。处理完毕,在析构函数中将book[]中的所有未删记录写入到book.txt中。
3 利用构造函数完成读者和图书数据初始化,完成内存分配。程序结束前,析构函数完成所申请的堆内存空间。
4 编写主函数,对所编写的矩阵类进行全面测试。要求用户界面采用菜单方式。测试中需要读者和图书数据通过I/O流从磁盘文件读入,同时显示在屏幕上。得到的数据通过I/O流写入磁盘文件保存,同时显示在屏幕上。
5 源程序中要有充分的注释,报告中要有详细的流程图和文字材料。
【类的设计】
该程序包含了四个类,如下:
1.Reader类,有读者的基本管理功能,具有以下私有数据:
int tag;//删除标记 1:已删;0:未删
int no;//读者编号
char name[10];//读者姓名
int borbook[Maxbor];//所借图书
2.读者库类Rdatabase, 具有以下私有数据:
int top;//读者记录指针
Reader read[Maxr];//读者记录
3.图书库类Book,有一本图书的基本功能,有以下私有数据:
int tag;//删除标记 1:已删;0:未删
int no;//图书编号
char name[20];//书名
int onshelf;//是否在架 1在架 0已借
4.图书库类BDatabase,有以下私有数据:
int top;//图书记录指针
Book book[Maxb];//图书记录
【特殊函数的设计说明】
构造函数
1.Reader类中构造函数Reader(),初始化函数;
2.读者库类RDatabase中,其构造函数Rdatabase(),将read.txt文件中所有读入读者记录rede[]中。
3.Book类中构造函数Book(),初始化函数;
4.图书库类BDatabase中,其构造函数中,将book.txt文件中所有读入图书记录book[]中。

拷贝构造函数
Reader类中的拷贝构造函数将getname()的返回值读者姓名拷贝到setname()中,Book类中的拷贝构造函数将getname()函数的返回值图书名拷贝到图书名设置函数setname()中。

析构函数
1.读者库类RDatabase中,其析构函数~Rdatabase(),将read[]中的所有未删记录写入到read.txt中;
2.图书库类BDatabase中,其析构函数~Bdatabase(),将book[]中的所有未删记录写入到book.txt中。

运算符重载
重载了“=”,当比较读者编号和图书编号时,重载;重载位运算符“〈〈”和“〉〉”等。

【主要函数算法流程图】

【程序的使用方法】
1.进入操作页面,按提示操作;
2.首先,新增图书和读者信息,之后就可以对以存在的信息进行操作;
3.操作当中,可以随时增加,更改和删除图书或读者信息;
4.当选择退出时,进行清屏。

二 程序上机调试报告
【语法错误及其排除】
1.在敲程序时,有很多拼写错误,例好多处把Readdata()误打Readdate();结束的分号,在不同的输入法状态下输入,这些小错误刚开始很难发现,不过有了经验,就很容易了。
2.创建新的构造函数时,使用出现了错误。重载构造函数要注意函数的访问权限,结果就不会出现错误。
【算法错误及其排除】
1.读者类中借书操作函数中,采用循环语句时判断读者已借图书量时for(int i=0;i<Maxbor;i++)误写为for(int i=1;i<Maxbor;i++),使循环发生错误。
2.指针使用错误,指针b和r混淆,导致编译错误得到“error C2660: 'retbook' : function does not take 1 parameters”错误报告。

❻ c语言课程设计:图书管理系统设计的基本思路是什么

图书管理系统主要要求可以录入书籍,添加书目,查找书本信息,删除或修改信息,有的还要求显示是否被借阅等。

一般采用结构体数组,链表,文件操作和自定义函数。主要是需要对基础知识掌握牢固。

先定义结构体,然后对结构体的成员进行定义,选择数组存储书本各种信息。录入信息可以用for和do while循环等来做。

存放信息需要文件操作函数,比如fopen,fwrite等。

删除和添加可以删除节点或者增加节点。

查找之类的可以用字符串操作的各种函数实现。

附上参考源代码

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#definebooks"f:\books.txt"
#definebooksbak"f:\booksbak.txt"
structbookinfo
{
charisbn[20];
chartitle[30];
charauthor[20];
intcount;
};

structbook
{
structbookinfoonebook;
structbook*next;
};

structbook*searchBook(structbook*listptr,charisbn[])
{
while(listptr!=(structbook*)0)
if(strcmp(listptr->onebook.isbn,isbn)==0)
returnlistptr;
else
listptr=listptr->next;
return(structbook*)0;
}


voidMainSearchbook(structbook*firstptr)
{
structbook*ptr;
charisbnno[20];
printf("请输入ISBN:");
scanf("%s",&isbnno);
ptr=searchBook(firstptr,isbnno);
if(ptr!=(structbook*)0)
{
printf("找到了!!! ");
printf("ISBN:%s ",ptr->onebook.isbn);
printf("Title:%s ",ptr->onebook.title);
printf("Author:%s ",ptr->onebook.author);
}
else
printf("sorry,notfound!!! ");
}intaddBook(structbook*listptr,structbookinfonote)
{
while(listptr->next!=0)
listptr=listptr->next;
listptr->next=(structbook*)malloc(sizeof(structbook));
listptr->next->onebook=note;
listptr->next->next=0;
return0;

}

voidMainAdd(structbook*listptr,FILE*fp)
{
intok;
structbookinfonote;
printf("请输入ISBN:");
scanf("%s",¬e.isbn);
printf("请输入Title:");
scanf("%s",¬e.title);
printf("请输入Author:");
scanf("%s",¬e.author);
ok=addBook(listptr,note);
if(ok==0)
{
//将加入的图书写到文件中保存
fprintf(fp," %s%s%s%d",note.isbn,note.title,note.author,0);
printf("添加图书成功!!! ");
}
else
printf("添加图书失败!!! ");
}


intremoveBook(structbook*listptr,charisbn[])
{
while(listptr->next!=(structbook*)0)
{
if(strcmp(listptr->next->onebook.isbn,isbn)==0)
{
listptr->next=listptr->next->next;
return0;
}
else
listptr=listptr->next;
}

return-1;
}

voidMainRemove(structbook*listptr,FILE*fp)
/************************************************************************/
/*删除书籍函数,通过ISBN删除链表节点,同时删除文件中对应信息*/
/*删除文件中一行,用的是笨方法,把需要的信息写到新文件,删除旧文件,重命名..*/
/************************************************************************/
{
charisbnno[20];
intok;
structbookinfoonebook;
printf("请输入ISBN:");
scanf("%s",&isbnno);
ok=removeBook(listptr,isbnno);
if(!ok)
{
FILE*fpbak;
if((fpbak=fopen(booksbak,"a+"))==NULL)
printf("文件打开失败!!! ");
fseek(fp,0,SEEK_SET);//移到文件开始
while((fscanf(fp,"%s%s%s%d ",&onebook.isbn,&onebook.title,&onebook.author,&onebook.count))!=EOF)
{
if(strcmp(onebook.isbn,isbnno)!=0)
{
fprintf(fpbak,"%s%s%s%d ",onebook.isbn,onebook.title,onebook.author,onebook.count);
}
}
fclose(fp);
fclose(fpbak);
if(remove(books))//删除失败返回非0
{
printf("删除文件失败!!! ");
return;
}
else
if(rename(booksbak,books))//重命名失败返回非0值
{
printf("重命名失败!!! ");
return;
}

printf("删除成功!!! ");
}
else
printf("查无此书!!!");
}

intchoice(void)
{
intc;
printf("1.查看图书 ");
printf("2.添加图书 ");
printf("3.删除图书 ");
printf("4.退出程序 ");
printf("请选择序号:");
returnc=getchar();
//returnc=getche();
printf(" ");

}

intaddEntry(FILE*fp,structbook*firstptr)
/************************************************************************/
/*主要用来加载文件中存放的图书信息*/
/************************************************************************/

{
structbookinfoonebook;
while((fscanf(fp,"%s%s%s%d ",&onebook.isbn,&onebook.title,&onebook.author,&onebook.count))!=EOF)
{
while(firstptr->next!=0)
firstptr=firstptr->next;
firstptr->next=(structbook*)malloc(sizeof(structbook));
firstptr->next->onebook=onebook;
firstptr->next->next=0;
}
return0;

}


intmain(intargc,char*argv[])
{
intch;
structbookfirst;
strcpy(first.onebook.isbn,"123456");
strcpy(first.onebook.title,"ProgrammingC");
strcpy(first.onebook.author,"yhb");
first.next=0;
structbook*firstptr=&first;//链表头指针
FILE*fp;
if((fp=fopen(books,"a+"))==NULL)
printf("文件打开失败!!!");
addEntry(fp,firstptr);
while(1)
{
system("CLS");//清屏
/************************************************************************/
/*想想这里为什么要清空缓冲区?*/
/*由于上一次(choice函数)的getchar(),还有一个' '留在缓冲区....*/
/*可以把这句话注释掉看看,没有这句话会遇到麻烦*/
/*如果不用fflush,可以将上面的getchar()换成getche()*/
/*比较getchar(),getch(),getche()......*/
/************************************************************************/
fflush(stdin);
ch=choice()-48;
switch(ch)
{
case1:
MainSearchbook(firstptr);
break;
case2:
MainAdd(firstptr,fp);
break;
case3:
MainRemove(firstptr,fp);
break;
case4:
printf("谢谢使用... ");
exit(0);
default:
printf("请输入正确序号!");
}
system("PAUSE");
}
return0;
}

❼ 如何使用C语言编写图书管理系统

图书管理系统是运行于Windows系统下的应用软件,主要用于对图书馆中的图书信息进行增、删、改、查等操作,并且还可对使用该系统的用户进行登录名和密码的管理等。系统给用户提供了一个简单的人机界面,使用户可以根据提示输入操作项,调用系统提供的管理功能。
所需功能类似于学生成绩管理系统,界面可参考附录C。用户分为管理员和一般人员两大类。
功能需求描述如下。
①用户登录:根据用户输入的用户名和密码判断是否允许该用户使用本系统,并且当用户登录后根据用户权限判断用户可以使用哪些功能。学生只有浏览等权限而不能进行实质性改动。
②提供系统主控平台:系统主控平台也应根据用户权限不同而有所区别,只列出在用户权限范围内的功能供用户选择。系统主控平台包括输入功能选项、调用相应程序两大需求。教师和学生对应的系统主控平台是不同的。所能进行的操作也不相同。
③创建图书信息文件:用户根据提示输入图书编号、图书分类号、书名、作者姓名、出版社名、出版年月、定价、存库数量和借阅和上架情况等等信息存储在系统磁盘的文件中。以便进行管理、查找和备份。
④增加图书信息:可在原有图书信息文件的基础上增加新的图书信息记录并继续保存至磁盘,并且将增加后的文件存储状况显示给用户。
⑤删除图书信息:提示用户输入要进行删除操作的图书编号,如果在文件中有该信息存在,则将该书号所对应的记录删除。并选择是否继续进行删除操作。
⑥修改图书信息:提示用户输入要进行修改操作的书号,如果在文件中有该息存在,则将提示用户输入该书号对应的要修改的选项,结果存储于文件。该部分需求也需要提示用户选择是否继续进行修改操作。
⑦查询图书信息:提供按书号或书名等查询。在该功能中,也需提示用户是否需要继续查再继续查找,则返回主界面。
⑧一般用户查询个人的借阅情况并按日期进行排序:。
⑨管理员和一般用户管理:管理员对用户的管理也需要进行用户的创建、增加、删除、浏览。管理员创建的用户存储在名为yonghu的磁盘文件中,每当有用户登录系统时,会根据该文件中的用户名和密码进行核实判断,用户才能够顺利登录。管理员还具有用户的功能。增加的用户及密码、权限等也被继续存储在yonghu文件中。当某些用一用该系统时,还可以进行删除操作,并且管理员具有修改用户权限的功能,一般用户和管理员对于系统的权限是不一样的。

❽ c语言图书管理系统 用数组做

#include<windows.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
struct book{
char number[100];
char tittle[100];
char writer[100];
char publisher[100];
char date[100];
char price[100];
char status[100];
char reader[100];
};
void search_book();
void borrow_book();
void return_book();
void add_book();
void delete_book();
void modify_book();
void scan_book();
int main()
{
int c1=0,c2,c3;
int l,x,z;
while(1)
{
system("color 2C");
printf("\t\t\t ^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^ \n");
printf("\t\t\t| * - * - * -图书管理系统 * - * - * |\n");
printf("\t\t\t* [1] 用户登录 *\n");
printf("\t\t\t* [2] 管理员登录 *\n");
printf("\t\t\t^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^ \n");
printf("\n");
printf("请选择你的操作 :");
scanf("%d",&c1);
system("cls");
break;
}
if(c1==1)
{
while(1){
system("color 2C");
printf("\t\t\t ^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^ \n");
printf("\t\t\t| * - * - * -图书管理系统 * - * - * |\n");
printf("\t\t\t* [1] 查询图书 *\n");
printf("\t\t\t| [2] 借阅图书 |\n");
printf("\t\t\t* [3] 借还图书 *\n");
printf("\t\t\t* [4] 浏览图书信息 *\n");
printf("\t\t\t| [5] 退出图书管理系统 |\n");
printf("\t\t\t^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^ \n");
printf("\n");
printf("请选择你的操作 :");
scanf("%d",&c2);
getchar();

switch(c2)
{
case 1:search_book(); break;
case 2:borrow_book(); break;
case 3:return_book(); break;
case 4:scan_book(); break;
case 5:system("cls"); return 0;
}
}
}
if(c1==2)
{
while(1){
system("color 2C");
printf("\t\t\t ^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^ \n");
printf("\t\t\t| * - * - * -图书管理系统 * - * - * |\n");
printf("\t\t\t| [1] 添加图书 |\n");
printf("\t\t\t* [2] 删减图书 *\n");
printf("\t\t\t| [3] 修改图书信息 |\n");
printf("\t\t\t* [4] 浏览图书信息 *\n");
printf("\t\t\t| [5] 退出图书管理系统 |\n");
printf("\t\t\t^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^ \n");
printf("\n");
printf("请选择你的操作 :");
scanf("%d",&c3);
getchar();

switch(c3)
{
case 1:add_book(); break;
case 2:delete_book(); break;
case 3:modify_book(); break;
case 4:scan_book(); break;
case 5:system("cls"); return 0;
}
}
}
}

/*查询图书*/
void search_book()
{
FILE*fp;
struct book n;
struct book nn;
int l,r;
char x,z;
fp=fopen("F:\\课程设计\\图书管理系统.txt","rb");
while(1)
{
l=0;
system("cls");
printf("请输入图书名称:");
scanf("%s",n.tittle);
fflush(stdin);
rewind(fp);
while(1)
{
fread(&nn,sizeof(nn),1,fp);
if(feof(fp))
break;
r=strcmp(n.tittle,nn.tittle );
if(r==0)
{
l=1;
break;
}
}
if(l==0)
{
printf("没有要查询的图书!!!\n\n ");
}
else
{
printf("查询的图书为:");
printf("\n");
printf("****************************************\n");
printf("编号 书名 作者 出版社 出版时间 价格 状态 借阅者\n");

printf("\n");
printf("%s %s %s %s %s %s %s",nn.number,nn.tittle,nn.writer,nn.publisher,nn.date,nn.price,nn.status,nn.reader);
printf("\n\n\n");
}
printf("是否继续查询图书 ? [是(y)/否(n)] ? \n\n");
do
{
x=getche();
}while(x!='n'&&x!='y');
if(x=='n')
break;
}
fclose(fp);
system("cls");
}

//添加

void add_book()
{
FILE *fp;
struct book n;
struct book nn;
char x,z;
int l,r;
fp=fopen("F:\\课程设计\\图书管理系统.txt","ab+");
do
{
system("cls");
do
{

l=0;
printf("\n");
printf("编号 书名 作者 出版社 出版时间 价格 状态 借阅者\n");
fflush(stdin);
scanf("%s %s %s %s %s %s %s %s",n.number,n.tittle,n.writer,n.publisher,n.date,n.price,n.status,n.reader);
system("cls");
rewind(fp);
while(!feof(fp))
{
fread(&nn,sizeof(nn),1,fp);
r=strcmp(n.tittle,nn.tittle);
if(r==0)
{
l=1;
printf(" 该图书已存在,请输入新的图书信息: \n\n");
break;
}
}
}while(l);
fwrite(&n,sizeof(n),1,fp);
printf("\n");
printf("是否继续输入新的图书信息[y/n] \n\n");
do
{
x=getche();
}while(x!='n'&&x!='y');
}while(x=='y');
fclose(fp);
system("cls");

}

//删除图书
void delete_book()
{
FILE *fp,*fp1;
char x,z;
struct book n;
struct book nn;
int l,r;
fp=fopen("F:\\课程设计\\图书管理系统.txt","ab+");
while(1)
{
l=0;
system("cls");
printf("\n");
printf("请输入需要删除的图书名: \n\n");
fflush(stdin);
scanf("%s",&n.tittle);
rewind(fp);
while(1)
{
fread(&nn,sizeof(nn),1,fp);
if(feof(fp))
break;
r=strcmp(n.tittle,nn.tittle);
if(r==0)
{
l=1;
break;
}
}
if(l==0)
{
printf("\n");
printf("对不起,未找到该图书 \n");
}
else
{
printf("\n");
printf("****************************************\n");
printf("编号 书名 作者 出版社 出版时间 价格 状态 借阅者\n");
printf("\n");
printf("%s %s %s %s %s %s %s %s",nn.number,nn.tittle,nn.writer,nn.publisher,nn.date,nn.price,nn.status,nn.reader);
printf("\n");
printf("确认删除图书信息? [是(y)/否(n)]\n\n");
do
{
z=getche();
}while(z!='n'&&z!='y');
if(z=='n')
break;
else
{
fp1=fopen("F:\\课程设计\\图书管理系统new.txt","wb");
rewind(fp);
while(1)
{
fread(&nn,sizeof(nn),1,fp);
if(feof(fp))
break;
r=strcmp(n.tittle,nn.tittle);
if(r!=0)
fwrite(&nn,sizeof(nn),1,fp1);
}
fclose(fp);
fclose(fp1);
fp=fopen("F:\\课程设计\\图书管理系统.txt","wb");
fp1=fopen("F:\\课程设计\\图书管理系统new.txt","rb");
while(1)
{
fread(&nn,sizeof(nn),1,fp1);
if(feof(fp1))
break;
fwrite(&nn,sizeof(nn),1,fp);
}
fclose(fp);
fclose(fp1);
}
}
printf("\n");
printf("是否继续删除图书信息? [是(y)/否(n)] \n");
do
{
x=getche();
}while(x!='n'&&x!='y');
if(x=='n')
break;
}
fclose(fp);
system("cls");
}
//修改图书信息

void modify_book()
{
FILE *fp;
struct book n;
struct book nn;
int l,r;
char x,z;
fp=fopen("F:\\课程设计\\图书管理系统.txt","rb+");
while(1)
{
l=0;
printf("\n");
system("cls");
printf("请输入需要修改的图书名: \n\n");
fflush(stdin);
scanf("%s",&n.tittle);
system("cls");
rewind(fp);
while(1)
{
fread(&nn,sizeof(nn),1,fp);
if(feof(fp))
break;
r=strcmp(n.tittle,nn.tittle);
if(r==0)
{
l=1;
break;
}
}
if(l==0)
{
printf("\n");
printf("对不起,未找到该图书信息 \n\n");
}
else
{
printf("\n");
printf("****************************************\n");
printf("编号 书名 作者 出版社 出版时间 价格 状态 借阅者\n");
printf("\n");
printf("%s %s %s %s %s %s %s %s",nn.number,nn.tittle,nn.writer,nn.publisher,nn.date,nn.price,nn.status,nn.reader);
printf("请依次修改图书信息\n\n\n");
fflush(stdin);
scanf("%s %s %s %s %s %s %s %s",n.number,n.tittle,n.writer,n.publisher,n.date,n.price,n.status,n.reader);
fseek(fp,sizeof(nn),1);
fwrite(&n,sizeof(nn),1,fp);
}
printf("\n");
printf(" 是否继续修改用户信息[y/n]? \n\n");
do
{
x=getch();
}while(x!='n'&&x!='y');
if(x=='n')
break;
}
fclose(fp);
system("cls");
}
//借书
void borrow_book()
{
FILE*fp;
struct book n;
struct book nn;
char x,z;
int l,r;
fp=fopen("F:\\课程设计\\图书管理系统.txt","rb+");
while(1)
{
l=0;
system("cls");
printf("\n");
printf("请输入需要借阅的图书名: \n");
fflush(stdin);
scanf("%s",&n.tittle);
rewind(fp);
while(1)
{
fread(&nn,sizeof(nn),1,fp);
if(feof(fp))
break;
r=strcmp(n.tittle,nn.tittle);
if(r==0)
{
l=1;
break;
}
}
if(l==0)
{
printf("\n");
printf("对不起,未找到该图书。 \n");
}
else

{ printf("\n");
printf("****************************************\n");
printf("编号 书名 作者 出版社 出版时间 价格 状态 借阅者\n");
printf("\n");
printf("%s %s %s %s %s %s %s %s",nn.number,nn.tittle,nn.writer,nn.publisher,nn.date,nn.price,nn.status,nn.reader);
printf("\n");
fflush(stdin);
printf("请输入图书信息并修改在库状态及借阅者信息");
printf("****************************************\n");
printf("编号 书名 作者 出版社 出版时间 价格 状态 借阅者\n");
printf("\n");
scanf("%s %s %s %s %s %s %s %s",n.number,n.tittle,n.writer,n.publisher,n.date,n.price,n.status,n.reader);
fseek(fp,sizeof(nn),1);
fwrite(&n,sizeof(nn),1,fp);
}
printf("\n");
printf(" 是否继续借书? [是(y)/否(n)] \n\n");
do
{
x=getch();
}while(x!='n'&&x!='y');
if(x=='n')
break;
}
fclose(fp);
system("cls");
}

//还书
void return_book()
{
FILE*fp;
struct book n;
struct book nn;
char x,z;
int l,r;
fp=fopen("F:\\课程设计\\图书管理系统.txt","rb+");
while(1)
{
l=0;
system("cls");
printf("\n");
printf("请输入需要借还的图书名: \n");
fflush(stdin);
scanf("%s",&n.tittle);
rewind(fp);
while(1)
{
fread(&nn,sizeof(nn),1,fp);
if(feof(fp))
break;
r=strcmp(n.tittle,nn.tittle);
if(r==0)
{
l=1;
break;
}
}
if(l==0)
{
printf("\n");
printf("对不起,未找到该图书。 \n");
}
else
{
printf("\n");
printf("****************************************\n");
printf("编号 书名 作者 出版社 出版时间 价格 状态 借阅者\n");
printf("\n");
printf("%s %s %s %s %s %s %s %s",nn.number,nn.tittle,nn.writer,nn.publisher,nn.date,nn.price,nn.status,nn.reader);
printf("\n");
fflush(stdin);
printf("请输入图书信息并修改在库状态 \n\n");
printf("****************************************\n");
printf("编号 书名 作者 出版社 出版时间 价格 状态 借阅者\n");
printf("\n");
scanf("%s %s %s %s %s %s %s %s",n.number,n.tittle,n.writer,n.publisher,n.date,n.price,n.status,n.reader);
fseek(fp,-(int)sizeof(nn),1);
fwrite(&n,sizeof(nn),1,fp);
}
printf("\n");
printf("是否继续还书? [是(y)/否(n)] \n");
do
{
x=getche();
}while(x!='n'&&x!='y');
if(x=='n')
break;
}
fclose(fp);
system("cls");
}

//浏览
void scan_book()
{
FILE*fp;
char x,z;
struct book n;
fp=fopen("F:\\课程设计\\图书管理系统.txt","rb");
rewind(fp);
system("cls");
while(1)
{
fread(&n,sizeof(n),1,fp);
if(feof(fp))
break;
else
{
printf("********************************************\n");
printf("编号 书名 作者 出版社 出版时间 价格 状态 借阅者\n");
printf("\n");
printf("%s %s %s %s %s %s %s %s",n.number,n.tittle,n.writer,n.publisher,n.date,n.price,n.status,n.reader);
printf("\n");
}
}
printf("\n");
printf("回到主菜单请按回车");
do
{
x=getche();
}while(x!='\r');
if(x=='\r')
{
fclose(fp);
system("cls");
}
}

❾ c语言链表实现图书管理系统

#include <dos.h> #include <bios.h> #include <conio.h> #include <stdio.h> #include <stdlib.h> #include <math.h> #define LEFT 0x4b00 #define RIGHT 0x4d00 #define DOWN 0x5000 #define UP 0x4800 #define SPACE 0x3920 #define ESC 0x011b #define ENTER 0x1c0d #define Backspace 0xe08 #define ALT_B 12288 #define ALT_M 12800 #define ALT_H 8960 int key; int textx,texty; struct menustruct { char name[10]; char str[10][20]; int n; }ml[3]; typedef struct BookList { char num[20] char name[20] int price; char person[20] int yes struct BookList *next; }Book; 希望你能采纳~~

❿ 如何用 C语言做 图书管理系统(要求:不能用链表做)

网上很多的,无非就是结构体,然后赋值问题,指针,主要用这两个多