當前位置:編程學習大全網 - 編程語言 - 編程,用c語言編輯

編程,用c語言編輯

/*本程序轉自天涯潛水2的blog*/

#include <stdio.h>

#include <malloc.h>

#include <conio.h>

#include <string.h>

#include <stdlib.h>

#define LEN sizeof(struct booklist)

#define LEN2 sizeof(struct memberlist)

#define LEN3 sizeof(struct readers)

typedef struct readers//借書信息結構體

{

char name[30];//借書人的姓名

struct readers *next2;

}reader;

//書本信息結構體

typedef struct booklist

{

char num[20]; //書號

char name[30]; //書名

char concern[50];//出版社

char date[20];//出版日期

char author[20];//作者

int page;//頁數

int price;//價格

int imformation;//圖書剩余數量

reader *a;//借閱人

struct booklist *next;

}Book;

void creatlist();//創建新的書本信息

void print(Book *head);//打印書本信息

void save(Book *head);//儲存書本信息

void AddBook();//添加書本信息

void DelBook();//刪除書本信息

Book *read();//讀取書本信息

void manager();//管理員操作

void Bookconsult(); //圖書查詢

int Borrow();//借書

int Return();//還書

Book *sort(Book *head);//書本信息按書號排序

void imformation();//系統信息

Book *head=NULL,*p1=NULL,*p2=NULL;

//創建新的書本信息

void creatlist()

{

int i,n;

printf("要創建的書本數目");

scanf("%d",&n);

p2=head=(Book *)malloc(LEN); //創建帶有頭結點的鏈表

p2->a=(reader *)malloc(LEN3);

p2->a->next2=NULL;

p2->next=NULL;

printf("請輸入書的信息:\n");

for(i=1;i<=n;i++)

{

p1=(Book *)malloc(LEN);

printf("書號: "); scanf("%s",p1->num);

printf("書名: "); scanf("%s",p1->name);

printf("出版社: "); scanf("%s",p1->concern);

printf("出版日期: "); scanf("%s",p1->date);

printf("作者: "); scanf("%s",p1->author);

printf("書本頁數: "); scanf("%d",&p1->page);

printf("書本價格(元): "); scanf("%d",&p1->price);

p1->a=(reader *)malloc(LEN3);

p1->a->next2=NULL;

p1->imformation=10;

p1->next=NULL;

p2->next=p1;

p2=p1;

if(i<n) printf("下壹本:\n");

}

head=sort(head);

save(head);

print(head);

}

//打印書本信息

void print(Book *head)

{

Book *p=NULL;

reader *p0=NULL;

p=head->next;

printf("*******************************************************************************\n");

while(p!=NULL)

{

printf("書號: %s\n書名: %s\n出版社: %s\n出版日期: %s\n作者: %s\n書本頁數(頁) : %d\n書本價格(元) : %d\n剩余數量 : %d\n",p->num,p->name,p->concern,p->date,p->author,p->page,p->price,p->imformation);

printf("借閱圖書的人:");

if(p->a->next2==NULL) printf("------------暫無借閱人!");

else

{

for(p0=p->a->next2;p0!=NULL;p0=p0->next2)

{

printf("%s ",p0->name);

}

}

p=p->next; /* p後移壹個結點 */

printf("\n");

printf("\n");

}

}

//書本信息按書號排序

Book *sort(Book *head)

{

Book *p1=NULL,*p2=NULL,*p3=NULL,*min=NULL,*min2=NULL,*head2=head->next;

p1=head2;

while(p1->next!=NULL)

{

min=p2=p1; /*把首結點作為最小值*/

while(p2->next!=NULL)

{

if(strcmp(min->num,p2->next->num)>0) /*首結點與下壹結點比較*/

{

min2=p2;

min=p2->next;

}

p2=p2->next;

}

if(min!=p1)

{

min2->next=min->next; /*刪除最小結點*/

min->next=p1; /*插入最小結點*/

if(p1==head2) head2=min;

else p3->next=min; /*p3為min前的結點指針*/

p3=min;

}

else

{

p3=p1;

p1=p1->next;

}

}

head->next=head2;

return(head);

}

//儲存書本信息

void save(Book *head)

{

FILE *fp,*fp2;

Book *p=NULL;

reader *q=NULL;

fp=fopen("書本信息.txt","wb"); //printf("不能打開文件!\n");

fp2=fopen("借閱信息.txt","wb"); //printf("不能打開文件!\n");

p=head;

while(p!=NULL)

{

fwrite(p,LEN,1,fp); /*逐個結點寫文件*/

for(q=p->a;q!=NULL;q=q->next2)

{fwrite(q,LEN3,1,fp2);}

p=p->next;

}

fclose(fp);

fclose(fp2);

}

//添加書本信息

void AddBook()

{

FILE *fp,*fp2;

Book *addbook=NULL;

reader *p0=NULL;

fp=fopen("書本信息.txt","ab"); //追加方式打開文件

fp2=fopen("借閱信息.txt","ab");

addbook=(Book *)malloc(LEN);

printf("輸入書本信息:\n");

printf("書號: "); scanf("%s",addbook->num);

printf("書名: "); scanf("%s",addbook->name);

printf("出版社: "); scanf("%s",addbook->concern);

printf("出版日期: "); scanf("%s",addbook->date);

printf("作者: "); scanf("%s",addbook->author);

printf("書本頁數: "); scanf("%d",&addbook->page);

printf("書本價格(元): "); scanf("%d",&addbook->price);

p0=(reader *)malloc(LEN3);

p0->next2=NULL;

addbook->a=p0;

addbook->imformation=10;

addbook->next=NULL;

fwrite(addbook,LEN,1,fp); /*塊寫*/

fwrite(p0,LEN3,1,fp2);

fclose(fp);

fclose(fp2);

}

//讀取書本信息

Book *read()

{

FILE *fp,*fp2;

Book *p=NULL,*p1=NULL,*head=NULL;

reader *p0=NULL,*p2=NULL;

if((fp=fopen("書本信息.txt","rb"))==NULL) printf("不能打開文件或文件不存在!\n");

if((fp2=fopen("借閱信息.txt","rb"))==NULL) printf("不能打開文件或文件不存在!\n");

head=(Book *)malloc(LEN);

fread(head,LEN,1,fp);

p1=head;

p0=(reader *)malloc(LEN3);

fread(p0,LEN3,1,fp2);

p0->next2=NULL;

head->a=p0;

head->next=NULL;

p=(Book *)malloc(LEN);

while(fread(p,LEN,1,fp)) /*逐個結點讀取*/

{

p1->next=p;

p1=p1->next;

p0=(reader *)malloc(LEN3);

p1->a=p0;

while(fread(p0,LEN3,1,fp2))

{

if(p0->next2==NULL)

{

p2=p0;

p0=(reader *)malloc(LEN3);

break;

}

p2=p0;

p0=(reader *)malloc(LEN3);

p2->next2=p0;

}

free(p0);

p2->next2=NULL;

p=(Book *)malloc(LEN);

}

p1->next=NULL;

free(p);

fclose(fp);

fclose(fp2);

head=sort(head);

if(head!=NULL) return(head);

else

{

printf("文件為空!\n");

return 0;

}

}

//刪除書本信息

void DelBook()

{

Book *head=NULL,*p=NULL,*q=NULL;

char bookname[30];

head=read();

printf("輸入要刪除的書名: ");

scanf("%s",bookname);

p=head;

while(p!=NULL)/*按名字查找要刪除的圖書*/

{

if(strcmp(p->name,bookname)==0)

{

if(p==head)

{

head=head->next;

break;

}

else

{

q->next=p->next;

break;

}

}

q=p;

p=p->next;

}

save(head);

}

//管理員操作

void manager()

{

int n,i=0,k=1;

while(k==1)

{

printf("********************************************************************************\n");

printf(" 請選擇妳需要的操作\n");

printf(" ◎ 1.建立新的書本信息\n");

printf(" ◎ 2.插入書本信息\n");

printf(" ◎ 3.刪除書本信息\n");

printf(" ◎ 4.讀取所有書本信息\n");

printf(" ◎ 5.讀取指定書本信息\n");

printf(" ◎ 6.返回到上級目錄\n");

printf(" ◎ 7.保存並退出\n");

printf("請輸入:");

scanf("%d",&n);

switch(n)

{

case 1: creatlist();break;

case 2: AddBook();break;

case 3: DelBook();break;

case 4: head=read();system("CLS");print(head);break;

case 5: system("CLS");Bookconsult();break;

case 6: k=0;break;

default: k=0;break;

}

}

}

//圖書查詢

void Bookconsult()

{

int n,m=1,sign=0;

Book *p=NULL,*p1=NULL,*p0=NULL,*head=NULL;

reader *p2=NULL;

char a[30],b[20],c[20];

head=read();

while(m==1)

{

printf(" 請選擇妳查詢書本的方式: 1.按書名 2.按書的編號 3.按書的作者 4.退出查詢\n");

printf("輸入=");

scanf("%d",&n);

switch(n)

{

case 1: printf("請輸入書名:");

scanf("%s",a);

p0=head;

while(p0!=NULL)

{

if(strcmp(a,p0->name)==0)

{

printf("*******************************************************************************\n");

printf("書號: %s\n書名: %s\n出版社: %s\n出版日期: %s\n作者: %s\n書本頁數(頁) : %d\n書本價格(元) : %d\n剩余數量 : %d\n",p0->num,p0->name,p0->concern,p0->date,p0->author,p0->page,p0->price,p0->imformation);

printf("借閱圖書的人:");

if(p0->a->next2==NULL) printf("------------暫無借閱人!\n");

else

{

for(p2=p0->a;(p2=p2->next2)!=NULL;)

{printf("%s ",p2->name);}

}

printf("\n");

sign=1;

p0=p0->next;

}

else p0=p0->next;

}

if(sign==0) printf("沒有這本書的信息.\n");

break;

case 2: printf("請輸入書的編號:");

scanf("%s",b);

p0=head;

while(p0!=NULL)

{

if(strcmp(b,p0->num)==0)

{

printf("*******************************************************************************\n");

printf("書號: %s\n書名: %s\n出版社: %s\n出版日期: %s\n作者: %s\n書本頁數(頁) : %d\n書本價格(元) : %d\n剩余數量 : %d\n",p0->num,p0->name,p0->concern,p0->date,p0->author,p0->page,p0->price,p0->imformation);

printf("借閱圖書的人:");

if(p0->a->next2==NULL) printf("------------暫無借閱人!\n");

else

{

for(p2=p0->a;(p2=p2->next2)!=NULL;)

{printf("%s ",p2->name);}

}

printf("\n");

break;

}

else p0=p0->next;

}

if(p0==NULL) printf("沒有這本書的信息.\n");

break;

case 3: printf("請輸入書的作者:");

scanf("%s",c);

p0=head;

while(p0!=NULL)

{

if(strcmp(c,p0->author)==0)

{

printf

("*******************************************************************************\n");

printf("書號: %s\n書名: %s\n出版社: %s\n出版日期: %s\n作者: %s\n書本頁數(頁) : %d\n書本價格(元) %d\n剩余數量 : %d\n",p0->num,p0->name,p0->concern,p0->date,p0->author,p0->page,p0->price,p0->imformation);

printf("借閱圖書的人:");

if(p0->a->next2==NULL) printf("------------暫無借閱人!\n");

else

{

for(p2=p0->a;(p2=p2->next2)!=NULL;)

{printf("%s ",p2->name);}

}

printf("\n");

sign=1;

p0=p0->next;

}

else p0=p0->next;

}

if(sign==0) printf("沒有這本書的信息.\n");

break;

default: m=0;break;

}

}

}

//借書

int Borrow()

{

char a[30],b[30],c;

Book *p0=NULL,*head=NULL;

reader *p2=NULL,*p3=NULL;

head=read();

printf("請輸入要借的書的書號:");

scanf("%s",a);

p0=head->next;

while(p0!=NULL)

{

if((strcmp(a,p0->num))==0)

{

if(p0->imformation>0)

{

printf("圖書在館,可以借出,是否確定借出?'y'or'n'\n");

c=getchar();

scanf("%c",&c);

if(c=='y')

{

printf("請再次輸入妳的用戶名:");

scanf("%s",b);

p3=(reader *)malloc(LEN3);

strcpy(p3->name,b);

if(p0->a->next2==NULL)

{

p0->a->next2=p3;

p3->next2=NULL;

}

else

{

for(p2=p0->a;p2->next2!=NULL;p2=p2->next2);

p2->next2=p3;

p3->next2=NULL;

}

--p0->imformation;

save(head);

printf("操作完成,可以帶走圖書。\n");

return 1;

break;

}

else

{

return 0;

break;

}

}

else printf("很抱歉,該圖書不在館.\n");return 0;break;

}

else p0=p0->next;

}

if(p0==NULL)

{

printf("很抱歉,沒有這本書。\n");

return 0;

}

else return 2;

}

//還書

int Return()

{

Book *p0=NULL,*head=NULL;

reader *p2=NULL,*p3=NULL;

char c[20],b[30];

head=read();

printf("請輸入要還的書的書號:");

scanf("%s",&c);

p0=head->next;

while(p0!=NULL)

{

if((strcmp(c,p0->num))==0)

{

printf("請輸入妳的用戶名:");

scanf("%s",&b);

if(p0->a->next2==NULL) {printf("妳沒有借這本書!\n");break;}

else

{

p3=p0->a;

p2=p3->next2;

while(p2!=NULL)

{

if(strcmp(p2->name,b)==0)

{

if(p2->next2==NULL) {p3->next2=NULL;free(p2);break;}

else

{

p3->next2=p2->next2;

free(p2);

break;

}

}

else

{

p3=p2;

p2=p2->next2;

}

}

if(p2==NULL) printf("妳沒有借這本書!\n");

}

++p0->imformation;

save(head);

printf("書已歸館,操作完成。\n");

return 1;

break;

}

else p0=p0->next;

}

if(p0==NULL)

{

printf("沒有這本書。\n");

return 0;

}

else return 2;

}

//借書信息

void imformation()

{

printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");

printf("※ 歡迎妳使用我們的圖書管理系統!以下是本系統的有關說明: ※\n");

printf("※本系統主要功能是進行圖書的有關管理,妳可以進行圖書信息的創建、插入、刪除、 ※\n");

printf("※查詢;在操作中主要是以阿拉伯數字來選擇相應的菜單功能,在選擇時以'y'表示 '是' ※\n");

printf("※以'n'表示'不是'。在妳操作的時候就會有相應的操作提示。 ※\n");

printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");

}

main()

{

int n,k=1;

printf("********************************************************************************\n");

printf("\n\n");

printf(" 歡迎進入我們的圖書管理系統! \n");

printf("\n\n");

printf("********************************************************************************\n");

while(k==1)

{

printf(" 請選擇妳的操作: 1.管理員操作 2.系統信息 3.退出系統\n");

printf("********************************************************************************\n");

printf(" 妳的選擇是:");

scanf("%d",&n);

system("CLS");

switch(n)

{

case 1: manager();break;

case 2: imformation();break;

default: printf("+++++++++++++++++++++++++++歡迎妳再次使用我們的系統!++++++++++++++++++++++++++++\n");k=0;break;

}

}

}

  • 上一篇:計算機工程系CDIO理念下的高等數學案例教學
  • 下一篇:腦筋急轉彎!!!
  • copyright 2024編程學習大全網