数据结构与算法设计课程设计报告.docx
- 文档编号:27853139
- 上传时间:2023-07-05
- 格式:DOCX
- 页数:23
- 大小:148.56KB
数据结构与算法设计课程设计报告.docx
《数据结构与算法设计课程设计报告.docx》由会员分享,可在线阅读,更多相关《数据结构与算法设计课程设计报告.docx(23页珍藏版)》请在冰豆网上搜索。
数据结构与算法设计课程设计报告
课程设计报告
课程设计题目:
宿舍管理查询软件
学生姓名:
万策明
专业:
计算机科学与技术
班级:
102041011
学号:
1020410118
指导教师:
艾菊梅
2012年6月20日
一、实验目的
本次课程设计的主要目的是综合运用所学的数据结构知识解决一个比较实际问题,侧重对链表、数组、字符串、图、树等相关内容的综合应用,使同学们能进一步熟悉掌握数据结构的基础知识,进一步提升自己的解决问题和编程调试能力,为后续专业课程的学习打下良好的基础。
二、实验要求
1.了解数据结构及其分类、数据结构与算法的密切关系;
2.熟悉各种基本数据结构及其操作,学会根据实际问题来选择数据结构;
3.掌握设计算法的步骤和分析方法;
4.掌握数据结构在排序和查找等常用算法中的应用。
5.独立完成
三、设计内容
1) 任务:
为宿舍管理人员编写一个宿舍管理查询软件,程序设计要求:
A. 采用交互工作方式
B. 建立数据文件,数据文件按关键字(姓名、学号、房号)进行排序(冒泡、选择、插入排序等任选一种)
2) 查询菜单:
(用二分查找实现以下操作)
A. 按姓名查询
B. 按学号查询
C. 按房号查询
3) 打印任一查询结果(可以连续操作)
四、实验过程
1.实验思路
1)采用C++编程语言
2)使用结构体来存储
3)使用冒泡、选择、插入排序
4)使用二分查找实现查找功能
2.实验流程图
3.算法说明
主要有主菜单函数,查找功能子菜单函数,学生信息录入函数,显示函数,排序函数,以及查找函数。
在每个区域中会调用不同的函数来实现主要的功能。
比如,在学生显示这个功能里调用显示函数;在插入功能里调用子菜单函数;在显示信息时调用排序函数先对需要输出的信心进行排序,然后再输出;在查找功能里会调用查找函数来进行查找,包括按照性别,学号,姓名,房间号等查询。
4.详细设计及测试
根据流程图,将程序源代码输入到编译环境中,按照提示选择进行记录的输入,输入一个数据后提示是否继续输入,直到结束程序为止。
将程序编译生成“学生宿舍管理系统.exe”。
运行该文件如图1所示。
图1输出界面图
通过下面函数输入学生信息:
/*自定义输入函数*/
structstudentShuRu()
{
structstudentstu;
cout<<"┃学号:
";
cin>>stu.ID;
cout<<"┃姓名:
";
cin>>stu.name;
cout<<"┃性别(g/b):
";
fflush(stdin);
cin>>stu.sex;
cout<<"┃房间号:
";
cin>>stu.roomnum;
cout<<"┃是否继续?
(y/n)";
returnstu;
}
按照提示选择“1”进行记录的输入如图2所示:
图2输入记录显示图
按”y”连续输入多组数据后,按“n”结束输入,提示按任意键继续,回到主菜单。
选择“2”进行记录的显示如图3所示
图3显示所有记录
按学号排序采用冒泡排序法。
/*自定义排序函数-冒泡*/
voidsort(structstudentstu[N],inti)
{
intj,k;
structstudenttemp;
for(j=0;j
{
for(k=0;k { if((stu[k].ID)>(stu[k+1].ID)) { temp=stu[k]; stu[k]=stu[k+1]; stu[k+1]=temp; } } } } 显示后提示按任意键继续,选择“3”进行查找功能菜单,如图4所示 图4查找菜单显示图 /*自定义按照学号查找函数--二分查找*/ voidXueHaoChaZhao(structstudentstu[N],inti) { intXueHao; charch; system("cls"); cout<<"\t┎┅┅┅┅┅┅┅您选择的是按照学号查找┅┅┅┅┅┅┅┒\n\n"; do { cout<<"\t》请输入学号: "; cin>>XueHao; intlow=1,high=i; while(low<=high) { intmid=(low+high)/2; if(stu[mid].ID==XueHao) { ShowHeader(); display(stu[mid]); break; } elseif(stu[mid].ID>XueHao) high=mid-1; else low=mid+1; } fflush(stdin); cin>>ch; } while(ch=='y'); } 选择“1”按照学号查找如图5所示: 图5按学号查找显示图 按姓名、房间号查找函数略。 五、实验总结 这次课程设计我做的还不是很完善,因为功能不是很多,如果以后有机会完善的话,应该对管理员和用户登录时做进一步完善。 学生的信息还不够完整,如学生的宿舍长,系别,一些费用以及学生的成绩等待相关详细信息。 如果使次系统再详细些,需添加更多的管理员以及管理员权限,还有学生的更多信息,如果有必要的话,添加一些有关教师的信息,以及教师登录的界面。 发现自己的编程水平还是很好,资料撑握不是很全,所以可以代码是模仿再写出来的。 异常处理做得不是很好,以后会多多的改进。 在这次课程设计的过程中,我们体会到要想开发一个系统软件,不仅需要相当的专业技术知识,还要有严谨缜密的思维能力。 只有思想上清晰了,编程才有意义,否则就是白费力气。 同时还要善于捕获细小的方面,因为那往往是这个程序的致命因素。 这次课程设计培养了我的细心和耐性,更树立了一种科学的态度。 六、参考文献 1.《C语言程序设计》、C++方面的资料 2.《数据结构(C++版)》 七、附录 源代码: #include #include #include #include #include #defineN20 /*********************自定义函数声明部分**************************/ voidShowHeader();//声明显示表头部分 intMainMenu();//声明主菜单函数 intChaZhaoMenu();//声明查找功能子菜单函数 structstudentShuRu();//声明学生信息录入函数 voiddisplay(structstudent);//声明显示函数 voidsort(structstudentstu[N],int);//声明排序函数 voidXueHaoChaZhao(structstudentstu[N],inti);//声明按照学号查找函数 voidXingMingChaZhao(structstudentstu[N],inti);//声明按照姓名查找函数 voidFangJianChaZhao(structstudentstu[N],inti);//声明按照房间号查找 /*定义结构体*/ structstudent { intID;/*构造结构成员*/ charname[15]; charsex; introomnum; floatscore[3]; char*getSex() { if(sex=='g') return"女"; else return"男"; } }; /*自定义输入函数*/ structstudentShuRu() { structstudentstu; cout<<"┃学号: "; cin>>stu.ID; cout<<"┃姓名: "; cin>>stu.name; cout<<"┃性别(g/b): "; fflush(stdin); cin>>stu.sex; cout<<"┃房间号: "; cin>>stu.roomnum; cout<<"┃是否继续? (y/n)"; returnstu; } /*自定义显示函数*/ voiddisplay(structstudentstu) { cout<<"\t┃"< cout< cout< cout< cout<<"\t┣━━━╋━━━╋━━━╋━━━┫\n"; } /*自定义排序函数-冒泡*/ voidsort(structstudentstu[N],inti) { intj,k; structstudenttemp; for(j=0;j { for(k=0;k { if((stu[k].ID)>(stu[k+1].ID)) { temp=stu[k]; stu[k]=stu[k+1]; stu[k+1]=temp; } } } } /*自定义主菜单函数*/ intMainMenu() { intchoice; cout<<"\n\n\n\n"; cout<<"\t┏━━━━━━━━⊕欢迎使用宿舍管理查询系统⊕━━━━━━━━━━┓\n"; cout<<"\t┃┃\n"; cout<<"\t┃╭────☆主菜单☆────╮┃\n"; cout<<"\t┃││┃\n"; cout<<"\t┃│1>学生信息录入│┃\n"; cout<<"\t┃│2>学生信息显示│┃\n"; cout<<"\t┃│3>查找学生信息│┃\n"; cout<<"\t┃│4>退出│┃\n"; cout<<"\t┃╰─────────────╯作者: 万策明┃\n"; cout<<"\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n"; cout<<"\n\t→请选择功能选项: "; cin>>choice; returnchoice; } /*自定义按照学号查找函数--二分查找*/ voidXueHaoChaZhao(structstudentstu[N],inti) { intXueHao; charch; system("cls"); cout<<"\t┎┅┅┅┅┅┅┅您选择的是按照学号查找┅┅┅┅┅┅┅┒\n\n"; do { cout<<"\t》请输入学号: "; cin>>XueHao; intlow=1,high=i; while(low<=high) { intmid=(low+high)/2; if(stu[mid].ID==XueHao) { ShowHeader(); display(stu[mid]); break; } elseif(stu[mid].ID>XueHao) high=mid-1; else low=mid+1; } fflush(stdin); cin>>ch; } while(ch=='y'); } /*自定义按照姓名查找函数*/ voidXingMingChaZhao(structstudentstu[N],inti) { charname[15]; charch; system("cls"); cout<<"\t┎┅┅┅┅┅┅┅您选择的是按照姓名查找┅┅┅┅┅┅┅┒\n\n"; do { cout<<"\t》请输入姓名: "; cin>>name; intlow=1,high=i; while(low<=high) { intmid=(low+high)/2; if(strcmp(name,stu[mid].name)==0) { ShowHeader(); display(stu[mid]); break; } elseif(stu[mid].name>name) high=mid-1; else low=mid+1; } fflush(stdin); cin>>ch; } while(ch=='y'); } //按照房间号查找二分查找 voidFangJianChaZhao(structstudentstu[N],inti) { introom; charch; system("cls"); cout<<"\t┎┅┅┅┅┅┅┅您选择的是按照房间号查找┅┅┅┅┅┅┅┒\n\n"; do { cout<<"\t》请输入房间号: "; cin>>room; intlow=1,high=i; while(low<=high) { intmid=(low+high)/2; if(stu[mid].roomnum==room) { ShowHeader(); display(stu[mid]); break; } elseif(stu[mid].roomnum>room) high=mid-1; else low=mid+1; } fflush(stdin); cin>>ch; } while(ch=='y'); } /*自定义查找功能子菜单函数*/ intChaZhaoMenu() { system("cls"); cout<<"\n\n"; cout<<"\t╔═════════㊣☆查找功能子菜单☆═════════╗\n"; cout<<"\t║║\n"; cout<<"\t║1、按照学号查找║\n"; cout<<"\t║║\n"; cout<<"\t║2、按照姓名查找║\n"; cout<<"\t║║\n"; cout<<"\t║3、按照房间号查找║\n"; cout<<"\t║║\n"; cout<<"\t║4、退出子菜单,返回上一级菜单║\n"; cout<<"\t║║\n"; cout<<"\t╚═══════════════════════════════╝\n"; cout<<"\n\t》请选择功能选项: "; intchoice4; cin>>choice4; returnchoice4; } voidShowHeader() { system("cls"); cout<<"\n\n"; cout<<"\t┏━━━┳━━━┳━━━┳━━━┓\n"; cout<<"\t┃学号\t┃姓名\t┃性别\t┃房间号┃\n"; cout<<"\t┣━━━╋━━━╋━━━╋━━━┫\n"; } /*主函数开始*/ voidmain() { structstudentstu[N]; intcount=0,m=0,j; charch,ch1; intchoice,choice4;//菜单选项及子菜单选项 do//此循环体控制用户信息输入错误后是否重输 { do//此循环体控制返回主菜单 { ch1='n';//如果用户将主菜单选择错误,可用此变量控制是否重输 choice=MainMenu(); switch(choice)//此条件结构控制选择菜单功能后的操作 { case1: //输入学生信息 { do//此循环体控制是否继续输入 { system("cls"); cout<<"\n"; cout<<"┏━━━━━━━━━━⊙学员信息录入⊙━━━━━━━━━━┓\n"; cout<<"┃┃\n"; cout<<"┃请输入第"< cout<<"┃┃\n"; stu[count]=ShuRu();//调用输入函数 fflush(stdin);//刷新标准输入缓冲区,把输入缓冲区里的东西丢弃 cin>>ch; count++; } while(ch=='y'); break; } case2: //显示排序好的学生信息 { cout<<"┏━━━━━━━━━━━Θ学员信息显示Θ━━━━━━━━━━━┓\n"; cout<<"┃排序后的信息如下: ┃\n"; sort(stu,count);//调用排序函数 ShowHeader(); for(j=0;j { display(stu[j]);//调用显示函数 } break; } case3: //查找功能 { while(choice4! =4)//控制是否继续查找 { choice4=ChaZhaoMenu();//调用查找子菜单函数 if(choice4==1)//控制按照学号查找 { XueHaoChaZhao(stu,count);//调用按照学号查找的函数 } if(choice4==2)//控制按照姓名查找 { XingMingChaZhao(stu,count);//调用按照姓名查找的函数 } if(choice4==3)//控制按照房间查找 { FangJianChaZhao(stu,count);//调用按照房间查找的函数 } } break; } case4: //退出 { cout<<"\t确认退出? (y/n)";//让用户确认是否退出 cin>>ch; if(ch=='y') { cout<<"\t欢迎下次使用宿舍管理查询系统"; system("pause"); exit(0); } break; } default: { cout<<"\t\a警告: 你输入有误! 请重输(y/n)"; cin>>ch1; if(ch1=='n') { cout<<"\t欢迎下次使用宿舍管理查询系统"; system("pause"); exit(0); } break; } } } while(ch=='n'||ch1=='y');//控制是否要退出系统 { cout<<"\t\a警告: 你输入有误! 请重输(y/n)"; } fflush(stdin); cin>>ch; } while(ch=='y'); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 算法 设计 课程设计 报告
