《学生宿舍管理软件C语言源代码(完整版)(共12页).doc》由会员分享,可在线阅读,更多相关《学生宿舍管理软件C语言源代码(完整版)(共12页).doc(12页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上源程序代码:#include#include#include#define M 100int dirty=0; /用来判断是否已保存操作/定义一个存储学生相关信息的结构体typedef structchar S_name31; /学生姓名 char S_class31; /学生班级 char S_number16; /学生学号int D_number; /学生所在寝室的宿舍号 char S_address500; /学生地址 int S_phone20; /学生电话号码 int Total; /学生总数StudentM,St;/判断学号是否与表中所存学号重复void
2、S_number_Judge(Student S,int t)int i;for(i=1;iTotal)-1;i+)while(strcmp(Si.S_number,St.S_number)=0)printf(学号输入失败,该学号已存在,请重新输入学号!n);printf(请输入学生的学号(15个字符以内):); scanf(%s,St.S_number);getchar();i=1;/添加学生信息函数void Add(Student S)printf(请输入学生姓名(30个字符以内):);scanf(%s,S+(S-Total).S_name);getchar();/获取换行符 printf
3、(“请输入学生班级(30个字符以内):”); scanf(%s,SS-Total.S_class); getchar();printf(请输入学生的学号(15个字符以内):);scanf(%s,SS-Total.S_number); getchar();S_number_Judge(S,S-Total);/判断输入的学号是否与表中所存在的学号重复printf(请输入宿舍号码:);scanf(%d,&SS-Total.D_number); getchar(); printf(请输入学生地址:); scanf(%s,SS-Total.S_address); getchar(); printf(“请
4、输入学生电话号码:”); scanf(%s,&SS-Total. S_phone);getchar();dirty=1;printf(添加成功!nn);/修改学生信息函数void Alter(Student S)int i;int flag=0; /用来判断表中是否存在所要修改的学生的信息char name20;printf(请输入你要修改学生的姓名:); scanf(%s,name);getchar();for(i=1;iTotal;i+)if(strcmp(Si.S_name,name)=0)flag=i;if(!flag)printf(你所要修改的学生信息在表中不存在!n);elsepr
5、intf(新信息如下:n);printf(请输入学生姓名(30个字符以内):);scanf(%s,Sflag.S_name);getchar(); printf(“请输入学生班级(30个字符以内):”); scanf(%s,Sflag.S_class); getchar();printf(请输入学生的学号(15个字符以内):);scanf(%s,Sflag.S_number);getchar();S_number_Judge(S,flag);printf(请输入宿舍号:);scanf(%d,&Sflag.D_number); getchar(); printf(请输入学生地址:); scanf
6、(%s,Sflag.S_address); getchar(); printf(“请输入学生电话号码:”); scanf(%s,&Sflag. S_phone);getchar();dirty=1;printf(修改成功!n);putchar(n);/删除学生信息void Delete(Student S)int i,j;int flag=0; /用来判断表中是否存在所要删除的学生的信息char name20;printf(请输入你要删除学生的姓名:);scanf(%s,name); getchar();for(i=1;iTotal;i+)if(strcmp(Si.S_name,name)=0
7、)flag=i;if(!flag)printf(你所要删除的学生在表中不存在!);else for(i=flag;iTotal;i+) j=i+1; strcpy(Si.S_name,Sj.S_name); strcpy(Si.S_number,Sj.S_number); Si.D_number=Sj.D_number; (S-Total)-;dirty=1;printf(删除成功!);printf(nn);/显示所有学生信息函数void Display_All(Student S)int i;printf(全体学生信息如下:n);printf(学生姓名 学生班级 学生学号 宿舍号 学生地址
8、学生电话号码n);for(i=1;iTotal;i+)printf(%-20s%-20s %-15s%-5d%s-10%sn,Si.S_name,Si.S_class,Si.S_number,Si.D_number,Si.S_address,Si.S_phone);putchar(nn);/排序函数按照寝室号从小到大排序(冒泡法)void Sort_D_number(Student S)int i,j,t;char name30;char number15; char address300; char Cnumber30;for(i=1;iTotal;i+)for(j=i;jTotal;j+)
9、if(Si.D_numberSj.D_number)strcpy(name,Si.S_name);strcpy(number,Si.S_number); strcpy(address,Si.S_address); strcpy(Cnumber,Si.S_class);t=Si.D_number;strcpy(Si.S_name,Sj.S_name);strcpy(Si.S_number,Sj.S_number); strcpy(Si.S_address,Sj.S_address); strcpy(Si.S_class,Sj.S_class);Si.D_number=Sj.D_number;st
10、rcpy(Sj.S_name,name);strcpy(Sj.S_number,number); strcpy(Sj.S_address,address); strcpy(Sj.S_class,Cnumber);Sj.D_number=t;/排序函数按照学号从小到大排序(冒泡法)void Sort_S_number(Student S)int i,j,t;char name30;char number15; char address300; char Cnumber30;for(i=1;iTotal;i+)for(j=i;jTotal;j+)if(strcmp(Si.S_number,Sj.S
11、_number)0)strcpy(name,Si.S_name);strcpy(number,Si.S_number); strcpy(address,Si.S_address); strcpy(Cnumber,Si.S_class);t=Si.D_number;strcpy(Si.S_name,Sj.S_name);strcpy(Si.S_number,Sj.S_number); strcpy(Si.S_address,Sj.S_address); strcpy(Si.S_class,Sj.S_class);Si.D_number=Sj.D_number;strcpy(Sj.S_name,n
12、ame);strcpy(Sj.S_number,number); strcpy(Sj.S_address,address); strcpy(Sj.S_class,Cnumber);Sj.D_number=t;/排序函数按照班级号从小到大排序(冒泡法)void Sort_S_class (Student S)int i,j,t;char name30;char number15; char address300; char Cnumber30;for(i=1;iTotal;i+)for(j=i;jTotal;j+)if(strcmp(Si.S_class,Sj.S_class)0)strcpy(
13、name,Si.S_name);strcpy(number,Si.S_number); strcpy(address,Si.S_address); strcpy(Cnumber,Si.S_class);t=Si. D_number;strcpy(Si.S_name,Sj.S_name);strcpy(Si.S_number,Sj.S_number); strcpy(Si.S_address,Sj.S_address); strcpy(Si.S_class,Sj.S_class);Si. D_number =Sj. D_number;strcpy(Sj.S_name,name);strcpy(S
14、j.S_number,number); strcpy(Sj.S_address,address); strcpy(Sj.S_class,Cnumber);Sj. D_number =t;/查询函数以班级为关键字进行查询(顺序查找)void Query_S_class(Student S)int i,j=0;char classnumber31;printf(请输入你要查找的班级号(30个字符以内):);scanf(%s,classnumber);getchar();printf(所查找学生信息如下:n);printf(学生姓名 学生班级 学生学号 宿舍号 学生地址 学生电话号码n);for(i
15、=1;iTotal;i+)if(strcmp(classnumber,Si.S_class)=0)printf(%-20s%-20s %-15s%-5d%s-10%sn,Si.S_name, Si.S_class,Si.S_number,Si.D_number,Si.S_address,Si.S_phone); j=1; if(!j)printf(n查找失败,表中不存在该学生的信息!nn);/查询函数以姓名为关键字进行查询(顺序查找)void Query_S_name(Student S)int i,j=0;char name31;printf(请输入你要查找的学生的姓名(30个字符以内):)
16、;scanf(%s,name);getchar();printf(所查找学生信息如下:n);printf(学生姓名 学生班级 学生学号 宿舍号 学生地址 学生电话号码n);for(i=1;iTotal;i+)if(strcmp(name,Si.S_name)=0)printf(%-20s%-20s %-15s%-5d%s-10%sn,Si.S_name, Si.S_class,Si.S_number,Si.D_number,Si.S_address,Si.S_phone); j=1; if(!j)printf(n查找失败,表中不存在该学生的信息!nn);/查询函数以学号为关键字进行查询(折半查
17、找)void Query_S_number(Student S)int i,j,top,base,mid;char number15;j=0;base=1;top=S-Total;printf(请输入你要查找学生的学号:);scanf(%s,number);getchar();Sort_S_number(S); /将表中原数据按照学号从小到大排序printf(所查找学生信息如下:n);printf(学生姓名 学生班级 学生学号 宿舍号 学生地址 学生电话号码n);if(strcmp(number,S1.S_number)=0&strcmp(number,SS-Total.S_number)=0
18、)while(base0)base=mid+1;elsetop=mid-1;if(!j)printf(n查找失败,表中不存在该学生的信息!nn);/查询函数以寝室号为关键字进行查询(折半查找)void Query_D_number(Student S)int i,j,m,n,base,top,mid;j=0;base=1;top=S-Total;printf(请输入你要查询的寝室号:);scanf(%d,&i);getchar();Sort_D_number(S);/将表中原数据按照寝室号从小到大排序printf(所查找寝室信息如下:n);printf(学生姓名 学生班级 学生学号 宿舍号 学
19、生地址 学生电话号码n);if(i=S1.D_number&iTotal.D_number)while(baseS-Total)break;if(n0)while(Sn.D_number=i)printf(%-20s%-15s%-5dn,Sn.S_name,Sn.S_number,Sn.D_number); n-;if(nSmid.D_number)base=mid+1;elsetop=mid-1;if(!j)printf(n查找失败,表中不存在该寝室的信息!nn);/存储函数void Save(Student S)St Std;int i;int flag1=0,flag2=0; /判断存储
20、是否成功FILE *fp; if(fp=fopen(Dorm_Manage,w)=NULL) printf(打开文件失败!nn); flag1=1; exit(0); /结束程序for(i=1;iTotal;i+) if(fwrite(&Si,sizeof(Std),1,fp)!=1) printf(数据写入错误nn); flag2=1;exit(0); if(!flag1&!flag2) printf(数据存储成功!nn);dirty=0; fclose(fp);/加载记录函数void Load(Student S)St Std;FILE *fp;if(fp=fopen(Dorm_Manag
21、e,r)=NULL)printf(打开文件失败!nn);exit(0);while(!feof(fp)fread(&S+(S-Total),sizeof(Std),1,fp);fclose(fp); printf(加载数据成功!nn); (S-Total)-; /由于读取问题,表中个数要减去/退出程序时判断是否保存函数void Judge_Save(int i,Student S)char ch;if(i)printf(表中数据已改变,是否保存后再退出(Y/N)?:);ch=getchar();getchar();while(ch!=n&ch!=N&ch!=y&ch!=Y)printf(请输入
22、N(n)或者Y(y):);ch=getchar();getchar();if(ch=y|ch=Y)Save(S);/菜单void Menu()/菜单printf( 学生管理nn);printf(*菜单*n);printf(1.添加学生信息 | 8.按照班级号从小到大排序n”);printf(2.修改学生信息 | 9.按照寝室号从小到大排序n);printf(3.删除学生信息 | 10.按照学号从小到大排序n);printf(4.以姓名查询学生信息 | 11.显示所有学生的相关信息n);printf(5.以学号查询学生信息 | 12.保存操作n);printf(6.以寝室号查询该寝室中的全部学生
23、信息 | 13.加载记录n); printf(“7.以班级号查询该班级中的全部学生信息 | 14.退出程序n);printf(*n);void main()int i;Student S;S-Total=0;doMenu();printf(请选择所要实现的功能(请输入114中的任意一个数字):);scanf(%d,&i);getchar(); /获取换行符putchar(n);switch(i)case 1:Add(S); break;case 2:Alter(S); break;case 3:Delete(S); break;case 4:Query_S_name(S); break;cas
24、e 5:Query_S_number(S); break;case 6:Query_D_number(S); break; case 7: Query_S_class (S); break; case 8: Sort_S_class (S); printf(排序完成!nn); break;case 9:Sort_D_number(S); printf(排序完成!nn); break;case 10:Sort_S_number(S); printf(排序完成!nn); break;case 11:Display_All(S); break;case 12:Save(S); break;case 13:Load(S); break;case 14:Judge_Save(dirty,S); exit(0); break;default:printf(选择错误:请在选项到之间选择!nn); break;while(i!=14);专心-专注-专业