學生檔案管理系統設計分析

大致分爲以下幾個摸塊:

系統一運行,顯示菜單的同時,
並打開文件,若文件存在(打開文件成功),則輸入模塊無效(文件指針pfile!= NULL),並立即關閉文件;
                          若文件不存在(打開文件不成功),則輸入模塊有效(pfile = NULL)。

**********************************************************************************************
【信息輸入模塊(int input( ) ): 】
 (返回1—成功;返回0—失敗)
 主要讓用戶輸入學生的檔案信息(姓名,年齡,班級,性別,家庭住址,電話,學號);
若pfile = NULL,則做以下工作:
 1,讓用戶輸入學生總數;
 2,系統根據學生總數創建一個結構數組;
 3,依次輸入各數據域,並讀入結構數組;
 4,建立文件,並寫文件;
 5,關閉文件;
若pfile = NULL,則不執行此模塊,並顯示出錯信息,按任意鍵返回菜單;

【信息輸出模塊(int output( ) ): 】
 (返回1—成功;返回0—失敗)
 主要讓用戶輸出已做改動的檔案信息;
若pfile != NULL,則做以下工作:
 利用數組存儲數據;
 利用表頭的形式顯示信息;
若pfile = NULL , 則不執行此模塊,並顯示出錯信息,按任意鍵返回菜單;

***********************************************************************************************
【信息修改模塊(int modify(int number[]) ): 】
 (返回1—成功;返回0—失敗)(number爲學號)
 主要讓用戶修改學生的檔案信息;(&M)
若pfile != NULL,則做以下工作:
 1,輸入用戶想修改的學生記錄的學生學號;
 2,查找此學生記錄,若存在就繼續;如不存在則顯示出錯信息;
 3,顯示此學生信息;
 4,提示用戶修改信息(每字段提示一下);
 5,修改完畢,返回菜單。
若pfile = NULL , 則不執行此模塊,並顯示出錯信息,按任意賤返回菜單;
 
【信息添加模塊(int add( ) ): 】
 (返回1—成功;返回0—失敗)
 主要讓用戶增加不在數據庫中的某個學生信息;(&A)
若pfile != NULL,則做以下工作:
 1,顯示輸入信息界面;
 2,以學號爲關鍵字查找此學生信息,如存在,則顯示出錯信息;否則繼續。
 3,若輸入完畢,則退出此模塊並返回至菜單界面。
若pfile = NULL , 則不執行此模塊,並顯示出錯信息,按任意鍵返回菜單;

【信息刪除模塊(int delete(int number[]) ): 】
 (返回1—成功;返回0—失敗)(number爲學號)
 主要讓用戶刪除已不在校的學生信息;(&D)
若pfile != NULL,則做以下工作:
 1,要求用戶輸入想刪除的學生記錄的學號;
 2,以學號爲關鍵字查找此記錄,若存在則顯示信息並釋放節點;不存在,則顯示出錯信息;
 3,退出模塊並返回至菜單界面。
若pfile = NULL , 則不執行此模塊,並顯示出錯信息,按任意鍵返回菜單;

【信息查找模塊(int find(int number[]) ): 】
 (返回1—成功;返回0—失敗)(number爲學號)
 主要讓用戶查找某個特定的學生信息;(&F)
 本模塊在刪除和修改中要用到,所以宜設爲外部函數;
若pfile != NULL,則做以下工作:
 1,要求用戶輸入要查找的學生學號;
 2,以學號爲關鍵字查找信息;
 3,如存在,則顯示此信息並返回至菜單界面;若不存在則顯示出錯信息。
若pfile = NULL , 則不執行此模塊,並顯示出錯信息,按任意鍵返回菜單;

**********************************************************************************************
【信息存盤模塊(int save(char string[]) ): 】
 (返回1—成功;返回0—失敗)(string爲文件名)
 主要讓用戶保存檔案信息,以便下次讀取;

【信息讀盤模塊(int read(char string[]) ): 】
 (返回1—成功;返回0—失敗)(string爲文件名)
 主要讓用戶讀取已保存的檔案信息;
**********************************************************************************************

【數據存儲結構:】
    對於單個學生採取一個結構:
    struct STUDENT
    {
 char name[20];
 int number[8];
 char sex; //f&m
 int age;
 int class;
 int phcde[7];
 char address[30];
    };
   
    對於全班的所有同學(最多30人)採取鏈式存儲結構。
 爲了採取這種存儲結構,在學生的結構中要再加一個next指針指向節點。

    爲了節省存儲空間,採取動態申請的方法( malloc() )。

    除此之外,還有各種其他的數據:
 循環變量: register int i,j....
       
【預計難點:】
 1,   文件的存儲是個關鍵。
     當以"r"爲打開方式時,只讀;若文件不存在,則返回空指針。
     當以"w"爲打開方式時,只寫;若文件不存在,則生成文件。
     當以"a"爲打開方式時,追加;此時要求文件一定存在,若不存在,則失敗。
 r+,w+,a+類似;rb,wb,ab也相似,只不過是以二進制方式!
    結合以上,可以通過返回指針是否爲空來判斷文件是否打開成功!

【文件的存取<read,write>基本算法:】
void Data_Save(struct record *p)  /*記錄文件的存取*/
{
      int j;
      fp = fopen( "tele_rec.txt " , "w" ); /*以可寫方式打開記錄文件*/
      while( p != NULL ) /*若未到隊尾,徨將記錄存儲到文件中*/
      {
            fwrite(p, sizeof(struct record), 1, fp);
            p = p->next;
      }
      fclose( fp ); /*關閉指定的文件*/
}

struct event * Data_Load() /*從記錄文件中讀取記錄*/
{
      long k;
      struct record *p, *q;11
      p = event_head.next;
      fp = fopen("tele_rec.txt", "r+t"); /*以讀方式打開記錄文件*/
      if ( fp != NULL )
      {
            while( !feof(fp)) /*依次讀取記錄並執行入隊操作*/
            {
                  fread(q, sizeof( struct record ), 1, fp);
                  p->next = q; /*這裏p爲尾指針,q爲指向新節點的指針*/
                  p = q;
            }
            p->next = NULL;
            event_end = p;
      }
      else
      {
            fp = fopen("tele_rec.txt","w"); /*若文件不存在,創建指定文件名的新文件*/
            event_head.next = NULL;
            event_end = event_head.next;
      }
}
  其實,文件操作有很多函數,除fopen,fclose外,還有fwrite,fread,fprintf,fscanf,
        rewend,ftell,fseek,ferror,fputc,fgetc等;

2,    其次,輸入的界面也是個問題。
 如果用表頭,則要注意回車和製表符的控制。
 如果用一行行的提示,就顯得有點老套。
    結合以上,還是採取表頭的輸入比較好點。
****從這個問題中也就要求在今後的的實踐中多注意UI的設計,儘量設計出一個比較通用的界面。

3,    刪除或添加記錄時,移動記錄也是個關鍵:
 由於數據是以結構數組存儲的,所以每變動一條記錄,就需移動之後的所有記錄,時間是個問題!

5,進入系統之前下載(讀取)文件;退出系統之前保存文件。

6,菜單要顯示,特別是功能鍵要加上大小寫的處理。

7,要注意函數的設計,每個函數功能要單一,函數最好被控制在50行之內!(學以致用嘛!^_^)

【製作目的:】
1,弄清楚函數返回值以及參數傳遞的問題。
2,指針是另一個方面!
3,弄懂讀盤和存盤的基本形式(即文件的基本操作)
4,熟悉各種常用函數的運用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章