當前位置:首頁 » 編程語言 » 圖書館信息管理系統設計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請選擇查詢類別:");