《c语言课程设计--宿舍管理系统.doc》由会员分享,可在线阅读,更多相关《c语言课程设计--宿舍管理系统.doc(43页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、内蒙古科技大学课程设计说明书内蒙古科技大学本科生课程设计说明书题 目:C语言课程设计 学生宿舍管理系统学生姓名:学 号:专 业:软件工程班 级:2015-1指导教师:日 期:2016年 1月 5日内蒙古科技大学课程设计任务书课程名称C语言课程设计设计题目学生宿舍管理系统指导教师时间 2015.12.15-2016.1.5一、教学要求1. 巩固和加深学生对C语言课程的基本知识的理解和掌握2. 掌握C语言编程和程序调试的基本技能3. 利用C语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C语言解决实际问题的能力二、设计资料及参数每个学生在教师提供的课程设计题目中任意选择一题
2、,独立完成,题目选定后不可更换。宿舍管理系统:设有学生宿舍的数据,要求输入计算机并存放在内存中,然后增加3个宿舍的记录并可以输出材料清单,实现文件存盘和对所选择的记录进行删除,修改。并统计宿舍的总人数,宿舍的基本信息包括楼号、房间号、所住学生班级、人数,要求设计菜单来调用其各功能模块:v 新建文件、打开文件v 输入记录、插入记录、修改记录v 查询记录、输出清单v 保存文件、退出三、设计要求及成果1. 分析课程设计题目的功能需求(可选用数组或链表实现,可多人(最多3人)协作完成一个题目)2. 写出详细设计说明(至少包括功能实现分析和模块流程图)3. 编写程序代码,调试程序使其能正确运行(代码书写
3、要规范,标示符要见名知意,要有必要的注释,每人至少500行代码,不包括注释和花括号)4. 设计完成的软件要便于操作和使用5. 设计完成后提交课程设计报告(请严格按照模板进行排版)四、进度安排第一天 选择课程设计题目,分析课题的要求第二天 编程第三天 编程及调试第四天 写课程设计报告第五天 提交课程设计报告(打印稿及电子稿)五、评分标准1. 根据平时上机考勤、表现和进度,教师将每天点名和检查2. 根据课程设计完成情况,必须有可运行的软件。3. 根据课程设计报告的质量,如有雷同,则所有雷同的所有人均判为不及格。六、建议参考资料1C语言程序设计,谭浩强,清华大学出版社2C语言程序设计课程设计,刘振安
4、,机械工业出版社目 录内蒙古科技大学课程设计任务书I第一章 需求分析31.1引言31.2任务概述31.3数据描述41.4功能需求41.5性能需求41.6运行需求41.7任务计划5第二章概要设计52.1总体设计52.2数据类型设计(或数据结构设计)52.3接口设计 /函数声明62.4运行界面设计7第三章详细设计83.1输入模块设计83.2查找模块设计93.3排序模块设计113.4添加模块设计123.5修改模块设计15 3.6 统计模块设计.19第四章测试分析224.1测试程序执行情况22第五章用户手册(可选)235.1使用说明23第六章课程设计总结24附录:程序代码24参考文献42致谢42II第
5、一章 需求分析1.1 引言学生宿舍管理系统对于一个学校来说是必不可少的组成部分。目前好多学校还停留在宿舍管理人员手工记录数据的最初阶段,手工记录对于规模小的学校来说还勉强可以接受,但对于学生信息量比较庞大,需要记录存档的数据比较多的高校来说,人工记录是相当麻烦的。而且当查找某条记录时,由于数据量庞大,还只能靠人工去一条条的查找,这样不但麻烦还浪费了许多时间,效率也比较低。当今社会是飞速进步的世界,原始的记录方式已经被社会所淘汰了,计算机化管理正是适应时代的产物。信息世界永远不会是一个平静的世界,当一种技术不能满足需求时,就会有新的技术诞生并取代旧技术。21世纪的今天,信息社会占着主流地位,计算
6、机在各行各业中的运用已经得到普及,自动化、信息化的管理越来越广泛应用于各个领域。针对如此,本人设计了一套学生宿舍管理系统。1.2 任务概述熟悉宿舍的学生管理流程,进行需求分析 第15周总体设计,详细设计 第16周编写代码 第17周测试 第18周1.3 数据描述需录入学生的个人信息,数据流程图如下: 录入数据学生宿舍管 理系统 用 户 报表 struct st_message /*学生信息*/ char name20; /*学生姓名*/char num20; /*学号*/char sex5; /*性别*/ char age4; /*年龄*/ char major20; /*专业*/char cl
7、asss8; /*班级*/ char dorm7; /*宿舍号*/stN,t; 1.4 功能需求 输入学生信息输入学生在校信息,包括学号,姓名,宿舍号,性别,班级,专业等 修改学生信息修改指定的学生信息 删除学生信息删除指定学生信息 添加学生信息新进一个学生,录入他的信息在数据库中 查找学生信息按学生信息进行查找 统计学生信息按学生情况进行统计显示 保存学生信息学生信息自动保存在申请的文件中1.5 性能需求(1)此管理系统:功能全面,操作简单,检索迅速,查询方便,存储量大,成本低等优势。(2)可以大大节约工作时间,减少工作量,提高工作效率,方便管理学生。1.6 任务计划(1)构思与设计 15周
8、(2)编写代码 16-17周(3)检查与测试 18周第二章 概要设计 登录页面2.1 总体设计 操作选择录入信息排序模块统计信息删除信息修改信息添加信息专业显示性别显示宿舍显示班级显示性别姓名年龄班级宿舍号专业学号2.2 数据类型设计(或数据结构设计)学生信息用了一个结构体,包含学生的基本信息struct st_message /*学生信息*/ char name20; /*学生姓名*/char dorm7; /*宿舍号*/char num20; /*学号*/char sex7; /*性别*/char age5; /*年龄*/char major20; /*专业*/char classs10;
9、 /*班级*/stN,t;2.3 接口设计 函数名函数格式函数功能input_messagevoid input_message()对住宿学生信息进行录入append_messagevoid append_message()对新来学生信息进行添加录入revise_messagerevise_message() 对需修改学生的信息进行修delete_message()delete_message()对某一学生信息进行删除操find_messagefind_message()分别以姓名、学号、宿舍号对学生信息进行查询census_messagecensus_message()分别以学号、宿舍号、性
10、别、班级、专业方式对学生信息进行统计,并按学号由小到大输出。表2.1:函数列表2.4 运行界面设计如下图2.4:图2.4运行界面42第三章 详细设计3.1 输入模块设计void input_message() /*输入模块*/int i; char choice; FILE *fp; fp=fopen(student.txt,at+); if(fp=NULL) printf(nn*库存文件不存在!请建立。按任意键退出!); getchar(); exit(1); for (i=0;i+) system (cls); getchar(); printf(请输入学生姓名:); gets(sti.n
11、ame); printf(n请输入学生班级:); gets(sti.classs); printf(n请输入学生宿舍号:); gets(sti.dorm); printf(n请输入学生学号:); gets(sti.num); printf(n请输入学生性别:); gets(sti.sex); printf(n请输入学生年龄:); gets(sti.age); printf(n请输入学生专业:); gets(sti.major); fwrite(&sti,sizeof(struct st_message),1,fp); printf(输入成功!n是否继续录入(Y/N)?); choice=get
12、char(); if(choice=y|choice=Y) continue; else fclose(fp); break; 图3.1输入测试3.2 查找模块设计find_message() /*查找信息模块*/int i,choice,flag,fno,fsize,fnum; char f_name20; char f_num10; char f_dorm7; FILE *fp; system(cls); do sort_message(); fp=fopen(student.txt,rt); if(fp=NULL) printf(nn*库存文件不存在!请先建立。按任意键退出!); get
13、char(); exit(1); fno=fileno(fp); fsize=filelength(fno); fnum=fsize/sizeof(struct st_message); system(cls); printf(请选择查询方式:n); printf(1.按姓名查询n); printf(2.按学号查询n); printf(3.按宿舍号查询n); printf(4.返回主页n); scanf(%d,&choice); 图3.2查询测试3.3 排序模块设计void sort_message() /*排序模块*/int i,j,fno,fsize,fnum;FILE *fp;fp=fo
14、pen(student.txt,rt+); if(fp=NULL) printf(nn*文件打开错误。按任意键退出!); getchar(); exit(1); fno=fileno(fp); fsize=filelength(fno); fnum=fsize/sizeof(struct st_message); for(i=0;ifnum;i+) fread(&sti,sizeof(struct st_message),1,fp); for(i=0;ifnum-1;i+) for(j=i+1;j0) t=sti; sti=stj; stj=t; rewind(fp); for(i=0;ifn
15、um;i+) fwrite(&sti,sizeof(struct st_message),1,fp); fclose(fp); 3.4 删除模块delete_message() /*删除模块*/int i,j,choice,fno,fsize,fnum; char d_num10; FILE *fp; system(cls); getchar(); fp=fopen(student.txt,rt); if(fp=NULL) printf(nn*库存文件不存在!请先建立。按任意键退出!); getchar(); exit(1); fno=fileno(fp); fsize=filelength(
16、fno); fnum=fsize/sizeof(struct st_message); for(i=0;ifnum;i+) fread(&sti,sizeof(struct st_message),1,fp); printf(请输入需要删除学生的学号:n); gets(d_num); system(cls); for(i=0;ifnum;i+) if(!strcmp(d_num,sti.num) printf(n -该学生信息-nn); printf(-学号-姓名-班级-宿舍号-性别-年龄-专业-n); printf(-n); printf(%-10s %-6s %-4s %-6s %-4s
17、%-4s %-20sn,sti.num,sti.name, sti.classs,sti.dorm,sti.sex,sti.age,sti.major); printf(n是否删除该学生信息:n); printf(1.是n); printf(2.否n); scanf(%d,&choice); switch(choice) case 1:for(j=i;jfnum-1;j+) stj=stj+1; rewind(fp); fp=fopen(student.txt,wt); for(i=0;ifnum-1;i+) fwrite(&sti,sizeof(struct st_message),1,fp
18、); fclose(fp); getchar(); break; case 2:printf(按任意键返回主菜单!); getchar();return 0; break; if(i=fnum) printf(所查学生信息不存在,按任意键返回主菜单!); getchar(); return 0; printf(删除信息成功,按任意键返回主菜单!); getchar(); return 1; 图3.4删除测试3.5 修改模块revise_message() /*修改模块*/int i,choice,flag,fno,fsize,fnum; char re_name20,s20; FILE *fp
19、; do fp=fopen(student.txt,rt+); fno=fileno(fp); fsize=filelength(fno); fnum=fsize/sizeof(struct st_message); system(cls); gets(s); printf(请输入需要修改的学生姓名:); gets(re_name); for (i=0;ifnum;i+) fread(&sti,sizeof(struct st_message),1,fp); if(!strcmp(re_name,sti.name) printf(n -该学生信息-nn); printf(-学号-姓名-班级-宿
20、舍号-性别-年龄-专业-n); printf(-n); printf(%-10s %-6s %-4s %-6s %-4s %-4s %-20sn,sti.num,sti.name,sti.classs,sti.dorm,sti.sex,sti.age,sti.major); printf(您要修改哪一项?n); printf(1.学号n); printf(2.姓名n); printf(3.班级n); printf(4.宿舍号n); printf(5.性别n); printf(6.年龄n); printf(7.专业n); printf(8.返回主页n); scanf(%d,&choice); s
21、witch(choice) case 1:printf(n请输入修改后的学号:); scanf(%s,sti.num);break; case 2:printf(n请输入修改后的姓名:); scanf(%s,sti.name);break; case 3:printf(n请输入修改后的班级:); scanf(%s,sti.classs);break; case 4:printf(n请输入修改后的宿舍号:); scanf(%s,sti.dorm);break; case 5:printf(n请输入修改后的性别:); scanf(%s,sti.sex);break; case 6:printf(n
22、请输入修改后的年龄:); scanf(%s,sti.age);break; case 7:printf(n请输入修改后的专业:); scanf(%s,sti.major);break; case 8:return 1; getchar(); system(cls); printf(n -修改后的学生信息-nn); printf(-学号-姓名-班级-宿舍号-性别-年龄-专业-n); printf(-n); printf(%-10s %-6s %-4s %-6s %-4s %-4s %-20sn,sti.num,sti.name, sti.classs,sti.dorm,sti.sex,sti.a
23、ge,sti.major); rewind(fp); fseek(fp,sizeof(struct st_message)*i,0); fwrite(&sti,sizeof(struct st_message),1,fp); fclose(fp); break; if(i=fnum) printf(n该学生信息不存在!); printf(nn继续修改吗?(Y/N); choice=getchar(); if(choice=Y|choice=y) flag=1; system(pause); else flag=0; while(flag=1); return 1; 图3.5修改测试前图3.5修
24、改测试后3.6 统计模块census_message() /*统计信息模块*/int i,choice,fno,fsize,fnum; int m=0,n=0,k=0; char dorm7; char classs8; char major20; FILE *fp; sort_message(); fp=fopen(student.txt,rt); if(fp=NULL) printf(nn*文件打开错误。按任意键退出!); getchar(); exit(1); fno=fileno(fp); fsize=filelength(fno); fnum=fsize/sizeof(struct
25、st_message); system(cls); printf(请选择显示方式:n); printf(1.按学号显示n); printf(2.按宿舍号显示n); printf(3.按性别显示n); printf(4.按班级显示n); printf(5.按专业显示n); printf(6.返回主页n); scanf(%d,&choice); 图3.6统计测试前图3.1统计测试后第四章 测试分析4.1 测试程序执行情况 开始测试不是很顺利,不过总算完成了4.2 出现的问题和解决的方法(1) 有些变量忘了定义,经过编译得以解决(2) 各类语句符号出现错误,需要用英语输入法下的符号才行第五章 用户手
26、册(可选)5.1 使用说明用户进入登录页面,数据格式应严格输入,避免出现运行错误第六章 课程设计总结经过一个学期的C语言学习,让我认识到这门学科的深度与奥妙,尽管开始接触时很难学,但经过周老师的循序教导,我学会了很多。最开始接触一些简单的代码,后面越学越多,学了数组,指针,结构体和链表,发现C语言真的很强大,可以解决很多的实际问题,让我受益匪浅,C语言马上结束了,最后,很感谢周老师和我的课设指导老师,我相信,有他们的带领,我会学的越来越好。附录:程序代码#includestdio.h#includestring.h#includestdlib.h#includeio.h#define N 10
27、0struct st_message /*学生信息*/ char name20; /*学生姓名*/char dorm7; /*宿舍号*/char num20; /*学号*/char sex5; /*性别*/char age4; /*年龄*/char major20; /*专业*/char classs8; /*班级*/stN,t;void sort_message() /*排序模块*/int i,j,fno,fsize,fnum;FILE *fp;fp=fopen(student.txt,rt+); if(fp=NULL) printf(nn*文件打开错误。按任意键退出!); getchar(
28、); exit(1); fno=fileno(fp); fsize=filelength(fno); fnum=fsize/sizeof(struct st_message); for(i=0;ifnum;i+) fread(&sti,sizeof(struct st_message),1,fp); for(i=0;ifnum-1;i+) for(j=i+1;j0) t=sti; sti=stj; stj=t; rewind(fp); for(i=0;ifnum;i+) fwrite(&sti,sizeof(struct st_message),1,fp); fclose(fp); void
29、input_message() /*录用信息模块*/int i; char choice; FILE *fp; fp=fopen(student.txt,at+); if(fp=NULL) printf(nn*库存文件不存在!请建立。按任意键退出!); getchar(); exit(1); for (i=0;i+) system (cls); getchar(); printf(请输入学生姓名:); gets(sti.name); printf(n请输入学生班级:); gets(sti.classs); printf(n请输入学生宿舍号:); gets(sti.dorm); printf(n
30、请输入学生学号:); gets(sti.num); printf(n请输入学生性别:); gets(sti.sex); printf(n请输入学生年龄:); gets(sti.age); printf(n请输入学生专业:); gets(sti.major); fwrite(&sti,sizeof(struct st_message),1,fp); printf(输入成功!n是否继续录入(Y/N)?); choice=getchar(); if(choice=y|choice=Y) continue; else fclose(fp); break; void append_message() /
31、*添加模块*/int i; char choice; FILE *fp; fp=fopen(student.txt,at+); if(fp=NULL) printf(nn*库存文件不存在!请建立。按任意键退出!); getchar(); exit(1); for (i=0;i+) struct st_message stN; system (cls); getchar(); printf(请输入所添加学生姓名:); gets(sti.name); printf(n请输入所添加学生班级:); gets(sti.classs); printf(n请输入所添加学生宿舍号:); gets(sti.do
32、rm); printf(n请输入所添加学生学号:); gets(sti.num); printf(n请输入所添加学生性别:); gets(sti.sex); printf(n请输入所添加学生年龄:); gets(sti.age); printf(n请输入所添加学生专业:); gets(sti.major); fwrite(&sti,sizeof(struct st_message),1,fp); printf(输入成功!n是否继续添加(Y/N)?); choice=getchar(); if(choice=y|choice=Y) continue; else fclose(fp); break
33、; revise_message() /*修改模块*/int i,choice,flag,fno,fsize,fnum; char re_name20,s20; FILE *fp; do fp=fopen(student.txt,rt+); fno=fileno(fp); fsize=filelength(fno); fnum=fsize/sizeof(struct st_message); system(cls); gets(s); printf(请输入需要修改的学生姓名:); gets(re_name); for (i=0;ifnum;i+) fread(&sti,sizeof(struc
34、t st_message),1,fp); if(!strcmp(re_name,sti.name) printf(n -该学生信息-nn); printf(-学号-姓名-班级-宿舍号-性别-年龄-专业-n); printf(-n); printf(%-10s %-6s %-4s %-6s %-4s %-4s %-20sn,sti.num,sti.name,sti.classs,sti.dorm,sti.sex,sti.age,sti.major); printf(您要修改哪一项?n); printf(1.学号n); printf(2.姓名n); printf(3.班级n); printf(4.
35、宿舍号n); printf(5.性别n); printf(6.年龄n); printf(7.专业n); printf(8.返回主页n); scanf(%d,&choice); switch(choice) case 1:printf(n请输入修改后的学号:); scanf(%s,sti.num);break; case 2:printf(n请输入修改后的姓名:); scanf(%s,sti.name);break; case 3:printf(n请输入修改后的班级:); scanf(%s,sti.classs);break; case 4:printf(n请输入修改后的宿舍号:); scanf(%s,sti.dorm);break; case 5:printf(n请输入修改后的性别:); scanf(%s,sti.sex);break; case 6:printf(n请输入修改后的年龄:); scanf(%s,sti.age);break; case 7:printf(n请输入修改后的专业:); scanf(%s,sti.major);break; case 8:return 1; getchar(); system(cls);
限制150内