欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      數(shù)據(jù)結(jié)構(gòu)課程設(shè)計—java通訊錄管理系統(tǒng)

      時間:2019-05-14 04:22:10下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計—java通訊錄管理系統(tǒng)》,但愿對你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計—java通訊錄管理系統(tǒng)》。

      第一篇:數(shù)據(jù)結(jié)構(gòu)課程設(shè)計—java通訊錄管理系統(tǒng)

      import java.io.*;import java.util.*;public class LittleProgram {

      static boolean isDelete = true;

      static boolean isFind = true;

      public static void main(String [] args)//主方法,程序從這里開始運行

      throws IOException,NumberNotFoundException

      {

      int choice=-1;

      do{

      LittleProgram lp = new LittleProgram();

      System.out.println();

      System.out.println(“t

      #”);

      System.out.println();

      System.out.println(“tt通訊錄管理系統(tǒng)”);

      System.out.println(“t

      請用號碼插入,查找,修改,刪除數(shù)據(jù)”);

      System.out.println();

      System.out.println(“t

      #n”);

      System.out.print(“1.增加號碼:n”+

      “2.查找號碼:n”+

      “3.刪除號碼:n”+ “4.清除所有號碼:n”+ “5.把號碼全部打印到屏幕n”+ “6.把通訊錄按號碼排序n”+

      “7.修改號碼n”+

      “8.統(tǒng)計通碼訊錄的總?cè)藬?shù)n”+

      “9.關(guān)于作者n”+

      “0.退出程序.n” +

      “輸入:”);

      BufferedReader in =

      //從終

      new BufferedReader(//端接

      new InputStreamReader(System.in));//收數(shù)

      String inputLine = in.readLine();

      //字選

      choice= Integer.valueOf(inputLine).intValue();//項;

      switch(choice)

      {

      case 1: {//1.增加號碼

      String str = lp.inputData();

      lp.addData(str);

      System.out.println(“增加號碼成功.”);

      timeOut(1);

      }break;

      case 2: {//2.查找號碼

      long find = 0;

      System.out.print(“請輸入你要查找的號碼:”);

      BufferedReader inn =

      new BufferedReader(new InputStreamReader(System.in));

      String inputLi = inn.readLine();

      find = Integer.valueOf(inputLi).longValue();

      lp.findData(find);

      timeOut(2);

      }break;

      case 3: {//3.刪除號碼

      long deleteNumber = 0;

      System.out.print(“請輸入你想刪除號碼:”);

      BufferedReader bf =

      new BufferedReader(new InputStreamReader(System.in));

      String inputL = bf.readLine();

      deleteNumber = Integer.valueOf(inputL).longValue();

      lp.deleteData(deleteNumber);

      if(isDelete)

      System.out.println(“刪除號碼成功!”);

      timeOut(1);

      }break;

      case 4: {

      lp.clearData();//4.清除所有號碼

      timeOut(1);

      }break;

      case 5: {

      print();//5.把號碼全部打印到屏幕

      timeOut(2);

      }break;

      case 6: {

      lp.numSort();//6.把號碼按號碼排序

      System.out.println(“按照號碼從小到大排序成功!n”+

      “排序后:n”);

      print();

      timeOut(2);

      }break;

      case 7: {

      lp.rewrite();//7.修改號碼

      timeOut(2);

      }break;

      case 8: {

      int count = lp.count();

      System.out.println(“共有”+count+“個號碼記錄.”);

      timeOut(2);

      }break;

      case 9: {

      System.out.print(“tt李雪萍n”+

      “tt安徽理工大學(xué)理學(xué)院n”+

      “ttQQ:1154646392n”);

      timeOut(4);

      }break;

      }}while(choice!= 0);

      System.out.println(“Bye!^-^”);

      System.exit(0);

      }

      public String inputData()//從終端接收數(shù)據(jù)的方法,返回字符串

      throws IOException,NumberFormatException

      {

      System.out.print(“請依次輸入 :號碼 姓名 地址 生日n” +

      “每項數(shù)據(jù)請用空格隔開:”);

      String all = “";

      try{

      BufferedReader in =

      //從終

      new BufferedReader(//端接

      new InputStreamReader(System.in));

      //收數(shù)

      String inputLine = in.readLine();

      //據(jù)

      StringTokenizer str =

      new StringTokenizer(inputLine,” “);//接收的數(shù)據(jù)用空格隔開,這個類用來提取每個字符串

      long num = Integer.valueOf(str.nextToken()).longValue();//號碼

      String name =(String)str.nextToken();

      //姓名

      String add =(String)str.nextToken();

      // 地址

      String birth =(String)str.nextToken();//出生年月

      all = String.valueOf(num)+” , “+

      name +” , “+

      add +” , “+

      String.valueOf(birth);//把所有的數(shù)據(jù)用” , “隔開然后在連起來放進字符串a(chǎn)ll

      }catch(IOException e){}

      catch(NumberFormatException e){}

      return all;//返回字符串a(chǎn)ll

      }

      public void addData(String str)//增加號碼的方法

      throws IOException

      {

      String s1 =”“,s2=”“ ,s3= ”“;

      File file = new File(”c:data.txt“);

      if(file.exists())//如果文件data.txt存在 {

      try{

      BufferedReader in =

      new BufferedReader(new FileReader(file));

      while((s1=in.readLine())!=null)

      s2+=s1+”n“;//把文件中的每行數(shù)據(jù)全部放進一個字符串s2

      s2+=str+”n“;

      //再把s2于形參str相連放進s2

      BufferedReader in2 =

      //把字符

      new BufferedReader(//串s2也

      new StringReader(s2));

      //就是原

      PrintWriter out =

      //文件+

      new PrintWriter(//形參str(新輸入的一行數(shù)據(jù))

      new BufferedWriter(//重新寫進data.txt

      new FileWriter(file)));

      //覆蓋原來的數(shù)據(jù)

      while((s3=in2.readLine())!= null)

      {

      out.println(s3);

      }

      out.close();

      //System.out.println(”write data true.“);

      }catch(IOException e){}

      }else{

      System.err.println(”File “data” Missing!“);

      }

      }

      public void clearData()//清除data.txt的所有數(shù)據(jù)的方法

      throws IOException

      {

      File file = new File(”c:data.txt“);

      if(file.exists())//如果文件在{

      try{

      PrintWriter out =

      new PrintWriter(new BufferedWriter(new FileWriter(file)));

      out.print(”“);//在文件data.txt里寫進一個空字符,所以清除了原來的內(nèi)容

      out.close();//關(guān)閉文件

      System.out.println(”clear data true!“);

      }catch(IOException e){}

      }else{

      System.err.println(”File “data” Missing!“);

      }

      }

      public void deleteData(long deleteNumber)//刪除某條號碼數(shù)據(jù)

      throws IOException,FileNotFoundException

      {

      isDelete = true;

      try{

      DataMap mp = new DataMap();//生成一個自己編寫的容器

      long j=0;

      String s1=”“,s2=”“,s3=”“;

      BufferedReader in =

      new BufferedReader(new FileReader(”c:data.txt“));

      while((s1=in.readLine())!=null)

      {

      j=numberTokenizer(s1);

      mp.put(j,s1);

      }

      try{

      if(mp.containsKey(String.valueOf(deleteNumber).toString()))

      {

      mp.remove(deleteNumber);

      }else

      throw new NumberNotFoundException();

      Collection c = mp.values();

      Iterator iter = c.iterator();

      while(iter.hasNext())

      {

      s1 =(String)iter.next();

      s3 +=s1+”n“;

      }

      BufferedReader in2 =

      new BufferedReader(new StringReader(s3));

      PrintWriter out =

      new PrintWriter(new BufferedWriter(new FileWriter(”c:data.txt“)));

      //System.out.println(”delete No“+deleteNumber);

      while((s1 = in2.readLine())!=null)

      {

      out.println(s1);

      } out.close();}catch(NumberNotFoundException e){

      isDelete = false;

      System.out.println(deleteNumber+” no found :(“);

      }

      }catch(IOException e){}

      }

      public long numberTokenizer(String s)

      throws IOException

      {

      StringTokenizer st =

      new StringTokenizer(s,” “);

      return Integer.valueOf((st.nextToken())).longValue();

      }

      public void findData(long find)//查找數(shù)據(jù)

      throws IOException,NumberNotFoundException

      {

      isFind = true;

      String s = ”“,findString =”“;long i;DataMap dm = new DataMap();BufferedReader in =

      new BufferedReader(new FileReader(”c:data.txt“));

      while((s=in.readLine())!=null)

      {

      i=numberTokenizer(s);

      dm.put(i,s);

      }

      //in.close();

      try{

      if(dm.containsKey(String.valueOf(find).toString()))

      {

      findString = dm.get(find);

      System.out.println(”學(xué)號“+find+”學(xué)生的資料是:“);

      System.out.println(findString);

      }else

      throw new NumberNotFoundException();

      }catch(NumberNotFoundException e){

      System.out.println(find+” no found :(“);

      isFind = false;

      }

      }

      public static void print()//讀取文本文件把數(shù)據(jù)打印到終端的方法

      throws IOException

      {

      try{

      BufferedReader in =

      new BufferedReader(new FileReader(”c:data.txt“));

      String read = ”“;

      while((read = in.readLine())!=null)

      System.out.println(read);

      }catch(IOException e){}

      }

      public static void timeOut(double sec)//停頓短暫時間的一個方法完全可以不要這個功能

      {

      double seconds = sec;

      long t = System.currentTimeMillis()+(int)(seconds*1000);

      while((System.currentTimeMillis())

      ;

      }

      public void numSort()//按學(xué)號排序

      throws IOException

      {

      long i = 0;

      String s = ”“;

      try{

      DataArrayList dal = new DataArrayList();

      BufferedReader in =

      new BufferedReader(new FileReader(”c:data.txt“));

      while((s=in.readLine())!=null)

      {

      i=numberTokenizer(s);

      dal.add(i);

      }

      Collections.sort(dal);

      DataMap dm = new DataMap();

      BufferedReader in2 =

      new BufferedReader(new FileReader(”c:data.txt“));

      while((s=in2.readLine())!=null)

      {

      i=numberTokenizer(s);

      dm.put(i,s);

      }

      PrintWriter out =

      new PrintWriter(new BufferedWriter(new FileWriter(”c:data.txt“)));

      Iterator it = dal.iterator();

      long temp = 0;

      String tempStr = ”“;

      while(it.hasNext())

      {

      temp = Integer.valueOf((String)it.next()).longValue();

      tempStr = dm.get(temp);

      out.println(tempStr);

      }

      out.close();

      }catch(IOException e){}

      }

      public void rewrite()

      throws IOException,NumberNotFoundException

      {

      try{

      System.out.print(”請輸入你要修改的學(xué)生號碼:“);

      BufferedReader in =

      new BufferedReader(new InputStreamReader(System.in));

      String inputLine = in.readLine();

      long num = Integer.valueOf(inputLine).longValue();

      findData(num);

      if(isFind)

      { deleteData(num);System.out.print(”請重新輸入該號碼:“);String str = inputData();

      addData(str);

      System.out.println(”rewrite true!“);

      }

      }catch(IOException e){}

      catch(NumberNotFoundException e){}

      }

      public int count()

      throws IOException

      {

      DataArrayList dal = new DataArrayList();

      try{

      String s = ”“;

      long i =0;

      BufferedReader in =

      new BufferedReader(new FileReader(”c:data.txt“));

      while((s=in.readLine())!=null)

      {

      i=numberTokenizer(s);

      dal.add(i);

      }

      }catch(IOException e){}

      return dal.size();

      } } /* *

      * @author RangWei * TODO 這是個寫的一個容器,繼承公共類HashMap * 大概的功能就相當(dāng)一個數(shù)組

      *

      */ class DataMap extends HashMap//一個存儲數(shù)據(jù)的Map

      {

      public void put(long i,String str)//把學(xué)號和數(shù)據(jù)放進這個Map

      {

      //以后一個學(xué)號(key)對應(yīng)的是一個人的數(shù)據(jù)(value)

      put(String.valueOf(i).toString(),str);

      }

      public void remove(long i)//接收學(xué)號,然后刪除學(xué)號(key)和它對應(yīng)的數(shù)據(jù)(value)

      {

      remove(String.valueOf(i).toString().toString());

      }

      public String get(long i)//接收一個學(xué)號,然后返回這個key對應(yīng)的value

      {

      String s = String.valueOf(i).toString();

      if(!containsKey(s))

      {

      System.err.println(”Not found Key: "+s);

      }

      return(String)get(s);

      } } /*

      *

      * @author RangWei * * TODO 這個類繼承ArrayList * 用來按數(shù)字排序,在用號碼排序時要用到它

      *

      */ class DataArrayList extends ArrayList {

      public void add(long num)

      {

      String numToString = String.valueOf(num).toString();

      add(numToString);

      } } /* *

      * @author RangWei * * TODO 增加的一個Exception,主要是在文件里沒有要找

      * 的號碼就拋出

      *

      */ class NumberNotFoundException extends Exception {

      public NumberNotFoundException()

      {} }

      第二篇:通訊錄管理系統(tǒng)-數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告

      信息科學(xué)與技術(shù)學(xué)院 程序設(shè)計基礎(chǔ)課程設(shè)計報告

      題目名稱: 通信管理系統(tǒng) 學(xué)生姓名: 學(xué) 號: 專業(yè)班級: 指導(dǎo)教師:

      2016年 12月 31日

      目錄

      1.課程設(shè)計題目與要求........................1

      1.1設(shè)計題目..........................................1 1.2設(shè)計要求..........................................1

      2.總體設(shè)計..................................2

      2.1 總體功能框架......................................2 2.2 數(shù)據(jù)結(jié)構(gòu)概要設(shè)計..................................2

      3.詳細(xì)設(shè)計..................................3

      3.1 數(shù)據(jù)結(jié)構(gòu)詳細(xì)設(shè)計..................................3 3.2 系統(tǒng)功能詳細(xì)設(shè)計.................................10

      4.運行結(jié)果.................................16 5.課程設(shè)計總結(jié).............................20

      5.1 編程中的問題及解決方法...........................20 5.2 小結(jié).............................................20 5.3 心得體會.........................................20 5.4 程序設(shè)計方法.....................................20

      參考文獻...................................21

      1.課程設(shè)計題目與要求

      1.1設(shè)計題目 通信管理系統(tǒng) 1.2設(shè)計要求

      用C/C++設(shè)計出模擬手機通信錄管理系統(tǒng),實現(xiàn)對手機中的通信錄進行管理。

      (一)功能要求

      (1)查看功能:選擇此功能時,列出下列三類選擇。

      A 辦公類 B 個人類 C 商務(wù)類,當(dāng)選中某類時,顯示出此類所有數(shù)據(jù)中的姓名和電話號碼)

      (2)增加功能:能錄入新數(shù)據(jù)(一個結(jié)點包括:姓名、電話號碼、分類(可選項有:A 辦公類 B 個人類 C 商務(wù)類)、電子郵件)。例如

      楊春 *** 商務(wù)類 Chuny@126.C++om 當(dāng)錄入了重復(fù)的姓名和電話號碼時,則提示數(shù)據(jù)錄入重復(fù)并取消錄入;當(dāng)通信錄中超過15條信息時,存儲空間已滿,不能再錄入新數(shù)據(jù);錄入的新數(shù)據(jù)能按遞增的順序自動進行條目編號。

      (3)拔號功能:能顯示通信錄中所有人姓名,當(dāng)選中某個姓名時,屏幕上模擬打字機的效果依次顯示此人電話號碼中的各個數(shù)字,并伴隨相應(yīng)的拔號聲音。

      (4)修改功能:選中某個人的姓名時,可對此人的相應(yīng)數(shù)據(jù)進行修改(5)刪除功能:選中某個人的姓名時,可對此人的相應(yīng)數(shù)據(jù)進行刪除,并自動調(diào)整后續(xù)條目的編號。

      (二)其它要求:

      (1)只能使用C/C++語言,源程序要有適當(dāng)?shù)淖⑨專钩绦蛉菀组喿x(2)至少采用文本菜單界面(如果能采用圖形菜單界面更好)(3)建議使用結(jié)構(gòu)和鏈表等數(shù)據(jù)結(jié)構(gòu)

      (4)學(xué)生可自動增加新功能模塊(視情況可另外加分)2.總體設(shè)計

      2.1 總體功能框架

      新增聯(lián)系人查看通信錄撥號

      功能模塊

      修改信息刪除聯(lián)系人導(dǎo)入通信錄導(dǎo)出通信錄

      退出系統(tǒng)

      圖 2-1 總體功能框架圖

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

      本通信管理系統(tǒng)采用的數(shù)據(jù)結(jié)構(gòu)為線性表中的鏈表。鏈表的結(jié)構(gòu)體成員分為數(shù)據(jù)域和指針域。數(shù)據(jù)域為聯(lián)系人(contacts)結(jié)構(gòu)體,成員有聯(lián)系人姓名(name)、聯(lián)系人電話號碼(teleNum)、聯(lián)系人類別(classes)、電子郵件(email)四個。

      圖 2-2 數(shù)據(jù)結(jié)構(gòu)組成 3.詳細(xì)設(shè)計

      3.1 數(shù)據(jù)結(jié)構(gòu)詳細(xì)設(shè)計

      結(jié)構(gòu)體名稱:contact,LNode,*LinkList typedef struct {

      string name;//姓名

      string teleNum;//電話號碼

      int classes;//分類

      string email;//電子郵件

      }contacts;

      typedef struct LNode { contacts data;//數(shù)據(jù)域

      struct LNode* next;//指針域 }LNode,*LinkList;

      具體操作:

      InitList(&L)操作結(jié)果:初始化鏈表 具體代碼:

      int InitList(LinkList &L){ L = new LNode;L->next = NULL;return 0;}

      CreateList_H(&L,n)操作結(jié)果:前插法創(chuàng)建一個鏈表

      具體代碼:

      void CreateList_H(LinkList &L,int n){ LinkList p;for(int i = 0;i < n;i++)//根據(jù)聯(lián)系人個數(shù)創(chuàng)建鏈表 { p = new LNode;cout <<“請輸入聯(lián)系人的姓名:”;

      cin >> p->data.name;cout <<“請輸入聯(lián)系人的電話號碼:”;cin >> p->data.teleNum;cout <<“請輸入聯(lián)系人的分類(分類如下,輸入相應(yīng)序號即可)”<< endl;cout <<“1 辦公類 2 個人類 3 商務(wù)類”<< endl;cin >> p->data.classes;cout <<“請輸入聯(lián)系人的電子郵件:”;cin >> p->data.email;p->next = L->next;L->next=p;} }

      CheckAll(L,c)

      操作結(jié)果:顯示類別為c的聯(lián)系人姓名和電話號碼

      具體代碼:

      void CheckAll(LinkList L,int c)//c是聯(lián)系人類別 {

      LinkList p;

      p = L->next;

      cout <<“姓名tt”<<“電話號碼”<< endl;//表頭

      while(p)//當(dāng)鏈表沒到尾部時

      {

      if(p->data.classes==c)//若符合類別則輸出聯(lián)系人姓名和電話號碼

      {

      cout << p->data.name <<“tt”<< p->data.teleNum << endl;

      }

      p=p->next;

      } } CheckAll(L)

      操作結(jié)果:顯示已有聯(lián)系人的姓名 具體代碼:

      void CheckAll(LinkList L){ LinkList p;p=L->next;while(p)

      { cout << p->data.name << endl;p=p->next;} } Search(L, name)

      操作結(jié)果:找到名為name的聯(lián)系人位置

      具體代碼:

      LinkList Search(LinkList L,string name){ LinkList p;p=L->next;while(p&&p->data.name!=name)//當(dāng)鏈表沒到尾部且沒找到聯(lián)系人時 { p=p->next;} return p;}

      IfExist(L, c)操作結(jié)果:判斷是否存在聯(lián)系人contacts 具體代碼:

      char IfExist(LinkList L,contacts c){ LinkList p;p=L->next;while(p&&p->data.name!=c.name)//根據(jù)姓名查找是否存在該聯(lián)系人

      { p=p->next;} if(!p)//若到達鏈表尾部,則不存在 return 'n';if(p->data.teleNum==c.teleNum)//若找到聯(lián)系人姓名 if(p->data.classes==c.classes)//依次判斷電話號碼、類別、電子郵件是否相同

      if(p->data.email==c.email)return 'y';return 'n';} Length(L)

      操作結(jié)果:獲取鏈表的長度 具體代碼:

      int Length(LinkList L){ int i=0;LinkList p=L->next;while(p){ ++i;p=p->next;} return i;} Add(&L, c)操作結(jié)果:把contacts添加到鏈表中 具體代碼:

      int Add(LinkList &L,contacts c){ LinkList p,s;if(Length(L)>=MAXSIZE)//判斷鏈表長度是否達到最大值

      { cout <<“存儲空間已滿,無法新增聯(lián)系人!”<< endl;return 0;} if(IfExist(L,c)=='y')//判斷輸入的聯(lián)系人是否已經(jīng)存在 { cout <<“對不起,您輸入的聯(lián)系人已存在!”<< endl;return 0;} //若通訊錄中不存在該聯(lián)系人,則增加到通信錄 p=L;s=new LNode;s->data=c;s->next=p->next;p->next=s;return 0;} Dail(L,name)

      操作結(jié)果:撥打姓名為name的聯(lián)系人的電話 具體代碼:

      void Dail(LinkList L,string name){ LinkList p,s;p=L->next;s=Search(L,name);//根據(jù)姓名查找聯(lián)系人所在

      //模擬打字機效果,輸出聯(lián)系人電話號碼 string tele=s->data.teleNum;for(int i=0;i

      cout << endl;//播放聲音

      PlaySound(“E:670.wav”,NULL,SND_FILENAME|SND_ASYNC);}

      ChangeInfo(&L,name)操作結(jié)果:修改姓名為name的聯(lián)系人的信息

      具體代碼:

      void ChangeInfo(LinkList &L,string name){ LinkList p;p=Search(L,name);//找到聯(lián)系人的位置所在 cout <<“ 請輸入要修改的信息(輸入對應(yīng)序號即可):”<< endl;cout <<“1 姓名”<< endl;cout <<“2 電話號碼”<< endl;cout <<“3 分類”<< endl;cout <<“4 電子郵件”<< endl;

      //根據(jù)選擇修改聯(lián)系人信息 int elec;cin >> elec;switch(elec){ case 1: { cout <<“姓名改為:”<< endl;string newName;cin >> newName;p->data.name=newName;break;} case 2: {

      cout <<“電話號碼改為:”<> newTele;p->data.teleNum=newTele;break;} case 3: {

      cout <<“分類改為(分類如下,輸入相應(yīng)序號即可)”;cout <<“1 辦公類 2 個人類 3 商務(wù)類”<< endl;int newCalsses;cin >> newCalsses;p->data.classes=newCalsses;break;} case 4: {

      cout <<“電子郵件改為:”<< endl;string newEmail;cin >> newEmail;p->data.email=newEmail;break;} } }

      Delete(&L,name)操作結(jié)果:刪除姓名為name的聯(lián)系人 具體代碼:

      void Delete(LinkList &L,string name){ LinkList p=L,s;//找到需刪除聯(lián)系人的前一個位置

      while(p->next&&p->next->data.name!=name){ p=p->next;} s=p->next;p->next=s->next;delete s;//刪除聯(lián)系人 } Read(L)操作結(jié)果:從文件中讀入信息到鏈表

      具體代碼:

      void Read(LinkList L){ LinkList p;

      //打開文件導(dǎo)入通信錄

      ifstream fin;fin.open(“通信錄.txt”,ios::in);string s1,s2,s3,s4;fin >> s1 >> s2 >> s3 >> s4;

      while(!fin.eof())//當(dāng)沒有到文件尾時

      {

      string s5;

      contacts c;

      fin >> c.name >> c.teleNum >> s5 >> c.email;

      if(s5.compare(“辦公類”)==0)

      c.classes=1;

      if(s5.compare(“個人類”)==0)

      c.classes=2;

      if(s5.compare(“商務(wù)類”)==0)

      c.classes=3;

      Add(L,c);//將聯(lián)系人c增加到鏈表中

      } fin.close();}

      操作結(jié)果:將所有聯(lián)系人導(dǎo)出到文件里保存 具體代碼:

      void Write(LinkList L)Write(L){

      endl;

      } LinkList p=L->next;int l=Length(L);//打開文件寫入通信錄

      ofstream fout(“通信錄.txt”,ios::out|ios::trunc);fout <<“姓名t”<<“電話號碼t”<<“分類t”<<“電子郵件 ”<< for(int i=0;idata.name <<“t”<< p->data.teleNum <<“t”;switch(p->data.classes){

      case 1:

      {

      fout <<“辦公類”;

      break;

      }

      case 2:

      {

      fout <<“個人類”;

      break;

      }

      case 3:

      {

      fout <<“商務(wù)類”;

      break;

      } } fout <<“t”<< p->data.email;if(i<(l-1))

      fout << endl;p=p->next;} fout.close();3.2 系統(tǒng)功能詳細(xì)設(shè)計

      3.2.1 文件數(shù)據(jù)讀出(1)函數(shù)原型: void CreateList_H(LinkList &L,int n)(2)函數(shù)功能: 創(chuàng)建鏈表,給鏈表增加n個聯(lián)系人

      (3)函數(shù)形參: CreateList_H(&L,n),其中L是鏈表指針,n是增加的聯(lián)系人的數(shù)目

      (4)函數(shù)算法流程:如圖3-1所示

      3-1算法流程圖1 3.2.2 文件數(shù)據(jù)讀出

      (1)函數(shù)原型: int Add(LinkList &L,contacts c)(2)函數(shù)功能: 單個增加聯(lián)系人

      (3)函數(shù)形參: Add(&L, c),其中L是鏈表指針,c是具體的聯(lián)系人(4)函數(shù)算法流程:如圖3-2所示

      3-2算法流程圖2 3.2.3 文件數(shù)據(jù)讀出

      (1)函數(shù)原型:void Dail(LinkList L,string name)(2)函數(shù)功能: 撥打姓名為name的聯(lián)系人的電話,在撥打時依次顯示此人電話號碼中的各個數(shù)字,并伴隨相應(yīng)的拔號聲音

      (3)函數(shù)形參: Dail(L, name),其中L為鏈表指針,name為撥號的聯(lián)系人的姓名

      (4)函數(shù)算法流程:如圖3-3所示

      3-3 算法流程圖3 3.2.4 文件數(shù)據(jù)讀出

      (1)函數(shù)原型: void ChangeInfo(LinkList &L,string name)(2)函數(shù)功能: 修改姓名為name的聯(lián)系人的信息

      (3)函數(shù)形參: ChangeInfo(&L,name),其中L為鏈表指針,name為將要修改信息的聯(lián)系人的姓名

      (4)函數(shù)算法流程:如圖3-4所示

      3-4 算法流程圖4 3.2.5 文件數(shù)據(jù)讀出

      (1)函數(shù)原型: void Delete(LinkList &L,string name)(2)函數(shù)功能: 從鏈表中刪除姓名為name的聯(lián)系人

      (3)函數(shù)形參: Delete(&L,name),其中L為鏈表指針,name為將要刪除的聯(lián)系人的姓名

      (4)函數(shù)算3-5所示

      法流程:如圖

      3-5 算法流程圖5 3.2.6 文件數(shù)據(jù)讀出

      (1)函數(shù)原型: void Read(LinkList L)(2)函數(shù)功能: 將文件中的聯(lián)系人信息導(dǎo)入通信管理系統(tǒng)中(3)函數(shù)形參:Read(L),其中L為鏈表指針(4)函數(shù)算法流程:如圖3-6所示

      3-6 算法流程圖6 3.2.7 文件數(shù)據(jù)讀出

      (1)函數(shù)原型: void Write(LinkList L)(2)函數(shù)功能: 將通信管理系統(tǒng)中所有聯(lián)系人的各項信息有序的導(dǎo)出,保存在文件里

      (3)函數(shù)形參: Write(L),其中L為鏈表指針(4)函數(shù)算法流程:如圖3-7所示

      3-7 算法流程圖7 4.運行結(jié)果

      (1)打開系統(tǒng),顯示主菜單界面,如圖4-1所示:

      圖4-1 主菜單界面

      (2)輸入數(shù)字1,進行新增聯(lián)系人的操作。接著輸入1選擇批量增加,輸入數(shù)字2選擇單個增加。批量增加如圖4-2所示,單個增加如圖4-3所示:

      圖4-2 批量增加聯(lián)系人

      圖4-3 單個增加聯(lián)系人

      (3)輸入數(shù)字2,進行查看通信錄的操作,然后選擇聯(lián)系人的類別,查看此類中的所有聯(lián)系人姓名及電話號碼,如圖4-4所示:

      圖4-4 按類別查看聯(lián)系人

      (4)輸入數(shù)字3,進行撥號操作,如圖4-5所示:

      圖4-5 撥號

      (5)輸入數(shù)字4,進行修改信息操作,然后輸入將要修改信息的聯(lián)系人姓名,再選擇學(xué)要修改的信息項,如圖4-6所示:

      圖4-6 修改聯(lián)系人信息

      (6)輸入數(shù)字5,然后輸入將要刪除的聯(lián)系人姓名,進行刪除聯(lián)系人的操作,如圖4-7所示:

      圖4-7 刪除聯(lián)系人

      (7)輸入數(shù)字6,進行導(dǎo)入通信錄操作,將文件“通訊錄.txt”中的聯(lián)系人信息導(dǎo)入通訊管理系統(tǒng),如圖4-8所示:

      圖4-8 導(dǎo)入通信錄

      (8)輸入數(shù)字7,進行導(dǎo)出通信錄操作,如圖4-9所示;導(dǎo)出的通信錄如圖4-10所示:

      圖4-9 導(dǎo)出通信錄

      圖4-10 已導(dǎo)出通信錄列表

      (9)輸入數(shù)字0,退出通信管理系統(tǒng),如圖4-11所示:

      圖4-11 退出通信管理系統(tǒng) 5.課程設(shè)計總結(jié)

      5.1 編程中的問題及解決方法

      在本次程序設(shè)計過程中,遇到的主要問題是模擬打字機效果輸出聯(lián)系人電話號碼以及從導(dǎo)入通信錄。

      前者是由于對字符串的理解不到位,后來查閱了相關(guān)資料后意識到可以將字符串看作字符數(shù)組,從而獲取單個的字符,然后在每個字符的輸出后利用系統(tǒng)的休眠函數(shù)Sleep設(shè)置停頓,從而達到想要的效果。

      后者是因為在導(dǎo)出通信錄的時候多輸出了一個回車換行符,導(dǎo)致在進行文件讀入時多讀入一個回車換行符,以至于總是多一個聯(lián)系人。然后便在導(dǎo)出文件時,不再在末尾輸出回車換行符,從而解決了該問題。5.2 小結(jié)

      總的來說這次課程設(shè)計完成總體較好。首先在已經(jīng)學(xué)習(xí)了的數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)上,我很快的想出了具體的設(shè)計思路,接著利用課余時間寫出了大體的框架。再寫出大題框架后隨即進行了細(xì)節(jié)的完善,最后大概用了兩天時間進行各項功能的調(diào)試。在代碼的編寫過程中并未產(chǎn)生太大瓶頸,遇到問題在查閱相關(guān)資料以及仔細(xì)調(diào)試后也得到了很好地解決,這是一次能好的體驗,也是對自己能力的一次考驗。5.3 心得體會

      經(jīng)過這次課程設(shè)計,我對數(shù)據(jù)結(jié)構(gòu)這門課程有了更深刻的了解,不再僅僅是書本上抽象的代碼,還對如和將數(shù)據(jù)結(jié)構(gòu)應(yīng)用到具體的實例中有了更好的認(rèn)識。編程不僅需要對理論知識的理解,更重要的是它實際的應(yīng)用,只有具體地進行過程序的設(shè)計,才能有更深刻的記憶和領(lǐng)會。同時通過查閱資料和讀別人的代碼,我也學(xué)會到一些新的內(nèi)容和一些巧妙的思想。5.4 程序設(shè)計方法

      本程序設(shè)計主要采用的方法是利用結(jié)構(gòu)體進行編程,而采用的數(shù)據(jù)結(jié)構(gòu)是線性表中的鏈表結(jié)構(gòu)。參考文獻

      [1] 嚴(yán)蔚敏,吳偉民.?dāng)?shù)據(jù)結(jié)構(gòu)(c語言版)[M].2.北京:清華大學(xué)出版社,2016 [2] 陳維新,林小茶.c++面向?qū)ο笳n程設(shè)計教程[M].清華大學(xué)出版社

      第三篇:個人通訊錄管理系統(tǒng),java源代碼

      package cn.pab.manager;

      import java.util.List;import java.util.Scanner;

      import cn.pab.dao.PersonDao;import cn.pab.dao.TypeDao;import cn.pab.dao.UserDao;import cn.pab.dao.impl.PersonDaoImpl;import cn.pab.dao.impl.TypeDaoImpl;import cn.pab.dao.impl.UserDaoImpl;import cn.pab.entity.Person;import cn.pab.entity.Type;/** * 業(yè)務(wù)類

      */ public class PABmanager { /**

      * 系統(tǒng)啟動

      */ public static void main(String[] args){

      Scanner input = new Scanner(System.in);

      UserDao userDao = new UserDaoImpl();

      TypeDao typeDao = new TypeDaoImpl();

      PersonDao personDao = new PersonDaoImpl();

      System.out.println(“***********歡迎使用個人通訊錄管理系統(tǒng)**********”);

      System.out.print(“n請選擇操作(1.系統(tǒng)登錄

      2.密碼修改

      3.取消):”);

      String in = input.next();

      if(“1”.equals(in)){

      boolean islogin = userDao.login();

      if(islogin){

      System.out.println(“***********成功登錄個人通訊錄管理系統(tǒng)**********”);

      //System.out.print(“n請選擇操作(1.類別管理

      2.聯(lián)系人管理

      3.退出系統(tǒng)):”);

      }else{

      System.out.println(“用戶名或密碼錯誤,不能登錄!”);

      System.exit(-1);

      }

      }else if(“2”.equals(in)){

      boolean modiFlag = userDao.modify();

      if(modiFlag){

      System.out.println(“密碼修改成功!”);}else{

      System.out.println(“密碼修改失?。 ?;} System.exit(-1);}else{ System.out.println(“您已經(jīng)退出系統(tǒng)!”);System.exit(-1);}

      while(true){

      System.out.print(“n請選擇操作(1.類別管理

      2.聯(lián)系人管理

      3.退出系統(tǒng)):”);String in2 = input.next();if(“1”.equals(in2)){ while(true){

      System.out.print(“n請繼續(xù)選擇操作(1.新建類別

      2.查詢類別

      3.刪除類別

      4.返回):”);

      String num = input.next();

      if(“1”.equals(num)){

      System.out.print(“請輸入類別的名稱:”);String lbmc = input.next();

      System.out.print(“請輸入類別的說明:”);String lbsm = input.next();System.out.print(“請輸入類別的備注:”);String lbbz = input.next();

      Type type = new Type(lbmc,lbsm,lbbz);

      typeDao.createType(type);}else if(“2”.equals(num)){ List types = typeDao.queryType();

      System.out.println(“tt類別信息列表”);

      System.out.println(“類別名稱tt類別說明tt類別備注”);

      for(int i = 0;i < types.size();i++){

      Type type =types.get(i);

      System.out.print(type.getLbmc()+“t”);

      System.out.print(type.getLbsm()+ “tt”);

      System.out.println(type.getLbbz());

      }

      }else if(“3”.equals(num)){

      System.out.print(“請輸入類別的名稱:”);

      String lbmc = input.next();

      Type type = new Type(lbmc,null,null);

      typeDao.deleteType(type);}else if(“4”.equals(num)){ break;}else{

      System.out.println(“您輸入不合法,請重新選擇!”);

      }

      } }else if(“2”.equals(in2)){

      while(true){

      System.out.print(“n請繼續(xù)選擇操作(1.新建聯(lián)系人

      2.查詢聯(lián)系人

      3.更新聯(lián)系人

      4.刪除聯(lián)系人

      5.返回):”);

      String num = input.next();

      if(“1”.equals(num)){

      System.out.print(“請輸入聯(lián)系人的類別名稱:”);String lb = input.next();

      System.out.print(“請輸入聯(lián)系人的姓名:”);String xm = input.next();

      System.out.print(“請輸入聯(lián)系人的電話:”);String dh = input.next();

      System.out.print(“請輸入聯(lián)系人的手機號:”);String sjh = input.next();

      System.out.print(“請輸入聯(lián)系人的工作單位:”);String gzdw = input.next();

      System.out.print(“請輸入聯(lián)系人的住址:”);

      String zz = input.next();

      System.out.print(“請輸入聯(lián)系人的郵政編碼:”);

      String yzbm = input.next();

      Person person = new Person(lb,xm,dh,sjh,gzdw,zz,yzbm);

      personDao.createPerson(person);

      }else if(“2”.equals(num)){

      System.out.print(“請輸入聯(lián)系人的姓名:”);

      String name = input.next();

      Person p = personDao.queryPerson(name);

      System.out.println(“tt查詢到的聯(lián)系人信息”);

      System.out.println(“類別t姓名t電話tt手機號tt工作單位t住址t郵政編碼”);

      System.out.print(p.getLb()+ “t”);

      System.out.print(p.getXm()+ “t”);

      System.out.print(p.getDh()+ “t”);

      System.out.print(p.getSjh()+ “t”);

      System.out.print(p.getGzdw()+ “t”);

      System.out.print(p.getZz()+ “t”);

      System.out.println(p.getYzbm());

      }

      } }

      }else if(“3”.equals(num)){

      System.out.print(“請輸入需更新的聯(lián)系人編號:”);

      int id = input.nextInt();

      System.out.print(“請輸入需更新的聯(lián)系人信息選項:”);

      String item = input.next();

      System.out.print(“請輸入聯(lián)系人信息選項的值:”);

      String val = input.next();

      personDao.updatePerson(id,item, val);

      }else if(“4”.equals(num)){

      System.out.print(“請輸入要刪除聯(lián)系人的姓名:”);

      String name = input.next();

      personDao.deletePerson(name);

      }else if(“5”.equals(num)){

      break;

      }else{

      System.out.println(“您輸入不合法,請重新選擇!”);

      } } }else if(“3”.equals(in2)){ System.out.println(“您已經(jīng)退出系統(tǒng)!”);System.exit(-1);}else{ System.out.println(“您輸入不合法,請重新選擇!”);}

      第四篇:圖書管理系統(tǒng) 數(shù)據(jù)結(jié)構(gòu) 課程設(shè)計

      《數(shù)據(jù)結(jié)構(gòu)》

      課程設(shè)計報告書

      一.課程設(shè)計題目

      圖書借閱管理系統(tǒng)

      二.課程設(shè)計內(nèi)容

      實現(xiàn)圖書管理信息系統(tǒng)的設(shè)計

      (一)管理員功能:

      ①登錄:輸入管理員密碼,若密碼錯誤則不得執(zhí)行管理員操作。

      ②添加新書:增加新的圖書資料,同時需檢查新書的圖書編號是否已存在于原圖書資料中,若已存在則應(yīng)取消添加或提示重新輸入。

      ③修改圖書:通過編號查詢該圖書資料,若該編號存在,則顯示已有信息,允許修改,否則提示 無該圖書信息。

      ④刪除圖書:通過編號查詢該圖書資料,若該編號存在,則顯示已有信息,允許刪除,否則提示無該圖書信息。刪除對象包括該圖書資料以及“圖書狀態(tài)”和“借閱人”中與此書相關(guān)的所有記錄。

      ⑤查找圖書:

      A.按書號查找:通過編號查詢該圖書資料,若該編號存在,則顯示圖書信息,否則提示無該圖書信息。

      B.按書名查找:通過書名查詢該圖書資料,若該編號存在,則顯示圖書信息,否則提示無該圖書信息。

      C.按作者查找:通過作者查詢該圖書資料,若該編號存在,則顯示圖書信息,否則提示無該圖書信息。

      ⑥查看全部圖書:顯示所有圖書資料,包括書號、書名、作者、狀態(tài)和借閱人等信息。

      ⑦修改讀者:通過姓名查詢該讀者信息,若該姓名存在,則顯示已有信息,允許修改,否則提示無該讀者信息。

      ⑧刪除讀者:通過姓名查詢該讀者信息,若該姓名存在,則顯示已有信息,允許刪除,否則提示無該讀者信息。刪除對象包括該讀者姓名、班級、電話以及“圖書狀態(tài)”和“借閱人”中與此人相關(guān)的所有記錄。

      ⑨查看所有讀者:顯示所有讀者資料,包括姓名、班級、電話等信息。

      (二)讀者功能:

      ①登錄:輸入讀者姓名,若未經(jīng)注冊則不得進入讀者服務(wù)界面。②注冊:新用戶經(jīng)注冊方可登錄系統(tǒng)并使用讀者服務(wù)功能。③借書:

      A.輸入所需圖書編號,判斷該編號是否存在,若不存在則提示重新輸入。

      B.若所輸入圖書編號存在,則判斷該書籍是否已被借出,若已借則不允許執(zhí)行借書操作。

      C.若所輸入圖書未借,則提示輸入讀者姓名,判斷所輸入讀者姓名是否存在,若不存在則提示重新輸入。D.若讀者姓名存在,則允許執(zhí)行借書操作。

      E.借書處理包括在“圖書狀態(tài)”中加上“已借”標(biāo)記。④還書:

      A.輸入所借書編號,判斷該編號是否存在,若不存在則提示重新輸入。B.判斷該書是否已借出,若未借則不允許執(zhí)行還書操作。C.借書處理包括在“圖書狀態(tài)”中加上“未借”標(biāo)記。⑤查詢圖書:

      A.按書號查找:通過編號查詢該圖書資料,若該編號存在,則顯示圖書信息,否則提示無該圖書信息。

      B.按書名查找:通過書名查詢該圖書資料,若該編號存在,則顯示圖書信息,否則提示無該圖書信息。

      C.按作者查找:通過作者查詢該圖書資料,若該編號存在,則顯示圖書信息,否則提示無該圖書信息。

      ⑥查看借閱情況:輸入讀者姓名,若該姓名不存在則提示重新輸入,若該姓名存在則顯示該讀者借閱信息。

      三.算法設(shè)計

      1.流程圖(部分示例)

      ①管理員登錄

      ②讀者登錄

      ③讀者借閱圖書

      ④管理員或讀者按書名查找圖書

      2.代碼實現(xiàn)

      #include #include

      #include #include //文件流 #include #define BookFile “book.txt”

      //將字符串BookFile替換原文件中的宏名稱book #define ReaderFile “reader.txt” using namespace std;//**********讀者結(jié)構(gòu)體,用于存放讀者基本信息********** class Reader {

      private:

      char rname[10];

      char rclass[10];

      char rtel[10];public:

      Reader()//構(gòu)造函數(shù),實現(xiàn)數(shù)據(jù)初始化

      {strcpy(rname,“");strcpy(rclass,”“);strcpy(rtel,”“);} //初始化

      void set_rname(char *rn)//設(shè)置讀者姓名

      {strcpy(rname,rn);} //將rn的字符復(fù)制給rname

      char * get_rname()//獲得讀者姓名

      {return rname;} //返回rname的值

      void set_rclass(char *rc)//設(shè)置班級

      {strcpy(rclass,rc);}

      char *get_rclass()

      //獲得班級

      {return rclass;}

      void set_rtel(char *rt)

      //設(shè)置電話

      {strcpy(rtel,rt);}

      char *get_rtel()

      //獲得電話

      {return rtel;}

      void copy(Reader m)//讀者Reader結(jié)構(gòu)體copy函數(shù)

      {strcpy(rname,m.get_rname());strcpy(rclass,m.get_rclass());strcpy(rtel,m.get_rtel());} };//*********讀者管理結(jié)構(gòu)體,實現(xiàn)對讀者用戶的管理********* class ReaderManage {

      Reader readers[50];//定義讀者結(jié)構(gòu)體數(shù)組對象,最多50位

      int length;

      void readFile()

      //讀取讀者文件函數(shù)

      {

      ifstream fread;//定義輸入文件流對象fread

      length=0;

      //計數(shù)

      if(!fread)

      {cout<<”讀取磁盤文件失敗!“<

      fread.open(ReaderFile,ios::binary);//使文件流與文件關(guān)聯(lián),以二進制方式打開

      int i=0;

      while((fread.read((char *)&readers[i],sizeof(Reader))))//計算并返回所占字節(jié)數(shù)

      i++;

      length=i;

      fread.close();//關(guān)閉磁盤文件

      } void saveFile()//保存讀者文件

      {

      ofstream fwrite;

      //定義輸出文件流對象fwrite

      if(!fwrite)

      {cout<<”文件保存失敗!n“;exit(1);}

      fwrite.open(ReaderFile,ios::binary);//使文件流與文件關(guān)聯(lián),以二進制方式打開

      fwrite.write((char *)readers,length*sizeof(Reader));//計算并返回所占字節(jié)數(shù)

      fwrite.close();//關(guān)閉磁盤文件

      } public:

      ReaderManage()//構(gòu)造函數(shù),讀取讀者文件

      {readFile();}

      ~ReaderManage()//析構(gòu)函數(shù),保存讀者文件

      {saveFile();}

      void add_reader(Reader r)//添加讀者用戶函數(shù)

      {

      if(length>=50)

      {cout<<”對不起,注冊人數(shù)已滿!n“;return;}

      readers[length].copy(r);//調(diào)用讀者結(jié)構(gòu)體copy函數(shù)

      length++;} int search(char *rn)//按姓名查找讀者函數(shù)

      {

      for(int i=0;i

      if(strcmp(readers[i].get_rname(),rn)==0)//判斷是否相等

      return i;

      return-1;

      } bool revise(Reader reader,int i)//修改讀者資料函數(shù)

      {

      readers[i].copy(reader);//調(diào)用讀者結(jié)構(gòu)體cpoy函數(shù)

      return true;} void delete_reader(int index)//刪除讀者函數(shù)

      {

      for(int i=index;i

      readers[i].copy(readers[i+1]);//用后面的地址覆蓋前面的地址

      length--;} bool log_reader(Reader r)//登錄時判斷讀者用戶是否存在函數(shù),相當(dāng)于遍歷

      {

      for(int i=0;i

      if(strcmp(readers[i].get_rname(),r.get_rname())==0)

      return true;

      return false;

      } void reg_reader()//注冊用戶函數(shù)

      {

      char n[10];

      //姓名name

      char c[10];

      //班級class

      char t[10];

      //電話tel

      Reader reader;

      cout<<”nt請輸入您的姓名:“;

      cin>>n;

      cout<<”nt請輸入您的所在班級:“;

      cin>>c;

      cout<<”nt請輸入您的聯(lián)系電話:“;

      cin>>t;

      reader.set_rname(n);//調(diào)用讀者結(jié)構(gòu)體設(shè)置讀者姓名函數(shù)

      reader.set_rclass(c);//調(diào)用讀者結(jié)構(gòu)體設(shè)置讀者班級函數(shù)

      reader.set_rtel(t);//調(diào)用讀者結(jié)構(gòu)體設(shè)置聯(lián)系電話函數(shù)

      add_reader(reader);//調(diào)用讀者結(jié)構(gòu)體添加讀者函數(shù)

      cout<<”nt注冊成功!“;} void show_reader()//不帶參的顯示讀者信息函數(shù)

      { cout<<”n ☆☆☆☆☆☆☆☆☆☆☆☆讀★★者★★信★★息★★列★★表☆☆☆☆☆☆☆☆☆☆☆nn“;

      cout<<”姓名ttt班級ttt電話n“;

      for(int i=0;i

      {

      cout<

      cout<<”ttt“<

      cout<<”ttt“<

      } } void show_reader(int i)//帶參的顯示讀者信息函數(shù)

      {

      cout<<”n ☆☆☆☆☆☆☆☆☆☆☆☆讀★★者★★信★★息★★列★★表☆☆☆☆☆☆☆☆☆☆nn“;

      cout<<”姓名ttt班級ttt電話n“;

      cout<

      cout<<”ttt“<

      cout<<”ttt“<

      }

      };

      //********書籍結(jié)構(gòu)體,用于存放書籍基本信息******** class Book { private:

      char bnum[10];

      //書號

      char bname[20];

      //書名

      char bauthor[10];

      //作者

      char rname[10];

      //借閱人 public: int tag;

      //狀態(tài)標(biāo)記判斷指標(biāo)(已借/在架)Book()

      //構(gòu)造函數(shù)初始化信息

      {strcpy(bnum,”“);strcpy(bname,”“);strcpy(bauthor,”“);strcpy(rname,”“);tag=0;}

      void set_bnum(char *no)

      //設(shè)置書號

      {strcpy(bnum,no);}

      //把字符串no中的字符復(fù)制到字符串bnum中

      char *get_bnum()

      //獲得書號

      {

      return bnum;}

      //返回值為bnum

      void set_bname(char *n)

      //設(shè)置書名

      {strcpy(bname,n);}

      char *get_bname()

      //獲得書名

      {return bname;}

      void set_bauthor(char *a)

      //設(shè)置作者

      {strcpy(bauthor,a);}

      char * get_bauthor()

      //獲得作者姓名

      {return bauthor;}

      void set_tag(int t)

      //狀態(tài)設(shè)置

      {tag=t;}

      void set_rname(char *rn)

      //設(shè)置借閱人

      {strcpy(rname,rn);}

      char *get_rname()

      //獲得借閱人姓名

      {return rname;}

      void show_tag()

      //顯示圖書狀態(tài)

      {

      if(tag==1)

      {cout<<”已借“;}

      else

      {cout<<”在架“;}

      }

      void copy(Book m)

      //Book結(jié)構(gòu)體copy函數(shù)

      {

      strcpy(bnum,m.get_bnum());

      //將獲得書號函數(shù)里的返回值里的字符復(fù)制到bnum

      strcpy(bname,m.get_bname());

      strcpy(bauthor,m.get_bauthor());

      tag=0;

      } };//**********書籍管理結(jié)構(gòu)體,實現(xiàn)管理書籍功能********** class BookManage { private:

      Book books[100];

      //定義Book書籍結(jié)構(gòu)體數(shù)組對象,最大容量100本

      int length;

      void saveFile()

      //保存書籍文件

      {

      ofstream fwrite;//定義輸出文件流ofstream結(jié)構(gòu)體對象fwrite

      if(!fwrite)

      {cout<<”文件保存失敗!n“;exit(1);

      }

      fwrite.open(BookFile,ios::binary);//使文件流與文件建立關(guān)聯(lián),以二進制方式打開

      fwrite.write((char *)books,length*sizeof(Book));//計算并返回所占字節(jié)數(shù)

      fwrite.close();

      //關(guān)閉磁盤文件

      } void readFile()

      //讀取書籍文件

      {

      ifstream fread;//定義輸入文件流對象fread

      length=0;

      if(!fread)

      {cout<<”文件讀取失敗!“<

      Book temp;

      //定義書籍結(jié)構(gòu)體臨時對象temp

      int i=0;

      fread.open(BookFile ,ios::binary);//使文件流與文件建立關(guān)聯(lián),以二進制方式打開

      while((fread.read((char *)&books[i],sizeof(Book))))

      i++;

      //每讀完一次,指針后移一位,直到不能讀出正確結(jié)果為止

      length=i;

      fread.close();} public:

      BookManage()

      //構(gòu)造函數(shù),讀取磁盤文件

      {

      length=0;

      //從頭讀起,計數(shù),最大100

      readFile();

      //調(diào)用讀取文件函數(shù)

      }

      ~BookManage()

      //析構(gòu)函數(shù),保存磁盤文件

      {

      saveFile();

      //調(diào)用保存文件函數(shù)

      }

      bool add(Book book)

      //添加圖書資料

      {

      if(length>=100)

      { cout<<”對不起,儲存已滿,您無法繼續(xù)添加!n“;

      return-1;

      }

      else

      {

      books[length].copy(book);//調(diào)用書籍結(jié)構(gòu)體copy函數(shù)

      length++;

      return(length-1);

      } } int bnu_search(char *bnu)

      //按書號查找書籍

      {

      for(int i=0;i

      if(strcmp(books[i].get_bnum(),bnu)==0)//字符串比較,判斷是否相等

      return i;

      return-1;

      } int bna_search(char *bna)

      //按書名查找書籍

      {

      for(int i=0;i

      if(strcmp(books[i].get_bname(),bna)==0)//判斷

      return i;

      return-1;

      } int bau_search(char *bau)//按作者查找書籍

      {

      for(int i=0;i

      if(strcmp(books[i].get_bauthor(),bau)==0)//判斷

      return i;

      return-1;

      }

      int rn_search(char *rn)//按借閱人查找書籍

      {

      for(int i=0;i

      if(strcmp(books[i].get_rname(),rn)==0)//判斷

      return i;

      return-1;

      }

      void revise(Book book,int i)//帶參的修改書籍函數(shù)

      {books[i].copy(book);} //調(diào)用Book結(jié)構(gòu)體copy函數(shù)

      void deleteBook(int index)//帶參的刪除書籍資料函數(shù)

      {

      for(int i=index;i

      books[i].copy(books[i+1]);//用后面的地址將當(dāng)前的地址覆蓋

      length--;

      } void show_book()//不帶參的顯示書籍函數(shù)

      {

      cout<<” ☆☆☆☆☆☆☆☆☆☆☆書★★籍★★信★★息★★列★★表☆☆☆☆☆☆☆☆☆☆☆nn“;

      cout<<”書號“;

      cout.width(10);

      cout<<”書名“;

      cout.width(10);

      cout<<”作者“;

      cout.width(17);

      cout<<”狀態(tài)“;

      cout.width(25);

      cout<<”借閱人n“;

      for(int i=0;i

      { cout<

      cout.width(10);

      cout<

      cout.width(10);

      cout<

      cout.width(20);

      books[i].show_tag();

      cout.width(20);

      cout<

      }

      } void show_book(int i)//帶參的顯示書籍函數(shù)

      { cout<<” ☆☆☆☆☆☆☆☆☆☆☆書★★籍★★信★★息★★列★★表☆☆☆☆☆☆☆☆☆☆☆nn“;

      cout<<”書號“;

      cout.width(10);

      cout<<”書名“;

      cout.width(10);

      cout<<”作者“;

      cout.width(17);

      cout<<”狀態(tài)“;

      cout.width(25);

      cout<<”借閱人n“;

      cout<

      cout.width(10);

      cout<

      cout.width(10);

      cout<

      cout.width(20);

      books[i].show_tag();

      cout.width(20);

      cout<

      }

      void br_book()//讀者借、還書功能函數(shù)

      {

      ReaderManage reader;

      int choi;//選擇

      int a;

      //圖書狀態(tài)指標(biāo)(1已借2在架)

      char sh[10];//需要還書的書號

      char dz[10];//讀者姓名

      cin>>sh;

      int index=bnu_search(sh);//定義一個變量等于查找到的書號

      if(index>=0)

      { if(books[index].tag==1)//已借

      a=1;

      if(books[index].tag==0)//在架

      a=2;

      switch(a)

      { case 1:

      cout<<”nt該書目前狀態(tài)為<已借出>n“;

      cout<<”nt請選擇您需要的服務(wù):1:還書

      0:返回n“;

      cin>>choi;

      cin.ignore();//清除以回車結(jié)束的輸入緩沖區(qū)的內(nèi)容,消除上一次輸入對下一次輸入的影響

      if(choi!=1&&choi!=0)

      {

      cout<<”nt操作有誤,請重新選擇(0/1)!n“;

      return;

      }

      else if(choi==1)

      {

      cout<<”nt請輸入您的姓名:“;

      cin>>dz;

      cin.ignore();

      int index1=reader.search(dz);

      if(index1==-1)

      {

      cout<<”nt對不起,系統(tǒng)無該讀者記錄,新用戶請先注冊!“;

      return;

      }

      else

      {

      strcpy(dz,”“);//將讀者姓名已空白代替

      books[index].set_rname(dz);//借閱人一項變?yōu)榭瞻?/p>

      books[index].set_tag(0);//圖書狀態(tài)變?yōu)樵诩?/p>

      cout<<”nt還書成功!“<

      }

      }break;

      case 2:

      cout<<”nt該書目前狀態(tài)為<在館>n“;

      cout<<”nt請您需要的服務(wù):1:借書

      0:返回n“;

      cin>>choi;

      cin.ignore();

      if(choi!=1&&choi!=0)

      {

      cout<<”nt操作有誤,請重新選擇(0/1)!n“;

      return;

      }

      else if(choi==1)

      {

      cout<<”nt請輸入您的姓名:“;

      cin>>dz;

      int index1=reader.search(dz);

      if(index1==-1)

      { cout<<”nt對不起,系統(tǒng)無改讀者記錄,新用戶請先注冊!“;

      return;

      }

      else

      {

      books[index].set_rname(dz);

      books[index].set_tag(1);

      cout<<”nt借書成功!“<

      }

      }break;

      }

      }

      else

      {

      cout<<”nt對不起,系統(tǒng)無該書記錄!“;}

      }

      bool in(int i)//判斷圖書是否在架函數(shù)

      {

      if(books[i].tag==1)

      return false;

      return true;

      }

      };//**********菜單結(jié)構(gòu)體,實現(xiàn)界面引導(dǎo)********** class Menu {

      BookManage bm;

      //定義書籍管理結(jié)構(gòu)體對象bm ReaderManage rm;

      //定義讀者管理結(jié)構(gòu)體對象rm Reader r;

      //定義讀者結(jié)構(gòu)體對象r private: int choice;

      //菜單序號選擇

      int key;

      //管理員密碼 public: void header()

      //頁眉

      {

      system(”color fd“);

      cout<<”t

      ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;

      cout<<”t

      ☆n“;

      cout<<”t

      ☆n“;

      cout<<”t

      統(tǒng)

      ☆n“;

      cout<<”t

      ☆n“;

      cout<<”t

      ☆n“;

      cout<<”t

      ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;} void log_menu()

      //主界面登錄菜單

      {

      system(”color fd“);

      header();

      cout<<”nttt< 請

      份 >n“;

      cout<<”ntttt1: 管理員nntttt2: 讀

      者nntttt0: 退

      出nt您的選擇是: “;choice: cin>>choice;

      cin.ignore();

      //清除以回車結(jié)束的輸入緩沖區(qū)的內(nèi)容,消除上一次輸入對下一次輸入的影響

      switch(choice)

      {

      case 1:

      log_admin();

      //管理員登錄,需密碼驗證

      break;

      case 2:

      reader_lr();

      //讀者登錄或注冊

      break;

      case 0:

      exit(1);

      //退出系統(tǒng)

      break;

      default:

      cout<<”nt您的操作有誤,請重新選擇(0→2): “;

      goto choice;

      } } void admin_menu()

      //管理員管理菜單

      {

      system(”cls“);

      system(”color f9“);

      cout<<”t

      ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;

      cout<<”t

      ☆n“;

      cout<<”t

      系★統(tǒng)★管★理★界★面

      ☆n“;

      cout<<”t

      ☆n“;

      cout<<”t

      1: 添加新的圖書資料

      2: 修改已有圖書資料

      ☆n“;

      cout<<”t

      ☆n“;

      cout<<”t

      3: 刪除已有圖書資料

      4: 查找已有圖書資料

      ☆n“;

      cout<<”t

      ☆n“;

      cout<<”t

      5: 查看所有圖書資料

      6: 修改讀者用戶信息

      ☆n“;

      cout<<”t

      ☆n“;

      cout<<”t

      7: 刪除讀者用戶信息

      8: 查看所有讀者信息

      ☆n“;

      cout<<”t

      ☆n“;

      cout<<”t

      9: 返回系統(tǒng)登錄界面

      0: 退出圖書管理系統(tǒng)

      ☆n“;

      cout<<”t

      ☆n“;

      cout<<”t

      ☆n“;

      cout<<”t

      ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;

      cout<<”nt請選擇您需要的服務(wù)序號: “;choice: cin>>choice;

      cin.ignore();

      switch(choice)

      {

      case 1:

      //添加圖書

      addBook();

      bm.~BookManage();

      break;

      case 2:

      //修改圖書

      reviseBook();

      bm.~BookManage();

      break;

      case 3:

      //刪除圖書

      delBook();

      bm.~BookManage();

      break;

      case 4:

      //查找圖書

      absearch_menu();

      break;

      case 5:

      //查看全部圖書

      bm.show_book();

      cout<<”nt顯示完畢!“;

      system(”pause“);

      admin_menu();

      break;

      case 6:

      //修改讀者

      reviseReader();

      rm.~ReaderManage();

      break;

      case 7:

      //刪除讀者

      delReader();

      rm.~ReaderManage();

      break;

      case 8: //查看所有讀者

      rm.show_reader();

      cout<<”nt顯示完畢!“;

      system(”pause“);

      admin_menu();

      break;

      case 9: //返回系統(tǒng)登錄界面

      system(”cls“);

      log_menu();

      case 0: //退出系統(tǒng)

      exit(1);

      break;

      default:

      cout<<”nt您的操作有誤,請重新選擇(0→7): “;

      goto choice;

      } } void reader_menu()

      //讀者服務(wù)菜單

      {

      system(”cls“);

      system(”color f9“);

      cout<<”t

      ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;

      cout<<”t

      ☆n“;

      cout<<”t

      讀★者★服★務(wù)★界★面

      ☆n“;

      cout<<”t

      ☆n“;

      cout<<”t

      1: 借 閱 圖 書

      2: 歸 還 圖 書

      ☆n“;

      cout<<”t

      ☆n“;

      cout<<”t

      3: 查 找 圖 書

      4: 借 閱 情 況

      ☆n“;

      cout<<”t

      ☆n“;

      cout<<”t

      5: 返 上 一 級

      0: 退 出 系 統(tǒng)

      ☆n“;

      cout<<”t

      ☆n“;

      cout<<”t

      ☆n“;

      cout<<”t

      ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;

      cout<<”nt請選擇您需要的服務(wù)序號: “;choice: cin>>choice;

      cin.ignore();

      switch(choice)

      {

      case 1:

      cout<<”nt請輸入您欲借閱的圖書書號: “;

      bm.br_book();

      bm.~BookManage();

      break;

      case 2:

      cout<<”nt請輸入您欲歸還的圖書書號: “;

      bm.br_book();

      bm.~BookManage();

      break;

      case 3:

      bsearch_menu();

      break;

      case 4:

      rn_search();

      break;

      case 5:

      system(”cls“);

      reader_lr();

      break;

      case 0:

      exit(1);

      break;

      default:

      cout<<”nt您的操作有誤,請重新選擇(0→5):

      goto choice;

      } } void bsearch_menu()

      //讀者查找書籍菜單

      {

      system(“color f2”);

      cout<<“ttt☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n”;cout<<“ttt☆

      ☆n”;

      cout<<“ttt☆

      書★籍★查★找★界★面

      ☆n”;

      cout<<“ttt☆

      ☆n”;

      cout<<“ttt☆

      1: 按 書號查找

      ☆n”;

      cout<<“ttt☆

      ☆n”;

      cout<<“ttt☆

      2: 按 書名查找

      ☆n”;

      cout<<“ttt☆

      ☆n”;

      cout<<“ttt☆

      3: 按 作者查找

      ☆n”;

      cout<<“ttt☆

      ☆n”;

      cout<<“ttt☆

      4: 返 回 上 級

      ☆n”;

      cout<<“ttt☆

      ☆n”;

      cout<<“ttt☆

      0: 退 出 系 統(tǒng)

      ☆n”;cout<<“ttt☆

      ☆n”;

      cout<<“ttt☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n”;

      int bsc;//book search choice cout<<“nt請輸入您需要的服務(wù)序號: ”;

      cin>>bsc;

      cin.ignore();

      switch(bsc){

      case 1:

      bnu_search();

      break;

      case 2:

      bna_search();

      “;

      break;

      case 3:

      bau_search();

      break;

      case 4:

      reader_menu();

      break;

      case 5:

      exit(1);

      default:

      cout<<”nt操作有誤,請重新選擇<0→4>“;

      break;

      }

      }

      void absearch_menu()

      //管理員查找書籍菜單

      {

      system(”color f2“);

      cout<<”ttt☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;

      cout<<”ttt☆

      ☆n“;

      cout<<”ttt☆

      書★籍★查★找★界★面

      ☆n“;

      cout<<”ttt☆

      ☆n“;

      cout<<”ttt☆

      1: 按 書號查找

      ☆n“;

      cout<<”ttt☆

      ☆n“;

      cout<<”ttt☆

      2: 按 書名查找

      ☆n“;

      cout<<”ttt☆

      ☆n“;

      cout<<”ttt☆

      3: 按 作者查找

      ☆n“;

      cout<<”ttt☆

      ☆n“;

      cout<<”ttt☆

      4: 返 回 上 級

      ☆n“;

      cout<<”ttt☆

      ☆n“;

      cout<<”ttt☆

      0: 退 出 系 統(tǒng)

      ☆n“;

      cout<<”ttt☆

      ☆n“;

      cout<<”ttt☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;

      int bsc;//book search choice

      cout<<”nt請輸入您需要的服務(wù)序號: “;

      cin>>bsc;

      cin.ignore();

      switch(bsc)

      {

      case 1:

      bnu_search();

      break;

      case 2:

      bna_search();

      break;

      case 3:

      bau_search();

      break;

      case 4:

      admin_menu();

      break;

      case 5:

      exit(1);

      default:

      cout<<”nt操作有誤,請重新選擇<0→4>“;

      break;

      }

      } void reader_lr()//讀者登錄或注冊菜單 {

      system(”cls“);

      header();

      system(”color f1“);

      cout<<”nttt< 讀

      面 >n“;

      cout<<”nttt

      1: 登

      錄t2: 注

      冊nnttt

      3: 返

      回t0: 退

      出nt您的選擇是: “;

      int rlc;//reader login choice choice: cin>>rlc;

      cin.ignore();

      switch(rlc)

      {

      case 1:

      //已注冊讀者登錄

      cout<<”nt請輸入您的姓名: “;

      char rn[10];//reader name

      cin>>rn;

      r.set_rname(rn);

      if(rm.log_reader(r))

      {

      cout<<”nt登錄成功!“;

      system(”pause“);

      reader_menu();

      }

      else

      cout<<”nt登錄失敗!新用戶請先注冊!“;

      system(”pause“);

      reader_lr();

      break;

      case 2:

      //新用戶注冊

      rm.reg_reader();

      rm.~ReaderManage();

      system(”pause“);

      reader_lr();

      break;

      case 3:

      system(”cls“);

      log_menu();

      case 0:

      exit(1);

      break;

      default:

      cout<<”nt您的操作有誤,請重新選擇(0→2):

      goto choice;

      } } void log_admin()

      //管理員登錄

      {

      cout<<“nt請輸入管理員密碼:”;

      int key;

      cin>>key;

      if(key==14125)

      {

      cout<<“nt登錄成功!nnt”;

      system(“pause”);

      admin_menu();

      //管理員操作菜單

      }

      else

      {cout<<“nt登錄失敗!原因是密碼錯誤!n”;

      cout<<“nt請選擇 <1:返回上一級菜單

      0:退出系統(tǒng)>

      cin>>choice;

      cin.ignore();

      switch(choice)

      ”;“;

      {

      case 1:

      system(”cls“);

      log_menu();

      break;

      case 0:

      exit(1);

      break;

      default:

      cout<<”nt操作有誤,請重新選擇(0/1)“;

      }

      } } void rn_search()

      //按書號查找函數(shù)

      {

      char rn[10];//reader name

      cout<<”nt請輸入您的姓名:“;

      cin>>rn;

      int index=bm.rn_search(rn);

      if(index>=0)

      bm.show_book(index);

      else

      cout<<”nt對不起,系統(tǒng)無您的借閱記錄!“;

      cout<<”nt“;

      system(”pause“);

      reader_menu();

      } void bnu_search()

      //按書號查找函數(shù)

      {

      char bnu[10];

      cout<<”nt請輸入您要查找的書號:“;

      cin>>bnu;

      int index=bm.bnu_search(bnu);

      if(index>=0)

      bm.show_book(index);

      else

      cout<<”nt對不起,系統(tǒng)無該書籍記錄!“;

      cout<<”nt“;

      system(”pause“);

      bsearch_menu();

      }

      void bna_search()

      //按書名查找函數(shù)

      {

      cout<<”nt請輸入您要查找的書名:“<

      char bna[20];

      cin>>bna;

      int index=bm.bna_search(bna);

      if(index>=0)

      bm.show_book(index);

      else

      cout<<”nt對不起,系統(tǒng)無該書籍記錄!“;

      cout<<”nt“;

      system(”pause“);

      bsearch_menu();

      }

      void bau_search()

      //按作者查找函數(shù)

      {

      cout<<”nt請輸入您要查找的作者:“<

      char bau[10];

      cin>>bau;

      int index=bm.bau_search(bau);

      if(index>=0)

      bm.show_book(index);

      else

      cout<<”nt對不起,系統(tǒng)無該書籍記錄!“;

      cout<<”nt“;

      system(”pause“);

      bsearch_menu();

      }

      void addBook()

      //新增書籍函數(shù)

      { char numb[10];

      //書號

      char nameb[20];

      //書名

      char authorb[10];//作者

      Book book;

      //書籍結(jié)構(gòu)體對象book

      int tag1;input1:cout<<”nt請輸入新書書號:“;

      cin>>numb;

      int index=bm.bnu_search(numb);

      if(index==-1)

      {

      cout<<”nt系統(tǒng)目前尚無該書記錄,您可以繼續(xù)操作!n“;

      cout<<”nt請輸入新書書名:“;

      cin>>nameb;

      cout<<”nt請輸入新書作者:“;

      cin>>authorb;

      tag1=0;

      book.set_bnum(numb);

      book.set_bname(nameb);

      book.set_bauthor(authorb);

      book.set_tag(tag1);

      bm.add(book);

      cout<<”nt恭喜您!新書資料錄入成功!“;

      }

      else

      {

      cout<<”nt對不起,該書號紀(jì)錄已存在!請重新輸入!“;

      goto input1;

      }

      system(”pause“);

      admin_menu();} void reviseBook()

      //修改書籍函數(shù)

      {

      char numb[10];

      char nameb[20];

      char authorb[10];

      Book book;

      int index=-1;input2: cout<<”nt請輸入您要修改書籍的書號:“;

      cin>>numb;

      index=bm.bnu_search(numb);

      if(index==-1)

      {

      cout<<”nt對不起,您輸入的書號不存在,請重新輸入!“<

      goto input2;

      return;

      }

      bool sta=bm.in(index);//判斷是否在館

      if(sta)

      { cout<<”nt該書目前處于<在架>狀態(tài),您可以繼續(xù)操作!“;

      cout<<”nt請輸入更改后的書名:“;

      cin>>nameb;

      cout<<”nt請輸入更改后的作者:“;

      cin>>authorb;

      book.set_bnum(numb);

      book.set_bname(nameb);

      book.set_bauthor(authorb);

      bm.revise(book,index);

      cout<<”nt恭喜您!書籍資料修改成功!“;}

      else

      cout<<”nt該書已被借出,請于讀者歸還后再進行相關(guān)操作!“<

      system(”pause“);

      admin_menu();

      } void delBook()

      //刪除書籍函數(shù)

      {

      char numb[10];

      cout<<”nt請輸入您要刪除書籍的書號:“;

      cin>>numb;

      int index=bm.bnu_search(numb);

      if(index>=0)

      {

      cout<<”nt您確定要刪除該書記錄嗎(y/n)

      “;

      char y;

      cin>>y;

      if(y=='y'||y=='Y')

      {

      bm.deleteBook(index);

      cout<<”nt刪除成功!“;

      }

      else

      cout<<”nt刪除取消!“;

      }

      else

      cout<<”nt對不起,系統(tǒng)沒有該圖書記錄!“;

      system(”pause“);

      admin_menu();

      } void reviseReader()//修改讀者用戶函數(shù)

      {

      char namer[10];

      Reader reader;get1:

      cout<<”nt請輸入你要修改讀者用戶的姓名: “;

      cin>>namer;

      int index=rm.search(namer);

      if(index==-1)

      {

      cout<<”nt對不起,系統(tǒng)無改讀者記錄,重新輸入請按1,返回請按0:

      int a;

      cin>>a;get2:

      cin.ignore();

      switch(a)

      {

      case 1:

      goto get1;

      break;

      case 0:

      system(“pause”);

      admin_menu();

      break;

      default:

      cout<<“nt您的操作有誤,請重新選擇(0/1):

      ”;

      goto get2;

      }

      return;

      }

      “;

      else

      {

      char namer[10];

      char classr[10];

      char telr[10];

      Reader reader;

      cout<<”nt請輸入更改后的讀者姓名:“;

      cin>>namer;

      cout<<”nt請輸入更改后的班級名稱:“;

      cin>>classr;

      cout<<”nt請輸入更改后的聯(lián)系電話:“;

      cin>>telr;

      reader.set_rname(namer);

      reader.set_rclass(classr);

      reader.set_rtel(telr);

      cout<<”nt是否真的修改該記錄(y/n?):“;

      char y;

      cin>>y;

      if(y=='y'||y=='Y')

      { rm.revise(reader,index);

      cout<<”nt修改成功!n“;

      }

      else

      cout<<”nt操作取消!n“;

      }

      system(”pause“);

      admin_menu();

      }

      void delReader()

      //刪除讀者用戶函數(shù)

      {

      cout<<”nt請輸入您要刪除的讀者用戶的姓名:“<

      char namer[10];

      cin>>namer;

      int index=rm.search(namer);

      if(index>=0)

      {

      cout<<”nt是否真的刪除該記錄(y/n?): “;

      char y;

      cin>>y;

      if(y=='y'||y=='Y')

      {

      rm.delete_reader(index);

      cout<<”nt刪除成功!n“;

      }

      else

      cout<<”nt操作取消!n“;

      }

      else

      cout<<”nt對不起,系統(tǒng)尚無該讀者記錄!“;

      system(”pause“);

      admin_menu();

      } };//********主函數(shù)******** int main(){

      system(”color fd“);Menu menu;//定義菜單結(jié)構(gòu)體對象menu

      cout<<”ttt 文計091-1 龐麗萍 200990514125

      “;cout<<”ttt

      當(dāng)前日期:2011-6-22 星期三“;cout<<”ttt

      當(dāng)前時間:08:00

      “;cout<<”nttt

      ★ 歡 “;cout<<”★ 迎 “;

      } cout<<”★ 進 “;cout<<”★ 入 ★nn";menu.log_menu();return 0;四.程序正確性驗證

      1主頁面

      2.管理員登陸頁面

      3.圖書添加

      五.課程設(shè)計過程中出現(xiàn)的問題、原因及解決方法

      1.用戶登錄密碼時,不能使用暗碼來保護密碼。(未解決成功)2.每個界面都能退出到主頁面,而不是直接跳出系統(tǒng)。(以解決)3.書名字長太多影響書籍、作者、數(shù)量等之間的一一對應(yīng)關(guān)系。(為解決成功)

      六.課程設(shè)計的主要收獲

      通過這幾天學(xué)習(xí)設(shè)計圖書信息管理系統(tǒng),認(rèn)識到一切看似簡單的事情只有自己動手做,明白了其中的原理才會更好的把它變成自己的東西。圖書管理系統(tǒng)主要用到了文件的輸入輸出,以及利用簡單的順序查找知識,加深了對數(shù)據(jù)結(jié)構(gòu)的理解與應(yīng)用。對于這次的課程設(shè)計,首先,許多知識不僅僅只是課本上的,需要我們自己去圖書館或網(wǎng)上收集資料。其次,編程過程終遇到各種錯誤,需要我們耐心分析,討論,最后得出正確結(jié)果。第三,程序無錯,進行調(diào)試,然后進行加工修改優(yōu)化。

      七.對今后課程設(shè)計的建議

      希望老師可以分小組做課程設(shè)計,題目可以相應(yīng)的增大難度。分組可以鍛煉團對合作能力,隊員可以相互討論解決問題,彼此能夠激發(fā)更多的思想,做出更完善的作品,同時也防止了互相拷貝的情況,讓每個同學(xué)都積極的參與到設(shè)計中,而不是坐享其成。

      第五篇:數(shù)據(jù)結(jié)構(gòu)課程設(shè)計—西文圖書管理系統(tǒng)

      數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告

      課程名稱:數(shù)據(jù)結(jié)構(gòu)課程設(shè)計

      課設(shè)題目: 西文圖書管理系統(tǒng) 教師姓名:

      本科生姓名:

      王瑞林

      本科生學(xué)號:

      20121002932

      號:

      191124

      期:2014年6月20日

      題號:十

      題目:西文圖書管理

      1.需求分析

      圖書管理系統(tǒng)對象有兩個,包括讀者和管理員。

      讀者的需求:借書,還書,續(xù)借,查詢當(dāng)前所借書籍還書截至日期,查詢借閱歷史,修改登陸密碼。其中借書可以根據(jù)書號和書名兩種方式查詢借閱。

      管理員的需求:采編入庫,清除庫存,注冊讀者,刪除讀者,根據(jù)書號查詢書籍,修改管理員用戶名和密碼。

      2.設(shè)計

      2.1設(shè)計思想

      (1)數(shù)據(jù)與操作特性:

      有搜索,插入,刪除操作。而數(shù)據(jù)有:讀者信息,書籍信息,讀者借閱書籍歷史信息,書籍讀者借閱歷史信息,讀者當(dāng)前所借書籍信息。(2)數(shù)據(jù)結(jié)構(gòu)設(shè)計:

      數(shù)據(jù)的邏輯結(jié)構(gòu)有線性結(jié)構(gòu)和樹形結(jié)構(gòu)。

      根據(jù)書號和書名建立兩個B-樹,便于讀者查詢借閱,其中關(guān)鍵字設(shè)置為書籍指針,便于找到書籍 后直接進行修改書籍信息。

      讀者和書籍的信息從文件中讀取,由于會不斷注冊和刪除讀者以及新增刪除書籍,因此書籍和讀者的信息采用單鏈表存儲。

      讀者的借閱歷史和書籍的讀者歷史,都采用數(shù)組的形式存儲,為了節(jié)省存儲空間,每個借閱歷史數(shù)組最大空間為15。超過15個借閱歷史,則刪除最早的借閱歷史。2.2設(shè)計表示(1)數(shù)據(jù)類型定義

      typedef struct //日期結(jié)構(gòu)體類型 { int year;//記錄年

      int month;//記錄月

      int day;//記錄日 }Date;//記錄借閱者所借書籍的信息結(jié)構(gòu)體 typedef struct {

      char bookID[15];//書號 char name[15];//書名 char writer[15];//作者 Date bordate;//借閱時間 Date backdate;//還書時間

      int flag;//是否續(xù)借,續(xù)借為1.否則為0

      }BookHistory;//記錄借閱者當(dāng)前所借書籍的信息結(jié)構(gòu)體 typedef struct {

      char bookID[15];//書號 char name[15];//書名 char writer[15];//作者 Date bordate;//借閱時間 Date lastdate;//最后還書期限

      int flag;//是否續(xù)借,續(xù)借為1.否則為0

      }BookRec;//記錄書籍被借閱的讀者記錄 typedef struct { char readerID[15];//記錄讀者的借閱證號 char readername[15];//讀者的名字

      Date bor;//記錄讀者的借書日期

      Date back;//記錄讀者的還書日期 int flag;//借閱者是否有續(xù)借跡象(flag取值0或者1)}ReaderHistory;//記錄讀者信息的結(jié)構(gòu)體類型(允許讀者同時借閱五本書,每本書支持續(xù)借一次)typedef struct { char readerID[12];//記錄讀者的借書證號,一般是學(xué)號

      //記錄書的信息的結(jié)構(gòu)體類型 typedef struct { char bookID[15];//書號 char title[15];//記錄書名

      char writer[15];//記錄著者

      int currentnum;//書現(xiàn)存量

      int totalnum;//書總存量

      int bortimes;//被借的歷史總次數(shù) //B_LQueue *B_LQH;

      ReaderHistory RH[15];//借書者記錄,規(guī)定鏈?zhǔn)疥犃械淖畲蠊?jié)點個數(shù)為15,來節(jié)省空間 char name[15];//讀者的名字 char password[16];//讀者登陸密碼 BookRec rec[5];//讀者現(xiàn)在所借書籍 int hn;//總借閱數(shù)量 //R_LQueue *R_LQH;

      BookHistory bh[15];//記錄讀者的借閱記錄,規(guī)定鏈?zhǔn)疥犃械淖畲蠊?jié)點個數(shù)為15,來節(jié)省空間 int bn;//讀者現(xiàn)在所借書籍?dāng)?shù)量,最大數(shù)量為5本

      }Reader;}Book;//根據(jù) 書名為關(guān)鍵字的B-樹的結(jié)構(gòu)體類型

      typedef struct Namenode //根據(jù)書名為關(guān)鍵字建立的B樹 {

      typedef struct///根據(jù)書名建立的B樹的搜索結(jié)果 {

      //根據(jù)書號為關(guān)鍵字的B-樹的結(jié)構(gòu)體類型

      typedef struct IDnode //根據(jù)書號為關(guān)鍵字建立的B樹 {

      typedef struct///根據(jù)書號建立的B樹的搜索結(jié)果 {

      //從文件中讀取書籍?dāng)?shù)據(jù)后存儲在單鏈表里 typedef struct BookNode {

      //從文件中讀取學(xué)生數(shù)據(jù)后存儲在單鏈表里 typedef struct ReaderNode { Book SLbook;struct BookNode *next;BTIDnode *pt;////指向找到的節(jié)點指針 int i;//所找關(guān)鍵字在節(jié)點里的位置 int tag;//查找成功值為1,查找失敗值為0 int n;//記錄結(jié)點中的關(guān)鍵字(即書號)個數(shù)

      Book *key[MAXM];//key[0...n-1],Maxsize個關(guān)鍵字(即書號)域 struct IDnode *chd[MAXM];//ptr[0...n],MAXM個指向子結(jié)點的指針域 BTNamenode *pt;////指向找到的節(jié)點指針 int i;//所找關(guān)鍵字在節(jié)點里的位置 int tag;//查找成功值為1,查找失敗值為0 int n;//記錄結(jié)點中的關(guān)鍵字(即書號)個數(shù)

      Book *key[MAXM];//key[0...n-1],Maxsize個關(guān)鍵字(即書名)域

      struct Namenode *chd[MAXM];//ptr[0...n],MAXM個指向子結(jié)點的指針域

      struct Namenode *par;//指向父結(jié)點的指針域

      }BTNamenode;}NameResult;struct IDnode *par;//指向父結(jié)點的指針域

      }BTIDnode;}IDResult;}BookSLNode;Reader SLreader;struct ReaderNode *next;}ReaderSLNode;2.3詳細(xì)設(shè)計

      (1)登陸界面login():有管理員和讀者登陸,都必須輸入密碼和用戶名。

      (2)管理員登陸adminer_login():管理員需輸入登錄名和密碼,為了安全登錄,將輸入密碼錯誤次數(shù)限制在5次。其中管理員密碼和用戶名以及初始用戶名和密碼從管理員文件里讀出賦值給全局變量。當(dāng)輸入正確時,管理員功能界面函數(shù)admin_menu();當(dāng)密碼輸入錯誤達6次以上,將調(diào)用鎖定系統(tǒng)函數(shù)lock_admin_menu(),將系統(tǒng)鎖定,下次進入系統(tǒng)時將不再顯示登陸界面,而是初始管理員登陸。

      (3)管理員采編入庫insert_stock():輸入新書的信息,調(diào)用SearchBTree_ID()按照書號在B-樹搜索書籍,如果沒有找到,返回書籍插入的位置,然后調(diào)用插入函數(shù)InsertBTree_Name(),InsertBTree_ID(),分別將書籍按書名和書號插入到相應(yīng)的樹中,同時將書籍信息插入到書籍鏈表里調(diào)用ListInsert_Book();同時將全局變量書籍總數(shù)booknum加1。

      (4)管理員清除庫存deletestock():根據(jù)書號書名搜索到書籍,在B-樹中刪除書籍,同時在書籍信息鏈表里刪除。并將書籍總數(shù)booknum減1。

      (5)管理員讀者模塊adminer_reader():有刪除讀者和注冊讀者兩個功能,刪除讀者,按讀者的ID查找到,在讀者信息鏈表里刪除讀者,讀者總數(shù)readernum減1;注冊讀者,初始密碼為讀者ID后6位,同時讀者總數(shù)readernum加1。

      (6)管理員修改用戶名和密碼adminer_change_password():連續(xù)兩次輸入新密碼,兩次結(jié)果一樣,修改成功。

      (7)學(xué)生登陸student_login():輸入密碼成功,調(diào)用 stu_menu()功能界面。(8)學(xué)生借書borrow():有兩種搜索所借書籍的方式,按書名搜索,按書號搜索,使用相應(yīng)的B-樹搜索功能。借書成功后,將書籍信息寫到讀者當(dāng)前所借書籍里面。并將書籍當(dāng)前存量減1.(9)學(xué)生還書back():進入還書界面,將顯示出讀者當(dāng)前所借書籍,讓讀者選擇歸還書籍。歸還后將書籍從讀者當(dāng)前所借書籍里刪除,此書當(dāng)前存量加1,并將書籍信息寫到讀者借閱歷史里面。

      (10)學(xué)生續(xù)借renew():顯示當(dāng)前所借書籍信息,讀者選擇續(xù)借書目,當(dāng)書籍信息的續(xù)借標(biāo)志為0時可以續(xù)借,否則 不能續(xù)借,續(xù)借成功,將對應(yīng)的讀者當(dāng)前所借書籍的續(xù)借標(biāo)志置為1.(11)學(xué)生查詢最后還書期限deadline():進入之后顯示當(dāng)前所借書籍信息,里面包含最后還書期限。

      (12)學(xué)生查詢借閱歷史history():顯示讀者信息里面的借閱歷史。

      (13)學(xué)生修改密碼change_reader_password():兩次新密碼輸入一致,修改成功。(14)鎖定系統(tǒng)admin_lock(),鎖定系統(tǒng)后登陸lock_admin_menu():全局變量m_lock,當(dāng)其值為1時解鎖,值為0時鎖定。

      (15)建立讀者書籍鏈表readreader(),readbook():首先從文件中讀取讀者總數(shù),采用for循環(huán),將每個讀者信息寫到鏈表里,在循環(huán)中,讀取讀者的ID、姓名、密碼,然后讀取讀者當(dāng)前所借書籍,采用for循環(huán),將所借書籍信息寫到數(shù)組里面,依次讀取所借書籍信息。之后讀取讀者歷史所借書籍?dāng)?shù)量,當(dāng)數(shù)量大于15時,使用for循環(huán),循環(huán)15次,依次讀取書籍信息;如果 數(shù)量小于等于 15,采用for循環(huán),循環(huán)當(dāng)前借閱歷史書籍?dāng)?shù)量次,將書籍信息寫道數(shù)組中。然后將每個讀者插入到鏈表里。書籍鏈表類似讀者鏈表的建立。

      (16)B-樹的搜索插入刪除功能(以按書名建立的B-樹為例);搜索,SearchBTree_ID(),搜索成功返回搜索到的位置,搜索失敗,返回插入的位置。Search_Name()函數(shù)將在當(dāng)前節(jié)點搜索到關(guān)鍵字的位置。

      插入,InsertBTree_Name(),如果為空,調(diào)用NewRoot_name()函數(shù),建立根節(jié)點。如果不為空,將調(diào)用Insert_Name()將插入到節(jié)點里,判斷是否大于最大關(guān)鍵字個數(shù),如果大于,調(diào)用Split_Name()進行分裂。刪除,并非自己完成,參考網(wǎng)上代碼。

      (16)建立B-樹newBT():按書名建立,使用B樹搜索功能,沒有找到,將根據(jù)返回的位置進行插入。按書號的類似。

      (17)打印文件printftxt():分別將書籍和讀者 信息寫到文件里,同時將管理員信息也寫道文件中。在每個退出系統(tǒng)的接口中都進行調(diào)用此函數(shù),保證文件不丟失,同時更新文件信息。

      3.調(diào)試分析

      在進行調(diào)試時,有很多內(nèi)存讀寫錯誤,問題的根本原因是在進行結(jié)構(gòu)體賦值前,沒有將結(jié)構(gòu)體里面包含的結(jié)構(gòu)體或者數(shù)組鏈表進行初始化,導(dǎo)致問題十分嚴(yán)重普遍。

      4.用戶手冊

      首先登陸時有兩種登陸:讀者和管理員。然后管理員登陸功能有采編入庫,清除庫存,讀者模塊,書籍查詢,修改密碼和用戶名。讀者登陸有借書,還書,續(xù)借,修改密碼,查詢借閱歷史,查詢截至日期。

      管理員登陸用戶名:123456,密碼:123456 管理員初始用戶名:20121002932,初始密碼:167350 讀者的ID和密碼請到reader.txt文件中查詢,文件格式見下面說明。文件的格式: 1.reader.txt:

      其中第一行的數(shù)字“4”為當(dāng)前讀者總數(shù),第二行為: ID 名字 密碼 第三行的數(shù)字”0“為當(dāng)前所借書籍?dāng)?shù)量,之后為所借書籍信息: 書號 名稱 作者 借閱時間年 月 日 最后還書日期年 月 日 是否續(xù)借 第三行數(shù)字 “0”為歷史所借書籍?dāng)?shù)量,之后為所借書籍信息: 書號 名稱 作者 借閱時間年 月 日 還書日期年 月 日 是否續(xù)借 2.book.txt:

      第一行數(shù)字”4“為當(dāng)前書籍總數(shù) 第二行為書籍信息:

      書號 書名 作者 現(xiàn)存量 總存量

      第三行數(shù)字”0“為讀者借閱歷史,以《飛鳥集》為例:

      ID

      姓名

      借閱時間年 月 日

      還書時間年 月 日 是否續(xù)借 20121002932 王瑞林

      114

      17

      5 17 1 3.a(chǎn)dminer.txt:

      第一行:管理員名稱;

      第二行:管理員登陸密碼; 第三行:管理員初始用戶名; 第四行:管理員初始密碼;

      第五行:鎖定系統(tǒng)標(biāo)志,此時為未鎖定狀態(tài)。

      5.測試數(shù)據(jù)及測試結(jié)果

      初始登陸界面:

      管理員登陸界面:

      采編入庫:

      清除庫存: 讀者模塊:

      刪除讀者:

      此時刪除讀者后,讀者文件中應(yīng)該不存在該讀者。書籍查詢:

      修改用戶名和密碼:

      修改用戶名:

      修改密碼:

      修改用戶名和密碼后,退出系統(tǒng)后,查看adminer.txt文件,第一行和第二行為用戶名和密碼,將改變?yōu)?567890。讀者登陸:

      讀者借書:

      當(dāng)讀者借書成功之后退出系統(tǒng),在reader.txt文件中對應(yīng)讀者的ID信息的縮進的第二級為讀者當(dāng)前所借書籍?dāng)?shù)量和所借書籍信息,在此之后可以看到讀者現(xiàn)在所借書籍信息 讀者還書:

      讀者還書后,在reader.txt文件中,縮進的第三級為讀者歷史借閱書籍?dāng)?shù)量和書籍信息,此時應(yīng)該看到剛才還書的信息。

      讀者續(xù)借:

      當(dāng)讀者還書成功后,對應(yīng)的當(dāng)前所借書籍的flag值為1.查詢借閱歷史:

      查詢截至日期: 修改登錄密碼:

      當(dāng)修改成功之后,reader.txt文件中對應(yīng)讀者的信息密碼修改為當(dāng)前密碼。

      6.致謝

      感謝郭老師的指導(dǎo),讓我們在實踐中提高了合理設(shè)計數(shù)據(jù)結(jié)構(gòu)的能力,鞏固了課堂所學(xué)。同時感謝王鑫學(xué)姐,幫助我們調(diào)試程序,并傳輸經(jīng)驗。

      7.參考文獻

      《數(shù)據(jù)結(jié)構(gòu)—使用C語言》第四版 朱站立編著 《C程序設(shè)計》第四版 譚浩強編著

      下載數(shù)據(jù)結(jié)構(gòu)課程設(shè)計—java通訊錄管理系統(tǒng)word格式文檔
      下載數(shù)據(jù)結(jié)構(gòu)課程設(shè)計—java通訊錄管理系統(tǒng).doc
      將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
      點此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進行舉報,并提供相關(guān)證據(jù),工作人員會在5個工作日內(nèi)聯(lián)系你,一經(jīng)查實,本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-職工管理系統(tǒng)(精選五篇)

        目錄 一、前言--------2 二、需求分析--3 三、概要設(shè)計--4 四、詳細(xì)設(shè)計--5 五、調(diào)試分析--6 六、用戶使用說明---------------------------7 七、測試結(jié)果--8 八、......

        通訊錄管理系統(tǒng)大全

        課 程 設(shè) 計 任 務(wù) 書 題目 C語言課程設(shè)計 系(部) 專業(yè)班級學(xué)生姓名學(xué)號 06 月信息科學(xué)與電氣工程學(xué)院計算機科學(xué)與技術(shù) 計職141 王雪 140819139 21 日至07 月04 日共 2......

        通訊錄管理系統(tǒng)

        摘 要 為了人們對他人信息的記憶方便而設(shè)計,開發(fā)的一套“通訊錄管理系統(tǒng)“軟件。 通過該題目的設(shè)計過程,可以培養(yǎng)學(xué)生結(jié)構(gòu)化程序設(shè)計的思想,加深對高級語言基本語言要素和控制......

        數(shù)據(jù)結(jié)構(gòu)課程設(shè)計——成績管理系統(tǒng)(共五則范文)

        數(shù)據(jù)結(jié)構(gòu) 課程設(shè)計 (1)學(xué)生成績管理問題(建議數(shù)據(jù)結(jié)構(gòu):單鏈表) 學(xué)生成績管理是學(xué)校教務(wù)管理的重要組成部分,其處理信息量很大,本設(shè)計是對學(xué)生的成績管理做一個簡單的模擬,用菜單選擇......

        學(xué)生通訊錄管理系統(tǒng)(C語言課程設(shè)計實驗報告)

        C語言課程設(shè)計報告——劉顯安 C語言課程設(shè)計 姓名:劉顯安 學(xué)號:09041131 班級:090411 專業(yè):計算機科學(xué)與技術(shù) 學(xué)院:信息工程學(xué)院 設(shè)計題目:學(xué)生通訊錄管理系統(tǒng) 指導(dǎo)教師:宋文琳 提......

        C語言課程設(shè)計學(xué)生通訊錄管理系統(tǒng)設(shè)計

        C語言課程設(shè)計學(xué)生通訊錄管理系統(tǒng)設(shè)計一、題目內(nèi)容的描述學(xué)生通訊錄管理系統(tǒng)設(shè)計設(shè)計一個學(xué)生通信錄,學(xué)生通迅錄數(shù)據(jù)信息構(gòu)成內(nèi)容可自行設(shè)計(如:姓名、家庭地址、郵政編碼、電......

        數(shù)據(jù)結(jié)構(gòu)課程設(shè)計 飛機訂票系統(tǒng)

        飛機訂票系統(tǒng) 1. 需求分析描述要求編程解決的問題。以無歧義的陳述說明程序設(shè)計的任務(wù),強調(diào)的是程序要做什么?明確規(guī)定: (a) 輸入的形式和輸入值的范圍;(b) 輸出的形式;(c) 程......

        數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-停車場管理

        課 程 設(shè) 計 報 告 課程名稱 數(shù)據(jù) 結(jié)構(gòu)題目 停車場管理學(xué)生姓名 班級/學(xué)號 191103 一、 需求分析 設(shè)停車場是一個可停放n輛汽車的狹長通道,且只有一個大門可供 汽車進出。汽......