久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

數(shù)據(jù)結(jié)構(gòu)CAI系統(tǒng)項(xiàng)目手冊(cè)

時(shí)間:2019-05-12 08:12:43下載本文作者:會(huì)員上傳
簡(jiǎn)介:寫寫幫文庫(kù)小編為你整理了多篇相關(guān)的《數(shù)據(jù)結(jié)構(gòu)CAI系統(tǒng)項(xiàng)目手冊(cè)》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫(kù)還可以找到更多《數(shù)據(jù)結(jié)構(gòu)CAI系統(tǒng)項(xiàng)目手冊(cè)》。

第一篇:數(shù)據(jù)結(jié)構(gòu)CAI系統(tǒng)項(xiàng)目手冊(cè)

數(shù)據(jù)結(jié)構(gòu)

項(xiàng)目書

項(xiàng)目經(jīng)理: 產(chǎn)品經(jīng)理: 測(cè)試經(jīng)理:

北京工業(yè)大學(xué)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)項(xiàng)目書

一、問題描述:

以數(shù)據(jù)結(jié)構(gòu)教材中樹和圖的內(nèi)容為例,設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)的CAI(計(jì)算機(jī)輔助教學(xué))系統(tǒng),用菜單的形式選擇各項(xiàng)功能。用圖形化界面的形式顯示算法的執(zhí)行過程。

二、程序分析:

二叉樹的遍歷算法演示中,首先定義一個(gè)TREE的結(jié)構(gòu)體,里面存放的數(shù)據(jù)類型分別是char,兩個(gè)TREE類型指針*lchild(左孩子),*rchild(右孩子),兩個(gè)int分別是x和y,分別代表了樹的x坐標(biāo)和y坐標(biāo)。再建立一個(gè)名稱為OUTPUT的結(jié)構(gòu)體里面存放了三種遍歷的x坐標(biāo)和y坐標(biāo)。通過對(duì)Tree *CreatTree();函數(shù)的調(diào)用生成二叉樹再通過void Preorder(Tree *t);void Midorder(Tree *t);void Posorder(Tree *t);這三個(gè)函數(shù)進(jìn)行前中后的遍歷來判斷左右孩子是否存在。

三、程序設(shè)計(jì):

1、結(jié)構(gòu)化函數(shù)設(shè)計(jì)

北京工業(yè)大學(xué)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)項(xiàng)目書

2、設(shè)計(jì)工具

Win-TC, c文件

3、編碼

頭文件:

#include #include #include #include #include

結(jié)構(gòu)體:

typedef struct TREE {

char data;

/*樹的結(jié)點(diǎn)數(shù)據(jù)*/

struct TREE *lchild;

struct TREE *rchild;

int x;

/*樹的x坐標(biāo)*/

int y;

/*樹的y坐標(biāo)*/ }Tree;

struct OUTPUT {

int x;

/*三種遍歷的x坐標(biāo)*/

int y;

/*三種遍歷的y坐標(biāo)*/

int num;}s;

函數(shù):

·函數(shù)名稱:void DrawTree(Tree *t);·函數(shù)描述:用圖形顯示創(chuàng)建好的樹

·函數(shù)名稱:void Preorder(Tree *t);·函數(shù)描述:前序遍歷

·函數(shù)名稱:void Midorder(Tree *t);·函數(shù)描述:中序遍歷

·函數(shù)名稱:void Posorder(Tree *t);·函數(shù)描述:后序遍歷

北京工業(yè)大學(xué)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)項(xiàng)目書

·函數(shù)名稱:void DrawNode(Tree *t,int color);

·函數(shù)描述:遍歷時(shí)顯示每個(gè)結(jié)點(diǎn)的過程

·函數(shù)名稱:void ClrScr();

·函數(shù)描述:清空樹的區(qū)域

·函數(shù)名稱:void Close(void);·函數(shù)描述:圖形模式結(jié)束

四、測(cè)試與調(diào)試:

1、調(diào)試報(bào)告

一開始的調(diào)試中,我們就碰到了很嚴(yán)重的問題,圖形化的界面一直無法正常的顯示出來,運(yùn)行之后,都是一閃即逝,為此,我們上網(wǎng)查閱了很多信息。加了getch(); 也加了system(“plause”);,這些基本的解決方法毫無用處;又有說要把Egavga.bgi這個(gè)文件和生成的exe文件放在一起,起初使用TC3.0時(shí)也無法正常顯示圖形界面。多番嘗試無果之后打算試試Win-TC,結(jié)果莫名其妙的成功了。并且發(fā)現(xiàn)Egavga.bgi的確要和exe文件放在同一個(gè)文件夾,不在一起時(shí)無法進(jìn)入圖形界面,這是在一次另存為把文件保存到其他文件夾時(shí)發(fā)現(xiàn)的。還有最開始時(shí),對(duì)于一些需要用到的函數(shù)所需的頭文件不是很了解,不過通過網(wǎng)絡(luò)的搜索之后,都一一得到解答。但是直到目前為止,依然有個(gè)比較大的問題,就是系統(tǒng)自動(dòng)生成二叉樹的時(shí)候,經(jīng)常會(huì)出現(xiàn)重復(fù)字母的結(jié)點(diǎn),我們想的是能不能一個(gè)節(jié)點(diǎn)之后就在26個(gè)字母之中把這個(gè)結(jié)點(diǎn)用到的字母抽出去,然后剩下的位置就從剩下的字母中選取,可是二叉樹是一下子全部顯示出來,好像沒有明顯的先后順序,最后還是不會(huì)。

2、測(cè)試結(jié)果

A:主界面---選擇生成樹的方式(自動(dòng)/手動(dòng))

北京工業(yè)大學(xué)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)項(xiàng)目書

B:選擇1后

C:選擇2后

D:按任意鍵后,進(jìn)入二叉樹的演示初始界面---圖形化界面的初始化

北京工業(yè)大學(xué)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)項(xiàng)目書

E:按任意鍵后開始遍歷,并輸出遍歷結(jié)果

五、主要算法分析:

(一)二叉樹的生成

Tree *InitTree(int h,int t,int w){

char ch;

int n;

/*自動(dòng)建立時(shí)隨機(jī)賦值判斷是否是NULL的標(biāo)志*/

Tree *node;

if(way=='2')

/*手動(dòng)建立需要自己輸入*/

scanf(“%c”,&ch);

else

/*自動(dòng)建立的賦值*/

{

n=random(5);

if(n==0&&nodeNUM>=3)

/*隨機(jī)賦值時(shí)候確保自動(dòng)建立的二叉樹有三個(gè)結(jié)點(diǎn)*/

ch=' ';

else

ch=65+random(25);

}

if(ch==' ')

/*輸入空格代表NULL*/

return NULL;

北京工業(yè)大學(xué)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)項(xiàng)目書

else

{

if(h==6||nodeNUM==26)/*如果樹的層次已經(jīng)到5或者結(jié)點(diǎn)樹到達(dá)26個(gè)就自動(dòng)返回NULL*/

return NULL;

node=(Tree*)malloc(sizeof(Tree));

node->data=ch;

node->x=t;

/*樹的x坐標(biāo)是傳遞過來的橫坐標(biāo)*/

node->y=h*50;/*樹的y坐標(biāo)與層次大小有關(guān)*/

nodeNUM++;

node->lchild=InitTree(h+1,t-w,w/2);

node->rchild=InitTree(h+1,t+w,w/2);

}

return node;} 功能:實(shí)現(xiàn)二叉樹的生成功能,用于構(gòu)建二叉樹

(二)圖形化顯示二叉樹

void DrawTree(Tree *t){ if(t!=NULL){ setcolor(BLACK);setfillstyle(SOLID_FILL,BLACK);fillellipse(t->x,t->y,9,9);setcolor(WHITE);circle(t->x,t->y,10);/*畫圓*/ sprintf(str,“%c”,t->data);/*將內(nèi)容轉(zhuǎn)換成字符串輸出*/ outtextxy(t->x-3,t->y-2,str);if(t->lchild!=NULL)

/*左子樹*/ { line(t->x-5,t->y+12,t->lchild->x+5,t->lchild->y-12);DrawTree(t->lchild);} if(t->rchild!=NULL)

/*右子樹*/ { line(t->x+5,t->y+12,t->rchild->x-5,t->rchild->y-12);DrawTree(t->rchild);} } } 功能:利用坐標(biāo)實(shí)現(xiàn)圖形化輸出二叉樹的功能,用于圖形化演示

北京工業(yè)大學(xué)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)項(xiàng)目書

六、心得體會(huì):

項(xiàng)目經(jīng)理-肖毅:

剛開始拿到課設(shè)的題目時(shí),瀏覽一遍之后發(fā)現(xiàn)毫無頭緒,不知從何下手。從大一接觸C語(yǔ)言開始,到后來學(xué)習(xí)C++,到現(xiàn)在的數(shù)據(jù)結(jié)構(gòu),學(xué)到現(xiàn)在,面對(duì)大型完整程序的編寫,依然感覺很是無力。最后我們選擇了數(shù)據(jù)結(jié)構(gòu)CAI系統(tǒng),因?yàn)橛X得可以直接從所學(xué)的一些算法中直接完成,已經(jīng)學(xué)過現(xiàn)成的算法,有了明確的目標(biāo),我們要做的就是將這些算法圖形化的演示出來,不會(huì)毫無思路。雖然的確有些思路了,但是也并沒有我們想象的那么簡(jiǎn)單,從最開始的計(jì)劃完成3個(gè)算法的演示到最后只完成了一個(gè)二叉樹的三種遍歷的演示。另外我們覺得選擇這個(gè)也能夠幫助我們復(fù)習(xí)數(shù)據(jù)結(jié)構(gòu)的一些知識(shí),對(duì)于即將到來的數(shù)據(jù)結(jié)構(gòu)考試也是有所幫助的,雖然查找和排序并沒有完成,但是我們也翻閱數(shù)據(jù)結(jié)構(gòu)課本仔細(xì)研究了書上關(guān)于那些部分的算法,這也是一種復(fù)習(xí),排序和查找也是數(shù)據(jù)結(jié)構(gòu)中很重要的一部分。

確定完題目之后,就要開始著手編寫了,我們組成員的整體水平雖然不是很高,但我們依然能夠憑借自己的努力來完成程序,遇到不會(huì)的問題,我們會(huì)向其他同學(xué)請(qǐng)教,并且自己上網(wǎng)搜索相關(guān)信息,不得不再次感嘆網(wǎng)絡(luò)的強(qiáng)大,網(wǎng)絡(luò)確實(shí)是現(xiàn)代生活中不可缺少的一部分。這次課設(shè)中我和池璐主要負(fù)責(zé)程序的編寫,我們也是邊寫程序邊學(xué)習(xí),我主要負(fù)責(zé)程序中二叉樹圖形化輸出和二叉樹的生成等部分,圖形化輸出需要用到坐標(biāo),我們要將想要輸出的東西放到屏幕上正確的部分,需要經(jīng)過多次嘗試之后才能最后確定坐標(biāo)。同時(shí)也讓其他幾位成員參與編寫并學(xué)習(xí),對(duì)于一些我會(huì)的地方,也會(huì)跟他們講解,為了讓他們更好的理解程序,并完成后期PPT的制作。團(tuán)隊(duì)協(xié)作能力也是考校一個(gè)計(jì)算機(jī)專業(yè)學(xué)生的一個(gè)很重要的因素。

通過這次課設(shè),對(duì)于數(shù)據(jù)結(jié)構(gòu)基本功的知識(shí)是一種強(qiáng)化,更扎實(shí)了數(shù)據(jù)結(jié)構(gòu)的基本功,并學(xué)習(xí)到了很多課堂上沒有學(xué)到過的知識(shí),對(duì)于計(jì)算機(jī)知識(shí)的學(xué)習(xí)之路,光靠課堂所學(xué)是遠(yuǎn)遠(yuǎn)不夠的。實(shí)際程序的編寫也是很重要的,每一個(gè)完整的程序?qū)τ谧约憾际且淮螝v練,這對(duì)于以后的學(xué)習(xí)和未來的工作都是很有幫助的。

項(xiàng)目經(jīng)理-池璐:

在忙碌了一個(gè)星期之后,課設(shè)終于結(jié)束了。“實(shí)踐出真知”,編出一些有用的程序更是對(duì)數(shù)據(jù)結(jié)構(gòu)這門課程學(xué)習(xí)的最好檢驗(yàn)。正是這次的檢驗(yàn),讓我受益良多。

我們?cè)O(shè)計(jì)的是一款教學(xué)CAI輔助程序,用直觀便于理解的動(dòng)態(tài)圖示為學(xué)生展現(xiàn)的是二叉樹的3種遍歷方式。我主要負(fù)責(zé)的是界面設(shè)計(jì)和3種遍歷。界面上我設(shè)計(jì)的比較簡(jiǎn)潔,用一些特殊符號(hào)構(gòu)成了框架。為了方便老師,我設(shè)計(jì)了2種方式,一種為計(jì)算機(jī)自動(dòng)分配二叉樹,另一種是認(rèn)為輸入。3種不同的遍歷方式主要看的是根節(jié)點(diǎn)的位置。例如先序遍歷的根節(jié)點(diǎn)最先被訪問。在算法的設(shè)計(jì)中我也參與了進(jìn)去,與項(xiàng)目經(jīng)理進(jìn)行了探討,最終完成了整個(gè)程序。

當(dāng)然,編程之路并非一帆風(fēng)順。其間我們也遇到了許多問題。比如菜單的編程問題,編程環(huán)境的影響一記圖形函數(shù)的應(yīng)用。在查閱資料后,大部分問題得到了解決,我也學(xué)到了之前不太了解的問題。另外,我計(jì)劃還設(shè)計(jì)一款二分法的CAI程序,由于知識(shí)水平有限,我便看書試圖解決這個(gè)問題。但是最后沒有能夠解決。課設(shè)雖然結(jié)束了,但是學(xué)習(xí)的腳步還沒有就此停下。更多的實(shí)踐等著我把

北京工業(yè)大學(xué)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)項(xiàng)目書

數(shù)據(jù)結(jié)構(gòu)這么課在學(xué)習(xí)生活中運(yùn)用的更加?jì)故欤斫獾母油笍亍_@才是學(xué)好這門課的意義。

產(chǎn)品經(jīng)理-黃友鵬:

通過本次課設(shè),我學(xué)到很多。首先必須承認(rèn),我的基礎(chǔ)很差,本來對(duì)編一大段程序就很頭疼,但是這次以小組方式進(jìn)行,使我能夠向他人學(xué)習(xí),就算是大家都不會(huì)的問題我們也可以分工上網(wǎng)尋找解決的辦法,總之,第一次覺得學(xué)習(xí)也可以變得很輕松。

而且,通過這次課設(shè),我也懂得了好多專業(yè)的名詞,如路演,CAI系統(tǒng)...這些都是我以前沒有接觸過的。

本次課設(shè)我擔(dān)任產(chǎn)品經(jīng)理的職位,這不只是一個(gè)小小的虛銜,這是讓我們提早感受社會(huì),事實(shí)上我也是這么努力的,我自己做了路演PPT,而且目的就是讓別人接收我們的產(chǎn)品,雖然還有很多的不足,但我們努力了,我也很有成就感。

總之,在這次課設(shè)中我學(xué)到了很多,也感覺進(jìn)步了很大。

測(cè)試經(jīng)理-于連明:

這次課設(shè)給了我很大的鍛煉,使我進(jìn)一步理解數(shù)據(jù)結(jié)構(gòu)的重要性。我們小組設(shè)計(jì)的是CAI(Computer Assisted Instruction),也就是計(jì)算機(jī)輔助教學(xué)。目前我們所學(xué)的數(shù)據(jù)結(jié)構(gòu)計(jì)算機(jī)專業(yè)一門重要的專業(yè)技術(shù)基礎(chǔ)課程,有人概括過這樣一個(gè)公式:程序=算法+數(shù)據(jù)結(jié)構(gòu),要設(shè)計(jì)好的程序,除了要設(shè)計(jì)好的算法之外,還必須采用合適的數(shù)據(jù)結(jié)構(gòu)。所以數(shù)據(jù)結(jié)構(gòu)的知識(shí)對(duì)設(shè)計(jì)和實(shí)現(xiàn)計(jì)算機(jī)系統(tǒng)軟件如操作系統(tǒng)、編譯程序和數(shù)據(jù)庫(kù)管理系統(tǒng)等是十分重要的;它對(duì)于編寫應(yīng)用軟件的人來說也是必不可少的。

然而學(xué)習(xí)這門課程有一些困難:

(1)內(nèi)容豐富,學(xué)習(xí)量大,給學(xué)習(xí)帶來困難。

(2)貫穿的動(dòng)態(tài)鏈表存儲(chǔ)結(jié)構(gòu)和遞歸技術(shù)是學(xué)習(xí)中的重點(diǎn)也是難點(diǎn);

(3)所用到的技術(shù)多,而在此之前的各門課程中所介紹的專業(yè)性知識(shí)又不多,因而加大了學(xué)習(xí)難度;在解答問題時(shí)出會(huì)因此而困難重重。

因此我們小組為了解決數(shù)據(jù)結(jié)構(gòu)學(xué)起來困難的麻煩,設(shè)計(jì)了CAI系統(tǒng)。這是一種嶄新的教學(xué)方式,它可以代替教師模擬教學(xué)過程,是通過學(xué)生與計(jì)算機(jī)之間的交互活動(dòng)達(dá)到教學(xué)的目的。其圖文并茂,靈活方便的眾多特點(diǎn),可以激發(fā)我們學(xué)生的學(xué)習(xí)興趣,且發(fā)揮學(xué)生的學(xué)生積極性,提高教學(xué)質(zhì)量。CAI可以將某些非順序信息呈現(xiàn)出來,可以包括一門課程或與某個(gè)對(duì)象有關(guān)的全部知識(shí)。我們即可以瀏覽所有知識(shí),也可以按自己的需要獲取其中任意所感興趣的一部分,學(xué)生可以控制學(xué)習(xí)內(nèi)容和進(jìn)度。

但是我們?cè)O(shè)計(jì)的CAI系統(tǒng)缺乏網(wǎng)絡(luò)支持。它是運(yùn)行在單機(jī)下環(huán)境下的。無法利用網(wǎng)絡(luò)在知識(shí)更新上的方便與快捷的優(yōu)勢(shì)。這樣的CAI課件一旦生產(chǎn)完成就再也無法對(duì)教學(xué)的內(nèi)容進(jìn)行更新和維護(hù),因而是沒有生命力的,將隨著時(shí)間的發(fā)展而逐步被淘汰。這類弊端有待研究解決。

這次課設(shè)也使我明白團(tuán)隊(duì)的合作是非常重要的,團(tuán)結(jié)就是勝利。

北京工業(yè)大學(xué)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)項(xiàng)目書

七、分工協(xié)作:

項(xiàng)目經(jīng)理:肖毅 池璐

職責(zé):負(fù)責(zé)整個(gè)項(xiàng)目小組的人員管理、進(jìn)度管理,主要攻克軟件產(chǎn)品技術(shù)環(huán)節(jié)的問題,負(fù)責(zé)路演環(huán)節(jié)技術(shù)問題的答辯,負(fù)責(zé)項(xiàng)目手冊(cè)中的核心算法部分的書寫及整個(gè)項(xiàng)目手冊(cè)的整理定稿。負(fù)責(zé)進(jìn)行項(xiàng)目中期匯報(bào)及與指導(dǎo)教師的溝通。

產(chǎn)品經(jīng)理:黃友鵬

職責(zé):負(fù)責(zé)整個(gè)產(chǎn)品的框架設(shè)計(jì)、外觀設(shè)計(jì)和功能模塊的升級(jí)設(shè)計(jì),主要負(fù)責(zé)產(chǎn)品的需求分析及性能改良,負(fù)責(zé)手冊(cè)中產(chǎn)品外觀和框架及需求的書寫,負(fù)責(zé)路演環(huán)節(jié)PPT的制作。

測(cè)試經(jīng)理:于連明

職責(zé):負(fù)責(zé)整個(gè)產(chǎn)品的功能模塊部分的設(shè)計(jì)與最終產(chǎn)品測(cè)試環(huán)節(jié),建立產(chǎn)品所需的數(shù)據(jù)資源庫(kù),負(fù)責(zé)路演環(huán)節(jié)產(chǎn)品使用的答辯,負(fù)責(zé)項(xiàng)目手冊(cè)中功能模塊及算法的書寫。

八、附錄:源代碼

/********二叉樹的三種遍歷算法演示********/ #include #include #include #include #include

typedef struct TREE {

char data;

/*樹的結(jié)點(diǎn)數(shù)據(jù)*/

struct TREE *lchild;

struct TREE *rchild;

int x;

/*樹的x坐標(biāo)*/

int y;

/*樹的y坐標(biāo)*/ }Tree;

struct OUTPUT {

int x;

/*三種遍歷的x坐標(biāo)*/

int y;

/*三種遍歷的y坐標(biāo)*/

int num;}s;

int nodeNUM=0;/*統(tǒng)計(jì)當(dāng)前的結(jié)點(diǎn)數(shù)字,最多26個(gè)*/ char way;

/*自動(dòng)建立樹和手動(dòng)建立樹的標(biāo)志,2手動(dòng),1自動(dòng)*/ char str[3];

/*顯示結(jié)點(diǎn)數(shù)據(jù)的字符串*/

北京工業(yè)大學(xué)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)項(xiàng)目書

void Init();

/*圖形初始化*/ void Close();/*圖形關(guān)閉*/ Tree *CreatTree();

/*文本模式下創(chuàng)建樹的過程*/ Tree *InitTree(int h,int t,int w);/*創(chuàng)建樹,h層次,t橫坐標(biāo),w樹之間的寬度,n樹的建立方式*/ void DrawTree(Tree *t);/*用圖形顯示創(chuàng)建好的樹*/ void Preorder(Tree *t);/*前序遍歷*/ void Midorder(Tree *t);/*中序遍歷*/ void Posorder(Tree *t);/*后序遍歷*/ void DrawNode(Tree *t,int color);

/*遍歷時(shí)顯示每個(gè)結(jié)點(diǎn)的過程*/ void ClrScr();

/*清空樹的區(qū)域*/

void main(){

Tree *root;

randomize();

root=CreatTree();/*創(chuàng)建樹*/

Init();

DrawTree(root);

/*每次遍歷前顯示白色的樹*/

sleep(1);

s.x=100;s.y=300;s.num=1;/*每次遍歷前設(shè)置顯示遍歷順序顯示的x,y坐標(biāo)*/

Preorder(root);

/*前序遍歷*/

getch();

ClrScr();

DrawTree(root);

sleep(1);

s.x=100;

s.y=350;

s.num=1;

Midorder(root);

/*中序遍歷*/

getch();

ClrScr();

DrawTree(root);

sleep(1);

s.x=100;

s.y=400;

s.num=1;

Posorder(root);

/*后序遍歷*/

Close();}

/*清空樹的區(qū)域*/ void ClrScr(){

setcolor(BLACK);

北京工業(yè)大學(xué)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)項(xiàng)目書

setfillstyle(SOLID_FILL,BLACK);

bar(0,20,640,280);}

/*樹的創(chuàng)建*/ Tree *CreatTree(){

Tree *root;

clrscr();

printf(“n”);

printf(“n”);

printf(“

Binary tree traversal

n”);

printf(“

----------------------------n”);

printf(“

**********Please input '1' OR '2' to choose********** n”);

printf(“

*

* n”);

printf(“

*

1.Computer creat

* n”);

printf(“

*

* n”);

printf(“

*

2.People creat

* n”);

printf(“

*

* n”);

printf(“

***************************************************** n”);

way=getch();/*輸入創(chuàng)建樹的方法,1電腦自動(dòng)建立,2人工手動(dòng)建立*/

if(way!='2')

way='1';

/*其他數(shù)字默認(rèn)自動(dòng)建立*/

if(way=='2')/*手動(dòng)建立提示輸入結(jié)點(diǎn),例abc de f g

*/

printf(“

Please creat the tree:

n”);

root=InitTree(1,320,150);

system(“pause”);

return root;}

/*生成二叉樹,h表示層次,t表示橫坐標(biāo),w表示結(jié)點(diǎn)左右子樹的寬度,隨機(jī)數(shù)n確定結(jié)點(diǎn)是空或非空,如n為0,則為空,但要限定確保結(jié)點(diǎn)數(shù)不少于三個(gè)*/ Tree *InitTree(int h,int t,int w){

char ch;

int n;

/*自動(dòng)建立時(shí)隨機(jī)賦值判斷是否是NULL的標(biāo)志*/

Tree *node;

if(way=='2')

/*手動(dòng)建立需要自己輸入*/

scanf(“%c”,&ch);

else

/*自動(dòng)建立的賦值*/

{

n=random(5);

if(n==0&&nodeNUM>=3)

/*隨機(jī)賦值時(shí)候確保自動(dòng)建立的二叉樹有三個(gè)結(jié)點(diǎn)*/

ch=' ';

北京工業(yè)大學(xué)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)項(xiàng)目書

else

ch=65+random(25);

}

if(ch==' ')

/*輸入空格代表NULL*/

return NULL;

else

{

if(h==6||nodeNUM==26)/*如果樹的層次已經(jīng)到5或者結(jié)點(diǎn)樹到達(dá)26個(gè)就自動(dòng)返回NULL*/

return NULL;

node=(Tree*)malloc(sizeof(Tree));

node->data=ch;

node->x=t;

/*樹的x坐標(biāo)是傳遞過來的橫坐標(biāo)*/

node->y=h*50;/*樹的y坐標(biāo)與層次大小有關(guān)*/

nodeNUM++;

node->lchild=InitTree(h+1,t-w,w/2);

node->rchild=InitTree(h+1,t+w,w/2);

}

return node;}

/*用圖形顯示創(chuàng)建好的樹*/ void DrawTree(Tree *t){

if(t!=NULL)

{

setcolor(BLACK);

setfillstyle(SOLID_FILL,BLACK);

fillellipse(t->x,t->y,9,9);

setcolor(WHITE);

circle(t->x,t->y,10);/*畫圓*/

sprintf(str,“%c”,t->data);/*將內(nèi)容轉(zhuǎn)換成字符串輸出*/

outtextxy(t->x-3,t->y-2,str);

if(t->lchild!=NULL)

/*左子樹*/

{

line(t->x-5,t->y+12,t->lchild->x+5,t->lchild->y-12);

DrawTree(t->lchild);

}

if(t->rchild!=NULL)

/*右子樹*/

{

line(t->x+5,t->y+12,t->rchild->x-5,t->rchild->y-12);

DrawTree(t->rchild);

}

}

北京工業(yè)大學(xué)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)項(xiàng)目書

}

/*遍歷時(shí)顯示每個(gè)結(jié)點(diǎn)的過程*/ void DrawNode(Tree *t,int color){

setcolor(RED);

setfillstyle(SOLID_FILL,RED);

fillellipse(t->x,t->y,10,10);

setcolor(YELLOW);

sprintf(str,“%c”,t->data);/*將內(nèi)容轉(zhuǎn)換成字符串輸出*/

outtextxy(t->x-3,t->y-2,str);

setcolor(color);

outtextxy(s.x,s.y,str);

setcolor(YELLOW);

sprintf(str,“%d”,s.num);

/*將遍歷次序用數(shù)字顯示在樹的結(jié)點(diǎn)上*/

outtextxy(t->x-3,t->y-20,str);

s.num++;

sleep(1);}

/*前序遍歷*/ void Preorder(Tree *t){

if(t!=NULL)

{

s.x+=15;

DrawNode(t,YELLOW);

Preorder(t->lchild);

Preorder(t->rchild);

} }

/*中序遍歷*/ void Midorder(Tree *t){

if(t!=NULL)

{

Midorder(t->lchild);

s.x+=15;

DrawNode(t,WHITE);

Midorder(t->rchild);

} }

北京工業(yè)大學(xué)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)項(xiàng)目書

/*后序遍歷*/ void Posorder(Tree *t){

if(t!=NULL)

{

Posorder(t->lchild);

Posorder(t->rchild);

s.x+=15;

DrawNode(t,GREEN);

} }

/*圖形初始化*/ void Init(){

int gd=DETECT,gm;

initgraph(&gd,&gm,“c: c”);

cleardevice();/*清除圖形屏幕*/

setcolor(YELLOW);

outtextxy(225,10,“Press anykey to continue”);

setcolor(RED);

outtextxy(20,300,“preorder”);

outtextxy(20,350,“midorder”);

outtextxy(20,400,“posorder”);

getch();}

/*關(guān)閉圖形*/ void Close(){

getch();

closegraph();}

九、參考書目

《數(shù)據(jù)結(jié)構(gòu)(c語(yǔ)言版)》.The Internet.

第二篇:學(xué)籍系統(tǒng)手冊(cè)

學(xué)籍系統(tǒng)升級(jí)結(jié)束。本次系統(tǒng)升級(jí)內(nèi)容: 1 待辦業(yè)務(wù)提示

用戶登錄時(shí),在首頁(yè)彈出窗口,提示本單位各主要業(yè)務(wù)的待辦數(shù)量,用戶可通過鏈接直接訪問對(duì)應(yīng)處理功能。2 問題學(xué)籍處理

2.1 L、G字頭學(xué)籍號(hào)學(xué)生均可進(jìn)行佐證 一組問題學(xué)籍,同時(shí)存在正式學(xué)籍號(hào)和臨時(shí)學(xué)籍號(hào)的學(xué)籍時(shí),臨時(shí)學(xué)籍號(hào)學(xué)籍可以申請(qǐng)佐證。雙G問題學(xué)籍時(shí),兩方G學(xué)籍號(hào)都可以進(jìn)行佐證。2.2 G字頭學(xué)籍號(hào)學(xué)生可刪除

一組問題學(xué)籍中,正式學(xué)籍號(hào)問題學(xué)籍可以發(fā)起刪除處理。2.3 問題學(xué)籍佐證后發(fā)起重新處理

之前通過佐證方式處理結(jié)束的問題學(xué)籍,學(xué)校可以重新發(fā)起問題學(xué)籍處理業(yè)務(wù)。2.4 身份證件號(hào)已發(fā)生變更的處理 新增一類問題學(xué)籍,公安部認(rèn)證不通過的問題學(xué)籍,新增錯(cuò)誤類型“公安部校驗(yàn)不通過:身份證件號(hào)已發(fā)生變更”。處理方式仍為三種:佐證、刪除、變更。2.5 認(rèn)證不通過問題學(xué)籍信息中新增反饋信息項(xiàng) 問題學(xué)籍信息中新增“反饋描述”信息項(xiàng),對(duì)于公安部身份認(rèn)證不通過的問題學(xué)籍,該信息項(xiàng)給出錯(cuò)誤提示信息。2.6 補(bǔ)充了問題學(xué)籍處理流程幫助

系統(tǒng)中提供了《問題學(xué)籍處理流程幫助》文檔,學(xué)校用戶可以在問題學(xué)籍處理功能中下載,教育管理部門用戶可以在問題學(xué)籍審核功能中下載。3 正式學(xué)籍號(hào)下發(fā)的相關(guān)控制

用于新一批正式學(xué)籍號(hào)通過數(shù)據(jù)交換下發(fā)到省級(jí)后,省級(jí)的下發(fā)業(yè)務(wù)邏輯控制。4 無身份證在校學(xué)生列表

學(xué)校學(xué)籍管理員可查詢本學(xué)校沒有身份證號(hào)的在校學(xué)生學(xué)籍,方便聯(lián)系學(xué)生家長(zhǎng)確認(rèn)學(xué)生身份證信息。

各級(jí)教育管理部門可查詢轄區(qū)內(nèi)學(xué)校沒有身份證號(hào)的在校學(xué)生學(xué)籍。5 其他

不允許將正式學(xué)籍號(hào)學(xué)籍的身份證件類型變更為“其他”,包括問題學(xué)籍處理和關(guān)鍵數(shù)據(jù)變更。

不允許將身份證件類型變更為“戶口簿”。

第三篇:數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 飛機(jī)訂票系統(tǒng)

飛機(jī)訂票系統(tǒng)

1.需求分析

描述要求編程解決的問題。以無歧義的陳述說明程序設(shè)計(jì)的任務(wù),強(qiáng)調(diào)的是程序要做什么?明確規(guī)定:

(a)輸入的形式和輸入值的范圍;

(b)輸出的形式;

(c)程序所能達(dá)到的功能;

(d)測(cè)試數(shù)據(jù):包括正確的輸入及其輸出結(jié)果和含有錯(cuò)誤的輸入及其輸出結(jié)果。

2.概要設(shè)計(jì)

給出程序要達(dá)到的具體的要求。描述解決相應(yīng)問題算法的設(shè)計(jì)思想。描述所設(shè)計(jì)程序的各個(gè)模塊(即函數(shù))功能。說明本程序中用到的所有抽象數(shù)據(jù)類型的定義、主程序的流程以及各程序模塊之間的層次(調(diào)用)關(guān)系。

3.詳細(xì)設(shè)計(jì)

實(shí)現(xiàn)概要設(shè)計(jì)中定義的所有數(shù)據(jù)類型,對(duì)每個(gè)操作只需要寫出流程或偽碼算法;對(duì)主程序和其他模塊也都需要寫出流程或偽碼算法(偽碼算法達(dá)到的詳細(xì)程度建議為:按照偽碼算法可以在計(jì)算機(jī)鍵盤直接輸入高級(jí)程序設(shè)計(jì)語(yǔ)言程序);畫出函數(shù)的調(diào)用關(guān)系圖。給出所使用的基本抽象數(shù)據(jù)類型,所定義的具體問題的數(shù)據(jù)類型,以及新定義的抽象數(shù)據(jù)類型。設(shè)計(jì)出良好的輸入輸出界面(清晰易懂)。

4.調(diào)試分析 內(nèi)容包括:

(a)調(diào)試過程中遇到的問題是如何解決的以及對(duì)設(shè)計(jì)與實(shí)現(xiàn)的回顧討論和分析;

(b)算法的時(shí)空分析(包括基本操作和其他算法的時(shí)間復(fù)雜度和空間復(fù)雜度的分析)和改進(jìn)設(shè)想;

(c)經(jīng)驗(yàn)和體會(huì)等。

5.用戶使用說明

說明如何使用你編寫的程序,詳細(xì)列出每一步的操作步驟。

6.測(cè)試結(jié)果

設(shè)計(jì)測(cè)試數(shù)據(jù),或具體給出測(cè)試數(shù)據(jù)。要求測(cè)試數(shù)據(jù)能全面地測(cè)試所設(shè)計(jì)程序的功能。列出你的測(cè)試結(jié)果,包括輸入和輸出。這里的測(cè)試數(shù)據(jù)應(yīng)該完整和嚴(yán)格,最好多于需求分析中所列。

7.測(cè)試情況:給出程序的測(cè)試情況,并分析運(yùn)行結(jié)果

附錄(非必須,按照需要添加)

帶注釋的源程序。可以只列出程序文件名的清單。

需求分析

任務(wù):通過此系統(tǒng)可以實(shí)現(xiàn)如下功能: 錄入:

可以錄入航班情況(數(shù)據(jù)可以存儲(chǔ)在一個(gè)數(shù)據(jù)文件中,數(shù)據(jù)結(jié)構(gòu)、具體數(shù)據(jù)自定)

查詢:

可以查詢某個(gè)航線的情況(如,輸入航班號(hào),查詢起降時(shí)間,起飛抵達(dá)城市,航班票價(jià),票價(jià)折扣,確定航班是否滿倉(cāng)); 可以輸入起飛抵達(dá)城市,查詢飛機(jī)航班情況;

訂票:(訂票情況可以存在一個(gè)數(shù)據(jù)文件中,結(jié)構(gòu)自己設(shè)定)可以訂票,如果該航班已經(jīng)無票,可以提供相關(guān)可選擇航班;

退票: 可退票,退票后修改相關(guān)數(shù)據(jù)文件;

客戶資料有姓名,證件號(hào),訂票數(shù)量及航班情況,訂單要有編號(hào)。

概要設(shè)計(jì)

詳細(xì)設(shè)計(jì)

詳列函數(shù) void list(){

struct airline *info;

int i=0;

info=start;

printf(“起點(diǎn)城市t終點(diǎn)城市t航班號(hào)t起飛時(shí)間t降落時(shí)間t總票數(shù)t余票數(shù)n”);

while(i

{

display(info);

info++;

i++;

}

printf(“nn”);}

查詢函數(shù) void search(){

struct airline *info,*find();

char qiname[10];

char jiangname[10];

int i=0;

info=start;

printf(“請(qǐng)輸入要起飛城市的名稱:”);

scanf(“%s”,qiname);

printf(“請(qǐng)輸入要抵達(dá)城市的名稱:”);

scanf(“%s”,jiangname);

while(i

{

if(!strcmp(jiangname,info->jiang_name))

{

break;

}

info++;

i++;

}

if(i>=MAXSIZE)

{

printf(“沒有這條航線!n”);

}

else

{

printf(“起飛城市t降落城市t航班號(hào)t起飛時(shí)間t降落時(shí)間t總票數(shù)t余票數(shù)n”);

display(info);

} }

struct airline *find(){

struct airline *info;

char number[10];

int i=0;

info=start;

printf(“請(qǐng)輸入航班號(hào):”);

scanf(“%s”,number);

while(i

{

if(!strcmp(number,info->air_num))

{

return info;

}

info++;

i++;

}

printf(“沒有這條航線!n”);

return NULL;}

訂票函數(shù) void order(){

struct airline *info;

char qiname[10];

char jiangname[10];

int amount;

char name[10];

char id[30];

info=start;

printf(“請(qǐng)輸入您的起飛城市:”);

scanf(“%s”,qiname);

printf(“請(qǐng)輸入您的降落城市:”);

scanf(“%s”,jiangname);

printf(“請(qǐng)輸入您需要的票數(shù):”);

scanf(“%d”,&amount);

int i=1;

while(i<5)

{

if(!strcmp(info->qi_name,qiname)&&!strcmp(info->jiang_name,jiangname))

{

if(amount<=info->ticket_left)

{

int i;

printf(“請(qǐng)輸入您的姓名:”);

scanf(“%s”,name);

printf(“請(qǐng)輸入您的身份證號(hào):”);

scanf(“%s”,id);

info->order=insertlink(info->order,amount,name,id);

printf(“您的航班信息為:n”);

display(info);

for(i=0;i

{

printf(“%s的座位號(hào)是:%dn”,name,info->ticket_all-info->ticket_left+i+1);

}

info->ticket_left-=amount;

printf(“訂票成功!n”);

break;

}

else

{

info++;

i++;

}

}

else

{

info++;

i++;

}

} }

退票函數(shù)

void returnticket(){

struct airline *info;

linklist *p1,*p2,*head;

char name[10];

if(!(info=find()))

{

return;

}

head=info->order;

p1=head;

printf(“請(qǐng)輸入您的姓名:”);

scanf(“%s”,name);

while(p1!=NULL)

{

if(!strcmp(name,p1->name))

{

break;

}

p2=p1;

p1=p1->next;

}

if(p1==NULL)

{

printf(“您沒有訂過票!n”);

return;

}

else

{

if(p1==head)

{

head=p1->next;

}

else

{

p2->next=p1->next;

}

info->ticket_left+=p1->tickets;

printf(“%s退票成功!n”,p1->name);

free(p1);

}

info->order=head;}

存儲(chǔ)結(jié)構(gòu)

typedef struct passenger {

char name[10];

int tickets;

char id[30];

struct passenger *next;} linklist;typedef struct airline {

char qi_name[10];

char jiang_name[10];

char air_num[10];

char qi_time[10];

char jiang_time[10];

int ticket_all;

int ticket_left;

linklist *order;} lineinfo;調(diào)試分析

查看航線信息

查詢航線 ① 輸入起飛城市 ② 輸入抵達(dá)城市 ③ 輸出航班信息

辦理訂票業(yè)務(wù) ① 查詢符合的航班 ② 查詢余票量 ③ 輸出航班信息

辦理退票業(yè)務(wù)

源代碼

#include #include #include #include #include #include using namespace std;#define MAXSIZE 5 typedef struct passenger {

char name[10];

int tickets;

char id[30];

struct passenger *next;} linklist;

typedef struct airline {

char qi_name[10];

char jiang_name[10];

char air_num[10];

char qi_time[10];

char jiang_time[10];

int ticket_all;

int ticket_left;

linklist *order;} lineinfo;

struct airline *start;

void display(struct airline *info){ printf(“%st %10st %10st %10st %10st %5dt %5dn”,info->qi_name,info->jiang_name,info->air_num,info->qi_time,info->jiang_time,info->ticket_all,info->ticket_left);} void list(){

struct airline *info;

int i=0;

info=start;

printf(“起點(diǎn)城市t終點(diǎn)城市t航班號(hào)t起飛時(shí)間t降落時(shí)間t總票數(shù)t余票數(shù)n”);

while(i

{

display(info);

info++;

i++;

}

printf(“nn”);}

void search(){

struct airline *info,*find();

char qiname[10];

char jiangname[10];

int i=0;

info=start;

printf(“請(qǐng)輸入要起飛城市的名稱:”);

scanf(“%s”,qiname);

printf(“請(qǐng)輸入要抵達(dá)城市的名稱:”);

scanf(“%s”,jiangname);

while(i

{

if(!strcmp(jiangname,info->jiang_name))

{

break;

}

info++;

i++;

}

if(i>=MAXSIZE)

{

printf(“沒有這條航線!n”);

}

else

{

printf(“起飛城市t降落城市t航班號(hào)t起飛時(shí)間t降落時(shí)間t總票數(shù)t余票數(shù)n”);

display(info);

} } struct airline *find(){

struct airline *info;

char number[10];

int i=0;

info=start;

printf(“請(qǐng)輸入航班號(hào):”);

scanf(“%s”,number);

while(i

{

if(!strcmp(number,info->air_num))

{

return info;

}

info++;

i++;

}

printf(“沒有這條航線!n”);

return NULL;}

linklist *insertlink(linklist *head,int amount,char name[],char id[]){

linklist *p1,*new1;

p1=head;

new1=(linklist*)malloc(sizeof(linklist));

strcpy(new1->name,name);

new1->tickets=amount;

new1->next=NULL;

strcpy(new1->id,id);

if(head==NULL)

{

head=new1;

new1->next=NULL;

}

else

{

while(p1->next!=NULL)

p1=p1->next;

p1->next=new1;

}

return head;}

void order(){

struct airline *info;

char qiname[10];

char jiangname[10];

int amount;

char name[10];

char id[30];

info=start;

printf(“請(qǐng)輸入您的起飛城市:”);

scanf(“%s”,qiname);

printf(“請(qǐng)輸入您的降落城市:”);

scanf(“%s”,jiangname);

printf(“請(qǐng)輸入您需要的票數(shù):”);

scanf(“%d”,&amount);

int i=1;

while(i<5)

{

if(!strcmp(info->qi_name,qiname)&&!strcmp(info->jiang_name,jiangname))

{

if(amount<=info->ticket_left)

{

int i;

printf(“請(qǐng)輸入您的姓名:”);

scanf(“%s”,name);

printf(“請(qǐng)輸入您的身份證號(hào):”);

scanf(“%s”,id);

info->order=insertlink(info->order,amount,name,id);

printf(“您的航班信息為:n”);

display(info);

for(i=0;i

{

printf(“%s的座位號(hào)是:%dn”,name,info->ticket_all-info->ticket_left+i+1);

}

info->ticket_left-=amount;

printf(“訂票成功!n”);

break;

}

else

{

info++;

i++;

}

}

else

{

info++;

i++;

}

} }

void returnticket(){

struct airline *info;

linklist *p1,*p2,*head;

char name[10];

if(!(info=find()))

{

return;

}

head=info->order;

p1=head;

printf(“請(qǐng)輸入您的姓名:”);

scanf(“%s”,name);

while(p1!=NULL)

{

if(!strcmp(name,p1->name))

{

break;

}

p2=p1;

p1=p1->next;

}

if(p1==NULL)

{

printf(“您沒有訂過票!n”);

return;

}

else

{

if(p1==head)

{

head=p1->next;

}

else

{

p2->next=p1->next;

}

info->ticket_left+=p1->tickets;

printf(“%s退票成功!n”,p1->name);

free(p1);

}

info->order=head;}

int menu_select(){

int c;

char s[20];

printf(“

訂票系統(tǒng)n”);

printf(“-------------n”);

printf(“

1.查看航線信息

printf(”

2.查詢航線

printf(“

3.辦理訂票業(yè)務(wù)

printf(”

4.辦理退票業(yè)務(wù)

printf(“

5.退出系統(tǒng)

printf(”-------------n“);

do

{

printf(”請(qǐng)選擇(1-5):“);

scanf(”%s“,s);

c=atoi(s);

}

while(c<1||c>6);

return c;

n”);n“);n”);n“);

n”);

}

int main(){

struct airline air[MAXSIZE]=

{

{“harbin”,“beijing”,“1”,“12:00”,“14:00”,30,30},{“harbin”,“shanghai”,“2”,“10:00”,“13:00”,20,20},{“harbin”,“beijing”,“3”,“13:30”,“10:00”,50,50},{“harbin”,“guangzhou”,“4”,“17:00”,“21:00”,50,50},{“harbin”,“dalian”,“5”,“14:00”,“17:00”,40,40}

};

start=air;

while(1)

{

system(“cls”);

switch(menu_select())

{

case 1:

list();

break;

case 2:

search();

break;

case 3:

order();

break;

case 4:

returnticket();

break;

case 5:

exit(0);

}

getch();

} }

經(jīng)驗(yàn)體會(huì)

1、通過設(shè)計(jì)飛機(jī)訂票系統(tǒng),加深了對(duì)鏈表的運(yùn)用和理解。

2、通過多組測(cè)試數(shù)據(jù),發(fā)現(xiàn)了程序的問題,并做了調(diào)整、3、通過設(shè)計(jì)選擇菜單,對(duì)選擇結(jié)構(gòu)有更深刻的了解。

第四篇:圖書管理系統(tǒng) 數(shù)據(jù)結(jié)構(gòu) 課程設(shè)計(jì)

《數(shù)據(jù)結(jié)構(gòu)》

課程設(shè)計(jì)報(bào)告書

一.課程設(shè)計(jì)題目

圖書借閱管理系統(tǒng)

二.課程設(shè)計(jì)內(nèi)容

實(shí)現(xiàn)圖書管理信息系統(tǒng)的設(shè)計(jì)

(一)管理員功能:

①登錄:輸入管理員密碼,若密碼錯(cuò)誤則不得執(zhí)行管理員操作。

②添加新書:增加新的圖書資料,同時(shí)需檢查新書的圖書編號(hào)是否已存在于原圖書資料中,若已存在則應(yīng)取消添加或提示重新輸入。

③修改圖書:通過編號(hào)查詢?cè)搱D書資料,若該編號(hào)存在,則顯示已有信息,允許修改,否則提示 無該圖書信息。

④刪除圖書:通過編號(hào)查詢?cè)搱D書資料,若該編號(hào)存在,則顯示已有信息,允許刪除,否則提示無該圖書信息。刪除對(duì)象包括該圖書資料以及“圖書狀態(tài)”和“借閱人”中與此書相關(guān)的所有記錄。

⑤查找圖書:

A.按書號(hào)查找:通過編號(hào)查詢?cè)搱D書資料,若該編號(hào)存在,則顯示圖書信息,否則提示無該圖書信息。

B.按書名查找:通過書名查詢?cè)搱D書資料,若該編號(hào)存在,則顯示圖書信息,否則提示無該圖書信息。

C.按作者查找:通過作者查詢?cè)搱D書資料,若該編號(hào)存在,則顯示圖書信息,否則提示無該圖書信息。

⑥查看全部圖書:顯示所有圖書資料,包括書號(hào)、書名、作者、狀態(tài)和借閱人等信息。

⑦修改讀者:通過姓名查詢?cè)撟x者信息,若該姓名存在,則顯示已有信息,允許修改,否則提示無該讀者信息。

⑧刪除讀者:通過姓名查詢?cè)撟x者信息,若該姓名存在,則顯示已有信息,允許刪除,否則提示無該讀者信息。刪除對(duì)象包括該讀者姓名、班級(jí)、電話以及“圖書狀態(tài)”和“借閱人”中與此人相關(guān)的所有記錄。

⑨查看所有讀者:顯示所有讀者資料,包括姓名、班級(jí)、電話等信息。

(二)讀者功能:

①登錄:輸入讀者姓名,若未經(jīng)注冊(cè)則不得進(jìn)入讀者服務(wù)界面。②注冊(cè):新用戶經(jīng)注冊(cè)方可登錄系統(tǒng)并使用讀者服務(wù)功能。③借書:

A.輸入所需圖書編號(hào),判斷該編號(hào)是否存在,若不存在則提示重新輸入。

B.若所輸入圖書編號(hào)存在,則判斷該書籍是否已被借出,若已借則不允許執(zhí)行借書操作。

C.若所輸入圖書未借,則提示輸入讀者姓名,判斷所輸入讀者姓名是否存在,若不存在則提示重新輸入。D.若讀者姓名存在,則允許執(zhí)行借書操作。

E.借書處理包括在“圖書狀態(tài)”中加上“已借”標(biāo)記。④還書:

A.輸入所借書編號(hào),判斷該編號(hào)是否存在,若不存在則提示重新輸入。B.判斷該書是否已借出,若未借則不允許執(zhí)行還書操作。C.借書處理包括在“圖書狀態(tài)”中加上“未借”標(biāo)記。⑤查詢圖書:

A.按書號(hào)查找:通過編號(hào)查詢?cè)搱D書資料,若該編號(hào)存在,則顯示圖書信息,否則提示無該圖書信息。

B.按書名查找:通過書名查詢?cè)搱D書資料,若該編號(hào)存在,則顯示圖書信息,否則提示無該圖書信息。

C.按作者查找:通過作者查詢?cè)搱D書資料,若該編號(hào)存在,則顯示圖書信息,否則提示無該圖書信息。

⑥查看借閱情況:輸入讀者姓名,若該姓名不存在則提示重新輸入,若該姓名存在則顯示該讀者借閱信息。

三.算法設(shè)計(jì)

1.流程圖(部分示例)

①管理員登錄

②讀者登錄

③讀者借閱圖書

④管理員或讀者按書名查找圖書

2.代碼實(shí)現(xiàn)

#include #include

#include #include //文件流 #include #define BookFile “book.txt”

//將字符串BookFile替換原文件中的宏名稱book #define ReaderFile “reader.txt” using namespace std;//**********讀者結(jié)構(gòu)體,用于存放讀者基本信息********** class Reader {

private:

char rname[10];

char rclass[10];

char rtel[10];public:

Reader()//構(gòu)造函數(shù),實(shí)現(xiàn)數(shù)據(jù)初始化

{strcpy(rname,“");strcpy(rclass,”“);strcpy(rtel,”“);} //初始化

void set_rname(char *rn)//設(shè)置讀者姓名

{strcpy(rname,rn);} //將rn的字符復(fù)制給rname

char * get_rname()//獲得讀者姓名

{return rname;} //返回rname的值

void set_rclass(char *rc)//設(shè)置班級(jí)

{strcpy(rclass,rc);}

char *get_rclass()

//獲得班級(jí)

{return rclass;}

void set_rtel(char *rt)

//設(shè)置電話

{strcpy(rtel,rt);}

char *get_rtel()

//獲得電話

{return rtel;}

void copy(Reader m)//讀者Reader結(jié)構(gòu)體copy函數(shù)

{strcpy(rname,m.get_rname());strcpy(rclass,m.get_rclass());strcpy(rtel,m.get_rtel());} };//*********讀者管理結(jié)構(gòu)體,實(shí)現(xiàn)對(duì)讀者用戶的管理********* class ReaderManage {

Reader readers[50];//定義讀者結(jié)構(gòu)體數(shù)組對(duì)象,最多50位

int length;

void readFile()

//讀取讀者文件函數(shù)

{

ifstream fread;//定義輸入文件流對(duì)象fread

length=0;

//計(jì)數(shù)

if(!fread)

{cout<<”讀取磁盤文件失敗!“<

fread.open(ReaderFile,ios::binary);//使文件流與文件關(guān)聯(lián),以二進(jìn)制方式打開

int i=0;

while((fread.read((char *)&readers[i],sizeof(Reader))))//計(jì)算并返回所占字節(jié)數(shù)

i++;

length=i;

fread.close();//關(guān)閉磁盤文件

} void saveFile()//保存讀者文件

{

ofstream fwrite;

//定義輸出文件流對(duì)象fwrite

if(!fwrite)

{cout<<”文件保存失敗!n“;exit(1);}

fwrite.open(ReaderFile,ios::binary);//使文件流與文件關(guān)聯(lián),以二進(jìn)制方式打開

fwrite.write((char *)readers,length*sizeof(Reader));//計(jì)算并返回所占字節(jié)數(shù)

fwrite.close();//關(guān)閉磁盤文件

} public:

ReaderManage()//構(gòu)造函數(shù),讀取讀者文件

{readFile();}

~ReaderManage()//析構(gòu)函數(shù),保存讀者文件

{saveFile();}

void add_reader(Reader r)//添加讀者用戶函數(shù)

{

if(length>=50)

{cout<<”對(duì)不起,注冊(cè)人數(shù)已滿!n“;return;}

readers[length].copy(r);//調(diào)用讀者結(jié)構(gòu)體copy函數(shù)

length++;} int search(char *rn)//按姓名查找讀者函數(shù)

{

for(int i=0;i

if(strcmp(readers[i].get_rname(),rn)==0)//判斷是否相等

return i;

return-1;

} bool revise(Reader reader,int i)//修改讀者資料函數(shù)

{

readers[i].copy(reader);//調(diào)用讀者結(jié)構(gòu)體cpoy函數(shù)

return true;} void delete_reader(int index)//刪除讀者函數(shù)

{

for(int i=index;i

readers[i].copy(readers[i+1]);//用后面的地址覆蓋前面的地址

length--;} bool log_reader(Reader r)//登錄時(shí)判斷讀者用戶是否存在函數(shù),相當(dāng)于遍歷

{

for(int i=0;i

if(strcmp(readers[i].get_rname(),r.get_rname())==0)

return true;

return false;

} void reg_reader()//注冊(cè)用戶函數(shù)

{

char n[10];

//姓名name

char c[10];

//班級(jí)class

char t[10];

//電話tel

Reader reader;

cout<<”nt請(qǐng)輸入您的姓名:“;

cin>>n;

cout<<”nt請(qǐng)輸入您的所在班級(jí):“;

cin>>c;

cout<<”nt請(qǐng)輸入您的聯(lián)系電話:“;

cin>>t;

reader.set_rname(n);//調(diào)用讀者結(jié)構(gòu)體設(shè)置讀者姓名函數(shù)

reader.set_rclass(c);//調(diào)用讀者結(jié)構(gòu)體設(shè)置讀者班級(jí)函數(shù)

reader.set_rtel(t);//調(diào)用讀者結(jié)構(gòu)體設(shè)置聯(lián)系電話函數(shù)

add_reader(reader);//調(diào)用讀者結(jié)構(gòu)體添加讀者函數(shù)

cout<<”nt注冊(cè)成功!“;} void show_reader()//不帶參的顯示讀者信息函數(shù)

{ cout<<”n ☆☆☆☆☆☆☆☆☆☆☆☆讀★★者★★信★★息★★列★★表☆☆☆☆☆☆☆☆☆☆☆nn“;

cout<<”姓名ttt班級(jí)ttt電話n“;

for(int i=0;i

{

cout<

cout<<”ttt“<

cout<<”ttt“<

} } void show_reader(int i)//帶參的顯示讀者信息函數(shù)

{

cout<<”n ☆☆☆☆☆☆☆☆☆☆☆☆讀★★者★★信★★息★★列★★表☆☆☆☆☆☆☆☆☆☆nn“;

cout<<”姓名ttt班級(jí)ttt電話n“;

cout<

cout<<”ttt“<

cout<<”ttt“<

}

};

//********書籍結(jié)構(gòu)體,用于存放書籍基本信息******** class Book { private:

char bnum[10];

//書號(hào)

char bname[20];

//書名

char bauthor[10];

//作者

char rname[10];

//借閱人 public: int tag;

//狀態(tài)標(biāo)記判斷指標(biāo)(已借/在架)Book()

//構(gòu)造函數(shù)初始化信息

{strcpy(bnum,”“);strcpy(bname,”“);strcpy(bauthor,”“);strcpy(rname,”“);tag=0;}

void set_bnum(char *no)

//設(shè)置書號(hào)

{strcpy(bnum,no);}

//把字符串no中的字符復(fù)制到字符串bnum中

char *get_bnum()

//獲得書號(hào)

{

return bnum;}

//返回值為bnum

void set_bname(char *n)

//設(shè)置書名

{strcpy(bname,n);}

char *get_bname()

//獲得書名

{return bname;}

void set_bauthor(char *a)

//設(shè)置作者

{strcpy(bauthor,a);}

char * get_bauthor()

//獲得作者姓名

{return bauthor;}

void set_tag(int t)

//狀態(tài)設(shè)置

{tag=t;}

void set_rname(char *rn)

//設(shè)置借閱人

{strcpy(rname,rn);}

char *get_rname()

//獲得借閱人姓名

{return rname;}

void show_tag()

//顯示圖書狀態(tài)

{

if(tag==1)

{cout<<”已借“;}

else

{cout<<”在架“;}

}

void copy(Book m)

//Book結(jié)構(gòu)體copy函數(shù)

{

strcpy(bnum,m.get_bnum());

//將獲得書號(hào)函數(shù)里的返回值里的字符復(fù)制到bnum

strcpy(bname,m.get_bname());

strcpy(bauthor,m.get_bauthor());

tag=0;

} };//**********書籍管理結(jié)構(gòu)體,實(shí)現(xiàn)管理書籍功能********** class BookManage { private:

Book books[100];

//定義Book書籍結(jié)構(gòu)體數(shù)組對(duì)象,最大容量100本

int length;

void saveFile()

//保存書籍文件

{

ofstream fwrite;//定義輸出文件流ofstream結(jié)構(gòu)體對(duì)象fwrite

if(!fwrite)

{cout<<”文件保存失敗!n“;exit(1);

}

fwrite.open(BookFile,ios::binary);//使文件流與文件建立關(guān)聯(lián),以二進(jìn)制方式打開

fwrite.write((char *)books,length*sizeof(Book));//計(jì)算并返回所占字節(jié)數(shù)

fwrite.close();

//關(guān)閉磁盤文件

} void readFile()

//讀取書籍文件

{

ifstream fread;//定義輸入文件流對(duì)象fread

length=0;

if(!fread)

{cout<<”文件讀取失敗!“<

Book temp;

//定義書籍結(jié)構(gòu)體臨時(shí)對(duì)象temp

int i=0;

fread.open(BookFile ,ios::binary);//使文件流與文件建立關(guān)聯(lián),以二進(jìn)制方式打開

while((fread.read((char *)&books[i],sizeof(Book))))

i++;

//每讀完一次,指針后移一位,直到不能讀出正確結(jié)果為止

length=i;

fread.close();} public:

BookManage()

//構(gòu)造函數(shù),讀取磁盤文件

{

length=0;

//從頭讀起,計(jì)數(shù),最大100

readFile();

//調(diào)用讀取文件函數(shù)

}

~BookManage()

//析構(gòu)函數(shù),保存磁盤文件

{

saveFile();

//調(diào)用保存文件函數(shù)

}

bool add(Book book)

//添加圖書資料

{

if(length>=100)

{ cout<<”對(duì)不起,儲(chǔ)存已滿,您無法繼續(xù)添加!n“;

return-1;

}

else

{

books[length].copy(book);//調(diào)用書籍結(jié)構(gòu)體copy函數(shù)

length++;

return(length-1);

} } int bnu_search(char *bnu)

//按書號(hào)查找書籍

{

for(int i=0;i

if(strcmp(books[i].get_bnum(),bnu)==0)//字符串比較,判斷是否相等

return i;

return-1;

} int bna_search(char *bna)

//按書名查找書籍

{

for(int i=0;i

if(strcmp(books[i].get_bname(),bna)==0)//判斷

return i;

return-1;

} int bau_search(char *bau)//按作者查找書籍

{

for(int i=0;i

if(strcmp(books[i].get_bauthor(),bau)==0)//判斷

return i;

return-1;

}

int rn_search(char *rn)//按借閱人查找書籍

{

for(int i=0;i

if(strcmp(books[i].get_rname(),rn)==0)//判斷

return i;

return-1;

}

void revise(Book book,int i)//帶參的修改書籍函數(shù)

{books[i].copy(book);} //調(diào)用Book結(jié)構(gòu)體copy函數(shù)

void deleteBook(int index)//帶參的刪除書籍資料函數(shù)

{

for(int i=index;i

books[i].copy(books[i+1]);//用后面的地址將當(dāng)前的地址覆蓋

length--;

} void show_book()//不帶參的顯示書籍函數(shù)

{

cout<<” ☆☆☆☆☆☆☆☆☆☆☆書★★籍★★信★★息★★列★★表☆☆☆☆☆☆☆☆☆☆☆nn“;

cout<<”書號(hào)“;

cout.width(10);

cout<<”書名“;

cout.width(10);

cout<<”作者“;

cout.width(17);

cout<<”狀態(tài)“;

cout.width(25);

cout<<”借閱人n“;

for(int i=0;i

{ cout<

cout.width(10);

cout<

cout.width(10);

cout<

cout.width(20);

books[i].show_tag();

cout.width(20);

cout<

}

} void show_book(int i)//帶參的顯示書籍函數(shù)

{ cout<<” ☆☆☆☆☆☆☆☆☆☆☆書★★籍★★信★★息★★列★★表☆☆☆☆☆☆☆☆☆☆☆nn“;

cout<<”書號(hào)“;

cout.width(10);

cout<<”書名“;

cout.width(10);

cout<<”作者“;

cout.width(17);

cout<<”狀態(tài)“;

cout.width(25);

cout<<”借閱人n“;

cout<

cout.width(10);

cout<

cout.width(10);

cout<

cout.width(20);

books[i].show_tag();

cout.width(20);

cout<

}

void br_book()//讀者借、還書功能函數(shù)

{

ReaderManage reader;

int choi;//選擇

int a;

//圖書狀態(tài)指標(biāo)(1已借2在架)

char sh[10];//需要還書的書號(hào)

char dz[10];//讀者姓名

cin>>sh;

int index=bnu_search(sh);//定義一個(gè)變量等于查找到的書號(hào)

if(index>=0)

{ if(books[index].tag==1)//已借

a=1;

if(books[index].tag==0)//在架

a=2;

switch(a)

{ case 1:

cout<<”nt該書目前狀態(tài)為<已借出>n“;

cout<<”nt請(qǐng)選擇您需要的服務(wù):1:還書

0:返回n“;

cin>>choi;

cin.ignore();//清除以回車結(jié)束的輸入緩沖區(qū)的內(nèi)容,消除上一次輸入對(duì)下一次輸入的影響

if(choi!=1&&choi!=0)

{

cout<<”nt操作有誤,請(qǐng)重新選擇(0/1)!n“;

return;

}

else if(choi==1)

{

cout<<”nt請(qǐng)輸入您的姓名:“;

cin>>dz;

cin.ignore();

int index1=reader.search(dz);

if(index1==-1)

{

cout<<”nt對(duì)不起,系統(tǒng)無該讀者記錄,新用戶請(qǐng)先注冊(cè)!“;

return;

}

else

{

strcpy(dz,”“);//將讀者姓名已空白代替

books[index].set_rname(dz);//借閱人一項(xiàng)變?yōu)榭瞻?/p>

books[index].set_tag(0);//圖書狀態(tài)變?yōu)樵诩?/p>

cout<<”nt還書成功!“<

}

}break;

case 2:

cout<<”nt該書目前狀態(tài)為<在館>n“;

cout<<”nt請(qǐng)您需要的服務(wù):1:借書

0:返回n“;

cin>>choi;

cin.ignore();

if(choi!=1&&choi!=0)

{

cout<<”nt操作有誤,請(qǐng)重新選擇(0/1)!n“;

return;

}

else if(choi==1)

{

cout<<”nt請(qǐng)輸入您的姓名:“;

cin>>dz;

int index1=reader.search(dz);

if(index1==-1)

{ cout<<”nt對(duì)不起,系統(tǒng)無改讀者記錄,新用戶請(qǐng)先注冊(cè)!“;

return;

}

else

{

books[index].set_rname(dz);

books[index].set_tag(1);

cout<<”nt借書成功!“<

}

}break;

}

}

else

{

cout<<”nt對(duì)不起,系統(tǒng)無該書記錄!“;}

}

bool in(int i)//判斷圖書是否在架函數(shù)

{

if(books[i].tag==1)

return false;

return true;

}

};//**********菜單結(jié)構(gòu)體,實(shí)現(xiàn)界面引導(dǎo)********** class Menu {

BookManage bm;

//定義書籍管理結(jié)構(gòu)體對(duì)象bm ReaderManage rm;

//定義讀者管理結(jié)構(gòu)體對(duì)象rm Reader r;

//定義讀者結(jié)構(gòu)體對(duì)象r private: int choice;

//菜單序號(hào)選擇

int key;

//管理員密碼 public: void header()

//頁(yè)眉

{

system(”color fd“);

cout<<”t

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;

cout<<”t

☆n“;

cout<<”t

☆n“;

cout<<”t

統(tǒng)

☆n“;

cout<<”t

☆n“;

cout<<”t

☆n“;

cout<<”t

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;} void log_menu()

//主界面登錄菜單

{

system(”color fd“);

header();

cout<<”nttt< 請(qǐng)

份 >n“;

cout<<”ntttt1: 管理員nntttt2: 讀

者nntttt0: 退

出nt您的選擇是: “;choice: cin>>choice;

cin.ignore();

//清除以回車結(jié)束的輸入緩沖區(qū)的內(nèi)容,消除上一次輸入對(duì)下一次輸入的影響

switch(choice)

{

case 1:

log_admin();

//管理員登錄,需密碼驗(yàn)證

break;

case 2:

reader_lr();

//讀者登錄或注冊(cè)

break;

case 0:

exit(1);

//退出系統(tǒng)

break;

default:

cout<<”nt您的操作有誤,請(qǐng)重新選擇(0→2): “;

goto choice;

} } void admin_menu()

//管理員管理菜單

{

system(”cls“);

system(”color f9“);

cout<<”t

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;

cout<<”t

☆n“;

cout<<”t

系★統(tǒng)★管★理★界★面

☆n“;

cout<<”t

☆n“;

cout<<”t

1: 添加新的圖書資料

2: 修改已有圖書資料

☆n“;

cout<<”t

☆n“;

cout<<”t

3: 刪除已有圖書資料

4: 查找已有圖書資料

☆n“;

cout<<”t

☆n“;

cout<<”t

5: 查看所有圖書資料

6: 修改讀者用戶信息

☆n“;

cout<<”t

☆n“;

cout<<”t

7: 刪除讀者用戶信息

8: 查看所有讀者信息

☆n“;

cout<<”t

☆n“;

cout<<”t

9: 返回系統(tǒng)登錄界面

0: 退出圖書管理系統(tǒng)

☆n“;

cout<<”t

☆n“;

cout<<”t

☆n“;

cout<<”t

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;

cout<<”nt請(qǐng)選擇您需要的服務(wù)序號(hào): “;choice: cin>>choice;

cin.ignore();

switch(choice)

{

case 1:

//添加圖書

addBook();

bm.~BookManage();

break;

case 2:

//修改圖書

reviseBook();

bm.~BookManage();

break;

case 3:

//刪除圖書

delBook();

bm.~BookManage();

break;

case 4:

//查找圖書

absearch_menu();

break;

case 5:

//查看全部圖書

bm.show_book();

cout<<”nt顯示完畢!“;

system(”pause“);

admin_menu();

break;

case 6:

//修改讀者

reviseReader();

rm.~ReaderManage();

break;

case 7:

//刪除讀者

delReader();

rm.~ReaderManage();

break;

case 8: //查看所有讀者

rm.show_reader();

cout<<”nt顯示完畢!“;

system(”pause“);

admin_menu();

break;

case 9: //返回系統(tǒng)登錄界面

system(”cls“);

log_menu();

case 0: //退出系統(tǒng)

exit(1);

break;

default:

cout<<”nt您的操作有誤,請(qǐng)重新選擇(0→7): “;

goto choice;

} } void reader_menu()

//讀者服務(wù)菜單

{

system(”cls“);

system(”color f9“);

cout<<”t

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;

cout<<”t

☆n“;

cout<<”t

讀★者★服★務(wù)★界★面

☆n“;

cout<<”t

☆n“;

cout<<”t

1: 借 閱 圖 書

2: 歸 還 圖 書

☆n“;

cout<<”t

☆n“;

cout<<”t

3: 查 找 圖 書

4: 借 閱 情 況

☆n“;

cout<<”t

☆n“;

cout<<”t

5: 返 上 一 級(jí)

0: 退 出 系 統(tǒng)

☆n“;

cout<<”t

☆n“;

cout<<”t

☆n“;

cout<<”t

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;

cout<<”nt請(qǐng)選擇您需要的服務(wù)序號(hào): “;choice: cin>>choice;

cin.ignore();

switch(choice)

{

case 1:

cout<<”nt請(qǐng)輸入您欲借閱的圖書書號(hào): “;

bm.br_book();

bm.~BookManage();

break;

case 2:

cout<<”nt請(qǐng)輸入您欲歸還的圖書書號(hào): “;

bm.br_book();

bm.~BookManage();

break;

case 3:

bsearch_menu();

break;

case 4:

rn_search();

break;

case 5:

system(”cls“);

reader_lr();

break;

case 0:

exit(1);

break;

default:

cout<<”nt您的操作有誤,請(qǐng)重新選擇(0→5):

goto choice;

} } void bsearch_menu()

//讀者查找書籍菜單

{

system(“color f2”);

cout<<“ttt☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n”;cout<<“ttt☆

☆n”;

cout<<“ttt☆

書★籍★查★找★界★面

☆n”;

cout<<“ttt☆

☆n”;

cout<<“ttt☆

1: 按 書號(hào)查找

☆n”;

cout<<“ttt☆

☆n”;

cout<<“ttt☆

2: 按 書名查找

☆n”;

cout<<“ttt☆

☆n”;

cout<<“ttt☆

3: 按 作者查找

☆n”;

cout<<“ttt☆

☆n”;

cout<<“ttt☆

4: 返 回 上 級(jí)

☆n”;

cout<<“ttt☆

☆n”;

cout<<“ttt☆

0: 退 出 系 統(tǒng)

☆n”;cout<<“ttt☆

☆n”;

cout<<“ttt☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n”;

int bsc;//book search choice cout<<“nt請(qǐng)輸入您需要的服務(wù)序號(hào): ”;

cin>>bsc;

cin.ignore();

switch(bsc){

case 1:

bnu_search();

break;

case 2:

bna_search();

“;

break;

case 3:

bau_search();

break;

case 4:

reader_menu();

break;

case 5:

exit(1);

default:

cout<<”nt操作有誤,請(qǐng)重新選擇<0→4>“;

break;

}

}

void absearch_menu()

//管理員查找書籍菜單

{

system(”color f2“);

cout<<”ttt☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;

cout<<”ttt☆

☆n“;

cout<<”ttt☆

書★籍★查★找★界★面

☆n“;

cout<<”ttt☆

☆n“;

cout<<”ttt☆

1: 按 書號(hào)查找

☆n“;

cout<<”ttt☆

☆n“;

cout<<”ttt☆

2: 按 書名查找

☆n“;

cout<<”ttt☆

☆n“;

cout<<”ttt☆

3: 按 作者查找

☆n“;

cout<<”ttt☆

☆n“;

cout<<”ttt☆

4: 返 回 上 級(jí)

☆n“;

cout<<”ttt☆

☆n“;

cout<<”ttt☆

0: 退 出 系 統(tǒng)

☆n“;

cout<<”ttt☆

☆n“;

cout<<”ttt☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n“;

int bsc;//book search choice

cout<<”nt請(qǐng)輸入您需要的服務(wù)序號(hào): “;

cin>>bsc;

cin.ignore();

switch(bsc)

{

case 1:

bnu_search();

break;

case 2:

bna_search();

break;

case 3:

bau_search();

break;

case 4:

admin_menu();

break;

case 5:

exit(1);

default:

cout<<”nt操作有誤,請(qǐng)重新選擇<0→4>“;

break;

}

} void reader_lr()//讀者登錄或注冊(cè)菜單 {

system(”cls“);

header();

system(”color f1“);

cout<<”nttt< 讀

面 >n“;

cout<<”nttt

1: 登

錄t2: 注

冊(cè)nnttt

3: 返

回t0: 退

出nt您的選擇是: “;

int rlc;//reader login choice choice: cin>>rlc;

cin.ignore();

switch(rlc)

{

case 1:

//已注冊(cè)讀者登錄

cout<<”nt請(qǐng)輸入您的姓名: “;

char rn[10];//reader name

cin>>rn;

r.set_rname(rn);

if(rm.log_reader(r))

{

cout<<”nt登錄成功!“;

system(”pause“);

reader_menu();

}

else

cout<<”nt登錄失敗!新用戶請(qǐng)先注冊(cè)!“;

system(”pause“);

reader_lr();

break;

case 2:

//新用戶注冊(cè)

rm.reg_reader();

rm.~ReaderManage();

system(”pause“);

reader_lr();

break;

case 3:

system(”cls“);

log_menu();

case 0:

exit(1);

break;

default:

cout<<”nt您的操作有誤,請(qǐng)重新選擇(0→2):

goto choice;

} } void log_admin()

//管理員登錄

{

cout<<“nt請(qǐng)輸入管理員密碼:”;

int key;

cin>>key;

if(key==14125)

{

cout<<“nt登錄成功!nnt”;

system(“pause”);

admin_menu();

//管理員操作菜單

}

else

{cout<<“nt登錄失敗!原因是密碼錯(cuò)誤!n”;

cout<<“nt請(qǐng)選擇 <1:返回上一級(jí)菜單

0:退出系統(tǒng)>

cin>>choice;

cin.ignore();

switch(choice)

”;“;

{

case 1:

system(”cls“);

log_menu();

break;

case 0:

exit(1);

break;

default:

cout<<”nt操作有誤,請(qǐng)重新選擇(0/1)“;

}

} } void rn_search()

//按書號(hào)查找函數(shù)

{

char rn[10];//reader name

cout<<”nt請(qǐng)輸入您的姓名:“;

cin>>rn;

int index=bm.rn_search(rn);

if(index>=0)

bm.show_book(index);

else

cout<<”nt對(duì)不起,系統(tǒng)無您的借閱記錄!“;

cout<<”nt“;

system(”pause“);

reader_menu();

} void bnu_search()

//按書號(hào)查找函數(shù)

{

char bnu[10];

cout<<”nt請(qǐng)輸入您要查找的書號(hào):“;

cin>>bnu;

int index=bm.bnu_search(bnu);

if(index>=0)

bm.show_book(index);

else

cout<<”nt對(duì)不起,系統(tǒng)無該書籍記錄!“;

cout<<”nt“;

system(”pause“);

bsearch_menu();

}

void bna_search()

//按書名查找函數(shù)

{

cout<<”nt請(qǐng)輸入您要查找的書名:“<

char bna[20];

cin>>bna;

int index=bm.bna_search(bna);

if(index>=0)

bm.show_book(index);

else

cout<<”nt對(duì)不起,系統(tǒng)無該書籍記錄!“;

cout<<”nt“;

system(”pause“);

bsearch_menu();

}

void bau_search()

//按作者查找函數(shù)

{

cout<<”nt請(qǐng)輸入您要查找的作者:“<

char bau[10];

cin>>bau;

int index=bm.bau_search(bau);

if(index>=0)

bm.show_book(index);

else

cout<<”nt對(duì)不起,系統(tǒng)無該書籍記錄!“;

cout<<”nt“;

system(”pause“);

bsearch_menu();

}

void addBook()

//新增書籍函數(shù)

{ char numb[10];

//書號(hào)

char nameb[20];

//書名

char authorb[10];//作者

Book book;

//書籍結(jié)構(gòu)體對(duì)象book

int tag1;input1:cout<<”nt請(qǐng)輸入新書書號(hào):“;

cin>>numb;

int index=bm.bnu_search(numb);

if(index==-1)

{

cout<<”nt系統(tǒng)目前尚無該書記錄,您可以繼續(xù)操作!n“;

cout<<”nt請(qǐng)輸入新書書名:“;

cin>>nameb;

cout<<”nt請(qǐng)輸入新書作者:“;

cin>>authorb;

tag1=0;

book.set_bnum(numb);

book.set_bname(nameb);

book.set_bauthor(authorb);

book.set_tag(tag1);

bm.add(book);

cout<<”nt恭喜您!新書資料錄入成功!“;

}

else

{

cout<<”nt對(duì)不起,該書號(hào)紀(jì)錄已存在!請(qǐng)重新輸入!“;

goto input1;

}

system(”pause“);

admin_menu();} void reviseBook()

//修改書籍函數(shù)

{

char numb[10];

char nameb[20];

char authorb[10];

Book book;

int index=-1;input2: cout<<”nt請(qǐng)輸入您要修改書籍的書號(hào):“;

cin>>numb;

index=bm.bnu_search(numb);

if(index==-1)

{

cout<<”nt對(duì)不起,您輸入的書號(hào)不存在,請(qǐng)重新輸入!“<

goto input2;

return;

}

bool sta=bm.in(index);//判斷是否在館

if(sta)

{ cout<<”nt該書目前處于<在架>狀態(tài),您可以繼續(xù)操作!“;

cout<<”nt請(qǐng)輸入更改后的書名:“;

cin>>nameb;

cout<<”nt請(qǐng)輸入更改后的作者:“;

cin>>authorb;

book.set_bnum(numb);

book.set_bname(nameb);

book.set_bauthor(authorb);

bm.revise(book,index);

cout<<”nt恭喜您!書籍資料修改成功!“;}

else

cout<<”nt該書已被借出,請(qǐng)于讀者歸還后再進(jìn)行相關(guān)操作!“<

system(”pause“);

admin_menu();

} void delBook()

//刪除書籍函數(shù)

{

char numb[10];

cout<<”nt請(qǐng)輸入您要?jiǎng)h除書籍的書號(hào):“;

cin>>numb;

int index=bm.bnu_search(numb);

if(index>=0)

{

cout<<”nt您確定要?jiǎng)h除該書記錄嗎(y/n)

“;

char y;

cin>>y;

if(y=='y'||y=='Y')

{

bm.deleteBook(index);

cout<<”nt刪除成功!“;

}

else

cout<<”nt刪除取消!“;

}

else

cout<<”nt對(duì)不起,系統(tǒng)沒有該圖書記錄!“;

system(”pause“);

admin_menu();

} void reviseReader()//修改讀者用戶函數(shù)

{

char namer[10];

Reader reader;get1:

cout<<”nt請(qǐng)輸入你要修改讀者用戶的姓名: “;

cin>>namer;

int index=rm.search(namer);

if(index==-1)

{

cout<<”nt對(duì)不起,系統(tǒng)無改讀者記錄,重新輸入請(qǐng)按1,返回請(qǐng)按0:

int a;

cin>>a;get2:

cin.ignore();

switch(a)

{

case 1:

goto get1;

break;

case 0:

system(“pause”);

admin_menu();

break;

default:

cout<<“nt您的操作有誤,請(qǐng)重新選擇(0/1):

”;

goto get2;

}

return;

}

“;

else

{

char namer[10];

char classr[10];

char telr[10];

Reader reader;

cout<<”nt請(qǐng)輸入更改后的讀者姓名:“;

cin>>namer;

cout<<”nt請(qǐng)輸入更改后的班級(jí)名稱:“;

cin>>classr;

cout<<”nt請(qǐng)輸入更改后的聯(lián)系電話:“;

cin>>telr;

reader.set_rname(namer);

reader.set_rclass(classr);

reader.set_rtel(telr);

cout<<”nt是否真的修改該記錄(y/n?):“;

char y;

cin>>y;

if(y=='y'||y=='Y')

{ rm.revise(reader,index);

cout<<”nt修改成功!n“;

}

else

cout<<”nt操作取消!n“;

}

system(”pause“);

admin_menu();

}

void delReader()

//刪除讀者用戶函數(shù)

{

cout<<”nt請(qǐng)輸入您要?jiǎng)h除的讀者用戶的姓名:“<

char namer[10];

cin>>namer;

int index=rm.search(namer);

if(index>=0)

{

cout<<”nt是否真的刪除該記錄(y/n?): “;

char y;

cin>>y;

if(y=='y'||y=='Y')

{

rm.delete_reader(index);

cout<<”nt刪除成功!n“;

}

else

cout<<”nt操作取消!n“;

}

else

cout<<”nt對(duì)不起,系統(tǒng)尚無該讀者記錄!“;

system(”pause“);

admin_menu();

} };//********主函數(shù)******** int main(){

system(”color fd“);Menu menu;//定義菜單結(jié)構(gòu)體對(duì)象menu

cout<<”ttt 文計(jì)091-1 龐麗萍 200990514125

“;cout<<”ttt

當(dāng)前日期:2011-6-22 星期三“;cout<<”ttt

當(dāng)前時(shí)間:08:00

“;cout<<”nttt

★ 歡 “;cout<<”★ 迎 “;

} cout<<”★ 進(jìn) “;cout<<”★ 入 ★nn";menu.log_menu();return 0;四.程序正確性驗(yàn)證

1主頁(yè)面

2.管理員登陸頁(yè)面

3.圖書添加

五.課程設(shè)計(jì)過程中出現(xiàn)的問題、原因及解決方法

1.用戶登錄密碼時(shí),不能使用暗碼來保護(hù)密碼。(未解決成功)2.每個(gè)界面都能退出到主頁(yè)面,而不是直接跳出系統(tǒng)。(以解決)3.書名字長(zhǎng)太多影響書籍、作者、數(shù)量等之間的一一對(duì)應(yīng)關(guān)系。(為解決成功)

六.課程設(shè)計(jì)的主要收獲

通過這幾天學(xué)習(xí)設(shè)計(jì)圖書信息管理系統(tǒng),認(rèn)識(shí)到一切看似簡(jiǎn)單的事情只有自己動(dòng)手做,明白了其中的原理才會(huì)更好的把它變成自己的東西。圖書管理系統(tǒng)主要用到了文件的輸入輸出,以及利用簡(jiǎn)單的順序查找知識(shí),加深了對(duì)數(shù)據(jù)結(jié)構(gòu)的理解與應(yīng)用。對(duì)于這次的課程設(shè)計(jì),首先,許多知識(shí)不僅僅只是課本上的,需要我們自己去圖書館或網(wǎng)上收集資料。其次,編程過程終遇到各種錯(cuò)誤,需要我們耐心分析,討論,最后得出正確結(jié)果。第三,程序無錯(cuò),進(jìn)行調(diào)試,然后進(jìn)行加工修改優(yōu)化。

七.對(duì)今后課程設(shè)計(jì)的建議

希望老師可以分小組做課程設(shè)計(jì),題目可以相應(yīng)的增大難度。分組可以鍛煉團(tuán)對(duì)合作能力,隊(duì)員可以相互討論解決問題,彼此能夠激發(fā)更多的思想,做出更完善的作品,同時(shí)也防止了互相拷貝的情況,讓每個(gè)同學(xué)都積極的參與到設(shè)計(jì)中,而不是坐享其成。

第五篇:財(cái)務(wù)管理CAI項(xiàng)目修改意見

《財(cái)務(wù)管理CAI項(xiàng)目》修改意見 中山大學(xué)新華學(xué)院管理學(xué)系李安蘭

針對(duì)該項(xiàng)目立項(xiàng)評(píng)審時(shí)專家提出,財(cái)務(wù)管理課程的內(nèi)容涉及大量的數(shù)學(xué)運(yùn)算,如何利用PPT課件解決的意見,現(xiàn)提出如下解決辦法:

一、從教學(xué)經(jīng)驗(yàn)來看,利用公式編輯程序“Microsoft公式3.0”能解決目前財(cái)務(wù)管理教學(xué)中的所有數(shù)學(xué)公式的輸入問題。

二、學(xué)生在學(xué)習(xí)財(cái)務(wù)管理時(shí),已經(jīng)學(xué)習(xí)了《高等數(shù)學(xué)》等相關(guān)數(shù)學(xué)知識(shí),財(cái)務(wù)管理學(xué)習(xí)中主要是一些基本的數(shù)學(xué)方法的運(yùn)用,很少數(shù)學(xué)推導(dǎo)。目前碰到的最復(fù)雜的也就是等比數(shù)列的求和以及一元回歸方程的運(yùn)用,這些都已經(jīng)在前面的教學(xué)中輸入了ppt課件。

三、財(cái)務(wù)管理是一門理論和實(shí)踐都比較成熟的專業(yè)課,一方面,很多復(fù)雜的數(shù)學(xué)計(jì)算在實(shí)踐中已經(jīng)通過列表等形式簡(jiǎn)化了,比如資金的時(shí)間價(jià)值計(jì)算中涉及的指數(shù)運(yùn)算,財(cái)務(wù)管理就有復(fù)利終值系數(shù)表、復(fù)利現(xiàn)值系數(shù)表、年金終值系數(shù)表、年金現(xiàn)值系數(shù)表等附表,計(jì)算時(shí)比較簡(jiǎn)單;另一方面,教學(xué)中會(huì)運(yùn)用大量的案例教學(xué),利用PPT既節(jié)省板書時(shí)間,又有利于學(xué)生理解案例意思。總之,從08財(cái)務(wù)管理、08市場(chǎng)營(yíng)銷、08電子商務(wù)和08工商管理的教學(xué)實(shí)踐來看,利用公式編輯程序Microsoft公式3.0,PPT課件的制作已經(jīng)得以解決。另外,在教學(xué)過程中,為了強(qiáng)化某個(gè)知識(shí)點(diǎn),會(huì)輔以必要的粉筆板書。從教學(xué)實(shí)踐來看,利用PPT課件教學(xué),不僅增加了數(shù)學(xué)方法的直觀性,更節(jié)省了板書時(shí)間,提高了案例教學(xué)的效果。所以,筆者認(rèn)為財(cái)務(wù)管理CAI課件項(xiàng)目是可行的。

下載數(shù)據(jù)結(jié)構(gòu)CAI系統(tǒng)項(xiàng)目手冊(cè)word格式文檔
下載數(shù)據(jù)結(jié)構(gòu)CAI系統(tǒng)項(xiàng)目手冊(cè).doc
將本文檔下載到自己電腦,方便修改和收藏,請(qǐng)勿使用迅雷等下載。
點(diǎn)此處下載文檔

文檔為doc格式


聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

相關(guān)范文推薦

主站蜘蛛池模板: 亚洲欧美一区二区三区在线| 国产综合成人亚洲区| 肉色超薄丝袜脚交一区二区| 成人免费无遮挡无码黄漫视频| 99re热这里有精品首页| 亚洲精品久久久一区| 日日av拍夜夜添久久免费| 日产中文字幕在线精品一区| 黄床片30分钟免费视频教程| 国精品午夜福利视频不卡| 久久人人爽人人爽久久小说| 米奇影院888奇米色99在线| 久久这里只有精品18| 都市激综合小说区另类区| 国内精品久久久久久久影视| 男人的天堂va在线无码| 免费人成在线观看播放a| 18禁黄无码免费网站高潮| 亚洲av乱码一区二区三区| 国产精品一区二区久久精品| 国产片在线天堂av| 国产精品爆乳奶水无码视频免费| 欧美亚洲精品中文字幕乱码| 高清无码午夜福利在线观看| 免费久久99精品国产自在现线| 一区二区三区在线 | 欧洲| 亚洲中文字幕无码av在线| 亚洲一久久久久久久久| 国产av旡码专区亚洲av苍井空| 久久婷婷人人澡人爽人人喊| 国产亚洲精品字幕在线观看| 亚洲av乱码一区二区三区香蕉| 亚洲经典千人经典日产| 人妻少妇精品一区二区三区| 少妇厨房愉情理伦片视频在线观看| 亚洲人成影院在线观看| 国产麻豆精品乱码一区| 国产精品偷啪在线观看| 夜夜躁狠狠躁2021| 国产精品久久久影视青草| 18?流白浆??小蘑菇|