学生宿舍管理软件C语言源代码完整版.docx

上传人:b****6 文档编号:7360207 上传时间:2023-05-11 格式:DOCX 页数:29 大小:168.06KB
下载 相关 举报
学生宿舍管理软件C语言源代码完整版.docx_第1页
第1页 / 共29页
学生宿舍管理软件C语言源代码完整版.docx_第2页
第2页 / 共29页
学生宿舍管理软件C语言源代码完整版.docx_第3页
第3页 / 共29页
学生宿舍管理软件C语言源代码完整版.docx_第4页
第4页 / 共29页
学生宿舍管理软件C语言源代码完整版.docx_第5页
第5页 / 共29页
学生宿舍管理软件C语言源代码完整版.docx_第6页
第6页 / 共29页
学生宿舍管理软件C语言源代码完整版.docx_第7页
第7页 / 共29页
学生宿舍管理软件C语言源代码完整版.docx_第8页
第8页 / 共29页
学生宿舍管理软件C语言源代码完整版.docx_第9页
第9页 / 共29页
学生宿舍管理软件C语言源代码完整版.docx_第10页
第10页 / 共29页
学生宿舍管理软件C语言源代码完整版.docx_第11页
第11页 / 共29页
学生宿舍管理软件C语言源代码完整版.docx_第12页
第12页 / 共29页
学生宿舍管理软件C语言源代码完整版.docx_第13页
第13页 / 共29页
学生宿舍管理软件C语言源代码完整版.docx_第14页
第14页 / 共29页
学生宿舍管理软件C语言源代码完整版.docx_第15页
第15页 / 共29页
学生宿舍管理软件C语言源代码完整版.docx_第16页
第16页 / 共29页
学生宿舍管理软件C语言源代码完整版.docx_第17页
第17页 / 共29页
学生宿舍管理软件C语言源代码完整版.docx_第18页
第18页 / 共29页
学生宿舍管理软件C语言源代码完整版.docx_第19页
第19页 / 共29页
学生宿舍管理软件C语言源代码完整版.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

学生宿舍管理软件C语言源代码完整版.docx

《学生宿舍管理软件C语言源代码完整版.docx》由会员分享,可在线阅读,更多相关《学生宿舍管理软件C语言源代码完整版.docx(29页珍藏版)》请在冰点文库上搜索。

学生宿舍管理软件C语言源代码完整版.docx

学生宿舍管理软件C语言源代码完整版

一、需求分析

该程序是由C语言编写的一个宿舍管理查询软件,其主要功能是实现对学生信息的增加、删除、修改、查询、排序、存储、加载。

其中查询可以分别以姓名、学号、寝室号为关键字查询学生信息。

排序可以分别以学号和寝室号为关键字进行从小到大的排序。

①输入的形式:

根据用户所选择的功能,然后再依据程序相应的提示进行输入:

选择功能1(添加学生信息):

按照从先到后的顺序输入学生姓名(30个字符以内),学生学号(15个字符以内),宿舍号码(整数,范围在0~*****)。

选择功能2(修改学生信息):

按照从先到后的顺序输入要修改的学生姓名(30个字符以内),修改后学生的姓名(30个字符以内),修改后学生的学号(15个字符以内),修改后学生的宿舍号(整数,范围在0~*****)。

选择功能3(删除学生信息):

输入要删除的学生姓名(30个字符以内)。

选择功能4(以姓名查询学生信息):

输入要查找的学生的姓名(30个字符以内)。

选择功能5(以学号查询学生信息):

输入要查找的学生的学号(15个字符以内)。

选择功能6(以寝室号查询学生信息):

输入寝室号(整数,范围在0~32767)。

②输出的形式:

根据用户所选择的功能不同,会有不同的输出:

选择功能1(添加学生信息):

根据程序的判断会输出添加成功或者添加失败。

选择功能2(修改学生信息):

根据程序的判断会输出修改成功或者修改失败。

选择功能3(删除学生信息):

根据程序的判断会输出删除成功或者删除失败。

选择功能4(以姓名查询学生信息):

根据程序的判断,如果查找成功,则会输出相应的学生信息,反之,则会输出查找失败。

选择功能5(以学号查询学生信息):

根据程序的判断,如果查找成功,则会输出相应的学生信息,反之,则会输出查找失败。

选择功能6(以寝室号查询学生信息):

根据程序的判断,如果查找成功,则会输出相应的学生信息,反之,则会输出查找失败。

选择功能7,8(以寝室号和学号为关键字进行从小到大的排序):

程序会输出排序成功。

选择功能9(显示所有学生的信息):

程序会输出所有以存学生的信息。

选择功能10(保存操作):

根据程序的判断会输出保存成功或者保存失败。

选择功能11(加载记录):

根据程序的判断会输出加载记录成功或者加载记录失败。

③测试数据:

对功能1(添加学生信息)的测试:

向程序中添加三条记录

按照先后顺序分别输入:

学生姓名:

张三,学生学号:

20070001,宿舍号:

502

学生姓名:

李四,学生学号:

20070003,宿舍号:

502

学生姓名:

王五,学生学号:

20070002,宿舍号:

503

对功能2(修改学生信息)的测试:

修改学生王五的信息

按照先后顺序分别输入:

学生姓名:

王五,学生姓名:

王五,学生学号:

20070005,宿舍号:

501

对功能3(删除学生信息)的测试:

删除学生李四的信息

输入:

学生姓名:

李四

对功能4(以姓名查询学生信息)的测试:

查询学生王五的信息

输入:

学生姓名:

王五

对功能5(以学号查询学生信息)的测试:

查询学号为20070001的信息

输入:

学生学号:

20070001

对功能6(以寝室号查询学生信息)的测试:

查询寝室号为501的信息

输入:

寝室号:

501

对功能7(按照寝室号从小到大的排序)和功能9(显示所有学生信息)的测试:

先选择功能7,然后选择功能9,观察显示出来的记录是否按照寝室号从小到大排序。

对功能8(按照学号从小到大的排序)和功能9(显示所有学生信息)的测试:

先选择功能8,然后选择功能9,观察显示出来的记录是否按照学号从小到大排序。

对功能10(保存操作)和功能11(加载记录)的测试:

先选择功能10,然后关闭程序,重新运行,此时选择功能11,然后选择功能9显示出学生信息,查看信息是否有错误。

 

二、概要设计

1.抽象数据类型:

ADTStudent{

数据对象:

D={ai,bi,ci,|ai∈charS[31],bi∈charA[16],ci,∈int,i=1,2,3,….}

数据关系:

R={<(ai,bi,ci),(ai+1,bi+1,ci+1)>|(ai,bi,ci)∈D,i=1,2,3,….}

基本操作:

S_number_Judge(StudentS,intt)

初始条件:

表S已存在

操作结果:

判断所输入学号在表中是否已存在

Add(StudentS)

初始条件:

表S已存在

操作结果:

向表S中插入一个记录

Alter(StudentS)

初始条件:

表S已存在

操作结果:

修改表S中的一条记录

Delete(StudentS)

初始条件:

表S已存在

操作结果:

删除表S中的一条记录

Display_All(StudentS)

初始条件:

表S已存在

操作结果:

显示表中所有学生的信息

Sort_D_number(StudentS)

初始条件:

表S已存在

操作结果:

表中记录按照寝室号从小到大排序

Sort_S_number(StudentS)

初始条件:

表S已存在

操作结果:

表中记录按学号从小到大排序

Query_S_name(StudentS)

初始条件:

表S已存在

操作结果:

根据所输入的学生姓名显示出该学生的信息

Query_S_number(StudentS)

初始条件:

表S已存在

操作结果:

根据所输入的学号显示出该学生的信息

Query_D_number(StudentS)

初始条件:

表S已存在

操作结果:

根据所输入的寝室号显示出该寝室的学生的信息

Save(StudentS)

初始条件:

表S已存在

操作结果:

将表中数据保存的文件中去

Load(StudentS)

初始条件:

表S已存在

操作结果:

将文件中数据加载到程序中

Judge_Save(inti,StudentS)

初始条件:

表S已存在

操作结果:

表中数据改变后没有及时保存在退出程序时提醒用户是否保存

}ADTStudent

2.本程序所包含的15个函数为:

(1).主函数main();

(2).菜单函数Menu();

(3).判断学号是否重复函数S_number_Judge(StudentS,intt);

(4).添加学生信息函数Add(StudentS);

(5).修改学生信息函数Alter(StudentS);

(6).删除学生信息函数Delete(StudentS);

(7).显示所有学生信息函数Display_All(StudentS);

(8).按照寝室号从小到大排序函数Sort_D_number(StudentS);

(9).按照学号从小到大排序函数Sort_S_number(StudentS);

(10).根据学生姓名查找函数Query_S_name(StudentS);

(11).根据学生学号查找函数Query_S_number(StudentS);

(12).根据寝室号查找函数Query_D_number(StudentS)

(13).存储函数Save(StudentS);

(14).加载函数Load(StudentS);

(15).判断在退出程序时是否保存函数Judge_Save(inti,StudentS);

 

各函数之间的调用关系如下:

 

3.N-S流程图

调用Menu()

输入i值

i==1

YN

Add(S)

Yi==2N

Alter(S)

i==3

YN

Delete(S)

i==4

YN

Query_S_name(S)

i==5

YN

Query_S_number(S)

i==6

YN

Query_D_number(S)

i==7

YN

Sort_D_number(S)

i==8

YN

Sort_S_number(S)

i==9

YN

Display_All(S)

i==10

YN

Save(S)

i==11

YN

Load(S)

i==12

YN

Judge_Save(dirty,S)

输出:

选择错误,请在数字1-12中选择

直到i==12

三、详细设计

源程序代码:

#include

#include

#include

#defineM100

intdirty=0;//用来判断是否已保存操作

//定义一个存储学生相关信息的结构体

typedefstruct

{

charS_name[31];//学生姓名

charS_class[31];//学生班级

charS_number[16];//学生学号

intD_number;//学生所在寝室的宿舍号

charS_address[500];//学生地址

intS_phone[20];//学生电话号码

intTotal;//学生总数

}Student[M],St;

//判断学号是否与表中所存学号重复

voidS_number_Judge(StudentS,intt)

{

inti;

for(i=1;i<=(S->Total)-1;i++)

while(strcmp(S[i].S_number,S[t].S_number)==0)

{

printf("学号输入失败,该学号已存在,请重新输入学号!

\n");

printf("请输入学生的学号(15个字符以内):

");

scanf("%s",S[t].S_number);

getchar();

i=1;

}

}

//添加学生信息函数

voidAdd(StudentS)

{

printf("请输入学生姓名(30个字符以内):

");

scanf("%s",S[++(S->Total)].S_name);

getchar();//获取换行符

printf(“请输入学生班级(30个字符以内):

”);

scanf("%s",S[S->Total].S_class);

getchar();

printf("请输入学生的学号(15个字符以内):

");

scanf("%s",S[S->Total].S_number);

getchar();

S_number_Judge(S,S->Total);//判断输入的学号是否与表中所存在的学号重复

printf("请输入宿舍号码:

");

scanf("%d",&S[S->Total].D_number);

getchar();

printf("请输入学生地址:

");

scanf("%s",S[S->Total].S_address);

getchar();

printf(“请输入学生电话号码:

”);

scanf("%s",&S[S->Total].S_phone);

getchar();

dirty=1;

printf("添加成功!

\n\n");

}

//修改学生信息函数

voidAlter(StudentS)

{

inti;

intflag=0;//用来判断表中是否存在所要修改的学生的信息

charname[20];

printf("请输入你要修改学生的姓名:

");

scanf("%s",name);

getchar();

for(i=1;i<=S->Total;i++)

if(strcmp(S[i].S_name,name)==0)

flag=i;

if(!

flag)

printf("你所要修改的学生信息在表中不存在!

\n");

else

{

printf("新信息如下:

\n");

printf("请输入学生姓名(30个字符以内):

");

scanf("%s",S[flag].S_name);

getchar();

printf(“请输入学生班级(30个字符以内):

”);

scanf("%s",S[flag].S_class);

getchar();

printf("请输入学生的学号(15个字符以内):

");

scanf("%s",S[flag].S_number);

getchar();

S_number_Judge(S,flag);

printf("请输入宿舍号:

");

scanf("%d",&S[flag].D_number);

getchar();

printf("请输入学生地址:

");

scanf("%s",S[flag].S_address);

getchar();

printf(“请输入学生电话号码:

”);

scanf("%s",&S[flag].S_phone);

getchar();

dirty=1;

printf("修改成功!

\n");

}

putchar('\n');

}

//删除学生信息

voidDelete(StudentS)

{

inti,j;

intflag=0;//用来判断表中是否存在所要删除的学生的信息

charname[20];

printf("请输入你要删除学生的姓名:

");

scanf("%s",name);

getchar();

for(i=1;i<=S->Total;i++)

if(strcmp(S[i].S_name,name)==0)

flag=i;

if(!

flag)

printf("你所要删除的学生在表中不存在!

");

else

{

for(i=flag;iTotal;i++)

{

j=i+1;

strcpy(S[i].S_name,S[j].S_name);

strcpy(S[i].S_number,S[j].S_number);

S[i].D_number=S[j].D_number;

}

(S->Total)--;

dirty=1;

printf("删除成功!

");

}

printf("\n\n");

}

//显示所有学生信息函数

voidDisplay_All(StudentS)

{

inti;

printf("全体学生信息如下:

\n");

printf("学生姓名学生班级学生学号宿舍号学生地址学生电话号码\n");

for(i=1;i<=S->Total;i++)

printf("%-20s%-20s%-15s%-5d%s-10%s\n",S[i].S_name,S[i].S_class,S[i].S_number,S[i].D_number,S[i].S_address,S[i].S_phone);

putchar('\n\n');

}

//排序函数按照寝室号从小到大排序(冒泡法)

voidSort_D_number(StudentS)

{

inti,j,t;

charname[30];

charnumber[15];

charaddress[300];

charCnumber[30];

for(i=1;i<=S->Total;i++)

for(j=i;j<=S->Total;j++)

if(S[i].D_number>S[j].D_number)

{

strcpy(name,S[i].S_name);

strcpy(number,S[i].S_number);

strcpy(address,S[i].S_address);

strcpy(Cnumber,S[i].S_class);

t=S[i].D_number;

strcpy(S[i].S_name,S[j].S_name);

strcpy(S[i].S_number,S[j].S_number);

strcpy(S[i].S_address,S[j].S_address);;

strcpy(S[i].S_class,S[j].S_class);

S[i].D_number=S[j].D_number;

strcpy(S[j].S_name,name);

strcpy(S[j].S_number,number);

strcpy(S[j].S_address,address);

strcpy(S[j].S_class,Cnumber);

S[j].D_number=t;

}

}

//排序函数按照学号从小到大排序(冒泡法)

voidSort_S_number(StudentS)

{

inti,j,t;

charname[30];

charnumber[15];

charaddress[300];

charCnumber[30];

for(i=1;i<=S->Total;i++)

for(j=i;j<=S->Total;j++)

if(strcmp(S[i].S_number,S[j].S_number)>0)

{

strcpy(name,S[i].S_name);

strcpy(number,S[i].S_number);

strcpy(address,S[i].S_address);

strcpy(Cnumber,S[i].S_class);

t=S[i].D_number;

strcpy(S[i].S_name,S[j].S_name);

strcpy(S[i].S_number,S[j].S_number);

strcpy(S[i].S_address,S[j].S_address);;

strcpy(S[i].S_class,S[j].S_class);

S[i].D_number=S[j].D_number;

strcpy(S[j].S_name,name);

strcpy(S[j].S_number,number);

strcpy(S[j].S_address,address);

strcpy(S[j].S_class,Cnumber);

S[j].D_number=t;

}

}

//排序函数按照班级号从小到大排序(冒泡法)

voidSort_S_class(StudentS)

{

inti,j,t;

charname[30];

charnumber[15];

charaddress[300];

charCnumber[30];

for(i=1;i<=S->Total;i++)

for(j=i;j<=S->Total;j++)

if(strcmp(S[i].S_class,S[j].S_class)>0)

{

strcpy(name,S[i].S_name);

strcpy(number,S[i].S_number);

strcpy(address,S[i].S_address);

strcpy(Cnumber,S[i].S_class);

t=S[i].D_number;

strcpy(S[i].S_name,S[j].S_name);

strcpy(S[i].S_number,S[j].S_number);

strcpy(S[i].S_address,S[j].S_address);;

strcpy(S[i].S_class,S[j].S_class);

S[i].D_number=S[j].D_number;

strcpy(S[j].S_name,name);

strcpy(S[j].S_number,number);

strcpy(S[j].S_address,address);

strcpy(S[j].S_class,Cnumber);

S[j].D_number=t;

}

}

//查询函数以班级为关键字进行查询(顺序查找)

voidQuery_S_class(StudentS)

{

inti,j=0;

charclassnumber[31];

printf("请输入你要查找的班级号(30个字符以内):

");

scanf("%s",classnumber);

getchar();

printf("所查找学生信息如下:

\n");

printf("学生姓名学生班级学生学号宿舍号学生地址学生电话号码\n");

for(i=1;i<=S->Total;i++)

if(strcmp(classnumber,S[i].S_class)==0)

{

printf("%-20s%-20s%-15s%-5d%s-10%s\n",S[i].S_name,S[i].S_class,S[i].S_number,S[i].D_number,S[i].S_address,S[i].S_phone);

j=1;

}

if(!

j)

printf("\n查找失败,表中不存在该学生的信息!

\n\n");

}

 

//查询函数以姓名为关键字进行查询(顺序查找)

voidQuery_S_name(StudentS)

{

inti,j=0;

charname[31];

printf("请输入你要查找的学生的姓名(30个字符以内):

");

scanf("%s",name);

getchar();

printf("所查找学生信息如下:

\n");

printf("学生姓名学生班级学生学号宿舍号学生地址学生电话号码\n");

for(i=1;i<=S->Total;i++)

if(strcmp(name,S[i].S_name)==0)

{

printf("%-20s%-20s%-15s%-5d%s-10%s\n",S[i].S_name,S[i].S_class,S[i].S_number,S[i].D_number,S[i].S_address,S[i].S_phone);

j=1;

}

if(!

j)

printf("\n查找失败,表中不存在该学生的信息!

\n\n");

}

//查询函数以学号为关键字进行查询(折半查找)

voidQuery_S_number(StudentS)

{

inti,j,top,base,mid;

charnumber[15];

j=0;

base=1;

top=S->Total;

print

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2