怎么用C语言实现学生宿舍管理系统
发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,这篇文章主要讲解了"怎么用C语言实现学生宿舍管理系统",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么用C语言实现学生宿舍管理系统"吧!实现简单的学生
千家信息网最后更新 2025年02月23日怎么用C语言实现学生宿舍管理系统
这篇文章主要讲解了"怎么用C语言实现学生宿舍管理系统",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么用C语言实现学生宿舍管理系统"吧!
实现简单的学生宿舍基本信息管理,宿舍的基本信息包括楼号、房间号、面积、所容纳人数、已入住人数等,系统以文本菜单形式工作。
登录时:用户名为asd 密码任意
#include#include #include #include #include #include #include #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("\n\n\n\n\n\n\n############################~欢迎进入学生宿舍管理系统~##########################\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请输入用户名:[ ]\b\b\b\b\b\b\b\b\b\b\b\b"); scanf("%s",username); if (strcmp(username,"asd") == 0) { printf("\t\t请输入密码: [ ]\b\b\b\b\b\b\b\b\b\b\b\b"); 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("\n\n\n ===============================登陆成功================================="); 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("\n\n\t======================学生宿舍管理系统※※※※※※※※※※※※\n\n"); printf("\t◆◆ 1. 添加学生信息 ◆◆\n\n"); printf("\t◆◆ 2. 显示学生信息 ◆◆\n\n"); printf("\t◆◆ 3. 对学生信息进行排序 ◆◆\n\n"); printf("\t◆◆ 4. 查找学生信息 ◆◆\n\n"); printf("\t◆◆ 5. 修改学生信息 ◆◆\n\n"); printf("\t◆◆ 6. 删除学生信息 ◆◆\n\n"); printf("\t◆◆ 0. 退出系统 ◆◆\n\n"); 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("\n\t\t\t学生信息为空 !\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 s %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. 按照宿舍房间号排序\n\n"); printf("\t\t\t ▲▲ 2. 按照学号排序\n\n"); printf("\t\t\t ▲▲ 0. 返回到主菜单\n\n"); printf("\t\t------------------------------------------------------------\n"); printf("\t\t请选择您要运行的选项按(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("\n\n\t\t------------------------------------------------------------\n\n"); printf("\t\t\t ▲▲ 1. 按照楼栋房间号查找(查找同一寝室人员)\n\n"); printf("\t\t\t ▲▲ 2. 按照学院查找(查找同一学院人员)\n\n"); printf("\t\t\t ▲▲ 3. 按照班级查找(查找同一班级人员)\n\n"); printf("\t\t\t ▲▲ 4. 按照学号查找\n\n"); printf("\t\t\t ▲▲ 5. 按照姓名查找\n\n"); printf("\t\t\t ▲▲ 0. 返回到主菜单\n\n"); printf("\t\t------------------------------------------------------------\n"); printf("\t\t请选择您要运行的选项按(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要查找的宿舍房间号为:"); 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 s %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要查找的学院为:"); 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 s %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要查找的班级为:"); 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 s %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要查找的学号为:"); 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 s %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("楼栋号 房间号 房间面积 容纳数 学院 班级 学号 姓名 性别 日期 已住人数 \n"); printf("--------------------------------------------------------------------------------\n"); for(p = head ;p != NULL ;p = p->next) { if(strcmp(p->name, g) == 0) printf("%3d %5d %.1f %5d s %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) //修改学生信息 { FILE *fp; int y; printf("\n\t\t\t请输入将要修改的学生的学号:"); 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 s %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对信息进行修改:\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("\n\n\t\t------------------------------------------------------------\n\n"); printf("\t\t\t ▲▲ 1.删除某个学生信息\n\n"); printf("\t\t\t ▲▲ 2.删除全部学生信息\n\n"); printf("\t\t\t ▲▲ 0. 返回到主菜单\n\n"); printf("\t\t------------------------------------------------------------\n"); printf("\t\t请选择您要运行的选项按(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("\n\t\t\t请输入将要删除学生的学号:"); 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("写入错误 !"); } 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("\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输入学生的个数和数据(以回车结束):"); scanf("%d",&n); if(n <= 0) { printf("\n\t\t\t请输入正确的人数 !"); 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语言实现学生宿舍管理系统"的内容了,经过本文的学习后,相信大家对怎么用C语言实现学生宿舍管理系统这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
文件
房间
学生
宿舍
信息
学号
人数
学院
班级
栋号
姓名
面积
性别
日期
错误
系统
寝室
菜单
管理
内容
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网金融和金融科技的关系
软件开发还可以找啥工作
联想服务器进入u盘
根据数据库自动生成实体类的插件
网络安全黑客名言
信息网络安全的基本属性是
链接内网数据库
衡水伟创网络技术
LED视频软件开发
服务器读取u盘
手机一直显示服务器未开通
匡创网络安全
随着网络技术的频繁运用英文
软件开发工程师 招聘
sql数据库总分怎么看
网络安全方案商排行
电脑访问云服务器的方式
深圳聚百达网络技术
如何连接服务器地址
美国密歇根州+软件开发
深圳市蓝思网络技术有
三级网络技术题库2018
台州学软件开发
服务器需要什么管理员
英雄联盟数据库冥火之拥
阔天网络技术有限公司
中航证券软件开发待遇
服务器是如何自动更新的
浙江计算机网络技术口碑推荐
首都网络安全净网护网答题