數(shù)據(jù)結構課程設計——宿舍管理查詢軟件_第1頁
數(shù)據(jù)結構課程設計——宿舍管理查詢軟件_第2頁
數(shù)據(jù)結構課程設計——宿舍管理查詢軟件_第3頁
數(shù)據(jù)結構課程設計——宿舍管理查詢軟件_第4頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、數(shù)據(jù)結構課程設計宿舍管理查詢軟件班級學號班學生姓名提交日期2015年 7月 24日成績計算機與通信工程學院一、需求分析1、程序設計任務為宿舍管理人員編寫一個宿舍管理查詢軟件。 程序設計要求:A. 采用交互工作方式B. 建立數(shù)據(jù)文件,數(shù)據(jù)文件按關鍵字(姓名、學號、房號)進行排序(冒泡、選擇、插入排序等任選一種) 查詢菜單 : (用二分查找實現(xiàn)以下操作)A. 按姓名查詢B. 按學號查詢C. 按房號查詢 打印任一查詢結果(可以連續(xù)操作)2、功能要實現(xiàn)交互工作方式,各項操作結束后均應返回主菜單;系統(tǒng)本無任何信息數(shù)據(jù), 要建立數(shù)據(jù)文件, 需開發(fā)一個信息錄入功能, 即首先創(chuàng)建一個學員線性表,同時我們可以將

2、數(shù)據(jù)暫時保存在內存中,所以我們未開發(fā)信息存盤功能;信息錄入后都保存在內存中, 用戶看不到, 需要設計一個信息顯示功能, 信息的顯示應該便于查閱,所以需具備按各種關鍵字顯示的功能;本系統(tǒng)按關鍵字(姓名、學號、房號)進行冒泡排序,采用二分查找方式分別實現(xiàn)按關鍵字(姓名、學號、房號)查詢功能;由于有些同學因為不同原因而離校,所以設計了刪除功能;由于有新同學入校,所以設計了插入功能;當用戶操作完畢需要退出時,我們提供了退出選項,便于使用者退出交互式工作系統(tǒng)。3、功能模塊圖4、流程圖5、輸入和輸出輸入的形式1)開始創(chuàng)建線性表:按先后順序輸入姓名( 20 個字以內),學號(整型),房號(整型)。2)根據(jù)用

3、戶所選擇的操作鍵,然后再根據(jù)程序的相應提示進行輸入。選擇操作鍵1(按姓名排序) :無輸入;選擇操作鍵2(按學號排序) :無輸入;選擇操作鍵3(按房號排序):無輸入;選擇操作鍵4(按姓名查找) :輸入要查找的姓名;選擇操作鍵5(按學號查找) :輸入要查找的學號;選擇操作鍵6(按房號查找) :輸入要查找的房號;選擇操作鍵 7(按學號插入) :按照提示順序輸入要插入的學生姓名,學號,房號;選擇操作鍵 8(按學號刪除) :輸入要刪除學生的學號。輸出的形式及范圍根據(jù)用戶選擇的不同,會有不同的輸出。選擇操作鍵 1(按姓名排序) :輸出以姓名首字母排序的所有學生信息;選擇操作鍵 2(按學號排序) :輸出按學

4、號從小到大排列的所有學生信息;選擇操作鍵 3(按房號排序 ):輸出按房號從小到大排列的所有學生信息;選擇操作鍵 4(按姓名查找) :若查找成功,則輸出相應學生信息,若不成功,則輸出該學生不存在;選擇操作鍵 5(按學號查找) :若查找成功,則輸出相應學生信息,若不成功,則輸出該學生不存在;選擇操作鍵 6(按房號查找) :若查找成功,則輸出相應學生信息,若不成功,則輸出該學生不存在。選擇操作鍵7(按學號插入) :輸出插入后的所有學生信息;選擇操作鍵 8(按學號刪除) :輸出所需刪除的學生信息,確認刪除后,輸出刪除后的所有學生信息。6、測試數(shù)據(jù)開始錄入的數(shù)據(jù):姓名學號房號劉備1102孫權6231周瑜

5、3124正確輸入:查找的數(shù)據(jù):6(按學號)正確輸出:孫權6231二、 詳細設計1、數(shù)據(jù)結構typedef struct/定義結構體成員char name20;int num;/學號和房號都為整型int room;stu;stu stud;typedef structint length;stu *elem;int listsize;/當前長度存儲空間基址當前分配的存儲容量linklist;2、數(shù)據(jù)int f;f 為全局變量,指選擇的操作鍵數(shù)char name20;name 為姓名int num ;num 為學號int room;room 為房號int length;length為線性表的當前長

6、度stu *elem;elem 指示線性表的基地址int listsize;listsize為當前分配的存儲容量char c ;c 為進入主界面的任意鍵char ch;ch為判斷字符y 或 nint i,j;在冒泡排序中,int i;i為外層循環(huán)次數(shù),j為內層循環(huán)次數(shù)在打印學生信息時,i 作為循環(huán)變量int m;int n;int a;m,n,a 在二分查找中分別代表房號,學號,姓名int i,j,k;i,j,k在按學號插入中作為循環(huán)變量int i,j,k=-1;i,j,k在按學號刪除中作為循環(huán)變量3、函數(shù)調用具體函數(shù)如下:void init(linklist &l):用于線性表初始化

7、,通過調用C語言文件操作函數(shù)來實現(xiàn)。void create(linklist &l):用于創(chuàng)建學生信息表,通過線性表來實現(xiàn)。void sort3(linklist &l):用于按房號排序,通過采用冒泡排序的算法來實現(xiàn)。void sort2(linklist &l):用于按學號排序,通過采用冒泡排序的算法來實現(xiàn)。void sort1(linklist &l):用于按姓名排序,通過采用冒泡排序的算法來實現(xiàn)。void chazhao3(linklist&l) :用于按房號從小到大查找,通過采用二分查找的算法來實現(xiàn)。void chazhao2(linklist&

8、amp;l) :用于按學號從小到大查找,通過采用二分查找的算法來實現(xiàn)。void chazhao1(linklist&l) :用于按姓名從小到大查找,通過采用二分查找的算法來實現(xiàn)。void print1(linklist &l)void print2(linklist &l,int mid):用于打印學生信息,通過調用文件操作函數(shù)實現(xiàn)。:用于打印查找到的學生信息,通過調用文件查找函數(shù)實現(xiàn)。int panduan2(char ch):用于如果學生不存在, 判斷是否繼續(xù)查找,通過if語句,文件操作函數(shù)實現(xiàn)void panduan3() :用于如果已無學生記錄則返回主界面,通過

9、調用其他函數(shù)和文件操作函數(shù)實現(xiàn)。void disp()void menu():void main():用于返回主界面,通過調用menu() 函數(shù)實現(xiàn)。用于列出操作菜單,通過輸入輸出語句實現(xiàn)。:程序操作的入口,是程序的主函數(shù),可以按照已定義的函數(shù)調用子函數(shù)。4、主程序:int main()/主函數(shù)linklist l;init(l);/定義線性表l調用初始化函數(shù)char ch;system("color a");printf("n");printf("*歡 迎進 入宿舍 管理 查詢系統(tǒng)*n");printf("n")

10、;printf("請按任意鍵開始操作:");scanf("%c",&ch);system("cls");/將屏幕先前顯示的內容清理掉create(l);/調用線性表創(chuàng)建函數(shù)system("cls");t=1;menu();/調用主菜單函數(shù)while(f!=0)system("cls");switch(f)case 1: sort1(l);/調用按姓名排序函數(shù)printf("n");if(l.length=0)printf("已無學生記錄n");pr

11、intf("n");disp();menu();elseprintf("按姓名排序 :n");print1(l);disp();/調用返回主界面menu();break;case 2: sort2(l);/調用按學號排序函數(shù)printf("n");if(l.length=0)printf("已無學生記錄n");printf("n");disp();menu();elseprintf("按學號排序 :n");print1(l);disp();menu();break;case

12、3: sort3(l);/printf("n");if(l.length=0)調用按房號排序函數(shù)printf("已無學生記錄n");printf("n");disp();menu();elseprintf("按房號排序 :n");print1(l);disp();menu();break;case 4:sort1(l);/chazhao1(l);/break;case 5: sort2(l);/chazhao2(l);break;case 6: sort3(l);/chazhao3(l);/先調用按姓名排序函數(shù)進行

13、排序再調用按姓名查找函數(shù)進行(二分)查找先調用按學號排序函數(shù)進行排序再調用按學號查找函數(shù)進行(二分)查找先調用按房號排序函數(shù)進行排序再調用按房號查找函數(shù)進行(二分)查找break;case 7: sort2(l);/insert(l);system("cls");調用插入函數(shù)printf("顯示插入后的學生信息:n");print1(l);disp();menu();break;case 8: Delete(l);/調用刪除函數(shù)if(l.length=0)printf("n");printf("學生記錄已被刪除完n"

14、;);printf("n");disp();menu();elseprintf("顯示刪除后的學生信息:n");print1(l);disp();menu();break;三、調試分析為了避免繁瑣、改進算法, 在一些函數(shù)中調用了其它的函數(shù)。如:在按(姓名、 學號、房號)查找中都調用了panduan1(ch)和 panduan2(ch) 函數(shù)。在插入和刪除模塊中,顯示學生的信息的下面總是有主界面,經(jīng)過調試,運用system("cls")函數(shù)清屏后,顯示的只有學生的信息了,再按鍵即可返回主界面。本程序多次運用了disp()、 menu()

15、 、system("cls")、fflush(stdin)等函數(shù),經(jīng)過多次調試,已經(jīng)很好的控制了顯示的學生信息與主界面的轉換。通過本次課程設計,對線性表、冒泡排序、二分查找的應用有了更深入的了解。四、用戶手冊首先,運行程序進入 “歡迎進入宿舍管理查詢系統(tǒng)”界面,然后進入線性表創(chuàng)建界面中,輸入學生的信息,創(chuàng)建好學生信息以后單擊任意鍵則進入操作界面(主界面),然后可按鍵進行操作。單擊數(shù)字鍵“單擊數(shù)字鍵“單擊數(shù)字鍵“單擊數(shù)字鍵“1”,則為按姓名排序3”,則為按房號排序5”,則為按學號查找7”,則為按學號插入單擊數(shù)字鍵“單擊數(shù)字鍵“單擊數(shù)字鍵“單擊數(shù)字鍵“2”,則為按學號排序4”,

16、則為按姓名查找6”,則為按學號查找8”,則為按學號刪除系統(tǒng)中有如下關鍵詞:提示:當輸入的數(shù)字鍵為0 時,退出操作;請輸入數(shù)字鍵(18 為操作鍵 ) ;請按任意鍵進入主界面。五、測試結果(1)歡迎界面(2) 按任意鍵進入線性表的創(chuàng)建界面,并輸入數(shù)據(jù),開始創(chuàng)建(3)按操作鍵選擇操作(4)按姓名排序(5)按學號排序(6)按房號排序(7)按姓名查找(8)按學號查找(9)按房號查找(10)按學號插入(11)按學號刪除六、附錄源程序:/采用順序線性表解決宿舍管理問題(C 語言 )#include<stdio.h>#include<stdlib.h>#include<strin

17、g.h>#define N 40 / 線性表存儲空間的初始分配量 #define increase 10 / 線性表存儲空間的分配量增量 int f,t=0; /定義全局變量 typedef structchar name20;int num; / 學號和房號都為整型 int room;stu;stu stud;typedef structint length; / 當前長度stu *elem;/存儲空間基址int listsize;/當前分配的存儲容量linklist;void init(linklist &l)/線性表初始化l.length=0;l.elem=(stu *)m

18、alloc(N*sizeof(stu );l.listsize=N;void menu()/ 操作菜單printf("n");printf("*請按鍵選擇操作printf("n");printf("n");printf("1按姓名排序printf("n");printf("3按房號排序*n");2 按學號排序 n");4 按姓名查找 n");printf("n");printf("5按學號查找6按房號查找 n");p

19、rintf("n");printf("7按學號插入8按學號刪除 n");printf("n");printf("n");printf("n");printf("n");printf(" 提示 :當輸入的數(shù)字鍵為0 時,退出操作 n");if(t=1)printf(" 請輸入數(shù)字鍵(18 為操作鍵 ):");/18 為有效數(shù)字操作鍵scanf("%d",&f);if(f<0|f>9)system(&

20、quot;cls");printf("n");printf(" 輸入數(shù)字不對 ,請在原處重輸!n");printf("n");menu();void disp()/返回主界面char c;fflush(stdin);printf("n");printf(" 請按任意鍵進入主界面:");scanf("%c",&c);system("cls");void panduan3()/ 如果已無學生記錄則返回主界面printf("n&quo

21、t;);printf(" 已無學生記錄n");printf("n");disp();menu();void shuru(linklist l)/輸入學生的信息printf(" 請輸入姓名fflush(stdin);gets();:");/ 清空輸入緩沖區(qū),得到正確的輸入數(shù)據(jù)/ 輸入一行字符串(姓名)printf(" 請輸入學號 :");scanf("%d",&stud.num);printf(" 請輸入房號 :");scanf("%d&qu

22、ot;,&stud.room);void create(linklist &l)/創(chuàng)建學生信息表if(l.length>=l.listsize)/判斷學生的人數(shù)是否超過初值,如果超過,則重新分配stu *newbase;newbase=(stu*)realloc(l.elem,(N+increase)*sizeof(stu );l.elem=newbase;l.listsize+=increase;int i=2;char ch;printf("n");printf(" *開始創(chuàng)建線性表*n");printf("n&quo

23、t;);printf(" 請輸入第1 個學生的信息 n");shuru(l);/調用輸入函數(shù)ch=getchar();strcpy(,);l.eleml.length.num=stud.num;l.eleml.length.room=stud.room;l.length+;printf("n");printf(" 是否繼續(xù)輸入?<y/n>:");scanf("%c",&ch);printf("n");printf(&qu

24、ot;n");while(ch='y')printf(" 請輸入第 %d 個學生的信息n",i);shuru(l);strcpy(,);l.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);pri

25、ntf("n");printf("n");if(ch='n') system("cls");void sort3(linklist &l)/按房號排序(采用冒泡排序)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)/按學

26、號排序(采用冒泡排序)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.elemi;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(,l.elemj.nam

27、e)>0)temp=l.elemi;l.elemi=l.elemj;l.elemj=temp;void print1(linklist &l)/打印學生信息int i;printf("n");printf(" 姓名學號房號 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)

28、/打印查找到的學生信息printf(" 查找成功 -> 該學生信息為 :n");printf(" 姓名學號房號 n");printf("n");printf("%-15s %-5d %-5dn",,l.elemmid.num,l.elemmid.room);int panduan1(char ch)/判斷是否繼續(xù)查找scanf("%c",&ch);printf(" 是否繼續(xù)查找?<y/n>:");fflush(stdin)

29、;scanf("%c",&ch);if(ch='y')system("cls");return(1);elsereturn 0;int panduan2(char ch)/如果學生不存在,判斷是否繼續(xù)查找scanf("%c",&ch);printf(" 該學生不存在,是否繼續(xù)查找?<y/n>:");fflush(stdin);scanf("%c",&ch);if(ch='y')system("cls");re

30、turn(1);elsereturn 0;void chazhao3(linklist &l)/按房號從小到大查找(采用二分查找)if(l.length=0) panduan3();/此函數(shù)功能為:返回主界面elseint low=0,high=l.length,mid,flag=0;/flag 作為標志符, 為 1 則表示查找成功, 否則沒有所要查找的學生int m;char ch;printf("n");printf("n");printf(" 按房號查找 -> 請輸入要查找的房號:");scanf("%d

31、",&m);printf("n");while(low<=high)mid=(low+high)/2;if(m=l.elemmid.room)flag=1;break;else if(m>l.elemmid.room)low=mid+1;elsehigh=mid-1;if(flag=1)print2(l,mid);if(panduan1(ch)/ 調用判斷函數(shù)1chazhao3(l);elsesystem("cls");menu();elseif(panduan2(ch)/調用判斷函數(shù)2chazhao3(l);elsesys

32、tem("cls");menu();void chazhao2(linklist &l)/按學號從小到大查找(采用二分查找)if(l.length=0) panduan3();elseint low=0,high=l.length,mid,flag=0;int n;char ch;printf("n");printf("n");printf(" 按學號查找 -> 請輸入要查找的學號:");scanf("%d",&n);printf("n");while(

33、low<=high)mid=(low+high)/2;if(n=l.elemmid.num)flag=1;break;else if(n>l.elemmid.num)low=mid+1;elsehigh=mid-1;if(flag=1)print2(l,mid);if(panduan1(ch)chazhao2(l);elsesystem("cls");menu();elseif(panduan2(ch)chazhao2(l);elsesystem("cls");menu();void chazhao1(linklist &l)/按姓名

34、從小到大查找(采用二分查找)if(l.length=0) panduan3();elseint low=0,high=l.length,mid,flag=0;printf("n");printf("n");printf(" 按姓名查找 -> 請輸入要查找的姓名:");char a15,ch;scanf("%s",a);printf("n");while(low<=high)mid=(low+high)/2;if(strcmp(a,)=0)flag=1;br

35、eak;else if(strcmp(a,)>0)low=mid+1;elsehigh=mid-1;if(flag=1)print2(l,mid);/打印查找到的學生的信息if(panduan1(ch) chazhao1(l);elsesystem("cls");menu();elseif(panduan2(ch)chazhao1(l);elsesystem("cls");menu();void insert(linklist &l)/按學號從小到大插入該學生int i,j,k;char ch;printf(&q

36、uot;n");printf(" 插入的學生信息為:n");printf(" 姓名 :");fflush(stdin);/清空輸入緩沖區(qū),得到正確的輸入數(shù)據(jù)gets();printf(" 學號 :");scanf("%d",&stud.num);printf(" 房號 :");scanf("%d",&stud.room);if(l.length=0)strcpy(,);l.el

37、eml.length.num=stud.num;l.eleml.length.room=stud.room;for(i=0;i<l.length;i+)if(stud.num<l.elemi.num)k=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;elsestrcpy(,);l.eleml.length.num=stud.

38、num;l.eleml.length.room=stud.room;l.length+;fflush(stdin);printf("n");printf(" 是否繼續(xù)插入?<y/n>:");scanf("%c",&ch);if(ch='y') insert(l);else system("cls");void Delete(linklist &l)/按學號刪除該學生int i,j,k=-1;char ch;printf("n");printf(&quo

39、t;n");printf(" 請輸入要刪除學生的學號:");scanf("%d",&stud.num);for(i=0;i<l.length;i+)if(stud.num=l.elemi.num)printf(" 該學生的信息為: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.el

40、emj+1;printf("n");break;if(i>=l.length) printf("該學生不存在n");if(k>=0)l.length-;fflush(stdin);printf("n");printf(" 是否繼續(xù)刪除?<y/n>:");scanf("%c",&ch);system("cls");if(ch='y') Delete(l);else system("cls");int main()/主函數(shù)linklist l;/定義線性表linit(l);/ 調用初始化函數(shù)char ch;system("color a");printf("n");printf("*歡迎進入宿舍管理查詢系統(tǒng)*n");printf("n");printf(" 請按任意鍵開始操作:");scanf("%c",&ch);sys

溫馨提示

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

評論

0/150

提交評論