您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)如何使用C++實(shí)現(xiàn)學(xué)生宿舍管理系統(tǒng)的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
具體內(nèi)容如下
非常簡(jiǎn)易,完成個(gè)作業(yè)夠用,僅供初學(xué)者參考,不喜勿噴。
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<malloc.h> /*先用結(jié)構(gòu)體定義學(xué)生信息*/ struct stud { int num; //學(xué)號(hào) char name[10]; //姓名 char sex[8]; //性別 int age; //年齡 char major[18]; //專業(yè) int grade; //年級(jí) int classes; //班級(jí) int building; //樓號(hào) int floor; //樓層 int dormitary; //宿舍號(hào) struct stud *next; /*next是指向本結(jié)構(gòu)體的類型的指針類型*/ }; struct stud *h; /*定義結(jié)構(gòu)體的指針變量*/ int N=sizeof(struct stud);//獲取結(jié)構(gòu)體總長(zhǎng)度,用于分配內(nèi)存空間 /*輸入模塊: 建立鏈表*/ void input_message() { struct stud *p1,*p2; int i,k; system("cls"); printf("********** 您當(dāng)前正在進(jìn)行的操作是,輸入學(xué)生信息 **********\n\n"); printf("請(qǐng)輸入本次注冊(cè)的生總數(shù):");scanf("%d",&k); h=NULL; printf("\n您共有%d個(gè)學(xué)生信息需要錄入\n",k); if(k>0) { h=p2=p1=(struct stud*)malloc(N); /*為head,p2,p1申請(qǐng)存儲(chǔ)空間*/ for(i=1;i<=k;i++) { printf("\n請(qǐng)輸入第%d名學(xué)生的信息:\n\n",i); p1=(struct stud*)malloc(N); printf("學(xué)號(hào):"); scanf("%d",&p1->num); printf("姓名:"); scanf("%s",p1->name); printf("性別(男或女):"); scanf("%s",p1->sex); printf("年齡:"); scanf("%d",&p1->age); printf("專業(yè):"); scanf("%s",p1->major); printf("年級(jí):"); scanf("%d",&p1->grade); printf("班級(jí):"); scanf("%d",&p1->classes); printf("樓號(hào):"); scanf("%d",&p1->building); printf("樓層:"); scanf("%d",&p1->floor); printf("宿舍號(hào):"); scanf("%d",&p1->dormitary); p2->next=p1; /*將新結(jié)點(diǎn)連到表尾*/ p2=p1; /*p2指向新的表尾*/ } p2->next=NULL; h=h->next; } getchar();//吸收掉上一行錄入時(shí)鍵入的回車符號(hào),否則卡不住 printf("\n%*s%s\n",10," ","輸入完成,按任意鍵進(jìn)入主菜單!!!!"); getchar(); } /*輸出模塊:顯示鏈表*/ void output_message() { char v; struct stud *p=h; system("cls"); printf("********** 您當(dāng)前正在進(jìn)行的操作是,顯示學(xué)生信息 **********\n\n"); if(p==NULL) { printf("%*s%s\n",10," ","當(dāng)前沒有找到任何學(xué)生信息,請(qǐng)您先輸入信息,再執(zhí)行本操作!\n"); getchar();//吸收掉上一行錄入時(shí)鍵入的回車符號(hào),否則卡不住 printf("%*s%s\n",10," ","按任意鍵返回主菜單!!!!"); getchar(); return; } printf(" 學(xué)號(hào) 姓名 性別 年齡 專業(yè) 年級(jí) 班級(jí) 樓號(hào) 樓層 宿舍號(hào)\n\n"); while(p!=NULL) { printf("%6d%10s%6s%6d%10s%6d%6d%6d%6d%8d\n",p->num,p->name,p->sex,p->age,p->major,p->grade,p->classes,p->building,p->floor,p->dormitary); p=p->next; } getchar();//吸收掉上一行錄入時(shí)鍵入的回車符號(hào),否則卡不住 printf("\n%*s%s\n",10," ","輸出完成,按任意鍵返回主菜單!!!!"); getchar(); } /*插入新學(xué)生信息:插入鏈表*/ void insert_message() { struct stud *p0,*p1; p1=(struct stud *)malloc(N); system("cls"); printf("********** 您當(dāng)前正在進(jìn)行的操作是,插入學(xué)生信息 **********\n\n"); printf("\n請(qǐng)輸入要插入學(xué)生的信息:\n\n"); p1=(struct stud*)malloc(N); printf("學(xué)號(hào):"); scanf("%d",&p1->num); printf("姓名:"); scanf("%s",p1->name); printf("性別(男或女):"); scanf("%s",p1->sex); printf("年齡:"); scanf("%d",&p1->age); printf("專業(yè):"); scanf("%s",p1->major); printf("年級(jí):"); scanf("%d",&p1->grade); printf("班級(jí):"); scanf("%d",&p1->classes); printf("樓號(hào):"); scanf("%d",&p1->building); printf("樓層:"); scanf("%d",&p1->floor); printf("宿舍號(hào):"); scanf("%d",&p1->dormitary); p1->next=NULL; if(h==NULL)//如果鏈表為空,插入的節(jié)點(diǎn)設(shè)為表頭 { h=p1; getchar();//吸收掉上一行錄入時(shí)鍵入的回車符號(hào),否則卡不住 printf("\n%*s%s\n",10," ","插入成功! 按任意鍵返回主菜單!!!!"); getchar(); return; } p0=h; while((p0->next)!=NULL&&(p0->next->num)<(p1->num)) { p0=p0->next; } if(p0->next==NULL) { p0->next=p1; //如果到尾部了加到尾部 getchar();//吸收掉上一行錄入時(shí)鍵入的回車符號(hào),否則卡不住 printf("\n%*s%s\n",10," ","插入成功! 按任意鍵返回主菜單!!!!"); getchar(); } else if((p0->next->num)==(p1->num)) { free(p1); //如果已經(jīng)存在這個(gè)學(xué)號(hào),那就不能再插入了,釋放 getchar();//吸收掉上一行錄入時(shí)鍵入的回車符號(hào),否則卡不住 printf("\n%*s%s\n",10," ","插入失敗,本學(xué)號(hào)信息已經(jīng)存在! 按任意鍵返回主菜單!!!!"); getchar(); } else { //插入 p1->next=p0->next; p0->next=p1; getchar();//吸收掉上一行錄入時(shí)鍵入的回車符號(hào),否則卡不住 printf("\n%*s%s\n",10," ","插入成功! 按任意鍵返回主菜單!!!!"); getchar(); } } /*刪除學(xué)生信息*/ void del_message() { int num; bool delOk=false; struct stud *p0,*p1; system("cls"); printf("********** 您當(dāng)前正在進(jìn)行的操作是,刪除學(xué)生信息 **********\n\n"); if(h==NULL) { printf("%*s%s\n",10," ","當(dāng)前沒有找到任何學(xué)生信息,請(qǐng)您先輸入信息,再執(zhí)行本操作!\n"); getchar();//吸收掉上一行錄入時(shí)鍵入的回車符號(hào),否則卡不住 printf("%*s%s\n",10," ","按任意鍵返回主菜單!!!!"); getchar(); return; } printf("請(qǐng)輸入要?jiǎng)h除學(xué)生的學(xué)號(hào):"); scanf("%d",&num); p0=h; if(p0->num==num) { h=p0->next; free(p0); /*若首結(jié)點(diǎn)是所要?jiǎng)h除的數(shù)據(jù),則釋放首結(jié)點(diǎn)*/ delOk=true; } else { p1=p0->next; while(p1!=NULL) { if(p1->num==num) { p0->next=p1->next; free(p1); delOk=true; break; //跳出循環(huán) } p0=p1; p1=p1->next; } } getchar();//吸收掉上一行錄入時(shí)鍵入的回車符號(hào),否則卡不住 if(delOk) printf("%*s%s\n",10," ","刪除成功! 按任意鍵返回主菜單!!!!"); else printf("%*s%s\n",10," ","沒有找到匹配學(xué)號(hào),刪除失敗! 按任意鍵返回主菜單!!!!"); getchar(); } //主函數(shù) int main(void){ int choice; do{ system("cls"); printf("\n\n\n"); printf("%*s%s",10," ","********** 學(xué) 生 宿 舍 管 理 系 統(tǒng) **********\n\n"); printf("%*s%s",25," ","1.輸入學(xué)生信息\n\n"); printf("%*s%s",25," ","2.輸出學(xué)生信息\n\n"); printf("%*s%s",25," ","3.插入學(xué)生信息\n\n"); printf("%*s%s",25," ","4.刪除學(xué)生信息\n\n"); printf("%*s%s",25," ","0.退出系統(tǒng)\n\n"); printf("%*s%s",10," ","*********************************************\n\n"); printf("%*s%s",10," ","請(qǐng)選擇0-4之間任意整數(shù):"); scanf("%d",&choice); switch(choice) { case 1:input_message();break; case 2:output_message();break; case 3:insert_message();break; case 4:del_message();break; case 0:break; } }while(choice!=0); }
可以用 Dev-C++ 進(jìn)行編譯調(diào)試
感謝各位的閱讀!關(guān)于“如何使用C++實(shí)現(xiàn)學(xué)生宿舍管理系統(tǒng)”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。