亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? readerms.c

?? 是一個比較好的圖書管理系統
?? C
字號:
/**********************************************/
/*         ReaderMS.c                         */
/**********************************************/

#include <stdio.h>
#include <string.h>

#define PAGESIZE 20
#define RDIDSZ 6
#define RDNAMESZ 16
#define GRADESZ 5
#define MAJORSZ 16

struct ReaderInfor
{
    char rdID[RDIDSZ];
    char Name[RDNAMESZ];
    char Grade[GRADESZ];
    char Major[MAJORSZ];
};


struct ReaderInfor *cur_reader_ptr;
static const int RDRECSIZE = sizeof(struct ReaderInfor);
static int reader_total = 0;
static int reader_newID_Position = 0;  /*記錄下次插入記錄時的起始搜索未知 */
static int reader_delete_total = 0;


/******************************************/
/*        funtions declarations           */

void Reader_File_Init();
void Get_Reader_Infor();
void Save_Reader_Infor_Word();
int  Load_Reader_Record(int recordNum);
void Save_Reader_Node();

int Add_New_Reader();
int reader_Alloc_NewID();
int reader_Search_Null_Record();
void Get_Grade(char *instr);
int Assure_Grade_True(char *str);

void Display_cur_Reader_Record();
void Display_Reader_List();





/**************************************************************/
/*    Initailize the book datafile, if the file is not exsit, */
/* to create a new file. If it is exsit and is a new file,    */
/* the InforWord is not exsit, to write the new InforWord to  */
/* the head of the file                                       */

void Reader_File_Init()
{
     char ch;
     char str[6];
     FILE *fp;
     printf("Reader File Initializing...\n");
     delay(3000);
     if((fp=fopen("ReaderData.txt","r"))==NULL)
     {
         printf("Open File Error!\n");
         printf("Press any key to create a new file!");
         getch();
         printf("\n");

         /*the file is not exist, create the file   */
         if((fp=fopen("ReaderData.txt","w+"))==NULL)
         {
             printf("Create File Error!\n");
             return;
         }
         printf("Create file successful!\n");
         printf("The file is BookData.txt!\n");
     }

     ch = fgetc(fp);
     fclose(fp);   /*打開文件讀出首字符后關閉文件   */
           /*因為后面的Save_Reader_Infor_Word()將再次打開文件 */

     if(ch==EOF)  /*若文件為空時,調用函數Save_Reader_Infor_Word()在文件頭寫入信息字段*/
     {
         reader_total = 0;
         Save_Reader_Infor_Word();
     }
     return;
}



/*****************************************************/
/* to get the book record total in the data file     */
/* and to get the posotion the newID will start form */

void Get_Reader_Infor()
{
   FILE *rfp;
   int num;
   char ch;
   char str1[6], str2[6], str3[6];

   if((rfp=fopen("ReaderData.txt","r")) != NULL)
   {
       fgets(str1, 6, rfp);
       reader_total = atoi(str1);

       fgets(str2, 6, rfp);
       reader_newID_Position = atoi(str2);

       fgets(str3, 6, rfp);
       reader_delete_total = atoi(str3);

       num = atoi(str1) - atoi(str3);
       printf("There are  %d reader records in the reader file.\n", num);
   }
   else
   {
       printf("Open File Error!\n");
       return;
   }

   fclose(rfp);
   return;
}



/*********************************************************/
/* if the infor_word has been modified, this function to  */
/* save the new infor_word to the data file      */

void Save_Reader_Infor_Word()
{
    FILE *wfp;
    char str1[6],str2[6],str3[6];
    sprintf(str1, "%-5d", reader_total);
    sprintf(str2, "%-5d", reader_newID_Position);
    sprintf(str3, "%-5d", reader_delete_total);

    if((wfp=fopen("ReaderData.txt","r+")) == NULL)
    {
    printf("Open File Error!\n");
    return;
    }

    fputs(str1, wfp);
    fputs(str2, wfp);
    fputs(str3, wfp);

    fclose(wfp);
    wfp = NULL;
    return;
}


/*****************************************************************/
/* to load a record from the file to the pointer(cur_reader_ptr) */

int Load_Reader_Record(int recordNum)
{
    FILE *rfp;
    char ch;
    int step = 0, loop;
    struct ReaderInfor *new_Node_ptr;
    new_Node_ptr =
         (struct ReaderInfor*)malloc(RDRECSIZE);

    if(recordNum >= reader_total)
        return -1;

    if((rfp=fopen("ReaderData.txt","r")) == NULL)
    {
     printf("Open File Error!\n");
     return 0;
    }

    step = recordNum * (RDRECSIZE+1);
    step += 15;
    fseek(rfp, step, 0);

    ch = fgetc(rfp);
    if(ch != '0')
    {
        fread(new_Node_ptr, RDRECSIZE, 1, rfp);
        cur_reader_ptr = new_Node_ptr;
        new_Node_ptr = NULL;
    }
    else
        return -1;

    fclose(rfp);
    return 1;
}


/***********************************************************/
/* when add a new book, this function to save the new node  */
/* to the data file */

void Save_cur_Reader_Node()
{
    int num, step;
    FILE *wfp;
    num = atoi(cur_reader_ptr->rdID);
    
    /*找到記錄插入位置  */
    step = num * (RDRECSIZE+1);
    step += 15;
    if((wfp=fopen("ReaderData.txt","r+")) == NULL)
    {
     printf("Open File Error!\n");
     return;
    }
    fseek(wfp, step, 0);

    fputc('1', wfp);  /*寫入記錄狀態標志,1表示該記錄有效*/
    fwrite(cur_reader_ptr, RDRECSIZE, 1, wfp);  /*用數據塊寫入方式 */

    printf("Add successfully!\n");
    fclose(wfp);   /*關閉文件*/
    return;
}


/*****************************/
/*    Add a new reader       */

int Add_New_Reader()   /* 返回的新添加讀者號,為添加相應的借閱記錄提供位置 */
{
    int num, i, rdID;
    char c;
    char newID[RDIDSZ], instr[RDNAMESZ], str[RDNAMESZ];
    struct ReaderInfor *new_node_ptr;
    new_node_ptr =
         (struct ReaderInfor*)malloc(RDRECSIZE);

    if(new_node_ptr==NULL)
    {
        printf("WARNING:Memory Error!\n");
        return -1;
    }

    /*分配讀者證號*/
    num = reader_Alloc_NewID();
    rdID = num;
    for(i=RDIDSZ-2; i>=0; i--)
    {
         newID[i] = num%10 + 48;
         num = num/10;
    }
    newID[RDIDSZ-1] = '\0';
    printf("new ReaderID: %s\n", newID);
    strcpy(new_node_ptr->rdID, newID);
     
    /*獲得讀者姓名*/
    printf("Please Input Reader's name(1~15 chars):\n");
    gets(instr);
    while(strlen(instr) > RDNAMESZ)
    {
       printf("Wrong input, it is too long!\n");
       printf("Please Input Reader's name(1~15 chars):\n");
       gets(instr);
    }
    sprintf(str, "%-15s", instr);
    strcpy(new_node_ptr->Name, str);

    /*獲得讀者年級*/
    Get_Grade(instr);
    strcpy(new_node_ptr->Grade, instr);

    /*獲得德讀者專業*/
    printf("Please Input Reader's Major(1~15 chars):\n");
    gets(instr);
    while(strlen(instr) > MAJORSZ)
    {
       printf("Wrong input, it is too long!\n");
       printf("Please Input Reader's Major(1~15 chars):\n");
       gets(instr);
    }
    sprintf(str, "%-15s", instr);
    strcpy(new_node_ptr->Major, str);

    cur_reader_ptr = new_node_ptr;
    new_node_ptr = NULL;

    /*詢問是否添加該新書 */
    printf("Add this reader? (y/n):");
    c = getch();
    printf("%c\n", c);
    if(c=='y'||c=='Y')
    {
        Save_cur_Reader_Node(); /*保存讀者信息, 寫入文件*/

        free(cur_reader_ptr);    /*釋放指針 */
        cur_reader_ptr = NULL;
         
        if(rdID==reader_total)  /*若記錄是在最后插入的,則記錄總數應該加1*/
        {                       /*新插入點為最后*/
             reader_total++;
             reader_newID_Position = reader_total;
        }
        else
        {
             reader_newID_Position = rdID+1;
             reader_delete_total--; /* 在中間插入一個新紀錄,則中間的無效記錄數目減一 */
        }

        Save_Reader_Infor_Word();
    }
    else
    {
        printf("Adding cancled!\n");
    }

    free(cur_reader_ptr);
    cur_reader_ptr = NULL;
    
    return rdID;
}


/***********************************************************/
/*  to allocate a new ID to the new reader automatically   */

int reader_Alloc_NewID()
{
    int num;
    int result, i;

    if(reader_newID_Position==reader_total) /*前面沒有空記錄,從后面依次分配*/
         num = reader_newID_Position;

    /*存在空記錄,調用函數Search_Null_Record()搜索book_newID_Position后的*/
    /*第一條空記錄位置作為新數添加的位置  */
    else
    {
        result = reader_Search_Null_Record();
        if(result < 0)
        {
           printf("Allocate newID Failed!\n");
           return -1;
        }
        else
           num = result;
    }
    return(num);
}


/**********************************************************************/
/*start from the book_newID_Position to search the ineffective record */
int reader_Search_Null_Record()
{
    char ch;
    FILE *rfp;
    int  step;

    if((rfp=fopen("ReaderData.txt","r")) == NULL)
    {
        printf("Open File Error!\n");
        return -1;
    }

    step = reader_newID_Position * (RDRECSIZE+1);
    step += 15;
    fseek(rfp, step, 0);
    ch = fgetc(rfp);     /*讀有效標志 */
    while((ch=='1')&&(reader_newID_Position<reader_total))
    {
        reader_newID_Position++;
        fseek(rfp, RDRECSIZE, 1);   /*跳過一條記錄*/
        ch = fgetc(rfp);   /*讀有效標志  */
    }
    fclose(rfp);

    return(reader_newID_Position);
}


/***************************************************/
/*  get the grade of the new reader from the user  */

void Get_Grade(char *str)
{
    int loop;
    char instr[GRADESZ];

    do    /* 檢驗輸入的年級格式是否正確*/
    {
       printf("Please Input Reader's Grade(4 chars,like:2004):\n");
       gets(instr);
       loop = Assure_Grade_True(instr);
       if(loop==-1)
            printf("Wrong input!\n");
    }while(loop==-1);

    strcpy(str, instr);
    return;
}


/****************************************/
/*  to judge the grade is legal or not  */

int Assure_Grade_True(char *str)
{
    int i;
    char ch;
    if(strlen(str)!= GRADESZ-1)
        return -1;
    for(i=0; i<GRADESZ-1; i++)
    {
        ch = *(str+i);
        if(ch<48 || ch>57)
            return -1;
    }
    return 1;
}


/******************************************************/
/*  display current reader record information         */
void Display_cur_Reader_Record()
{
   printf("\t %s |", cur_reader_ptr->rdID);
   printf("  %s |", cur_reader_ptr->Name);
   printf(" %s  |", cur_reader_ptr->Grade);
   printf("  %s", cur_reader_ptr->Major);
   printf("\n");
   return;
}


/***************************************/
/*    display a list of all readers    */

void Display_Reader_List()
{
    int i, dsp_total=0;
    int loop;

    clrscr();
    if(reader_total==0)
    {
        printf("There is no reader!\n");
        return;
    }
    
    for(i=0; i<reader_total; i++)
    {
        loop = Load_Reader_Record(i);
        if(loop==-1)
            continue;
        dsp_total++;
        if(dsp_total % PAGESIZE==1)
        {
            clrscr();
            printf("\t Number|      Name        | Grade |      Major       \n");
            printf("\t-----------------------------------------------------\n");
        }
        Display_cur_Reader_Record();

        /*************釋放指針(釋放內存空間是很重要的)*************** */
        free(cur_reader_ptr);
        cur_reader_ptr = NULL;

        if(dsp_total % PAGESIZE==0)  /* 分頁顯示 */
        {
            printf("\nPress any key to the next page!\n");
            getch();
        }

    }
    printf("\n   There are  %d  readers total.\n", reader_total - reader_delete_total);
   
    return;
}





?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜精品久久久久久久蜜桃app| 成人app网站| 国产成人综合在线播放| 欧美亚洲综合久久| 国产精品嫩草影院av蜜臀| 日本欧美韩国一区三区| 91麻豆免费观看| 国产女人18水真多18精品一级做| 亚洲国产精品一区二区久久恐怖片 | 色偷偷成人一区二区三区91| 欧美v国产在线一区二区三区| 一区二区三区中文字幕| 成人短视频下载| 国产亚洲综合色| 国内精品国产成人国产三级粉色| 在线国产亚洲欧美| 亚洲激情欧美激情| 91色.com| 一区二区三区资源| 色综合久久久久综合| 国产精品福利电影一区二区三区四区| 精品一区二区三区免费播放| 91精品免费观看| 亚洲少妇30p| 91丨国产丨九色丨pron| 国产精品青草综合久久久久99| 国产剧情av麻豆香蕉精品| 日韩欧美在线一区二区三区| 日本美女视频一区二区| 欧美一区二区三区思思人| 偷窥国产亚洲免费视频| 91精品在线麻豆| 美女视频免费一区| 久久婷婷综合激情| 国内精品伊人久久久久av影院 | 91久久精品国产91性色tv | 美日韩一区二区| 精品国产乱子伦一区| 精品一区二区在线看| 日韩午夜在线观看视频| 国产曰批免费观看久久久| 久久夜色精品国产噜噜av| 国产一区二区三区在线观看免费| 国产欧美日韩不卡| 色婷婷国产精品| 午夜在线成人av| 精品国产91九色蝌蚪| 国产精品香蕉一区二区三区| 国产精品高潮呻吟| 欧美性受xxxx黑人xyx性爽| 日韩—二三区免费观看av| 精品国产伦理网| 91在线观看视频| 日韩专区一卡二卡| 国产日韩在线不卡| 99国产精品视频免费观看| 一区二区三区在线观看网站| 91精品国产一区二区三区 | 精久久久久久久久久久| 国产精品久久久久久久第一福利| 色婷婷综合久久久久中文 | 不卡的av在线播放| 天天色综合成人网| 国产嫩草影院久久久久| 欧美日韩免费观看一区三区| 精品一区二区影视| 亚洲男同性恋视频| 91精品国产综合久久久久| 成人晚上爱看视频| 婷婷开心激情综合| 国产精品久久久久永久免费观看| 欧美性猛片aaaaaaa做受| 成人午夜精品在线| 亚洲成人动漫av| 欧美激情一区二区三区在线| 在线电影国产精品| 99久久综合狠狠综合久久| 奇米精品一区二区三区在线观看一| 日本一区二区视频在线观看| 在线综合视频播放| 色婷婷激情久久| 国产福利不卡视频| 日本欧美一区二区三区| 亚洲视频一区二区免费在线观看| 精品av久久707| 7777精品伊人久久久大香线蕉| 成人精品小蝌蚪| 国产一区视频导航| 麻豆国产欧美日韩综合精品二区| 亚洲精品欧美激情| 国产精品国产精品国产专区不蜜 | 欧美人妇做爰xxxⅹ性高电影| 成人免费视频app| 久久国产精品色婷婷| 婷婷一区二区三区| 亚洲综合清纯丝袜自拍| 亚洲视频一区二区在线| 国产精品久久久久久久久免费樱桃| 日韩欧美国产精品一区| 欧美精品在欧美一区二区少妇| 91色.com| 91福利区一区二区三区| 99国产一区二区三精品乱码| 国产成人99久久亚洲综合精品| 国产自产高清不卡| 精品一区二区成人精品| 日本不卡123| 美女视频网站黄色亚洲| 免费观看成人av| 久久国产精品72免费观看| 久久精品国产77777蜜臀| 久久国产精品色| 久久综合综合久久综合| 韩国av一区二区三区在线观看| 久久国产精品99久久久久久老狼| 六月丁香综合在线视频| 久久99精品国产麻豆不卡| 国产一区二区调教| 福利一区二区在线| 99久久精品99国产精品| 色综合一个色综合| 欧美日韩黄色一区二区| 欧美一区二区大片| 久久免费视频一区| 国产精品二区一区二区aⅴ污介绍| 中文字幕一区在线观看| 一区二区三区在线免费视频| 亚洲成av人片在线观看| 久久国产精品一区二区| 豆国产96在线|亚洲| 日本韩国精品在线| 欧美日韩国产免费一区二区 | 亚洲欧洲一区二区在线播放| 亚洲男人的天堂在线观看| 亚洲国产精品久久一线不卡| 日本欧美一区二区三区乱码| 国产一区二区伦理| 91年精品国产| 欧美一区二区三区视频免费| 久久久国产精品不卡| 亚洲天堂免费在线观看视频| 午夜影视日本亚洲欧洲精品| 国产一区二区三区综合| 一本久道久久综合中文字幕| 日韩一区二区三区av| 国产日韩欧美精品电影三级在线 | 精品综合久久久久久8888| 成人动漫一区二区三区| 精品美女在线观看| 国产精品久久一级| 日本aⅴ精品一区二区三区| 成人精品国产免费网站| 7799精品视频| 亚洲国产成人一区二区三区| 午夜一区二区三区视频| 丰满岳乱妇一区二区三区| 欧美精品在线观看播放| 国产精品久久久久久久久免费相片 | 欧美日韩国产影片| 国产嫩草影院久久久久| 日韩不卡手机在线v区| av一二三不卡影片| 2020国产精品| 日韩精品视频网| 色av综合在线| 欧美国产成人在线| 奇米影视一区二区三区小说| 日本精品视频一区二区三区| 国产亚洲午夜高清国产拍精品| 亚洲成人动漫精品| 日本韩国欧美一区| 国产精品欧美久久久久无广告| 久久电影网站中文字幕 | 精品久久人人做人人爱| 亚洲小少妇裸体bbw| 色综合久久久久网| 国产精品美女视频| 国产一区二区三区精品欧美日韩一区二区三区| 色中色一区二区| 国产精品久久久久四虎| 高清成人在线观看| 久久久久9999亚洲精品| 黄色成人免费在线| 精品欧美一区二区三区精品久久| 日韩精品一二三四| 欧美男生操女生| 婷婷国产v国产偷v亚洲高清| 欧美性猛片xxxx免费看久爱| 一区二区三区高清| 色婷婷激情久久| 一二三四社区欧美黄| 色噜噜狠狠色综合欧洲selulu| 日韩一区在线看| 99久久国产综合精品色伊| 国产精品久久久久7777按摩| 波多野结衣在线aⅴ中文字幕不卡| 国产欧美精品区一区二区三区 | 中文字幕免费一区| 成年人午夜久久久| 亚洲另类春色国产|