學(xué)習(xí)啦>論文大全>管理論文>

c語言圖書管理論文

時間: 家文952 分享

  c語言圖書管理論文是考評學(xué)生對所學(xué)專業(yè)知識綜合掌握水平的一種有效方式,但畢業(yè)論文的撰寫與指導(dǎo)環(huán)節(jié)存在各種各樣的問題.如果有一篇畢業(yè)論文的例文,那就容易多了。下面是學(xué)習(xí)啦小編為大家精心挑選的,希望大家喜歡!

  c語言圖書管理論文篇1

  課程名稱 c語 言 課 程 設(shè) 計 教師姓名 樊媛媛 本科生姓名 本科生學(xué) 本科生專業(yè)

  所在院系

  類別: 日期:

  課程設(shè)計評語

  注:1、無評閱人簽名成績無效;

  2、必須用鋼筆或圓珠筆批閱,用鉛筆閱卷無效;

  3、如有平時成績,必須在上面評分表中標出,并計算入總成績。

  目 錄

  2

  課程設(shè)計評語 ...................................................................................................................................... 1

  目 錄.................................................................................................................................................... 2

  ................................................................................................................................ 3

  ................................................................................................................................ 3

  .................................................................................................................................... 4

  ................................................................................................................................ 4

  5.算法設(shè)計 ........................................................................................................................................ 4

  ........................................................................................................................................ 5

  7.程序運行結(jié)果 .............................................................................................................................. 11

  .................................................................................................. 14

  .................................................................................................................. 15

  ............................................................................................................................................ 15

  1.課程論文題目

  圖書管理系統(tǒng)

  2.程序設(shè)計思路

  根據(jù)要求,圖書管理系統(tǒng)以文本文件存放在文件中,故需要提供文件的輸入、輸出等操作;還需要保持記錄以進行刪除,查詢,借書,還書,退出,添加等等操作;另外還有鍵盤式旋轉(zhuǎn)菜單以實現(xiàn)功能選擇模塊。

  3.功能模塊圖

  系統(tǒng)功能模塊圖

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

  先寫主函數(shù)main (),然后設(shè)計個功能選項,用switch選擇,然后進入不同模塊,進行不同選擇,實現(xiàn)不同功能。每個圖書信息設(shè)置一個結(jié)構(gòu)體,將輸入信息存入文件,提供查詢功能,還有刪除功能以及借書還書功能。每運行一功能后都返回主界面,方便再次選擇,還有設(shè)置退出模塊,方便退出。

  5.算法設(shè)計

  先定義結(jié)構(gòu)體數(shù)組struct books,然后設(shè)置主界面,主界面出現(xiàn)6個功能選項,分

  別是輸入sr()

  、借書js()、還書hs()、刪除sc()、退出tc()、查詢cx().各模塊設(shè)計如下:

  輸入模塊sr(),先調(diào)用文件eup,對其進行讀取,然后增加,再對其進行保存和調(diào)用。其中結(jié)構(gòu)體只輸入tsmc圖書名稱,tsbh圖書編號,dj單價,zz作者, 然后自動生成,czzt存在狀態(tài),姓名xm,學(xué)號xh,性別xb.

  查詢模塊cx(),有選項圖書編號和圖書名稱,然后選擇,用if選擇,然后用for循環(huán)查找,當輸入名稱與文件中的名稱相同時,便顯示此信息。

  刪除模塊就是在查找功能的圖書后,選擇刪除,將strcpy將s[i+1]的值賦給s[i]。 借出模塊也是在查詢的基礎(chǔ)上,若s[i]的存在狀態(tài)為已借出,則顯示已借出,無法再借,若未借出,則將s[i]的存在狀態(tài)czzt變?yōu)橐呀璩?,然后輸入姓名,學(xué)號,性別,最后顯示出已借出。

  還書模塊就是在查詢的基礎(chǔ)上,若s[i]的存在狀態(tài)為未借出,則無法歸還,若借出,則將存在狀態(tài)變?yōu)槲唇璩觯缓笞詣訉⑿彰?,學(xué)號,性別變?yōu)槌跏贾怠?/p>

  退出模塊使flag=1,而在main就有bool flag 且main中已令main=0.這樣就實現(xiàn)了退出功能。

  其中若輸入超過選項值后,都會顯示輸入錯誤,請重新輸入。若字符錯誤,程序就直接出現(xiàn)錯誤了。

  6.程序代碼

  #include<stdio.h>

  #include<windows.h>

  #include<string.h>

  #include<conio.h>

  #define M 100

  struct books

  {

  char tsmc[12];

  int tsbh;

  float dj;

  char zz[12];

  char czzt[12];

  char xm[12];

  char xb[12];

  int xh;

  }s[M];

  int N;

  bool flag;

  int main ()

  {

  int sele;

  flag=0;

  sele=1;

  void sr();

  void cx();

  void sc();

  void js();

  void hs();

  void tc();

  void jsh();

  //system ("tsgl");

  printf("\n\n");

  printf(" ************************\n"); printf(" 1:輸入 2:查詢 3:刪除 \n"); printf(" 4:借書 5:還書 0:退出 \n"); printf(" ************************\n"); while(1)

  {

  printf("\n\n請輸入功能序號:"); scanf ("%d",&sele);

  if(sele>=0 && sele<=5)

  {

  switch(sele)

  {

  case 1:sr();break;

  case 2:cx();break;

  case 3:sc();break;

  case 4:js();break;

  case 5:hs();break;

  case 0:jsh();break;

  }

  if(flag)

  break;

  printf("\n\n");

  printf(" ************************\n"); printf(" 1:輸入 2:查詢 3:刪除 \n"); printf(" 4:借書 5:還書 0:退出 \n"); printf(" ************************\n");

  }

  else

  {

  printf("輸入錯誤請再次輸入|\n\n"); printf("\n\n");

  printf(" ************************\n"); printf(" 1:輸入 2:查詢 3:刪除 \n"); printf(" 4:借書 5:還書 0:退出 \n"); printf(" ************************\n"); }

  printf("\n\n讓任意鍵繼續(xù)\n");

  }

  //wr_file();

  }

  /******主函數(shù)***/

  /*********輸入*********/

  void sr()

  {

  int n,i;

  N=0;

  printf("可輸入的書本數(shù):");

  scanf("%d",&n);

  N=n+N;

  printf("請輸入相關(guān)信息:\n");

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

  {

  printf("圖書名稱:");

  scanf("%s",s[N-n-1+i].tsmc);

  printf("圖書編號:");

  scanf("%d",&s[N-n-1+i].tsbh);

  printf("單價:");

  scanf("%f",&s[N-n-1+i].dj);

  printf("作者:");

  scanf("%s",&s[N-n-1+i].zz);

  strcpy(s[N-n-1+i].czzt,"未借出");

  strcpy(s[N-n-1+i].xm,"無");

  }

  }

  /********查詢**********/

  void cx()

  {

  int i,j[100]={-1},d,k,t=0;

  char m[20];

  printf("查詢:");

  printf("1:圖書名稱

  printf("\n\n請輸入查詢選項:");

  scanf("%d",&k);

  if(k==1)

  {

  printf("請輸入圖書名稱:"); 2:圖書編號");

  scanf("%s",m);

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

  if(strcmp(m,s[i].tsmc)==0)

  {

  j[t]=i;

  t=t+1;

  }

  }

  else if(k==2)

  {

  printf("請輸入圖書編號:");

  scanf("%d",&d);

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

  if(d==s[i].tsbh)

  {

  j[t]=i;

  t++;

  }

  }

  if(j[0]==-1&&t==0)

  printf("沒有找到!\n");

  if(j[0]!=-1 && t!=0)

  {

  printf("\t圖書名稱 \t圖書編號 \t單價 \t作者 \t存在狀態(tài) \t借書人姓名 \t性別 \t學(xué)號\n");

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

  printf("\t%s \t%d \t%f \t%s \t%s \t%s \t%s \t%d ", s[j[i]].tsmc,s[j[i]].tsbh,s[j[i]].dj,s[j[i]].zz,s[j[i]].czzt,s[j[i]].xm,s[j[i]].xb,s[j[i]].xh);

  }

  }

  /********刪除模塊*********/

  void sc()

  {

  int i,d,k,t=0;

  char ms[20];

  int ja=-1;

  printf("查詢:");

  printf("1:圖書名稱 2:圖書編號");

  printf("\n\n請輸入查詢選項:");

  scanf("%d",&k);

  if(k==1)

  {

  printf("請輸入圖書名稱:");

  scanf("%s",ms);

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

  if(strcmp(ms,s[i].tsmc)==0)

  {

  ja=i;

  break;

  }

  }

  else if(k==2)

  {

  printf("請輸入圖書編號:");

  scanf("%d",&d);

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

  if(d==s[i].tsbh)

  {

  ja=i;

  break;

  }

  }

  printf("確定刪除該圖書嗎?1表示Yes,其他No"); int p;

  scanf("%d",&p);

  if(p==1)

  printf("Congratulations,刪除成功||\n");

  if(ja!=-1 && p)

  {

  N=N-1;

  for(i=ja;i<N;i++)

  {

  strcpy(s[i].tsmc,s[i+1].tsmc);

  s[i].tsbh=s[i+1].tsbh;

  s[i].dj=s[i+1].dj;

  strcpy(s[i].zz,s[i+1].zz);

  strcpy(s[i].czzt,s[i+1].czzt);

  strcpy(s[i].xm,s[i+1].xm);

  strcpy(s[i].xb,s[i+1].xb);

  s[i].xh=s[i+1].xh;

  }

  }

  else if(ja==-1)

  printf ("沒有找到!\n");

  }

  /**********借書模塊***********/

  void js()

  {

  int i,j[100]={-1},d,k,t=0;

  char m[20];

  printf("查詢:");

  printf("1:圖書名稱

  printf("\n\n請輸入查詢選項:");

  scanf("%d",&k);

  if(k==1)

  {

  printf("請輸入圖書名稱:");

  scanf("%s",&m);

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

  if(strcmp(m,s[i].tsmc)==0)

  {

  j[t]=i;

  t=t+1;

  }

  } 2:圖書編號");

  else if(k==2)

  {

  printf("請輸入圖書編號:");

  scanf("%d",&d);

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

  if(d==s[i].tsbh)

  {

  j[t]=i;

  t++;

  }

  }

  if(j[0]==-1&&t==0)

  printf("沒有找到!\n");

  strcpy(s[j[i]].czzt,"已借出");

  printf("此書已借出\n");

  if(j[0]!=-1&&t!=0&&s[j[i]].czzt==" 未借出")

  {

  printf("%s %d %f %s %s %s %s %d ",

  s[j[i]].tsmc,s[j[i]].tsbh,s[j[i]].dj,s[j[i]].zz,s[j[i]].czzt,s[j[i]].xm,s[j[i]].xb,s[j[i]].xh); }

  printf("1:確定借閱 2:退出\n");

  scanf("%d",&k);

  switch(k)

  {

  case 1:printf("請輸入學(xué)號:\n");

  scanf("%d",&s[j[i]].xh);

  printf("請輸入姓名:\n");

  scanf("%s",&s[j[i]].xm);

  printf("請輸入性別:\n");

  scanf("%s",&s[j[i]].xb);

  strcpy(s[j[i]].czzt,"已借出");

  printf("已借出,按任意鍵繼續(xù)\n");

  //getch();

  case 2:break;

  }

  }

  /*************還書模塊***************/

  void hs()

  {

  int i,j[100]={-1},d,k,t=0;

  char m[20];

  printf("查詢:");

  printf("1:圖書名稱 2:圖書編號");

  printf("\n\n請輸入查詢選項:");

  scanf("%d",&k);

  if(k==1)

  {

  printf("請輸入圖書名稱:");

  scanf("%s",&m);

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

  if(strcmp(m,s[i].tsmc)==0)

  {

  j[t]=i;

  t++;

  break;

  }

  }

  else if(k==2)

  {

  printf("請輸入圖書編號:");

  scanf("%d",&d);

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

  if(d==s[i].tsbh)

  {

  j[t]=i;

  t++;

  break;

  }

  }

  if(t==0)

  printf("沒有找到!\n");

  else

  {

  printf("%s %f %s %s %s %s %d \n",

  s[j[i]].tsmc,s[j[i]].dj,s[j[i]].zz,s[j[i]].czzt,s[j[i]].xm,s[j[i]].xb,s[j[i]].xh);

  printf("1:確定歸還 2:退出\n");

  int p;

  scanf("%d",&p);

  if(p==1)

  {

  strcpy(s[j[i]].czzt,"未借出");

  strcpy(s[j[i]].xm,"無");

  s[j[i]].xh=0;

  printf("已歸還,按任意鍵繼續(xù)\n");

  }

  //getch();

  }

  }

  /*************結(jié)束模塊***************/

  void jsh()

  {

  flag=1;

  }

  7.程序運行結(jié)果

  11

  12

  13

  各模塊均能執(zhí)行。

  8.編程中遇到的困難及解決方法

  14

  做程序時,文件函數(shù)無法實現(xiàn),于是找了同學(xué)跟我講解,看書還有就是看例子等等,最終找出了個解決方案。還有系統(tǒng)最初運行時有很多不盡人意的,比如我希望每次運行后都出現(xiàn)主界面,這樣方便選擇。如果出現(xiàn)錯誤的話,要顯示出錯誤原因,并給出提示,我解決了幾個這樣的問題,比如借書時如果已借出就要顯示出“已借出,請重新選擇”,如果沒有,就顯示無法找到,并顯出主菜單,再次選擇。

  9.總結(jié)心得及良好建議

  對于程序的設(shè)計,必須先理解c語言的一些知識,用起來才會得心應(yīng)手,最好之前就想好大致用什么算法去實現(xiàn)需要的程序。對于舉一反三的內(nèi)容不是用來抄的,我們必須要先對其理解,這樣才能寫好一個程序。程序中最復(fù)雜的感覺是調(diào)試,有時候自己有很多習(xí)慣性的錯誤真的很難找到,所有要形成好的習(xí)慣。還有就是要養(yǎng)成好的思維,要多練習(xí),不能眼高手低。

  10.致謝

  c語言圖書管理論文篇2

  學(xué) 號:

  班 級:計

  姓 名:陳

  完成時間:

  科083 陽 光

  一、 需求分析

  1. 依據(jù)題目要求以及現(xiàn)實中圖書館的需求,應(yīng)將該系統(tǒng)分為兩大模塊:圖書管理和會

  員管理。圖書管理模塊中包括對圖書的增加、修改、刪除、查詢、統(tǒng)計等操作,以及對圖書借入借出服務(wù)。會員管理包括對會員卡號的申請、刪除、統(tǒng)計等操作。 2. 界面應(yīng)該具有友善、直觀、易操作等特點,本系統(tǒng)采用數(shù)字輸入選擇操作。 二、 概要設(shè)計 1. 整體設(shè)計

  經(jīng)過需求分析,本系統(tǒng)分為兩大模塊:書籍管理模塊和會員管理模塊。但是從易用性方面考慮,將書籍管理模塊中的借書和還書模塊放到主界面中。結(jié)構(gòu)圖如下所示:

  2. 詳細設(shè)計

  2.1結(jié)構(gòu)體設(shè)計

  流程圖 struct student /*定義會員類型,用于存放借出的書籍*/ {

  int cardnum; //卡號

  char lendbook[10]; //借書數(shù)組 最多借書十本 }student[1000];

  struct book /*定義書的類型*/ { int booknum; //書號 char bookname[20]; //書名 char author[10]; //作者

  int bookcount; //書的剩余數(shù)量 }book[1000];

  struct card /*借書卡的數(shù)據(jù)類型*/

  {

  int cardnum; //卡號

  char studentname[10];//會員姓名

  char studentclass[10]; //會員班級

  }card[1000];

  2.2 主函數(shù)

  主函數(shù)要求設(shè)計比較簡潔,只提供設(shè)輸入,處理和輸出部分的函數(shù)調(diào)用。其中各功能模塊用菜單方式選擇。

  HWND hwnd=GetForegroundWindow();

  SetWindowText(hwnd,"★圖 書 管 理 系 統(tǒng)★");

  int ch1,ch2,ch3;

  do

  { SetConsoleTextAttribute(h,FOREGROUND_RED);//設(shè)置字體顏色為紅色

  printf("\n\t\t ★歡★迎★進★入★圖★書★管★理★系★統(tǒng)★\n\n");

  printf("\t ※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); printf("\t ※ ※\n"); printf("\t ※ ★ 圖 書 管 理 系 統(tǒng) ★ ※\n"); printf("\t ※ ※\n"); printf("\t ※ 1:<借書系統(tǒng)> 2:<還書系統(tǒng)> ※\n"); printf("\t ※ 3:<會員管理> 4:<書籍管理> ※\n"); printf("\t ※ 0:<退出> ※\n"); printf("\t ※ ※\n");

  printf("\t ※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n\n\n"); printf("\t\t請選擇操作類型(0-4):");

  scanf("%d",&ch1);

  switch(ch1)

  { case 1:lendbook();break;

  case 2:returnbook();break;

  case 3:{

  do

  {SetConsoleTextAttribute(h, FOREGROUND_GREEN);//設(shè)置字體顏色為綠色

  printf("\n\n");

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

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

  printf("\t ※ ★ 歡 迎 進 入 會 員 管 理 系 統(tǒng) ★ ※\n");

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

  printf("\t ※ 1:<申請新卡> 2:<刪除卡號> ※\n"); printf("\t ※ 3:<借書統(tǒng)計> 4:<會員統(tǒng)計> ※\n"); printf("\t ※ 0:<返回> ※\n");

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

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

  printf("\t\t請選擇操作類型(0-4):");

  scanf("%d",&ch3);

  switch(ch3)

  { case 1:addcard();break;

  case 2:delcard();break;

  case 3:lendcount();break;

  case 4:cardcount();break;

  case 0:break;

  default:printf("\n\t\t無效操作,按任意鍵返回...\n");getch();break; } }while(ch3!=0);

  }break;

  case 4:{

  do {

  SetConsoleTextAttribute(h, FOREGROUND_GREEN);//設(shè)置字體顏色為綠色

  printf("\n\n");

  printf("\t ※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); printf("\t ※ ※\n"); printf("\t ※ ★ 歡 迎 進 入 書 籍 管 理 系 統(tǒng) ★ ※\n"); printf("\t ※ ※\n"); printf("\t ※ 1:<增加圖書> 2:<刪除圖書> ※\n"); printf("\t ※ 3:<查詢圖書> 4:<書籍統(tǒng)計> ※\n"); printf("\t ※ 5:<修改圖書資料> 0:<返回主菜單> ※\n"); printf("\t ※ ※\n"); printf("\t ※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n\n\n");

  printf("\t\t請選擇操作類型(0-5):");

  scanf("%d",&ch2);

  switch(ch2)

  { case 1:addbook();break;

  case 2:delbook();break;

  case 3:searchbook();break;

  case 4:bookcount();getch();break;

  case 5:modifybook();break;

  case 0:break;

  default:printf("\n\t\t無效操作,按任意鍵返回...\n");getch();break;

  }

  }while(ch2!=0);

  }break;

  case 0:break;

  default:printf("\n\t\t無效操作,按任意鍵返回...\n");getch();break;

  }

  }while(ch1!=0);

  2.3 借書模塊

  void lendbook() { //借書功能函數(shù)

  HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);

  SetConsoleTextAttribute(h, FOREGROUND_GREEN); FILE *fp,*fp2;

  int i,n;

  int cardnum;

  printf("\n\t\t請你輸入你的卡號: "); scanf("%d",&cardnum); fp=fopen("card.txt","r"); for(i=0;fread(&card[i],sizeof(struct card),1,fp)!=0;i++) { if(card[i].cardnum==cardnum) { n=i; fclose(fp); printf("\n\t\t請輸入你要借閱的書的名字: "); scanf("%s",student[n].lendbook); fp=fopen("book.txt","r"); {

  回...\n");

  { if(book[i].bookcount==0) { printf("\t\t對不起,此書有人借出,請借其他書.按任意鍵返 fclose(fp); getch(); return; }else{ //book[i].bookcount --; fclose(fp); } fp=fopen("record.txt","a+"); //以讀寫方式打開record.txt student[n].cardnum=cardnum; fwrite(&student[n],sizeof(struct student),1,fp); fclose(fp);

  fp=fopen("book.txt","r"); fp2=fopen("booktemp.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].bookcount--; 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("booktemp.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("booktemp.txt","w"); fclose(fp2); printf("\n\t\t借書完畢,按任意鍵返回..."); getch(); return; } } printf("\n\t\t很抱歉,不存在這本書,按任意鍵返回..."); fclose(fp); getch(); return; } }

  printf("\n\t\t你的卡號不存在,請申請新卡,按任意鍵返回..."); fclose(fp);

  getch();

  }

  2.4 還書模塊

  void returnbook() /*還書函數(shù)*/

  {

  HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);

  SetConsoleTextAttribute(h, FOREGROUND_GREEN);//設(shè)置字體顏色為綠色

  FILE *fp,*fp2; /*定義兩個文件指針,fp2用于修改數(shù)據(jù)時設(shè)立臨時文件用,防止數(shù)據(jù)遭破壞*/

  int i,temp;

  int cardexit=0,bookexit=0;//卡號 書籍是否存在(借閱)標志 存在(借閱)為1 不存在為0

  int cardnum;

  char lendbook[10];

  printf("\n\t\t請你輸入你的卡號: ");

  scanf("%d",&cardnum);

  fp=fopen("card.txt","r"); /*讀取卡號記錄*/ for(i=0;fread(&card[i],sizeof(struct card),1,fp)!=0;i++) /*for循環(huán)判斷卡號是否存在*/ { if(card[i].cardnum==cardnum) /*卡號存在,進入下一循環(huán)*/ { cardexit=1; temp=i; fclose(fp); printf("\n\t\t請輸入你要還的書的名字: "); scanf("%s",lendbook); fp=fopen("record.txt","r");

  for(i=0;fread(&student[i],sizeof(struct student),1,fp)!=0;i++) /*判斷是否借閱了輸入的書*/

  {

  if(student[i].lendbook==lendbook) /*借閱了該書,進入下一循環(huán),否則出錯顯示*/

  {

  bookexit=1;

  fclose(fp);

  fp=fopen("record.txt","r");

  fp2=fopen("booktemp.txt","w");

  for(i=0;fread(&student[i],sizeof(struct student),1,fp)!=0;i++)

  {

  if(student[i].lendbook==lendbook)

  {

  continue; /*刪除還掉的書的借書記錄*/

  }

  fwrite(&student[i],sizeof(struct student),1,fp2); /*寫入原來沒還的書的記錄*/

  }

  fclose(fp);

  fclose(fp2);

  fp=fopen("record.txt","w");

  fp2=fopen("booktemp.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("booktemp.txt","w"); /*清臨時文件的記錄*/ fclose(fp2); fp=fopen("book.txt","r"); fp2=fopen("booktemp.txt","w");

  for(i=0;fread(&book[i],sizeof(struct book),1,fp2)!=0;i++) /*將書的記錄寫入臨時文件,防止因為修改信息破壞以前的記錄*/

  {

  if(i==temp)

  {

  book[i].bookcount++;

  fwrite(&book[i],sizeof(struct book),1,fp); /*將還的書的可借數(shù)量加1*/

  continue;

  }

  fwrite(&book[i],sizeof(struct book),1,fp2);

  }

  fclose(fp);

  fclose(fp2);

  fp=fopen("book.txt","w");

  fp2=fopen("booktemp.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("booktemp.txt","w"); /*清臨時文件*/

  fclose(fp2);

  printf("\n\t\t還書完畢,按任意鍵返回...\n");

  }

  }

  fclose(fp);

  }

  }

  fclose(fp);

  if(cardexit==0)

  printf("\n\t\t系統(tǒng)沒此卡號,請和管理員聯(lián)系,按任意鍵返回...\n");/*出錯提示*/

  else if(bookexit==0)

  printf("\n\t\t你沒有借這本書,按任意鍵返回...\n"); /*出錯提示*/ getch();

  }

  2.5 會員管理模塊

  會員管理有四個功能:申請新卡、刪除卡號、借書統(tǒng)計、卡號統(tǒng)計,分別對應(yīng)以下四個函數(shù):

  void addcard()

  { //增加新卡函數(shù)

  FILE *fp;

  int i=0,tempcard,temp=0;

  fp=fopen("card.txt","a+");

  printf("\n\t\t請輸入卡號:"); scanf("%d",&tempcard); for(i=0;fread(&card[i],sizeof(struct card),1,fp)!=0;i++) //判斷卡號是否存在 if(tempcard==card[i].cardnum) temp=1; if(temp==1) //如果卡號存在,返回 { printf("\n\t\t此卡號已經(jīng)存在,按任意鍵返回..."); getch(); } else if(temp==0){ //如果卡號不存在,繼續(xù)下面操作 card[i].cardnum=tempcard; printf("\n\t\t請輸入學(xué)生姓名:"); scanf("%s",card[i].studentname);

  printf("\n\t\t請輸入班級:");

  scanf("%s",&card[i].studentclass);

  fwrite(&card[i],sizeof(struct card),1,fp);

  fclose(fp);

  printf("\n\t\t輸入完畢,任意鍵返回...\n");

  getch();

  }

  }

  void delcard()

  { //刪除卡號記錄函數(shù)

  FILE *fp,*fp2;

  int i;

  int cardnum;

  char choice;

  fp=fopen("card.txt","r");

  fp2=fopen("booktemp.txt","w");

  printf("\n\t\t提示:如果你輸入的卡號存在,系統(tǒng)自動刪除該信息.");

  printf("\n\t\t如果不存在,系統(tǒng)不做任何改動."); printf("\n\t\t請輸入你要刪除的卡號: "); scanf("%d",&cardnum); for(i=0;fread(&card[i],sizeof(struct card),1,fp)!=0;i++) { if(card[i].cardnum!=cardnum) { fwrite(&card[i],sizeof(struct card),1,fp2); } } fclose(fp); fclose(fp2); printf("\n\t\t是否真的要刪除該卡?刪除后該書籍的所有信息將無法恢復(fù)<Y/N>:"); scanf("%s",&choice); if(choice=='y'||choice=='Y') { fp=fopen("card.txt","w"); fp2=fopen("booktemp.txt","r"); for(i=0;fread(&card[i],sizeof(struct card),1,fp2)!=0;i++) { fwrite(&card[i],sizeof(struct card),1,fp); } fclose(fp); fclose(fp2); fp2=fopen("booktemp.txt","w"); fclose(fp2); printf("\t\t按任意鍵返回...\n"); getch(); } else {

  printf("\t\t按任意鍵返回...\n");

  getch();

  }

  }

  int lendcount()

  { //會員借書統(tǒng)計函數(shù)

  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("\t\t卡號:%d 借出的書籍:%s \n",student[i].cardnum,student[i].lendbook); n=n+1; } fclose(fp);

  printf("\t\t目前共有%d本書借出\n",n);

  printf("\t\t按任意鍵返回...\n");

  getch();

  return n;

  }

  void cardcount()

  {

  //會員卡號統(tǒng)計函數(shù) FILE *fp; int i,n=0; fp=fopen("card.txt","r");

  printf("\t\t卡號 姓名 班級\n");

  for(i=0;fread(&card[i],sizeof(struct card),1,fp)!=0;i++)

  {

  printf("\n\t\t%-10d%-10s%-2s\n",card[i].cardnum,card[i].studentname,card[i].studentclass); n=n+1;

  }

  fclose(fp);

  printf("\n\t\t目前共有%d個會員\n",n);

  printf("\t\t按任意鍵返回...\n");

  getch();

  }

  2.6書籍管理模塊

  書籍管理模塊有五個功能:增加圖書、刪除圖書、查詢圖書、書籍統(tǒng)計、修改圖書資料。分別對應(yīng)下面五個函數(shù):

  void addbook()

  {

  //增加新書函數(shù) FILE *fp; int i=1,temp=0,booktemp; char choice='y'; fp=fopen("book.txt","a+"); while(choice=='y'||choice=='Y') { printf("\n\t\t請輸入書的序號:"); scanf("%d",&booktemp); for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++) //判斷卡號是否存在 if(booktemp==book[i].booknum) { temp=1;

  choice='n'; } // scanf("%d",&book[i].booknum); if(temp==1) { printf("\n\t\t此書號已經(jīng)存在,按任意鍵返回..."); getch(); } else { printf("\n\t\t請輸入書名:"); scanf("%s",book[i].bookname); printf("\n\t\t請輸入書的作者:"); scanf("%s",book[i].author); printf("\n\t\t請設(shè)定書可借數(shù)量:"); scanf("%d",&book[i].bookcount); fwrite(&book[i],sizeof(struct book),1,fp);

  printf("\n\t\t是否要輸入下本書(Y or N):");

  scanf("%s",&choice);

  }

  }

  fclose(fp);

  }

  void delbook()

  { //刪除圖書函數(shù)

  FILE *fp,*fp2;

  int i;

  char bookname[10],choice;

  fp=fopen("book.txt","r");

  fp2=fopen("booktemp.txt","w");

  printf("\n\t\t提示:如果你輸入的書名存在,系統(tǒng)自動刪除該信息!\n\t\t如果不存在,系統(tǒng)不做任何改動!");

  printf("\n\t\t請輸入你要刪除的書名:");

  scanf("%s",bookname);

  for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++)

  {

  if(strcmp(bookname,book[i].bookname)!=0)

  {

  fwrite(&book[i],sizeof(struct book),1,fp2);

  }

  }

  fclose(fp);

  fclose(fp2);

  printf("\n\t\t是否真的要刪除該書籍?刪除后該書籍的所有信息將無法恢復(fù)<Y/N>:"); scanf("%s",&choice);

  if(choice=='y'||choice=='Y') { fp=fopen("book.txt","w"); fp2=fopen("booktemp.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); fp2=fopen("booktemp.txt","w"); fclose(fp2);

  printf("\n\t\t按任意鍵返回...\n");

  getch();

  }

  else

  {

  printf("\n\t\t按任意鍵返回...\n");

  getch();

  }

  }

  void searchbook()

  { //圖書查詢系統(tǒng)函數(shù)

  int ch5;

  do

  { HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);

  SetConsoleTextAttribute(h, FOREGROUND_GREEN);//設(shè)置字體顏色為綠色 printf("\n\t\t1:<按書名查找>");

  printf("\t\t2:<按作者查找>");

  printf("\n\t\t3:<按書號查找>");

  printf("\t\t0:<返回主菜單>");

  printf("\n\n\t\t請輸入要選擇的操作(0-3):");

  scanf("%d",&ch5);

  switch(ch5)

  {

  case 1:findbook();getch();break;

  case 2:findbook1();getch();break;

  case 3:

  {findbook2();

  getchar();

  }break;

  case 0: break;

  } default:printf("\t\t無效操作,按任意鍵返回...\n");getch();break; } }while(ch5!=0);

  int findbook() //findbook1() findbook2()分別為按作者和書號查詢,和此函數(shù)類似,再次不

  { //按書名查閱書籍信息 //在此不再一一列出,具體請參考源程序

  FILE *fp;

  char bookname[10];

  int i;

  fp=fopen("book.txt","r");

  printf("\n\t\t請輸入你要查找的書名:");

  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].bookcount!=0)

  {

  printf("\n\t\t這本書的詳細資料是:%d %s %s 此書現(xiàn)在還可借。\n\t\t按任意鍵返回...\n",book[i].booknum,book[i].bookname,book[i].author);

  }

  else {

  printf("\n\t\t這本書已經(jīng)借完!\n");

  fclose(fp);

  return 0;

  }

  fclose(fp);

  return 0;

  }

  }

  printf("\n\t\t沒有你要查詢的書籍,按任意鍵返回...\n");

  fclose(fp);

  return 0;

  }

  void bookcount()

  { //書籍統(tǒng)計函數(shù)

  FILE *fp;

  int i,n=0;

  fp=fopen("book.txt","r");

  printf("\t\t書號 書名 作者 剩余數(shù)量\n");

  for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++)

  {

  if(book[i].booknum!=0&&strlen(book[i].bookname)!=0&&strlen(book[i].author)!=0) {

  printf("\t\t%-10d%-20s%-10s%-2d\n",book[i].booknum,book[i].bookname,book[i].author,book[i].bookcount);

  n=n+1;

  }

  }

  fclose(fp);

  printf("\n\t\t目前共有%d本書",n);

  printf("\t\t按任意鍵返回...\n");

  }

  void modifybook()

  { //修改圖書信息

  FILE *fp,*fp2;

  char bookname[20],choice;

  int i;

  fp=fopen("book.txt","r");

  fp2=fopen("booktemp.txt","w");

  printf("\n\t\t請你輸入要修改的書籍的書字:");

  scanf("%s",bookname);

  for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++)

  {

  //printf("測試");

  if(strcmp(bookname,book[i].bookname)==0)

  {

  printf("\t\t你所要修改的書的資料如下,請選擇你要修改的內(nèi)容\n"); printf("\t\t序號:〈%d〉 書名:〈%s〉 作者:〈%s〉

  \n",book[i].booknum,book[i].bookname,book[i].author);

  printf("\t\t1:修改書的序號\n");

  printf("\t\t2:修改書名\n");

  printf("\t\t3:修改作者\n");

  printf("\t\t4: 修改書的借出狀態(tài)\n");

  printf("\t\t請輸入選擇的操作(1-4):");

  scanf("%s",&choice);

  switch(choice)

  {

  case '1':

  {

  printf("\n\t\t請輸入新的序號: ");

  scanf("%d",&book[i].booknum);

  fwrite(&book[i],sizeof(struct book),1,fp2);

  }break;

  case '2':

  } { printf("\n\t\t請輸入新的書名: "); scanf("%s",book[i].bookname); fwrite(&book[i],sizeof(struct book),1,fp2); }break; case '3': { printf("\n\t\t請輸入書的作者: "); scanf("%s",book[i].author); fwrite(&book[i],sizeof(struct book),1,fp2); }break; case '4': { printf("\n\t\t請輸入書剩余數(shù)量: "); scanf("%d",book[i].bookcount ); fwrite(&book[i],sizeof(struct book),1,fp2); }break; default:printf("\t\t無效操作\n");break; } continue; } fwrite(&book[i],sizeof(struct book),1,fp2); } fclose(fp); fclose(fp2); fp=fopen("book.txt","w"); fp2=fopen("booktemp.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); fp2=fopen("booktemp.txt","w"); fclose(fp2); printf("\t\t很抱歉,不存在要修改的圖書!\n"); getchar();

  三、 編碼測試

  1. 主界面

  2. 會員管理界面

  從主界面選擇操作類型3 進入會員管理界面:

  3.書籍管理界面

  從主界面選擇操作類型4進入書籍管理界面:

  注:由于篇幅有限,其他功能不再一一截圖,更多詳細情況請參考附件。

  四、 設(shè)計總結(jié)

  經(jīng)過幾天的努力,圖書管理系統(tǒng)總算可以正常運行了,功能也算基本完善。實習(xí)過程中也遇到了很多的困難,但通過圖書館和上網(wǎng)查閱資料,總算得以一一解決。最后感謝我的隊友安龍飛和蘭其海的對此的大力幫助。

  五、 源碼

  請參考附件

2052868