




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上東莞理工學(xué)院C語言程序設(shè)計課程設(shè)計題 目:圖書信息管理系統(tǒng)院 系:會計學(xué)院專 業(yè):會計學(xué)年 級:2012班 別: 4班 指導(dǎo)教師:組 長: 同組成員:目錄一 目的 本課程設(shè)計為學(xué)生提供了一個既動手又動腦,自學(xué),查資料,獨立實踐的機會。將本學(xué)期課本上的理論知識和實際有機的結(jié)合起來,鍛煉學(xué)生實際分析問題和解決問題的能力,提高學(xué)生適應(yīng)實際、實踐編程的能力,使對C語言系統(tǒng)編程有一個大致的了解。 二 需求分析 根據(jù)圖書館圖書信息管理的需要,建立一個“圖書信息管理系統(tǒng)”,以方便對圖書的各項管理操作。開發(fā)目的如下:1、圖書信息包括:登錄號、書名、作者名、分類
2、號、出版單位、出版時間、價格等。2、圖書信息管理系統(tǒng),提供以下功能: 1)圖書信息錄入功能(圖書信息用文件保存)輸入;2)圖書信息瀏覽功能輸出 ;3)查詢和排序功能:算法 ;4)按書名查詢 ;5)按作者名查詢 ;6) 按登錄號從大到小排列;7)圖書信息的刪除與修改 三 概要設(shè)計 程序總體功能框架: 開 始 界 面 主 要 提 示 的 菜 單 界 面 刪 除 圖 書 信 息 瀏 覽 圖 書 信 息 查 詢 圖 書 信 息 修 改 圖 書 信 息 插 入 圖 書 信 息采用結(jié)構(gòu): struct tsxx/定義結(jié)構(gòu)long dlnum;/定義登錄號char bname10;/定義書名ch
3、ar aname10;/定義作者名char scnum10;/定義分類號char plname10;/定義出版社名char time11;/定義錄入時間float price;/定義價格struct tsxx * next;/定義指向下一個結(jié)構(gòu)的首地址;鏈表結(jié)構(gòu):struct tsxx Bstruct tsxx Aheadstruct tsxx DNULLstruct tsxx C各功能獨立自定義的函數(shù):1、插入圖書信息(按登錄號從大到小排序):struct tsxx * zengjia(struct tsxx * head)/傳遞鏈表的首地址,并返回鏈表的首地址2. 、瀏覽全部的圖書信息:v
4、oid Ptrint_Stu_Doc(struct tsxx *head)/傳遞鏈表的首地址3、查詢圖書信息(包括書名查詢和作者名查詢):void Check(struct tsxx * head)/傳遞鏈表的首地址4、刪除圖書信息:struct tsxx * Delete(struct tsxx * head)/傳遞鏈表的首地址,并返回鏈表的首地址5.、修改圖書信息:struct tsxx * revise(struct tsxx * head)/傳遞鏈表的首地址,并返回鏈表的首地址其他一些變量的定義:long size;/定義結(jié)構(gòu)的大小FILE * fp;/定義文件指針,指向文件struc
5、t tsxx * head;/定義鏈表的首地址struct tsxx * p;/定義結(jié)構(gòu)指針char choice;/定義選擇變量四 詳細設(shè)計 1、 設(shè)計思路: 首先,輸入一些圖書信息,申請一個結(jié)構(gòu)類型的動態(tài)內(nèi)存,把圖書信息賦值到動態(tài)內(nèi)存內(nèi),每一快動態(tài)內(nèi)存存放一本圖書的信息,并形成一條鏈表,比較登錄號的大小,按登錄號從大到小排列;然后,建立并打開一個文件,把鏈表中的數(shù)據(jù)寫入文件中,然后關(guān)閉文件;最后,插入功能:先把所有的數(shù)據(jù)從文件中讀出來,申請動態(tài)內(nèi)存來存放,形成鏈表,輸入你想要插入的圖書信息,比較登錄號的大小,然后把新的圖書信息按照登錄號的大小順序插入鏈表里面,新建一個文間,把新
6、的鏈表寫入文件中;瀏覽功能:先把所有的數(shù)據(jù)從文件中讀出來,申請動態(tài)內(nèi)存來存放,形成鏈表,然后鏈表頭開始,把結(jié)構(gòu)中的數(shù)據(jù)一個一個輸出到界面上;查詢功能:先把所有的數(shù)據(jù)從文件中讀出來,申請動態(tài)內(nèi)存來存放,形成鏈表;選擇你要查詢的方式:1是按書名查詢,2是按作者名查詢。輸入你的選擇,判斷你的查詢方式。書名查詢:輸入你要查詢的書名,在鏈表中查找你這本書,然后把這本書的信息輸出到界面上;作者名查詢:輸入你要查詢的作者名,在鏈表中查找對應(yīng)作者名的圖書的信息,并把信息輸入到界面上;修改功能:先把所有的數(shù)據(jù)從文件中讀出來,申請動態(tài)內(nèi)存來存放,形成鏈表,輸入你要修改的圖書的登錄號,在鏈表中查找對應(yīng)登錄號的圖書信
7、息的結(jié)構(gòu),重新輸入你要修改的圖書的全部信息,并把這些新的圖書信息賦值給找到的結(jié)構(gòu),覆蓋舊的圖書信息,新建一個文件,存放新的圖書信息;刪除功能:先把所有的數(shù)據(jù)從文件中讀出來,申請動態(tài)內(nèi)存來存放,形成鏈表,輸入你要刪除的圖書的登錄號,在鏈表中查找對應(yīng)登錄號的圖書信息的結(jié)構(gòu)與前一個結(jié)構(gòu),讓前一個結(jié)構(gòu)的next指向?qū)?yīng)登錄號結(jié)構(gòu)的下一個結(jié)構(gòu),釋放動態(tài)內(nèi)存,新建一個新的文件,存放新的圖示信息;2、 數(shù)據(jù)結(jié)構(gòu)的選擇:據(jù)圖書信息表特點,決定選用鏈表這種數(shù)據(jù)結(jié)構(gòu)(也可用其它的數(shù)據(jù)結(jié)構(gòu))來作為組成成績數(shù)據(jù)庫的基本框架。鏈表是最簡單也是最常用的一種動態(tài)數(shù)據(jù)結(jié)構(gòu)。它是對動態(tài)獲得的內(nèi)存進行組織的一種結(jié)構(gòu)。選用鏈表有得
8、好處:1. 即用即申請,不會造成內(nèi)存空間的浪費;2. 是數(shù)據(jù)之間既有獨立性,又便于數(shù)據(jù)的相互連系;3. 便于數(shù)據(jù)的添加及刪除等優(yōu)點。3、設(shè)計思想的選擇: 用模塊化程序設(shè)計理念,對各個功能定義不同函數(shù),分塊處理,這樣有利于后期調(diào)試及今后對功能的完善。五 調(diào)試分析 1、 把數(shù)據(jù)從文件中拿出來時,當文件是空的,它也會讀數(shù)據(jù),這時的數(shù)據(jù)時0;當文件不空時,最后的數(shù)據(jù)會被讀兩次。因此,這樣讀出來的文件就會出現(xiàn)一些小差錯,必須做適當?shù)恼{(diào)整。當文件為空,把鏈表的首地址head賦值為NULL,然后釋放動態(tài)內(nèi)存;當文件不為空時,把鏈表的最后第二個結(jié)構(gòu)的next賦值為NULL,然后釋放動態(tài)內(nèi)存。2、
9、因為開始時定義choice為整型變量,所以只能輸入整數(shù),如果不小心輸入字符數(shù)時,整個程序就出現(xiàn)錯誤,不能繼續(xù)運行。因此,我們把choice重新定義成字符型,這樣就可以輸入字符數(shù),所以后面用switch時,也要改成字符型。3、 一開始運行程序是,因為還沒有創(chuàng)建文件,所以在讀取文件中的數(shù)據(jù)時,就會出現(xiàn)“不能打開文件”的錯誤。因此,在一開始運行程序時必須要先創(chuàng)建一個文件,以后程序就會自動建立一個新的文件。4、 在作者名查詢那里,一開始是當查找到一條對應(yīng)的結(jié)構(gòu)數(shù)據(jù)時,因為用了break,所以就直接退出了循環(huán),因此如果一個作者有多本書是,以只能查詢一本書的信息。調(diào)試后,我們把break刪掉,這樣它就會一
10、直循環(huán),直到鏈表的最后一條數(shù)據(jù),它才會跳出循環(huán)。這樣就能把一個作者全部的書都顯示出來。六 測試結(jié)果1、 數(shù)據(jù)的輸入:新建一個文件,并把數(shù)據(jù)寫入文件中:增加功能:查詢功能:瀏覽功能:修改功能:刪除功能:七 用戶使用說明一開始運行程序時,就會出現(xiàn)一個讓你選擇的界面,1.是增加數(shù)據(jù),2是查詢數(shù)據(jù),3是瀏覽數(shù)據(jù),4是修改數(shù)據(jù),5是刪除數(shù)據(jù),6是輸入數(shù)據(jù),并新建一個文本存這些數(shù)據(jù),0是退出程序。當你輸入1時,界面就會輸出“Enter the static(lognum bookname authorname scorenum publishname time price):”,接
11、著你就輸入你要增加的圖書的信息就可以了。當你輸入2時,就會在出現(xiàn)一個讓你選擇的界面,1是書名查詢,2是作者名查詢。當你輸入1時,如果文件時空的,界面就會輸出“N0 Records”,如果文件不是空的,界面就會輸出“Input bname:”,就著你就輸入你要查詢的圖書的書名,如果文件中沒有你要查詢的這本書,界面就會輸出“There isn't this static!”,當文件中有你要查詢的這本書時,界面就會輸出這本書的全部信息。當你輸入2時,如果文件時空的,界面就會輸出“N0 Records”,如果文件不是空的,界面就會輸出“Input aname:”,就著你就輸入你要查詢的圖書的作
12、者名,如果文件中沒有你要查詢的這本書,界面就會輸出“There isn't this static!”,當文件中有你要查詢的這本書時,界面就會輸出這本書的全部信息。當你輸入3時,界面就會輸出全部圖書的全部信息;當你輸入4時,界面就會輸出“Input the lognum:”,接著你要輸入你要修改的圖書的登錄號,如果文件時空的,界面就會輸出“Not records!”,如果文件不是空的,但沒有你所輸入的登錄號的圖書,界面就會輸出“There isn't this static!”,如果文件不是空的,并且有你輸入的登錄號的圖書,界面就會輸出這本書的全部信息,很“Retype the
13、 static:”,接著你重新輸入這本書的全部信息就可以了。當你輸入4時,界面就會輸出“Input dlnum:”,接著你就輸入你要刪除的圖書的登錄號就可以了。當你輸入6時,界面就會輸出“Enter the static(lognum bookname authorname scorenum publishname time price):”,接著你就輸入你要增加的圖書的信息就可以了。當你輸入0時,就退出程序當你輸入的是其他的數(shù)字或是字符時,界面就會輸出“Enter error!”。八 課程設(shè)計總結(jié)做為這個小組的組長,我覺得我們所設(shè)計的程序今本上已經(jīng)能夠?qū)崿F(xiàn)題目的要求,并且運用的鏈
14、表,還用文件來存數(shù)據(jù)。但是,我覺得我們的程序還是存在著一些不足之處。首先建立一個文件是文件名和拓展名都已經(jīng)被規(guī)定好的,其次是當文件為空時,程序運行時,當你輸入得選擇不是6是,會發(fā)生錯誤,所以一開始要先運行選擇6,后才能運行其他選擇,最后是運行查詢、修改、刪除功能,你輸入的信息要跟文件中的一致,才能實現(xiàn),如果稍有不同,就不夠?qū)崿F(xiàn)這些功能了。另外,我想感謝我的組員,因為我們是分工合作的,他們有的負責(zé)一個功能,有的負責(zé)兩個功能,而我主要是些主函數(shù),在他們的積極配合下,我們很快就把總程序?qū)懞?,并調(diào)試完畢。所以我想感謝他們的配合。因為集體的力量是強大的,只有我們的積極合作,才能夠準時的完成這個課程設(shè)計。
15、最后,我覺得在這個課程設(shè)計的過程中,我學(xué)到了很多東西。第一是耐心,當你在調(diào)試程序中,看到了你設(shè)計的程序出現(xiàn)了那么多錯誤,或者當顯示0錯誤0警告,卻不能運行,或者是運行結(jié)果不是你所期望時,我覺得這時候最是考驗?zāi)托牡臅r候,也只有耐心和永不言敗的信念,才能支持你逆流而上,解決所有的困難。在這個過程中,我試過用了幾個鐘的時間找一個錯誤,而結(jié)果只是打錯了一個定義。第二是溝通,因為我對C語言也比較熟了,有一些同學(xué)比較陌生,所以他們來問我,在我解答他們的問題是,我深刻的體會了溝通的重要性,因為只有你溝通的好,他們?nèi)菀桌斫?,你也不用浪費口舌去講一些不必要的知識點程序參考代碼:/*.主函數(shù).*/#include
16、<stdio.h>#include<string.h>#include<stdlib.h>struct bookinf /定義結(jié)構(gòu)int num; char bname20; char wname10; char clanum14; char pubcom10; char pubtime10; float price; struct bookinf *next;long size;FILE * fp;struct bookinf * vitil(void)/從文件中拿出數(shù)據(jù)struct bookinf * p1,* p2,* p3;int num; char
17、 bname20; char wname10; char clanum14; char pubcom10; char pubtime10; float price; long i=0;if(fp=fopen("程序設(shè)計.txt","r")=NULL)/打開文件printf("can not open file 程序設(shè)計.txt!n");exit(0);while(! feof(fp)if(feof(fp) break;if(i>=1)p3=p1;if(p1=(struct bookinf *)calloc(1,size)=NUL
18、L)printf("Not able to allocate memory.n");exit(1);fscanf(fp,"%ld%s%s%s%s%s%f",&num,bname,wname,clanum,pubcom,pubtime,&price);p1->num=num;strcpy(p1->bname,bname);strcpy(p1->wname,wname);strcpy(p1->clanum,clanum);strcpy(p1->pubcom,pubcom);strcpy(p1->pubtim
19、e,pubtime);p1->price=price;if(i=0)p2=p1;elsep3->next=p1;i+; if(p2->next=p1)p2->next=NULL;elsep3->next=NULL;free(p1);fclose(fp);/關(guān)閉文件return p2;void inputchoice(void)printf("n Choice:n");printf("1.Addn");printf("2.Checkn");printf("3.Scann");printf
20、("4.Revisen");printf("5.Delectn");printf("6.Enter the stacticn");printf("0.Exitn");void write_to_txt(struct bookinf * head)/寫入文件struct bookinf * p;if(fp=fopen("程序設(shè)計.txt","w")=NULL)printf("can not open file 程序設(shè)計.txt!n");exit(0);for
21、(p=head;p;p=p->next)fprintf(fp,"%ld %s %s %s %s %s %fn",p->num,p->bname,p->wname,p->clanum,p->pubcom,p->pubtime,p->price);fclose(fp);/*.增加功能.*/struct bookinf * Enter(struct bookinf * head)/增加數(shù)據(jù)struct bookinf * p1,* p2,*p3;int num;char bname20; char wname10; char cla
22、num14; char pubcom10; char pubtime10; float price; if(p1=(struct bookinf *)calloc(1,size)=NULL)printf("Not able to allocate memory.n");exit(1);printf("Enter the static(lognum bookname authorname scorenum publishname time price):n");scanf("%ld%s%s%s%s%s%f",&num,bname
23、,wname,clanum,pubcom,pubtime,&price);p1->num=num;strcpy(p1->bname,bname);strcpy(p1->wname,wname);strcpy(p1->clanum,clanum);strcpy(p1->pubcom,pubcom);strcpy(p1->pubtime,pubtime);p1->price=price;p2=head;if(head=NULL)head=p1;head->next=NULL;elsewhile(p1->num>p2->num
24、)&&(p2->next!=NULL)p3=p2;p2=p2->next;if(p1->num<=p2->num)if(head=p2)head=p1;elsep3->next=p1;p1->next=p2;elsep2->next=p1;p1->next=NULL;return head;/*.查詢功能.*/void Check(struct bookinf * head) /查詢,書名,作者名struct bookinf * ptr;char a;char bname10;char wname10;printf(&quo
25、t;n Choice:n");printf("1:bnamen2:anamen");scanf("%s",&a);if(head=NULL)printf("nN0 Recordsn");else/鏈表非空 switch(a)case '1':/按書名查詢printf("Input bname:");scanf("%s",bname);for(ptr=head;ptr;ptr=ptr->next)if(strcmp(ptr->bname,bname)=
26、0 )printf(" dlnum bname aname scnum plname time pricen");printf("%5ld %10s %10s %10s %10s %10s %8fn",ptr->num,ptr->bname,ptr->wname,ptr->clanum,ptr->pubcom,ptr->pubtime,ptr->price);if(ptr=NULL)printf("There isn't this static!n");break;case '
27、2':/按作者名查詢printf("Input wname:");scanf("%s",wname);for(ptr=head;ptr;ptr=ptr->next)if(strcmp(ptr->wname,wname)=0)printf(" num bname wname clanum pubcom pubtime pricen");printf("%3ld %3s %3s %3s %3s %3s %3fn",ptr->num,ptr->bname,ptr->wname,ptr
28、->clanum,ptr->pubcom,ptr->pubtime,ptr->price);if(ptr=NULL)printf("There isn't this static!n");break;default:printf("Enter error!n");break;/*.瀏覽功能.*/void Ptrint_Stu_Doc(struct bookinf *head)/瀏覽struct bookinf * ptr;if(head=NULL)printf("nNo Recordsn");else
29、printf("nThe Books Information Are: n"); printf(" dlnum bname aname scnum plname time price n"); ptr=head;while(ptr!=NULL)printf(" %ld %s %s %s %s %s %6.3f n",ptr->num,ptr->bname,ptr->wname,ptr->clanum,ptr->pubcom,ptr->pubtime,ptr->price);ptr=ptr-&g
30、t;next;/*.修改功能.*/struct bookinf * Revise(struct bookinf * head) /定義子函數(shù)struct bookinf * p1;int num; char bname20; char wname10; char clanum14; char pubcom10; char pubtime10; float price; printf("Input the lognumn"); /輸出scanf("%ld",&num); /讀取 長整形輸出if(head=NULL) /開頭空printf("
31、;Not records!n"); /輸出沒結(jié)果 換行elsefor(p1=head;p1;p1=p1->next)if(p1->num=num) printf("%ld %s %s %s %s %s %fn",p1->num,p1->bname,p1->wname,p1->clanum,p1->pubcom,p1->pubtime,p1->price); /字節(jié) 大小printf("Retype the static:n"); /輸出scanf("%ld%s%s%s%s%s%f&
32、quot;,&num,bname,wname,clanum,pubcom,pubtime,&price); /讀取p1->num=num;strcpy(p1->bname,bname); /讀取strcpy(p1->wname,wname);strcpy(p1->clanum,clanum);strcpy(p1->pubcom,pubcom);strcpy(p1->pubtime,pubtime);p1->price=price;break; /退出循環(huán)if(p1=NULL)/ p1空printf("There isn'
33、;t this static!n");return head;/*.刪除功能.*/struct bookinf * Delete(struct bookinf * head) /刪除struct bookinf * ptr1,* ptr2; /定義 指針1 2int num;printf("Input num:n");scanf("%ld",&num);if(head=NULL) /鏈表空return NULL;elsewhile(head!=NULL && head->num=num) /要被刪除結(jié)點為表頭結(jié)點
34、ptr2=head;head=head->next;printf(" num bname wname clanum pubcom pubtime pricen");printf("%5ld %10s %10s %10s %10s %10s %8fn",ptr2->num,ptr2->bname,ptr2->wname, /字節(jié)ptr2->clanum,ptr2->pubcom,ptr2->pubtime,ptr2->price);free(ptr2); /釋放/要被刪除結(jié)點為非表頭結(jié)點ptr1=head;ptr2=head->next;while(ptr2!=NULL) /指針2非空if(ptr2->num=num)/ptr2
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 開幕式致辭與未來發(fā)展規(guī)劃演講文本
- 不同類型疾病患者就醫(yī)習(xí)慣分析表
- 農(nóng)業(yè)觀光可行性報告
- 企業(yè)培訓(xùn)員工的方式
- 農(nóng)業(yè)科技成果
- 股東合作與投資方案說明書
- 全國光伏發(fā)電項目
- 育嬰師復(fù)習(xí)測試題
- 農(nóng)村金融投資者保護指南
- 中級養(yǎng)老護理復(fù)習(xí)測試卷含答案(二)
- 住建局發(fā)布!建設(shè)工程消防驗收常見質(zhì)量通病手冊
- 辦公樓招商知識培訓(xùn)課件
- 2025北新集團建材股份有限公司應(yīng)屆生招聘筆試參考題庫附帶答案詳解
- 國家鐵路局直屬事業(yè)單位社會統(tǒng)一招聘考試真題2024
- 跨學(xué)科實踐:制作簡易活塞式抽水機 -2024-2025學(xué)年人教版物理八年級下學(xué)期
- 廣西壯族自治區(qū)馬山縣實驗高中-主題班會-高中如何上好自習(xí)課【課件】
- 2025年阜陽科技職業(yè)學(xué)院單招職業(yè)技能測試題庫及答案1套
- 2025屆高考語文復(fù)習(xí):歷年高考語文錯別字選擇題
- 二零二五醫(yī)療影像數(shù)據(jù)標注與審核服務(wù)合同范本3篇
- GB/T 18851.2-2024無損檢測滲透檢測第2部分:滲透材料的檢驗
- 正弦穩(wěn)態(tài)電路分析
評論
0/150
提交評論