最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言實現(xiàn)圖書管理系統(tǒng)

 更新時間:2018年01月18日 09:39:58   作者:T_tangc  
這篇文章主要為大家詳細介紹了C語言實現(xiàn)圖書管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了C語言實現(xiàn)圖書管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下

一、分析過程

首先此程序需要實現(xiàn)輸入、增加、刪除、查詢、輸出的五大功能,則首先需要設(shè)置一個菜單鍵,讓用戶可以選擇不同的功能,完成不同的操作,然后編寫不同的函數(shù)實現(xiàn)不同的功能,在這個過程中注意要人性化,讓用戶方便,直觀的進行操作。

二、算法

三、函數(shù)模塊介紹

 1錄入模塊:本模塊主要執(zhí)行信息的錄入功能

 2瀏覽模塊:本模塊主要是執(zhí)行把已有信息輸出瀏覽功能

 3查詢模塊:本模塊主要是按照圖書名查找圖書的相關(guān)信息

 4刪除模塊:主要是執(zhí)行刪除圖書信息的功能

 5退出模塊:方便用戶離開

四、源程序

#include<stdio.h> 
#include<math.h> 
#include<string.h> 
#include<stdlib.h> 
 
 
struct books_list 
{ 
 
 char author[20]; /*作者名*/ 
 char bookname[20]; /*書名*/ 
 char publisher[20]; /*出版單位*/ 
 char pbtime[15]; /*出版時間*/ 
 char loginnum[10]; /*登陸號*/ 
 float price;  /*價格*/ 
 char classfy[10]; /*分類號*/ 
 struct books_list * next; /*鏈表的指針域*/ 
}; 
 
struct books_list * Create_Books_Doc(); /*新建鏈表*/ 
void InsertDoc(struct books_list * head); /*插入*/ 
void DeleteDoc(struct books_list * head , int num);/*刪除*/ 
void Print_Book_Doc(struct books_list * head);/*瀏覽*/ 
void search_book(struct books_list * head); /*查詢*/ 
void save(struct books_list * head);/*保存數(shù)據(jù)至文件*/ 
 
/*新建鏈表頭節(jié)點*/ 
struct books_list * Create_Books_Doc() 
{ 
 struct books_list * head; 
 head=(struct books_list *)malloc(sizeof(struct books_list)); /*分配頭節(jié)點空間*/ 
 head->next=NULL; /*頭節(jié)點指針域初始化,定為空*/ 
 return head; 
} 
 
/*保存數(shù)據(jù)至文件*/ 
void save(struct books_list * head) 
{ 
 struct books_list *p; 
 FILE *fp; 
 p=head; 
 fp=fopen("data.txt","w+"); /*以寫方式新建并打開 data.txt文件*/ 
 fprintf(fp,"┏━━━┳━━━━━┳━━━━━┳━━━━━┳━━━━━━┳━━━┳━━━━┓\n"); /*向文件輸出表格*/ 
 fprintf(fp,"┃登錄號┃ 書 名 ┃ 作 者┃ 出版單位 ┃ 出版時間 ┃分類號┃ 價格 ┃\n"); 
 fprintf(fp,"┣━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━━╋━━━╋━━━━┫\n"); 
 /*指針從頭節(jié)點開始移動,遍歷至尾結(jié)點,依次輸出圖書信息*/ 
 while(p->next!= NULL) 
 { 
 p=p->next; 
 fprintf(fp,"┃%-6.6s┃%-10.10s┃%-10.10s┃%-10.10s┃%-12.12s┃%-6.6s┃%.2f ┃\n",p->loginnum,p->bookname,p->author,p->publisher,p->pbtime,p->classfy,p->price); 
 } 
 fprintf(fp,"┗━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━━┻━━━┻━━━━┛\n"); 
 fclose(fp); 
 printf("  已將圖書數(shù)據(jù)保存到 data.txt 文件\n"); 
} 
 
/*插入*/ 
void InsertDoc(struct books_list *head) 
{ 
 /*定義結(jié)構(gòu)體指針變量 s指向開辟的新結(jié)點首地址 p為中間變量*/ 
 struct books_list *s, *p; 
 char flag='Y'; /*定義flag,方便用戶選擇重復輸入*/ 
 p=head; 
 /*遍歷到尾結(jié)點,p指向尾結(jié)點*/ 
 while(p->next!= NULL) 
 { 
 p=p->next; 
 } 
 /*開辟新空間,存入數(shù)據(jù),添加進鏈表*/ 
 while(flag=='Y'||flag=='y') 
 { 
 s=(struct books_list *)malloc(sizeof(struct books_list)); 
 printf("\n  請輸入圖書登陸號:"); 
 fflush(stdin); 
 scanf("%s",s->loginnum); 
 printf("\n  請輸入圖書書名:"); 
 fflush(stdin); 
 scanf("%s",s->bookname); 
 printf("\n  請輸入圖書作者名:"); 
 fflush(stdin); 
 scanf("%s",s->author); 
 printf("\n  請輸入圖書出版社:"); 
 fflush(stdin); 
 scanf("%s",s->publisher); 
 printf("\n  請輸入圖書出版時間:"); 
 fflush(stdin); 
 scanf("%s",s->pbtime); 
 printf("\n  請輸入圖書分類號:"); 
 fflush(stdin); 
 scanf("%s",s->classfy); 
 printf("\n  請輸入圖書價格:"); 
 fflush(stdin); 
 scanf("%f",&s->price); 
 printf("\n"); 
 p->next=s; /*將新增加的節(jié)點添加進鏈表*/ 
 p=s; /*p指向尾節(jié)點,向后移*/ 
 s->next=NULL; 
 printf("  ━━━━ 添加成功!━━━━"); 
 printf("\n  繼續(xù)添加?(Y/N):"); 
 fflush(stdin); 
 scanf("%c",&flag); 
 printf("\n"); 
 if(flag=='N'||flag=='n') 
 {break;} 
 else if(flag=='Y'||flag=='y') 
 {continue;} 
 } 
 save(head); /*保存數(shù)據(jù)至文件*/ 
 return; 
} 
 
/*查詢操作*/ 
 
void search_book(struct books_list *head) 
{ 
 struct books_list * p; 
 char temp[20]; 
 p=head; 
 if(head==NULL || head->next==NULL) /*判斷數(shù)據(jù)庫是否為空*/ 
 { 
 printf(" ━━━━ 圖書庫為空!━━━━\n"); 
 } 
 else 
 { 
 printf("請輸入您要查找的書名: "); 
 fflush(stdin); 
 scanf("%s",temp); 
 /*指針從頭節(jié)點開始移動,遍歷至尾結(jié)點,查找書目信息*/ 
 while(p->next!= NULL) 
 { 
 p=p->next; 
 if(strcmp(p->bookname,temp)==0) 
 { 
 printf("\n圖書已找到!\n"); 
 printf("\n"); 
 printf("登錄號: %s\t\n",p->loginnum); 
 printf("書名: %s\t\n",p->bookname); 
 printf("作者名: %s\t\n",p->author); 
 printf("出版單位: %s\t\n",p->publisher); 
 printf("出版時間: %s\t\n",p->pbtime); 
 printf("分類號: %s\t\n",p->classfy); 
 printf("價格: %.2f\t\n",p->price); 
 } 
 if(p->next==NULL) 
 { 
 printf("\n查詢完畢!\n"); 
 } 
 } 
 } 
 return; 
} 
 
 /*瀏覽操作*/ 
 
void Print_Book_Doc(struct books_list * head) 
{ 
 struct books_list * p; 
 if(head==NULL || head->next==NULL) /*判斷數(shù)據(jù)庫是否為空*/ 
 { 
 printf("\n  ━━━━ 沒有圖書記錄! ━━━━\n\n"); 
 return; 
 } 
 p=head; 
 printf("┏━━━┳━━━━━┳━━━━━┳━━━━━┳━━━━━━┳━━━┳━━━━┓\n"); 
 printf("┃登錄號┃ 書 名 ┃ 作 者┃ 出版單位 ┃ 出版時間 ┃分類號┃ 價格 ┃\n"); 
 printf("┣━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━━╋━━━╋━━━━┫\n"); 
 /*指針從頭節(jié)點開始移動,遍歷至尾結(jié)點,依次輸出圖書信息*/ 
 while(p->next!= NULL) 
 { 
 p=p->next; 
 printf("┃%-6.6s┃%-10.10s┃%-10.10s┃%-10.10s┃%-12.12s┃%-6.6s┃%.2f ┃\n",p->loginnum,p->bookname,p->author,p->publisher,p->pbtime,p->classfy,p->price); /*循環(huán)輸出表格*/ 
 } 
 printf("┗━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━━┻━━━┻━━━━┛\n"); 
 printf("\n"); 
} 
 
/*刪除操作*/ 
void DeleteDoc(struct books_list * head) 
{ 
 struct books_list *s,*p; /*s為中間變量,p為遍歷時使用的指針*/ 
 char temp[20]; 
 int panduan; /*此變量用于判斷是否找到了書目*/ 
 panduan=0; 
 p=s=head; 
 printf("  [請輸入您要刪除的書名]:"); 
 scanf("%s",temp); 
 /*遍歷到尾結(jié)點*/ 
 while(p!= NULL) 
 { 
 if(strcmp(p->bookname,temp)==0) 
 { 
 panduan++; 
 break; 
 } 
 p=p->next; 
 } 
 if(panduan==1) 
 { 
 for(;s->next!=p;) /*找到所需刪除卡號結(jié)點的上一個結(jié)點*/ 
 { 
 s=s->next; 
 } 
 s->next=p->next; /*將后一節(jié)點地址賦值給前一節(jié)點的指針域*/ 
 free(p); 
 printf("\n  ━━━━ 刪除成功! ━━━━\n"); 
 } 
 else /*未找到相應(yīng)書目*/ 
 { 
 printf("  您輸入的書目不存在,請確認后輸入!\n"); 
 } 
 return; 
} 
 
int main() 
{ 
 struct books_list * head; 
 char choice; 
 head=NULL; 
 for(;;) /*實現(xiàn)反復輸入選擇*/ 
 { 
 printf(" ┏━┓━━━━━━━━━━━━━━━━━━━┏━┓\n"); 
 printf(" ┃ ┃ tony 圖書館管理系統(tǒng) ┃ ┃\n"); 
 printf(" ┃ ┗━━━━━━━━━━━━━━━━━━━┛ ┃\n"); 
 printf(" ┃ [1]圖書信息錄入 ┃\n"); 
 printf(" ┃   ┃\n"); 
 printf(" ┃ [2]圖書信息瀏覽 ┃\n"); 
 printf(" ┃   ┃\n"); 
 printf(" ┃ [3]圖書信息查詢 ┃\n"); 
 printf(" ┃   ┃\n"); 
 printf(" ┃ [4]圖書信息刪除 ┃\n"); 
 printf(" ┃   ┃\n"); 
 printf(" ┃ [5]退出系統(tǒng)  ┃\n"); 
 printf(" ┃   ┃\n"); 
 printf(" ┃   ┃\n"); 
 printf(" ┗━━━━━━━━━━━━━━━━━━━━━━━┛\n"); 
 printf("  請選擇:"); 
 fflush(stdin); 
 scanf("%c",&choice); 
 if(choice=='1') 
 { 
 if(head==NULL) 
 { 
 head=Create_Books_Doc(); 
 } 
 InsertDoc(head); 
 
 } 
 else if(choice=='2') 
 { 
 Print_Book_Doc(head); 
 } 
 else if(choice=='3') 
 { 
 search_book(head); 
 } 
 else if(choice=='4') 
 { 
 DeleteDoc(head); 
 } 
 
 else if(choice=='5') 
 { 
 printf("\n"); 
 printf(" ━━━━━━━━ 感謝使用圖書管理系統(tǒng) ━━━━━━━━\n"); 
 break; 
 } 
 else 
 { 
 printf("  ━━━━ 輸入錯誤,請重新輸入!━━━━\n"); 
 
 } 
 } 
 
 return 0; 
} 

五、課程設(shè)計總結(jié)

通過這一周的課程設(shè)計,我感受到做程序一定要有自己的清晰計劃,否則會無處用力,感覺會很亂,當高屋建瓴的有計劃后,然后開始認真嚴謹?shù)脑O(shè)計每一個模塊,要知道用戶的一切輸入都是不可信的,必須想得要全面,要仔細的對待每一個細節(jié),任何一個差錯都有可能讓程序崩潰,這其中有許多的困難,剛開始感覺到束手無策,但是放一放,換個角度想就會豁然開朗,我覺得從這個中感覺到了充實,滿足感,也提醒我以后要多多練練,多上機,積累經(jīng)驗,爭取設(shè)計出更多的好的程序。

更多學習資料請關(guān)注專題《管理系統(tǒng)開發(fā)》。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++中繼承與組合的區(qū)別詳細解析

    C++中繼承與組合的區(qū)別詳細解析

    C++的“繼承”特性可以提高程序的可復用性。正因為“繼承”太有用、太容易用,才要防止亂用“繼承”
    2013-09-09
  • C語言的isatty函數(shù)和ttyname函數(shù)以及sendmsg函數(shù)用法

    C語言的isatty函數(shù)和ttyname函數(shù)以及sendmsg函數(shù)用法

    這篇文章主要介紹了C語言的isatty函數(shù)和ttyname函數(shù)以及sendmsg函數(shù)用法,是C語言入門學習中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • C語言實現(xiàn)彈跳小球

    C語言實現(xiàn)彈跳小球

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)彈跳小球,設(shè)置了小球分數(shù)及過關(guān)難度,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C++實現(xiàn)推箱子小項目

    C++實現(xiàn)推箱子小項目

    這篇文章主要為大家詳細介紹了C++實現(xiàn)推箱子小項目,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • C語言 實現(xiàn)輸入任意多個整數(shù)

    C語言 實現(xiàn)輸入任意多個整數(shù)

    這篇文章主要介紹了C語言 實現(xiàn)輸入任意多個整數(shù),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • C++ stack與queue使用方法詳細講解

    C++ stack與queue使用方法詳細講解

    stack是一種容器適配器,專門用在具有后進先出操作的上下文環(huán)境中,其刪除只能從容器的一端進行 元素的插入與提取操作;隊列是一種容器適配器,專門用于在FIFO上下文(先進先出)中操作,其中從容器一端插入元素,另一端提取元素
    2023-01-01
  • OpenCV選擇圖像中矩形區(qū)域并保存

    OpenCV選擇圖像中矩形區(qū)域并保存

    這篇文章主要為大家詳細介紹了OpenCV選擇圖像中矩形區(qū)域并保存的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 華為機試題之統(tǒng)計單詞個數(shù)實例代碼

    華為機試題之統(tǒng)計單詞個數(shù)實例代碼

    這篇文章主要介紹了華為機試題之統(tǒng)計單詞個數(shù)實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • C++的靜態(tài)成員變量和靜態(tài)成員函數(shù)詳解

    C++的靜態(tài)成員變量和靜態(tài)成員函數(shù)詳解

    這篇文章主要為大家介紹了C++的靜態(tài)成員變量和靜態(tài)成員函數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • C++淺析數(shù)據(jù)在內(nèi)存中如何存儲

    C++淺析數(shù)據(jù)在內(nèi)存中如何存儲

    使用編程語言進行編程時,需要用到各種變量來存儲各種信息。變量保留的是它所存儲的值的內(nèi)存位置。這意味著,當您創(chuàng)建一個變量時,就會在內(nèi)存中保留一些空間。您可能需要存儲各種數(shù)據(jù)類型的信息,操作系統(tǒng)會根據(jù)變量的數(shù)據(jù)類型,來分配內(nèi)存和決定在保留內(nèi)存中存儲什么
    2022-08-08

最新評論

河津市| 万荣县| 和田市| 宝应县| 禹州市| 天峨县| 张家界市| 冷水江市| 西平县| 吉水县| 通河县| 舟山市| 辽宁省| 秦安县| 亚东县| 江津市| 锡林郭勒盟| 宽城| 西青区| 呼伦贝尔市| 龙游县| 南汇区| 深州市| 叙永县| 宁武县| 新丰县| 关岭| 绵竹市| 杭锦后旗| 西昌市| 沁水县| 尉氏县| 定西市| 武冈市| 和林格尔县| 皮山县| 长宁区| 衡阳县| 全州县| 宁南县| 萨嘎县|