首頁 > 軟體

C++實現學生宿舍管理系統

2022-03-16 16:00:10

本文範例為大家分享了C++實現學生宿舍管理系統的具體程式碼,供大家參考,具體內容如下

非常簡易,完成個作業夠用,僅供初學者參考,不喜勿噴。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>

/*先用結構體定義學生資訊*/
struct stud 
{
    int   num;            //學號 
    char  name[10];        //姓名 
    char  sex[8];        //性別 
    int   age;            //年齡 
    char  major[18];     //專業 
    int   grade;        //年級 
    int   classes;        //班級 
    int   building;        //樓號 
    int   floor;        //樓層 
    int   dormitary;    //宿舍號 
    struct stud *next; /*next是指向本結構體的型別的指標型別*/
};
struct stud *h;     /*定義結構體的指標變數*/

int N=sizeof(struct stud);//獲取結構體總長度,用於分配記憶體空間 

/*輸入模組: 建立連結串列*/
void input_message()
{   struct stud *p1,*p2;
    int i,k;

    system("cls");
    printf("********** 您當前正在進行的操作是,輸入學生資訊 **********nn");
    printf("請輸入本次註冊的生總數:");scanf("%d",&k);
    h=NULL;
    printf("n您共有%d個學生資訊需要錄入n",k);
     
    if(k>0)
    { 
      h=p2=p1=(struct stud*)malloc(N);     /*為head,p2,p1申請儲存空間*/
      for(i=1;i<=k;i++)
      { 
        printf("n請輸入第%d名學生的資訊:nn",i);
        p1=(struct stud*)malloc(N);
        printf("學號:");
        scanf("%d",&p1->num);
        printf("姓名:");
        scanf("%s",p1->name);
        printf("性別(男或女):");
        scanf("%s",p1->sex);
        printf("年齡:");
        scanf("%d",&p1->age);
        printf("專業:");
        scanf("%s",p1->major);
        printf("年級:");
        scanf("%d",&p1->grade);
        printf("班級:");
        scanf("%d",&p1->classes);
        printf("樓號:");
        scanf("%d",&p1->building);
        printf("樓層:");
        scanf("%d",&p1->floor);
        printf("宿舍號:");
        scanf("%d",&p1->dormitary);
        p2->next=p1;                            /*將新結點連到表尾*/
        p2=p1;                                  /*p2指向新的表尾*/
       }
       p2->next=NULL;
       h=h->next;
      }
      
      getchar();//吸收掉上一行錄入時鍵入的回車符號,否則卡不住 
      printf("n%*s%sn",10," ","輸入完成,按任意鍵進入主選單!!!!");
      getchar();
}

/*輸出模組:顯示連結串列*/
void output_message()
{
    char v;
    struct stud *p=h;
    system("cls");
    printf("********** 您當前正在進行的操作是,顯示學生資訊 **********nn");
    
    if(p==NULL)
    {
        printf("%*s%sn",10," ","當前沒有找到任何學生資訊,請您先輸入資訊,再執行本操作!n");
        getchar();//吸收掉上一行錄入時鍵入的回車符號,否則卡不住 
        printf("%*s%sn",10," ","按任意鍵返回主選單!!!!");
        getchar();
        return; 
    }

    printf("  學號      姓名  性別  年齡      專業  年級  班級  樓號  樓層  宿舍號nn");
    while(p!=NULL)
    {
        printf("%6d%10s%6s%6d%10s%6d%6d%6d%6d%8dn",p->num,p->name,p->sex,p->age,p->major,p->grade,p->classes,p->building,p->floor,p->dormitary);
        p=p->next;
    }
    
    getchar();//吸收掉上一行錄入時鍵入的回車符號,否則卡不住 
    printf("n%*s%sn",10," ","輸出完成,按任意鍵返回主選單!!!!");
    getchar();
}

/*插入新學生資訊:插入連結串列*/
void insert_message()
{  
    struct stud *p0,*p1;
    p1=(struct stud *)malloc(N);
    system("cls");
    printf("********** 您當前正在進行的操作是,插入學生資訊 **********nn");
       
       printf("n請輸入要插入學生的資訊:nn");
    p1=(struct stud*)malloc(N);
    printf("學號:");
    scanf("%d",&p1->num);
    printf("姓名:");
    scanf("%s",p1->name);
    printf("性別(男或女):");
    scanf("%s",p1->sex);
    printf("年齡:");
    scanf("%d",&p1->age);
    printf("專業:");
    scanf("%s",p1->major);
    printf("年級:");
    scanf("%d",&p1->grade);
    printf("班級:");
    scanf("%d",&p1->classes);
    printf("樓號:");
    scanf("%d",&p1->building);
    printf("樓層:");
    scanf("%d",&p1->floor);
    printf("宿舍號:");
    scanf("%d",&p1->dormitary);
    p1->next=NULL;
   
    if(h==NULL)//如果連結串列為空,插入的節點設為表頭
    {  
           h=p1;
        getchar();//吸收掉上一行錄入時鍵入的回車符號,否則卡不住 
        printf("n%*s%sn",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();//吸收掉上一行錄入時鍵入的回車符號,否則卡不住 
        printf("n%*s%sn",10," ","插入成功! 按任意鍵返回主選單!!!!");
        getchar(); 
    }
    else if((p0->next->num)==(p1->num))
    {
        free(p1);    //如果已經存在這個學號,那就不能再插入了,釋放
        
        getchar();//吸收掉上一行錄入時鍵入的回車符號,否則卡不住 
        printf("n%*s%sn",10," ","插入失敗,本學號資訊已經存在! 按任意鍵返回主選單!!!!");
        getchar();
    }
    else
    {
        //插入 
        p1->next=p0->next;
        p0->next=p1; 
        
        getchar();//吸收掉上一行錄入時鍵入的回車符號,否則卡不住 
        printf("n%*s%sn",10," ","插入成功! 按任意鍵返回主選單!!!!");
        getchar();            
    }
}

/*刪除學生資訊*/
void del_message()
{  
    int num;
    bool delOk=false;
    
    struct stud *p0,*p1;
    
    system("cls");
    printf("********** 您當前正在進行的操作是,刪除學生資訊 **********nn");
        
    if(h==NULL)
    {
        printf("%*s%sn",10," ","當前沒有找到任何學生資訊,請您先輸入資訊,再執行本操作!n");
        getchar();//吸收掉上一行錄入時鍵入的回車符號,否則卡不住 
        printf("%*s%sn",10," ","按任意鍵返回主選單!!!!");
        getchar();
        return; 
    }
    
    printf("請輸入要刪除學生的學號:");
    scanf("%d",&num);
    p0=h;
    if(p0->num==num)
    {
        h=p0->next;
        free(p0);                              /*若首結點是所要刪除的資料,則釋放首結點*/
        delOk=true;
    }
    else
    {
        p1=p0->next;
        while(p1!=NULL)
        {
            if(p1->num==num)
            {
                p0->next=p1->next;
                free(p1);
                delOk=true;
                break; //跳出迴圈 
            }
            p0=p1;
            p1=p1->next;
       }        
     } 
     
    getchar();//吸收掉上一行錄入時鍵入的回車符號,否則卡不住 
     if(delOk)
        printf("%*s%sn",10," ","刪除成功! 按任意鍵返回主選單!!!!");
     else
        printf("%*s%sn",10," ","沒有找到匹配學號,刪除失敗! 按任意鍵返回主選單!!!!");
        
    getchar();

}

//主函數 
int main(void){
    int choice;
    
      do{
        system("cls");
        printf("nnn");
        printf("%*s%s",10," ","********** 學 生 宿 舍 管 理 系 統 **********nn");
        printf("%*s%s",25," ","1.輸入學生資訊nn");
        printf("%*s%s",25," ","2.輸出學生資訊nn");
           printf("%*s%s",25," ","3.插入學生資訊nn");
           printf("%*s%s",25," ","4.刪除學生資訊nn");
           printf("%*s%s",25," ","0.退出系統nn");
           printf("%*s%s",10," ","*********************************************nn");
           printf("%*s%s",10," ","請選擇0-4之間任意整數:");
        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++ 進行編譯偵錯

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com