c语言书籍管理系统(c语言图书管理系统 急需!!)
本文目录
- c语言图书管理系统 急需!!
- C语言图书管理信息系统
- c语言课程设计:图书管理系统设计的基本思路是什么
- int found=0在c语言中的图书管理系统什么意思
- c语言图书管理系统
- C语言程序设计的图书管理系统
- C语言编程图书管理系统
- c语言图书管理系统的优缺点有哪些
c语言图书管理系统 急需!!
我简单给你说一下吧。
1、首先定义数据结构
图书结构:图书编号、图书名称、单价、作者、存在状态
人员结构:人员编号(学生为学号,教师为工作编号)、姓名、性别等
借书结构:人员编号、图书编号、借书时间、还书时间
2、由于是C系统,通常情况下,数据要存储在文件中,因此,还需要定义文件结构:图书、人员、借书信息。
为了数据处理速度,可将借书信息中已经还书的信息单独放在还书信息中,借书信息中的数据只是已经借出还没有归还的数据。
3、系统功能定义,以及编码。
由于系统太过庞大,你还是自己试着做一下吧,应该可以做好的。
学习本身就是做程序,如果有困难,可以上我们团队提问题,随时恭候!
祝学习进步!
C语言图书管理信息系统
借书的限制:教师180天,借15本;学生120天,借10本
图书的信息: 书的编号号,书名,作者,书的种类,书的总量以及书的剩余量
学生/教师信息: 学号/工号(4位数字字符),姓名,借书日期,还书日期(以此判定是否超出有效期)
(一)、查询:(无条件或有条件指按所有字段查询)
一、单链表上实现图书信息管理
利用链表结构实现图书存储
二 、二叉排序树或平衡树上实现图书信息管理
利用二叉排序树或平衡树实现图书的存储
三、B_树的操作(手工题)
插入、删除操作:
从空的3阶B_树开始,依次插入20,30,50,52,60,68,70,10,80,90,40,75。画出建树过程,然后分别画出删除50,60,10,75,20的B_树状态。
1.课程设计的题目内容要求
2.数据结构的设计思想和任务的总体结构
***隐藏网址***
***隐藏网址***
提取码:1234
c语言课程设计:图书管理系统设计的基本思路是什么
图书管理系统主要要求可以录入书籍,添加书目,查找书本信息,删除或修改信息,有的还要求显示是否被借阅等。
一般采用结构体数组,链表,文件操作和自定义函数。主要是需要对基础知识掌握牢固。
先定义结构体,然后对结构体的成员进行定义,选择数组存储书本各种信息。录入信息可以用for和do while循环等来做。
存放信息需要文件操作函数,比如fopen,fwrite等。
删除和添加可以删除节点或者增加节点。
查找之类的可以用字符串操作的各种函数实现。
附上参考源代码
#include 《stdio.h》
#include 《string.h》
#include 《stdlib.h》
#include 《conio.h》
#define books "f:\\books.txt"
#define book**ak "f:\\book**ak.txt"
struct bookinfo
{
char i**n;
char title;
char author;
int count;
};
struct book
{
struct bookinfo onebook;
struct book *next;
};
struct book *searchBook ( struct book *listptr,char i**n)
{
while(listptr!=(struct book *)0)
if (strcmp(listptr-》onebook.i**n,i**n)==0)
return listptr;
else
listptr=listptr-》next;
return (struct book *)0;
}
void MainSearchbook(struct book *firstptr)
{
struct book *ptr;
char i**nno;
printf("请输入ISBN:");
scanf("%s",&i**nno);
ptr=searchBook(firstptr,i**nno);
if (ptr!=(struct book *)0)
{
printf("找到了!!!\n");
printf("ISBN:%s\n",ptr-》onebook.i**n);
printf("Title:%s\n",ptr-》onebook.title);
printf("Author:%s\n",ptr-》onebook.author);
}
else
printf("sorry,not found!!!\n");
}
int addBook(struct book *listptr,struct bookinfo note)
{
while(listptr-》next!=0)
listptr=listptr-》next;
listptr-》next=(struct book *)malloc(sizeof(struct book));
listptr-》next-》onebook=note;
listptr-》next-》next=0;
return 0;
}
void MainAdd(struct book *listptr,FILE *fp)
{
int ok;
struct bookinfo note;
printf("请输入ISBN:");
scanf("%s",¬e.i**n);
printf("请输入Title:");
scanf("%s",¬e.title);
printf("请输入Author:");
scanf("%s",¬e.author);
ok=addBook(listptr,note);
if (ok==0)
{
//将加入的图书写到文件中保存
fprintf(fp,"\n%s %s %s %d",note.i**n,note.title,note.author,0);
printf("添加图书成功!!!\n");
}
else
printf("添加图书失败!!!\n");
}
int removeBook(struct book *listptr,char i**n)
{
while(listptr-》next!=(struct book *)0)
{
if (strcmp(listptr-》next-》onebook.i**n,i**n)==0)
{
listptr-》next=listptr-》next-》next;
return 0;
}
else
listptr=listptr-》next;
}
return -1;
}
void MainRemove(struct book *listptr,FILE *fp)
/************************************************************************/
/* 删除书籍函数,通过ISBN删除链表节点,同时删除文件中对应信息 */
/* 删除文件中一行,用的是笨方法,把需要的信息写到新文件,删除旧文件,重命名..*/
/************************************************************************/
{
char i**nno;
int ok;
struct bookinfo onebook;
printf("请输入ISBN:");
scanf("%s",&i**nno);
ok=removeBook(listptr,i**nno);
if (!ok)
{
FILE *fpbak;
if ((fpbak=fopen(book**ak,"a+"))==NULL)
printf("文件打开失败!!!\n");
fseek(fp,0,SEEK_SET); //移到文件开始
while((fscanf(fp,"%s %s %s %d\n",&onebook.i**n,&onebook.title,&onebook.author,&onebook.count))!=EOF)
{
if (strcmp(onebook.i**n,i**nno)!=0)
{
fprintf(fpbak,"%s %s %s %d\n",onebook.i**n,onebook.title,onebook.author,onebook.count);
}
}
fclose(fp);
fclose(fpbak);
if (remove(books)) //删除失败返回非0
{
printf("删除文件失败!!!\n");
return ;
}
else
if (rename(book**ak,books)) //重命名失败返回非0值
{
printf("重命名失败!!!\n");
return ;
}
printf("删除成功!!!\n");
}
else
printf("查无此书!!!");
}
int choice(void)
{
int c;
printf("1.查看图书\n");
printf("2.添加图书\n");
printf("3.删除图书\n");
printf("4.退出程序\n");
printf("请选择序号:");
return c=getchar();
//return c=getche();
printf("\n\n");
}
int addEntry(FILE *fp,struct book *firstptr)
/************************************************************************/
/* 主要用来加载文件中存放的图书信息 */
/************************************************************************/
{
struct bookinfo onebook;
while((fscanf(fp,"%s %s %s %d\n",&onebook.i**n,&onebook.title,&onebook.author,&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(int argc,char *argv)
{
int ch;
struct book first;
strcpy(first.onebook.i**n,"123456");
strcpy(first.onebook.title,"Programming C");
strcpy(first.onebook.author,"yhb");
first.next=0;
struct book *firstptr=&first; //链表头指针
FILE *fp;
if ((fp=fopen(books,"a+"))==NULL)
printf("文件打开失败!!!");
addEntry(fp,firstptr);
while(1)
{
system("CLS"); //清屏
/************************************************************************/
/* 想想这里为什么要清空缓冲区? */
/*由于上一次(choice函数)的getchar(),还有一个’\n’留在缓冲区.... */
/*可以把这句话注释掉看看,没有这句话会遇到麻烦 */
/*如果不用fflush,可以将上面的getchar()换成getche() */
/*比较getchar(),getch(),getche()...... */
/************************************************************************/
fflush(stdin);
ch=choice()-48;
switch (ch)
{
case 1:
MainSearchbook(firstptr);
break;
case 2:
MainAdd(firstptr,fp);
break;
case 3:
MainRemove(firstptr,fp);
break;
case 4:
printf("谢谢使用...\n");
exit(0);
default:
printf("请输入正确序号!");
}
system("PAUSE");
}
return 0;
}
int found=0在c语言中的图书管理系统什么意思
在C语言中,int found = 0表示定义了一个整型变量found并将其初始化为0。在图书管理系统中,这个变量通常用于标记是否找到了符合条件的图书。
在搜索图书或执行其他相关操作时,可以使用found变量来跟踪搜索结果。当找到符合条件的图书时,将found设置为1,表示找到了。如果未找到符合条件的图书,则保持found为0。
这样做有助于在后续的处理中根据found变量的值来判断是否执行特定的操作或输出相应的信息。例如,可以使用条件语句(如if语句)检查found的值,根据结果执行不同的操作。
c语言图书管理系统
#include 《stdio.h》
#include 《stdlib.h》
#include 《time.h》
#include 《string.h》
typedef int BOOL;
typedef struct bookinfo
{
char number;/*产品编号*/
char name;/*产品名称*/
float price;/*单价*/
char auther;/*作者*/
BOOL isExit;/*存在状态*/
char lendername;/*借书人姓名*/
char lender***;/*借书人性别*/
char lendernum;/*借书人学号*/
}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.lender***);
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;
int booknumber=0;
system("cls");
p=fopen("c:\\bookinfo.data","rb");
while(!feof(p))
{
fread(&bookinfo,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.price,
bookinfo.lendername,
bookinfo.lendernum);
n++;
}
}
printf("\n\n按任意键回到主菜单!\n");
getch();
}
void choice_3_search_according_name()/*根据图书名称显示图书的信息*/
{
char search="";/*search用来存放要查询的书名*/
int n;
FILE *p;
char choice;
BOOKINFO bookinfo;
int booknumber=0;
system("cls");
p=fopen("c:\\bookinfo.data","rb");
while(!feof(p))
{
fread(&bookinfo,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.name,search)==0)
{
printf("该书的详细信息如下:\n");
printf(" 图书信息 | 借书人信息 \n");
printf("编号 名称 单价 作者 图书状态 | 姓名 性别 学号\n");
printf("%-6s%-12s%-8.1f%-8s%-9d| %-12s%-8s%-8s\n",
bookinfo.price,
bookinfo.lendername,
bookinfo.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="";/*search用来存放要删除的书名*/
int n,i;
FILE *p;
char choice;
BOOKINFO bookinfo;
int booknumber;
system("cls");
while(1)
{
printf("输入要删除的书本名称:");
gets(search);
p=fopen("c:\\bookinfo.data","rb");
booknumber=0;
while(!feof(p))
{
fread(&bookinfo,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.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;
booknumber--;
p=fopen("c:\\bookinfo.data","wb");
for(n=0;n《booknumber;n++)
fwrite(&bookinfo,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;
int booknumber;
p=fopen("c:\\bookinfo.data","rb");
booknumber=0;
system("cls");
while(!feof(p))
{
fread(&bookinfo,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.name)》0)
{
temp=bookinfo;
bookinfo;
bookinfo=temp;
}
p=fopen("c:\\bookinfo.data","wb");
for(m=0;m《booknumber;m++)
fwrite(&bookinfo,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;
int booknumber;
system("cls");
printf("请输入价格:");
scanf("%f",&price);
p=fopen("c:\\bookinfo.data","rb");
booknumber=0;
while(!feof(p))
{
fread(&bookinfo,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.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.price》=price)
printf("%-6s%-12s%-8.1f%-8s%-9d| %-12s%-8s%-8s\n",
bookinfo.price,
bookinfo.lendername,
bookinfo.lendernum);
}
}
}
printf("\n\n按任意键回到主菜单!\n");
getch();
}
void choice_7_display_according_exitflag()/*根据存在状态列出图书信息*/
{
FILE *p;
int n;
int count=0;
BOOKINFO bookinfo;
int booknumber;
system("cls");
booknumber=0;
p=fopen("c:\\bookinfo.data","rb");
while(!feof(p))
{
fread(&bookinfo,sizeof(BOOKINFO),1,p);
booknumber++;
}
booknumber--;
fclose(p);
if(booknumber==0)
{
printf("书库中没有任何书目存在!\n");
}
else
{
for(n=0;n《booknumber;n++)
if(bookinfo.isExit==1)
count++;
if(count==0)
printf("书库中的书籍全部借出!\n");
else
{
printf("书库中未被借出的图书信息如下:\n\n");
printf(" 图书信息 | 借书人信息 \n");
printf("编号 名称 单价 作者 图书状态 | 姓名 性别 学号\n");
for(n=0;n《booknumber;n++)
if(bookinfo.isExit==1)
{
printf("%-6s%-12s%-8.1f%-8s%-9d| %-12s%-8s%-8s\n",
bookinfo.price,
bookinfo.lendername,
bookinfo.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》//输入/输出文件流类
using namespace std;
c***t int Maxr=100;//最多的读者
c***t int Maxb=100;//最多的图书
c***t int Maxbor=5;//每位读者最多借五本书
//读者类,实现对读者的信息的描述
class Reader
{
private:
int tag; //删除标记 1:已删 0:未删
int no; //读者编号
char name; //读者姓名
int borbook;//所借图书
public:
Reader() {}
char *getname() //获取姓名
int gettag() //获取删除标记
int getno() //获取读者编号
void setname(char na) //设置姓名
{
strcpy(name,na);
}
void delbook()//设置删除标记 1:已删 0:未删
void addreader(int n,char *na)//增加读者
{
tag=0;
no=n;
strcpy(name,na);
for(int i=0;i《Maxbor;i++)
borbook=0;
}
void borrowbook(int bookid)//借书操作
{
for(int i=0;i《Maxbor;i++)
{
if (borbook==0)
{
borbook=bookid;
return;
}
}
}
int retbook(int bookid)//还书操作
{
for(int i=0;i《Maxbor;i++)
{
if(borbook==bookid)
{
borbook=0;
return 1;
}
}
return 0;
}
void disp()//读出读者信息
{
cout 《《 setw(5) 《《 no 《《setw(10) 《《 name《《"借书编号:[";
for(int i=0;i《Maxbor;i++)
if(borbook!=0)
cout 《《 borbook 《《 "|";
cout 《《 "]"《《endl;
}
};
//读者类库,实现建立读者的个人资料
class RDatabase
{
private:
int top; //读者记录指针
Reader read;//读者记录
public:
RDatabase() //构造函数,将reader.txt读到read中
{
Reader s;
top=-1;
fstream file("reader.txt",ios::in);//打开一个输入文件
while (1)
{
file.read((char *)&s,sizeof(s));
if (!file)break;
top++;
read=s;
}
file.close(); //关闭 reader.txt
}
void clear()//删除所有读者信息
{
top=-1;
}
int addreader(int n,char *na)//添加读者时先查找是否存在
{
Reader *p=query(n);
if (p==NULL)
{
top++;
read.addreader(n,na);
return 1;
}
return 0;
}
Reader *query(int readerid)//按编号查找
{
for (int i=0;i《=top;i++)
if (read.getno()==readerid &&
read.gettag()==0)
{
return &read;
}
return NULL;
}
void disp() //输出所有读者信息
{
for (int i=0;i《=top;i++)
read.disp();
}
void readerdata();//读者库维护
~RDatabase() //析构函数,将read写到reader.txt文件中
{
fstream file("reader.txt",ios::out);
for (int i=0;i《=top;i++)
if (read.gettag()==0)
file.write((char *)&read));
file.close();
}
};
void RDatabase::readerdata()
{
char choice;
char rname;
int readerid;
Reader *r;
while (choice!=’0’)
{
cout 《《"\n\n\t\t\t读 者 维 护\n\n\n\t\t 1 新 增\n\n\t\t 2 更 改\n\n\t\t 3 删 除\n\n\t\t 4 查 找\n\n\t\t 5 显 示\n\n\t\t 6 全 删\n\n\t\t 0 退 出"《《endl;
cin 》》 choice;
switch (choice)
{
case ’1’:
cout 《《 "输入读者编号:";
cin 》》 readerid;
cout 《《 "输入读者姓名:";
cin 》》 rname;
addreader (readerid,rname);
break;
case ’2’:
cout 《《 "输入读者编号:";
cin 》》 readerid;
r=query(readerid);
if (r==NULL)
{
cout 《《 " 该读者不存在 "《《endl;
break;
}
cout 《《 "输入新的姓名:";
cin 》》 rname;
r-》setname(rname);
break;
case ’3’:
cout 《《 " 输入读者编号:";
cin 》》 readerid;
r=query(readerid);
if (r==NULL)
{
cout 《《" 该读者不存在" 《《 endl;
break;
}
r-》delbook();
break;
case ’4’:
cout 《《 "读入读者编号:";
cin 》》 readerid;
r=query(readerid);
if (r==NULL)
{
cout 《《"该读者不存在"《《 endl;
break;
}
r-》disp();
break;
case ’5’:
disp();
break;
case ’6’:
clear();
break;
default:cout《《"输入错误,请从新输入:";break;
}
}
}
//图书类,实现对图书的描述,图书的编号,书名,借出,还入等
class Book
{
private:
int tag;//删除标记 1:已删 0:未删
int no;//图书编号
char name;//书名
int ***helf;//是否再架 1:再架 2:已借
public:
Book(){}
char *getname() //获取姓名
int getno()//获取图书编号
int gettag()//获取删除标记
void setname(char na)//设置书名
{
strcpy(name,na);
}
void delbook()//删除图书
void addbook(int n,char *na)//增加图书
{
tag=0;
no=n;
strcpy(name,na);
***helf=1;
}
int borrowbook()//借书操作
{
if (***helf==1)
{
***helf=0;
return 1;
}
return 0;
}
void retbook()//还书操作
{
***helf=1;
}
void disp()//输出图书
{
cout 《《 setw(6) 《《 no 《《 setw(18) 《《 name 《《 setw(10)
《《(***helf==1? "在架":"已借") 《《endl;
}
};
//图书库类,实现对图书的维护,查找,删除等
class BDatabase
{
private:
int top; //图书记录指针
Book book; //图书记录
public:
BDatabase()//构造函数,将book.txt读到book中
{
Book b;
top=-1;
fstream file("book.txt",ios::in);
while (1)
{
file.read((char *)&b,sizeof(b));
if (!file) break;
top++;
book=b;
}
file.close();
}
void clear()//全删
{
top=-1;
}
int addbook(int n,char *na)//增加图书
{
Book *p=query(n);
if (NULL==p)
{
top++;
book.addbook(n,na);
return 1;
}
return 0;
}
Book *query(int bookid)//查找图书
{
for (int i=0;i《=top;i++)
if (book.gettag()==0)
{
return &book;
}
return NULL;
}
void bookdata();//图书库维护
void disp()
{
for (int i=0;i《=top;i++)
if (book.gettag()==0)
book.disp();
}
~BDatabase()//析构函数,将book写到book.txt文件中
{
fstream file("book.txt",ios::out);
for (int i=0;i《=top;i++)
if (book.gettag()==0)
file.write((char *)&book));
file.close();
}
};
void BDatabase::bookdata()
{
char choice;
char bname;
int bookid;
Book *b;
while (choice!=’0’)
{
cout 《《"\n\n\n\t\t\t图 书 维 护 "《《endl《《endl;
cout《《"\t\t1 新 增\n \t\t2 更 改\n\t\t3 删 除\n\t\t4 查 找\n\t\t5 显 示\n\t\t6 全 删\n\t\t0 退 出"《《endl;
cin 》》 choice;
switch (choice)
{
case ’1’:
cout 《《 "输入图书编号:"《《endl;
cin 》》 bookid;
cout 《《 "输入图书书名:"《《endl;
cin 》》 bname;
addbook(bookid,bname);
break;
case ’2’:
cout 《《 "输入图书编号:"《《endl;
cin 》》 bookid;
b=query(bookid);
if (b==NULL)
{
cout 《《 " 该图书不存在 "《《endl;
break;
}
cout 《《 "输入新的书名:"《《endl;
cin 》》 bname;
b-》setname(bname);
break;
case ’3’:
cout 《《" 读入图书编号:"《《endl;
cin 》》 bookid;
b=query(bookid);
if (b==NULL)
{
cout 《《" 该图书不存在" 《《 endl;
break;
}
b-》delbook();
break;
case ’4’:
cout 《《 " 读入图书编号:"《《endl;
cin 》》 bookid;
b=query(bookid);
if (b==NULL)
{
cout 《《" 该图书不存在"《《 endl;
break;
}
b-》disp();
break;
case ’5’:
disp();
break;
case ’6’:
clear();
break;
default:cout《《"输入错误,请从新输入:";
}
}
}
//main() 函数的实现,程序的主界面的引导
void main()
{
char choice;
int bookid,readerid;
RDatabase ReaderDB;
Reader *r;
BDatabase BookDB;
Book *b;
while(choice!=’0’)
{
cout 《《endl《《endl《《"\t\t\t 图 书 管 理 系 统\n\n\n";
cout 《《"\t\t\t1 借 书\n\n\t\t\t2 还 书 \n\n\t\t\t3 图 书 维 护\n\n\t\t\t4 读 者 维 护\n\n\t\t\t0 离 开"《《endl;
cin 》》 choice;
switch (choice)
{
case ’1’:
cout 《《" 借书 读者编号:";
cin 》》readerid;
cout 《《" 图书编号: ";
cin 》》bookid;
r=ReaderDB.query(readerid);//按编号查找
if (NULL==r)
{
cout 《《" 不存在该读者,不能借书"《《 endl;
break;
}
b=BookDB.query(bookid);
if (b==NULL)
{
cout 《《" 不存在该图书,不能借书"《《 endl;
break;
}
if (b-》borrowbook()==0)
{
cout 《《 " 该图书已借出,不能借书"《《 endl;
break;
}
r-》borrowbook(b-》getno());
break;
case ’2’:
cout《《"还书\n 读者编号:";
cin 》》readerid;
cout 《《 " 图书编号:";
cin 》》bookid;
r=ReaderDB.query(readerid);
if (r==NULL)
{
cout 《《" 不存在该读者,不能还书" 《《 endl;
break;
}
b=BookDB.query(bookid);
if (b==NULL)
{
cout 《《" 不存在该图书,不能还书" 《《endl;
break;
}
b-》retbook();
r-》retbook(b-》getno());
break;
case ’3’:
BookDB.bookdata();
break;
case ’4’:
ReaderDB.readerdata();
break;
default:cout《《"输入错误,请从新输入:";
}
}
}
C语言编程图书管理系统
#include#include#include#include#includestructbook{charnumber\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语言图书管理系统的优点是代码简单,学习门槛低,与低级操作系统兼容性强,可以直接操作硬件,能够让用户进行图书的管理,方便用户查阅、借阅和归还图书;缺点是界面简单,无法进行图形化界面的实现,用户交互体验不佳,因此需要时间和技能的积累,代码不够鲁棒,易受到输入错误和程序错误的影响,需要进行大量测试和调试。
更多文章:
laravel自带的队列(laravel能不能同时使用两个队列驱动)
2026年4月16日 04:40
android开发经典案例(HTC跟其他Android厂商比有什么核心竞争力)
2026年4月16日 04:20
font字体网站(http://font.knowsky.com/这里的字体能否打包下载)
2026年4月16日 03:40
php写api(PHP写一个POST方式API供用户使用服务端代码应该怎么写)
2026年4月16日 02:20
java多态实现的三种形式(java 多态怎么回事,如何实现)
2026年4月16日 02:00





