首頁 > 軟體

C語言實現宿舍管理系統設計

2022-03-16 13:01:13

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

設計目的

《資料結構》課程主要介紹最常用的資料結構,進行資料結構課程設計要達到以下目的:

(1)瞭解並掌握資料結構與演演算法的設計方法,具備初步的獨立分析和設計能力;
(2)初步掌握軟體開發過程的問題分析、系統設計、程式編碼、測試等基本方法和技能;
(3)提高綜合運用所學的理論知識和方法獨立分析和解決問題的能力;
(4)訓練用系統的觀點和軟體開發一般規範進行軟體開發,培養軟體工作者所應具備的科學的工作方法和作風。

任務概述

設計內容:

(1)輸入記錄(記錄數不少於12條)並建立資料檔案,資料檔案按關鍵字(姓名、 學號、房號)進行排序(冒泡、選擇、插入排序等任選兩種),每間房最多6人。
(2)顯示記錄;
(3)查詢記錄,用二分法實現按姓名、學號、房號查詢;
(4)列印任一查詢結果;
(5)刪除記錄;
(6)能夠實現連續操作,直至選擇退出為止。

設計要求:

(1)符合課題要求,實現相應功能;
(2)要求介面友好美觀,操作方便易行;
(3)注意程式的實用性、安全性;

工作任務:

(1) 選擇合適的資料結構,並定義資料結構的結構體;
(2)根據程式所要完成的基本要求和程式實現提示,設計出完整的演演算法;
(3) 按格式要求寫出課程設計說明書。

專案原始碼

涉及到的檔案操作

檔名稱dorm.txt
luzehua 13 153
zhuyucheng 25 153
heshu 37 153
lijinagyang 19 153
quanghehng 31 153
lujinagbo 43 153
zhangjiatoa 44 155
lirngjie 14 155
qianxin 26 155
fanzijinag 34 175
zhangchengye 35 275

c原始碼

#include<stdio.h>
#include<stdlib.h>
#include<string.h>    
 
#define OK  1
#define ERROR 0
#define OVERFLOW -2
               
#define LIST_INIT_SIZE 100                         //線性表儲存空間的初始分配量
#define LISTINCREMENT 10                          //線性表儲存空間的分配量增量

typedef int Status;

typedef struct{
    char name[15];                    //名字
    int No;                         //學號 
    int Room;                        //宿舍號 
}Student;

Student student;

typedef struct{
    int length;                               //長度
    int listsize;                             //佔用記憶體空間
    Student *elem;                             //參照物件Student的資料成員elem
}Linklist;

int flag=0;

Status init(Linklist &L);                    //初始化線性表 
Status create(Linklist &L);                    //建立線性表 
//氣泡排序 
Status MSortRoom(Linklist &L);                //按宿舍號排序 
Status MSortNo(Linklist &L);                //按學號排序 
Status MSortName(Linklist & L);                //按姓名排序 
//選擇排序 
Status XSortRoom(Linklist &L);                //按宿舍號排序 
Status XSortNo(Linklist &L);                //按學號排序 
Status XSortName(Linklist & L);                //按姓名排序 
//直接插入排序 
Status CSortRoom(Linklist &L);                //按宿舍號排序 
Status CSortNo(Linklist &L);                //按學號排序 
Status CSortName(Linklist &L);                //按姓名排序 

Status SearchRoom(Linklist &L);                 //按宿舍號查詢 
Status SearchNo(Linklist &L);                //按學號查詢 
Status SearchName(Linklist &L)    ;            //按名字查詢 

Status Judge1(char ch);                        //判斷學生存在時是否繼續 
Status Judge2(char ch);                        //判斷學生不存在是是否繼續 
Status Judge3();                            //判斷是否有學生記錄 
Status JudgeNO(int NO,Linklist L);          //判斷學號是否重複 

void input(Linklist L);                        //輸入學生資訊 
void PrintSort(Linklist &L);                //輸出排序後的資訊 
void PrintSearch(Linklist &L,int mid);        //輸出查詢的資訊 (按學號和姓名) 
void PrintSearch1(Linklist &L,int mid);        //輸出查詢的資訊(按房號) 

Status DeleteNO(Linklist &L);                //按學號刪除某同學的資訊     
Status DeleteName(Linklist &L);                //按姓名刪除某同學的資訊 
Status DeleteRoom(Linklist &L);                //按宿舍號刪除某同學的資訊 

Status insert(Linklist &L);                    //插入某同學的資訊 

void JudgeSave(Linklist &L,int i);            //檔案儲存 
void Save(Linklist &L);
void Load(Linklist &L);                        //檔案載入 

Status ReturnMenu();                        //返回選單頁面 

//----------------------------------------------------------------選單操作-------------------------------------------------------
void menu()
{
    printf("tt             ========================        n");
    printf("tt            |                       |        n");
    printf("tt   |--------|     宿舍管理查詢      |-------|n");
    printf("tt   |        |                       |       |n");
    printf("tt   |         ========================       |n");
    printf("tt   |                                        |n");
    printf("tt   |            請選擇你的操作 :           |n");
    printf("tt   |            [1]建立學生資訊             |n");
    printf("tt   |            [2]按姓名排序(插入排序)     |n");
    printf("tt   |            [3]按學號排序(插入排序)     |n");
    printf("tt   |            [4]按房號排序(插入排序)     |n");
    printf("tt   |            [5]按姓名排序(選擇排序)     |n");
    printf("tt   |            [6]按學號排序(選擇排序)     |n");
    printf("tt   |            [7]按房號排序(選擇排序)     |n");
    printf("tt   |            [8]按姓名排序(氣泡排序)     |n");
    printf("tt   |            [9]按學號排序(氣泡排序)     |n");
    printf("tt   |            [10]按房號排序(氣泡排序)    |n");
    printf("tt   |            [11]按姓名查詢              |n");
    printf("tt   |            [12]按學號查詢              |n");
    printf("tt   |            [13]按房號查詢              |n");
    printf("tt   |            [14]插入學生資訊            |n");
    printf("tt   |            [15]按學號刪除學生資訊      |n");
    printf("tt   |            [16]按姓名刪除學生資訊      |n");
    printf("tt   |            [17]按宿舍刪除學生資訊      |n");
    printf("tt   |            [18]顯示學生記錄            |n");
    printf("tt   |            [19]檔案載入                |n");
    printf("tt   |            [20]檔案儲存                |n");
    printf("tt   |            [21]退出操作                |n");
    printf("tt   |-======================================-|n");
    printf("tt   |                 歡迎查詢               |n");
    printf("tt   |-======================================-|n");
    printf("請選擇你要進行的操作(1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21):n");
}

int main(int argc,char **argv)
{
    int n; 
    Linklist L;             
    init(L);
                 
    char ch;
    printf("tt歡迎進入宿舍管理查詢介面nnn");
    printf("請按任意鍵進行操作");
    scanf("%c",&ch);
    system("cls");
    
    while(1)
    {   
        menu();
        scanf("%d",&n);
        getchar();
        system("cls");  
        switch(n)  
        {
            case 1:
                if(create(L)){
                    printf("建立成功!n");
                }
                ReturnMenu();
                break;
            case 2:
                CSortName(L);       
                if(L.length==0)      
                {       
                    printf("n已無學生記錄n");                 
                }        
                else{
                    printf("按姓名排序:n");    
                    PrintSort(L);
                } 
                ReturnMenu();   
                break;
            case 3:
                CSortNo(L);       
                if(L.length==0)      
                {       
                    printf("n已無學生記錄n");                 
                }        
                else{
                    printf("按學號排序:n");    
                    PrintSort(L);
                } 
                ReturnMenu();   
                break;
            case 4:
                CSortRoom(L);       
                if(L.length==0)      
                {       
                    printf("n已無學生記錄n");                 
                }        
                else{
                    printf("按房號排序:n");    
                    PrintSort(L);
                } 
                ReturnMenu();   
                break;     
            case 5:
                XSortName(L);                     
                printf("n");       
                if(L.length==0){
                    printf("已無學生記錄n");     
                    printf("n");        
                    ReturnMenu();        
                }        
                else{    
                    printf("按姓名排序:n");    
                    PrintSort(L);    
                    ReturnMenu();         
                }
                break; 
            case 6:
                XSortNo(L);                     
                printf("n");       
                if(L.length==0){
                    printf("已無學生記錄n");     
                    printf("n");        
                    ReturnMenu();        
                }        
                else{    
                    printf("按學號排序:n");    
                    PrintSort(L);    
                    ReturnMenu();         
                }
                break;
            case 7:
                XSortRoom(L);                     
                printf("n");       
                if(L.length==0){
                    printf("已無學生記錄n");     
                    printf("n");        
                    ReturnMenu();        
                }        
                else{    
                    printf("按房號排序:n");    
                    PrintSort(L);    
                    ReturnMenu();         
                }
                break;
            case 8:
                MSortName(L);                    
                printf("n");     
                if(L.length==0){      
                    printf("已無學生記錄n");            
                    ReturnMenu();      
                }
                else{
                    printf("按姓名排序:n");  
                    PrintSort(L);  
                    ReturnMenu();    
                }
                break;
            case 9:
                MSortNo(L);                    
                printf("n");     
                if(L.length==0){      
                    printf("已無學生記錄n");            
                    ReturnMenu();      
                }
                else{
                    printf("按學號排序:n");  
                    PrintSort(L);  
                    ReturnMenu();    
                }
                break;
                    
            case 10:
                MSortRoom(L);                    
                printf("n");     
                if(L.length==0){      
                    printf("已無學生記錄n");            
                    ReturnMenu();      
                }
                else{
                    printf("按房號排序:n");  
                    PrintSort(L);  
                    ReturnMenu();    
                }
                break;  
            case 11:
                CSortName(L);             
                SearchName(L);              
                break;
            case 12:
                XSortNo(L);               
                SearchNo(L);                
                break;
            case 13:
                MSortRoom(L);                
                SearchRoom(L);         
                break;
            case 14:
                insert(L);          
                system("cls");  
                printf("顯示插入後的學生資訊:n");
                PrintSort(L);  
                ReturnMenu();     
                break;
            case 15:
                DeleteNO(L);
                if(L.length==0){   
                    printf("n學生記錄已被刪除完nn");        
                }  
                else{  
                    printf("刪除後的學生資訊:n");
                    PrintSort(L);      
                }
                ReturnMenu();     
                break;
            case 16:
                DeleteName(L);
                if(L.length==0){   
                    printf("n學生記錄已被刪除完nn");         
                }  
                else{  
                    printf("刪除後的學生資訊:n");
                    PrintSort(L);     
                }    
                ReturnMenu(); 
                break;
            case 17:
                DeleteRoom(L);
                if(L.length==0){   
                    printf("n該房間沒有學生nn");         
                }  
                else{  
                    printf("刪除後的學生資訊:n");
                    PrintSort(L);     
                }    
                ReturnMenu(); 
                break;
            case 18:
                printf("n學生資訊為:n");
                PrintSort(L); 
                ReturnMenu();        
                break;
            case 19:
                Load(L);
                ReturnMenu();
                break;
            case 20:
                JudgeSave(L,flag);
                ReturnMenu();
                break; 
            case 21:
                exit(0);
                break;
            default:
                printf("無此操作n");
                ReturnMenu();
        }
    }
    return 0;
}

//-----------------------------------------------------------------------返回主介面----------------------------------------------------------------

Status ReturnMenu()                    
{
    char c;
    fflush(stdin);
    printf("n按任意鍵進入主介面:");
    scanf("%c",&c);
    system("cls");
    return OK;
}

//---------------------------------------------------------------線性表初始化---------------------------------------------------

Status init(Linklist &L)
{
    L.elem=(Student*)malloc(LIST_INIT_SIZE*sizeof(Student));
    if(!L.elem)
        exit(OVERFLOW);
    L.length=0;
    L.listsize=LIST_INIT_SIZE;
    return OK;
}


//-------------------------------------------------------------建立學生類資訊表--------------------------------------------------

Status create(Linklist &L)
{
    if(L.length>=L.listsize)
    {
        Student *newbase;
        newbase=(Student*)realloc(L.elem,(LIST_INIT_SIZE+LISTINCREMENT)*sizeof(Student));
        L.elem=newbase;
        L.listsize+=LISTINCREMENT;
    }
    char ch='Y';
    int i=0;
    int room[1000]={0};
    while(ch=='Y'){
        printf("請輸入第%d個學生資訊n",i+1);
        input(L);
        if(room[student.Room]+1>6){
            printf("該宿舍已滿員!請重新輸入:n");
            input(L); 
        }
        strcpy(L.elem[L.length].name,student.name);
        L.elem[L.length].No=student.No;
        L.elem[L.length].Room=student.Room;
        L.length++;
        i++;
        room[student.Room]++;
        ch=getchar();
        printf("n是否繼續新增學生:是的話按Y,否則按任意鍵返回:");
        scanf("%c",&ch);
        flag=1;
    }
    if(ch!='Y')
        system("cls");
    return OK;
}

//--------------------------------------------------------------按照宿舍號排序(氣泡排序)--------------------------------------------------------
Status MSortRoom(Linklist & L)        
{
    int i,j;
    Student temp;
    for(i=0;i<L.length-1;i++)
    for(j=i+1;j<L.length;j++)
    if(L.elem[i].Room>L.elem[j].Room)
    {
        temp=L.elem[i];
        L.elem[i]=L.elem[j];
        L.elem[j]=temp;
    }
    return OK;
}
//-------------------------------------------------------------------按照宿舍號排序(選擇排序)-------------------------------------------------------------

Status XSortRoom(Linklist & L)        
{
    int i,j,k;
    Student temp;
    for(i=0;i<L.length-1;i++){
        k=i;
        for(j=i+1;j<L.length;++j)
            if(L.elem[k].Room>L.elem[j].Room)
                k=j;
        if(i!=k){
            temp=L.elem[i];
            L.elem[i]=L.elem[k];
            L.elem[k]=temp;
        }
    }
    
    return OK;
}


//--------------------------------------------------------------------------按照宿舍排序(插入排序)--------------------------------------------------------------
Status CSortRoom(Linklist &L)    
{
    int i,j;
    Student temp;
    for(i=1;i<L.length;++i){
        if(L.elem[i].Room<L.elem[i-1].Room){
            temp=L.elem[i];
            for(j=i-1;temp.Room<L.elem[j].Room;--j)
                L.elem[j+1]=L.elem[j];
            L.elem[j+1]=temp;
        }
    }
    return OK;
}


//--------------------------------------------------------------按照學號排序(氣泡排序)--------------------------------------------------------
Status MSortNo(Linklist & L)        
{
    int i,j;
    Student temp;
    for(i=0;i<L.length-1;i++)
    for(j=i+1;j<L.length;j++)
    if(L.elem[i].No>L.elem[j].No)
    {
        temp=L.elem[i];
        L.elem[i]=L.elem[j];
        L.elem[j]=temp;
    }
    return OK;
}


//-------------------------------------------------------------------按照學號排序(選擇排序)-------------------------------------------------------------

Status XSortNo(Linklist & L)        
{
    int i,j,k;
    Student temp;
    for(i=0;i<L.length-1;i++){
        k=i;
        for(j=i+1;j<L.length;++j)
            if(L.elem[k].No>L.elem[j].No)
                k=j;
        if(i!=k){
            temp=L.elem[i];
            L.elem[i]=L.elem[k];
            L.elem[k]=temp;
        }
    }
    
    return OK;
}

//--------------------------------------------------------------------------按照學號排序(插入排序)--------------------------------------------------------------
Status CSortNo(Linklist &L)    
{
    int i,j;
    Student temp;
    for(i=1;i<L.length;++i){
        if(L.elem[i].No<L.elem[i-1].No){
            temp=L.elem[i];
            for(j=i-1;temp.No<L.elem[j].No;--j)
                L.elem[j+1]=L.elem[j];
            L.elem[j+1]=temp;
        }
    }
    return OK;
}

//--------------------------------------------------------------按照姓名排序(氣泡排序)--------------------------------------------------------
Status MSortName(Linklist & L)        
{
    int i,j;
    Student temp;
    for(i=0;i<L.length-1;i++)
    for(j=i+1;j<L.length;j++)
    if(strcmp(L.elem[i].name,L.elem[j].name)>0)
    {
        temp=L.elem[i];
        L.elem[i]=L.elem[j];
        L.elem[j]=temp;
    }
    return OK;
}


//-------------------------------------------------------------------按照姓名排序(選擇排序)-------------------------------------------------------------

Status XSortName(Linklist & L)        
{
    int i,j,k;
    Student temp;
    for(i=0;i<L.length-1;i++){
        k=i;
        for(j=i+1;j<L.length;++j)
            if(strcmp(L.elem[k].name,L.elem[j].name)>0)
                k=j;
        if(i!=k){
            temp=L.elem[i];
            L.elem[i]=L.elem[k];
            L.elem[k]=temp;
        }
    }
    
    return OK;
}

//--------------------------------------------------------------------------按照姓名排序(插入排序)--------------------------------------------------------------
Status CSortName(Linklist &L)    
{
    int i,j;
    Student temp;
    for(i=1;i<L.length;++i){
        if(strcmp(L.elem[i].name,L.elem[i-1].name)<0){
            temp=L.elem[i];
            for(j=i-1;strcmp(temp.name,L.elem[j].name)<0;--j)
                L.elem[j+1]=L.elem[j];
            L.elem[j+1]=temp;
        }
    }
    return OK;
}

//-------------------------------------------------------------------------按房號查詢(折半查詢)----------------------------------------------------------

Status SearchRoom(Linklist &L)
{
    if(L.length==0)
        Judge3();
    else
    {
        int low=0,high=L.length,m,temp;
        int r;
        printf("n按房號查詢   輸入房號:");
        scanf("%d",&r);
        printf("n查詢成功   學生資訊為n");
        printf("tt姓名                        學號       房號n");
        while(low<=high)
        {
            m=(low+high)/2;
            if(r==L.elem[m].Room)
            {
                temp=1;
                PrintSearch1(L,m);
                for(int k=m;k>low;k--){
                    if(L.elem[k].Room==L.elem[k-1].Room)
                        PrintSearch1(L,k-1);
                }
                for(int k=m;k<high;++k){
                    if(L.elem[k].Room==L.elem[k+1].Room){
                        PrintSearch1(L,k+1);
                    }
                }
                break;
            }
            else if(r>L.elem[m].Room)
                low=m+1;
            else
                high=m-1;
        }
        if(temp==1)
        {
            
            if(Judge1(1)) 
                SearchRoom(L);
            else
            {
                system("cls");
            }
        }
        else
        {
            if(Judge2(1))
                SearchRoom(L);
            else
            {
                system("cls");
            }
        }
    }
    return OK;
}

//-------------------------------------------------------------------------按學號查詢(折半查詢)--------------------------------------------------------
Status SearchNo(Linklist &L)
{
    if(L.length==0)
    {
        Judge3();
    }
    else
    {
        int low=0,high=L.length,m,temp=0;                    
        int n;
        printf("n按學號查詢   輸入學號:");
        scanf("%d",&n);
        while(low<=high)
        {
            m=(low+high)/2;
            if(n==L.elem[m].No)
            {
                temp=1;
                break;
            }
            else if(n>L.elem[m].No)
                low=m+1;
            else
                high=m-1;
        }
        if(temp==1)
        {
            PrintSearch(L,m);
            if(Judge1(1))
                SearchNo(L);
            else
            {
                system("cls");
            }
        }
        else
        {
            if(Judge2(1))
                SearchNo(L);
            else
            {
                system("cls");
            }    
        }    
    }
    return OK;
}

//-------------------------------------------------------------------------按姓名查詢(折半查詢)----------------------------------------------------------
Status SearchName(Linklist &L)        
{
    if(L.length==0)
        Judge3();
    else
    {
        int low=0,high=L.length,m,temp=0; 
        printf("n按姓名查詢   輸入姓名:");
        char a[15];
        scanf("%s",a);
        while(low<=high)
        {
            m=(low+high)/2;
            if(strcmp(a,L.elem[m].name)==0)
            {
                temp=1;
                break;
            }
            else if(strcmp(a,L.elem[m].name)>0)
                low=m+1;
            else
                high=m-1;
        }
        if(temp==1)
        {
            PrintSearch(L,m);
            if(Judge1(1))
                SearchName(L);
            else
            {
                system("cls");
            }
        }
        else
        {
            if(Judge2(1))
                SearchName(L);
            else
            {
                system("cls");
            }
        }
    }
    return OK;
}


//------------------------------------------------------------------------判斷是否繼續查詢---------------------------------------------------------
Status Judge1(char ch)            
{
    scanf("%c",&ch);
    printf("是否繼續:是的話按Y,否則按任意鍵返回:");
    scanf("%c",&ch);
    if(ch=='Y')
    {
        system("cls");
        return OK;
    }
    else
        return ERROR;
}

//-----------------------------------------------------------------------判斷不存在是否繼續查詢--------------------------------------------------------

Status Judge2(char ch)
{
    scanf("%c",&ch);
    printf("沒有此學生,是否繼續:是的話按Y,否則按任意鍵返回");
    fflush(stdin);
    scanf("%c",&ch);
    if(ch=='Y')
    {
        system("cls");
        return OK;
    }
    else
        return ERROR;
}

//--------------------------------------------------------------------無學生記錄返回主介面------------------------------------------------------------------

Status Judge3()        
{
    printf("已經沒有學生記錄n");
    ReturnMenu();
    menu();
    return OK;
}

//------------------------------------------------------------------------判斷學生學號是否一樣-------------------------------------------------------------- 
Status JudgeNO(int NO,Linklist L)
{
    int j=0;
    for(int i=0;i<L.length;i++){
        if(NO==L.elem[i].No)
            j++;
    }
    if(j==1){
        printf("該學號已經存在,請重新輸入!n");
        input(L);
    }
    return OK;
}    

//------------------------------------------------------------------------輸入學生資訊---------------------------------------------------------------- 
void input(Linklist L)
{
    printf("輸入學生姓名:n");
    fflush(stdin);
    gets(student.name);
    printf("輸入學生宿舍號:n");
    scanf("%d",&student.Room);
    
    printf("輸入學生學號:n");
    fflush(stdin);
    scanf("%d",&student.No);
    
    JudgeNO(student.No,L);
}

//-----------------------------------------------------------------------輸出學生排序的資訊-------------------------------------------------------------

void PrintSort(Linklist & L)        
{
    int i;
    printf("n");
    printf("tt姓名                        學號         房號n");
    for(i=0;i<L.length ;i++)
        printf("tt%-20s %10d   %10dn",L.elem[i].name,L.elem[i].No,L.elem[i].Room);
}

//-----------------------------------------------------------------輸出查詢學生的資訊(按學號或姓名)----------------------------------------------------

void PrintSearch(Linklist & L,int mid)    
{
    printf("查詢成功   學生資訊為n");
    printf("tt姓名                        學號         房號n");
    printf("tt%-20s %10d   %10dn",L.elem[mid].name,L.elem[mid].No,L.elem[mid].Room);
}

//------------------------------------------------------------------------輸出查詢學生的資訊(按房號)-------------------------------------------------------------

void PrintSearch1(Linklist & L,int mid)    
{
    printf("tt%-20s %10d %10dn",L.elem[mid].name,L.elem[mid].No,L.elem[mid].Room);
}


//-------------------------------------------------------------------------插入學生資訊-------------------------------------------------------------

Status insert(Linklist & L)        
{
    int i,j,k;
    int room[1000]={0};
    char ch;
    printf("n插入學生資訊為:n");
    input(L); 
    if(room[student.Room]+1>6){
        printf("該宿舍已滿員,請重新輸入:n");
        input(L);
    }
    if(L.length==0)
    {
        strcpy(L.elem[L.length].name,student.name);
        L.elem[L.length].No=student.No;
        L.elem[L.length].Room=student.Room;
        flag=1;
    }
    for(i=0;i<L.length;i++)
    {
        strcpy(L.elem[L.length].name,student.name);
        L.elem[L.length].No=student.No;
        L.elem[L.length].Room=student.Room;
        room[student.Room]++;
        flag=1;
    }
    L.length++;
    fflush(stdin);
    printf("n是否繼續插入:是的話按Y,否則按任意鍵返回");
    scanf("%c",&ch);
    if(ch=='Y')
        insert(L);
    else
        system("cls");
    return OK;
}

//-------------------------------------------------------------------------按學號刪除-------------------------------------------------------

Status DeleteNO(Linklist &L)    
{   
    int i,j,k=-1;   
    char ch;    
    printf("nn請輸入要刪除學生的學號:");   
    scanf("%d",&student.No);   
    for(i=0;i<L.length;i++)   
    {    
        if(student.No==L.elem[i].No)    
        {     
            printf("該學生的資訊為:n");  
            printf("tt姓名                        學號         房號n");
            printf("tt%-20s %10d   %10dn",L.elem[i].name,L.elem[i].No,L.elem[i].Room);    
            k=i;     
            for(j=k;j<L.length-1;j++)      
                L.elem[j]=L.elem[j+1];              
            break;    
        }         
    }   
    if(i>=L.length) 
        printf("該學生不存在n");   
    if(k>=0)
        L.length--;   
    fflush(stdin);     
    printf("n是否繼續刪除?是的話按Y,否則按任意鍵返回:");   
    scanf("%c",&ch);   
    system("cls");   
    if(ch=='Y') 
        DeleteNO(L);   
    else 
        system("cls");
    return OK;
}

//-------------------------------------------------------------------------按姓名刪除-------------------------------------------------------

Status DeleteName(Linklist &L)    
{   
    int i,j,k=-1;   
    char ch;    
    printf("nn請輸入要刪除學生的姓名:");   
    gets(student.name);   
    for(i=0;i<L.length;i++)   
    {    
        if(strcmp(student.name,L.elem[i].name)==0)    
        {     
            printf("該學生的資訊為:n");  
            printf("tt姓名                        學號         房號n");
            printf("tt%-20s %10d   %10dn",L.elem[i].name,L.elem[i].No,L.elem[i].Room);     
            k=i;     
            for(j=k;j<L.length-1;j++)      
                L.elem[j]=L.elem[j+1];              
            break;    
        }         
    }   
    if(i>=L.length) 
        printf("該學生不存在n");   
    if(k>=0)
        L.length--;   
    fflush(stdin);     
    printf("n是否繼續刪除?是的話按Y,否則按任意鍵返回:");   
    scanf("%c",&ch);   
    system("cls");   
    if(ch=='Y') 
        DeleteName(L);   
    else 
        system("cls");
    return OK;
}


//-------------------------------------------------------------------------按宿舍號刪除-------------------------------------------------------

Status DeleteRoom(Linklist &L)    
{   
    int i,j,k=-1,n=L.length;   
    char ch;    
    printf("nn請輸入要刪除學生的宿舍號:");   
    scanf("%d",&student.Room); 
    
    printf("刪除該宿舍學生的資訊為:n"); 
    printf("tt姓名                        學號         房號n"); 
    for(i=0;i<L.length;i++)   
    {    
        if(student.Room==L.elem[i].Room)    
        {   
            printf("tt%-20s %10d   %10dn",L.elem[i].name,L.elem[i].No,L.elem[i].Room);     
            k=i;     
            for(j=k;j<L.length-1;j++)      
                L.elem[j]=L.elem[j+1];
            if(k>0) 
                n--; 
        }
        if(i==L.length-1){
            break; 
        }         
    }   
    if(i>=L.length) 
        printf("此房間沒有學生n");   
    L.length=n;
    fflush(stdin);     
    printf("n是否繼續刪除?是的話按Y,否則按任意鍵返回:");   
    scanf("%c",&ch);   
    system("cls");   
    if(ch=='Y') 
        DeleteRoom(L);   
    else 
        system("cls");
    return OK;
}
//--------------------------------------------------------------------------檔案載入-------------------------------------------------------------- 
void Load(Linklist &L){
    FILE *fp;
    if((fp=fopen("dorm.txt","r"))==NULL)
    {
        printf("開啟檔案失敗!nn");
        exit(0);
    }
    while(!feof(fp))
        fread(&L.elem[L.length],sizeof(Student),1,fp);
    fclose(fp);       
    printf("載入資料成功!nn");
} 
//--------------------------------------------------------------------------儲存檔案 ----------------------------------------------------------------
void JudgeSave(Linklist &L,int i)
{
    char ch;
    if(i){
        
        printf("是否儲存(Y/N)?:");
        ch=getchar();
        getchar();
        while(ch!='N'&&ch!='Y')
        {
            printf("請輸入Y或者N:");
            ch=getchar();
            getchar();
        }
        if(ch=='Y')
            Save(L);
    }
}

void Save(Linklist &L){
    int i;
    int flag1=0;
    FILE *fp;
    if((fp=fopen("dorm.txt","w"))==NULL)
    {
        printf("開啟檔案失敗!nn");
        flag1=1;
        exit(0);
    }                             
    for(i=0;i<L.length;i++){
        fprintf(fp,"%s %d %dn",L.elem[i].name,L.elem[i].No,L.elem[i].Room);
    }
        
    if(!flag1)
    {
        printf("資料儲存成功!nn");
        flag=0;
    }
    fclose(fp);
}

專案效果截圖

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


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