古詩詞大全網 - 成語經典 - c語言課程設計:書管理系統設計的基本思路是什麽?

c語言課程設計:書管理系統設計的基本思路是什麽?

圖書管理系統主要要求可以錄入書籍,添加書目,查找書本信息,刪除或修改信息,有的還要求顯示是否被借閱等。

壹般采用結構體數組,鏈表,文件操作和自定義函數。主要是需要對基礎知識掌握牢固。

先定義結構體,然後對結構體的成員進行定義,選擇數組存儲書本各種信息。錄入信息可以用for和do while循環等來做。

存放信息需要文件操作函數,比如fopen,fwrite等。

刪除和添加可以刪除節點或者增加節點。

查找之類的可以用字符串操作的各種函數實現。

附上參考源代碼

#include?<stdio.h>

#include?<string.h>

#include?<stdlib.h>

#include?<conio.h>

#definebooks?"f:\\books.txt"

#define?booksbak"f:\\booksbak.txt"

struct?bookinfo

{

char?isbn[20];

char?title[30];

char?author[20];

int?count;

};

struct?book

{

struct?bookinfo?onebook;

struct?book?*next;

};

struct?book?*searchBook?(?struct?book?*listptr,char?isbn[])

{

while(listptr!=(struct?book?*)0)

if?(strcmp(listptr->onebook.isbn,isbn)==0)

return?listptr;

else

listptr=listptr->next;

return?(struct?book?*)0;

}

void?MainSearchbook(struct?book?*firstptr)

{

struct?book?*ptr;

char?isbnno[20];

printf("請輸入ISBN:");

scanf("%s",&isbnno);

ptr=searchBook(firstptr,isbnno);

if?(ptr!=(struct?book?*)0)

{

printf("找到了!!!\n");

printf("ISBN:%s\n",ptr->onebook.isbn);

printf("Title:%s\n",ptr->onebook.title);

printf("Author:%s\n",ptr->onebook.author);

}

else

printf("sorry,not?found!!!\n");

}

int?addBook(struct?book?*listptr,struct?bookinfo?note)

{

while(listptr->next!=0)

listptr=listptr->next;

listptr->next=(struct?book?*)malloc(sizeof(struct?book));

listptr->next->onebook=note;

listptr->next->next=0;

return?0;

}

void?MainAdd(struct?book?*listptr,FILE?*fp)

{

int?ok;

struct?bookinfo?note;

printf("請輸入ISBN:");

scanf("%s",?e.isbn);

printf("請輸入Title:");

scanf("%s",?e.title);

printf("請輸入Author:");

scanf("%s",?e.author);

ok=addBook(listptr,note);

if?(ok==0)

{

//將加入的圖書寫到文件中保存

fprintf(fp,"\n%s?%s?%s?%d",note.isbn,note.title,note.author,0);

printf("添加圖書成功!!!\n");

}

else

printf("添加圖書失敗!!!\n");

}

int?removeBook(struct?book?*listptr,char?isbn[])

{

while(listptr->next!=(struct?book?*)0)

{

if?(strcmp(listptr->next->onebook.isbn,isbn)==0)

{

listptr->next=listptr->next->next;

return?0;

}

else

listptr=listptr->next;

}

return?-1;

}

void?MainRemove(struct?book?*listptr,FILE?*fp)

/************************************************************************/

/*?刪除書籍函數,通過ISBN刪除鏈表節點,同時刪除文件中對應信息*/

/*?刪除文件中壹行,用的是笨方法,把需要的信息寫到新文件,刪除舊文件,重命名..*/

/************************************************************************/

{

char?isbnno[20];

int?ok;

struct?bookinfo?onebook;

printf("請輸入ISBN:");

scanf("%s",&isbnno);

ok=removeBook(listptr,isbnno);

if?(!ok)

{

FILE?*fpbak;

if?((fpbak=fopen(booksbak,"a+"))==NULL)

printf("文件打開失敗!!!\n");

fseek(fp,0,SEEK_SET);?//移到文件開始

while((fscanf(fp,"%s?%s?%s?%d\n",&onebook.isbn,&onebook.title,&onebook.author,&onebook.count))!=EOF)

{

if?(strcmp(onebook.isbn,isbnno)!=0)

{

fprintf(fpbak,"%s?%s?%s?%d\n",onebook.isbn,onebook.title,onebook.author,onebook.count);

}

}

fclose(fp);

fclose(fpbak);

if?(remove(books))?//刪除失敗返回非0

{

printf("刪除文件失敗!!!\n");

return?;

}

else

if?(rename(booksbak,books))//重命名失敗返回非0值

{

printf("重命名失敗!!!\n");

return?;

}

printf("刪除成功!!!\n");

}

else

printf("查無此書!!!");

}

intchoice(void)

{

int?c;

printf("1.查看圖書\n");

printf("2.添加圖書\n");

printf("3.刪除圖書\n");

printf("4.退出程序\n");

printf("請選擇序號:");

return?c=getchar();

//return?c=getche();

printf("\n\n");

}

int?addEntry(FILE?*fp,struct?book?*firstptr)

/************************************************************************/

/*主要用來加載文件中存放的圖書信息*/

/************************************************************************/

{

struct?bookinfo?onebook;

while((fscanf(fp,"%s?%s?%s?%d\n",&onebook.isbn,&onebook.title,&onebook.author,&onebook.count))!=EOF)

{

while(firstptr->next!=0)

firstptr=firstptr->next;

firstptr->next=(struct?book?*)malloc(sizeof(struct?book));

firstptr->next->onebook=onebook;

firstptr->next->next=0;

}

return?0;

}

int?main(int?argc,char?*argv[])

{

int?ch;

struct?book?first;

strcpy(first.onebook.isbn,"123456");

strcpy(first.onebook.title,"Programming?C");

strcpy(first.onebook.author,"yhb");

first.next=0;

struct?book?*firstptr=&first;?//鏈表頭指針

FILE?*fp;

if?((fp=fopen(books,"a+"))==NULL)

printf("文件打開失敗!!!");

addEntry(fp,firstptr);

while(1)

{

system("CLS");?//清屏

/************************************************************************/

/*想想這裏為什麽要清空緩沖區*/

/*由於上壹次(choice函數)的getchar(),還有壹個'\n'留在緩沖區....*/

/*可以把這句話註釋掉看看,沒有這句話會遇到麻煩?*/

/*如果不用fflush,可以將上面的getchar()換成getche()*/

/*比較getchar(),getch(),getche()......*/

/************************************************************************/

fflush(stdin);?

ch=choice()-48;

switch?(ch)

{

case?1:

MainSearchbook(firstptr);

break;

case?2:

MainAdd(firstptr,fp);

break;

case?3:

MainRemove(firstptr,fp);

break;

case?4:

printf("謝謝使用...\n");

exit(0);

default:

printf("請輸入正確序號!");

}

system("PAUSE");

}

return?0;

}