logo资料库

宿舍寝室管理查询软件(课程设计).doc

第1页 / 共20页
第2页 / 共20页
第3页 / 共20页
第4页 / 共20页
第5页 / 共20页
第6页 / 共20页
第7页 / 共20页
第8页 / 共20页
资料共20页,剩余部分请下载后查看
题 目: 宿舍管理查询软件 已知技术参数和设计要求:为宿舍管理人员编写一个宿舍管理查询软件,程序设计要求:采用交互工 作方式建立数据文件,数据文件按关键字(姓名、学号、房号)进行排序(冒泡、选择、插入排序等任选 一种) 查询菜单: (用二分查找实现以下操作) 按姓名查询 按学号查询 按房号查询 打印任一查询结果(可以连续操作) 要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) 一、需求分析: 在该部分中叙述,每个模块的功能要求 二、概要设计: 在此说明每个部分的算法设计说明(可以是描述算法的流程图),每个程序中使用 的存储结构设计说明(如果指定存储结构请写出该存储结构的定义。 三、详细设计: 各个算法实现的源程序,对每个题目要有相应的源程序(可以是一组源程序,每 个功能模块采用不同的函数实现)源程序要按照写程序的规则来编写。要结构清晰,重点函数的重点 变量,重点功能部分要加上清晰的程序注释。 四、调试分析: 测试数据,测试输出的结果,时间复杂度分析,和每个模块设计和调试时存在问 题的思考(问题是哪些?问题如何解决?),算法的改进设想。 五、用户手册: 使用该软件的方法说明(截图说明)。 六、课设总结:总结可以包括 : 课程设计过程的收获、遇到问题、遇到问题解决问题过程的思考、 程序调试能力的思考、对数据结构这门课程的思考、在课程设计过程中对《数据结构》课程的认识等 内容
一、需求分析 该程序是由 C 语言编写的一个宿舍管理查询软件,其主要功能是实现对学生信息的增加、删除、修改、 查询、排序、存储、加载。其中查询可以分别以姓名、学号、寝室号为关键字查询学生信息。排序可以 分别以学号和寝室号为关键字进行从小到大的排序。 ①输入的形式:根据用户所选择的功能,然后再依据程序相应的提示进行输入: 选择功能 1(添加学生信息):按照从先到后的顺序输入学生姓名(30 个字符以内),学 生学号(15 个字符以内),宿舍号码(整数,范围在 0~32767)。 选择功能 2(修改学生信息):按照从先到后的顺序输入要修改的学生姓名(30 个字符以 内),修改后学生的姓名(30 个字符以内),修改后学生的学号(15 个字符以内),修改 后学生的宿舍号(整数,范围在 0~32767)。 选择功能 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 1
对功能 7(按照寝室号从小到大的排序)和功能 9(显示所有学生信息)的测试:先选择 功能 7,然后选择功能 9,观察显示出来的记录是否按照寝室号 从小到大排序。 对功能 8(按照学号从小到大的排序)和功能 9(显示所有学生信息)的测试:先选择功 能 8,然后选择功能 9,观察显示出来的记录是否按照学号从小 到大排序。 对功能 10(保存操作)和功能 11(加载记录)的测试:先选择功能 10,然后关闭程序, 重新运行,此时选择功能 11,然后选择功能 9 显示出学生信息, 查看信息是否有错误。 二、概要设计 1.抽象数据类型: ADT Student{ 数据对象:D={ai,bi,ci,| ai∈char S[31],bi∈char A[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(Student S,int t) 初始条件:表 S 已存在 操作结果:判断所输入学号在表中是否已存在 Add(Student S) 初始条件:表 S 已存在 操作结果:向表 S 中插入一个记录 Alter(Student S) 初始条件:表 S 已存在 操作结果:修改表 S 中的一条记录 Delete(Student S) 初始条件:表 S 已存在 操作结果:删除表 S 中的一条记录 Display_All(Student S) 初始条件:表 S 已存在 操作结果:显示表中所有学生的信息 Sort_D_number(Student S) 初始条件:表 S 已存在 操作结果:表中记录按照寝室号从小到大排序 Sort_S_number(Student S) 初始条件:表 S 已存在 操作结果:表中记录按学号从小到大排序 Query_S_name(Student S) 初始条件:表 S 已存在 操作结果:根据所输入的学生姓名显示出该学生的信息 Query_S_number(Student S) 初始条件:表 S 已存在 2
操作结果:根据所输入的学号显示出该学生的信息 Query_D_number(Student S) 初始条件:表 S 已存在 操作结果:根据所输入的寝室号显示出该寝室的学生的信息 Save(Student S) 初始条件:表 S 已存在 操作结果:将表中数据保存的文件中去 Load(Student S) 初始条件:表 S 已存在 操作结果:将文件中数据加载到程序中 Judge_Save(int i,Student S) 初始条件:表 S 已存在 操作结果:表中数据改变后没有及时保存在退出程序时提醒用户是否保存 } ADT Student 2.本程序所包含的 15 个函数为: (1).主函数 main(); (2).菜单函数 Menu(); (3).判断学号是否重复函数 S_number_Judge(Student S,int t); (4).添加学生信息函数 Add(Student S); (5).修改学生信息函数 Alter(Student S); (6).删除学生信息函数 Delete(Student S); (7).显示所有学生信息函数 Display_All(Student S); (8).按照寝室号从小到大排序函数 Sort_D_number(Student S); (9).按照学号从小到大排序函数 Sort_S_number(Student S); (10).根据学生姓名查找函数 Query_S_name(Student S); (11).根据学生学号查找函数 Query_S_number(Student S); (12).根据寝室号查找函数 Query_D_number(Student S) (13).存储函数 Save(Student S); (14).加载函数 Load(Student S); (15).判断在退出程序时是否保存函数 Judge_Save(int i,Student S); 3
各函数之间的调用关系如下: Display_All(Student S) Menu() Sort_D_number(Student S) Query_S_name(Student S) Sort_S_number(Student S) Query_S_number(Student S) main() Save(Student S) Query_D_number(Student S) Load(Student S) Delete(Student S) Judge_Save(int i,Student S) Add(Student S) Alter(Student S) S_number_Judge(Student S,int t) 4
3.N-S 流程图 调用 Menu() 输入 i 值 Y ) S ( d d A i= =1 Y ) S ( r e t l A i= =2 i= =3 Y ) S ( e t e l e D Y ) S ( e m a n _ S _ y r e u Q i= =4 Y ) S ( r e b m u n _ S _ y r e u Q N N N N i= =5 i= =6 Y ) S ( r e b m u n _ D _ y r e u Q Y ) S ( r e b m u n _ D _ t r o S i= =7 i= =8 Y ) S ( r e b m u n _ S _ t r o S 5 N N N N i= =9 Y ) S ( l l A _ y a l p s i D Y ) S ( e v a S i= =10 Y ) S ( d a o L N N i= =11 N i= =12 N Y ) S , y t r i d ( e v a S _ e g d u J 输 出 : 选 择 错 误 , 请 在
数 字 1- 1 2 中 选 择 直到 i= =12 三、详细设计 源程序代码: #include #include #include #define M 100 int dirty=0; //用来判断是否已保存操作 //定义一个存储学生相关信息的结构体 typedef struct { char S_name[31]; //学生姓名 char S_number[16]; //学生学号 int D_number; //学生所在寝室的宿舍号 int Total; //学生总数 }Student[M],St; //判断学号是否与表中所存学号重复 void S_number_Judge(Student S,int t) { } int i; 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; //添加学生信息函数 6
void Add(Student S) { } printf("请输入学生姓名(30个字符以内):"); scanf("%s",S[++(S->Total)].S_name); 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(); dirty=1; printf("添加成功!\n\n"); //修改学生信息函数 void Alter(Student S) { int i; int flag=0; //用来判断表中是否存在所要修改的学生的信息 char name[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("请输入学生的学号(15个字符以内):"); scanf("%s",S[flag].S_number); getchar(); S_number_Judge(S,flag); printf("请输入宿舍号:"); scanf("%d",&S[flag].D_number); getchar(); dirty=1; 7
分享到:
收藏