<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了C語言實現學生宿舍管理系統的具體程式碼,供大家參考,具體內容如下
實現簡單的學生宿舍基本資訊管理,宿舍的基本資訊包括樓號、房間號、面積、所容納人數、已入住人數等,系統以文字選單形式工作。
登入時:使用者名稱為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; //宿舍樓棟號 int roomnum; //房間號 int brnum; //宿舍樓棟號+房間號 float area; //宿舍房間面積 int rnanum; //所容納人數 char xy[100]; //學院 int bj; // 班級 int num; //學號 char name[20]; //姓名 char sex[10]; //性別 int date; //日期 struct Student *next; }Stu,*stu; int a[1000000];//記錄寢室入住人數 void save_stu(stu p); void login() { system("cls"); system("color 4E"); printf("nnnnnnn############################~歡迎進入學生宿舍管理系統~##########################n"); printf("nnntttt ★ ★ ★ ★ ★"); printf("nnnnttttttLoading"); for(int i=0;i<6;i++) { Sleep(400); printf("."); } system("cls"); char username[10]; char password; int p=0; system("color 6E"); printf("nnn ==============================歡迎使用=================================n"); for(int i = 0; i < 3; i++) { printf("nnntt請輸入使用者名稱:[ ]bbbbbbbbbbbb"); scanf("%s",username); if (strcmp(username,"asd") == 0) { printf("tt請輸入密碼: [ ]bbbbbbbbbbbb"); while((password=getch()) != 'r')//判斷是否是回車 { p++; if(password == 8)//實現backspace鍵的功能,其中backspace鍵的ascii碼是8 { putchar('b'); putchar(' '); putchar('b'); if(p>0) //最多隻能刪到沒有字元 p--; } if(!isdigit(password)&&!isalpha(password))//判斷是否是數位或字元 continue; putchar('*'); //在螢幕上列印星號 } printf("nnn ===============================登陸成功================================="); Sleep(600); return; system("pause"); } else { if(i<2) printf("使用者名稱錯誤,請重新輸入"); else { printf("n 您已連續3次將使用者名稱或密碼輸錯,系統將退出!"); exit(0); //關閉所有檔案,終止正在執行的程序 } } } } int menu_select() //主選單選項 { int a; do { system("cls"); system("color 3E"); printf("nnt======================學生宿舍管理系統※※※※※※※※※※※※nn"); printf("t◆◆ 1. 新增學生資訊 ◆◆nn"); printf("t◆◆ 2. 顯示學生資訊 ◆◆nn"); printf("t◆◆ 3. 對學生資訊進行排序 ◆◆nn"); printf("t◆◆ 4. 查詢學生資訊 ◆◆nn"); printf("t◆◆ 5. 修改學生資訊 ◆◆nn"); printf("t◆◆ 6. 刪除學生資訊 ◆◆nn"); printf("t◆◆ 0. 退出系統 ◆◆nn"); printf("t※※※※※※※※※※※※※※※================================n"); printf("t請選擇您要執行的選項按(0-6):"); scanf("%d",&a); }while(a<0 || a>6); return a; } stu ss() //將檔案中的內容讀出到連結串列中,返回值為表頭地址 { 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)) //判斷檔案位置標誌是否移動到檔案末尾 { n++; p = (stu)malloc(N); //向記憶體申請一段空間 fread(p,N,1,fp); //將fp所指向的檔案中的內容賦給p if(n == 1) { head = p; p1 = p; } else //建立連結串列 { pr = p1; p1->next = p; p1 = p; } } } if(pr != NULL) pr->next = NULL; else head = NULL; fclose(fp); //關閉檔案 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("樓棟號 房間號 樓棟房間號 房間面積 容納數 學院 班級 學號 姓名 性別 日期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該寢室已入住滿,請安排後面的學生到其它空餘寢室入住n"); head = p; save_stu(p); for(i = 1;i < n; i++) { q = (stu)malloc(sizeof(Stu)); printf("--------------------------------------------------------------------------------n"); printf("樓棟號 房間號 樓棟房間號 房間面積 容納數 學院 班級 學號 姓名 性別 日期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該寢室已入住滿,請安排後面的學生到其它空餘寢室入住n"); Sleep(300); } save_stu(q); p->next = q; p = q; } p->next=NULL; return head; } void save_stu(stu p) //將p中內容寫入檔案 { FILE *fp; //檔案指標 fp = fopen("student","ab"); //以追加的方式開啟名字為student的二進位制檔案 if(fp == NULL) { printf("檔案開啟失敗 !"); } if(fwrite(p,N,1,fp) != 1) //將p所指向的一段大小為N的內容存入fp所指向的檔案中 { printf("寫入錯誤 !"); } fclose(fp); //關閉檔案 } void output(stu head) //輸出學生資訊 { printf("--------------------------------------------------------------------------------n"); printf("樓棟號 房間號 房間面積 容納數 學院 班級 學號 姓名 性別 日期 已住人數 n"); printf("--------------------------------------------------------------------------------n"); stu p,q; int n=0; head = ss(); p = head; if(head == NULL) { printf("nttt學生資訊為空 !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 %3dn",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("nntt------------------------------------------------------------nn"); printf("ttt ▲▲ 1. 按照宿舍房間號排序nn"); printf("ttt ▲▲ 2. 按照學號排序nn"); printf("ttt ▲▲ 0. 返回到主選單nn"); printf("tt------------------------------------------------------------n"); printf("tt請選擇您要執行的選項按(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; //宿舍樓棟號 int roomnum; //房間號 int brnum; //宿舍樓棟號+房間號 float area; //宿舍房間面積 int rnanum; //所容納人數 char xy[100]; //學院 int bj; // 班級 int num; //學號 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("寫入錯誤 !"); } 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("寫入錯誤 !"); } 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("寫入錯誤 !"); } 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("寫入錯誤 !"); } 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("nntt------------------------------------------------------------nn"); printf("ttt ▲▲ 1. 按照樓棟房間號查詢(查詢同一寢室人員)nn"); printf("ttt ▲▲ 2. 按照學院查詢(查詢同一學院人員)nn"); printf("ttt ▲▲ 3. 按照班級查詢(查詢同一班級人員)nn"); printf("ttt ▲▲ 4. 按照學號查詢nn"); printf("ttt ▲▲ 5. 按照姓名查詢nn"); printf("ttt ▲▲ 0. 返回到主選單nn"); printf("tt------------------------------------------------------------n"); printf("tt請選擇您要執行的選項按(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("nttt要查詢的宿舍房間號為:"); scanf("%d",&sou); printf("--------------------------------------------------------------------------------n"); printf("樓棟號 房間號 房間面積 容納數 學院 班級 學號 姓名 性別 日期 已住人數 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 %3dn",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("nttt要查詢的學院為:"); scanf("%s",&d); printf("--------------------------------------------------------------------------------n"); printf("樓棟號 房間號 房間面積 容納數 學院 班級 學號 姓名 性別 日期 已住人數 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 %3dn",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("nttt要查詢的班級為:"); scanf("%d",&cl); printf("--------------------------------------------------------------------------------n"); printf("樓棟號 房間號 房間面積 容納數 學院 班級 學號 姓名 性別 日期 已住人數 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 %3dn",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("nttt要查詢的學號為:"); scanf("%d",&f); printf("--------------------------------------------------------------------------------n"); printf("樓棟號 房間號 房間面積 容納數 學院 班級 學號 姓名 性別 日期 已住人數 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 %3dn",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("nttt要查詢的姓名為:"); scanf("%s",g); printf("--------------------------------------------------------------------------------n"); printf("樓棟號 房間號 房間面積 容納數 學院 班級 學號 姓名 性別 日期 已住人數 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 %3dn",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) //修改學生資訊 { FILE *fp; int y; printf("nttt請輸入將要修改的學生的學號:"); scanf("%d",&y); stu p; head = ss(); p = head; while(p != NULL) { if(y == p->num) { printf("--------------------------------------------------------------------------------n"); printf("樓棟號 房間號 房間面積 容納數 學院 班級 學號 姓名 性別 日期 已住人數 n"); printf("--------------------------------------------------------------------------------n"); printf("%3d %5d %.1f %5d %10s %4d %4d %6s %3s %4d %3dn",p->buildnum,p->roomnum,p->area,p->rnanum,p->xy,p->bj,p->num,p->name,p->sex,p->date,a[p->brnum]); printf("ntt對資訊進行修改:n"); printf("--------------------------------------------------------------------------------n"); printf("樓棟號 房間號 宿舍房間號 房間面積 容納數 學院 班級 學號 姓名 性別 日期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該寢室已入住滿,請安排後面的學生到其它空餘寢室入住n"); printf("n"); } p = p->next; } fp = fopen("student","wb"); //以只寫的方式開啟名為student的二進位制檔案,開啟的同時清空檔案中的內容 if(fp == NULL) { printf("檔案開啟失敗 !"); } if(fwrite(head,N,1,fp) != 1) //將head寫入fp所指向的檔案中 { printf("寫入錯誤 !"); } fclose(fp); //關閉檔案 if(head != NULL) //如果head不為空 { p = head->next; //讓p指向第二個結點 fp = fopen("student","ab"); //以追加的方式開啟檔案 if(fp == NULL) { printf("檔案開啟失敗 !"); } while(p != NULL) { if(fwrite(p,N,1,fp) != 1)//將p寫入fp所指向的檔案中 { printf("寫入錯誤 !"); } p = p->next; } fclose(fp); } Sleep(500); } int del_menu() { int a; do { system("cls"); printf("nntt------------------------------------------------------------nn"); printf("ttt ▲▲ 1.刪除某個學生資訊nn"); printf("ttt ▲▲ 2.刪除全部學生資訊nn"); printf("ttt ▲▲ 0. 返回到主選單nn"); printf("tt------------------------------------------------------------n"); printf("tt請選擇您要執行的選項按(0-2):"); scanf("%d",&a); } while(a<0 || a>2); return a; } int del(stu head,int g) //刪除學生資訊 { FILE *fp; stu p,q; head = ss(); p = head; q = NULL; switch(g) { case 1: system("cls"); int x,y; printf("nttt請輸入將要刪除學生的學號:"); 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("nttt刪除成功 !n"); a[x]--; fp = fopen("student","wb"); if(fp == NULL) { printf("檔案開啟失敗 !"); } if(fwrite(head,N,1,fp) != 1) { printf("寫入錯誤 !"); } 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("寫入錯誤 !"); } p = p->next; } fclose(fp); } system("pause"); return 1; case 2: system("cls"); head = NULL; printf("nttt刪除成功 !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("tt輸入學生的個數和資料(以回車結束):"); scanf("%d",&n); if(n <= 0) { printf("nttt請輸入正確的人數 !"); 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("nttt修改成功 !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("tt∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷n"); printf("ttt\(^V^)メ(^V^)/ "); printf("t謝謝使用 !n"); printf("tt∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷n"); Sleep(2000); system("cls"); exit(0); } } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45