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

图书馆信息管理系统设计c语言

发布时间: 2023-04-16 11:09:03

A. 用c语言做图书馆图书信息管理软件设计

呵呵,谁会为了那20个没用的玩意儿浪费自己的时间为你写程序

B. 用C语言设计和实现一个“图书信息管理系统”,满足以下要求:

const int MAXLEN=100;int count; //记录书籍数量char fName[20]="backup.dat"; //磁盘文件:书籍信息文件名 int LEN; //全局变量,通讯录中当前联系人总数int n;char *key;
typedef struct book //联系人数据结构
{ char no[20]; //序号 char book_name[20]; // 书名 char writer[30]; //作者名 char booknum[20]; //书籍分类 char press[20]; //出版单位 char price[10]; //书籍价格 }BOOK;BOOK b[MAXLEN];
typedef struct index{ int len; //数组长度 BOOK b[MAXLEN]; //指针数组}Index;
int Select();int Menu(void);int SubMenu2(void);int SubMenu4(void);int addbook(BOOK b[]);int output(BOOK b[]);int deletebook(BOOK b[]);void printno(BOOK b[]);int modifyIndo(BOOK b[]);int Save(BOOK b[]); int loaddata(BOOK b[]);int Copy(void);void New(BOOK b[]);int Load(BOOK b[]);void List(BOOK b[]);//void findbook(char *name,BOOK b[],char *key);
#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<string.h>#include<memory.h>int main(int argc, char* argv[]){ int select=0;
/*int select;用户所选的菜单项代码: 主菜单:1 查找图书信息、2 更新图书信息 、3 备份图书信息、0 退出程序 更新图书信息子菜单:21 新增图书信息、 22 编辑图书信息、 23 删除图书信息、 20 返回主菜单 查看图书信息子菜单:11 图书信息库 、12书名查找、13 作者名查找、14 序号查找 */
BOOK b[MAXLEN]; memset(b,0,sizeof(b)); //将b初始化为空,memory.h loaddata(b); //从图书库文件中读取信息 //循环显示菜单,供用户选择 do{
if(select<10||select==20||select==40) select=Menu(); else if(select>20 && select<30) select=SubMenu2(); else if(select>40 && select<50) select=SubMenu4(); switch(select) { case 11:// 图书信息库 break; case 12://书名查找 break;
case 13://作者名查找 break; case 14://类别查找 break;
case 21://新增图书信息、 break; case 22://编辑图书信息、 break; case 23://删除图书信息、 break; case 20://返回主菜单 break; case 3: system("cls"); Save(b); Copy(); break; case 0://退出程序 break; } }while(select!=0); return 0;}
int SubMenu4(void){ char menu; do{ system("cls");//清屏,需要使用到stdlib.h puts("\n\t======更新图书信息======\n"); puts("\t 1.新增图书信息"); puts("\t 2.删除图书信息"); puts("\t 3.编辑图书信息"); puts("\t 0.返回主菜单"); puts("\n\t=================="); printf("\t请选择:");//提示选择 menu=getche(); switch(menu) { case '0': puts("\n\n\t返回主菜单!"); break; case '1': addbook(b); break; case '2': deletebook(b); break; case '3': modifyIndo(b); break; default: puts("\n\n\t选择错误!"); menu='9'; } }while(menu=='9'); return 40+menu-'0';}
void New(BOOK b[]){ int t=0; //找到BOOK中第一个空的位置,存放新输入 if(LEN>=MAXLEN) { printf("\n\n\t图书库已满!"); return ; }
while(strcmp(b[t].book_name,"")!=0) //找到b中第一个空的位置t t++; addbook(b); //新增,输入 LEN++; //增1}
int modifyIndo(BOOK b[])//编辑图书信息{ char no[20]; int i; printno(b);again: printf("\n请输入你想要编辑的书籍编号:"); fflush(stdin); gets(no); for(i=0;i<=count;i++) { if(strcmp(no,b[i].no)==0) break; } if(i>count) { printf("对不起,你输入的编号不存在,是否继续?Y/N:"); if((getchar()=='Y')||(getchar()=='y')) goto again; else return 0; } printf("\n正在修改《%s》的信息……\n",b[i].book_name); printf("请输入图书的名字:"); gets(b[i].book_name); printf("请输入图书的作者名:"); gets(b[i].writer); printf("请输入书籍类别:"); gets(b[i].booknum); printf("请输入书籍的出版单位:"); gets(b[i].press); printf("请输入书籍的价格:"); gets(b[i].price); printf("\n图书信息编辑成功!\n");

}
void printno(BOOK b[]){ int i; printf("\n当前库存中的书籍目录:\n"); for( i=0;i<=count;i++) { printf("%s %s ",b[i].no,b[i].book_name); if(i%3==0&&i>0) printf("\n"); }}
int output(BOOK b[]) //输出图书信息{ if(count<0) { printf("对不起,当前图书数量为0\n"); return 0; } for(int i=0;i<=count;i++) { printf("\n*************************书籍信息*****************************\n"); printf("序号:%s\n",b[i].no); printf("书名:%s\n",b[i].book_name); printf("作者名:%s\n",b[i].writer); printf("书籍类别:%s\n",b[i].booknum); printf("出版单位:%s\n",b[i].press); printf("书籍价格:%s\n",b[i].price); } return 1; }
int deletebook(BOOK b[]) { char no[20]; int i; printno(b);loop: printf("\n请输入你要删除的书籍编号:"); fflush(stdin); gets(no); for(i=0;i<=count;i++) { if(strcmp(no,b[i].no)==0) break; } if(i>count) { printf("对不起,你输入的编号不存在,是否继续?Y/N:"); if((getchar()=='Y')||(getchar()=='y')) goto loop; else return 0; } printf("您确定要删除《%s》吗?Y/N:",b[i].book_name); if((getchar()=='Y')||(getchar()=='y'))
{ if(i==count) { count--; } else { for(;i<=count;i++) { b[i]=b[i+1]; count--; }
}
} else return 0; }
int loaddata(BOOK b[]){ int i=0; //i:b数组的下标 FILE *fp=fopen(fName,"r"); if(!fp) { printf("\n\t对不起,路径或者文件错误,无法读入!请重新增加!"); getch(); return 0; } fscanf(fp,"书籍编号\t书名\t作者\t类别\t出版单位\t价格"); while((!feof(fp))) { fscanf(fp,"\n%s\t%s\t%s\t%s\t%s\t%s",&b[i].no,&b[i].book_name,&b[i].writer,&b[i].booknum,&b[i].press,&b[i].price); i++; } count=i; fclose(fp); printf("加载成功!!"); return 1;}
int Select(){ int i=0; int c; //c:scanf输入的返回值,输入成功返回1;否则返回0 printf("\n\t请按需要选择图书信息:"); c=scanf("%d",&i); while(i<1 || i>LEN) { printf("\n\t输入错误!请按序号选择图书信息:"); if(c==0) fflush(stdin); c=scanf("%d",&i); } return i-1;} int addbook(BOOK b[]) //增加图书信息{ int i=0; char c; printf("\n*******************************新增图书信息****************************\n"); for(;;i++) { if(i>=MAXLEN) { printf("\n对不起,库存已满!不能继续添加。"); } printf("请输入图书的序号:"); gets(b[i].no); printf("请输入图书的名字:"); gets(b[i].book_name); printf("请输入图书的作者名:"); gets(b[i].writer); printf("请输入书籍类别:"); gets(b[i].booknum); printf("请输入书籍的出版单位:"); gets(b[i].press); printf("请输入书籍的价格:"); gets(b[i].price); printf("图书增加成功!\n"); printf("请问您要继续添加书籍信息吗?(Y/N): "); c=getchar(); if(c=='Y'||c=='y') { getchar(); printf("\n"); continue; } else break; } count=i; return i;
}//查重。int Duplicate(char *name,BOOK b[],char *original){ int i,j; int p=0; //重复标志:1 重复 ,0 没有重复 if(strcmp(name,original)!=0) for(i=0,j=0;j<LEN;) { while(strcmp(b[i].book_name,"")==0) i++;
if(strcmp(name,b[i].book_name) ==0) { p=1; printf("\n\t重复!请重新输入:"); break; } i++; j++; } return p; }int SubMenu2(void){ char menu,*name; do{ system("cls"); //清屏,需要使用到stdlib.h puts("\n\t======查找图书信息======\n"); puts("\t 1.图书信息库"); puts("\t 2.书名查找"); puts("\t 3.作者名查找"); puts("\t 4.序号查找"); puts("\t 0.返回主菜单"); puts("\n\t=================="); printf("\t请选择:"); //提示选择 menu=getche(); switch(menu) { case '0': puts("\n\n\t返回主菜单!"); break; case '1': output(b); getch(); break; case '2': //findbook(name,b,key); getch(); break; case '3': case '4': printno(b); break; default: puts("\n\n\t选择错误!"); menu='9'; } }while(menu=='9'); return 20+menu-'0';}
int Menu(void){ char menu; do{ system("cls"); puts("\n\t======主菜单======\n"); puts("\t 1.查找图书信息"); puts("\t 2.更新图书信息"); puts("\t 3.备份图书信息"); puts("\t 0.退出程序"); puts("\n\t=================="); printf("\t请选择:"); //提示选择 menu=getche(); switch(menu) //将用户输入的选项menu转换成系统定义的菜单代码 {
case '0': puts("\n\n\t退出程序!"); menu=menu-'0'; break;
case '2': menu=SubMenu4();
break; case '3': menu=menu-'0';
break; case '1': menu=SubMenu2();
break; default: puts("\n\n\t选择错误!"); menu='9'; //输入了无效的菜单代码,需要重新输入 } }while(menu=='9'); return menu;}
int Load(BOOK b[]){ FILE *fin; int i=0; fin=fopen(fName,"rb"); if(!fin) { printf("\n\t书籍信息不存在,请先新增加图书信息!\n\n按任意键继续……"); getch(); return 0; } while(1) { fread(&b[i],sizeof(BOOK),1,fin); if(feof(fin)) break; i++; } fclose(fin); LEN=i; return i;
}
int Save(BOOK b[])//存入文件 {
int i; //i:b数组的下标 FILE *fp=fopen(fName,"w"); if(!fp) { printf("\n\t不能正确保存书籍信息!按任意键继续……"); getch(); return 0; } fprintf(fp,"书籍编号\t书名\t作者\t类别\t出版单位\t价格"); for( i = 0; i <=count; i++) { fprintf(fp,"\n%s\t%s\t%s\t%s\t%s\t%s",b[i].no,b[i].book_name,b[i].writer,b[i].booknum,b[i].press,b[i].price); } fclose(fp); printf("保存成功!!"); return 1;}
int Copy(void) //备份图书信息,复制图书信息文件{ FILE *fout,*fin; BOOK *p=(BOOK *)malloc(sizeof(BOOK)); //存放从图书信息库读入的临时数据 char name[20];
fin=fopen(fName,"rb"); if(!fin) { printf("\n\t没有此图书信息!"); return 0; }
do{ printf("\n\t请输入备份文件名:"); scanf("%s",name); strcat(name,".bak"); fout=fopen(name,"wb"); if(!fout) printf("\t无效文件名或路径!\n"); }while(!fout);
while(1) { fread(p,sizeof(BOOK),1,fin); if(feof(fin)) break; fwrite(p,sizeof(BOOK),1,fout); }
printf("\n\t备份成功!"); free(p); return 1;}
void findbook(char *name,BOOK b[],char *key){
int i,j; //i:数组下标 j:除姓名为空串以外的实际人数 int p=0; printf("请输入您需要查找图书信息的书名:"); scanf("%s",name); if(strcmp(name,key)!=0) for(i=0,j=0;j<LEN;) { while(strcmp(b[i].book_name ,"")==0) i++; if(strcmp(name,b[i].book_name) ==0) { p=1; printf("\n%s\t%s\t%s\t%s\t%s\t%s",&b[i].no,&b[i].book_name,&b[i].writer,&b[i].booknum,&b[i].press,&b[i].price); } }}

C. C语言程序设计的图书管理系统

我们也开始做课程设计了呢~~~ 这是我同学做的:

#include
#include
#include

struct BOOK
{
int id,usr[10],total,store,days[10];
char name[31],author[21];
}books[100];
/*上面是结构体的定义,用于存放书籍及借书的信息。*/

void page_title(char *menu_item)
{
clrscr();
printf(">>> 图 书 管 理 系 统 <<<\n\n- %s -\n\n",menu_item);
}
/*上面是打印页眉的函数,同时通过参数menu_item,可以显示当前的状态。*/

void return_confirm(void)
{
printf("\n按任意键返回……\n");
getch();
}
/*上面是返回前请求确认的函数,以便在返回前观察结果*/

int search_book(void)
{
int n,i;
printf("请输入图书序号:");
scanf("%d",&i);
for(n=0;n<100;n++)
{
if(books[n].id==i)
{
printf("书名:%s\n",books[n].name);
printf("作者:%s\n",books[n].author);
printf("存数:%d of ",books[n].store);
printf("%d\n",books[n].total);
return n;
}
}
printf("\n输入错误或无效图书序号.\n");
return -1;
}
/*上面的函数是在数组中找到图书号匹配的记录,显示其信息并返
回数组下标,如果找不到相应记录则提示错误并返回-1。*/

void book_out(void)
{
int n,s,l,d;
page_title("借阅图书");
if((n=search_book())!=-1&&books[n].store>0)
{
printf("请输入借书证序号:");
scanf("%d",&s);
printf("请输入可借天数:");
scanf("%d",&d);
for(l=0;l<10;l++)
{
if(books[n].usr[l]==0)
{
books[n].usr[l]=s;
books[n].days[l]=d;
break;
}
}
books[n].store--;
}
if(n!=-1&&books[n].store==0) printf("此书已经全部借出.\n");
return_confirm();
}
/*上面是借书的函数,首先调用找书函数*/

void book_in(void)
{
int n,s,l;
page_title("归还图书");
if((n=search_book())!=-1&&books[n].store<books[n].total)
{
printf("借阅者图书证列表:\n");
for(l=0;l<10;l++)
if (books[n].usr[l]!=0)
printf("[%d] - %d天\n",books[n].usr[l],books[n].days[l]);
printf("请输入借书证序号:");
scanf("%d",&s);
for(l=0;l<10;l++)
{
if(books[n].usr[l]==s)
{
books[n].usr[l]=0;
books[n].days[l]=0;
break;
}
}
books[n].store++;
}
if(n!=-1&&books[n].store==books[n].total)
printf("全部入藏.\n");
return_confirm();
}

void book_add(void)
{
int n;
page_title("注册新书");
for(n=0;n<100;n++)
if(books[n].id==0) break;
printf("序号:");
scanf("%d",&books[n].id);
printf("书名:");
scanf("%s",&books[n].name);
printf("作者:");
scanf("%s",&books[n].author);
printf("数量:");
scanf("%d",&books[n].total);
books[n].store=books[n].total;
return_confirm();
}
void book_del(void)
{
int n;
page_title("注销旧书");
if((n=search_book())!=-1) books[n].id=0;
printf("该书已注销.\n");
return_confirm();
}

void main(void)
{
menu: page_title("操作选单");
printf("请用数字键选择操作\n\n");
printf("1 借阅图书\n2 归还图书\n\n");
printf("3 注册新书\n4 注销旧书\n\n");
printf("\n0 退出\n");
switch(getch())
{
case '1' : book_out();break;
case '2' : book_in();break;
case '3' : book_add();break;
case '4' : book_del();break;
case '0' : exit(0);
}
goto menu;
}
{
int n;
page_title("广?症慕");
if((n=search_book())!=-1) books[n].id=0;
printf("乎慕厮广?.\n");
return_confirm();
}

void main(void)
{
menu: page_title("荷恬佥汽");
printf("萩喘方忖囚佥夲荷恬\n\n");
printf("1 処堋夕慕\n2 拷珊夕慕\n\n");
printf("3 广过仟慕\n4 广?症慕\n\n");
printf("\n0 曜竃\n");
switch(getch())
{
case '1' : book_out();break;
case '2' : book_in();break;
case '3' : book_add();break;
case '4' : book_del();break;
case '0' : exit(0);
}
goto menu;
}

D. 用C语言写个图书馆系统

下面可以参考参考!

完整的C语言图书管理系统

#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include "graphics.h"
#include "math.h"
#define m 1
struct data
{ int year;
int month;
int day;
};

struct ReaderNode
{
char num[20];
struct data bro;
struct data back;
};

struct BookNode
{
char title[15];
char writer[15];
int currentnum;
int totalnum;
char brief[30];
struct ReaderNode reader[20];
};

struct TreeNode
{
int n;
struct TreeNode *prt;
int key[2*m];
struct BookNode *rec[2*m];
struct TreeNode *link[2*m+1];

};

struct BookNode *InputNode();
struct TreeNode *mbsearch(struct TreeNode *bth,int x,int *k,int *flag);
struct TreeNode *mbinsert(struct TreeNode *bth);
struct TreeNode *mbdel(struct TreeNode *bth);
void OutputNode(struct TreeNode *bth);
void borrow(struct TreeNode *bth);
void payback(struct TreeNode *bth);
char menu(void);
struct TreeNode *mbsearch(struct TreeNode *bth,int x,int *k,int *flag)
{
struct TreeNode *p,*q;
p=bth; *flag=0; q=p;
while( (p!=NULL) && (*flag==0) )
{
*k=1;q=p;
while( (*k < q->n) && ( q->key[*k-1] < x) ) *k=*k+1;
if( q->key[*k-1]==x) *flag=1;
else if( ( *k==q->n ) && ( q->key[*k-1] < x) ) {p=q->link[*k];p->prt=q;}
else { p=q->link[*k-1]; p->prt=q;*k=*k-1;}
}
return(q);
}

struct TreeNode *mbinsert(struct TreeNode *bth)
{
int flag,j,k,t;
int y,x,z;
struct TreeNode *p,*q,*u,*s;
struct BookNode *r,*l;
clrscr();
printf("\n\tPlease input the book you want to insert: ");
scanf("%d",&x);
q=mbsearch(bth,x,&k,&flag);
if(flag==1)
{

printf("\n\tHas %d this kind of book,do you want to add another?(y/n)\n",(q->rec[k-1])->totalnum);
z=getch();
if(z=='y'||z=='Y')
{
(q->rec[k-1])->totalnum++; (q->rec[k-1])->currentnum++;
printf("\n\tNow total has %d this kind of book,",(q->rec[k-1])->totalnum);
printf("\n\tand current has %d in the library.",(q->rec[k-1])->currentnum);
}
return(bth);
}
r=InputNode(bth);
if(bth==NULL)
{
bth=p=(struct TreeNode *)malloc(sizeof(struct TreeNode));
p->n=1; p->key[0]=x; p->rec[0]=r;p->prt=NULL;
for(j=1;j<=2*m+1;j++) p->link[j-1]=NULL;
return(p);
}

p=NULL; t=0;
while(t==0)
{
if(k==q->n) {y=x;l=r;u=p;}
else
{
y=q->key[q->n-1]; l=q->rec[q->n-1];u=q->link[q->n];
for(j=(q->n)-1; j>=k+1; j--)
{
q->key[j]=q->key[j-1];q->rec[j]=q->rec[j-1];q->link[j+1]=q->link[j];
}
q->key[k]=x;q->rec[k]=r;q->link[k+1]=p;
if(p!=NULL) p->prt=q;
}

if(q->n<2*m)
{
q->n=(q->n)+1;
t=1;
q->key[(q->n)-1]=y; q->rec[(q->n)-1]=l; q->link[q->n]=u;
if(u!=NULL) u->prt=q;
}
else
{
p=(struct TreeNode *)malloc(sizeof(struct TreeNode));
p->n=m; q->n=m; p->prt=q->prt;
x=q->key[m];r=q->rec[m];
for(j=1;j<=m-1;j++)
{
p->key[j-1]=q->key[m+j];p->rec[j-1]=q->rec[m+j];p->link[j-1]=q->link[m+j];
if(q->link[m+j]!=NULL) (q->link[m+j])->prt=p;

}

p->link[m-1]=q->link[2*m];
p->link[m]=u;
p->key[m-1]=y;
p->rec[m-1]=l;

if(u!=NULL) u->prt=p;
for(j=m+2;j<=2*m+1;j++)
{
q->link[j-1]=NULL;p->link[j-1]=NULL;
}

if(q->prt==NULL)
{
s=(struct TreeNode *)malloc(sizeof(struct TreeNode));
s->key[0]=x; s->rec[0]=r;
s->link[0]=q; s->link[1]=p;
s->n=1; s->prt=NULL; q->prt=s; p->prt=s;
for(j=3;j<=2*m+1;j++) s->link[j-1]=NULL;
bth=s; t=1;
}
else
{
q=q->prt; k=1;
while((k<=q->n)&&(q->key[k-1]<x)) k=k+1;
k=k-1;
}
}
}
return(bth);
}
struct TreeNode *mbdel(struct TreeNode *bth)
{
int flag,j,k,t;
int x,y;
struct TreeNode *u,*s,*p,*q;
struct BookNode *r,*l;
clrscr();
printf("\n\tPlease input the book you want to delete: ");
scanf("%d",&x);
q=mbsearch(bth,x,&k,&flag);
if(flag==0) { printf("\n\tThe book is not exist!\n"); return(bth);}
p=q->link[k];
if(p!=NULL)
{
while(p->link[0]!=NULL) p=p->link[0];
q->key[k-1]=p->key[0];
q->rec[k-1]=p->rec[0];
k=1;q=p;
}

for(j=k;j<=q->n-1;j++)
{
q->key[j-1]=q->key[j];
q->rec[j-1]=q->rec[j];
}
q->n=q->n-1;

while ((q!=bth)&&(q->n<m))
{
p=q->prt;j=1;
while(p->link[j-1]!=q) j=j+1;
if((j<=p->n)&&((p->link[j])->n>m))
{
s=p->link[j];
y=s->key[0];
l=s->rec[0];
u=s->link[0];
for(k=1;k<=s->n-1;k++)
{
s->key[k-1]=s->key[k];
s->rec[k-1]=s->rec[k];
s->link[k-1]=s->link[k];
}
s->link[s->n-1]=s->link[s->n];
s->link[s->n]=NULL;
s->n=s->n-1; q->n=q->n+1;
q->key[q->n-1]=p->key[j-1];
q->rec[q->n-1]=p->rec[j-1];
q->link[q->n]=u;
p->key[j-1]=y;
p->rec[j-1]=l;
if(u!=NULL) u->prt=q;
}
else if((j>1)&&((p->link[j-2])->n>m))
{
s=p->link[j-2];
q->n=q->n+1;
q->link[q->n]=q->link[q->n-1];

for(k=q->n-1;k>=1;k--)
{
q->key[k]=q->key[k-1];
q->rec[k]=q->rec[k-1];
q->link[k]=q->link[k-1];
}
q->key[0]=p->key[j-2];
q->rec[0]=p->rec[j-2];
u=s->link[s->n];
q->link[0]=u;
if(u!=NULL) u->prt=q;
p->key[j-2]=s->key[s->n-1];
p->rec[j-2]=s->rec[s->n-1];
s->link[s->n]=NULL;
s->n=s->n-1;
}

else
{
if(j==p->n+1)
{ q=p->link[j-2]; s=p->link[j-1]; j=j-1;}
else s=p->link[j];
q->key[q->n]=p->key[j-1];
q->rec[q->n]=p->rec[j-1];
t=q->n+1;
for(k=1;k<=s->n;k++)
{ q->key[t+k-1]=s->key[k-1];
q->rec[t+k-1]=s->rec[k-1];
u=s->link[k-1];
q->link[t+k-1]=u;
if(u!=NULL) u->prt=q;
}
u=s->link[s->n]; q->link[t+s->n]=u;
if(u!=NULL) u->prt=q;
q->n=2*m;
free(s);
for(k=j;k<=p->n-1;k++)
{
p->key[k-1]=p->key[k];
p->rec[k-1]=p->rec[k];
p->link[k]=p->link[k+1];
}
p->n=p->n-1; s=q; q=p;
}
}
if((q==bth)&&(q->n==0))
{ free(bth); bth=s; bth->prt=NULL;
if(s->n==0) {bth=NULL; free(s); }
}
printf("\n\tThe book has been delete !");
return(bth);
}
struct BookNode *InputNode()
{
struct BookNode *p;
int i;
p=(struct BookNode *)malloc(sizeof(struct BookNode));
clrscr();
fflush(stdin);
printf("\n\tInput the title: ");
gets(p->title);
printf("\n\tInput the writer: ");
gets(p->writer);
printf("\n\tInput the book current amount: ");
scanf("%d",&p->currentnum);
printf("\n\tInput the book total amount: ");
scanf("%d",&p->totalnum);
fflush(stdin);
printf("\n\tInput the book brief instruction: ");
gets(p->brief);
for(i=0;i<20;i++)
(p->reader[i]).num[0]='\0';
return(p);
}
void OutputNode(struct TreeNode *bth)
{
struct TreeNode *q;
struct BookNode *p;
int k;
int x;
int flag;
clrscr();
printf("\n\tPlease input the book you want to search: ");
scanf("%d",&x);
q=mbsearch(bth,x,&k,&flag);
if(flag==1)
{
p=q->rec[k-1];
printf("\n\tTitle: %s",p->title);
printf("\n\tWriter: %s",p->writer);
printf("\n\tCurrentAmount: %d",p->currentnum);
printf("\n\tTotalAmount: %d",p->totalnum);
printf("\n\tBriefIntroction: %s\n",p->brief);
}
else printf("\n\tThis book is not exist!");
}
void borrow(struct TreeNode *bth)
{
struct TreeNode *q;
struct BookNode *p;
struct ReaderNode *r;
int i,k, x, flag,t;
clrscr();
printf("\n\tPlease input the book you want to borrow: ");
scanf("%d",&x);
q=mbsearch(bth,x,&k,&flag);
if(flag==1)
{
p=q->rec[k-1];
printf("\n\tDo you want this book ?(y/n)");
printf("\n\tTitle: %s",p->title);
printf("\n\tWriter: %s",p->writer);
printf("\n\tCurrentAmount: %d",p->currentnum);
printf("\n\tTotalAmount: %d",p->totalnum);
printf("\n\tBriefIntroction: %s",p->brief);
t=getch();
if(t=='y'||t=='Y')
{
if( (p->currentnum)==0) printf("\n\tSorry,this book has all borrow out...");
else
{
clrscr();
for(i=0;i<20;i++) if( (p->reader[i]).num[0]=='\0') break;
printf("\n\tPlease input your certificate number: ");
scanf("%s",(p->reader[i]).num);
printf("\n\tPlease input the borrow data: ");
printf("\n\tYear: ");
scanf("%d",&((p->reader[i]).bro.year));
printf("\tMonth: ");
scanf("%d",&((p->reader[i]).bro.month));
printf("\tDay: ");
scanf("%d",&((p->reader[i]).bro.day));

printf("\n\tPlease input the payback data: ");
printf("\n\tYear: ");
scanf("%d",&((p->reader[i]).back.year));
printf("\tMonth: ");
scanf("%d",&((p->reader[i]).back.month));
printf("\tDay: ");
scanf("%d",&((p->reader[i]).back.day));

p->currentnum--;
printf("\n\tYou have borrow the book.");}
}

}
else printf("\n\tThis book is not exist!");
}
void payback(struct TreeNode *bth)
{
struct TreeNode *q;
struct BookNode *p;
int i,k, x, flag,t,j;
int year,month,day,d;
float pay;
char temp[20];
clrscr();
printf("\n\tPlease input the book you want to payback: ");
scanf("%d",&x);
q=mbsearch(bth,x,&k,&flag);
if(flag==1)
{
p=q->rec[k-1];
printf("\n\tDo you want to payback this book ?(y/n)");
printf("\n\tTitle: %s",p->title);
printf("\n\tWriter: %s",p->writer);
printf("\n\tCurrentAmount: %d",p->currentnum);
printf("\n\tTotalAmount: %d",p->totalnum);
printf("\n\tBriefIntroction: %s",p->brief);
t=getch();
if(t=='y'||t=='Y')
{
if( (p->currentnum) >=(p->totalnum) )
printf("\n\tYou want to offer a more book ??\n");
else
{
clrscr();
printf("\n\tPlease input your certificate number: ");
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\tYou haven't borrow this book.");return;}
printf("\n\tToday is:");
printf("\n\tYear: ");
scanf("%d",&year);
printf("\tMonth: ");
scanf("%d",&month);
printf("\tDay: ");
scanf("%d",&day);

d=0;
if(year<(p->reader[i]).back.year) d=1;
if(year<=(p->reader[i]).back.year && month<(p->reader[i]).back.month) d=1;
if(year<=(p->reader[i]).back.year && month<=(p->reader[i]).back.month && day<(p->reader[i]).back.day) d=1;
if(d==0)
{
clrscr();
pay=(year-(p->reader[i]).back.year)*365+(month-(p->reader[i]).back.month)*30+(day-(p->reader[i]).back.day);
printf("\n\tYou borrow this book is in %d-%d-%d",(p->reader[i]).bro.year,(p->reader[i]).bro.month,(p->reader[i]).bro.day);
printf("\n\tYou should pay it back in %d-%d-%d",(p->reader[i]).back.year,(p->reader[i]).back.month,(p->reader[i]).back.day);
printf("\n\tToday is %d-%d-%d",year,month,day);
printf("\n\n\tSo you have go out the payback day");
printf("\n\tYou have to pay %2.1f Yuan.",0.1*pay);
}
(p->reader[i]).num[0]='\0';
p->currentnum++;
printf("\n\tYou have payback the book.");
}
}

}
else printf("\n\tYou want to payback an inexistence book ???");

}
donghua()
{int graphdriver=VGA;
int graphmode=VGAHI;
int i,j;
registerbgidriver(EGAVGA_driver);
initgraph(&graphdriver,&graphmode,"");
clrscr();

for(i=0;i<=150;i+=5)
{setcolor(i);
textbackground(RED);
settextstyle(0,0,2);
outtextxy(100,i+140,"Liberary management System");
delay(10000000);
clrscr();
}
setcolor(RED);
outtextxy(50,200,"Loading");
delay(100000000000);
outtextxy(50,200,"Loading.");
delay(100000000000);
outtextxy(50,200,"Loading..");
delay(100000000000);
outtextxy(50,200,"Loading...");
delay(100000000000);
outtextxy(50,200,"Loading....");
delay(100000000000);
outtextxy(50,200,"Loading.....");
delay(100000000000);
outtextxy(50,200,"Loading......");
delay(100000000000);
outtextxy(50,200,"Loading.......");
delay(100000000000);
outtextxy(50,200,"Loading........");
delay(100000000000);
outtextxy(50,200,"Loading.........");
delay(100000000000);
outtextxy(50,200,"Loading..........");
delay(100000000000);
outtextxy(50,200,"Loading...........");
outtextxy(50,200,"Loading............");
delay(100000000000);
for(i=0;i<=10;i++)
delay(100000000000);
clrscr();

}
char menu(void)
{
clrscr();
window(1,1,80,25);
textmode(MONO);
textbackground(BLACK);
textcolor(5);
printf("\n\t ****************************************************");
printf("\n\t ***** Welcome to Liberary management System *****");
printf("\n\t ****************************************************");
printf("\n\t ****************************************************");
printf("\n\t *1.Add a book *");
printf("\n\t ****************************************************");
printf("\n\t *2.Delete a book *");
printf("\n\t ****************************************************");
printf("\n\t *3.Search a book *");
printf("\n\t ****************************************************");
printf("\n\t *4.Borrow a book *");
printf("\n\t ****************************************************");
printf("\n\t *5.Payback a book *");
printf("\n\t ****************************************************");
printf("\n\t *0.exit *");
printf("\n\t ****************************************************");
printf("\n\t please select: ");
return getch();
}
bofangdonghua()
{int graphdriver=VGA;
int graphmode=VGAHI;
int i,j;
char c;
registerbgidriver(EGAVGA_driver);
initgraph(&graphdriver,&graphmode,"");
/*************shi fou bo fang dong hua?**************/
printf:{setcolor(RED);
settextstyle(3,0,5);
outtextxy(100,30,"bo fang dong hua?");
outtextxy(150,80,"Yes");
outtextxy(300,80,"No");
c=getch();
if(c=='Y'||c=='y')
{donghua();
menu();
}
else
if(c=='N'||c=='n')
menu();
else
{setcolor(GREEN);
settextstyle(3,0,8);
outtextxy(200,240,"Error!");
delay(10000000000);
clrscr();
goto printf;
}
}
/**************************************/

}

void main()
{
char c,t;
int x;
int k,flag,p=1;
struct TreeNode *bth=NULL;

bofangdonghua();

while(1)
{
c=menu();
putch(c);
getch();
switch(c)
{
case '1': bth=mbinsert(bth);

break;

case '2': bth=mbdel(bth);

break;

case '3': OutputNode(bth);
break;

case '4': borrow(bth);
break;

case '5': payback(bth);
break;

case '0': clrscr();
printf("\n\tDo you want to return ?(y/n)");
t=getch();
if(t=='y'||t=='Y') exit(0);
break;
defult :break;
}
printf("\n\tPress any key to the main menu....");
getch();
}
}

E. 图书信息管理系统设计c语言(急求!!!)

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

typedefstructrecord{
chartitle[64];
charauthor[24];
charisbn[24];
doubleprice;
intcopies;
structrecord*next;
}Node,*LinkList,*pNode;

LinkListInitList(){
LinkListhead=(pNode)malloc(sizeof(Node));
head->title[0]='';
head->author[0]='';
head->isbn[0]='';
head->copies=0;
head->price=0.0;
head->next=NULL;
returnhead;
}

pNodeReadData(){
pNodep=(pNode)malloc(sizeof(Node));
fflush(stdin);
printf("书名:");
gets(p->title);
printf("作者:");
gets(p->author);
printf("图书编号:");
gets(p->isbn);
printf("单价:");
scanf("%lf",&p->price);
printf("数量:");
scanf("%d",&p->copies);
returnp;
}

voidAdd(LinkListhead){//头插法
pNodep=ReadData();
p->next=head->next;
head->next=p;
}

voidReadFile(LinkListhead){
charfilename[60];
FILE*inf;
intn=0;
pNodep;
printf("请输入文件名:");
fflush(stdin);
fgets(filename,60,stdin);
if((inf=fopen(filename,"rb"))==NULL){
printf("无法打开数据文件:%s ",filename);
system("pause");
return;
}
p=档岩漏(pNode)malloc(sizeof(Node));
while(fread((void*)p,sizeof(Node),1,inf)==1){
p->next=head->next;
head->next=p;
p=(pNode)malloc(sizeof(Node));
++n;
}
free(p);
fclose(inf);
printf("共读入%d条图书信息! ",n);
system("pause");
}

voidShowData(pNodepnode){
printf("书名:%s ",pnode->title);
printf("作者:%s ",pnode->author);
printf("编号:%s ",pnode->isbn);
printf("单价:%.2lf元 ",pnode->price);
printf("数量:%d本 ",pnode->copies);
}

voidPrintBookList(LinkListhead){
pNodep=head->next;
while(p){
ShowData(p);
p=p->next;
}
system("pause");
}

voidWriteFile(LinkListhead){
charfilename[60];
FILE*outf;
intn=0;
pNodep=head->next;
printf("请行烂输入文件名:");
fflush(stdin);
fgets(filename,60,stdin);
if((outf=fopen(filename,"wb"))==NULL){
printf("无法打开数据文件:%s ",filename);
system("pause");
return;
}
while(p){
fwrite((void*)p,sizeof(Node),1,outf);
p=p->next;
}
fclose(outf);
printf("共写出%d条图书信息! ",n);
system("pause");
}

voidSort(LinkListhead){//选枣郑择排序(按ISBN)
pNodept,qt,q,p;
for(p=head;p->next;p=p->next){
qt=p;
for(q=p->next;q->next;q=q->next)
if(strcmp(qt->next->isbn,q->next->isbn)>0)
qt=q;
if(p!=qt){//调整节点位置
pt=p->next;
p->next=qt->next;
qt->next=qt->next->next;
p->next->next=pt;
}
}
}

intDelete(LinkListhead){
pNodep,q;
charisbn[50],an[5];
printf("请输入欲删除图书ISBN:");
gets(isbn);
for(p=head;p->next;p=p->next){
if(strcmp(p->next->isbn,isbn)==0){
printf("将要删除图书《%s》! ",p->next->title);
ShowData(p->next);
printf("1、删除,0、放弃! ");
printf("请选择:");
fflush(stdin);
fgets(an,5,stdin);
if(an[0]=='1'){
q=p->next;
p->next=q->next;
free(q);
}
return1;
}
}
printf("对不起,没有找到编号为%s的图书! ",isbn);
return0;
}

voidModify(LinkListhead){
pNodep=head->next;
charisbn[50],an[5];
intflag;
do{
printf("欲修改图书编号:");
fflush(stdin);
gets(isbn);
flag=1;
while(p){
if(strcmp(isbn,p->isbn)==0){
p=ReadData();
flag=0;
break;
}
p=p->next;
}
if(flag)printf("没有找到编号为%s的图书。 ",isbn);
elseprintf("修改成功。 ");
printf("1、继续修改0、返回主菜单 ");
fflush(stdin);
gets(an);
}while(an[0]=='1');
}

voidFreeList(LinkListhead){
pNodeq,p=head;
while(p){
q=p->next;
free(p);
p=q;
}
}

voidMenu(void){
system("cls");
printf("************************************************** ");
printf("*1、添加2、显示* ");
printf("*3、排序4、删除* ");
printf("*5、修改6、读文件* ");
printf("*7、写文件0、退出* ");
printf("************************************************** ");
}

intmain(){
intchoice;
LinkListhead=InitList();
do{
Menu();
printf("请选择:");
scanf("%d",&choice);
switch(choice){
case1:Add(head);break;
case2:PrintBookList(head);break;
case3:Sort(head);break;
case4:Delete(head);break;
case5:Modify(head);break;
case6:ReadFile(head);break;
case7:WriteFile(head);break;
default:break;
}
}while(choice);
FreeList(head);
printf("End! ");
return0;
}

F. 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;

}
}
}

G. c语言课程设计 图书管理系统

高级语言程序设计(2)课程设计
   
一 程序设计说明弯迟书
【设计题目】 图书馆借阅管理
【问题描述】图书馆,适合用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++这门语言有了更深的认识,操作能力有了提高。要想得到敲的代码运行出来后的满足感,需要耐心细心,毅力以及充沛的体力。只有经过多次编辑,多次编译,再多次运行,才能编写出更好的程序,有时候需要多次的更正才达到所要的运行结果。学习编程,需要多揣摩,实践,实践,再实践,编程技能才能更上一层楼,此外还得多向高手请教!
【源程序代码】
//********************
//图书馆借阅管理
//班级:
//学号:
//姓名:
//********************
#include<iostream.h>
#include<iomanip.h>
#include<string.h>
#include<fstream.h>
const int Maxr=1000;//最多的读者
const int Maxb=10000;//最多的图书
const int Maxbor=8;//每位读者最多借8本书
class Reader //读者类
{
int tag;//删除标记 1已删;0未删
int no;//读者编号
char name[10];//读者姓名
int borbook[Maxbor];//所借图书
public :
Reader(){}//构造函数
char *getname(){return name;}//获取读者姓名
int gettag(){return tag;}//获取删除标记
int getno(){return no;}//获取读者编号
void setname(char na[])//设置读者姓名
{
strcpy(name,na);
}
void delbook(){tag=1;}//设置删除标记
void addreader(int n,char *na)//增加读者
{
tag=0;
no=n;
strcpy(name,na);
for(int i=0;i<Maxbor;i++)
borbook[i]=0;
}
void borrowbook(int bookid)//借书操作
{
for(int i=0;i<Maxbor;i++)
{
if(borbook[i]==0)
{
borbook[i]=bookid;
}
}
}
int retbook(int bookid)//还书操作
{
for(int i=0;i<Maxbor;i++)
{
if (borbook[i]==bookid)
{
borbook[i]=0;
return 1;
}
}
return 0;
}
void disp()//输出读者信息
{
cout<<setw(5)<<no<<setw(10)<<name<<"借书编号:";
for(int i=0;i,Maxbor;i++)
if(borbook[i]!=0)
cout<<borbook[i]<<endl;
}
};
 
class RDatabase//读者库类
{
int top;//读者记录指针
Reader read[Maxr];//读者记录
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[top]=s;
}
file.close();
}
void clear()//删除所有读者信息
{
top=-1;
}
int addreader(int n,char *na)//添加读者,检查是否已存在
{
Reader *p=query(n);
if(p==NULL)
{
top++;
read[top].addreader(n,na);
return 1;
}
return 0;
}
Reader*query(int readerid)//按编号查找
{
for(int i=0;i<=top;i++)
if(read[i].getno()==readerid&&read[i].gettag==0)
return &read[i];
return NULL;
}
void disp()//删除读者所有信息
{
for(int i=0;i<=top;i++)
read[i].disp();
}
void readerdata();//读者库维护
~RDatabase()//析构函数,将read[]写入reader.txt文件中
{
fstream file("reader.txt",ios::out);
for(int i=0;i<=top;i++)
if(read[i].gettag()==0)
file.write((char*)&read[i],sizeof(read[i]));
file.close();
}
};
void RDatabase::readerdata()
{
int choice=1;
char rname[20];
int readerid;
Reader*r;
while(choice!=0)
{
cout<<"读者服务 1新增 2更该 3删除 4查找 5显示 6全删 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;
}
case 5:
disp();
break;
case 6:
clear();
break;
}
}
}
 
class Book//图书类
{
int tag;//删除标记 1:已删;0:未删
int no;//图书编号
char name[20];//书名
int onshelf;//是否在架 1在架 0已借
public:
Book(){}
char*getname(){return name;}//获取读者姓名
int getno(){return no;}//获取图书编号
int gettag(){return tag;}//获取删除标记
void setname(char na[])//设置书名
{
strcpy(name,na);
}
void delbook(){tag=1;}//删除图书
void addbook(int n,char*na)//增加图书
{
tag=0;
no=n;
strcpy(name,na);
onshelf=1;
}
int borrowbook()//借书操作
{
if(onshelf==1)
{
onshelf=0;
return 1;
}
return 0;
}
void retbook()//还书操作
{
onshelf=1;
}
void disp()//输出图书
{
cout<<setw(6)<<no<<setw(18)<<name<<setw(10)<<(onshelf==1?"在架":"已借")<<endl;
}
};
 
class BDatabase//图书库类
{
int top;//图书记录指针
Book book[Maxb];//图书记录
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[top]=b;
}
file.close();
}
void clear()//全删
{
top=-1;
}
int addbook(int n,char*na)//增加图书
{
Book*p=query(n);
if(p==NULL)
{
top++;
book[top].addbook(n,na);
return 1;
}
cout<<"新增成功!"<<endl;
}
Book*query(int bookid)//查找图书
{
for(int i=0;i<=top;i++)
if(book[i].getno()==bookid&&book[i].gettag()==0)
return NULL;
}
void bookdata();//图书库维护
void disp()
{
for(int i=0;i<=top;i++)
if(book[i].gettag()==0)
book[i].disp();
}
~BDatabase()//析构函数,将book[]写入book.txt文件中
{
fstream file("book.txt",ios::out);
for (int i=0;i<=top;i++)
if(book[i].gettag()==0)
file.write((char*)&book[i],sizeof(book[i]));
file.close();
}
};
void BDatabase::bookdata()
{
int choice;
char bname[40];
int bookid;
Book *b;
while(choice!=0)
{
cout<<"图书管理 1新增 2更该 3删除 4查找 5显示 6全删 0退出"<<endl;
cin>>choice;
switch(choice)
{
case 1:
cout<<"输入图书编号:";
cin>>bookid;
cout<<"输入图书书名:";
cin>>bname;
addbook(bookid,bname);
break;
case 2:
cout<<"输入图书编号:";
cin>>bookid;
b=query(bookid);
if(b==NULL)
{
cout<<"该图书不存在"<<endl;
break;
}
cout<<"输入新书名:";
cin>>bname;
b->setname(bname);
cout<<"更名成功!"<<endl;
break;
case 3:
cout<<"输入图书编号:";
cin>>bookid;
b=query(bookid);
if(b==NULL)
{
cout<<"该图书不存在!"<<endl;
break;
}
b->delbook();
break;
case 4:
cout<<"请输入图书编号:";
cin>>bookid;
b=query(bookid);
if(b==NULL)
{
cout<<"该书不存在!"<<endl;
break;
}
b->disp();
break;
case 5:
disp();
break;
case 6:
clear();
break;
}
}
}
 
void main()
{
int choice=1,bookid,readerid;
RDatabase ReaderDB;
Reader *r;
BDatabase BookDB;
Book *b;
while(choice!=0)
{
cout<<" 1借书      "<<endl;
cout<<" 2还书      "<<endl;
cout<<" 3图书维护  "<<endl;
cout<<" 4读者维护  "<<endl;
cout<<" 0离开      "<<endl;
cin>>choice;
switch(choice)
{
case 1:
cout<<"借书,请输入读者编号:";
cin>>readerid;
cout<<"图书编号:";
cin>>bookid;
r=ReaderDB.query(readerid);
if(r==NULL)
{
cout<<"哈哈,借书成功!";
break;
}
b=BookDB.query(bookid);
if(b==NULL)
{
cout<<"不存在该书!"<<endl;
break;
}
if(b->borrowbook()==0)
{
cout<<"该书已借"<<endl;
break;
}
r->borrowbook(b->getno());
break;
cout<<"借书成功!"<<endl;
case 2:
cout<<"还书,请输入读者编号:";
cin>>readerid;
cout<<"请输入图书编号;";
cin>>bookid;
r=ReaderDB.query(readerid);
if(r==NULL)
{
cout<<"不存在该读者!"<<endl;
break;
}
b->retbook();
r->retbook(b->getno());
break;
cout<<"还书成功!"<<endl;
case 3:
BookDB.bookdata();
break;
case 4:
ReaderDB.readerdata();
break;
}
}
}
【输出结果】
1借书
2还书
3图书管理
4读者服务
0退出
3
图书管理 1新增 2更该 3删除 4查找 5显示 6全删 0退出
1
输入图书编号:1111
输入图书书名:武林外传
新增成功!
图书管理 1新增 2更该 3删除 4查找 5显示 6全删 0退出
1
输入图书编号:2222
输入图书书名:今夜无眠
新增成功!
图书管理 1新增 2更该 3删除 4查找 5显示 6全删 0退出
0
1借书
2还书
3图书管理
4读者服务
0退出
4
读者服务 1新增 2更该 3删除 4查找 5显示 6全删 0退出
1
请输入读者编号:001
读入读者姓名:周强
读者服务 1新增 2更该 3删除 4查找 5显示 6全删 0退出
0
1借书
2还书
3图书管理
4读者服务
0退出
1
借书,请输入读者编号:001
图书编号:1111
哈哈,借书成功! 1借书
2还书
3图书管理
4读者服务
0退出
2
还书,请输入读者编号:001
请输入图书编号;1111
还书成功!
1借书
2还书
3图书管理
4读者服务
0退出
3
图书管理 1新增 2更该 3删除 4查找 5显示 6全删 0退出
2
输入图书编号:2222
输入新书名:金庸全集
更名成功!
Press any key to continue
这样可以么?

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

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

I. 用C语言写图书管理系统设计 求各位大哥大姐帮帮忙啊!跪求!!!!

#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
#include<ctype.h>
#define STACK_INIT_SIZE 10
#define OK 1
#define TRUE 1
#define FALSE 0
#define ERROR 0

struct student /*定义学生类型,用于存放借出的书籍*/
{
int carnum;
char lendbook[10];
}student[1000];

struct employ /*定义职工类型*/
{
int employnum;
char employname[15];
int employage;
char employsex[2];
char employleve[10];
long int employtage;
}employ[50];

struct book /*定义书的类型*/
{
int booknum;
char bookname[10];
char bookcreat[10];
int turefalse; /*用于借书和还书模块判断一本书是否借出的条件*/
}book[1000];

struct car /*借书卡的数据类型*/
{
int carnum;
char studentname[10];
int studentclass;
}car[100];

huanbook() /*还书函数*/
{
FILE *fp,*fp2; /*定义两个文件指针,fp2用于修改数据时设立临时文件用,防止数据遭破坏*/
int i,n;
int carnum;
char lendbook[10];
printf("请你输入你的卡号\n");
scanf("%d",&carnum);
fp=fopen("car.txt","r"); /*读取卡号记录*/
for(i=0;fread(&car[i],sizeof(struct car),1,fp)!=0;i++) /*for循环判断卡号是否存在*/
{
if(car[i].carnum==carnum) /*卡号存在,进入下一循环*/
{
n=i;
fclose(fp);
printf("请输入你要还的书的名字\n");
scanf("%s",lendbook);
fp=fopen("record.txt","r");
for(i=0;fread(&student[i],sizeof(struct student),1,fp)!=0;i++) /*判断是否借阅了输入的书*/
{
if(strcmp(student[i].lendbook,lendbook)==0) /*借阅了该书,进入下一循环,否则出错显示*/
{
fclose(fp);
fp=fopen("record.txt","r");
fp2=fopen("bookl.txt","w");
for(i=0;fread(&student[i],sizeof(struct student),1,fp)!=0;i++)
{
if(strcmp(student[i].lendbook,lendbook)==0)
{
continue; /*删除还掉的书的借书记录*/
}
fwrite(&student[i],sizeof(struct student),1,fp2); /*写入原来没还的书的记录*/
}
fclose(fp);
fclose(fp2);
fp=fopen("record.txt","w");
fp2=fopen("bookl.txt","r");
for(i=0;fread(&student[i],sizeof(struct student),1,fp2)!=0;i++)
{
fwrite(&student[i],sizeof(struct student),1,fp); /*将借书记录信息写回*/
}
fclose(fp);
fclose(fp2);
fopen("bookl.txt","w"); /*清临时文件的记录*/
fclose(fp2);
fp=fopen("book.txt","r");
fp2=fopen("bookl.txt","w");
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++) /*将书的记录写入临时文件,防止因为修改信息破坏以前的记录*/
{
if(i==n)
{
book[i].turefalse=1;
fwrite(&book[i],sizeof(struct book),1,fp2); /*将还的书的原来状态设为无人借阅的*/
continue;
}
fwrite(&book[i],sizeof(struct book),1,fp2);
}
fclose(fp);
fclose(fp2);
fp=fopen("book.txt","w");
fp2=fopen("bookl.txt","r");
for(i=0;fread(&book[i],sizeof(struct book),1,fp2)!=0;i++)
{
fwrite(&book[i],sizeof(struct book),1,fp); /*将临时文件写回*/
}
fclose(fp);
fclose(fp2);
fopen("bookl.txt","w"); /*清临时文件*/
fclose(fp2);
printf("还书完毕,按任意键返回\n");
getch();
return 1;
}
}
printf("你没有借这样的书,任意键返回\n"); /*出错提示*/
fclose(fp);
getch();
return 0;
}
}
printf("系统没这样的卡,和管理员联系,按任意键返回\n"); /*出错提示*/
fclose(fp);
getch();
}

findbook()
{
FILE *fp;
char bookname[10];
int ture,i;
fp=fopen("book.txt","r");
printf("请输入你要查找的书名\n");
scanf("%s",bookname);
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++)
{
if(strcmp(bookname,book[i].bookname)==0)
{
if(book[i].turefalse==1)
{
printf("这本书的详细资料是:%d %s %s 此书现在无人借阅\n按任意键返回\n",book[i].booknum,book[i].bookname,book[i].bookcreat);
}
else {printf("这本书已经有人借出\n");fclose(fp);return 0;}
fclose(fp);
return FALSE;
}
}
printf("没有你要查询的书籍\n");
fclose(fp);
return FALSE;
}

findbook1()
{
FILE *fp;
char bookcreat[10];
int ture,i;
fp=fopen("book.txt","r");
printf("请输入你要查找的作者名\n");
scanf("%s",bookcreat);
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++)
{
if(strcmp(bookcreat,book[i].bookcreat)==0)
{
if(book[i].turefalse==1)
{
printf("这本书的详细资料是:%d %s %s 此书现在无人借阅\n按任意键返回\n",book[i].booknum,book[i].bookname,book[i].bookcreat);
}
else {printf("这本书已经有人借出\n");fclose(fp);return 0;}
fclose(fp);
return FALSE;
}
}
printf("没有你要查询的书籍\n");
fclose(fp);
return FALSE;
}

lendcount()
{
FILE *fp;
int i,n=0;
fp=fopen("record.txt","r");
for(i=0;fread(&student[i],sizeof(struct student),1,fp)!=0;i++)
{
printf("卡号:%d 借出的书籍:%s \n",student[i].carnum,student[i].lendbook);
n=n+1;
}
fclose(fp);
printf("目前共有%d本书借出\n",n);
printf("按任意键\n");
getch();
return n;
}

chabook()
{
char ch5;
do
{
printf("---------------欢迎进入图书查询系统!--------------\n");
printf(" 1:<按书名查找>\n");
printf(" 2:<按作者查找>\n");
printf(" 0:<返回>\n");
printf("请输入0--2,其他输入非法!\n");
scanf("%s",&ch5);
switch(ch5)
{
case '1':findbook();getch();break;
case '2':findbook1();getch();break;
case '0':break;
default:printf("无此操作\n");getch();break;
}
}while(ch5!='0');
return FALSE;
}

lendbook()
{
FILE *fp,*fp2;
int i,n;
int carnum;
printf("请你输入你的卡号\n");
scanf("%d",&carnum);
fp=fopen("car.txt","r");
for(i=0;fread(&car[i],sizeof(struct car),1,fp)!=0;i++)
{
if(car[i].carnum==carnum)
{
n=i;
fclose(fp);
printf("请输入你要借阅的书的名字\n");
scanf("%s",student[n].lendbook);
fp=fopen("book.txt","r");
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++)
{
if(strcmp(book[i].bookname,student[n].lendbook)==0)
{
if(book[i].turefalse==0) {printf("对不起,此书有人借出,请借其他书\n");fclose(fp);getch();return;}
else
fclose(fp);
fp=fopen("record.txt","a+");
student[n].carnum=carnum;
fwrite(&student[n],sizeof(struct student),1,fp);
fclose(fp);
fp=fopen("book.txt","r");
fp2=fopen("bookl.txt","w");
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++)
{
if(strcmp(book[i].bookname,student[n].lendbook)==0)
{
book[i].turefalse=0;
fwrite(&book[i],sizeof(struct book),1,fp2);
continue;
}
fwrite(&book[i],sizeof(struct book),1,fp2);
}
fclose(fp);
fclose(fp2);
fp=fopen("book.txt","w");
fp2=fopen("bookl.txt","r");
for(i=0;fread(&book[i],sizeof(struct book),1,fp2)!=0;i++)
{
fwrite(&book[i],sizeof(struct book),1,fp);
}
fclose(fp);
fclose(fp2);
fopen("bookl.txt","w");
fclose(fp2);
printf("借书完毕,按任意键返回\n");
getch();
return;
}
}
printf("不存在这样的书,任意键返回\n");
fclose(fp);
getch();
return;
}
}
printf("你的卡号不存在,请申请新卡,按任意键返回\n");
fclose(fp);
getch();
}

carcount()
{
FILE *fp;
int i,n=0;
fp=fopen("car.txt","r");
for(i=0;fread(&car[i],sizeof(struct car),1,fp)!=0;i++)
{
printf("第%d张卡<卡号:%d 姓名:%s 班级:%d>\n",i+1,car[i].carnum,car[i].studentname,car[i].studentclass);
n=n+1;
}
fclose(fp);
printf("目前共有%d本书\n",n);
printf("按任意键\n");
getch();
}

delcar()
{
FILE *fp,*fp2;
int i;
int carnum;
char choice;
fp=fopen("car.txt","r");
fp2=fopen("bookl.txt","w");
printf("请输入你要删除的卡号\n");
printf("如果你输入的卡号存在,系统自动删除该信息!如果不存在,系统不做任何改动\n");
scanf("%d",&carnum);
for(i=0;fread(&car[i],sizeof(struct car),1,fp)!=0;i++)
{
if(car[i].carnum!=carnum)
{
fwrite(&car[i],sizeof(struct car),1,fp2);
}
}
fclose(fp);
fclose(fp2);
printf("是否真的要删除该卡?删除后该书籍的所有信息将无法恢复《Y/N》\n");
scanf("%s",&choice);
if(choice=='y'||choice=='Y')
{
fp=fopen("car.txt","w");
fp2=fopen("bookl.txt","r");
for(i=0;fread(&car[i],sizeof(struct car),1,fp2)!=0;i++)
{
fwrite(&car[i],sizeof(struct car),1,fp);
}
fclose(fp);
fclose(fp2);
fp2=fopen("bookl.txt","w");
fclose(fp2);
printf("按任意键返回\n");
getch();
return;
}
else
{
printf("按任意键返回\n");
getch();
return;
}
}

addcar()
{
FILE *fp;
int i=0;
fp=fopen("car.txt","a+");
printf("请你输入卡号\n");
scanf("%d",&car[i].carnum);
printf("请你输入学生姓名\n");
scanf("%s",car[i].studentname);
printf("请你输入班级\n");
scanf("%d",&car[i].studentclass);
fwrite(&car[i],sizeof(struct car),1,fp);
fclose(fp);
printf("输入完毕,任意键返回\n");
getch();

J. 求图书馆管理系统程序(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[10];};
/*首页*/void index() //首页打印设置{ char input; printf("\n\n\t\t\t*****************************\n"); printf("\t\t\t Paladin图书信息查询管理系统\n"); printf("\t\t\t*****************************\n\n\n"); printf("------------------------------------------------------------------------------\n"); printf("\n\t\t\t书山有路勤为径\n"); printf("\t\t\t\t 学海带渣无涯苦作舟\n"); printf("\n\n\t 总策划:吴昊\n\n"); printf("\t 程式设计:肖书明樊启恒芦丹覃枝霞况轩 (排名不分先后)\n\n"); printf("\t 联系方式:QQ:6828000 or Mail To:[email protected]\n"); printf("\t________________________________________________________________\n"); printf("\t\tCopyrights @ Accp SIT25 Leo Workgroup 2004.8\n"); printf("\t\t\t All RightsReserved\n"); printf("\t\t\t\tVer 1.03\n"); printf("\t<按任蠢模悄意键进入>\n\t"); input=getchar(); //让用户输入一个字符后再进行下一步(以后码唯在本程序中用得很多) system("cls"); //清屏}
/*登陆方式*/ void login(){ void tra_view(); //声明包含的函数 void adm_view(); void byebye(); void about(); void coloregg();
int input; char input_1; do //循环显示登陆选项(当输入的数不为选项数的时候重复循环) { system("cls"); printf("\n\n\n\t1.以游客身份进入\n"); printf("\t2.以管理员身份进入\n"); printf("\t3.关于本系统\n"); printf("\t4.退出本系统\n\n\n"); printf("\t请选择服务类别:"); scanf("%d",&input); if(input!=1&&input!=2&&input!=3&&input!=4&&input!=99) //输入数不等于选项的时候打印画面 { printf("\n\t输入出错!请重新选择~\n"); printf("\n\t按任意键返回选择页面~\n\t"); input_1=getchar(); input_1=getchar(); system("cls"); } if (input==4) { byebye(); //如果输入数为4,则执行byebye()函数 } } while (input!=1&&input!=2&&input!=3&&input!=4&&input!=99);
switch(input) //分支选择 { case 1:tra_view(); break; //选1执行游客进入方式 case 2:adm_view(); break; //选2执行管理员进入方式 case 3:about(); break; //选3执行关于界面函数 case 99:coloregg(); break; //选99执行彩蛋函数 }}/*关于界面*/void about(){ void login(); char input; //关于界面的打印设置 system("cls"); printf("\n\n\t\t\t\t欢迎使用帮助\n"); printf("\t_______________________________________________________________"); printf("\n\t1.本系统采用模块化设计\n"); printf("\t每一项功能由单独的函数块控制,一个功能块有错不会影响全局\n\n"); printf("\t2.人性化设计\n"); printf("\t相关提示信息丰富,以人为本\n\n"); printf("\t3.功能强大\n\n"); printf("\t 实现了:\n"); printf("\t\t1 图书信息录入\n"); printf("\t\t2 图书信息查询\n"); printf("\t\t3 图书信息修改\n"); printf("\t\t4 图书信息删除\n"); printf("\t\t5 图书信息排序\n"); printf("\t\t6 提供游客和管理员两种登陆方式\n"); printf("\t\t 加以修改可以满足网络的需要\n\n"); printf("\t\t7 管理员的帐号密码可以自我设定,修改\n"); printf("\t\t8 彩蛋~~(进入方法嘛,嘿嘿)\n"); printf("\n\t按任意键返回登陆界面!"); input=getchar(); input=getchar(); login(); //任意键返回登陆界面}
/*彩蛋*/void coloregg() //打印界面{ char inp; void login(); system("cls"); printf("\n\n\n\t\t一直以为\n\t\t"); inp=getchar(); inp=getchar(); printf("\t\t隐了身别人就找不到我\n\t\t"); inp=getchar(); printf("\t\t可是我错了\n\t\t"); inp=getchar(); printf("\t\t象我这么出众的男人\n\t\t"); inp=getchar(); printf("\t\t不管到哪都是受人瞩目的焦点\n\t\t"); inp=getchar(); printf("\t\t我那忧郁的眼神\n\t\t"); inp=getchar(); printf("\t\t唏嘘的胡渣子\n\t\t"); inp=getchar(); printf("\t\t还有那神乎其技的AK扫射\n\t\t"); inp=getchar(); printf("\t\t以及那杯82年的马爹利和发哥给的牙签\n\t\t"); inp=getchar(); printf("\t\t无不深深出卖了我~~~\n\t\t"); inp=getchar(); printf("\t\t\t\t--------狂人\n\t\t"); inp=getchar();
login();}
/*离开界面*/void byebye() //离开界面{ char input; system("cls"); printf("\n\n\n\n\n\t\t\t路漫漫其修远兮"); printf("\n\n\n\n\t\t\t\t\t吾将上下而求索"); printf("\n\n\t________________________________________________________________"); printf("\n\n\n\t\t*感谢您的使用*\n\n\t\t"); printf("按任意键退出本系统\n\t\t"); input=getchar(); input=getchar(); printf("\n\t\t"); exit(0); //exit()函数跳出整个程序}
/*删除所有相关信息*/void delall() //管理员选项中的初始化函数{ void login(); void adm_servelist(); int inp; char input; do //如果输入的不是界面提供的选项值,则重复显示输入界面 { system("cls"); printf("\n\n\t----------!!警告!!----------\n"); printf("\n\t一旦选择了全部初始化将清除全部数据!包括图书信息和管理员信息!\n"); printf("\n\t初始化完毕后返回登陆界面\n"); printf("\n\n\t你确定要初始化吗\n"); printf("\n\n\t1.是的~我要初始化\t2.不要~让我再想想\n"); printf("\n\t请输入服务选项:"); scanf("%d",&inp); switch (inp) { case 1: //如果输入为1则删除book.dat和password.dat文件 remove("book.dat"); remove("password.dat"); printf("\n\n\t初始化完毕!\n\t所有数据全部清空!\n\t按任意键返回登陆界面!"); input=getchar(); input=getchar(); login(); //并返回登陆界面 break; case 2: //选2则返回管理员登陆界面 adm_servelist(); break; default: //否则打印如下字样并重复循环 printf("\n\n\t对不起~没有这项服务!\n\t按任意键重新选择\n\t"); input=getchar(); input=getchar(); break; } } while (inp!=1&&inp!=2&&inp!=3);}
/*游客登陆方式*/void tra_view(){ void tra_book_view(); void tra_book_search(); void login();
int inp; char input;
do //同以往的do{}while一样,用来保证用户输入的数能够被执行 { system("cls"); printf("\n\n\t------------欢迎光临ACCP图书馆------------"); printf("\n\n\n\t1.图书信息浏览\n"); printf("\t2.查询指定图书\n"); printf("\t3.退出\n"); printf("\n\n\t请选择服务类别:"); scanf("%d",&inp); if (inp!=1&&inp!=2&&inp!=3) { printf("\n\t没有这项服务~\n"); printf("\t按任意键重新选择"); input=getchar(); input=getchar(); } } while (inp!=1&&inp!=2&&inp!=3);
switch(inp) //分支选择 { case 1: tra_book_view(); break; //选1则执行游客浏览 case 2: tra_book_search(); break; //选2则执行游查询 case 3: login(); break; //选3返回登陆界面 }}
/*游客浏览方式*/void tra_book_view(){ void tra_view(); void tra_book_view();
intinp,i=0,n=0; FILE *fp; char input; struct bookinf bookview[100]; if((fp=fopen("book.dat","rb"))==NULL) //判断图书信息文件是否存在,不存在则显示如下字样 { system("cls"); printf("\n\n\n\t数据尚未初始化~~\n\n\t请在管理菜单中增加图书信息~~~\n"); printf("\n\t<按任意键返回管理菜单>\n\t"); input=getchar(); input=getchar(); tra_view(); //并返回游客进入画面 } else //存在的话则循环读取文件中的信息直到文件指针到达文件尾部 { do { fread(&bookview[i],sizeof(struct bookinf),1,fp); i=i+1; } while (!feof(fp)); //这一段代码以后也会经常用到 fclose(fp); //关闭文件指针 do { system("cls"); //显示读取数据的第一条,条数用变量n控制 printf("\n\t--------共有%d条记录--------",i-1); printf("\n\n\t编号: %d\n",bookview[n].num); printf("\n\t书名: %s\n",bookview[n].bname); printf("\n\t作者名: %s\n",bookview[n].wname); printf("\n\t分类号: %s\n",bookview[n].clanum); printf("\n\t出版单位: %s\n",bookview[n].pubcom); printf("\n\t出版时间: %s\n",bookview[n].pubtime); printf("\n\t价格: %f\n",bookview[n].price);
printf("\n\n\t1.上一页\t2.下一页\t3.回目录\n"); printf("\n\t请选择:"); scanf("%d",&inp); switch (inp) { case 1: //如果选择了上一页 { if (n==0) //如果n到首页则输出以下字样 { printf("\n\t已到达首页\n\t按任意键重新选择"); input=getchar(); input=getchar(); } else //否则就让n自减1跳出选择重复循环 { n=n-1; } break; } case 2: //如果选择了下一页 { if (n==i-2) //如果n到达最尾页 { printf("\n\t已到达最末页\n\t按任意键重新选择"); input=getchar(); input=getchar(); } else //否则就让n自加1跳出选择重复循环 { n=n+1; } break; } case 3: //选择3的话回到游客登陆界面 { tra_view(); break; } default: //没有这项选择时的提示 { printf("\n\t没有这项服务\n\t按任意键重新选择"); input=getchar(); input=getchar(); break; } } } while (inp!=3); }}
/*游客查询方式*/void tra_book_search(){ void tra_view(); void tra_id_search(); void tra_wr_search(); void tra_bn_search();
char input; FILE *fp; int inp; if((fp=fopen("book.dat","rb"))==NULL) //判断图书信息是否存在 { system("cls"); //不存在则打印的界面 printf("\n\n\n\t数据尚未初始化~~\n\n\t请在管理菜单中增加图书信息~~~\n"); printf("\n\t<按任意键返回管理菜单>\n\t"); input=getchar(); input=getchar(); tra_view(); } else { do //同以前一样用do{}while来重复显示 { system("cls"); printf("\n\n\n\t1.按图书编号查询\n"); printf("\n\t2.按图书作者查询\n"); printf("\n\t3.按图书名查询\n"); printf("\n\t4.回到主菜单\n"); printf("\n\n\t请选择查询类别:");