版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
宿舍管理系統(tǒng)源代碼源程序代碼:#include<stdio.h>#include<string.h>#include<stdlib.h>#defineM100intdirty=0;//用來判斷是否已保存操作//定義一個存儲學(xué)生相關(guān)信息的結(jié)構(gòu)體typedefstruct{charS_name[31];//學(xué)生姓名charS_number[16];//學(xué)生學(xué)號intD_number;//學(xué)生所在寢室的宿舍號intTotal;//學(xué)生總數(shù)}Student[M],St;//判斷學(xué)號是否與表中所存學(xué)號重復(fù)voidS_number_Judge(StudentS,intt){inti;for(i=1;i<=(S->Total)-1;i++)while(strcmp(S[i].S_number,S[t].S_number)==0){printf("學(xué)號輸入失敗,該學(xué)號已存在,請重新輸入學(xué)號!\n");printf("請輸入學(xué)生的學(xué)號(15個字符以內(nèi)):");scanf("%s",S[t].S_number);getchar();i=1;}}//添加學(xué)生信息函數(shù)voidAdd(StudentS){printf("請輸入學(xué)生姓名(30個字符以內(nèi)):");scanf("%s",S[++(S->Total)].S_name);getchar();//獲取換行符printf("請輸入學(xué)生的學(xué)號(15個字符以內(nèi)):");scanf("%s",S[S->Total].S_number);getchar();S_number_Judge(S,S->Total);//判斷輸入的學(xué)號是否與表中所存在的學(xué)號重復(fù)printf("請輸入宿舍號碼:");scanf("%d",&S[S->Total].D_number);getchar();dirty=1;printf("添加成功!\n\n");}//修改學(xué)生信息函數(shù)voidAlter(StudentS){inti;intflag=0;//用來判斷表中是否存在所要修改的學(xué)生的信息charname[20];printf("請輸入你要修改學(xué)生的姓名:");scanf("%s",name);getchar();for(i=1;i<=S->Total;i++)if(strcmp(S[i].S_name,name)==0)flag=i;if(!flag)printf("你所要修改的學(xué)生信息在表中不存在!\n");elseprintf("新信息如下:\n");printf("請輸入學(xué)生姓名(30個字符以內(nèi)):");scanf("%s",S[flag].S_name);getchar();printf("請輸入學(xué)生的學(xué)號(15個字符以內(nèi)):");scanf("%s",S[flag].S_number);getchar();S_number_Judge(S,flag);scanf("%d",&S[flag].D_number);getchar();dirty=1;printf("修改成功!\n");}putchar('\n');}//刪除學(xué)生信息voidDelete(StudentS){inti,j;intflag=0;//用來判斷表中是否存在所要刪除的學(xué)生的信息charname[20];printf("請輸入你要刪除學(xué)生的姓名:");scanf("%s",name);getchar();for(i=1;i<=S->Total;i++)if(strcmp(S[i].S_name,name)==0)flag=i;if(!flag)printf(〃你所要刪除的學(xué)生在表中不存在!〃);else{for(i=flag;i<S->Total;i++){j=i+1;strcpy(S[i].S_name,S[j].S_name);strcpy(S[i].S_number,S[j].S_number);S[i].D_number=S[j].D_number;}(S->Total)--;dirty=1;printf("刪除成功!");}printf("\n\n");}//顯示所有學(xué)生信息函數(shù)voidDisplay_All(StudentS){inti;printf(“全體學(xué)生信息如下:\n");printf(〃學(xué)生姓名學(xué)生學(xué)號宿舍號\n");for(i=1;i<=S->Total;i++)printf(〃%-20s%-15s%-5d\n〃,S[i].S_name,S[i].S_number,S[i].D_number);putchar('\n\n');}//排序函數(shù)按照寢室號從小到大排序(冒泡法)voidSort_D_number(StudentS){inti,j,t;charname[30];charnumber[15];for(i=1;i<=S->Total;i++)for(j=i;j<=S->Total;j++)if(S[i].D_number>S[j].D_number){strcpy(name,S[i].S_name);strcpy(number,S[i].S_number);t=S[i].D_number;strcpy(S[i].S_name,S[j].S_name);strcpy(S[i].S_number,S[j].S_number);S[i].D_number=S[j].D_number;strcpy(S[j].S_name,name);strcpy(S[j].S_number,number);S[j].D_number=t;}}//排序函數(shù)按照學(xué)號從小到大排序(冒泡法)voidSort_S_number(StudentS){inti,j,t;charname[30];charnumber[15];for(i=1;i<=S->Total;i++)for(j=i;j<=S->Total;j++)if(strcmp(S[i].S_number,S[j].S_number)>0){strcpy(name,S[i].S_name);strcpy(number,S[i].S_number);t=S[i].D_number;strcpy(S[i].S_name,S[j].S_name);strcpy(S[i].S_number,S[j].S_number);S[i].D_number=S[j].D_number;strcpy(S[j].S_name,name);strcpy(S[j].S_number,number);S[j].D_number=t;}}//查詢函數(shù)以姓名為關(guān)鍵字進(jìn)行查詢(順序查找)voidQuery_S_name(StudentS){inti,j=0;charname[31];printf("請輸入你要查找的學(xué)生的姓名(30個字符以內(nèi)):");scanf("%s",name);getchar();printf(“所查找學(xué)生信息如下:\n");printf(〃學(xué)生姓名學(xué)生學(xué)號宿舍號\n〃);for(i=1;i<=S->Total;i++)if(strcmp(name,S[i].S_name)==0){printf("%-20s%-15s%-5d\n",S[i].S_name,S[i].S_number,S[i].D_numberprintf("%-20s%-15s%-5d\n",S[i].S_name,S[i].S_number,S[i].D_number);j=1;}if(!j)printf("\n查找失敗,表中不存在該學(xué)生的信息!\n\n");}//查詢函數(shù)以學(xué)號為關(guān)鍵字進(jìn)行查詢(折半查找)voidQuery_S_number(StudentS){inti,j,top,base,mid;charnumber[15];j=0;base=1;top=S->Total;printf("請輸入你要查找學(xué)生的學(xué)號:");scanf("%s",number);getchar();Sort_S_number(S);//將表中原數(shù)據(jù)按照學(xué)號從小到大排序printf(“所查找學(xué)生信息如下:\n");printf(〃學(xué)生姓名學(xué)生學(xué)號宿舍號\n");if(strcmp(number,S[1].S_number)>=0&&strcmp(number,S[S->Total].S_number)<=0)while(base<=top){mid=(base+top)/2;if(strcmp(number,S[mid].S_number)==0){printf("%-20s%-15s%-5d\n",S[i].S_name,S[i].S_number,S[i].D_number);putchar('\n');j=1;break;}elseif(strcmp(number,S[mid].S_number)>0)base=mid+1;elsetop=mid-1;}}if(!j)printf("\n查找失敗,表中不存在該學(xué)生的信息!\n\n");}//查詢函數(shù)以寢室號為關(guān)鍵字進(jìn)行查詢(折半查找)voidQuery_D_number(StudentS){inti,j,m,n,base,top,mid;j=0;base=1;top=S->Total;printf("請輸入你要查詢的寢室號:");scanf("%d",&i);getchar();Sort_D_number(S);//將表中原數(shù)據(jù)按照寢室號從小到大排序printf("所查找寢室信息如下:\n");printf(〃學(xué)生姓名學(xué)生學(xué)號宿舍號\n〃);if(i>=S[1].D_number&&i<=S[S->Total].D_number){while(base<=top){mid=(base+top)/2;if(i==S[mid].D_number){m=mid;n=mid-1;while(S[m].D_number==i){printf(〃%-20s%-15s%-5d\n〃,S[m].S_name,S[m].S_number,S[m].D_number);m++;if(m>S->Total)break;}if(n>0){while(S[n].D_number==i){printf("%-20s%-15s%-5d\n",S[n].S_name,S[n].S_number,S[n].D_number);n--;if(n<1)break;}}j=1;putchar('\n');break;}elseif(i>S[mid].D_number)base=mid+1;elsetop=mid-1;}}if(!j)printf("\n查找失敗,表中不存在該寢室的信息!\n\n");}//存儲函數(shù)voidSave(StudentS){StStd;inti;intflag1=0,flag2=0;//判斷存儲是否成功FILE*fp;if((fp=fopen("Dorm_Manage","w"))==NULL){printf("打開文件失敗!\n\n");flag1=1;exit(0);//結(jié)束程序}for(i=1;i<=S->Total;i++)if(fwrite(&S[i],sizeof(Std),1,fp)!=1){printf("數(shù)據(jù)寫入錯誤\n\n");flag2=1;exit(0);}if(!flag1&&!flag2){printf("數(shù)據(jù)存儲成功!\n\n");dirty=0;}fclose(fp);}//加載記錄函數(shù)voidLoad(StudentS){StStd;FILE*fp;if((fp=fopen("Dorm_Manage","r"))==NULL){printf("打開文件失敗!\n\n");exit(0);}while(!feof(fp))fread(&S[++(S->Total)],sizeof(Std),1,fp);fclose(fp);printf("加載數(shù)據(jù)成功!\n\n");(S->Total)--;//由于讀取問題,表中個數(shù)要減去}//退出程序時判斷是否保存函數(shù)voidJudge_Save(inti,StudentS){charch;if(i){printf(〃表中數(shù)據(jù)已改變,是否保存后再退出(Y/N)?:〃);ch=getchar();getchar();while(ch!='n'&&ch!='N'&&ch!='y'&&ch!='Y'){printf(〃請輸入N(n)或者Y(y):");ch=getchar();getchar();}if(ch=='y'||ch=='Y')Save(S);}}//菜單voidMenu(){//菜單printf(〃宿舍管理系統(tǒng)\n\n〃);printf(〃*************************************菜*************************************\n〃);printf(〃l.添加學(xué)生信息|7.按照寢室號從小到大排序\n");printf("2.修改學(xué)生信息|8.按照學(xué)號從小到大排序\n");printf("3.刪除學(xué)生信息|9?顯示所有學(xué)生的相關(guān)信息\n");printf("4.以姓名查詢學(xué)生信息|10.保存操作\n");printf("5.以學(xué)號查詢學(xué)生信息|11.加載記錄\n");printf("6.以寢室號查詢該寢室中的全部學(xué)生信息丨12.退出程序\n");printf("***************************
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年人教版選修6地理下冊階段測試試卷含答案
- 2024版年度廣告制作與發(fā)布合同3篇
- 2024年珠海城市職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測驗(yàn)歷年參考題庫(頻考版)含答案解析
- 二零二五年度高端酒店管理雇員勞動合同書3篇
- 2024年韶關(guān)市粵北人民醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點(diǎn)附帶答案
- 2024童鞋新品研發(fā)與市場銷售合作框架協(xié)議6篇
- 路面改造施工方案
- 2025年度行政合同主體權(quán)益保障與糾紛預(yù)防協(xié)議3篇
- 2024旅行社自駕租車服務(wù)協(xié)議書范本下載3篇
- 二零二五版中菲韓三國海洋漁業(yè)合作協(xié)議書3篇
- 英語閱讀理解專項(xiàng)練習(xí)(40篇)
- TD-T 1046-2016 土地整治權(quán)屬調(diào)整規(guī)范
- 高陽小學(xué)2022-2023學(xué)年校內(nèi)人車分流方案
- 一種基于STM32的智能門鎖系統(tǒng)的設(shè)計(jì)
- 《諫太宗十思疏》《答司馬諫議書》-統(tǒng)編版高中語文必修下冊
- 02R112 拱頂油罐圖集
- GB/T 42249-2022礦產(chǎn)資源綜合利用技術(shù)指標(biāo)及其計(jì)算方法
- 扶梯吊裝方案
- GB/T 26846-2011電動自行車用電機(jī)和控制器的引出線及接插件
- GB/T 18015.1-1999數(shù)字通信用對絞或星絞多芯對稱電纜第1部分:總規(guī)范
- 2020-2021學(xué)年青島版五年級上冊期末考試數(shù)學(xué)試卷(1)1
評論
0/150
提交評論