首頁 > 軟體

C語言實現宿舍管理課程設計

2022-03-25 13:01:49

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

和本編前幾個程式結構差不多,比較簡單直觀,希望可以給你帶來幫助。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<Windows.h>
typedef struct student
{
    int might1;
    int might2;
    char user[20];//賬號
    char mima[20];//密碼
    char name[20];//姓名    
    char sex[5];//性別    
    char num[20];//學號      
    char classs[20];//班級    
    char floor[20];//樓號   
    char dorm[20];//宿舍號    
    struct student *next;
}LinkList;
void menu3(struct student *p,char us[20]);
void menu1(struct student *p);
void menu2(struct student *p);
void menu33(struct student *p);
void menu22(struct student *p);
void savestudentFile(struct student *L);
void Look(struct student *p)
{
    struct student *q=p->next;
    char us[20];
    int flag = 0,i;
    system("cls");
    printf("t請輸入你要列印的學生的賬號:n");
    scanf("%s",us);
    while (q!= NULL)
    {
        if(strcmp(q->user,us)==0)
        {
            printf("賬號:%s,密碼:%s,姓名:%s,樓號:%s,宿舍號:%sn",q->user,q->mima,q->name,q->floor,q->dorm);
            flag=1;
        }
        q = q->next;
    }
    if (flag == 0)
    {
        printf("t無該學生資訊n");
    }
    printf("按回車返回選單!n");
    getchar();
    getchar();
    menu2(p);
}
void ADD(struct student *p)
{
    struct student *q, *n = p;
    struct student *h = p->next;
    int flag = 0;
    system("cls");
    q = (struct student *)malloc(sizeof(struct student));
    q->next = NULL;
    q->might1=0;
    q->might2=2;
    printf("請輸入選擇新增的學生:n");
    printf("賬號 :");
    scanf("%s",q->user);
    printf("密碼 :");
    scanf("%s",q->mima);
    printf("姓名 :");
    scanf("%s", q->name);
    printf("性別 :");
    scanf("%s",q->sex);
    printf("班級 :");
    scanf("%s",q->classs);
    printf("學號 :");
    scanf("%s",q->num);
    printf("樓號 :");
    scanf("%s",q->floor);
    printf("宿舍號 :");
    scanf("%s",q->dorm);
    getchar(); 
    while (h != NULL)
    {
        if (strcmp(h->user,q->user)==0)
        {
            flag = 1;
            printf("t該學號已存在n");
            Sleep(1000);
            ADD(p);
            break;
        }
        h = h->next;
    }
    while (n->next != NULL)
    {
        n = n->next;
    }
    n->next=q;
    if (flag == 0)
    {
        printf("t新增成功n");
        printf("t按任意鍵返回選單n");
    }
    else
        printf("t新增失敗n");
    printf("按回車返回選單!n");
    getchar();
    menu2(p);
}
void Dele(struct student *p)
{
    struct student *q = p->next;
    struct student *n = p;
    char us[20];
    int flag = 0;
    system("cls");
    printf("t請輸入你要刪除的學生學號n");
    scanf("%s", us);
    while (q != NULL)
    {
        if (strcmp(q->user,us)==0)
        {
            flag = 1;
            n->next = q->next;
            break;
        }
        n = q;
        q = q->next;
    }
    if (flag != 1)
    {
        printf("t無該學生資訊n");
    }
    else
    {
        printf("t刪除成功n");
    }
    printf("按回車返回選單!n");
    getchar();
    getchar();
    menu2(p);
}
void Quan(struct student *p)
{
    int i,m,j;
    char us[20],mi[20],na[20],se[5],nu[20],cla[20],flo[20],dar[20];
    struct student *q=p->next->next;
    printf("請輸入要修改的學生賬戶:");
    scanf("%s",us);
    while(q!=NULL)
    {
        if(strcmp(q->user,us)==0)
        {
            printf("請選擇將要修改的內容:n");
            printf("1.姓名n");
            printf("2.性別n");
            printf("3.學號n");
            printf("4.班級n");
            printf("5.樓號n");
            printf("6.宿舍號n");
            printf("7.賬號n");
            printf("8.密碼n");
            printf("9.凍結賬戶n");
            printf("10.解凍賬號n");
            printf("11.返回上一層n");
            scanf("%d",&i);
            switch(i)
            {
            case 1:printf("新修改的姓名n");scanf("%s",na);j=1;strcpy(q->name,na);break;
            case 2:printf("新修改的性別n");scanf("%s",se);j=1;strcpy(q->sex,se);break;
            case 3:printf("新修改的學號n");scanf("%s",nu);j=1;strcpy(q->num,nu);break;
            case 4:printf("新修改的班級n");scanf("%s",cla);j=1;strcpy(q->classs,cla);break;
            case 5:printf("新修改的樓號n");scanf("%s",flo);j=1;strcpy(q->floor,flo);break;
            case 6:printf("新修改的宿舍號n");scanf("%s",dar);j=1;strcpy(q->dorm,dar);break;
            case 7:printf("新修改的賬號n");scanf("%s",us);j=1;strcpy(q->user,us);break;
            case 8:printf("新修改的密碼n");scanf("%s",mi);j=1;strcpy(q->mima,mi);break;
            case 9:j=1;q->might2=3;break;
            case 10:j=1;q->might2=2;break;
            case 11:menu2(p);break;
            default:printf("請輸入合法量!n");break;
            }
        }
        q=q->next;
    }
    if(j==1)
    {
        printf("修改成功!n");
    }
    if(j==0)
    {
        printf("修改失敗!n");
    }
    printf("按回車返回選單!n");
    getchar();
    getchar();
    menu2(p);
}
void Browse(struct student *p,char us[20])
{
    struct student *q = p->next;
    int flag = 0;
    system("cls");
    {
        while (q != NULL)
        {
            if (strcmp(q->user,us)==0)
            {
                flag = 1;
                printf("t該學生資訊  姓名:%s   學號:%d   性別:%s   班級:%s   樓號:%s   寢室號:%sn", q->name, q->num, q->sex, q->classs, q->floor,q->dorm);
            }
            q = q->next;
        }
        if (flag == 0)
        {
            printf("t你無此許可權n");
        }
        printf("按回車返回選單!n");
        getchar();
        getchar();
        menu3(p,us);
    }
}
void modify(struct student *p,char us[20])
{
    struct student *q=p->next;
    char mi[20],na[20],se[5],nu[20],cla[20],flo[20],dar[20];
    int j,i;
    system("cls");
    printf("nnn**********修改學生住宿資訊**********n");
    while(q!=NULL)
    {
        if(strcmp(q->user,us)==0)
        {
            printf("請選擇將要修改的內容:n");
            printf("1.姓名n");
            printf("2.性別n");
            printf("3.學號n");
            printf("4.班級n");
            printf("5.樓號n");
            printf("6.宿舍號n");
            printf("7.賬號n");
            printf("8.密碼n");
            printf("9.返回上一層n");
            scanf("%d",&i);
            switch(i)
            {
            case 1:printf("新修改的姓名n");scanf("%s",na);j=1;strcpy(q->name,na);break;
            case 2:printf("新修改的性別n");scanf("%s",se);j=1;strcpy(q->sex,se);break;
            case 3:printf("新修改的學號n");scanf("%s",nu);j=1;strcpy(q->num,nu);break;
            case 4:printf("新修改的班級n");scanf("%s",cla);j=1;strcpy(q->classs,cla);break;
            case 5:printf("新修改的樓號n");scanf("%s",flo);j=1;strcpy(q->floor,flo);break;
            case 6:printf("新修改的宿舍號n");scanf("%s",dar);j=1;strcpy(q->dorm,dar);break;
            case 7:printf("新修改的賬號n");scanf("%s",us);j=1;strcpy(q->user,us);break;
            case 8:printf("新修改的密碼n");scanf("%s",mi);j=1;strcpy(q->mima,mi);break;
            case 9:menu2(p);break;
            default:printf("請輸入合法量!n");break;
            }
        }
        q=q->next;
    }
    if(j==1)
    {
        printf("修改成功!n");
    }
    if(j==0)
    {
        printf("修改失敗!n");
    }
    printf("按回車返回選單!n");
    getchar();
    getchar();
    menu3(p,us);
}
void inquire(struct student *p,char us[20])
{
    struct student *q = p->next;
    char nu[20];
    char name[20];
    char flo[20];
    char dor[20];
    int k;
    int flag=0;
    system("cls");
    printf("nnttt1.按學號查詢n");
    printf("ttt2.按姓名查詢n");
    printf("ttt3.按樓號統計n");
    printf("ttt4.按樓號+寢室號查詢n");
    printf("ttt0.結束查詢返回上一層n");
    printf("請選擇:");
    scanf("%d",&k);
    switch(k)
    {
    case 1:
        printf("nnn**********按學號查詢**********n");
        printf("n 請輸入要查詢的學號:");
        scanf("%s",nu);
        while (q != NULL)
        {
            if (strcmp(q->num,nu)==0)
            {
                flag=1;
                printf("t該學生資訊n姓名:%s n學號:%d n性別:%s n班級:%s n樓號:%s n寢室號:%sn",  q->name, q->num, q->sex, q->classs, q->floor, q->dorm);
            }
            q = q->next;
        }
            break;
    case 2:
        printf("nnn**********按姓名查詢**********n");
        printf("n 請輸入要查詢的姓名:");
        scanf("%s",name);        
        while (q!=NULL)
        {
            if (strcmp(name,q->name)==0)
            {
                flag=1;
                printf("t該學生資訊n姓名:%s n學號:%d n性別:%s n班級:%s n樓號:%s n寢室號:%sn",  q->name, q->num, q->sex, q->classs, q->floor, q->dorm);
            }
            q = q->next;
        }
            break;
    case 3:
        printf("nnn**********按樓號查詢**********n");
        printf("n 請輸入要查詢的樓號:");
        scanf("%s",flo);
        getchar();
        while (q != NULL)
        {
            if (strcmp(flo,q->floor)==0)
            {
                flag=1;
                printf("t該學生資訊n姓名:%s n學號:%d n性別:%s n班級:%s n樓號:%s n寢室號:%sn",  q->name, q->num, q->sex, q->classs, q->floor, q->dorm);
            }
            q = q->next;
        }
            break;
    case 4:
        printf("nnn**********按樓號+寢室號查詢**********n");
        printf("n 請輸入要查詢的樓號+寢室號:");
        scanf("%s %s",flo,dor);
        while (q != NULL)
        {
            if ((strcmp(flo,q->floor)==0)&&(strcmp(dor,q->dorm)==0))
            {
                flag=1;
                printf("t該學生資訊n姓名:%s n學號:%d n性別:%s n班級:%s n樓號:%s n寢室號:%sn",  q->name, q->num, q->sex, q->classs, q->floor, q->dorm);
            }
            q = q->next;
        }
            break;
    case 0:menu3(p,us);break;
    }
    if(flag==0)
    {
        printf("無此資訊!");
        Sleep(1500);
        menu3(p,us);
    }
    if(flag==1)
    {
        printf("查詢成功!n");
        printf("按回車返回選單!n");
        getchar();
        menu3(p,us);
    }
}
void statistics(struct student *p,char us[20])
{

    struct student *q = p->next;
    char cla[20];
    char name[20];
    char flo[20];
    char dor[20];
    int flag=0,k;
    system("cls");
    printf("nnttt1.按班級統計n");
    printf("ttt2.按樓號統計n");
    printf("ttt3.按樓號+寢室號統計n");
    printf("ttt0.結束查詢返回上一層n");
    printf("請選擇:");
    scanf("%d",&k);
    switch(k)
    {
    case 1:
        printf("nnn**********按班級查詢**********n");
        printf("n 請輸入要查詢的班級:");
        scanf("%s",cla);
        while (q != NULL)
        {
            if (strcmp(q->classs,cla)==0)
            {
                flag=1;
                printf("t該學生資訊n姓名:%s n學號:%d n性別:%s n班級:%s n樓號:%s n寢室號:%sn",  q->name, q->num, q->sex, q->classs, q->floor, q->dorm);
            }
            q = q->next;
        }
            break;
    case 2:
        printf("nnn**********按樓號查詢**********n");
        printf("n 請輸入要查詢的樓號:");
        scanf("%s",flo);

        while (q != NULL)
        {
            if (strcmp(flo,q->floor)==0)
            {
                flag=1;
                printf("t該學生資訊n姓名:%s n學號:%d n性別:%s n班級:%s n樓號:%s n寢室號:%sn",  q->name, q->num, q->sex, q->classs, q->floor, q->dorm);
            }
            q = q->next;
        }
            break;
    case 3:
        printf("nnn**********按樓號+寢室號查詢**********n");
        printf("n 請輸入要查詢的樓號+寢室號:");
        scanf("%s%s",flo,dor);
        while (q != NULL)
        {
            if ((strcmp(flo,q->floor)==0)&&(strcmp(dor,q->dorm)==0))
            {
                flag=1;
                printf("t該學生資訊n姓名:%s n學號:%d n性別:%s n班級:%s n樓號:%s n寢室號:%sn",  q->name, q->num, q->sex, q->classs, q->floor, q->dorm);
            }
            q = q->next;
        }
            break;
    case 0:menu3(p,us);break;
    }
    if(flag==0)
    {
        printf("無此資訊!n");
        Sleep(1500);
        menu3(p,us);
    }
    if(flag==1)
    {
        printf("查詢成功!");
        printf("按回車返回選單!n");
        getchar();
        menu3(p,us);
    }
}
void amend(LinkList *p)
{
    struct student *q=p->next;
    char acc[20],poss[20],ac[20];
    int flag=0,i;
    system("cls");
    printf("請輸入要修改的賬號:");
    scanf("%s",acc);
    while(q!=NULL)
    {
        if(strcmp(q->user,acc)==0)
        {
            flag=1;
            printf("1.僅修改密碼n2.密碼賬戶均修改n");
            scanf("%d",&i);
            if(i==1)
            {
                printf("請輸入新密碼:");
                scanf("%s",poss);
                strcpy(q->mima,poss);break;
            }
            if(i==2)
            {
                printf("請輸入新賬號:");
                scanf("%s",ac);
                getchar();
                printf("請輸入新密碼:");
                scanf("%s",poss);
                strcpy(q->user,ac);
                strcpy(q->mima,poss);break;
            }
        }
        q=q->next;
    }
    if(flag==0)
    {
        printf("賬戶錯誤!n");
        printf("t請按確認鍵返回選單n");
    }
    if(flag==1)
    {
        printf("修改成功!n");
        printf("t請按確認鍵返回選單n");
    }
    getchar();
    getchar();
    menu2(p);
}
void menu33(struct student *p)
{
    int i=0;
    struct student *h=p->next->next;
    struct student *t;
    char a[20],b[20];
    system("cls");
    printf("請輸入賬戶:");
    scanf("%s",a);
    getchar();
    printf("請輸入密碼:");
    scanf("%s",b);
    getchar();
    while(h!=NULL)
    {
        if((strcmp(h->user,a)==0)&&(strcmp(h->mima,b)==0))
        {
            t=h;
            if(h->might2==2)
            {
                i=1;
                menu3(p,a);break;
                
            }
        }
        h=h->next;
    }
    if(t->might2==3)
    {
        printf("該賬號已被凍結");
        Sleep(2000);
        menu1(p);
    }
    if(i==0)
    {
        printf("密碼或賬號錯誤!n");
        Sleep(2000);
        menu1(p);
    }
}
void menu3(struct student *p,char us[20])
{
    int i;
    system("cls");
    while(1)
    {
        printf("        *****************************************n");
        printf("        *****                               *****n");
        printf("        *****     歡迎使用宿舍管理系統      *****n");
        printf("        ****         1.個人資訊瀏覽          ****n");
        printf("        ****         2.個人資訊修改          ****n");
        printf("        ****         3.宿舍資訊查詢          ****n");
        printf("        ****         4.宿舍資訊統計          ****n");
        printf("        ****         5.返回上一層            ****n");
        printf("        ****         6.退出                  ****n");
        printf("        *****************************************n");
        scanf("%d",&i);
        switch(i)
        {
        case 1:Browse(p,us);break;//個人資訊瀏覽
        case 2:modify(p,us);break;//個人資訊修改
        case 3:inquire(p,us);break;//宿舍資訊查詢
        case 4: statistics(p,us);break;//宿舍資訊統計 
        case 5:menu1(p);break;
        case 6:savestudentFile(p);exit(0);
        default:printf("t輸入不合法量n");
        }
    }
}
void menu22(struct student *p)
{
    struct student *h=p->next;
    char a[20],b[20];
    int i=0;
    system("cls");
    printf("請輸入賬戶:");
    scanf("%s",a);
    getchar();
    printf("請輸入密碼:");
    scanf("%s",b);
    getchar();
    while(h!=NULL)
    {
        if((strcmp(h->user,a)==0)&&(strcmp(h->mima,b)==0))
        {
            i=1;
            menu2(p);break;
        }
        h=h->next;
    }
    if(i==0)
    {
        printf("密碼或賬號錯誤!n");
        Sleep(2000);
        menu1(p);
    }
}
void menu2(struct student *p)
{
    int c;
    system("cls");
    while(1)
    {
        printf("        ****************************************n");
        printf("        *****                              *****n");
        printf("        *****     歡迎使用宿舍管理系統     *****n");
        printf("        ****         1.使用者資料列印         ****n");
        printf("        ****         2.新增使用者             ****n");
        printf("        ****         3.刪除使用者             ****n");
        printf("        ****         4.修改使用者資訊(許可權 )****n");
        printf("        ****         5.返回上一層           ****n");
        printf("        ****         6.修改密碼             ****n");
        printf("        ****         7.退出                 ****n");
        printf("        ****************************************n"); 
        scanf("%d",&c);
        switch(c)
        {
        case 1:Look(p);break;//使用者資料列印
        case 2:ADD(p);break;//新增使用者
        case 3:Dele(p);break;//刪除使用者
        case 4:Quan(p);break;//修改使用者許可權 
        case 5:menu1(p);break;
        case 6:amend(p);break;
        case 7:savestudentFile(p);exit(0);
        default:printf("請輸入合法量!n");
        }
    }
}
void menu1(struct student *p)
{
    int a;
    system("cls");
    while(1)
    {
        printf("        *****************************************n");
        printf("        *****                               *****n");
        printf("        *****     歡迎使用宿舍管理系統      *****n");
        printf("        *****                               *****n");
        printf("        *****          1.管理員登陸         *****n");
        printf("        *****                               *****n");
        printf("        *****          2.使用者登陸           *****n");
        printf("        *****                               *****n");
        printf("        *****                               *****n");
        printf("        *****************************************n");
        scanf("%d",&a);
        switch(a)
        {
        case 1:menu22(p);break;
        case 2:menu33(p);break;
        case 3:exit(0);break;
        default:printf("請輸入合法量!n");
        }
    }
}
void savestudentFile(struct student *L)
{
    FILE *fp;
    struct student *p;
    p=L->next;
    fp=fopen("dorm.txt","w");
    if(fp==NULL)
    {
        printf("無法開啟此檔案n");
        exit(0);
    }
    while(p)
    {
        fprintf(fp,"%d %d %s %s %s %s %s %s %s %s n",p->might1,p->might2,p->user,p->mima,p->name,p->sex,p->num,p->classs,p->floor,p->dorm);
        p=p->next;
    }
    fclose(fp);
}
void ListInsert(struct student *L,struct student *n)
{
    struct student *q=L;
    n->next=NULL;
    while(q->next!=NULL)
    {
        q=q->next;
    }
    q->next=n;
}
void readstudentput(struct student *L)
{
    FILE *fp;
    struct student *n;
    struct student *m;
    char us[20],mi[20],na[20],se[5],nu[20],cla[20],flo[20],dar[20],a[20],b[20];
    int mi1,mi2;
    fp=fopen("dorm.txt","r");
    if(fp==NULL)
    {
        fp=fopen("dorm.txt","w");
        exit(0);
    }
    else
    {
        if(fgetc(fp)==-1)
        {
            printf("此賬號初次使用:n請輸入初始賬號:");
            scanf("%s",a);
            getchar();
            printf("請輸入初始密碼:");
            scanf("%s", b); 
            getchar();
            m=(struct student *)malloc(sizeof(LinkList));
            strcpy(m->user,a);//初始賬戶
            strcpy(m->mima,b);//初始密碼
            strcpy(m->name ,"0");
            strcpy(m->sex ,"0");
            strcpy(m->num ,"0");
            strcpy(m->classs ,"0");
            strcpy(m->floor ,"0");
            strcpy(m->dorm,"0");
            m->might1=1;
            m->might2=0;
            m->next=NULL;
            L->next=m;
        }
        if(fgetc(fp)!=-1)
        {
            fseek(fp,-2L,1);
        }
        while(!feof(fp))
        {
            fscanf(fp,"%d %d %s %s %s %s %s %s %s %s ",&mi1,&mi2,us,mi,na,se,nu,cla,flo,dar);
            n=(struct student *)malloc(sizeof(struct student));
            strcpy(n->user,us);
            strcpy(n->mima,mi);
            strcpy(n->name ,na);
            strcpy(n->sex ,se);
            strcpy(n->num ,nu);
            strcpy(n->classs ,cla);
            strcpy(n->floor ,flo);
            strcpy(n->dorm,dar);
            n->might1=mi1;
            n->might2=mi2;
            ListInsert(L,n);
        }
    }
    fclose(fp);
}
int main()
{
    struct student *p;
    p = (struct student *)malloc(sizeof(struct student));
    p->next = NULL;
    readstudentput(p);
    menu1(p);
    system("pause");
    return 0;
}

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


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