学生宿舍管理软件C语言源代码(完整版)_第1页
学生宿舍管理软件C语言源代码(完整版)_第2页
学生宿舍管理软件C语言源代码(完整版)_第3页
学生宿舍管理软件C语言源代码(完整版)_第4页
学生宿舍管理软件C语言源代码(完整版)_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、源程序代码:#include <stdio.h>#include <string.h> #include <stdlib.h>#define M 100 int dirty=0; / 用来判断是否已保存操作/ 定义一个存储学生相关信息的结构体typedef structchar S_name31; / 学生姓名char S_class31; / 学生班级char S_number16; / 学生学号int D_number; / 学生所在寝室的宿舍号 char S_address500; /学生地址int S_phone20; / 学生电话号码 int To

2、tal; / 学生总数 StudentM,St;/ 判断学号是否与表中所存学号重复void S_number_Judge(Student S, int t)int i;for (i=1;i<=(S->Total)-1;i+)while (strcmp(Si.S_number,St.S_number)=0)printf( "学号输入失败 , 该学号已存在 ,请重新输入学号 !n" ); printf( "请输入学生的学号 (15 个字符以内 ):" );scanf("%s" ,St.S_number);getchar();i

3、=1;/ 添加学生信息函数void Add(Student S)printf( " 请输入学生姓名 (30个字符以内 ):" );scanf( "%s" ,S+(S->Total).S_name);getchar(); / 获取换行符printf( “请输入学生班级 (30 个字符以内 ): ”);scanf("%s",SS->Total.S_class);getchar();printf( " 请输入学生的学号 (15个字符以内 ):" ); scanf( "%s" ,SS->

4、;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( “请输入学生电话号码 : ”); scanf("%s

5、",&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;i<=S->Total;i+)if (strcmp(Si.S_name,name

6、)=0)flag=i;if (!flag)printf( " 你所要修改的学生信息在表中不存在!n" );elseprintf( " 新信息如下 :n" );printf( "请输入学生姓名 (30 个字符以内 ):" );scanf( "%s" ,Sflag.S_name);getchar();printf( “请输入学生班级 (30 个字符以内 ): ”);scanf("%s",Sflag.S_class);getchar();printf( "请输入学生的学号 (15 个字符以内

7、 ):" ); scanf( "%s" ,Sflag.S_number);getchar(); S_number_Judge(S,flag); printf( " 请输入宿舍号 :" ); scanf( "%d",&Sflag.D_number); getchar();printf(" 请输入学生地址 :"); scanf("%s",Sflag.S_address); getchar();printf( “请输入学生电话号码 : ”); scanf("%s"

8、,&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;i<=S->Total;i+)if (strcmp(Si.

9、S_name,name)=0)flag=i;if (!flag)printf( "你所要删除的学生在表中不存在! ");elsefor (i=flag;i<S->Total;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_A

10、ll(Student S)int i;printf( " 全体学生信息如下 :n" );学生电话号码 n" );printf( " 学生姓名 学生班级 学生学号 宿舍号 学生地址for (i=1;i<=S->Total;i+)number,Si.D_number ,Si.S_addprintf( "%-20s %-20s %-15s%-5d%s-10%sn" ,Si.S_name, Si.S_class, Si.S ress,Si.S_phone );putchar( 'nn' );/ 排序函数按照寝室号从

11、小到大排序 (冒泡法 )void Sort_D_number(Student S)int i,j,t;char name30;char number15;char address300;char Cnumber30;for (i=1;i<=S->Total;i+)for (j=i;j<=S->Total;j+)if (Si.D_number>Sj.D_number)strcpy(name,Si.S_name);strcpy(number,Si.S_number);strcpy(address,Si.S_address);strcpy(Cnumber,Si.S_cl

12、ass);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(Sj.S_number,number);strcpy(Sj.S_address,address);strcpy(Sj.S_class,Cnumber);Sj.D_number=t;/ 排序函数按照学号从小到

13、大排序 ( 冒泡法 )void Sort_S_number(Student S)int i,j,t;char name30;char number15;char address300;char Cnumber30;for (i=1;i<=S->Total;i+)for (j=i;j<=S->Total;j+)if (strcmp(Si.S_number,Sj.S_number)>0) strcpy(name,Si.S_name); strcpy(number,Si.S_number); strcpy(address,Si.S_address);strcpy(Cnu

14、mber,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(Sj.S_number,number);strcpy(Sj.S_address,address);strcpy(Sj.S_class,Cnumber);Sj.D_number

15、=t;/ 排序函数按照班级号从小到大排序 (冒泡法 )void Sort_S_class (Student S)int i,j,t;char name30;char number15;char address300;char Cnumber30;for(i=1;i<=S->Total;i+)for(j=i;j<=S->Total;j+)if(strcmp(Si.S_class,Sj.S_class)>0)strcpy(name,Si.S_name);strcpy(number,Si.S_number);strcpy(address,Si.S_address); s

16、trcpy(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(Sj.S_number,number);strcpy(Sj.S_address,address);strcpy(Sj.S_class,Cnumber);S

17、j. D_number =t;/ 查询函数以班级为关键字进行查询 ( 顺序查找 )void Query_S_class(Student S)int i,j=0;char classnumber31;printf(" 请输入你要查找的班级号 (30 个字符以内 ):"); scanf("%s",classnumber);getchar();printf(" 所查找学生信息如下 :n");学生电话号码 n");printf(" 学生姓名 学生班级 学生学号 宿舍号 学生地址 for(i=1;i<=S->To

18、tal;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;5print

19、f( " 请输入你要查找的学生的姓名 (30个字符以内 ):" ); scanf( "%s" ,name);getchar();printf( " 所查找学生信息如下 :n" );学生地址 学生电话号码 n" );printf( " 学生姓名 学生班级 学生学号 宿舍号 for (i=1;i<=S->Total;i+)if (strcmp(name,Si.S_name)=0)printf( "%-20s %-20s %-15s%-5d%s-10%sn" ,Si.S_name,Si.S

20、_class, Si.S_number,Si.D_number ,Si.S_address,Si.S_phone ); j=1;if (!j)printf( "n 查找失败 , 表中不存在该学生的信息 !nn" );/ 查询函数以学号为关键字进行查询 ( 折半查找 )void Query_S_number(Student S)int i,j,top,base,mid;char number15;j=0;base=1;top=S->Total;printf( " 请输入你要查找学生的学号 :" );scanf( "%s" ,num

21、ber);getchar();Sort_S_number(S); / 将表中原数据按照学号从小到大排序 printf( " 所查找学生信息如下 :n" );学生电话号码 n" );printf( " 学生姓名 学生班级 学生学号 宿舍号 学生地址 if (strcmp(number,S1.S_number)>=0&&strcmp(number,SS->Total.S_number)<=0) while (base<=top)mid=(base+top)/2;if (strcmp(number,Smid.S_numb

22、er)=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 ); putchar( 'n' );j=1;break ;else if (strcmp(number,Smid.S_number)>0)base=mid+1;elsetop=mid-1;if (!j)printf( "n 查找失败 , 表中不存在该学生的信息 !nn" );/ 查询函数以寝室号为关键字

23、进行查询 ( 折半查找 )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( "学生姓名 学生班级 学生学号 宿舍号 学生地址 学生电话号码 n" );

24、 if (i>=S1.D_number&&i<=SS->Total.D_number)while (base<=top)mid=(base+top)/2;if (i=Smid.D_number)m=mid;n=mid-1;while (Sm.D_number=i)printf( "%-20s%-20s %-15s%-5d %s-10%sn" ,Sm.S_name,Si.S_class, Sm.S_number,Sm.D_number ,Si.S_address,Si.S_phone );m+;if (m>S->Total)

25、break ;if (n>0)while (Sn.D_number=i)printf( "%-20s%-15s%-5dn" ,Sn.S_name,Sn.S_number,Sn.D_number);7n-;8if (n<1)break ;j=1;putchar( 'n');break ;else if (i>Smid.D_number)base=mid+1;else top=mid-1; if (!j)!nn" );printf( "n 查找失败 , 表中不存在该寝室的信息 / 存储函数 void Save(Student

26、 S)St Std;int i;int flag1=0,flag2=0; / 判断存储是否成功 FILE *fp;if (fp=fopen( "Dorm_Manage", "w" )=NULL)printf(" 打开文件失败 !nn" );flag1=1;exit(0); / 结束程序for (i=1;i<=S->Total;i+)if (fwrite(&Si, sizeof (Std),1,fp)!=1) printf(" 数据写入错误 nn" );flag2=1;exit(0);if (!f

27、lag1&&!flag2)printf(" 数据存储成功 !nn" );dirty=0;fclose(fp);/ 加载记录函数void Load(Student S)St Std;FILE *fp;if (fp=fopen( "Dorm_Manage", "r" )=NULL) printf( " 打开文件失败 !nn" ); exit(0);while (!feof(fp)fread(&S+(S->Total), sizeof (Std),1,fp); fclose(fp);prin

28、tf( " 加载数据成功! nn" );(S->Total)-;/ 由于读取问题,表中个数要减去/ 退出程序时判断是否保存函数void Judge_Save( int i,Student S)char ch;if (i)(Y/N)?:" );printf( " 表中数据已改变,是否保存后再退出 ch=getchar();getchar();while (ch!= 'n' &&ch!='N' &&ch!='y' &&ch!='Y' prin

29、tf("请输入 N(n)或者 Y(y):"); ch=getchar();getchar();if (ch= 'y' |ch= 'Y' ) Save(S);/ 菜单void Menu()/ 菜单9printf(I!学生管理 nn" );printf(II*菜单 *n"printf("1.添加学生信息 |8. 按照班级号从小到大排序n ”);printf("2.修改学生信息 |9.按照寝室号从小到大排序n" );printf("3.删除学生信息 |10.按照学号从小到大排序n" );printf("4.以姓名查询学生

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论