首页 > 软件 > c语言图书馆自习位预约

c语言图书馆自习位预约

软件 2026-02-28

急求一C#编程实例,实现自习室座位预订功能,可实现预定座位的修改,删除,查询。自习室及座位各自有编号

去图书馆 找个图书馆信息管理系统的案例,跟你的自习室座位预订差不多的

求图书馆管理系统程序(c语言)

C程序项目-图书管理系统收藏 #include"stdio.h"#include"stdlib.h"#include"windows.h"#include"string.h" /*图书相关信息*/struct bookinf //定义图书相关信息结构体{ int num; char bname[20]; char wname[10]; char clanum[14]; char pubcom[10]; char pubtime[10]; float price;}; structmanage //定义管理员相关信息结构体{ char manage_name[10]; char password

C语言图书馆管理系统

留下你的邮箱。太长了。。 已经发了

1、 求c语言程序图书登记管理程序。要求如下急!

#include #include #include // #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 C

求图书管理系统C程序! 一定要C或C++ 可用的话加分!

#include 
#include
#include
#include "math.h"
//#define m 1
struct Date /*日期结构*/
{
int m_nYear; /*年*/
int m_nMonth; /*月*/
int m_nDay; /*日*/
};
struct Reader /*读者结构*/
{
char num[20]; /*借书证号*/
struct Date bro; /*借出时间*/
struct Date back; /*归还时间*/
};
struct Book /*书本结构*/
{
int m_iBook_Number; /*对应书本号*/
char m_strTitle[150]; /*书名*/
char m_strWroter[150]; /*作者*/
int m_nMoreNum; /*当前在架册数*/
int m_nTotalHoldNum; /*馆藏册数*/
char m_strComment[300]; /*图书简介*/
struct Reader reader[200];
};
struct Info /*借书信息结构*/
{
struct Info *m_pParentPoint; /*前驱结点*/
struct Book *m_pBookInfo; /*对应书本的信息*/
struct Info *m_pSun; /*后继结点*/

};
struct Info *Search(struct Info *bth,int x,int *k,int *flag)
{
struct Info *p=NULL;
/*当前工作指针*/
p=bth; /*每次查询前,将工作指针指向双向链表头部结点*/
*flag=0; /*是否查找到指定书本号的标志,初始化置为0*/
while(p)
{
if(p->m_pBookInfo->m_iBook_Number==x)
{
/*找到相同的书号,置找到的标志*/
*flag = 1;
return p;
}
else
{
/*未找到相同的书号,置未找到标志*/
*flag = 0;
}
if(p->m_pSun!=NULL)
{
p = p->m_pSun;
/*没到双向链表的尾部时,向后移动当前指针*/
}
else
{
break;/*到达链表尾部,跳出循环*/
}

}
return bth;
}
struct Book *InputNode()
{
struct Book *p=NULL;
int i;
p=(struct Book *)malloc(sizeof(struct Book)); /*分配内存*/
system("cls");/*清屏*/
fflush(stdin); /*清除以前的输入*/
printf("\n\t请输入书名: ");
gets(p->m_strTitle);/*从键盘取得书名*/
printf("\n\t请输入作者: ");
gets(p->m_strWroter);/*从键盘取得作者名*/
printf("\n\t请输入当前在架册数: ");
scanf("%d",&p->m_nMoreNum);/*从键盘取得当前在架册数*/
printf("\n\t请输入馆藏册数: ");
scanf("%d",&p->m_nTotalHoldNum);/*从键盘取得当前馆藏册数*/
fflush(stdin);
printf("\n\t请输入本书简介: ");/*从键盘取得本书内容简要介绍*/
gets(p->m_strComment);
/*以上从输入输出设备取得要求的信息*/
for(i=0;i<20;i++)
(p->reader[i]).num[0]='\0';/*初始化书本结构成员的相关读者指针内容为空*/
return(p); /*返回成功插入的一本书信息*/
}
struct Info *Insert_BookInfo(struct Info *bth)
{
int flag,j,k,t;
int y,x,z;
struct Info *p=NULL,*q=NULL,*u=NULL,*s=NULL;
struct Book *r=NULL,*l=NULL;
system("cls");/*清屏*/
printf("\n\t请输入你想上架的书本号: ");
scanf("%d",&x);/*取书号*/
q=Search(bth,x,&k,&flag);/*查找上架的书是否已经上架,返回已经找到的书的信息*/
if(flag==1)
{/*查找成功,存在此书*/
printf("\n\t当前存在这本书%d本,您想再增加一本<<%s>>书?(y/n)\n",q->m_pBookInfo->m_nTotalHoldNum,q->m_pBookInfo->m_strTitle);
z=getch();
if(z=='y'||z=='Y')
{/*确认上架另一本书*/
printf("\n\t本馆此书一共有: %d 本",q->m_pBookInfo->m_nTotalHoldNum);
printf("\n\t并且有: %d 本在图书馆中内未借出.",q->m_pBookInfo->m_nMoreNum);
q->m_pBookInfo->m_nTotalHoldNum++;
q->m_pBookInfo->m_nMoreNum++;
printf("\n\t上架后一共有: %d 本",q->m_pBookInfo->m_nTotalHoldNum);
printf("\n\t上架后当前有: %d 本在图书馆中.",q->m_pBookInfo->m_nMoreNum);
}
return(bth);
}
r=InputNode(bth); /*成功插入书本信息,指针r存放刚刚插入的书本*/
if(bth==NULL)
{
/*指针bth为空时,表示当前链表为空,此时需要单独处理,即链表头内存分配*/
bth=p=(struct Info *)malloc(sizeof(struct Info));/*申请内存*/
r->m_iBook_Number = x;/*将书号存入书本信息结构体*/
p->m_pParentPoint= NULL;/*前驱结点置空*/
p->m_pSun=NULL;/*后继结点置空*/
p->m_pBookInfo=r;
return(p); /*返回新成功插入的书本结点*/
}
else
{
/*说明已经有头指针,则在此开始处理新插入的结构体指针*/
p=NULL;
p=bth;
while(p->m_pSun!=NULL)
{
p = p->m_pSun;/*当后继结点不为空时,表示还未到链表尾部*/
}
/*当循环结束后,p指向的就是最后一个结点*/
q=(struct Info *)malloc(sizeof(struct Info));/*申请内存*/
r->m_iBook_Number = x;/*将书号存入书本信息结构体*/
p->m_pSun = q; /*双向链表的前驱与后继结点链接*/
q->m_pParentPoint= p;/*前驱结点置为p*/
q->m_pSun=NULL;/*后继结点置空,相当于电线接地*/
q->m_pBookInfo=r;/*指向新插入的书本信息结构体*/
}
return(bth);
}
struct Info *Delete_BookInfo(struct Info *bth)
{
int flag,j,k,t;
int x,y;
struct Info *u=NULL,*s=NULL,*p=NULL,*q=NULL;
struct Book *bookinfo=NULL;

struct Info *BookLeftPoint=NULL;/*前驱结点*/
struct Info *BookRightPoint = NULL;/*后继结点*/
system("cls");/*清屏*/
printf("\n\t请输入你想下架的书本号: ");
scanf("%d",&x);/*接受输入*/
q=Search(bth,x,&k,&flag);/*查找指定的书是否存在*/
if(flag==0)
{ /*书本不存在是,直接输出消息并返回*/
printf("\n\t这本书不存在!\n");
return(bth);
}
else
{
if(q==NULL)
{
printf("未知错误");
return bth;/*确保当前工作指针是有效的,防止出现非法操作*/
}
else
{
bookinfo=q->m_pBookInfo;
printf("\n\t想下架的书本信息: ");
printf("\n\t书名: %s",bookinfo->m_strTitle);
printf("\n\t作者: %s",bookinfo->m_strWroter);
printf("\n\t当前在架册数: %d",bookinfo->m_nMoreNum);
printf("\n\t馆藏册数: %d",bookinfo->m_nTotalHoldNum);
printf("\n\t本书简介: %s\n",bookinfo->m_strComment);
/*删除指定的书本信息的思路:设当前找到的链表中的结点是q,它的前驱为q-1,后继为q+1,
则,只需要作三部操作:
1.将要删除的结点的后继结点的前驱指针域指向要删除的结点的前驱结点
2.将要删除的结点的前驱结点的后继指针域指向要删除的结点的后继结点
3.释放要删除的结点的书本信息域的内存,释放要删除的结点的内存
需要注意两个特殊结点:要删除的结点是首结点或尾结点时,需要分别判断处理*/
if(q->m_pParentPoint!=NULL && q->m_pSun!=NULL)
{
/*夹在链表中间的结点*/
BookLeftPoint = q->m_pParentPoint;/*要删除的结点的前驱指向赋给前驱结点指针变量*/
BookRightPoint = q->m_pSun;/*要删除的结点的后继指向赋给后继结点的指针变量*/
BookLeftPoint->m_pSun = BookRightPoint;/*将后继结点指针指向的地址作为前驱结点中新后继域*/
BookRightPoint->m_pParentPoint = BookLeftPoint;/*将后继结点指向的前驱域设定为要删除的结点的前驱结点*/
q->m_pParentPoint = NULL;
q->m_pSun = NULL;
free(q->m_pBookInfo);/*先将书本信息结构体的内存释放*/
q->m_pBookInfo = NULL;/*使指针指向安全地址*/
free(q);/*将要删除的借还书信息结构体指针使用的内存空间释放*/
q = NULL;/*要习惯将动态分配的内存在使用后动态释放,并将指针域指向空*/
return bth;/*返回首结点*/
}
else if(q->m_pParentPoint==NULL)
{
/*首结点的前驱为空,这里处理首结点删除操作*/
if(q->m_pSun==NULL)
{/*前后指针域均为空时,说明只有一个结点,此时只需要将此结点删除*/
free(q->m_pBookInfo);
q->m_pBookInfo = NULL;
free(q);
q = NULL;
return q;
}
bth = q->m_pSun;
bth->m_pParentPoint = NULL;

/*要删除的结点的后继指向赋给后继结点的指针变量*/
BookRightPoint = q;
BookRightPoint->m_pParentPoint = NULL;/*将链表中指向首结点的后继指针的前驱指针域置为空,表明是新的首结点*/
BookRightPoint->m_pSun = NULL;/*将链表中指向首结点的后继指针的前驱指针域置为空,表明是新的首结点*/

free(BookRightPoint->m_pBookInfo);/*先将书本信息结构体的内存释放*/
BookRightPoint->m_pBookInfo = NULL;/*使指针指向安全地址*/
free(BookRightPoint);/*将要删除的借还书信息结构体指针使用的内存空间释放*/
BookRightPoint = NULL;/*要习惯将动态分配的内存在使用后动态释放,并将指针域指向空*/

return bth;/*返回首结点*/
}
}
}
}
void Output_BookInfo(struct Info *bth)
{
struct Info *q=NULL;
struct Book *p=NULL;
int k=0;
int x=0;
int flag=0;
system("cls");
printf("\n\t请输入你想查找的书本号: ");
scanf("%d",&x);
q=Search(bth,x,&k,&flag);
if(flag==1)
{
p=q->m_pBookInfo;
printf("\n\t书名: %s",p->m_strTitle);
printf("\n\t作者: %s",p->m_strWroter);
printf("\n\t当前在架册数: %d",p->m_nMoreNum);
printf("\n\t馆藏册数: %d",p->m_nTotalHoldNum);
printf("\n\t本书简介: %s\n",p->m_strComment);
}
else printf("\n\t这本书不存在!");
}
void TurnBack_TheBook(struct Info *bth)
{
struct Info *q=NULL;
struct Book *p=NULL;
int i,k, x, flag,t,j;
int year,month,day,d;
float pay;
char temp[20];
system("cls");/*清屏*/
printf("\n\t请输入归还的书本号: ");
scanf("%d",&x);
q=Search(bth,x,&k,&flag); /*书本查找*/
if(flag==1)
{/*找到本书*/
p=q->m_pBookInfo;
printf("\n\t你想归还这本书 ?(y/n)");
printf("\n\t书名: %s",p->m_strTitle);
printf("\n\t作者: %s",p->m_strWroter);
printf("\n\t当前在架册数: %d",p->m_nMoreNum);
printf("\n\t馆藏册数: %d",p->m_nTotalHoldNum);
printf("\n\t本书简介: %s\n",p->m_strComment);
t=getch();/*接受选择*/
if(t=='y'||t=='Y')
{/*确认归还这本书*/
if( (p->m_nMoreNum) >=(p->m_nTotalHoldNum) )
printf("\n\t想再上架一本书吗 ??\n");
else
{
system("cls");
printf("\n\t请输入借书证号: ");
scanf("%s",temp);
j=0;
for(i=0;i<20;i++)
{
if(! (strcmp(temp,(p->reader[i]).num))) {j=1;break;}
}
if(j==0) {printf("\n\t你不能借这本书。");return;}
printf("\n\t今天是:");
printf("\n\t年: ");
scanf("%d",&year);
printf("\t月: ");
scanf("%d",&month);
printf("\t日: ");
scanf("%d",&day);


d=0;
if(year<(p->reader[i]).back.m_nYear) d=1;
if(year<=(p->reader[i]).back.m_nYear && month<(p->reader[i]).back.m_nMonth) d=1;
if(year<=(p->reader[i]).back.m_nYear && month<=(p->reader[i]).back.m_nMonth && day<(p->reader[i]).back.m_nDay) d=1;
if(d==0)
{/*超过还书日期,在此还书*/
system("cls");
pay=(year-(p->reader[i]).back.m_nYear)*365+(month-(p->reader[i]).back.m_nMonth)*30+(day-(p->reader[i]).back.m_nDay);
printf("\n\t你的借书日期是: %d-%d-%d",(p->reader[i]).bro.m_nYear,(p->reader[i]).bro.m_nMonth,(p->reader[i]).bro.m_nDay);
printf("\n\t你的还书日期是: %d-%d-%d之前",(p->reader[i]).back.m_nYear,(p->reader[i]).back.m_nMonth,(p->reader[i]).back.m_nDay);
printf("\n\t今天是 %d-%d-%d",year,month,day);
printf("\n\n\t因此你超出借期,");
printf("\n\t应该支付%2.1f 元罚款.",0.1*pay);
}
(p->reader[i]).num[0]='\0';
p->m_nMoreNum++;
printf("\n\t你已经归还了这本书.");
}
}

}
else printf("\n\t你不能归还不存在的一本书!!!");

}
char Select_Menu()
{/*主菜单显示函数*/
system("cls");
printf("/******************************************\\\n");
printf("* *\n");
printf("* 图 书 馆 管 理 系 统 *\n");
printf("* 主菜单 *\n");
printf("* *\n");
printf("* 1. 图书上架 *\n");
printf("* 2. 图书下架 *\n");
printf("* 3. 查找图书 *\n");
printf("* 4. 图书出借 *\n");
printf("* 5. 图书归还 *\n");
printf("* 6. 退出系统 *\n");
printf("* *\n");
printf("* 请选择菜单项:(1~6) *\n");
printf("\\******************************************/\n");
return getch();
}
void main()
{
char c,t;
int flag,p=1;
struct Info *bth=NULL;
while(1)
{
c=Select_Menu();
printf("您选择了:%c",c);
getch();
switch(c)
{
case '1':
bth=Insert_BookInfo(bth);/*图书上架*/
break;
case '2':
bth=Delete_BookInfo(bth);/*图书下架*/
break;
case '3': Output_BookInfo(bth);/*查找图书*/
break;
case '4': Borrow_TheBook(bth);/*图书出借*/
break;
case '5': TurnBack_TheBook(bth);/*图书归还*/
break;
case '6':
case '0': system("cls");
printf("\n\t你想退出系统 ?(y/n)");
t=getch();
if(t=='y'||t=='Y') exit(0);
break;
}
printf("\n\t按任意键返回主菜单....");
getch();
}
}



标签:信息技术 编程 C语言 图书馆管理系统 C(编程语言)

大明白知识网 Copyright © 2020-2022 www.wangpan131.com. Some Rights Reserved. 京ICP备11019930号-18