六月丁香五月婷婷,丁香五月婷婷网,欧美激情网站,日本护士xxxx,禁止18岁天天操夜夜操,18岁禁止1000免费,国产福利无码一区色费

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

c語(yǔ)言圖書(shū)管理論文

時(shí)間: 家文952 分享

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

  c語(yǔ)言圖書(shū)管理論文篇1

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

  所在院系

  類別: 日期:

  課程設(shè)計(jì)評(píng)語(yǔ)

  注:1、無(wú)評(píng)閱人簽名成績(jī)無(wú)效;

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

  3、如有平時(shí)成績(jī),必須在上面評(píng)分表中標(biāo)出,并計(jì)算入總成績(jī)。

  目 錄

  2

  課程設(shè)計(jì)評(píng)語(yǔ) ...................................................................................................................................... 1

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

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

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

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

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

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

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

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

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

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

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

  1.課程論文題目

  圖書(shū)管理系統(tǒng)

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

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

  3.功能模塊圖

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

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

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

  5.算法設(shè)計(jì)

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

  別是輸入sr()

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

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

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

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

  還書(shū)模塊就是在查詢的基礎(chǔ)上,若s[i]的存在狀態(tài)為未借出,則無(wú)法歸還,若借出,則將存在狀態(tài)變?yōu)槲唇璩?,然后自?dòng)將姓名,學(xué)號(hào),性別變?yōu)槌跏贾怠?/p>

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

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

  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:借書(shū) 5:還書(shū) 0:退出 \n"); printf(" ************************\n"); while(1)

  {

  printf("\n\n請(qǐng)輸入功能序號(hào):"); 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:借書(shū) 5:還書(shū) 0:退出 \n"); printf(" ************************\n");

  }

  else

  {

  printf("輸入錯(cuò)誤請(qǐng)?jiān)俅屋斎雦\n\n"); printf("\n\n");

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

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

  }

  //wr_file();

  }

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

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

  void sr()

  {

  int n,i;

  N=0;

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

  scanf("%d",&n);

  N=n+N;

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

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

  {

  printf("圖書(shū)名稱:");

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

  printf("圖書(shū)編號(hào):");

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

  printf("單價(jià):");

  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,"無(wú)");

  }

  }

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

  void cx()

  {

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

  char m[20];

  printf("查詢:");

  printf("1:圖書(shū)名稱

  printf("\n\n請(qǐng)輸入查詢選項(xiàng):");

  scanf("%d",&k);

  if(k==1)

  {

  printf("請(qǐng)輸入圖書(shū)名稱:"); 2:圖書(shū)編號(hào)");

  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("請(qǐng)輸入圖書(shū)編號(hào):");

  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("沒(méi)有找到!\n");

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

  {

  printf("\t圖書(shū)名稱 \t圖書(shū)編號(hào) \t單價(jià) \t作者 \t存在狀態(tài) \t借書(shū)人姓名 \t性別 \t學(xué)號(hào)\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:圖書(shū)名稱 2:圖書(shū)編號(hào)");

  printf("\n\n請(qǐng)輸入查詢選項(xiàng):");

  scanf("%d",&k);

  if(k==1)

  {

  printf("請(qǐng)輸入圖書(shū)名稱:");

  scanf("%s",ms);

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

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

  {

  ja=i;

  break;

  }

  }

  else if(k==2)

  {

  printf("請(qǐng)輸入圖書(shū)編號(hào):");

  scanf("%d",&d);

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

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

  {

  ja=i;

  break;

  }

  }

  printf("確定刪除該圖書(shū)嗎?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 ("沒(méi)有找到!\n");

  }

  /**********借書(shū)模塊***********/

  void js()

  {

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

  char m[20];

  printf("查詢:");

  printf("1:圖書(shū)名稱

  printf("\n\n請(qǐng)輸入查詢選項(xiàng):");

  scanf("%d",&k);

  if(k==1)

  {

  printf("請(qǐng)輸入圖書(shū)名稱:");

  scanf("%s",&m);

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

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

  {

  j[t]=i;

  t=t+1;

  }

  } 2:圖書(shū)編號(hào)");

  else if(k==2)

  {

  printf("請(qǐng)輸入圖書(shū)編號(hào):");

  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("沒(méi)有找到!\n");

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

  printf("此書(shū)已借出\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("請(qǐng)輸入學(xué)號(hào):\n");

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

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

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

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

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

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

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

  //getch();

  case 2:break;

  }

  }

  /*************還書(shū)模塊***************/

  void hs()

  {

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

  char m[20];

  printf("查詢:");

  printf("1:圖書(shū)名稱 2:圖書(shū)編號(hào)");

  printf("\n\n請(qǐng)輸入查詢選項(xiàng):");

  scanf("%d",&k);

  if(k==1)

  {

  printf("請(qǐng)輸入圖書(shū)名稱:");

  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("請(qǐng)輸入圖書(shū)編號(hào):");

  scanf("%d",&d);

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

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

  {

  j[t]=i;

  t++;

  break;

  }

  }

  if(t==0)

  printf("沒(méi)有找到!\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,"無(wú)");

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

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

  }

  //getch();

  }

  }

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

  void jsh()

  {

  flag=1;

  }

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

  11

  12

  13

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

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

  14

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

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

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

  10.致謝

  c語(yǔ)言圖書(shū)管理論文篇2

  學(xué) 號(hào):

  班 級(jí):計(jì)

  姓 名:陳

  完成時(shí)間:

  科083 陽(yáng) 光

  一、 需求分析

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

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

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

  2. 詳細(xì)設(shè)計(jì)

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

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

  int cardnum; //卡號(hào)

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

  struct book /*定義書(shū)的類型*/ { int booknum; //書(shū)號(hào) char bookname[20]; //書(shū)名 char author[10]; //作者

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

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

  {

  int cardnum; //卡號(hào)

  char studentname[10];//會(huì)員姓名

  char studentclass[10]; //會(huì)員班級(jí)

  }card[1000];

  2.2 主函數(shù)

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

  HWND hwnd=GetForegroundWindow();

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

  int ch1,ch2,ch3;

  do

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

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

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

  printf("\t ※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n\n\n"); printf("\t\t請(qǐng)選擇操作類型(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 ※ ★ 歡 迎 進(jìn) 入 會(huì) 員 管 理 系 統(tǒng) ★ ※\n");

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

  printf("\t ※ 1:<申請(qǐng)新卡> 2:<刪除卡號(hào)> ※\n"); printf("\t ※ 3:<借書(shū)統(tǒng)計(jì)> 4:<會(huì)員統(tǒng)計(jì)> ※\n"); printf("\t ※ 0:<返回> ※\n");

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

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

  printf("\t\t請(qǐng)選擇操作類型(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無(wú)效操作,按任意鍵返回...\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 ※ ★ 歡 迎 進(jìn) 入 書(shū) 籍 管 理 系 統(tǒng) ★ ※\n"); printf("\t ※ ※\n"); printf("\t ※ 1:<增加圖書(shū)> 2:<刪除圖書(shū)> ※\n"); printf("\t ※ 3:<查詢圖書(shū)> 4:<書(shū)籍統(tǒng)計(jì)> ※\n"); printf("\t ※ 5:<修改圖書(shū)資料> 0:<返回主菜單> ※\n"); printf("\t ※ ※\n"); printf("\t ※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n\n\n");

  printf("\t\t請(qǐng)選擇操作類型(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無(wú)效操作,按任意鍵返回...\n");getch();break;

  }

  }while(ch2!=0);

  }break;

  case 0:break;

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

  }

  }while(ch1!=0);

  2.3 借書(shū)模塊

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

  HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);

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

  int i,n;

  int cardnum;

  printf("\n\t\t請(qǐng)你輸入你的卡號(hào): "); 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請(qǐng)輸入你要借閱的書(shū)的名字: "); scanf("%s",student[n].lendbook); fp=fopen("book.txt","r"); {

  回...\n");

  { if(book[i].bookcount==0) { printf("\t\t對(duì)不起,此書(shū)有人借出,請(qǐng)借其他書(shū).按任意鍵返 fclose(fp); getch(); return; }else{ //book[i].bookcount --; fclose(fp); } fp=fopen("record.txt","a+"); //以讀寫方式打開(kāi)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借書(shū)完畢,按任意鍵返回..."); getch(); return; } } printf("\n\t\t很抱歉,不存在這本書(shū),按任意鍵返回..."); fclose(fp); getch(); return; } }

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

  getch();

  }

  2.4 還書(shū)模塊

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

  {

  HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);

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

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

  int i,temp;

  int cardexit=0,bookexit=0;//卡號(hào) 書(shū)籍是否存在(借閱)標(biāo)志 存在(借閱)為1 不存在為0

  int cardnum;

  char lendbook[10];

  printf("\n\t\t請(qǐng)你輸入你的卡號(hào): ");

  scanf("%d",&cardnum);

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

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

  {

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

  {

  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; /*刪除還掉的書(shū)的借書(shū)記錄*/

  }

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

  }

  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); /*將借書(shū)記錄信息寫 回*/ } fclose(fp); fclose(fp2); fopen("booktemp.txt","w"); /*清臨時(shí)文件的記錄*/ 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++) /*將書(shū)的記錄寫入臨時(shí)文件,防止因?yàn)樾薷男畔⑵茐囊郧暗挠涗?/

  {

  if(i==temp)

  {

  book[i].bookcount++;

  fwrite(&book[i],sizeof(struct book),1,fp); /*將還的書(shū)的可借數(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); /*將臨時(shí)文件寫回*/ }

  fclose(fp);

  fclose(fp2);

  fopen("booktemp.txt","w"); /*清臨時(shí)文件*/

  fclose(fp2);

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

  }

  }

  fclose(fp);

  }

  }

  fclose(fp);

  if(cardexit==0)

  printf("\n\t\t系統(tǒng)沒(méi)此卡號(hào),請(qǐng)和管理員聯(lián)系,按任意鍵返回...\n");/*出錯(cuò)提示*/

  else if(bookexit==0)

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

  }

  2.5 會(huì)員管理模塊

  會(huì)員管理有四個(gè)功能:申請(qǐng)新卡、刪除卡號(hào)、借書(shū)統(tǒng)計(jì)、卡號(hào)統(tǒng)計(jì),分別對(duì)應(yīng)以下四個(gè)函數(shù):

  void addcard()

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

  FILE *fp;

  int i=0,tempcard,temp=0;

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

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

  printf("\n\t\t請(qǐng)輸入班級(jí):");

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

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

  fclose(fp);

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

  getch();

  }

  }

  void delcard()

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

  FILE *fp,*fp2;

  int i;

  int cardnum;

  char choice;

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

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

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

  printf("\n\t\t如果不存在,系統(tǒng)不做任何改動(dòng)."); printf("\n\t\t請(qǐng)輸入你要?jiǎng)h除的卡號(hào): "); 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是否真的要?jiǎng)h除該卡?刪除后該書(shū)籍的所有信息將無(wú)法恢復(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()

  { //會(huì)員借書(shū)統(tǒng)計(jì)函數(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卡號(hào):%d 借出的書(shū)籍:%s \n",student[i].cardnum,student[i].lendbook); n=n+1; } fclose(fp);

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

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

  getch();

  return n;

  }

  void cardcount()

  {

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

  printf("\t\t卡號(hào) 姓名 班級(jí)\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個(gè)會(huì)員\n",n);

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

  getch();

  }

  2.6書(shū)籍管理模塊

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

  void addbook()

  {

  //增加新書(shū)函數(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請(qǐng)輸入書(shū)的序號(hào):"); scanf("%d",&booktemp); for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++) //判斷卡號(hào)是否存在 if(booktemp==book[i].booknum) { temp=1;

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

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

  scanf("%s",&choice);

  }

  }

  fclose(fp);

  }

  void delbook()

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

  FILE *fp,*fp2;

  int i;

  char bookname[10],choice;

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

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

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

  printf("\n\t\t請(qǐng)輸入你要?jiǎng)h除的書(shū)名:");

  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是否真的要?jiǎng)h除該書(shū)籍?刪除后該書(shū)籍的所有信息將無(wú)法恢復(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()

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

  int ch5;

  do

  { HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);

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

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

  printf("\n\t\t3:<按書(shū)號(hào)查找>");

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

  printf("\n\n\t\t請(qǐng)輸入要選擇的操作(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無(wú)效操作,按任意鍵返回...\n");getch();break; } }while(ch5!=0);

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

  { //按書(shū)名查閱書(shū)籍信息 //在此不再一一列出,具體請(qǐng)參考源程序

  FILE *fp;

  char bookname[10];

  int i;

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

  printf("\n\t\t請(qǐng)輸入你要查找的書(shū)名:");

  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這本書(shū)的詳細(xì)資料是:%d %s %s 此書(shū)現(xiàn)在還可借。\n\t\t按任意鍵返回...\n",book[i].booknum,book[i].bookname,book[i].author);

  }

  else {

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

  fclose(fp);

  return 0;

  }

  fclose(fp);

  return 0;

  }

  }

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

  fclose(fp);

  return 0;

  }

  void bookcount()

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

  FILE *fp;

  int i,n=0;

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

  printf("\t\t書(shū)號(hào) 書(shū)名 作者 剩余數(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本書(shū)",n);

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

  }

  void modifybook()

  { //修改圖書(shū)信息

  FILE *fp,*fp2;

  char bookname[20],choice;

  int i;

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

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

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

  scanf("%s",bookname);

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

  {

  //printf("測(cè)試");

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

  {

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

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

  printf("\t\t1:修改書(shū)的序號(hào)\n");

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

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

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

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

  scanf("%s",&choice);

  switch(choice)

  {

  case '1':

  {

  printf("\n\t\t請(qǐng)輸入新的序號(hào): ");

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

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

  }break;

  case '2':

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

  三、 編碼測(cè)試

  1. 主界面

  2. 會(huì)員管理界面

  從主界面選擇操作類型3 進(jìn)入會(huì)員管理界面:

  3.書(shū)籍管理界面

  從主界面選擇操作類型4進(jìn)入書(shū)籍管理界面:

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

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

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

  五、 源碼

  請(qǐng)參考附件

2052868