課程設(shè)計(jì)宿舍管理查詢(xún)系統(tǒng)_第1頁(yè)
課程設(shè)計(jì)宿舍管理查詢(xún)系統(tǒng)_第2頁(yè)
課程設(shè)計(jì)宿舍管理查詢(xún)系統(tǒng)_第3頁(yè)
課程設(shè)計(jì)宿舍管理查詢(xún)系統(tǒng)_第4頁(yè)
課程設(shè)計(jì)宿舍管理查詢(xún)系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-(宿舍管理查詢(xún)軟件)題 目:宿舍管理查詢(xún)軟件 學(xué)生姓名: 學(xué) 號(hào): 專(zhuān)業(yè)班級(jí): 2014年7月3日數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)題目宿舍管理查詢(xún)軟件1、課程設(shè)計(jì)的目的2、課程設(shè)計(jì)的內(nèi)容和要求(包括原始數(shù)據(jù)、技術(shù)要求、工作要求等)任務(wù):為宿舍管理人員編寫(xiě)一個(gè)宿舍管理查詢(xún)軟件, 程序設(shè)計(jì)要求:(1)采用交互工作方式(2)可以增加、刪除、修改信息(3)建立數(shù)據(jù)文件 ,數(shù)據(jù)文件按關(guān)鍵字(姓名、學(xué)號(hào)、房號(hào))進(jìn)行排序(選擇、快速排序、堆排序等任選一種)(4) 查詢(xún) : a.按姓名查詢(xún) ;b.按學(xué)號(hào)查詢(xún) ;c按房號(hào)查詢(xún)(5) 打印任一查詢(xún)結(jié)果(可以連續(xù)操作)目 錄數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)I目錄I1 設(shè)計(jì)題目12

2、 需求分析13算法設(shè)計(jì)13.1算法設(shè)計(jì)思想及分析13.2線性表的順序存儲(chǔ)23.2.1程序流程圖為:23.2.2存儲(chǔ)結(jié)構(gòu):34、數(shù)據(jù)測(cè)試34.1開(kāi)始錄入的數(shù)據(jù):34.2插入的數(shù)據(jù):34.3查找的數(shù)據(jù):34.4刪除的數(shù)據(jù):35、測(cè)試輸出結(jié)果及分析(以運(yùn)行結(jié)果圖表示):45.1測(cè)試輸出結(jié)果45.1.1歡迎界面:45.1.2按任意鍵進(jìn)入線性表的創(chuàng)建界面,輸入數(shù)據(jù),開(kāi)始創(chuàng)建:45.1.3請(qǐng)按鍵選擇操作:55.1.4按學(xué)號(hào)排序:55.1.5按房號(hào)排序:5插入后顯示:6按姓名查找:6按學(xué)號(hào)查找:7按房號(hào)查找:7進(jìn)入刪除功能,刪除數(shù)據(jù)后顯示剩余的學(xué)生信息:7退出(數(shù)字為零時(shí)退出):85.2測(cè)試輸出結(jié)果分析86

3、、收獲與體會(huì)91 、設(shè)計(jì)題目宿舍管理查詢(xún)軟件任務(wù):為宿舍管理人員編寫(xiě)一個(gè)宿舍管理查詢(xún)軟件, 程序設(shè)計(jì)要求:(1)采用交互工作方式(2)可以增加、刪除、修改信息(3)建立數(shù)據(jù)文件 ,數(shù)據(jù)文件按關(guān)鍵字(姓名、學(xué)號(hào)、房號(hào))進(jìn)行排序(選擇、快速排序、堆排序等任選一種)(4) 查詢(xún) : a.按姓名查詢(xún) ;b.按學(xué)號(hào)查詢(xún) ;c按房號(hào)查詢(xún)(5) 打印任一查詢(xún)結(jié)果(可以連續(xù)操作)2、需求分析根據(jù)上述要求,我們開(kāi)始考慮系統(tǒng)應(yīng)具備的功能:3、 算法設(shè)計(jì)3.1 算法設(shè)計(jì)思想及分析首先,運(yùn)行程序進(jìn)入“歡迎進(jìn)入宿舍管理查詢(xún)系統(tǒng)”界面,然后進(jìn)入線性表創(chuàng)建界面中,輸入學(xué)生的信息,創(chuàng)建好學(xué)生信息以后單擊“n”鍵則進(jìn)入操作界面

4、(主界面),然后可按鍵進(jìn)行操作。單擊數(shù)字鍵“1”,則為按姓名排序 單擊數(shù)字鍵“2”,則為按學(xué)號(hào)排序單擊數(shù)字鍵“3”,則為按房號(hào)排序 單擊數(shù)字鍵“4”,則為按姓名查找單擊數(shù)字鍵“5”,則為按學(xué)號(hào)查找 單擊數(shù)字鍵“6”,則為按學(xué)號(hào)查找單擊數(shù)字鍵“7”,則為按學(xué)號(hào)插入 單擊數(shù)字鍵“8”,則為按學(xué)號(hào)刪除系統(tǒng)中有如下關(guān)鍵詞: 提示:當(dāng)輸入的數(shù)字鍵為0時(shí),退出操作;請(qǐng)輸入數(shù)字鍵(18為操作鍵);請(qǐng)按任意鍵進(jìn)入主界面。3.2線性表的順序存儲(chǔ)3.2.1程序流程圖為:開(kāi)始顯示“宿舍管理查詢(xún)系統(tǒng)主菜單”是否繼續(xù)查找Y輸入“學(xué)號(hào),姓名,性別,房間號(hào)”是否繼續(xù)錄入Y“信息錄入”按鍵選擇操作按“1”按“4”按“6”按“

5、3”按“7”按“8”按“2”按“5”按姓名排序按學(xué)號(hào)排序按房號(hào)排序按姓名查找按房號(hào)查找是否繼續(xù)查找Y按學(xué)號(hào)查找是否繼續(xù)查找Y按學(xué)號(hào)插入Y是否繼續(xù)插入按學(xué)號(hào)刪除是否繼續(xù)刪除Y顯示列表NNNNNN按“0”結(jié)束3.2.2存儲(chǔ)結(jié)構(gòu)本系統(tǒng)定義的存儲(chǔ)結(jié)構(gòu)采用結(jié)構(gòu)體數(shù)組,結(jié)構(gòu)體為:#define ListSize 100typedef struct /定義結(jié)構(gòu)體成員char name20;int num; /學(xué)號(hào)和房號(hào)都為整型int room;stu;stu stud;typedef struct int ListSize; /當(dāng)前分配的存儲(chǔ)容量int length; /當(dāng)前長(zhǎng)度stu *elem; lin

6、klist; 4、數(shù)據(jù)測(cè)試4.1開(kāi)始錄入的數(shù)據(jù):姓名 學(xué)號(hào) 房間號(hào)李XX 357 612劉XX 361 528呂XX 250 4134.2插入的數(shù)據(jù):姓名 學(xué)號(hào) 房間號(hào)趙XX 346 612丁XX 367 5094.3查找的數(shù)據(jù):XX(按姓名) 359(按學(xué)號(hào)) 612(按房間號(hào))4.4刪除的數(shù)據(jù):357(按學(xué)號(hào))5、測(cè)試輸出結(jié)果(以運(yùn)行結(jié)果圖表示):5.1.1歡迎界面:5.1.2按任意鍵進(jìn)入線性表的創(chuàng)建界面,輸入數(shù)據(jù),開(kāi)始創(chuàng)建:5.1.3請(qǐng)按鍵選擇操作:5.1.4按學(xué)號(hào)排序:5.1.5按房號(hào)排序:5.1.6插入后顯示:5.1.7按姓名查找:5.1.8按學(xué)號(hào)查找:5.1.9按房號(hào)查找:5.1.

7、10進(jìn)入刪除功能,刪除數(shù)據(jù)后顯示剩余的學(xué)生信息:5.1.11退出(數(shù)字為零時(shí)退出):5.2分析結(jié)果優(yōu)點(diǎn):在插入和刪除模塊中,顯示學(xué)生的信息的下面總是有主界面,經(jīng)過(guò)調(diào)試,清屏后,顯示的只有學(xué)生的信息了,再按鍵即可返回主界面。本程序能很好的控制了顯示的學(xué)生信息與主界面的轉(zhuǎn)換。缺點(diǎn):在按關(guān)鍵字(姓名、學(xué)號(hào)、房號(hào))查找中,由于題目限制了只能用二分查找方式進(jìn)行查找,所以有時(shí)出現(xiàn)了關(guān)鍵字相同時(shí)(列如房號(hào)相同),就只能查出并顯示出一個(gè)學(xué)生的信息(例如612房間有杜欣笑和李劉璐兩名同學(xué),但只查找到杜欣笑一名同學(xué))。按(姓名、學(xué)號(hào)、房號(hào))排序和查找功能每個(gè)函數(shù)都寫(xiě)了一遍,很繁瑣6、 收獲與體會(huì)經(jīng)過(guò)這次課程設(shè)計(jì),

8、我收獲到到了很多東西,對(duì)C語(yǔ)言有了進(jìn)一步的了解和認(rèn)識(shí),不僅可以鞏固了以前所學(xué)過(guò)的知識(shí),而且學(xué)到了很多在書(shū)本上所沒(méi)有學(xué)到過(guò)的知識(shí)。通過(guò)這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來(lái),從理論中得出結(jié)論,才能提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力,在設(shè)計(jì)的過(guò)程中發(fā)現(xiàn)了自己的不足之處,對(duì)以前所學(xué)過(guò)的知識(shí)理解得不夠深刻,掌握得不夠牢固,通過(guò)這次課程設(shè)計(jì)之后,一定把以前所學(xué)過(guò)的知識(shí)重新溫故。通過(guò)本次數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì),我學(xué)到了很多,獨(dú)立的完成了作業(yè),我覺(jué)得很滿(mǎn)足,也很有成就感,現(xiàn)在知道并熟練的掌握了一些曾經(jīng)自己不知道的知識(shí)。例如: (1)sc

9、anf()和gets()輸入函數(shù)的不同之處,當(dāng)scanf()輸入字符串時(shí)不能帶空格,否則不能輸出后面的字符,而gets()能輸入帶空格的字符串。(2)知道了怎么能組裝好各個(gè)函數(shù)模塊,使它們實(shí)現(xiàn)各自的功能。附錄:采用順序線性表解決宿舍管理問(wèn)題#include<stdio.h>#include<stdlib.h>#include<string.h>#define N 40 /線性表存儲(chǔ)空間的初始分配量#define increase 10 /線性表存儲(chǔ)空間的分配量增量int f,t=0; /定義全局變量typedef struct char name20;int

10、 num; /學(xué)號(hào)和房號(hào)都為整型int room;stu;stu stud;typedef structint length; /當(dāng)前長(zhǎng)度stu *elem; /存儲(chǔ)空間基址int listsize; /當(dāng)前分配的存儲(chǔ)容量linklist; void init(linklist &l)/線性表初始化l.length=0;l.elem=(stu *)malloc(N*sizeof(stu );l.listsize=N;void menu()/操作菜單printf("n");printf(" *請(qǐng)按鍵選擇操作*n");printf("n&q

11、uot;);printf("n");printf(" 1 按姓名排序 2 按學(xué)號(hào)排序n");printf("n");printf(" 3 按房號(hào)排序 4 按姓名查找n");printf("n");printf(" 5 按學(xué)號(hào)查找 6 按房號(hào)查找n");printf("n");printf(" 7 按學(xué)號(hào)插入 8 按學(xué)號(hào)刪除n");printf("n");printf("n");printf(&qu

12、ot;n");printf("n");printf("提示:當(dāng)輸入的數(shù)字鍵為0時(shí),退出操作n");if(t=1)printf("請(qǐng)輸入數(shù)字鍵(18為操作鍵):");/18為有效數(shù)字操作鍵 scanf("%d",&f);if(f<0|f>9)system("cls"); printf("n");printf("輸入數(shù)字不對(duì),請(qǐng)?jiān)谠幹剌?n"); printf("n");menu();void disp()

13、/返回主界面char c;fflush(stdin);printf("n");printf("請(qǐng)按任意鍵進(jìn)入主界面:");scanf("%c",&c);system("cls");void panduan3() /如果已無(wú)學(xué)生記錄則返回主界面 printf("n");printf("已無(wú)學(xué)生記錄n");printf("n"); disp(); menu();void shuru(linklist l) /輸入學(xué)生的信息printf("請(qǐng)輸

14、入姓名:");fflush(stdin); / 清空輸入緩沖區(qū),得到正確的輸入數(shù)據(jù)gets(); /輸入一行字符串(姓名)printf("請(qǐng)輸入學(xué)號(hào):");scanf("%d",&stud.num);printf("請(qǐng)輸入房號(hào):");scanf("%d",&stud.room);void create(linklist &l)/創(chuàng)建學(xué)生信息表if(l.length>=l.listsize) /判斷學(xué)生的人數(shù)是否超過(guò)初值,如果超過(guò),則重新分配stu *newb

15、ase;newbase=(stu*)realloc(l.elem,(N+increase)*sizeof(stu );l.elem=newbase;l.listsize+=increase;int i=2;char ch;printf("n");printf(" *開(kāi)始創(chuàng)建線性表*n");printf("n");printf("請(qǐng)輸入第1個(gè)學(xué)生的信息n");shuru(l); /調(diào)用輸入函數(shù)ch=getchar();strcpy(,);l.eleml.leng

16、th.num=stud.num;l.eleml.length.room=stud.room;l.length+;printf("n");printf("是否繼續(xù)輸入?<y/n>:");scanf("%c",&ch);printf("n");printf("n");while(ch='y') printf("請(qǐng)輸入第%d個(gè)學(xué)生的信息n",i); shuru(l);strcpy(,);l.

17、eleml.length.num=stud.num;l.eleml.length.room=stud.room;l.length+;i+;ch=getchar(); printf("n");printf("是否繼續(xù)輸入?<y/n>:");scanf("%c",&ch);printf("n");printf("n"); if(ch='n') system("cls");void sort3(linklist &l)/按房號(hào)排序(采用冒

18、泡排序)int i,j;stu temp;for(i=0;i<l.length-1;i+)for(j=i+1;j<l.length;j+)if(l.elemi.room>l.elemj.room)temp=l.elemi;l.elemi=l.elemj;l.elemj=temp;void sort2(linklist &l)/按學(xué)號(hào)排序(采用冒泡排序)int i,j;stu temp;for(i=0;i<l.length-1;i+)for(j=i+1;j<l.length;j+)if(l.elemi.num>l.elemj.num)temp=l.el

19、emi;l.elemi=l.elemj;l.elemj=temp;void sort1(linklist &l)/按姓名排序(采用冒泡排序)int i,j;stu temp;for(i=0;i<l.length-1;i+)for(j=i+1;j<l.length;j+)if(strcmp(,)>0)temp=l.elemi;l.elemi=l.elemj;l.elemj=temp;void print1(linklist &l)/打印學(xué)生信息int i;printf("n");printf(&

20、quot;姓名 學(xué)號(hào) 房號(hào)n");printf("n");for(i=0;i<l.length;i+)printf("%-15s %-3d %5dn",,l.elemi.num,l.elemi.room);void print2(linklist &l,int mid) /打印查找到的學(xué)生信息 printf("查找成功->該學(xué)生信息為:n");printf("姓名 學(xué)號(hào) 房號(hào)n");printf("n");printf("%-15s

21、 %-5d %-5dn",,l.elemmid.num,l.elemmid.room);int panduan1(char ch) /判斷是否繼續(xù)查找scanf("%c",&ch);printf("是否繼續(xù)查找?<y/n>:"); fflush(stdin);scanf("%c",&ch);if(ch='y')system("cls");return(1); elsereturn 0;int panduan2(char ch) /如果

22、學(xué)生不存在,判斷是否繼續(xù)查找scanf("%c",&ch);printf("該學(xué)生不存在,是否繼續(xù)查找?<y/n>:"); fflush(stdin);scanf("%c",&ch);if(ch='y')system("cls");return(1); elsereturn 0;void chazhao3(linklist &l)/按房號(hào)從小到大查找(采用二分查找)if(l.length=0) panduan3(); /此函數(shù)功能為:返回主界面else int l

23、ow=0,high=l.length,mid,flag=0;/flag作為標(biāo)志符,為1則表示查找成功,否則沒(méi)有所要查找的學(xué)生int m;char ch;printf("n");printf("n");printf("按房號(hào)查找->請(qǐng)輸入要查找的房號(hào):");scanf("%d",&m);printf("n");while(low<=high) mid=(low+high)/2;if(m=l.elemmid.room)flag=1;break;else if(m>l.ele

24、mmid.room)low=mid+1;else high=mid-1;if(flag=1) print2(l,mid);if(panduan1(ch) /調(diào)用判斷函數(shù)1chazhao3(l);else system("cls");menu();else if(panduan2(ch) /調(diào)用判斷函數(shù)2chazhao3(l); else system("cls");menu();void chazhao2(linklist &l)/按學(xué)號(hào)從小到大查找(采用二分查找) if(l.length=0) panduan3();elseint low=0,

25、high=l.length,mid,flag=0;int n;char ch;printf("n");printf("n");printf("按學(xué)號(hào)查找->請(qǐng)輸入要查找的學(xué)號(hào):");scanf("%d",&n);printf("n");while(low<=high) mid=(low+high)/2;if(n=l.elemmid.num)flag=1;break;else if(n>l.elemmid.num)low=mid+1;else high=mid-1;if(

26、flag=1) print2(l,mid);if(panduan1(ch) chazhao2(l);else system("cls");menu();else if(panduan2(ch) chazhao2(l); else system("cls");menu(); void chazhao1(linklist &l)/按姓名從小到大查找(采用二分查找) if(l.length=0) panduan3();elseint low=0,high=l.length,mid,flag=0;printf("n");printf(

27、"n");printf("按姓名查找->請(qǐng)輸入要查找的姓名:");char a15,ch;scanf("%s",a);printf("n");while(low<=high) mid=(low+high)/2;if(strcmp(a,)=0)flag=1;break;else if(strcmp(a,)>0)low=mid+1;else high=mid-1;if(flag=1) print2(l,mid); /打印查找到的學(xué)生的信息if(p

28、anduan1(ch) chazhao1(l);else system("cls");menu();elseif(panduan2(ch)chazhao1(l);else system("cls");menu();void insert(linklist &l)/按學(xué)號(hào)從小到大插入該學(xué)生int i,j,k; char ch;printf("n");printf("插入的學(xué)生信息為:n");printf("姓名:");fflush(stdin);/ 清空輸入緩沖區(qū),得到正確的輸入數(shù)據(jù)get

29、s(); printf("學(xué)號(hào):");scanf("%d",&stud.num);printf("房號(hào):");scanf("%d",&stud.room);if(l.length=0)strcpy(,);l.eleml.length.num=stud.num;l.eleml.length.room=stud.room;for(i=0;i<l.length;i+) if(stud.num<l.elemi.num)k=

30、i;for(j=l.length;j>k;j-)l.elemj=l.elemj-1;strcpy(,);l.elemk.num=stud.num;l.elemk.room=stud.room;break;else strcpy(,);l.eleml.length.num=stud.num;l.eleml.length.room=stud.room;l.length+;fflush(stdin);printf("n");printf("是否繼續(xù)插入?<y/n

31、>:");scanf("%c",&ch);if(ch='y') insert(l);else system("cls");void Delete(linklist &l)/按學(xué)號(hào)刪除該學(xué)生int i,j,k=-1;char ch;printf("n");printf("n");printf("請(qǐng)輸入要?jiǎng)h除學(xué)生的學(xué)號(hào):");scanf("%d",&stud.num);for(i=0;i<l.length;i+)if(

32、stud.num=l.elemi.num)printf("該學(xué)生的信息為:n");printf("n");printf("%-15s %-3d %7dn",,l.elemi.num,l.elemi.room);k=i;for(j=k;j<l.length-1;j+)l.elemj=l.elemj+1;printf("n");break; if(i>=l.length) printf("該學(xué)生不存在n");if(k>=0)l.length-;fflush(

33、stdin);printf("n");printf("是否繼續(xù)刪除?<y/n>:");scanf("%c",&ch);system("cls");if(ch='y') Delete(l);else system("cls");void main() /主函數(shù)linklist l; /定義線性表 linit(l); /調(diào)用初始化函數(shù)char ch;system("color a");printf("n");printf(" *歡迎進(jìn)入宿舍管理查詢(xún)系統(tǒng)*n");printf("n");printf("請(qǐng)按任意鍵開(kāi)始操作:");scanf("%c",&ch);system("cls");/將屏幕先前顯示的內(nèi)容清理掉create(l); /調(diào)用線性表創(chuàng)建函數(shù)system("cls");t=1;menu(); /調(diào)用主菜單函數(shù)while(f!=0)system("cls");switch(f)case 1: sort1(l)

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論