課程設計實驗報告圖書管理系統(tǒng)_第1頁
課程設計實驗報告圖書管理系統(tǒng)_第2頁
課程設計實驗報告圖書管理系統(tǒng)_第3頁
課程設計實驗報告圖書管理系統(tǒng)_第4頁
課程設計實驗報告圖書管理系統(tǒng)_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、課 程 報 告課 程 名 稱: 程序設計實踐 專 業(yè) 班 級 : 計科1401 學 生 姓 名 : 牛草原 學 號 : 201416010101 任 課 教 師 : 張玉宏 學 期 :2013-2014學年第二學期 課程報告任務書題 目圖書信息管理系統(tǒng)主要內容開發(fā)一個圖書信息管理系統(tǒng),圖書信息包括:圖書編號、書名、作者、出版社、類別、出版時間、價格等基本信息(也可以根據(jù)自己情況進行擴充,比如是否借出、庫存量等)。使之能提供以下基本功能:(1)圖書信息錄入功能(圖書信息用文件保存)輸入v(2)圖書信息瀏覽功能輸出(3)查詢功能(至少一種查詢方式)、排序功能(至少一種排序方式): l按書名查詢 按

2、作者名查詢 按照價錢排序 按出版時間排序等等(4)圖書信息的刪除與修改擴展功能:可以按照自己的程度進行擴展。比如(1)簡單的權限處理 (2)報表打印功能(3)甚至根據(jù)自己情況,可以加上學生信息和借閱信息的管理,并擴充為圖書借閱系統(tǒng)。(4)模糊查詢 (5)綜合查詢 (6)統(tǒng)計功能 比如統(tǒng)計處某一類別的圖書信息 或 篩選出小于指定數(shù)量庫存的圖書信息等等,總之,可以根據(jù)自己需求進行分析功能。任務要求一、提交材料應包括:(1)系統(tǒng)源代碼 (2)課程報告二、整個設計過程具體要求(1)需求分析 要求學生對案例系統(tǒng)進行分析,設計出需要完成的功能,完善各個模塊的調用關系;(2)設計過程 要求學生進一步明確各模

3、塊調用關系,進一步完善模塊函數(shù)細節(jié)(函數(shù)名、參數(shù)、返回值等)(3)實現(xiàn)過程 要求學生養(yǎng)成良好的編碼習慣、完成各個模塊并進行測試,最終完成系統(tǒng)整體測試;(4)總結階段 按照要求完成系統(tǒng)設計和實現(xiàn)報告,并進行總結、答辯。成績評定報告撰寫情況(30分)系統(tǒng)完成情況(30分)答辯情況(40分)總分內容20分規(guī)范程度5分程序測試5分基本功能20分擴展功能10分自述情況10分答辯情況30分成績評定教師: 目 錄 引 言.3 緒 論.31 需求分析.32 概要設計.5 2.1數(shù)據(jù)結構.5 2.2數(shù)據(jù)需求.5 2.3模塊劃分.5 2.4程序總體框架.6 三.詳細設計.6 3.1登陸界面.7 3.2功能服務.2

4、1 四.調試分析.48 五.程序不足與改進.49 六.課程心得總結.49 引 言 經過對程序設計題目的分析可知,整個程序的設計實現(xiàn)大致可以分為五個模塊,其中每個模塊對應一個函數(shù),他們分別是:圖書的添加函數(shù)void add_book(void); 刪除圖書的函數(shù)void delete_book(void);查詢圖書的函數(shù)void inquire_book(void);對圖書進行修改的函數(shù)void revise_book(void);以及對圖書進行排序的函數(shù)void sort_book(void);在這幾個函數(shù)中,其功能的實現(xiàn)嚴格按照題目的要求:1 圖書信息錄入函數(shù):主要功能是從鍵盤上輸入圖書信息

5、并將其寫入文件中,作為圖書館的書庫。以便對以下的函數(shù)進行運行,此函數(shù)應是整個程序的基礎。2 查詢圖書函數(shù):主要功能是按照一定的圖書特征(圖書名,圖書作者)先將圖書查詢到。3 刪除圖書函數(shù): 主要功能是將已存圖書按照一定的圖書特征(圖書編號,圖書名,圖書作者,圖書出版日期等)先將圖書查詢到,然后刪除。4 圖書排序函數(shù): 主要功能是將已存圖書按照一定的圖書特征將圖書進行詳細的排序,具體可以分為按圖書名排序,按圖編號排序;按圖書出版日期排序,按圖書價格排序。5 圖書的修改函數(shù):功能是將已錄入的圖書的編號,作者,出版日期,價錢等進行修改。6退出函數(shù):該函數(shù)主要實現(xiàn)退出運行界面的功能。緒 論整個程序的設

6、計實現(xiàn)大致可以分為五個模塊,其中每個模塊對應一個函數(shù),他們分別是:圖書的添加函數(shù)void add_book(void); 刪除圖書的函數(shù)void delete_book(void);查詢圖書的函數(shù)void inquire_book(void);對圖書進行修改的函數(shù)void revise_book(void);以及對圖書進行排序的函數(shù)void sort_book(void);1 需求分析開發(fā)一個圖書信息管理系統(tǒng),圖書信息包括:圖書編號、書名、作者、出版社、類別、出版時間、價格等基本信息。使之能提供以下基本功能:(1)圖書信息錄入功能(圖書信息用文件保存)輸入v(2)圖書信息瀏覽功能輸出(3)查詢

7、功能、排序功能: l按書名查詢 按作者名查詢 按照價錢排序 按出版時間排序(4) 圖書信息的刪除與修改(5) 學生登錄和管理員登陸(6) 退出系統(tǒng)程序擴展:(7) 管理員功能:學生信息管理 1:學生卡添加2:學生卡信息查詢3:學生卡密碼查詢4:學生卡刪除圖書信息管理(8)學生功能:圖書信息查詢通過此次課程設計,可以使我們增強自己的動手能力,并可以使自己編寫的程序與程序之間的銜接更為自然,同時可以提高我們使用計算機解決實際問題的能力,了解并掌握C語言開發(fā)程序的全過程。此外還可以較為綜合地提高自己C語言編程能力及調試能力和自己對C語言語法的進一步認知,為自己的后續(xù)課程打好基礎。二 概要設計2.1

8、數(shù)據(jù)結構該程序設計采用結構體和文件操作,用于實現(xiàn)對圖書信息的存儲,修改,查詢及排序等功能。2.2 數(shù)據(jù)需求 該程序需要系統(tǒng)輸入及輸出圖書的編號,圖書名,圖書作者,圖書出版日期以及圖書價格等數(shù)據(jù)。2.3 模塊劃分 該程序總體上分為6個模塊,分別為:學生登錄系統(tǒng)模塊,管理員登陸系統(tǒng)模塊,圖書信息錄入模塊,圖書信息修改模塊,圖書信息刪除模塊,圖書信息查詢模塊及圖書信息排序模塊,學生卡添加模塊,學生卡刪除模塊,學生卡信息查詢模塊,學生卡密碼查詢模塊。其中圖書信息查詢模塊分為按書名查詢,作者名字查詢。圖書排序系統(tǒng)分為按圖書編號排序,按圖書價格排序,按圖書出版時間排序。各個模塊之間相互獨立但彼此之間有相互

9、依附,通過彼此之間有規(guī)律的相互調用及參數(shù)的傳遞從而實現(xiàn)整個程序較為綜合的功能。簡言之:(1)void main_menu(void); 主菜單(2)void student(void); 學生登錄函數(shù) (3)int stu_login(void);學生登錄驗證 (4)void stu_find(void); 學生圖書查詢函數(shù)1. void book_search_name(void);書名查找2. void book_search_author(void);作者查找 3.void inquire_book(void); 查詢圖書(輸出所有圖書) (5)void administrar(void

10、);管理員登錄模塊 (6)int adm_login(void);管理員登錄驗證 (7)void ad_st_menu(void); 學生信息管理菜單1.void add_card(void); 申請新學生卡2.void delete_card(void); 刪除學生卡3.void passwordlookup(void); 學生卡密碼查詢4.void inquire_stu(void);查詢學生卡(輸出所有學生卡信息)(8)void ad_bk_menu(void); 圖書信息管理菜單1.void add_book(void); 添加圖書2.void delete_book(void); 刪

11、除圖書3.void revise_book(void); 修改圖書4.void inquire_book1(void);輸出所有圖書,管理員使用。5.void sort_book(void); 圖書排序菜單.void sort_book_num(void); 圖書排序編號.void sort_book_price(void); 圖書排序價格.void sort_book_time(void);圖書排序出版時間2.4 程序總體框架(如圖2.4-1) 主界面 退出學生登錄學生登錄管理員 登 陸圖書管理學生信息管理 圖書查詢查詢圖書按作者查找按書名查找輸出所有圖書修改圖書刪除圖書添加圖書查詢學生卡查

12、詢卡號密碼刪除卡號申請新卡號圖書排序按編號排序按出版時間排序按價格排序圖2.4-1三 詳細設計3.1登陸界面: (1) 基本介紹:用戶進入當用戶選擇進入登錄界面時(如圖3.1.4-1所示),該界面會顯示出“歡迎使用草原圖書管理系統(tǒng)”字樣和一個圖書館的圖案,然后用戶可以選擇:學生登錄,管理員登陸和退出系統(tǒng)。選擇學生登錄時(如圖3.1.4-2所示)需要登錄學生卡號和密碼經行身份驗證。選擇管理員登錄時(如圖3.1.4-3所示)需要登錄管理員賬號和登錄密碼。而當用戶選擇退出系統(tǒng)時,按任意鍵系統(tǒng)退出(如圖3.1.4-4所示)。進入身份鑒定界面時,需要輸入用戶名及密碼,允許輸入三次密碼。 (2) 程序解析

13、: 首先,使用了基本的輸入輸出的標準庫函數(shù)printf與scanf函數(shù),將所需的提示語輸出并實現(xiàn)用戶選擇的輸入。之后,用switch語句選擇判斷用戶輸入的操作,以確定后續(xù)操作。其中在提示文字的排版上,我使用的是用空格鍵來做調整,這樣做雖然麻煩耗時,但是可以精準的實現(xiàn)自己預期效果。在身份鑒定操作界面,首先使用字符串數(shù)組將密碼存放。在密碼輸入時,使用的是密文登陸方式,即輸入密碼時,判斷若密碼不是“回車符”,就輸出“*”(如圖3.1.4-5所示)并且密碼還能夠在發(fā)現(xiàn)輸入錯后進行退格處理,然后判斷輸入的密碼是否與密碼字符串數(shù)組中的一致,從而判斷是否進入下一個選擇服務界面。輸入密碼時,用for循環(huán)語句限

14、制用戶只能輸入三次密碼,若三次全錯,則提示輸入密碼次數(shù)已達上限按任意鍵退出。(3) 實驗代碼:#include "header.h"void main_menu(void) char ch; system("cls"); printf("=n"); printf(" 歡迎使用草原圖書管理系統(tǒng)nn"); printf(" n"); printf(" 田田n"); printf(" 田田n"); printf(" 田田n"); printf

15、(" 田田n"); printf(" n"); printf(" n"); printf("=nn"); printf("請選擇您的登錄模式nn"); printf("【1】學生登錄【2】管理員登陸nn"); printf("【0】退出nn"); printf("=n"); printf("請輸入數(shù)字02:"); while( ch=getch() ) && ( ch>'2' |

16、 ch<'0' )/容錯處理 printf("n你的輸入格式錯誤,請重新輸入:"); switch( ch ) case '0': break;case '1':student();break;case'2':administrator();break; void administrator(void) /管理員登錄模塊菜單 if( adm_login() ) /登錄成功 ad_menu(); return ; else /登錄失敗 main_menu(); return ; int adm_login(

17、void) /管理員登錄int m ;int i = 0;int flag = 0;char ch, key1 20 = 0; FILE* fp=NULL;ADMIN ad, ad1; fp=fopen(".dataadministrator.txt", "r"); /判斷是否有管理員注冊 if(fp = NULL) flag = 1; else if( fgetc(fp) = EOF ) /未讀取到有管理員注冊 flag = 1; if( flag ) system("cls"); printf("您還沒有注冊管理員,請先

18、注冊n請輸入賬號:"); scanf("%s", &ad.num); printf("請輸入用戶名:"); scanf("%s", &ad.user); printf("請輸入密碼:"); scanf("%s", &ad.key); rc4_crypt( &ad.key, "952316946" ); /加密 if( fp != NULL ) fclose(fp); fp = fopen(".dataadministrato

19、r.txt", "w"); fwrite(&ad, sizeof(ADMIN), 1, fp); printf("注冊成功!按任意鍵繼續(xù).n"); getch(); fclose(fp); system("cls"); printf("tn"); printf("t 歡迎使用管理員系統(tǒng),請登錄! n");printf("t n"); printf("tn"); printf("t請輸入管理員賬號:"); scanf(&

20、quot;%s", &ad.num); fp = fopen(".dataadministrator.txt", "r"); while(fread(&ad1, sizeof(ADMIN), 1, fp) != 0) /以數(shù)據(jù)塊方式讀出數(shù)據(jù)管理員賬號 if(strcmp(ad1.num , ad.num) = 0 ) flag = 0; break; if( flag ) printf("沒有找到此卡號,按任意鍵結束.n"); getch(); fclose(fp); return 0; elseprintf

21、("t請輸入登錄密碼:"); while( ch = getch() ) != 'r') if(ch = 'b' && i != 0) /密碼輸入容錯處理,退格 i-; printf("b b"); continue ; elsekey1 i+ = ch;printf("*"); key1i = '0' strcpy(&ad.key, key1);rc4_crypt(&ad.key, "952316946");fread(&ad

22、1, sizeof(ADMIN), 1, fp); if(strcmp(&ad.key, &ad1.key) = 0 ) printf("n登錄成功,按任意鍵返回."); strcpy(user_ad, &ad1.user); getch(); fclose(fp); return 1; else printf("n對不起,密碼輸入錯誤,您還有3次機會重新輸入正確密碼n"); for(m = 2;m >= 0; m-)while( ch = getch() ) != 'r') if(ch = 'b&#

23、39; && i != 0) /密碼輸入容錯處理,退格 i-; printf("b b");continue ; else key1 i+ = ch; printf("*"); key1i = '0'strcpy(&ad.key, key1);rc4_crypt(&ad.key, "952316946"); fread(&ad1, sizeof(ADMIN), 1, fp); if(strcmp(&ad.key, &ad1.key) = 0 ) printf(&q

24、uot;n登錄成功,按任意鍵返回."); strcpy(user_ad, &ad1.user); getch(); fclose(fp);return 1; else if(m > 0)printf("n對不起,密碼輸入錯誤,您還有%d次機會重新輸入正確密碼n",m);elseprintf("您輸入密碼的次數(shù)已達上限不能繼續(xù)輸入,請按任意鍵退出");getch(); fclose(fp); return 0; void student(void)/ 學生登錄 if( stu_login() ) /登錄成功 stu_find();

25、return ; else /登錄失敗 main_menu(); return ; int stu_login(void) / 學生登錄驗證 int m ;int i = 0;int flag = 0;char ch, key1 20 = 0; FILE* fp1=NULL; if(fp1=fopen(".datastudentcard.txt", "r") = NULL ) /沒有學生卡存在 printf("文件打開失敗,按任意鍵結束."); getch(); return 0; else system("cls"

26、;); int flag; STU st, st1; printf("請輸入學號:"); scanf("%s", &st.num); while(fread(&st1, sizeof(STU), 1, fp1) != 0) /以數(shù)據(jù)塊方式讀出數(shù)據(jù)學生卡號 if(strcmp(st1.num , st.num) = 0 ) flag = 0; break; if( flag ) printf("沒有找到此學號,請查證或與管理員聯(lián)系。按任意鍵結束.n"); getch(); fclose(fp1); return 0; e

27、lse printf("請輸入登錄密碼:"); while( ch = getch() ) != 'r') if(ch = 'b' && i != 0) /密碼輸入容錯處理,退格 i-; printf("b b");continue ; else key1 i+ = ch; printf("*"); key1i = '0' strcpy(&st.key, key1); rc4_crypt(&st.key, "952316946"); /

28、加密 if(strcmp(&st.key, &st1.key) = 0) /字符比較。驗證密碼 printf("登錄成功,按任意鍵返回.n"); getch(); fclose(fp1); return 1; else printf("n對不起,密碼輸入錯誤,您還有3次機會重新輸入正確密碼n"); for(m = 2;m >= 0; m-)while( ch = getch() ) != 'r') if(ch = 'b' && i != 0) /密碼輸入容錯處理,退格 i-; prin

29、tf("b b");continue ; else key1 i+ = ch; printf("*"); key1i = '0' strcpy(&st.key, key1); rc4_crypt(&st.key, "952316946"); /加密 if(strcmp(&st.key, &st1.key) = 0) /字符比較。驗證密碼 printf("登錄成功,按任意鍵返回.n"); strcpy(user_stu, &); getch();

30、 fclose(fp1); return 1; else if(m > 0)printf("n對不起,密碼輸入錯誤,您還有%d次機會重新輸入正確密碼n",m);elseprintf("您輸入密碼的次數(shù)已達上限不能繼續(xù)輸入,請按任意鍵退出");getch(); fclose(fp1); return 0; (4) 運行結果3.2功能服務 (1)基本介紹:功能服務分學生和管理員。以學生身份登錄的用戶可以使用圖書查詢服務系統(tǒng)(如圖3.2.4-1),其中有按書名查詢(如圖3.2.4-2)按作者查詢(如圖)和輸出所有圖書信息(如圖3.2.4-4

31、)。以管理員身份登錄進入管理員系統(tǒng),管理員系統(tǒng)分學生信息管理和圖書管理兩大功能(如圖3.2.4-5),其中學生信息管理(如圖3.2.4-6)里面分申請新學生卡號(如圖3.2.4-7),刪除卡號(如圖3.2.4-8),查詢學生卡號密碼(3.2.4-9),查詢學生卡(如圖3.2.4-10)四大功能,圖書管理分添加圖書,刪除圖書,修改圖書信息,查詢所有圖書信息和圖書排序(如圖3.2.4-11)五大功能。其中的圖書排序(如圖3.2.4-12)分按編號排序(如圖3.2.4-13),價格排序(如圖3.2.4-14),出版時間排序(如圖3.2.4-15)三種。 (2)程序解析:定義相關變量之后,使用prin

32、tf與scanf輸入選擇的服務,并用getchar讀取選擇,之后使用switch語句按照參數(shù)choice分別進行相應的后續(xù)函數(shù)調用。 (3)實驗代碼:void stu_find(void) /學生查詢圖書系統(tǒng) char n; system("cls"); printf("tn"); printf("t您好,歡迎進入學生圖書查詢系統(tǒng)nn"); printf("tnn"); printf("t請選擇查詢圖書的方式nn"); printf("【 1 】按書名查詢 【 2 】按作者n"

33、;); printf("【 3 】顯示所有圖書信息【 0 】返回nn"); printf("nn"); printf("請輸入03:"); while( n=getch() ) && ( n>'3' | n<'0' ) printf("n輸入錯誤,請重新輸入:"); switch(n) case '0' : main_menu(); break;case '1' : book_search_name();break; cas

34、e '2' : book_search_author(); break; case '3' : inquire_book(); break; /圖書查詢按書名查詢void book_search_name(void) char name30; FILE* fp; system("cls"); printf(" 歡迎使用圖書查詢服務nn"); printf("請輸入要查詢的書名:n"); fflush( stdin ); scanf("%s", name); if( ( fp = fo

35、pen(".databook.txt", "r") ) = NULL ) printf("數(shù)據(jù)讀取失敗,請與管理員聯(lián)系,按任意鍵返回."); getch(); stu_find(); return ; int flag = 1; BOOK book; while( fread(&book, sizeof(BOOK), 1, fp) != 0) if( strcmp( , name) = 0 ) int y, m, d; flag = 0; printf("n你要查詢的信息如下:nn");

36、printf("%-5st%-20st%st%-5st%-10st%sn", "編號", "書名", "作者", "價格","出版時間", "庫存"); y = book.time_pub / 65536; m = ( book.time_pub % 65536 ) / 256; d = book.time_pub % 256; printf("%-5dt%-20st%st%.2ft%-4d %02d %02dt%dn", book.n

37、um, &, &book.author, book.price, y, m, d, book.stock); if( book.stock > 0 ) printf("n此書庫存為%d,可以借閱!借閱請記下圖書編號!n", book.stock); else printf("n此書庫存為0,不可借閱!n"); break; fclose(fp); if ( flag ) printf("未找到此圖書!請查證!"); printf("n按任意鍵返回."); getch(); s

38、tu_find(); return ;/圖書查詢按作者查詢void book_search_author(void) char author30; FILE* fp; system("cls"); printf(" 歡迎使用圖書查詢服務nn"); printf("請輸入要查詢書的作者:n"); fflush( stdin ); scanf("%s", author); if( ( fp = fopen(".databook.txt", "r") ) = NULL ) prin

39、tf("數(shù)據(jù)讀取失敗,請與管理員聯(lián)系,按任意鍵返回."); getch(); stu_find(); return ; int flag = 1; int times = 1; BOOK book; while( fread(&book, sizeof(BOOK), 1, fp) != 0) if( strcmp( book.author, author) = 0 ) int y, m, d; flag = 0; if(times = 1) /確保只輸出一次 printf("n你要查詢的信息如下:nn"); printf("%-5st%

40、-20st%st%-5st%-10st%sn", "編號", "書名", "作者", "價格","出版時間", "庫存"); times = 2; y = book.time_pub / 65536; m = ( book.time_pub % 65536 ) / 256; d = book.time_pub % 256; printf("%-5dt%-20st%st%.2ft%-4d %02d %02dt%dn", book.num, &

41、;, &book.author, book.price, y, m, d, book.stock); if( book.stock > 0 ) printf("此書庫存為%d,可以借閱!借閱請記下圖書編號!nn", book.stock); else printf("此書庫存為0,不可借閱!nn"); fclose(fp); if ( flag ) printf("未找到圖書!請查證!"); printf("n按任意鍵返回."); getch(); stu_find(); retur

42、n ;void inquire_book(void) /查詢圖書(輸出所有圖書)學生用 system("cls");printf("n"); printf(" 歡迎進入使用圖書查詢服務nn");printf("nn"); int y, m, d; FILE* fp; BOOK book1; if( (fp = fopen(".databook.txt", "r") = NULL ) printf("數(shù)據(jù)讀取失敗,按任意鍵返回."); getch(); stu_find(); return ; printf("%5st%-20st%st%-5st%

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論