您好,登錄后才能下訂單哦!
這篇文章主要講解了“怎么用C語言實(shí)現(xiàn)學(xué)生宿舍管理系統(tǒng)”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“怎么用C語言實(shí)現(xiàn)學(xué)生宿舍管理系統(tǒng)”吧!
實(shí)現(xiàn)簡(jiǎn)單的學(xué)生宿舍基本信息管理,宿舍的基本信息包括樓號(hào)、房間號(hào)、面積、所容納人數(shù)、已入住人數(shù)等,系統(tǒng)以文本菜單形式工作。
登錄時(shí):用戶名為asd 密碼任意
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> #include <ctype.h> #include <malloc.h> #include <windows.h> #define N sizeof(struct Student) typedef struct Student { int buildnum; //宿舍樓棟號(hào) int roomnum; //房間號(hào) int brnum; //宿舍樓棟號(hào)+房間號(hào) float area; //宿舍房間面積 int rnanum; //所容納人數(shù) char xy[100]; //學(xué)院 int bj; // 班級(jí) int num; //學(xué)號(hào) char name[20]; //姓名 char sex[10]; //性別 int date; //日期 struct Student *next; }Stu,*stu; int a[1000000];//記錄寢室入住人數(shù) void save_stu(stu p); void login() { system("cls"); system("color 4E"); printf("\n\n\n\n\n\n\n############################~歡迎進(jìn)入學(xué)生宿舍管理系統(tǒng)~##########################\n"); printf("\n\n\n\t\t\t\t ★ ★ ★ ★ ★"); printf("\n\n\n\n\t\t\t\t\t\tLoading"); for(int i=0;i<6;i++) { Sleep(400); printf("."); } system("cls"); char username[10]; char password; int p=0; system("color 6E"); printf("\n\n\n ==============================歡迎使用=================================\n"); for(int i = 0; i < 3; i++) { printf("\n\n\n\t\t請(qǐng)輸入用戶名:[ ]\b\b\b\b\b\b\b\b\b\b\b\b"); scanf("%s",username); if (strcmp(username,"asd") == 0) { printf("\t\t請(qǐng)輸入密碼: [ ]\b\b\b\b\b\b\b\b\b\b\b\b"); while((password=getch()) != '\r')//判斷是否是回車 { p++; if(password == 8)//實(shí)現(xiàn)backspace鍵的功能,其中backspace鍵的ascii碼是8 { putchar('\b'); putchar(' '); putchar('\b'); if(p>0) //最多只能刪到?jīng)]有字符 p--; } if(!isdigit(password)&&!isalpha(password))//判斷是否是數(shù)字或字符 continue; putchar('*'); //在屏幕上打印星號(hào) } printf("\n\n\n ===============================登陸成功================================="); Sleep(600); return; system("pause"); } else { if(i<2) printf("用戶名錯(cuò)誤,請(qǐng)重新輸入"); else { printf("\n 您已連續(xù)3次將用戶名或密碼輸錯(cuò),系統(tǒng)將退出!"); exit(0); //關(guān)閉所有文件,終止正在執(zhí)行的進(jìn)程 } } } } int menu_select() //主菜單選項(xiàng) { int a; do { system("cls"); system("color 3E"); printf("\n\n\t======================學(xué)生宿舍管理系統(tǒng)※※※※※※※※※※※※\n\n"); printf("\t◆◆ 1. 添加學(xué)生信息 ◆◆\n\n"); printf("\t◆◆ 2. 顯示學(xué)生信息 ◆◆\n\n"); printf("\t◆◆ 3. 對(duì)學(xué)生信息進(jìn)行排序 ◆◆\n\n"); printf("\t◆◆ 4. 查找學(xué)生信息 ◆◆\n\n"); printf("\t◆◆ 5. 修改學(xué)生信息 ◆◆\n\n"); printf("\t◆◆ 6. 刪除學(xué)生信息 ◆◆\n\n"); printf("\t◆◆ 0. 退出系統(tǒng) ◆◆\n\n"); printf("\t※※※※※※※※※※※※※※※================================\n"); printf("\t請(qǐng)選擇您要運(yùn)行的選項(xiàng)按(0-6):"); scanf("%d",&a); }while(a<0 || a>6); return a; } stu ss() //將文件中的內(nèi)容讀出到鏈表中,返回值為表頭地址 { FILE *fp; //文件指針 int n = 0; stu head = NULL; stu p1,p,pr = NULL; fp=fopen("student","ab+"); //以只讀的方式打開文件 if(fp == NULL) { printf("文件打開失敗 !\n"); } else { while(!feof(fp)) //判斷文件位置標(biāo)志是否移動(dòng)到文件末尾 { n++; p = (stu)malloc(N); //向內(nèi)存申請(qǐng)一段空間 fread(p,N,1,fp); //將fp所指向的文件中的內(nèi)容賦給p if(n == 1) { head = p; p1 = p; } else //創(chuàng)建鏈表 { pr = p1; p1->next = p; p1 = p; } } } if(pr != NULL) pr->next = NULL; else head = NULL; fclose(fp); //關(guān)閉文件 return head; //返回頭指針 } Student *input(int n) { int i; stu head,p,q; if(n <= 0) return NULL; p = (stu)malloc(sizeof(Stu)); printf("--------------------------------------------------------------------------------\n"); printf("樓棟號(hào) 房間號(hào) 樓棟房間號(hào) 房間面積 容納數(shù) 學(xué)院 班級(jí) 學(xué)號(hào) 姓名 性別 日期\n"); printf("--------------------------------------------------------------------------------\n"); scanf("%d%d%d%f%d%s%d%d%s%s%d",&p->buildnum,&p->roomnum,&p->brnum,&p->area,&p->rnanum,&p->xy,&p->bj,&p->num,&p->name,&p->sex,&p->date); a[p->brnum]++; if(a[p->brnum] == p->rnanum) printf("\n該寢室已入住滿,請(qǐng)安排后面的學(xué)生到其它空余寢室入住\n"); head = p; save_stu(p); for(i = 1;i < n; i++) { q = (stu)malloc(sizeof(Stu)); printf("--------------------------------------------------------------------------------\n"); printf("樓棟號(hào) 房間號(hào) 樓棟房間號(hào) 房間面積 容納數(shù) 學(xué)院 班級(jí) 學(xué)號(hào) 姓名 性別 日期\n"); printf("--------------------------------------------------------------------------------\n"); scanf("%d%d%d%f%d%s%d%d%s%s%d",&q->buildnum,&q->roomnum,&q->brnum,&q->area,&q->rnanum,&q->xy,&q->bj,&q->num,&q->name,&q->sex,&q->date); printf("\n"); a[q->brnum]++; if(a[q->brnum] == q->rnanum) { printf("\n該寢室已入住滿,請(qǐng)安排后面的學(xué)生到其它空余寢室入住\n"); Sleep(300); } save_stu(q); p->next = q; p = q; } p->next=NULL; return head; } void save_stu(stu p) //將p中內(nèi)容寫入文件 { FILE *fp; //文件指針 fp = fopen("student","ab"); //以追加的方式打開名字為student的二進(jìn)制文件 if(fp == NULL) { printf("文件打開失敗 !"); } if(fwrite(p,N,1,fp) != 1) //將p所指向的一段大小為N的內(nèi)容存入fp所指向的文件中 { printf("寫入錯(cuò)誤 !"); } fclose(fp); //關(guān)閉文件 } void output(stu head) //輸出學(xué)生信息 { printf("--------------------------------------------------------------------------------\n"); printf("樓棟號(hào) 房間號(hào) 房間面積 容納數(shù) 學(xué)院 班級(jí) 學(xué)號(hào) 姓名 性別 日期 已住人數(shù) \n"); printf("--------------------------------------------------------------------------------\n"); stu p,q; int n=0; head = ss(); p = head; if(head == NULL) { printf("\n\t\t\t學(xué)生信息為空 !\n"); } else { for(p = head ;p != NULL ;p = p->next) { for(q = head;q != NULL ;q=q->next) { if(p->brnum == q->brnum) n++; } a[p->brnum]=n; printf("%3d %5d %.1f %5d %10s %4d %4d %6s %3s %4d %3d\n",p->buildnum,p->roomnum,p->area,p->rnanum,p->xy,p->bj,p->num,p->name,p->sex,p->date, n); n=0; } } } int sort_menu() //排序選擇菜單 { int a; do { system("cls"); printf("\n\n\t\t------------------------------------------------------------\n\n"); printf("\t\t\t ▲▲ 1. 按照宿舍房間號(hào)排序\n\n"); printf("\t\t\t ▲▲ 2. 按照學(xué)號(hào)排序\n\n"); printf("\t\t\t ▲▲ 0. 返回到主菜單\n\n"); printf("\t\t------------------------------------------------------------\n"); printf("\t\t請(qǐng)選擇您要運(yùn)行的選項(xiàng)按(0-2):"); scanf("%d",&a); } while(a<0 || a>2); return a; } int sort(stu head,int n) //排序 { FILE *fp; head = ss(); stu p,q; int buildnum; //宿舍樓棟號(hào) int roomnum; //房間號(hào) int brnum; //宿舍樓棟號(hào)+房間號(hào) float area; //宿舍房間面積 int rnanum; //所容納人數(shù) char xy[100]; //學(xué)院 int bj; // 班級(jí) int num; //學(xué)號(hào) char name[20]; //姓名 char sex[10]; //性別 int date; //日期 switch(n) { case 1: system("cls"); for(p = head; p != NULL; p = p->next) { for(q = p->next; q != NULL; q = q->next) { if(p->brnum > q->brnum) { buildnum = q->buildnum; roomnum = q->roomnum; brnum = q->brnum; area = q->area; rnanum = q->rnanum; strcpy(xy,q->xy); bj = q->bj; num = q->num; strcpy(name,q->name); strcpy(sex,q->sex); date = q->date; q->buildnum = p->buildnum; q->roomnum = p->roomnum; q->brnum = p->brnum; q->area = p->area; strcpy(q->xy,p->xy); q->bj = p->bj; q->num = p->num; strcpy(q->name,p->name); strcpy(q->sex,p->sex); q->date = p->date; p->buildnum = buildnum; p->roomnum = roomnum; p->brnum = brnum; p->area = area; strcpy(p->xy,xy); p->bj = bj; p->num = num; strcpy(p->name,name); strcpy(p->sex,sex); p->date = date; } } } fp = fopen("student","wb"); if(fp == NULL) { printf("文件打開失敗 !"); } if(fwrite(head,N,1,fp) != 1) { printf("寫入錯(cuò)誤 !"); } fclose(fp); if(head != NULL) { p = head->next; fp = fopen("student","ab"); if(fp == NULL) { printf("文件打開失敗 !"); } while(p != NULL) { if(fwrite(p,N,1,fp) != 1) { printf("寫入錯(cuò)誤 !"); } p = p->next; } fclose(fp); } output(head); system("pause"); return 1; case 2: system("cls"); for(p = head; p != NULL; p = p->next) { for(q = p->next;q != NULL; q = q->next) { if(p->num > q->num) { buildnum = q->buildnum; roomnum = q->roomnum; brnum = q->brnum; area = q->area; strcpy(xy,q->xy); bj = q->bj; num = q->num; strcpy(name,q->name); strcpy(sex,q->sex); date = q->date; q->buildnum = p->buildnum; q->roomnum = p->roomnum; q->brnum = p->brnum; q->area = p->area; strcpy(q->xy,p->xy); q->bj = p->bj; q->num = p->num; strcpy(q->name,p->name); strcpy(q->sex,p->sex); q->date = p->date; p->buildnum = buildnum; p->roomnum = roomnum; p->brnum = brnum; p->area = area; strcpy(p->xy,xy); p->bj = bj; p->num = num; strcpy(p->name,name); strcpy(p->sex,sex); p->date = date; } } } fp = fopen("student","wb"); if(fp == NULL) { printf("文件打開失敗 !"); } if(fwrite(head,N,1,fp) != 1) { printf("寫入錯(cuò)誤 !"); } fclose(fp); if(head != NULL) { p = head->next; fp = fopen("student","ab"); if(fp == NULL) { printf("文件打開失敗 !"); } while(p != NULL) { if(fwrite(p,N,1,fp) != 1) { printf("寫入錯(cuò)誤 !"); } p = p->next; } fclose(fp); } output(head); system("pause"); return 1; case 0: system("pause"); return 0; } } int find_menu() //查找菜單 { int a; do { system("cls"); printf("\n\n\t\t------------------------------------------------------------\n\n"); printf("\t\t\t ▲▲ 1. 按照樓棟房間號(hào)查找(查找同一寢室人員)\n\n"); printf("\t\t\t ▲▲ 2. 按照學(xué)院查找(查找同一學(xué)院人員)\n\n"); printf("\t\t\t ▲▲ 3. 按照班級(jí)查找(查找同一班級(jí)人員)\n\n"); printf("\t\t\t ▲▲ 4. 按照學(xué)號(hào)查找\n\n"); printf("\t\t\t ▲▲ 5. 按照姓名查找\n\n"); printf("\t\t\t ▲▲ 0. 返回到主菜單\n\n"); printf("\t\t------------------------------------------------------------\n"); printf("\t\t請(qǐng)選擇您要運(yùn)行的選項(xiàng)按(0-5):"); scanf("%d",&a); }while(a<0 || a>5); return a; } int find(stu head,int n) //查找選擇菜單 { stu p; head = ss(); switch(n) { case 1: system("cls"); int sou; printf("\n\t\t\t要查找的宿舍房間號(hào)為:"); scanf("%d",&sou); printf("--------------------------------------------------------------------------------\n"); printf("樓棟號(hào) 房間號(hào) 房間面積 容納數(shù) 學(xué)院 班級(jí) 學(xué)號(hào) 姓名 性別 日期 已住人數(shù) \n"); printf("--------------------------------------------------------------------------------\n"); for(p = head ;p != NULL ;p = p->next) { if(p->brnum == sou) printf("%3d %5d %.1f %5d %10s %4d %4d %6s %3s %4d %3d\n",p->buildnum,p->roomnum,p->area,p->rnanum,p->xy,p->bj,p->num,p->name,p->sex,p->date,a[p->brnum]); } system("pause"); return 1; case 2: system("cls"); p = head; char d[30]; printf("\n\t\t\t要查找的學(xué)院為:"); scanf("%s",&d); printf("--------------------------------------------------------------------------------\n"); printf("樓棟號(hào) 房間號(hào) 房間面積 容納數(shù) 學(xué)院 班級(jí) 學(xué)號(hào) 姓名 性別 日期 已住人數(shù) \n"); printf("--------------------------------------------------------------------------------\n"); for(p = head ;p != NULL ;p = p->next) { if(strcmp(p->xy,d) == 0) printf("%3d %5d %.1f %5d %10s %4d %4d %6s %3s %4d %3d\n",p->buildnum,p->roomnum,p->area,p->rnanum,p->xy,p->bj,p->num,p->name,p->sex,p->date,a[p->brnum]); } system("pause"); return 1; case 3: system("cls"); int cl; printf("\n\t\t\t要查找的班級(jí)為:"); scanf("%d",&cl); printf("--------------------------------------------------------------------------------\n"); printf("樓棟號(hào) 房間號(hào) 房間面積 容納數(shù) 學(xué)院 班級(jí) 學(xué)號(hào) 姓名 性別 日期 已住人數(shù) \n"); printf("--------------------------------------------------------------------------------\n"); for(p = head ;p != NULL ;p = p->next) { if(p->bj == cl) printf("%3d %5d %.1f %5d %10s %4d %4d %6s %3s %4d %3d\n",p->buildnum,p->roomnum,p->area,p->rnanum,p->xy,p->bj,p->num,p->name,p->sex,p->date,a[p->brnum]); } system("pause"); return 1; case 4: system("cls"); int f; printf("\n\t\t\t要查找的學(xué)號(hào)為:"); scanf("%d",&f); printf("--------------------------------------------------------------------------------\n"); printf("樓棟號(hào) 房間號(hào) 房間面積 容納數(shù) 學(xué)院 班級(jí) 學(xué)號(hào) 姓名 性別 日期 已住人數(shù) \n"); printf("--------------------------------------------------------------------------------\n"); for(p = head ;p != NULL ;p = p->next) { if(p->num == f) printf("%3d %5d %.1f %5d %10s %4d %4d %6s %3s %4d %3d\n",p->buildnum,p->roomnum,p->area,p->rnanum,p->xy,p->bj,p->num,p->name,p->sex,p->date,a[p->brnum]); } system("pause"); return 1; case 5: system("cls"); char g[20]; printf("\n\t\t\t要查找的姓名為:"); scanf("%s",g); printf("--------------------------------------------------------------------------------\n"); printf("樓棟號(hào) 房間號(hào) 房間面積 容納數(shù) 學(xué)院 班級(jí) 學(xué)號(hào) 姓名 性別 日期 已住人數(shù) \n"); printf("--------------------------------------------------------------------------------\n"); for(p = head ;p != NULL ;p = p->next) { if(strcmp(p->name, g) == 0) printf("%3d %5d %.1f %5d %10s %4d %4d %6s %3s %4d %3d\n",p->buildnum,p->roomnum,p->area,p->rnanum,p->xy,p->bj,p->num,p->name,p->sex,p->date,a[p->brnum]); } system("pause"); return 1; case 0: system("pause"); return 0; } } int alter(stu head) //修改學(xué)生信息 { FILE *fp; int y; printf("\n\t\t\t請(qǐng)輸入將要修改的學(xué)生的學(xué)號(hào):"); scanf("%d",&y); stu p; head = ss(); p = head; while(p != NULL) { if(y == p->num) { printf("--------------------------------------------------------------------------------\n"); printf("樓棟號(hào) 房間號(hào) 房間面積 容納數(shù) 學(xué)院 班級(jí) 學(xué)號(hào) 姓名 性別 日期 已住人數(shù) \n"); printf("--------------------------------------------------------------------------------\n"); printf("%3d %5d %.1f %5d %10s %4d %4d %6s %3s %4d %3d\n",p->buildnum,p->roomnum,p->area,p->rnanum,p->xy,p->bj,p->num,p->name,p->sex,p->date,a[p->brnum]); printf("\n\t\t對(duì)信息進(jìn)行修改:\n"); printf("--------------------------------------------------------------------------------\n"); printf("樓棟號(hào) 房間號(hào) 宿舍房間號(hào) 房間面積 容納數(shù) 學(xué)院 班級(jí) 學(xué)號(hào) 姓名 性別 日期\n"); printf("--------------------------------------------------------------------------------\n"); scanf("%d%d%d%f%d%s%d%d%s%s%d",&p->buildnum,&p->roomnum,&p->brnum,&p->area,&p->rnanum,&p->xy,&p->bj,&p->num,&p->name,&p->sex,&p->date); a[p->brnum]++; if(a[p->brnum] == p->rnanum) printf("\n該寢室已入住滿,請(qǐng)安排后面的學(xué)生到其它空余寢室入住\n"); printf("\n"); } p = p->next; } fp = fopen("student","wb"); //以只寫的方式打開名為student的二進(jìn)制文件,打開的同時(shí)清空文件中的內(nèi)容 if(fp == NULL) { printf("文件打開失敗 !"); } if(fwrite(head,N,1,fp) != 1) //將head寫入fp所指向的文件中 { printf("寫入錯(cuò)誤 !"); } fclose(fp); //關(guān)閉文件 if(head != NULL) //如果head不為空 { p = head->next; //讓p指向第二個(gè)結(jié)點(diǎn) fp = fopen("student","ab"); //以追加的方式打開文件 if(fp == NULL) { printf("文件打開失敗 !"); } while(p != NULL) { if(fwrite(p,N,1,fp) != 1)//將p寫入fp所指向的文件中 { printf("寫入錯(cuò)誤 !"); } p = p->next; } fclose(fp); } Sleep(500); } int del_menu() { int a; do { system("cls"); printf("\n\n\t\t------------------------------------------------------------\n\n"); printf("\t\t\t ▲▲ 1.刪除某個(gè)學(xué)生信息\n\n"); printf("\t\t\t ▲▲ 2.刪除全部學(xué)生信息\n\n"); printf("\t\t\t ▲▲ 0. 返回到主菜單\n\n"); printf("\t\t------------------------------------------------------------\n"); printf("\t\t請(qǐng)選擇您要運(yùn)行的選項(xiàng)按(0-2):"); scanf("%d",&a); } while(a<0 || a>2); return a; } int del(stu head,int g) //刪除學(xué)生信息 { FILE *fp; stu p,q; head = ss(); p = head; q = NULL; switch(g) { case 1: system("cls"); int x,y; printf("\n\t\t\t請(qǐng)輸入將要?jiǎng)h除學(xué)生的學(xué)號(hào):"); scanf("%d",&y); while(p != NULL && p->num != y) { q = p; p = p->next; x = p->brnum; } if(p != NULL) { if(q == NULL) { head = head->next; } else if(p->next!=NULL) { q->next = p->next; } else q->next=NULL; } free(p); printf("\n\t\t\t刪除成功 !\n"); a[x]--; fp = fopen("student","wb"); if(fp == NULL) { printf("文件打開失敗 !"); } if(fwrite(head,N,1,fp) != 1) { printf("寫入錯(cuò)誤 !"); } fclose(fp); if(head != NULL) { p = head->next; fp = fopen("student","ab"); if(fp == NULL) { printf("文件打開失敗 !"); } while(p != NULL) { if(fwrite(p,N,1,fp) != 1) { printf("寫入錯(cuò)誤 !"); } p = p->next; } fclose(fp); } system("pause"); return 1; case 2: system("cls"); head = NULL; printf("\n\t\t\t刪除成功 !\n"); fp=fopen("student","wb"); fclose(fp); system("pause"); return 1; case 0: return 0; } } int main() { int m,n,x,y,g; login(); stu head = NULL; for(;;) { switch(menu_select()) { case 1: system("cls"); printf("\t\t輸入學(xué)生的個(gè)數(shù)和數(shù)據(jù)(以回車結(jié)束):"); scanf("%d",&n); if(n <= 0) { printf("\n\t\t\t請(qǐng)輸入正確的人數(shù) !"); Sleep(500); break; } else { head = input(n); break; } case 2: system("cls"); system("color 5E"); output(head); system("pause"); break; case 3: do { x = sort(head,sort_menu()); }while(x != 0); break; case 4: system("cls"); do { y = find(head,find_menu()); }while(y != 0); break; case 5: system("cls"); alter(head); printf("\n\t\t\t修改成功 !\n"); system("pause"); break; case 6: system("cls"); do { g = del(head,del_menu()); }while(g != 0); system("pause"); break; case 0: system("cls"); printf("\t\t∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷\n"); printf("\t\t\t\\(^V^)メ(^V^)/ "); printf("\t謝謝使用 !\n"); printf("\t\t∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷\n"); Sleep(2000); system("cls"); exit(0); } } }
感謝各位的閱讀,以上就是“怎么用C語言實(shí)現(xiàn)學(xué)生宿舍管理系統(tǒng)”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)怎么用C語言實(shí)現(xiàn)學(xué)生宿舍管理系統(tǒng)這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(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)容。