• 方案介紹
  • 附件下載
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

C語言程序設(shè)計-圖書管理系統(tǒng)

2024/09/18
1538
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

有需要資料的可了解一下.docx

共1個文件

圖書管理系統(tǒng)

本題目設(shè)計目的是訓(xùn)練學(xué)生的基本編程能力,了解管理信息系統(tǒng)的開發(fā)流程,熟悉C語言的文件和單鏈表的各種基本操作。本程序中涉及結(jié)構(gòu)體、文件等方面的知識。通過本程序的訓(xùn)練,使學(xué)生能對C語言的文件操作有一個更深刻的了解,掌握利用文件存儲結(jié)構(gòu)實現(xiàn)對圖書管理的原理,為進(jìn)一步開發(fā)出高質(zhì)量的管理信息系統(tǒng)打下堅實的基礎(chǔ)。

1自定義問題

圖1.0

創(chuàng)建一個圖書管理系統(tǒng)。假設(shè)圖書管理系統(tǒng)中僅僅包含圖書的書名和編號和作者等信息。程序的運(yùn)行效果如圖1.0所示,選擇任意菜單后,實現(xiàn)相應(yīng)功能

2系統(tǒng)設(shè)計

2.1總體設(shè)計

采用模塊化的程序設(shè)計方法,即將較大的任務(wù)按照一定的原則分為一個個較小的任務(wù),然后分別設(shè)計各個小任務(wù)。需要注意的是劃分出來的模塊應(yīng)該相對獨(dú)立但又相關(guān),且容易理解??梢杂媚K化層次結(jié)構(gòu)圖(即模塊圖)來分析其任務(wù)的劃分,一般從上到下進(jìn)行,最上面一層是主模塊,下面各層是其上一層模塊的逐步細(xì)化描述

2.2 詳細(xì)設(shè)計

2.2.1數(shù)據(jù)結(jié)構(gòu)設(shè)計

  1. 圖書信息結(jié)構(gòu)體
  2. struct describe
  3. {
  4. char book_name [10]; //書名
  5. int num ;//編號
  6. char author [10]; }book[N]//作者

2.2.2主控main()函數(shù)執(zhí)行流程

圖2.2? 主控函數(shù)執(zhí)行流程圖

2.2.3 初始化圖書模塊:choice1()//初 始 化 圖 書函數(shù)。?? 對圖書進(jìn)行輸入和保存,

choice1()//初 始 化 圖 書函數(shù)

{

int i,j,temp;//

printf("--------------初 始 化 圖 書 信 息---------------n");

printf("初始化圖書的本書: ");

scanf("%d",&temp);

printf("--------書名 編號 作者 n");

for(i=0;i<temp;i++)

{

printf("第%d本書:",i+1);

scanf("%s%d%s",book[i].book_name,&book[i].num,book[i].author);

for(j=0;j<i;j++)

{

again:

if((strcmp(book[i].book_name,book[j].book_name))==0||book[i].num==book[j].num)

{

printf("初始化失?。?-----你輸入的數(shù)據(jù)違背了主鍵的唯一性!n");

printf(" 書名 編號 作者 n");

printf("第%d本書:",i+1);

scanf("%s%d%s",book[i].book_name,&book[i].num,book[i].author);//重新輸入書本信息

goto again;

}

}

}

FILE* fp;

if((fp=fopen("book.txt","wb"))==NULL)

{

printf("cannot open filen");

return;

}

for(i=0;i<temp;i++)

{

if(fwrite(&book[i],sizeof(struct describe ),1,fp)!=1)

printf("file write errorn");

}

fclose (fp);

}

該函數(shù)對圖書進(jìn)行初始化錄入保存,首先調(diào)用程序,首先輸入要錄入的圖書的本書,如圖

先輸入要初始化的本數(shù)為1;接下來輸入書的名字;編號;作者如圖

輸入完后,函數(shù)將結(jié)果保存到book.txt文件中.

2.2.4 /增 加 圖 書模塊,對圖書館購進(jìn)新書時要對新書進(jìn)行錄入保存在圖書管理系統(tǒng)。

choice2()//增 加 圖 書函數(shù)

{

int i,m=0,y=1;

FILE *fp ;

printf("----------------增 加 圖 書 信 息----------------n");

if((fp=fopen("book.txt","rb"))==NULL)

{

printf("cannot open filen");

exit(0) ;

}

while((fread(&book[m],sizeof(struct describe ),1,fp))!=0)

m++ ;

fclose(fp);

while(y)

{

again:

printf("書名 編號 作者n");

scanf("%s%d%s",book[m].book_name,&book[m].num,book[m].author);

for(i=0;i<m;i++)

{

if((strcmp(book[i].book_name,book[m].book_name))==0||book[i].num==book[m].num)

{printf("添加圖書失??!----你輸入的數(shù)據(jù)違背了主鍵的唯一性!n");

goto again;}

}

printf("是否繼續(xù)(1繼續(xù)or 0結(jié)束):");

getchar();

scanf("%d",&y);

m++;

}

if((fp=fopen("book.txt","wb"))==NULL)

{

printf("cannot open filen");

exit(0) ;

}

for(i=0;i<m;i++)

{

if(fwrite(&book[i],sizeof(struct describe ),1,fp)!=1)//保存函數(shù)

printf("file write errorn");

}

fclose (fp);

}

該模塊主要對圖書館新購買回來的書籍進(jìn)行錄入保存,輸入數(shù)字2進(jìn)入choice2()函數(shù),依次輸入書本的名字,編號,作者。函數(shù)要求輸入1和0,以判斷是否繼續(xù)輸入圖書信息;如圖

如果繼續(xù)輸入就輸入1或者結(jié)束就輸入0。

2.2.5修改圖書模塊:該模塊對輸入有錯誤的圖書的信息進(jìn)行修改。在主菜單中輸入數(shù)字3,進(jìn)入choice2()函數(shù),

choice3()//修 改 圖 書函數(shù)

{

printf("----------------修 改 圖 書 信 息----------------n");

FILE *fp ;

int temp ;

again:

printf("輸入你要修改的圖書的編號:");

scanf("%d",&temp);

struct describe update ;//再定義一個struct describe的結(jié)構(gòu)體

int i=0,k=0,j;

if((fp=fopen("book.txt","rb+"))==NULL)

{

printf("cannot open filen");

exit(0);

}

int n=10000;

while((fread(&book[k],sizeof(struct describe),1,fp))!=0)

{

if(book[k].num==temp)

n=k;

k++;

}

fclose(fp);

if(n==10000)

{

printf("你要-修改的-圖書-不存在!n");

getchar();

goto again ;

}

printf("書名 編號 作者n");

scanf("%s%d%s",update.book_name,&update.num,update.author);

for(j=0;j<k;j++)

{

if(j==n) continue ;

else

if((strcmp(book[j].book_name,update.book_name))==0||book[j].num==update.num)

{

printf("修改圖書信息失??!您輸入的數(shù)據(jù)違背了主鍵的唯一性!n");

goto again ;

}

}

if((fp=fopen("book.txt","rb+"))==NULL)

{

printf("cannot open filen");

exit(0);

}

while((fread(&book[i],sizeof(struct describe),1,fp))!=0)

{

if(book[i].num==temp)

{

fseek(fp,-sizeof(struct describe),1);//把文件fp向前后推sizeof(struct describe)字節(jié)

fwrite(&update,sizeof(struct describe ),1,fp);

fclose(fp);

}

i++;

  • 有需要資料的可了解一下.docx
    下載

相關(guān)推薦