C语言实现宿舍管理系统设计
本文实例为大家分享了C语言实现宿舍管理系统的具体代码,供大家参考,具体内容如下
设计目的
【C语言实现宿舍管理系统设计】《数据结构》课程主要介绍最常用的数据结构,进行数据结构课程设计要达到以下目的:
(1)了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;
(2)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
(3)提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
(4)训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。
任务概述
设计内容:
(1)输入记录(记录数不少于12条)并建立数据文件,数据文件按关键字(姓名、 学号、房号)进行排序(冒泡、选择、插入排序等任选两种),每间房最多6人。
(2)显示记录;
(3)查找记录,用二分法实现按姓名、学号、房号查询;
(4)打印任一查询结果;
(5)删除记录;
(6)能够实现连续操作,直至选择退出为止。
设计要求:
(1)符合课题要求,实现相应功能;
(2)要求界面友好美观,操作方便易行;
(3)注意程序的实用性、安全性;
工作任务:
(1) 选择合适的数据结构,并定义数据结构的结构体;
(2)根据程序所要完成的基本要求和程序实现提示,设计出完整的算法;
(3) 按格式要求写出课程设计说明书。
项目源码
涉及到的文件操作
文件名称dorm.txtluzehua 13 153zhuyucheng 25 153heshu 37 153lijinagyang 19 153quanghehng 31 153lujinagbo 43 153zhangjiatoa 44 155lirngjie 14 155qianxin 26 155fanzijinag 34 175zhangchengye 35 275
c源码
#include#include#include #define OK1#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("\t\t========================\n"); printf("\t\t||\n"); printf("\t\t|--------|宿舍管理查询|-------|\n"); printf("\t\t||||\n"); printf("\t\t|========================|\n"); printf("\t\t||\n"); printf("\t\t|请选择你的操作 :|\n"); printf("\t\t|[1]创建学生信息|\n"); printf("\t\t|[2]按姓名排序(插入排序)|\n"); printf("\t\t|[3]按学号排序(插入排序)|\n"); printf("\t\t|[4]按房号排序(插入排序)|\n"); printf("\t\t|[5]按姓名排序(选择排序)|\n"); printf("\t\t|[6]按学号排序(选择排序)|\n"); printf("\t\t|[7]按房号排序(选择排序)|\n"); printf("\t\t|[8]按姓名排序(冒泡排序)|\n"); printf("\t\t|[9]按学号排序(冒泡排序)|\n"); printf("\t\t|[10]按房号排序(冒泡排序)|\n"); printf("\t\t|[11]按姓名查找|\n"); printf("\t\t|[12]按学号查找|\n"); printf("\t\t|[13]按房号查找|\n"); printf("\t\t|[14]插入学生信息|\n"); printf("\t\t|[15]按学号删除学生信息|\n"); printf("\t\t|[16]按姓名删除学生信息|\n"); printf("\t\t|[17]按宿舍删除学生信息|\n"); printf("\t\t|[18]显示学生记录|\n"); printf("\t\t|[19]文件加载|\n"); printf("\t\t|[20]文件保存|\n"); printf("\t\t|[21]退出操作|\n"); printf("\t\t|-======================================-|\n"); printf("\t\t|欢迎查询|\n"); printf("\t\t|-======================================-|\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("\t\t欢迎进入宿舍管理查询界面\n\n\n"); 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学生记录已被删除完\n\n"); }else{printf("删除后的学生信息:\n"); PrintSort(L); }ReturnMenu(); break; case 16:DeleteName(L); if(L.length==0){printf("\n学生记录已被删除完\n\n"); }else{printf("删除后的学生信息:\n"); PrintSort(L); }ReturnMenu(); break; case 17:DeleteRoom(L); if(L.length==0){printf("\n该房间没有学生\n\n"); }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; iL.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.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.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.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 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 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 low; k--){if(L.elem[k].Room==L.elem[k-1].Room)PrintSearch1(L,k-1); }for(int k=m; kL.elem[m].Room)low=m+1; elsehigh=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; elsehigh=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; elsehigh=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; }elsereturn ERROR; }//-----------------------------------------------------------------------判断不存在是否继续查找--------------------------------------------------------Status Judge2(char ch){scanf("%c",&ch); printf("没有此学生,是否继续:是的话按Y,否则按任意键返回"); fflush(stdin); scanf("%c",&ch); if(ch=='Y'){system("cls"); return OK; }elsereturn ERROR; }//--------------------------------------------------------------------无学生记录返回主界面------------------------------------------------------------------Status Judge3(){printf("已经没有学生记录\n"); ReturnMenu(); menu(); return OK; }//------------------------------------------------------------------------判断学生学号是否一样-------------------------------------------------------------- Status JudgeNO(int NO,Linklist L){int j=0; for(int i=0; i 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) 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("\n\n请输入要删除学生的姓名:"); gets(student.name); for(i=0; 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("\n\n请输入要删除学生的宿舍号:"); scanf("%d",&student.Room); printf("删除该宿舍学生的信息为:\n"); printf("\t\t姓名学号房号\n"); for(i=0; i 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("打开文件失败!\n\n"); exit(0); }while(!feof(fp))fread(&L.elem[L.length],sizeof(Student),1,fp); fclose(fp); printf("加载数据成功!\n\n"); } //--------------------------------------------------------------------------保存文件 ----------------------------------------------------------------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("打开文件失败!\n\n"); flag1=1; exit(0); }for(i=0; i
项目效果截图
文章图片
文章图片
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
推荐阅读
- C语言|C语言 Freertos的递归锁详解
- 不借助|不借助 Fiori client,直接在手机浏览器里调用 SAP UI5 BarcodeScanner 实现条形码扫描的可能性()
- 《手把手教你》系列基础篇(七十六)-java+|《手把手教你》系列基础篇(七十六)-java+ selenium自动化测试-框架设计基础-TestNG实现DDT - 下篇(详解教程)
- 面试题详解(如何用Redis实现分布式锁())
- Java实现二叉堆、大顶堆和小顶堆
- pygame实现贪吃蛇游戏
- java实现打砖块_java实现打砖块小游戏
- 苹果2018春季发布会_苹果春季发布会 这几大猜想能实现吗()
- ECMAScript|JavaScript性能优化具体实现-第二篇
- python语言表白语句简单_简短的表白情话