C语言程序设计课程设计报告宿舍管理系统Word格式.docx
《C语言程序设计课程设计报告宿舍管理系统Word格式.docx》由会员分享,可在线阅读,更多相关《C语言程序设计课程设计报告宿舍管理系统Word格式.docx(17页珍藏版)》请在冰豆网上搜索。
8.按照学生的学号升序对学生信息进行排序。
9.用文件的方式将录入的数据进行存储,并从其中读取数据。
三、概要设计
1.功能模块图:
2.各模块详细的功能描述:
A.输入模块:
调用input()函数将学生宿舍信息依次输入到结构体数组中,结束后将保存在制定文件中,在其他模块的函数中可以随时进行调用,结束后可以将修改后的学生宿舍信息再一次保存。
B.添加模块:
如果要添加新入住学生信息可以调用append函数将新生信息插入到原有信息的末尾,在保存到文件中。
C.修改模块:
修改可以通过输入要修改的学生的学号,对学生的个人信息利用switch选择要修改的内容.修改完毕后,保存到所设定的文件中去。
D.删除模块:
删除可以通过输入要删除的学生学号,对学生的所有个人信息进行删除.删除完毕之后保存到文件中去。
E.查询模块:
选择输入要查询学生的学号,并将查询的信息显示在屏幕上。
F.统计模块:
输入要统计人数的班级号,然后输出此班的总人数。
G.排序模块:
按学生学号用冒泡法升序排出学生的信息。
H.打印模块:
输出当前文件中所有的学生住宿信息。
四、详细设计:
1.流程图:
2.重点设计:
intread_file(STUDENTSstudents[])
{FILE*fp;
inti=0;
if((fp=fopen("
"
"
rt"
))==NULL)
{printf("
\n\n*****库存文件不存在!
请创建"
);
/*创建文件*/
return0;
}
while((fread(&
students[i],sizeof(STUDENTS),1,fp))==1)/*成功创建*/
{
i++;
fclose(fp);
returni;
voidsave_file(STUDENTSstudents[],intsum)/*保存信息*/
{FILE*fp;
inti;
wb"
{printf("
读文件错误!
\n"
return;
五.测试数据及运行结果:
三组正常数据:
1.
2.异常测试数据及运行结果:
2.
六、调试情况,设计技巧及体会:
1.设计过程中的体会:
在刚开始还没有大体思路,觉得设计不简单。
但当总体构思完成后,对各个功能的实现可以用小程序即模块形式进行实现,比如输入数据,输出数据,修改数据,删除数据等.在一个个小程序中调试,最后各个模块的功能完成比较好后,在将所有的模块都放进main()主函数中进行调试,这样可以避免由整体构思调试引起的调试障碍.但还是没有得到完美的效果,有的模块还是有问题。
而且程序上看没什么问题啊?
老师也帮了不少的忙吧。
在此写过老师的帮助。
2.在调试过程中,F5,F10,F11,有了更深的认识,并且可以更灵活的运用。
在编写程序的过程中,有些逻辑不是很清楚,但大部分程序模块还是写出来了。
那些不清楚的就是文件方面的知识,以后要好好研究下文件了。
总体来说,
这次课程设计对C语言方面的知识又重新复习了一遍,感觉还行。
3.还有就是原先有想过用密码,构思是想实现一个帐号密码配对使用的方法,但是由于文件的使用不熟练,最后还是以失败告终。
同时程序只能在当前登录过程中输入进入系统,有较大的局限性。
七、参考文献
《C语言程序设计》谭浩强清华大学出版社1999年12月
C语言程序设计(第二版)王曙燕/主编
八.附录:
3.完全代码:
#include"
/*头文件*/
#defineMAX100
typedefstruct
{intyear;
intmonth;
intday;
}DATE;
{intnum;
/*学号*/
charname[20];
/*姓名*um);
if(students[i].num==0)break;
printf("
\n学生姓名:
scanf("
%s"
students[i].name);
\n学生性别:
students[i].sex);
\n学生年龄:
%d"
&
students[i].age);
\n学生出生年月日:
%d%d%d"
students[i].,&
students[i].,
&
students[i].;
\n学生宿舍:
students[i].sushe);
\n学生班级:
students[i].classes);
\n学生专业:
students[i].zhuanye);
\n学生床号:
students[i].chuanghao);
i++;
}while(i<
t);
save_file(students,t);
/*保存输入的学生信息*/
printf("
\n%d个学生信息输入完毕!
t);
getch();
returnt;
/*返回输入学生的个数值*/
/*输出模块*/
voidoutput(STUDENTSstudents[],intsum)
inti;
system("
cls"
printf("
numnamesexageyear-month-daysusheclasseszhuanyechuanghao\n"
for(i=0;
i<
sum;
i++)/*输出学生的信息*/
{printf("
%5d%5s%5s%5d%5d%5d%5d%5s%5s%5s%5s\n"
students[i].num,students[i].name,students[i].sex,students[i].age,students[i].,
students[i].,students[i].,students[i].sushe,
students[i].classes,students[i].zhuanye,students[i].chuanghao);
}
save_file(students,sum);
/*添加信息模块*/
intappend(STUDENTSstudents[],intsum)
inti=sum,flag=0;
/*从已经输入的学生尾部添加*/
charchoice;
sum=read_file(students);
system("
\n\n添加学生信息\n"
do
{
if(i<
MAX)/*已经输入的学生个数和要添加的学生个数之和要小于定义的学生个数最大值*/
{
printf("
\n新学生学号:
students[i].num);
/*输入添加学生的基本信息*/
\n学生宿舍号:
\n床号:
\n继续添加吗(
Y/N)"
choice=getch();
if(choice=='
Y'
||choice=='
y'
)
{flag=1;
\n继续!
/*是否要继续添加*/
elseflag=0;
}while(flag==1);
;
\n按任意键返回主菜单!
save_file(students,i);
/*保存添加的学生信息到原文件*/
returni;
/*返回文件中学生个数值*/
/*修改信息模块*/
voidmodify(STUDENTSstudents[],intsum)
{um==modify_num)
\n学生信息\n"
numnamesexageyear-month-dayaddresssushezhuanyechuanghao\n"
students[i].num,students[i].name,students[i].sex,students[i].age,students[i].,students[i].,students[i].,students[i].sushe,students[i].classes,students[i].zhuanye,students[i].chuanghao);
\n要修改哪一项\
n"
\n1.学生学号\n"
\n2.学生姓名\n"
\n3.学生性别\n"
\n4.学生年龄\n"
\n5.学生出生年月日\n"
\n6.学生宿舍号\n"
\n7.学生班级\n"
\n8.学生专业\n"
\n9.学生床号\n"
\n请选择(1-9):
scanf("
choice);
switch(choice)
case1:
\n输入修改后的学号:
scanf("
break;
case2:
\n输入修改后的姓名:
case3:
\n输入修改后的性别:
/*选择要修改学生的项目*/
case4:
\n输入修改后的年龄:
case5:
\n输入修改后的出生年月:
case6:
\n输入修改后的宿舍号:
case7:
\n输入修改后的班级:
case8:
\n输入修改后的专业:
case9:
\n输入修改后的床号:
}
\n学生信息表\n"
break;
/*输出修改后的学生信息*/
if(i==sum)
\n该学生不存在!
getch();
\n\n继续修改吗(
choice=getch();
}/*是否要继续修改*/
/*保存修改后的信息*/
/*删除信息模块*/
intdel(STUDENTSstudents[],intsum)
{
inti,del_num;
请输入要删除的学生学号"
del_num);
/*输入要删除的学生学号*/
for(i=0;
i++)
{if(del_num==students[i].num)
{for(;
sum-1;
students[i].num=students[i+1].num;
删除成功"
save_file(students,sum-1);
/*保存删除后的学生信息到原文件*/
return(sum-1);
/*查询信息模块*/
voidinquire(STUDENTSstudents[],intsum)
{FILE*fp;
inti,choice,flag,inquire_num;
/*读文件*/
%d\n"
sum);
do
{system("
\n输入要查询的学生学号:
scanf("
inquire_num);
/*输入要查询的学生学号*/
if(students[i].num==inquire_num)
\n此学生信息为:
%5d%5s%5s%5d%d%d%d%5s%5s%5s%5s\n"
break;
/*输出要查询的学生信息*/
if(i==sum)
\n无此学生信息\n"
\n\n是否继续(
/*是否要继续*/
}while(flag==1);
getch();
/*统计信息模块*/
voidcount(STUDENTSstudents[],intsum)
inti,count=0;
chars[10];
请输入要统计的班级的学生的班级号!
s);
/*按输入的班级号统计此班的总学生人数*/
if(strcmp(s,students[i].classes)==0)
count++;
%s班的总人数为%d人"
s,count);
save_file(students,sum);
/*排行信息模块*/
voidsort(STUDENTSstudents[],intsum)
inti,j,t;
\n学生信息排行\n"
\n按学号排行\n"
i++)/*按学号用冒泡法升序排列学生信息*/
for(j=i+1;
j<
j++)
{if(students[i].num>
students[j].num)
{t=students[i].num;
students[i].num=students[j].num;
students[j].num=t;
students[i].num,students[i].name,students[i].sex,students[i].age,students[i].,students[i].,students[i].,students[i].sushe,
students[i].classes,students[i].zhuanye,students[i].chuanghao);
/*输出排序后的学生信息*/
/*保存排序后的学生信息到文件中*/
voidmima()
charmima;
chara[9];
请输入密码:
8;
mima=getch();
*"
a[i]=mima;
a[8]='
\0'
\n\n\n\n\n\n\n\n\n成功登陆!
else
{
\n\n\n\n\n\n\n\n\n密码错误,您无权使用该系统!
\n\n"
exit
(1);
voidmain()/*主函数*/
STUDENTSstudents[MAX];
intchoice,sum;
mima();
sum=read_file(students);
if(!
sum)
并录入基本库存信息!
sum=input(students);
/*录入学生信息*/
{system("
\n\n\n学生宿舍管理系统\n\n"
1.添加学生信息\n\n"
2.修改学生信息\n\n"
3.删除学生信息\n\n"
4.查询学生信息\n\n"
5.统计学生信息\n\n"
6.学生排序\n\n"
7.打印学生信息\n\n"
0.退出系统\n\n"
请选择(0-7):
switch(choice)/*用switch选择要调用的各模块函数并执行*/
{case1:
sum=append(students,sum);
modify(students,sum);
sum=del(students,sum);
inquir