C语言课程设计学生宿舍管理系统教学教材Word文档格式.docx
《C语言课程设计学生宿舍管理系统教学教材Word文档格式.docx》由会员分享,可在线阅读,更多相关《C语言课程设计学生宿舍管理系统教学教材Word文档格式.docx(27页珍藏版)》请在冰豆网上搜索。
2)VC++6.0编译环境
2.4开发工具
C语言
3.总体设计
3.1系统流程设计
本系统的功能模块如图1所示,主要有以下模块:
课程名称界面
程序欢迎界面
学生信息录入
学生信息整体浏览
学生信息查询
学生信息修改
学生信息删除
退出系统
按入住时间查询
按收费标准查询
主菜单界面
图1系统功能模块图
3.2系统模块设计
1)课程名称界面:
运用printf函数,实现课程实训名称以及作者的显示。
2)系统欢迎界面:
运用printf函数,实现欢迎使用学生简历管理系统的显示。
3)主菜单界面:
构造函数menu_select();
实现系统主菜单的显示。
4)学生住宿信息录入:
构造函数voidcreate(),实现学生简历信息的录入。
5)学生住宿信息浏览:
构造函数voidxianshi();
,实现对学生整体住宿情况的浏览。
6)学生住宿信息保存:
构造函数voidbaocun();
实现对学生整体住宿情况的保存。
7)学生住宿信息查询:
intfindByIndex(intindex)函数,实现按入住时间查询,调用intfindBybiaozhun(intbiaozhun);
函数,实现按收费标准查询。
8)学生住宿信息修改:
构造函数intreplace(charname[],intp,intq);
,实现对指定学生的学号对其入住时间、收费标准。
9)学生住宿信息删除:
构造函数intfindBybiaozhun(intbiaozhun);
,实现对学生整体住宿情况的删除。
4.详细设计
4.1数据结构设计
根据系统要求,系统中需要保存的数据信息,其结构如下:
数据项名称
数据项系统表示
数据类型
数据长度(字节)
备注
学生姓名
stu[i].name
字符串
50
学生住宿层号
stu[i].cenghao
整型
4
学生住宿房号
stu[i].fanghao
学生住宿床位号
stu[i].chuanghao
学生学号
stu[i].xuehao
住宿收费标准
stu[i].shoefei
缴费状态
stu[i].zhuangtai
20
学生入住时间
stu[i].shijian
根据系统要求,系统中需要保存的类别信息,其结构如下:
类别代号
文本文档
类别名称
a.txt
先声明一个类型为typedefstructstudent的结构体,其成员为学生的住宿信息。
然后通过对结构体成员、文件等数据结构的操作,实现对学生住宿信息的录入,浏览,查询,存盘,修改,删除等一系列操作。
其中,结构体定义如下:
typedefstructstudent{
{
charname[50];
intcenghao;
intfanghao;
intchuanghao;
intxuehao;
intshoufei;
charzhuangtai[20];
intshijian;
}STUDENT;
4.2模块接口设计
1)所有函数模块声明如下:
menu_select();
/*主菜单函数*/
voidcreate();
/*录入学生简历信息*/
voidxianshi();
/*显示浏览界面*/
intfindByIndex(intindex);
*实现按学号查询*/
intfindBybiaozhun(intbiaozhun);
/*实现按入住时间查询*/
voidbaocun();
/*向磁盘写入学生信息加以保存*/
intremovebyxuehao(intsxh);
/*实现指定学生的信息删除*/
intreplace(charname[],intp,intq);
/*实现学生信息的修改*/
2)并定义需要使用的全局变量:
3)#defineNUM30
intflag=0;
STUDENTstu[NUM]
charname[20];
inti,n,m,b,c,d,e,f,j,g,p,q,y,x,a1,a2;
charA[6][12];
4)主要模块的实现
系统以主函数intmain()为入口,首先通过system("
color1e"
);
将汉字界面置为黄色。
然后调用menu_select();
函数,进入主菜单界面。
系统接收用户输入的选择,调用相应的函数,进入到下一级菜单进行相关工作。
4.3以下是几个主要模块的流程图:
1)主菜单函数:
2)信息浏览函数:
图3信息浏览流程图
否
需要修改的学生学号
是否存在
修改界面
是
选择修改内容
实现修改
回主菜单
3)信息修改函数:
图4信息修改流程图
5.运行结果
5.1主菜单界面:
图5主菜单界面
输入功能选择,系统自动进入相应功能界面。
图6信息录入界面
5.2息浏览界面:
图7全部信息浏览
5.3信息查询界面:
从键盘中输入选择,可以按学号和姓名进行查询,并显示结果。
图8按姓名查询的结果
5.4修改界面:
从键盘中输入需要修改的信息代码,自动提示输入新的信息。
图9按姓名查询的结果
6.程序调试与测试
6.1程序调试与分析
(1)各模块分别调试过程、出现的错误原因,纠正错误的方法及结果:
主菜单显示界面:
刚开始主菜单显示的时候参差不齐,视觉效果混乱。
通过插入“\n,\t,空格等来使主菜单显示清爽,合理。
宿舍整体情况浏览:
开始试图用“空闲,居住”来表示某房间的空闲状态。
但由于能力有限,无法用汉字表示,就分别用了“T”和“F”表示某房间的空闲状态。
可以表示出每个房间的空闲状态。
按入住时间查询:
最初对“for”循环的用法不熟悉,造成查询功能无法实现,通过上网查询相关资料解决了这一问题,使按入住时间查询这一功能实现。
由于在输入入住时间时,限制了只能输入800/年或1200元/年,在测试查询功能时,老是出现程序错误,后来通过一步步的检查找出这一问题,按入住时间查询功能得以实现。
修改功能:
最初无用了“for”循环,造成数据无法修改。
通过请教同学解决了这一问题。
删除功能:
最初无用了“for”循环,造成数据无法删除。
6.2程序测试及结果
(1)各模块测试用例数据的确定
测试数据
姓名
层号
房间号
床位号
学号
收费标准
入住时间
孙飞
1
1200
2011
曹钰
2
800
2012
测试结果
数据正确。
(2)测试中出现的问题的原因和分析
在保存文件时,由于未及时关闭文件,造成下面的数据乱码,及时关闭文件的操作。
7.问题与不足
(1)需求分析中存在的问题和分析:
因为不能很好的掌握主菜单的循环,无法实现再次录入学生信息。
(2概要设计中存在的问题和分析
没能很好的结合实际情况,使程序的某些功能未能符合实际情况。
(3详细设计中存在的问题和分析
查询的功能太少,只有按入住时间和缴费状态查询。
(4)代码编制中存在的问题和分析
在定义结构体时,姓名和缴费状态的数组定义过大,造成内存浪费。
(5)调试和测试中存在的问题和分析
在输入层号、房间号、床位号、学号、入住时间时未加以保护,输入不是数字时,程序也可运行,存在漏洞。
8.建议
课设内容的内容应更加符合实际,时间给的太过充裕,老师辅导最好在详细一点。
建议老师能从根本上教会学生一些简单的编程。
9.编程体会
经过二周的课程设计,我学到了很多东西:
①巩固和加深了对数据结构的理解,提高综合运用本课程所学知识的能力。
②培养了我选用参考书,查阅手册及文献资料的能力。
培养独立思考,深入研究,分析问题、解决问题的能力。
③过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。
④够按要求编写课程设计报告书,能正确阐述设计和实验结果,正确绘制系统和程序框图。
⑤通过课程设计,培养了我严肃认真的工作作风,逐步建立正确的生产观念、经济观念和全局观念。
课程设计是把我们所学的理论知识进行系统的总结并应用于实践的良好机会,有利于加强我们用知识理论来分析实际问题的能力,进而加强了我们对知识认识的实践度,巩固了我们的理论知识,深化了对知识的认识,并为走向社会打下一个良好的基础。
在这次课程设计中我遇到许多问题和麻烦,得到了老师的帮助和指导,才能够使得这次课程设计顺利的进行下去,另外,在程序调试过程中,也得到很多同学的帮助,给我及时指出错误,提出许多宝贵意见。
在此对老师和同学们表示感谢!
10.程序源代码:
#include<
stdio.h>
#defineNUM30
intflag=0;
typedefstructstudent
STUDENTstu[NUM];
intmain()
intmenuchoice;
system("
do
{
menu_select();
printf("
请输入你的选择:
"
scanf("
%d"
&
menuchoice);
switch(menuchoice)
case1:
if(flag==0)
{
printf("
请输入要录入的学生个数"
scanf("
n);
rewind(stdin);
while(n>
30||n<
1){
您的输入有误请重新输入:
\n"
}
create();
\n学生信息录入成功...\n"
flag=1;
system("
pause"
cls"
break;
}
else
学生信息已录入,不需录入...\n"
}
case2:
if(flag==1)
{
printf("
您输入的学生信息为\n"
xianshi();
system("
break;
else
请先录入学生信息再浏览!
...\n"
case3:
if(flag==1)
{
学生信息查询(按入住时间查询)\n"
scanf("
y);
findByIndex(y);
请先录入学生信息再查询!
}
case4:
if(flag==1)
学生信息查询(按收费标准查询)\n"
x);
findBybiaozhun(x);
}
else
{
printf("
system("
break;
}
case5:
printf("
学生信息修改\n"
请输入要被修改的姓名和新的入住时间,收费标准\n"
scanf("
%s%d%d"
name,&
a1,&
a2);
replace(name,a1,a2);
system("
break;
请先录入学生信息再修改!
case6:
学生信息删除"
请输入您要删除的学生的学号"
g);
removebyxuehao(g);
else
{
printf("
请先录入学生信息再删除...\n"
system("
break;
}
case7:
程序退出,欢迎再次使用!
exit(0);
default:
printf("
您的输入有误请重新输入\n"
rewind(stdin);
system("
break;
}
}while
(1);
}
intmenu_select()
{
\t\t\t\t\t\t注释:
'
F'
代表该房间为空闲\n"
T'
代表该房间有学生居住\n"
\t\t\t学生宿舍管理系统\n"
\t\t\t作者:
赵荷\n"
\t\t\t指导老师:
胡宁亚\n"
\t\t*************************************************"
\t\t\t\t\t1.录入学生住宿信息\n"
\t\t\t2.宿舍信息整体浏览\n"
\t\t\t3.按入住时间查询\n"
\t\t\t4.按收费标准查询\n"
\t\t\t5.修改功能\n"
\t\t\t6.删除\n"
\t\t\t7.退出\n"
\t\t*************************************************\n\n\n"
\t\t欢迎使用!
\n\n\n"
voidcreate()
for(i=0;
i<
6;
i++)
for(j=0;
j<
12;
j++)
A[i][j]='
;
printf("
请输入%d个学生的信息(姓名,层号,房间号,床位号,学号,收费标准,缴费状态,入住时间)\n"
n);
n;
do
{
%s%d%d%d%d%d%s%d"
stu[i].name,&
stu[i].cenghao,&
stu[i].fanghao,&
stu[i].chuanghao,&
stu[i].xuehao,&
stu[i].shoufei,stu[i].zhuangtai,&
stu[i].shijian);
if((stu[i].shoufei!
=800)&
&
(stu[i].shoufei!
=1200))
输入错误,请重新输入"
}while(stu[i].shoufei!
=800&
stu[i].shoufei!
=1200);
A[stu[i].cenghao-1][stu[i].fanghao-1]='
flag=1;
voidxianshi()
姓名层号房间号床位号学号收费标准缴费状态入住时间\n"
%s%d%d%d%d%d%s%d\n"
stu[i].name,stu[i].cenghao,stu[i].fanghao,stu[i].chuanghao,stu[i].xuehao,stu[i].shoufei,stu[i].zhuangtai,stu[i].shijian);
\n\n\n\n"
"
j++)
%d"
j+1);
第%d层"
i+1);
for(j=0;
10;
j++)
%3c"
A[i][j]);
for(j=10;
%4c"
保存文件"
baocun();
\n\n"
voidbaocun()
chara[100];
FILE*fp;
请输入文件名:
rewind(stdin);
gets(a);
if((fp=fopen(a,"
w"
))==NULL)
文件不能打开\n"
f