版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1 課程設(shè)計(jì)說明書課程設(shè)計(jì)任務(wù)書專業(yè)年級班一、設(shè)計(jì)題目圖書信息管理系統(tǒng)設(shè)計(jì)二、主要內(nèi)容(一)學(xué)生成績排名先采用選擇法,將學(xué)生成績從高到低進(jìn)行排序,再輸入一個學(xué)生的成績,將此成績按照排序規(guī)律插入已排好序的學(xué)生成績數(shù)組,最后將排好序的成績單進(jìn)行反序存放。(二) 根據(jù)條件進(jìn)行學(xué)生成績排名在函數(shù)中進(jìn)行 10 個學(xué)生成績從高到低排名,再改進(jìn)函數(shù),進(jìn)行2 n 個學(xué)生成績從高到低排名 , 排名方式根據(jù)函數(shù)的style參數(shù)進(jìn)行,如style為a 按升序排, style為 d 按降序排。( a :ascending 升,d:descending 降)編寫多個不同函數(shù),使之能實(shí)現(xiàn)不同的排序算法(3 種以上) ,再
2、編寫一個通用輸出函數(shù), (要求用函數(shù)指針做參數(shù))能分別打印不同排序算法的結(jié)果。(三)鏈表的操作(鏈表的建立,訪問,刪除鏈表指定結(jié)點(diǎn),增加結(jié)點(diǎn))建立一個動態(tài)鏈表,將學(xué)生數(shù)據(jù)(學(xué)號,成績)存入鏈表結(jié)構(gòu)中,實(shí)現(xiàn)鏈表的訪問(求學(xué)生成績的平均分,找到最高分,最低分,將其數(shù)據(jù)輸出)。刪除指定學(xué)號的學(xué)生數(shù)據(jù),對學(xué)生數(shù)據(jù)進(jìn)行排序,分別在鏈表頭部,中間,末尾插入學(xué)生數(shù)據(jù)。(四) 學(xué)生成績文件管理定義一個結(jié)構(gòu)體數(shù)組,存放10 個學(xué)生的學(xué)號,姓名,三門課的成績,輸出單門課成績最高的學(xué)生的學(xué)號、姓名、以及該門課程的成績,輸出三門課程的平均分?jǐn)?shù)最高的學(xué)生的學(xué)號、姓名及其平均分,將10個學(xué)生的相關(guān)數(shù)據(jù),存入文件中,再從文
3、件中讀出,按照平均分?jǐn)?shù)從高到低進(jìn)行排序,分別將結(jié)果輸出到屏幕上和另一文件中,再從文件中讀取第 1 ,3 , 5 ,7, 9 個學(xué)生的數(shù)據(jù)。(五)綜合系統(tǒng)3、圖書信息管理系統(tǒng)設(shè)計(jì):圖書信息包括:登錄號、書名、作者名、分類號、出版單位、出3 版時間、價(jià)格等。試設(shè)計(jì)一圖書信息管理系統(tǒng),使之能提供以下功能:(1)系統(tǒng)以菜單方式工作。 v (2)圖書信息錄入功能輸入。v (3)圖書信息瀏覽功能輸出。(4)查詢和排序功能: (至少一種查詢方式 )算法。l 按書名查詢2 按作者名查詢(5)圖書信息的刪除與修改。三、具體要求圍繞課程設(shè)計(jì)的目的和意義,基本要求如下:1、認(rèn)真閱讀 c 語言課程設(shè)計(jì)指導(dǎo)書,明確課程
4、設(shè)計(jì)的目的、意義和要求;2、快速總結(jié) c程序設(shè)計(jì)語言的精髓,如:函數(shù)的概念、函數(shù)的設(shè)計(jì)和函數(shù)的調(diào)用;3、 快速熟悉 tuber c 或 c+ 的上機(jī)環(huán)境。能熟練進(jìn)行高級編輯操作 (特別是字塊操作);熟悉步進(jìn)式、斷點(diǎn)跟蹤的程序調(diào)試方法,提高工作效率。4、根據(jù)“課程設(shè)計(jì)題目” ,采用結(jié)構(gòu)化的程序設(shè)計(jì)思想,確定系統(tǒng)的總體設(shè)計(jì)方案、確定時間進(jìn)度。如果是多人共一題,則要首先完成小組內(nèi)的人員分工及安排,不允許重題現(xiàn)象。4 5學(xué)習(xí)并了解良好的程序設(shè)計(jì)風(fēng)格。按質(zhì)、按量、并按時間完成課程設(shè)計(jì)的任務(wù)。6提供可運(yùn)行的課程設(shè)計(jì)系統(tǒng),參加上機(jī)面試答辯。本次課程設(shè)計(jì)的重點(diǎn)是:學(xué)會設(shè)計(jì)并編寫函數(shù),掌握好各函數(shù)之間的調(diào)用關(guān)系
5、;利用文件操作函數(shù),建立數(shù)據(jù)庫并完成對數(shù)據(jù)庫的各種操作;掌握幾種典型算法的應(yīng)用(如:冒泡法、選擇排序法和折半查找法) 。同時鍛煉學(xué)生根據(jù)題目進(jìn)行分析、設(shè)計(jì)、編碼、調(diào)試程序和書寫必要文檔的綜合處理能力,從實(shí)踐中學(xué)習(xí)并體會程序設(shè)計(jì)的結(jié)構(gòu)化思想和設(shè)計(jì)方法。四、進(jìn)度安排依照教學(xué)計(jì)劃,課程設(shè)計(jì)時間為3 周。按照軟件工程的思想,軟件系統(tǒng)的分析設(shè)計(jì)至關(guān)重要,并要充分重視書寫“文檔”。避免甚至杜絕“拿到題目就編碼”的現(xiàn)象。建議將時間分為三個階段:第一階段,根據(jù)題目要求,拿出系統(tǒng)的總體設(shè)計(jì)方案:即構(gòu)思各程序模塊的算法,并畫出相應(yīng)的n-s圖,同時編寫相應(yīng)的文檔;第二階段,根據(jù)n-s 圖編寫程序代碼并單獨(dú)調(diào)試,再將
6、調(diào)試通過的各個子模塊進(jìn)行集成調(diào)試;第三階段,歸納文檔資料,按要求填寫在課程設(shè)計(jì)說明書上,并參加答辯。三個階段時間分配的大概比例是: 35 :45:20。五、完成后應(yīng)上交的材料1課程設(shè)計(jì)的題目、系統(tǒng)的總功能和各子模塊的功能;2題目的設(shè)計(jì)思想(或算法)簡述;5 3主要程序的框圖(要求用n-s圖) ;4源程序代碼(要求在關(guān)鍵的位置有注釋,從而增加程序的可讀性);5課程設(shè)計(jì)的總結(jié)報(bào)告,主要包括以下內(nèi)容:(1)課程設(shè)計(jì)中遇到的主要問題和解決方法;(2)你的創(chuàng)新和得意之處;(3)設(shè)計(jì)中存在的不足及改進(jìn)的設(shè)想;(4)本次課程設(shè)計(jì)的感想和心得體會。以上完成的源程序及相關(guān)文檔,填寫在課程設(shè)計(jì)說明書上,要求干凈整
7、潔,符合課程設(shè)計(jì)的要求和規(guī)范。六、總評成績課程設(shè)計(jì)的成績根據(jù)學(xué)生在課程設(shè)計(jì)期間的態(tài)度,課程設(shè)計(jì)的完成情況和難易程度,文檔的質(zhì)量及系統(tǒng)演示情況綜合評定。不符合要求的設(shè)計(jì)報(bào)告,抄襲的設(shè)計(jì)報(bào)告或者在設(shè)計(jì)中完全未參與者將按不及格處理。課程設(shè)計(jì)的成績采用百分制記分,成績評定標(biāo)準(zhǔn)是: 90 至 100 分:能獨(dú)立完成設(shè)計(jì)工作, 在設(shè)計(jì)中體現(xiàn)出較強(qiáng)的綜合運(yùn)用知識能力和一定的創(chuàng)新能力。設(shè)計(jì)符合規(guī)范要求,說明書敘述透徹,體現(xiàn)一定的創(chuàng)新能力。設(shè)計(jì)過程中表現(xiàn)好,無違紀(jì)現(xiàn)象。80 分至 89 分:能獨(dú)立完成設(shè)計(jì)工作, 在設(shè)計(jì)中體現(xiàn)出較強(qiáng)的綜合運(yùn)用知識的能力。設(shè)計(jì)符合規(guī)范要求,說明書敘述清楚。設(shè)計(jì)過程中表現(xiàn)較好,無違紀(jì)
8、現(xiàn)象。6 70 至 79 分:能完成設(shè)計(jì)工作, 在設(shè)計(jì)中體現(xiàn)出一定的綜合運(yùn)用知識的能力,設(shè)計(jì)符合規(guī)范要求,說明書敘述比較清楚。設(shè)計(jì)過程中表現(xiàn)較好,無違紀(jì)現(xiàn)象。60 至 69 分:能基本完成設(shè)計(jì)工作,結(jié)果基本正確,設(shè)計(jì)符合規(guī)范要求,說明書敘述基本清楚,設(shè)計(jì)過程表現(xiàn)一般,無違紀(jì)現(xiàn)象。60 分以下:達(dá)不到上述水平。其中,程序設(shè)計(jì)占65% ,文檔占 20% ,面試答辯占 15% 。7 指導(dǎo)教師簽名日期年月日系 主 任審核日期年月日目錄一、系統(tǒng)功能 . 91、系統(tǒng)總功能 . 92、系統(tǒng)總框架 . 9二、功能模塊的描述 . 101.數(shù)據(jù)結(jié)構(gòu) . 102.main()主函數(shù). 113.menu()主菜單 .
9、 154login()口令函數(shù) . 165create()創(chuàng)建圖書信息函數(shù) . 186increase ()函數(shù) . 207. save() 保存記錄到文件函數(shù) . 228read ()函數(shù)查看圖書信息 . 249.del()函數(shù)刪除圖書信息 . 268 10.modify()函數(shù)修改圖書信息. 2811.search1 ()函數(shù)按書名搜索圖書信息. 3012.search2 ()函數(shù)按作者名搜索圖書信息. 3213.sort 函數(shù)按登錄號排序 . 3414.sort1()函數(shù)按圖書價(jià)格排序 . 3615.print()輸出函數(shù) . 39三源程序 . 40四課程設(shè)計(jì)總結(jié) . 601、設(shè)計(jì)過程的
10、感受與體會 . 602、遇到的問題與解決方法 . 613.創(chuàng)新之處 . 624.存在的不足和改進(jìn)的思想 . 629 一、系統(tǒng)功能1、系統(tǒng)總功能此程序提供了圖書管理的功能。隨著圖書館的書籍日益增多,對圖書進(jìn)行系統(tǒng)的管理,減輕圖書管理員的工作負(fù)擔(dān)顯得越來越迫在眉睫。本程序?yàn)榈怯浖安樵儓D書信息提供了極大的方便。2、系統(tǒng)總框架圖 書 信 息 管 理 系10 二、功能模塊的描述1.數(shù)據(jù)結(jié)構(gòu)一個完整的圖書信息管理系統(tǒng)包括各種各樣的信息,如登錄號、書名、作者名、分類號、出版單位、出版時間、價(jià)格等。所以每組信息必須先定義數(shù)組的元素。 c語言允許指定一種數(shù)據(jù)結(jié)構(gòu),這種類型的數(shù)據(jù)結(jié)構(gòu)稱為結(jié)構(gòu)體。由于數(shù)組存儲是采用
11、順序存放,在內(nèi)存空間中占用連續(xù)空間,所以若干圖書信息的管理實(shí)質(zhì)是對順序存儲的線性表的管理。結(jié)構(gòu)點(diǎn)如下:struct book long num; 錄入圖書信息瀏覽所有圖書查詢圖書信息圖書進(jìn)行排序修改圖書信息刪除圖書信息退出程序按書名查詢按作者查詢按登錄號排序按書價(jià)錢排序11 char author15; char name25; char sort25; char add30; long time; float price; struct book *next; ; 2.main() 主函數(shù)主函數(shù)是程序的入口,各模塊獨(dú)立,可分塊調(diào)整,但都均由主函數(shù)控制和調(diào)用。 本程序采用模塊化設(shè)計(jì)。 模塊化程
12、序就是把一個復(fù)雜問題的求解過程分階段進(jìn)行, 每個階段處理都控制在人們?nèi)菀桌斫夂吞幚淼姆秶鷥?nèi)。 控制功能的實(shí)現(xiàn)通過循環(huán)執(zhí)行一個開關(guān)語句,該語句的條件值是通過調(diào)用主菜單函數(shù)得到的返回值,根據(jù)該值, 調(diào)用相應(yīng)的各功能函數(shù),同時設(shè)置一個斷點(diǎn),即當(dāng)返回值為一定條件時運(yùn)行exit()函數(shù)結(jié)束程序,以免造成死循環(huán)。主函數(shù)采用if語句調(diào)用子函數(shù),并實(shí)現(xiàn)菜單功能。也可以通過用 switch 語句實(shí)現(xiàn)此功能相對于if語句更簡單、靈活。源程序如下:scanf(%d,&k); if(k=1) 12 i=n; head=increase(head); if(i!=n) printf(新圖書庫信息: n); pr
13、int(head); save(head); printf(按任意鍵返回 !); getch(); system(cls); printf(nnn);continue; if(k=2) head=read(); print(head); printf(按任意鍵返回 !); getch(); system(cls); printf(nnn);continue; if(k=3) printf(按書名查詢 (1) 按作者名查詢 (2)n); scanf(%d,&u); if(u=1) search1(head); if(u=2) search2(head); 13 printf(按任意鍵返回
14、 !); getch(); system(cls); printf(nnn);continue; if(k=4) printf( 按登錄號排序 (1) 按圖書價(jià)錢排序(2)n); scanf(%d,&l); if(l=1) head=sort(head); printf(按登錄號由小到大排列 : n); print(head); if(l=2) head=sort1(head); printf(按價(jià)錢由小到大排列 : n); print(head); printf(按任意鍵返回 !); getch(); system(cls); printf(nnn);continue; if(k=5
15、) i=modify(head); 14 if(i=1) save(head); printf(按任意鍵返回 !); getch(); system(cls); printf(nnn);continue; if(k=6) i=n; head=del(head); if(i!=n) printf(新圖書庫的信息: n); print(head); save(head); printf(按任意鍵返回 !); getch(); system(cls); printf(nnn);continue; printf(謝謝使用圖書管理系統(tǒng) n); exit(0); 15 3.menu() 主菜單直接利用輸出
16、函數(shù)printf輸出字符串,在屏幕上顯示一個菜單,并顯示一個提示輸入選項(xiàng),輸入17 之間的數(shù)字,主函數(shù)根據(jù)這些數(shù)字調(diào)用相應(yīng)的功能函數(shù),例如:輸入“4”調(diào)用 sort 函數(shù)和 sort1 ()函數(shù)實(shí)現(xiàn)排序功能。這樣直接輸出主菜單,制作簡便,操作簡單。由于程序中很多地方用到了字符串輸入語句,會造成下一個字符不能正確讀入,為了在程序調(diào)用執(zhí)行了各個函數(shù)后能夠清晰地看到菜單,并輸入新的選項(xiàng),首先寫了一條輸出信息,printf(按任意鍵返回!);表示按任意鍵繼續(xù), 一條讀字符語句 getch() 等待輸入字符, 按任意鍵即可進(jìn)入主菜單。源程序?yàn)椋簂ogin(); if(fp=fopen(book.dat,
17、rb)=0) /打開已存在的圖書庫信息,如果不存在請先建立 do printf(當(dāng)前沒有圖書信息,請先建立圖書庫信息:n); head=create(); while(head=0); save(head); printf(保存成功 n); 16 head=read(); while(1) /菜單功能 printf( 圖書信息管理系統(tǒng) n); printf( 請選擇對應(yīng)功能的數(shù)字鍵: n); printf(|n); printf(| 錄入圖書信息 (1) |n); printf(| 瀏覽所有圖書 (2) |n); printf(| 查詢圖書信息 (3) |n); printf(| 圖書進(jìn)行排序
18、 (4) |n); printf(| 修改圖書信息 (5) |n); printf(| 刪除圖書信息 (6) |n); printf(| |n); printf( 退出程序 (7)n); 4login() 口令函數(shù)用戶必須通過輸入登錄口令登錄圖書管理系統(tǒng)的主界面,程序開始運(yùn)行時,調(diào)用了口令函數(shù)對此進(jìn)行口令登陸。若口令輸入正確,用戶則成功登錄圖書信息管理系統(tǒng)的主界面,然后就能進(jìn)行各種操作,若口令輸入錯誤,則提示重新輸入,三次輸錯之后退出系統(tǒng)。17 輸入登錄號登錄號是否正確?是否當(dāng)前是否有圖書信息?是否重新輸入(三次輸入不正確自動退出程序)加載數(shù)據(jù)創(chuàng)建圖書信息用 printf顯示菜單輸入菜單選項(xiàng)序
19、號賦給c 程序序號是否超出范圍?是否執(zhí)行 c,并返回c 值退出程序源程序:void login() long l,i; printf(請輸入口令 (111):); scanf(%ld,&l); for(i=0;inum); while(p1-num!=0) printf(作者名 :); scanf(%s,p1-author); printf(書名:); scanf(%s,p1-name); printf(分類號 :); scanf(%s,p1-sort); printf(出版單位 :); scanf(%s,p1-add); printf(出版時間 :); scanf(%ld,&
20、p1-time); 調(diào)用 save() 函數(shù)繼續(xù)輸入保存記錄到磁盤返回主菜單20 printf(圖書價(jià)格 (元):); scanf(%f,&p1-price); n=n+1; if(n=1) d=p1; else p2-next=p1; p2=p1; p1=(struct book *)malloc(len); printf(輸入圖書登錄號 :); scanf(%ld,&p1-num); p2-next=0; return(d); 6increase ()函數(shù)increase 函數(shù)與上面提到的create() 函數(shù)相似,但是 increase()函數(shù)是基于 book.dat 文
21、件已存在的的情況下繼續(xù)增加圖書信息,create ()函數(shù)是 book.dat 文件不存在的時候必須創(chuàng)立的圖書信息函數(shù)。首先也是先創(chuàng)建“ struct book”類型的存儲空間p1=p2=(struct book *)malloc(len)。當(dāng)輸入為“ 0”時, create ()函數(shù)結(jié)束,輸入數(shù)據(jù)完畢,返回記錄數(shù)到主函數(shù)。創(chuàng)建一個struck book 類型的存儲空間逐項(xiàng)輸入圖書信息(包括作者名、書名、登錄號、價(jià)格等)21 源程序如下:struct book *increase(struct book *d) /添加圖書函數(shù) struct book *p1,*p2; p1=d; p2=(st
22、ruct book *)malloc(len); printf(登陸號為 0 時,取消添加 !n); printf(輸入圖書登錄號 :); scanf(%ld,&p2-num); if(p2-num=0) return; printf(作者名 :); scanf(%s,p2-author); printf(書名:); scanf(%s,p2-name); printf(分類號 :); 登錄號輸入數(shù)字0 結(jié)束提示是否保存記錄到磁盤是否調(diào)用save() 函數(shù)保存記錄到磁盤繼續(xù)輸入22 scanf(%s,p2-sort); printf(出版單位 :); scanf(%s,p2-add);
23、printf(出版時間 :); scanf(%ld,&p2-time); printf(圖書價(jià)格 (元):); scanf(%f,&p2-price); while(p1-next!=0) p1=p1-next; p1-next=p2; n=n+1; p2-next=0; return(d); 7. save() 保存記錄到文件函數(shù)save函數(shù)在程序中是十分重要的,它用于保存數(shù)據(jù),要不然,每次打開系統(tǒng)都得重新輸入數(shù)據(jù),這樣的系統(tǒng)是沒有任何價(jià)值的。在程序中的數(shù)據(jù)輸入和輸出是以終端為對象的,當(dāng)程序關(guān)閉后,數(shù)據(jù)也就丟失了,所以 save函數(shù)將數(shù)據(jù)輸出到磁盤文件上保存起來,使用時從磁盤
24、讀入到內(nèi)存中,這就用到了磁盤文件的讀寫操作。按照文件的讀寫要求,先定義一個指向文件的指針,按wb寫的方式打開文件,輸入保存文件路徑和文件名,如果文件不存在則系統(tǒng)自23 動創(chuàng)建文件,保存在所輸?shù)奈募A中。如果文件不能正常打開,則退出程序;否則用 while 語句實(shí)現(xiàn)循環(huán)輸入。是否保存當(dāng)前圖書庫信息是否fp=fopen(book.dat,wb)為輸出打開一個文件打開是否成功是否while (p!=0)不能打開文件fwrite(p,len,1,fp) 寫入信息fclose(fp)關(guān)閉文件退出程序源程序?yàn)椋簐oid save(struct book *p) /保存圖書函數(shù) file *fp; char
25、 m; printf(是否保存當(dāng)前圖書庫信息 ?(y/n)n); scanf(%s,&m); if(m=y|m=y) if(fp=fopen(book.dat,wb)=0) 24 printf(不能打開文件 !n); return; while(p!=0) if(fwrite(p,len,1,fp)!=1) printf(文件寫入出錯 ! n); p=p-next; fclose(fp); if(m=n|m=n) printf(退出程序 n); exit(0); 8read()函數(shù)查看圖書信息圖書信息管理系統(tǒng)的設(shè)計(jì)要實(shí)現(xiàn)最基本的功能時,必須要從磁盤中讀取數(shù)據(jù),然后再進(jìn)行其他的顯示、查找
26、、分類等操作。按照文件的讀寫要求, 先定義一個指向文件的指針, 按照 rb 的方式打 開 已 經(jīng) 保 存 好 的 文 件 , 輸 入 要 打 開 文 件 的 路 徑 和 文 件 名 ,fp=fopen(book.dat,rb),在程序中我采用了fread 函數(shù)讀入一組數(shù)據(jù),而不用 fgetc 函數(shù),兩者的主要區(qū)別在于, fread 函數(shù)用來讀入一個數(shù)據(jù)塊, fgetc 函數(shù)一般用來讀入一個字符。25 輸入要打開文件的路徑和文件名 fp=fopen(book.dat,rb)為讀入內(nèi)存打開一個文件打開是否成功是否輸出提示不能打開文件退出 exit 定義一個動態(tài)的存儲空間p1=(struct boo
27、k *)malloc(len) 用 fread 函數(shù)讀入數(shù)據(jù)fclose(fp);關(guān)閉文件提示“加載數(shù)據(jù)完成! ”return (d)返回主函數(shù)源程序?yàn)椋簊truct book *read() /讀入數(shù)據(jù)文件 file *fp; struct book *p1,*p2,*d; fp=fopen(book.dat,rb); p1=(struct book *)malloc(len); 26 d=p2=p1; while(!feof(fp) fread(p1,len,1,fp); p2=p1; if(p2-next=0) break; p1=(struct book *)malloc(len);
28、p2-next=p1; p2-next=0; fclose(fp); printf(加載數(shù)據(jù)完成 !n); return(d); 9.del ()函數(shù)刪除圖書信息刪除圖書信息的登錄號, 通過登錄號來刪除一組數(shù)據(jù), 數(shù)據(jù)從 num開始刪除,運(yùn)用指針,指向要刪除的數(shù)據(jù),直到下一個為“0”時,刪除完畢。如果輸入刪除的登錄號在“book.dat ”文件中查找不到的時候,提示輸出“找不到該登錄號的書籍” ,返回主函數(shù)。輸入要刪除圖書的登錄號27 是否存在該登錄號是否刪除該登錄號的所有圖書信息輸出 “找不到登錄號的書籍”是否保存當(dāng)前圖書庫信息保存新的圖書庫返回主函數(shù)源程序?yàn)椋簊truct book *de
29、l(struct book *d) /刪除圖書函數(shù) struct book *p1,*p2; long q; p1=d; printf(輸入要刪除圖書的登錄號:); scanf(%ld,&q); while(p1-num!=q)&(p1-next!=0) p2=p1; p1=p1-next; if(p1-num=q) 28 if(d=p1) d=p1-next; else p2-next=p1-next; printf(刪除登錄號 :%ld n,q); n=n-1; else printf(找不到登錄號為 :%ld 的書籍 n,q); return(d); 10.modify
30、()函數(shù)修改圖書信息由于錄入的記錄不是一成不變的,如某本書籍價(jià)格調(diào)低了,或某本書換了個登錄號等,這就有必要對已存在的記錄的某些信息作修改,這函數(shù)正是為此非常實(shí)用的功能而作。先讀入記錄,輸入要修改的對象的登錄號,while 循環(huán)實(shí)現(xiàn)由登錄號開始修改,由于單個提示修改操作比較麻煩,我采用了一次覆蓋所有的信息,再重新輸入該登錄號的圖書信息,直接運(yùn)用prinf函數(shù)和scanf 函數(shù)即可。 不過該方法也有不足之處。 如果修改的內(nèi)容是其中的一個信息,譬如:只修改書名,重復(fù)輸入它的所有數(shù)據(jù)也比較麻煩,不過由于本人熟練c 的程度有限,還要繼續(xù)改進(jìn)方法。輸入要修改書籍登錄號 while循環(huán)提取該圖書的所有信29
31、 源程序如下:int modify(struct book *d) /修改函數(shù) long q; char u; printf(輸入要修改書籍的登錄號:n); scanf(%ld,&q); while(d-num!=q)&(d-next!=0) d=d-next; if(d-num=q) printf(請重新輸入圖書信息 :n); printf(登錄號 :); scanf(%ld,&d-num); printf(作者名 :); scanf(%s,&d-author); 指向要修改圖書的登錄號if(d-num=q) 逐項(xiàng)修改圖書信息(num ,author ,nam
32、e,sort ,add,time ,price )顯示修改后的圖書信息保存圖書信息返回主函數(shù)30 printf(書名:); scanf(%s,&d-name); printf(分類號 :); scanf(%s,&d-sort); printf(出版單位 :); scanf(%s,&d-add); printf(出版時間 :); scanf(%ld,&d-time); printf(圖書價(jià)格 ( 元):); scanf(%f,&d-price); printf(修改后的信息為 :n); printf(登錄號作 者名書名分類號出版單位出版時間圖書價(jià)格 (元)
33、:n); n,d-num,d-author,d-name,d-sort,d-add,d-time,d-price); return(1); else printf(找不到該書籍 !n); 11.search1 ()函數(shù)按書名搜索圖書信息當(dāng)需要尋找自己想要的某本圖書時, 如果在所有的圖書信息中一本本地尋找比較麻煩,如果信息量大的話那幾乎不可能找到。所以圖31 書管理系統(tǒng)必須增設(shè)一些最簡單的功能,搜索功能就是其中的基礎(chǔ)功能之一。當(dāng)你知道你要尋找的書名時,就可以用search1()函數(shù)來幫助你尋找你所需要的圖書信息。因關(guān)系是字符串,比較用字符串比較函數(shù)strcmp 實(shí)現(xiàn),從第 0 開始, 比較輸入的
34、關(guān)系與記錄中的關(guān)系是否一致則,一致則顯示此記錄,接著比較下一條記錄,直到比較完所有記錄輸入要查詢的書籍名稱while(strcmp(d-name,p1-name)&(d-next!=0)查詢書籍名稱 d=d-next d-name,p1-name比較兩者是否相同?是否輸出查詢圖書信息查找不到該圖書信息返回主函數(shù)源程序?yàn)椋簐oid search1(struct book *d) /按書名搜索函數(shù) struct book *p1; p1=(struct book *)malloc(len); printf(請輸入要查詢的書名: n); scanf(%s,p1-name); while(st
35、rcmp(d-name,p1-name)&(d-next!=0) 32 d=d-next; if(!strcmp(d-name,p1-name) printf(所查詢圖書信息為 :n); printf(登錄號作者名書名分類號出版單位出版時間圖書價(jià)格 ( 元):n); printf(%-9ld %-5s %-6s %-8s %-8s %-8ld %-6.2fn,d-num,d-author,d-name,d-sort,d-add,d-time,d-price); else printf(找不到所查詢的書籍 ! n); 12.search2 ()函數(shù)按作者名搜索圖書信息圖書搜索信息的另外一
36、種方法是按照書籍的作者名查詢,所用的方法跟上面的搜索方法一樣。都是通過strcmp 函數(shù)進(jìn)行判斷其是否一致,相同就輸出要查詢的圖書信息,不一致就比較下一條直到循環(huán)結(jié)束。輸入要查詢的作者名稱33 while(strcmp(d-author,p1-author)&(d-next!=0)查詢書籍名稱 d=d-next d-author,p1-author比較兩者是否相同?是否輸出查詢圖書信息查找不到該圖信息返回主函數(shù)源程序?yàn)椋簐oid search2(struct book *d) /按作者名搜索函數(shù) struct book *p1; p1=(struct book *)malloc(len
37、); printf(輸入要查詢書籍的作者名:n); scanf(%s,p1-author); while(strcmp(d-author,p1-author)&(d-next!=0) d=d-next; if(!strcmp(d-author,p1-author) printf(所查詢書籍為 :n); printf(登錄號作者名書名分類號出版單位出版時間圖書價(jià)格 (元):n); printf(%-9ld %-5s %-6s %-8s %-8s %-8ld %-6.234 fn,d-num,d-author,d-name,d-sort,d-add,d-time,d-price); els
38、e printf(找不到所查詢的書籍 ! n); 13.sort 函數(shù)按登錄號排序選擇排序是一種比較簡單且常用的排序方法。具體的做法是將結(jié)構(gòu)中的每一項(xiàng)都進(jìn)行比較,例如:設(shè)有10 個元素 a1a10,將 a1 與a2a10進(jìn)行比較,若 a1 比 a2 都小,則將其中最大的一個與a1 交換,此時 a1 中存放了 10 個中最小的數(shù)。第二輪將a2 與 a3a10比較,將剩下的 9 個數(shù)中的最小者ai 與 a2 對換,此時 a2 中存放的是 10 個中第二小的數(shù)。依次類推,進(jìn)行比較直到都由小到大排列。sort ()函數(shù)是按照登錄號的大小來排序的。分配空間p3=(struct book *)malloc
39、(len); 圖書信息不為0 while(p1!=0) 前一本圖書的登錄號大于下一本圖書的登錄號?是否把圖書信息交換p1 指向下一本圖書p1=0?是否 p2 指向下一本圖書35 返回( p)到主函數(shù)源程序?yàn)椋簊truct book *sort(struct book *p1) /按登錄號排序函數(shù) struct book *p2,*p,*p3; p3=(struct book *)malloc(len); p=p2=p1; while(p1!=0) if(p2-num=p1-num) p3-num=p2-num; strcpy(p3-author,p2-author); strcpy(p3-na
40、me,p2-name); strcpy(p3-sort,p2-sort); strcpy(p3-add,p2-add); p3-time=p2-time; p3-price=p2-price; p2-num=p1-num; strcpy(p2-author,p1-author); strcpy(p2-name,p1-name); strcpy(p2-sort,p1-sort); strcpy(p2-add,p1-add); p2-time=p1-time; p2-price=p1-price; 36 p1-num=p3-num; strcpy(p1-author,p3-author); str
41、cpy(p1-name,p3-name); strcpy(p1-sort,p3-sort); strcpy(p1-add,p3-add); p1-time=p3-time; p1-price=p3-price; p1=p1-next; if(p1=0) p2=p1=p2-next; return(p); 14.sort1 ()函數(shù)按圖書價(jià)格排序在某些情況下需要對所有的圖書進(jìn)行價(jià)格分類的時候,就必須要對書籍進(jìn)行按價(jià)格排序。方法與上面的一樣,而且針對個各種不同的情況,還可以增加排序的類型。這里只列舉兩種排序。分配空間p3=(struct book *)malloc(len); 37 圖書信息不為0
42、 while(p1!=0) 前一本圖書的價(jià)錢大于下一本圖書的價(jià)錢?是否把圖書信息交換p1 指向下一本圖書p1=0?是否 p2 指向下一本圖書返回( p)到主函數(shù)源程序?yàn)椋簊truct book *sort1(struct book *p1) /按價(jià)格排序函數(shù) struct book *p2,*p,*p3; p3=(struct book *)malloc(len); p=p2=p1; while(p1!=0) if(p2-price=p1-price) p3-price=p2-price; strcpy(p3-author,p2-author); strcpy(p3-name,p2-name)
43、; strcpy(p3-sort,p2-sort); strcpy(p3-add,p2-add); p3-time=p2-time; 38 p3-num=p2-num; p2-price=p1-price; strcpy(p2-author,p1-author); strcpy(p2-name,p1-name); strcpy(p2-sort,p1-sort); strcpy(p2-add,p1-add); p2-time=p1-time; p2-num=p1-num; p1-price=p3-price; strcpy(p1-author,p3-author); strcpy(p1-name
44、,p3-name); strcpy(p1-sort,p3-sort); strcpy(p1-add,p3-add); p1-time=p3-time; p1-num=p3-num; p1=p1-next; if(p1=0) p2=p1=p2-next; return(p); 39 15.print ()輸出函數(shù)print函數(shù)是個簡單的printf函數(shù),作用是顯示需要的圖書信息。每次進(jìn)行排序,查詢等操作時都要調(diào)用printf函數(shù)。調(diào)用 printf直接輸出包括登錄號、作者名、書名、分類號、出版單位、出版時間、圖書價(jià)格等,圖書信息。printf(“登錄號、作者名、書名、分類號、出版單位、出版時間、
45、圖書價(jià)格( 元) ”) while(p!=0) printf(%-9ld %-5s %-6s %-8s %-8s %-8ld %-6.2fn,p-num,p-author,p-name,p-sort,p-add,p-time,p-price); p=p-next; 源程序?yàn)椋簐oid print(struct book *p) /輸出函數(shù) printf(登錄號作者名書名分類號出版單位出版時間圖書價(jià)格 ( 元):n); while(p!=0) 40 printf(%-9ld %-5s %-6s %-8s %-8s %-8ld %-6.2fn,p-num,p-author,p-name,p-sor
46、t,p-add,p-time,p-price); p=p-next; 三源程序#include #include #include #define len sizeof(struct book) struct book /*定義結(jié)構(gòu)體 */ long num; 41 char author15; /作者名 char name25; /書名 char sort25; /分類號 char add30; /出版單位 long time; /出版時間 float price; /價(jià)格 struct book *next; ; int n; void main() void login(); /對口令函
47、數(shù)的聲明void save(struct book *p); /對保存函數(shù)的聲明struct book *read(); /對讀入函數(shù)的聲明struct book *create(void); /建立圖書庫信息函數(shù)的聲明struct book *del(struct book *d); /刪除圖書函數(shù)的聲明struct book *increase(struct book *d); /添加圖書函數(shù)的聲明void search1(struct book *d); /書名搜索函數(shù)的聲明void search2(struct book *d); /作者名搜索函數(shù)的聲明int modify(struc
48、t book *d); /修改圖書函數(shù)的聲明struct book *sort(struct book *d); /排序函數(shù)的聲明struct book *sort1(struct book *d); 42 void print(struct book *p); /輸出函數(shù)的聲明struct book *head; file *fp; int k,i,l; char u; login(); if(fp=fopen(book.dat,rb)=0) /打開已存在的圖書庫信息,如果不存在請先建立 do printf(當(dāng)前沒有圖書信息,請先建立圖書庫信息:n); head=create(); whil
49、e(head=0); save(head); printf(保存成功 n); head=read(); while(1) /菜單功能 printf( 圖書信息管理系統(tǒng) n); printf( 請選擇對應(yīng)功能的數(shù)字鍵: n); printf(|n); printf(| 錄入圖書信息 (1) |n); 43 printf(| 瀏覽所有圖書 (2) |n); printf(| 查詢圖書信息 (3) |n); printf(| 圖書進(jìn)行排序 (4) |n); printf(| 修改圖書信息 (5) |n); printf(| 刪除圖書信息 (6) |n); printf(| |n); printf(退
50、出程序 (7) n); scanf(%d,&k); if(k=1) /錄入圖書信息 i=n; head=increase(head); /調(diào)用添加函數(shù)添加圖書信息 if(i!=n) printf(新圖書庫信息: n); print(head); /調(diào)用輸出函數(shù)顯示圖書信息 save(head); /調(diào)用保存函數(shù)保存圖書信息 printf(按任意鍵返回 !); getch(); system(cls); printf(nnn);continue; 44 if(k=2) /瀏覽圖書信息 head=read(); /調(diào)用 read 函數(shù)查看所有圖書信息print(head); printf(按任意鍵返回 !); getch(); system(cls); printf(nnn);continue; if(k=3) /查詢圖書信息 printf(按書名查詢 (1) 按作者名查詢 (2)n); scanf(%d,&u); if(u=1) search1(head); /調(diào)用 search1 函數(shù)進(jìn)行按書名查詢圖書信息if(u=2) search2(head); /調(diào)用 search2 函數(shù)進(jìn)行按作者名查詢圖書信息printf(按任意鍵返回 !); getch(); system(cls)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《會計(jì)從業(yè)總賬管理》課件
- 《廣場規(guī)劃設(shè)計(jì)》課件
- 寒假自習(xí)課 25春初中道德與法治八年級下冊教學(xué)課件 第三單元 第六課 第4課時 國家監(jiān)察機(jī)關(guān)
- 短信營銷合同三篇
- 農(nóng)學(xué)啟示錄模板
- 理發(fā)店前臺接待總結(jié)
- 兒科護(hù)士的工作心得
- 探索化學(xué)反應(yīng)奧秘
- 收銀員的勞動合同三篇
- 營銷策略總結(jié)
- (1-6年級)小學(xué)數(shù)學(xué)常用單位換算公式
- 中建安全標(biāo)準(zhǔn)化圖冊圖集(上下全集)(全電子版)
- 高一物理必修一思維導(dǎo)圖
- 錨索張拉和鎖定記錄表
- 2016年校本課程--------合唱教案1
- 【原創(chuàng)】《圓柱與圓錐》復(fù)習(xí)課教教學(xué)設(shè)計(jì)
- 《中國藥典》規(guī)定中藥飲片用量
- 國網(wǎng)合肥供電公司城市新建住宅小區(qū)電力建設(shè)實(shí)施細(xì)則
- 初中物理元件實(shí)物圖及一些常用圖形
- 中小學(xué)生備戰(zhàn)期末迎接期末考試動員班會PPT
- 房測之友BMF用戶說明書
評論
0/150
提交評論