大作业学生宿舍系统#.docx
《大作业学生宿舍系统#.docx》由会员分享,可在线阅读,更多相关《大作业学生宿舍系统#.docx(26页珍藏版)》请在冰豆网上搜索。
大作业学生宿舍系统#
需求分析
1.1项目介绍
因为学生人数多,一个楼栋又有多个寝室,所以我想设计一个以寝室为单位的学生宿舍管理系统,应用这个系统,我们就可以更加便捷地了解、管理学生的信息,从而提高学校对学生的管理和保护!
1.2功能需求
1.该系统可以查到学生的寝室号、姓名、学号、联系电话等信息。
2.该系统可以按一定的规则将所有学生的信息打印出来,如:
按学生的寝室号码打印所有学生的信息、按学生的学号由小到大打印学生的信息。
3.该系统可以按照特定的需求条件来搜寻想查询学生的信息,如:
按学生的寝室号码查询学生信息、按学生姓名查询学生的信息。
4.该系统可以存储保留的信息,也可以读取先前存储的信息,以便让大家可以方便的添加和查询。
5.该系统可以多次重复使用。
6.可以输入输出
一、系统分析
2.1本程序需解决的关键技术问题
1.要较清楚的理解数组、函数、结构体、指针、字符与字符串等相关的c语言基础。
2.必须清楚vc的编译过程。
3.要有一个较清晰的程序思路,尤其是面对一个代码比较多的一个程序,写代码时必须顾前顾后,否则在后面的时候要大篇幅的修改。
2.2程序流程
二、程序设计与实现
3.1程序设计
1、Input(>
该函数可以进行数据的输出,将同学门的寝室号、姓名、性别等信息录入该系统内,从而可以实现学生信息的查询和搜索!
2、Printfbynum(>:
调用该函数可以实现按学号从小到大的排列学生的信息
3、Printbyroom(>:
调用该函数,可以按寝室号的大小由小到大的排列学生信息
流程图和printbuynum相同
4、Searchbybanji(>。
5、Searchbyname(>:
通过这个函数,我们可输入想要查询的学生的姓名,该系统就会自动只把要查询的学生的信息打印在屏幕上
6、Searchbysex(>:
该函数可以按照男女的方式打印对性别的学生的信息
7、Searchbyhome(>:
该函数可以按照要搜索同学的家乡的省份来打印所要查询省得同学的信息
8、Sexper(>:
该函数可以计算男女各占总体的百分比
Wrintetofile(>:
该函数可以将在input函数里所输入的数据存储在文件中
9、Readfile(>:
该函数可以读取一存储的文件中的数据
10、Down<):
调用函数
3.2程序实现:
代码详情请看附件
/*************************************************
Copyright(C>,2018-2018,qianqianTech.Co.,Ltd.
Filename:
学生宿舍管理系统
Author:
杨志谦//作者、版本及完成日期
Version:
2018独家版
Date:
2018.12.25
Description:
本管理系统可以有效地帮助学校更好地管理学生的信息,也可以帮助学校更加便捷地搜索学
生的信息。
该管理系统可以进行数据输入和存储、数据的读写和计算、学生信息的搜索和按一定条件的
排序和查询
注意:
本管理系统的学生人数范围为0-30;寝室号可从0-2的32次方内;性别只可以是f或者
是m,输入其他字符可能出现程序错误;姓名可以是10个以内的字母或五个以内的汉字;电
话号码之能在11位数以内;家乡只能是某某省;
Others:
有违反上述注意事项而且造成损失的的,本人一概不负责!
FunctionList:
1.Input进行对数据的输入。
2.printbynum按学好由小到大打印学生信息
3.printbyroom按寝室号打印学生信息
4.Searchbyname按姓名搜索学生信息
5.Searchbysex按性别打印学生信息
6.Searchbyhome按家乡打印学生信息
7.Sexper男女所占比例
8.Homeper家乡所占比例
9.Writetofile将数据读取到文件中
10.Readfile将先前保存的文件信息读取出来
11.down设计指针函数是所指向的函数
History:
//修改历史记录列表,每条修改记录应包括修改日期、修改
//者及修改内容简述
1.Date:
Author:
Modification:
2....
*************************************************/
#include
#include
#include
#defineN30
typedefstructstudent
{
introom。
charname[10]。
charsex。
longnum。
intbanji。
chartel[12]。
charhome[10]。
}Student。
intInput(Studentstu[N]>。
voidprintbynum(Studentstu[N],intn,int(*down>(inta,intb>>。
voidprintbyroom(Studentstu[N],intn,int(*down>(inta,intb>>。
voidSearchbybanji(Studentstu[N],intn>。
voidSearchbyname(Studentstu[N],intn>。
voidSearchbysex(Studentstu[N],intn>。
voidSearchbyhome(Studentstu[N],intn>。
voidSexper(Studentstu[N],intn>。
voidWritetofile(Studentstu[N],intn>。
intReadfile(Studentstu[N]>。
intdown(inta,intb>。
main(>//main函数通过switch对其他函数进行调用
{
intn,k,i。
chara。
Studentstu[N]。
system("colorf4">。
printf("本管理系统可以有效地帮助学校更好地管理学生的信息,也可以帮助学校更加便捷地搜索学生的信息。
\n该管理系统可以进行数据输入和存储、数据的读写和计算、学生信息的搜索和按一定条件的排序和查询\n注意:
\n本管理系统的学生人数范围为0-30;\n寝室号可从0-2的32次方内;\n性别只可以是f或者是m,输入其他字符可能出现程序错误;\n姓名可以是10个以内的字母或五个以内的汉字;\n电话号码之能在11位数以内;\n家乡只能是某某省;\n">。
printf("\n">。
printf("有违反上述注意事项而且造成损失的的,本人一概不负责!
">。
printf("\n\n\n按回车键进入系统!
">。
scanf("%c",&a>。
system("cls">。
//清楚上文所打印的内容
system("color1f">。
//改变界面和文字的颜色以达到视觉效果<下同)
for(i=0。
i<100000000。
i++>。
printf("\n\n欢迎使用学生宿舍管理系统\n\n">。
//打印菜单栏
for(i=0。
i<300000000。
i++>。
printf("8888888888888888888888888888888888888888888888888888888\n">。
//打印菜单栏
printf("88\n">。
//打印菜单栏
printf("81.请输入学生的信息8\n">。
//打印菜单栏
printf("82.按寝室号排版8\n">。
//打印菜单栏
printf("83.按学号排版8\n">。
//打印菜单栏
printf("84.按姓名查找8\n">。
//打印菜单栏
printf("86.按性别搜索8\n">。
//打印菜单栏
printf("87.按家乡搜索8\n">。
//打印菜单栏
printf("88.男女比例8\n">。
//打印菜单栏
printf("89.写入文件8\n">。
//打印菜单栏
printf("810.读取文件8\n">。
//打印菜单栏
printf("80.退出8\n">。
//打印菜单栏
printf("88\n">。
//打印菜单栏
printf("8888888888888888888888888888888888888888888888888888888\n">。
//打印菜单栏
TOW:
printf("请选择功能键:
\n">。
//用goto语句进行循环
scanf("%d",&k>。
//选择调用的函数
switch(k>//switchj语句进行选择操作,goto语句进行循环操作!
{
case1:
system("color79">。
n=Input(stu>。
gotoTOW。
case2:
system("color72">。
printbyroom(stu,n,down>。
gotoTOW。
case3:
system("color70">。
printbynum(stu,n,down>。
gotoTOW。
case4:
system("color1c">。
Searchbyname(stu,n>。
gotoTOW。
case5:
system("color90">。
Searchbybanji(stu,n>。
gotoTOW。
case6:
system("color71">。
Searchbysex(stu,n>。
gotoTOW。
case7:
system("color17">。
Searchbyhome(stu,n>。
gotoTOW。
case8:
system("color1f">。
Sexper(stu,n>。
gotoTOW。
case9:
system("color7d">。
Writetofile(stu,n>。
gotoTOW。
case10:
system("color84">。
n=Readfile(stu>。
gotoTOW。
case0:
system("color9f">。
exit(0>。
default:
system("color6c">。
printf("错误的输入!
\n">。
gotoTOW。
}
}
intInput(Studentstu[N]>//输入函数
{
inti,n。
printf("输入学生信息:
\n">。
printf("请输入学生人数:
">。
scanf("%d",&n>。
printf("\n请输入学生的寝室号、姓名、性别(f/m>、学号、班级、联系电话、家乡<?
?
省):
\n">。
for(i=0。
ii++>
{
scanf("%d%s%c%d%d%s%s",&stu[i].room,stu[i].name,&stu[i].sex,&stu[i].num,&stu[i].banji,stu[i].tel,stu[i].home>。
}
returnn。
//返回n的值
}
voidprintbynum(Studentstu[N],intn,int(*down>(inta,intb>>//按学好大小由小到大排列学生信息
{
inti,j,temp6,temp7。
longtemp1。
chartemp2,temp3[10],temp4[11],temp5[10]。
for(i=0。
ii++>
{
for(j=i+1。
jj++>
{
if((*down>(stu[i].num,stu[j].num>>
{
temp1=stu[i].num。
//一下代码为交换数据
stu[i].num=stu[j].num。
stu[j].num=temp1。
temp2=stu[i].sex。
stu[i].sex=stu[j].sex。
stu[j].sex=temp2。
strcpy(temp3,stu[i].name>。
strcpy(stu[i].name,stu[j].name>。
strcpy(stu[j].name,temp3>。
strcpy(temp4,stu[i].tel>。
strcpy(stu[i].tel,stu[j].tel>。
strcpy(stu[j].tel,temp4>。
strcpy(temp5,stu[i].home>。
strcpy(stu[i].home,stu[j].home>。
strcpy(stu[j].home,temp5>。
temp6=stu[i].room。
stu[i].room=stu[j].room。
stu[j].room=temp6。
temp7=stu[i].banji。
stu[i].banji=stu[j].banji。
stu[j].banji=temp7。
}
}
}
for(i=0。
ii++>
printf("学生寝室号:
%d\n学生姓名:
%s\n学生性别:
%c\n学生学号:
%d\n学生班级:
%d\n学生电话号码:
%s\n学生家乡:
%s\n\n\n",stu[i].room,stu[i].name,stu[i].sex,stu[i].num,stu[i].banji,stu[i].tel,stu[i].home>。
//打印交换后新的数据
}
voidprintbyroom(Studentstu[N],intn,int(*down>(inta,intb>>//按寝室号码大小由小到大排列学生信息
{
inti,j,temp6,temp7。
longtemp1。
chartemp2,temp3[10],temp4[11],temp5[10]。
for(i=0。
ii++>
{
for(j=i+1。
jj++>
{
if((*down>(stu[i].room,stu[j].room>>
{
temp1=stu[i].num。
//一下代码为交换数据
stu[i].num=stu[j].num。
stu[j].num=temp1。
temp2=stu[i].sex。
stu[i].sex=stu[j].sex。
stu[j].sex=temp2。
strcpy(temp3,stu[i].name>。
strcpy(stu[i].name,stu[j].name>。
strcpy(stu[j].name,temp3>。
strcpy(temp4,stu[i].tel>。
strcpy(stu[i].tel,stu[j].tel>。
strcpy(stu[j].tel,temp4>。
strcpy(temp5,stu[i].home>。
strcpy(stu[i].home,stu[j].home>。
strcpy(stu[j].home,temp5>。
temp6=stu[i].room。
stu[i].room=stu[j].room。
stu[j].room=temp6。
temp7=stu[i].banji。
stu[i].banji=stu[j].banji。
stu[j].banji=temp7。
}
}
}
for(i=0。
ii++>
printf("学生寝室号:
%d\n学生姓名:
%s\n学生性别:
%c\n学生学号:
%d\n学生班级:
%d\n学生电话号码:
%s\n学生家乡:
%s\n\n\n",stu[i].room,stu[i].name,stu[i].sex,stu[i].num,stu[i].banji,stu[i].tel,stu[i].home>。
}
voidSearchbybanji(Studentstu[N],intn>//按班级查找
{
inti,a。
printf("按班级查找!
\n">。
printf("请输入要查询的班级:
">。
scanf("%d",&a>。
for(i=0。
ii++>
{
if(a==stu[i].banji>printf("学生寝室号:
%d\n学生姓名:
%s\n学生性别:
%c\n学生学号:
%d\n学生班级:
%d\n学生电话号码:
%s\n学生家乡:
%s\n\n\n",stu[i].room,stu[i].name,stu[i].sex,stu[i].num,stu[i].banji,stu[i].tel,stu[i].home>。
}
}
voidSearchbyname(Studentstu[N],intn>//按姓名搜索学生信息
{
inti,j。
chara[10]。
printf("按姓名查找\n">。
printf("请输入要查找的学生的姓名:
">。
scanf("%s",a>。
for(i=0。
ii++>
{
for(j=0。
j<10。
j++>
{
if(a[j]==stu[i].name[j]&&j==9>gotoONE。
if(a[j]!
=stu[i].name[j]>break。
}
}
ONE:
printf("学生寝室号:
%d\n学生姓名:
%s\n学生性别:
%c\n学生学号:
%d\n学生班级:
%d\n学生电话号码:
%s\n学生家乡:
%s\n\n\n",stu[i].room,stu[i].name,stu[i].sex,stu[i].num,stu[i].banji,stu[i].tel,stu[i].home>。
}
voidSearchbysex(Studentstu[N],intn>//按性别打印学生信息
{
inti。
chara。
printf("按性别搜索\n">。
printf("请输入要搜索的性别:
\n">。
scanf("%c",&a>。
printf("\n">。
for(i=0。
ii++>
{
if(a==stu[i].sex>
{
printf("学生寝室号:
%d\n学生姓名:
%s\n学生性别:
%c\n学生学号:
%d\n学生班级:
%d\n学生电话号码:
%s\n学生家乡:
%s\n\n\n",stu[i].room,stu[i].name,stu[i].sex,stu[i].num,stu[i].banji,stu[i].tel,stu[i].home>。
}
}
}
voidSearchbyhome(Studentstu[N],intn>//按学生所在省份答应学生信息
{
inti,j。
chara[10]。
printf("按家乡搜索:
\n">。
printf("请输入要搜索的家乡名字<?
?
省):
">。
scanf("%s",a>。
for(i=0。
ii++>
{
for(j=0。
j<10。
j++>
{
if(a[j]==stu[i].home[j]&&j==9>printf("学生寝室号:
%d\t学生姓名:
%s\t学生性别:
%c\t学生学号:
%d\t学生班级:
%d\t学生电话号码:
%s\t学生家乡:
%s\n",stu[i].room,stu[i].name,stu[i].sex,stu[i].num,stu[i].banji,stu[i].tel,stu[i].home>。
if(a[j]!
=stu[i].home[j]>break。
}
}
}
voidSexper(Studentstu[N],intn>//男女性别比例
{
inti,m,f。
floatc,d。
m=f=0。
printf("学生男女比例\n">。
for(i=0。
ii++>
{
if('f'==stu[i].sex>f++。
if('m'==stu[i].sex>m++。
}
c=((float>f/n>*100。
d=((float>m/n>*100。
printf("男生占%-5.2f%\n",c>。
printf("女生占%-5.2f%\n",d>。
}
voidWritetofile(Studentstu[N],intn>//写入文件
{
FILE*fp。
printf("写入文件\n">。
if((fp=fopen("学生宿舍管理系统.txt","w">>==NULL>//判断是否正确打开文件
{
printf("文件打开失败!
\n">。
exit(0>。
}
fwrite(stu,sizeof(Student>,n,fp>。
//写入文件
fclose(fp>。
//关闭文件
}
intReadfile(Studentstu[N]>//读取文件
{
FILE*fp。
inti。
printf("读取文件\n">。
if((fp=fopen("学生宿舍管理系统.txt","r">>==NULL>
{
printf("文件打开失败!
\n">。
exit(0>。
}
for(i=0。
!
feof(fp>。
i++>
{
fread(&stu[i],sizeof(Student>,1,fp>。
读取文件
}
fclose(fp>。
i--。
printf("%d\n",i>。
returni。
}
intdown(inta,intb>
{
returna>b。
}
三、系统测试
四、个人小结
写程序是一样很要耐心的事,写到一半很容就忘记自己写代码的思路,所以在写代码前做好话个草图,把大致的流程写下来。
写代码是不能嫌麻烦而把取名进行缩短处理,刚开始还受的了,能记各自的含义和功能,但时间就了就很难看懂了,所以在函数取名时一定要正规取名。
改错是一件很有帮组的事,程序员在练习写代码是收获最多的可以说是在我们运行程序后的改错这一环节,应为在这时你可以看到自己所不知道的内容要点。
五、参考文献
[1]苏小红.c语言程序与设计.高等教育出版社.2018.4
[2]杨志谦.学生成绩管理系统.c.2018.12