课程论文模块30740327张健东.docx
- 文档编号:18471031
- 上传时间:2023-08-18
- 格式:DOCX
- 页数:31
- 大小:902.36KB
课程论文模块30740327张健东.docx
《课程论文模块30740327张健东.docx》由会员分享,可在线阅读,更多相关《课程论文模块30740327张健东.docx(31页珍藏版)》请在冰点文库上搜索。
课程论文模块30740327张健东
《高级语言课程设计》
题目:
通讯录程序
班级:
2012级软件学院软件工程05班
学生学号:
201231000812
学生姓名:
郭富城
指导老师:
殷建军
提交时间:
2012年4月28日
成绩:
评分项目
得分
功能完整性(40分)
界面美观性(10分)
设计合理性及创新性(20分)
答辩表现(20分)
报告撰写质量(10分)
华南农业大学信息学院
目录
封面和评分表…………………………………………………………………………………
(1)
目录……………………………………………………………………………………………
(2)
正文……………………………………………………………………………………………(3)
第一章问题描述………………………………………………………………………………(3)
1.1简要描述……………………………………………………………………………(3)
1.2系统功能分析………………………………………………………………………(3)
1.3开发平台及工具介绍………………………………………………………………(4)
2
第二章系统设计………………………………………………………………………………(5)
2.1系统总体结构设计…………………………………………………………………(5)
2.2数据结构设计………………………………………………………………………(5)
2.3系统各个函数及函数之间关系设计………………………………………………(6)
2.4界面设计……………………………………………………………………………(8)
第三章系统实现……………………………………………………………………………(10)
第四章系统测试……………………………………………………………………………(17)
3
4
4.1模块测试……………………………………………………………………………(17)
4.2系统测试……………………………………………………………………………(23)
第五章系统运行界面………………………………………………………………………(26)
第六章总结…………………………………………………………………………………(33)
1
问题描述
简要描述1、题目描述
设计一个教务信息管理系统,该程序具有以下功能:
(1)录入如下信息:
学生基本信息:
如学号、姓名、性别、年龄、宿舍号码、电话号码等。
学生选修课程的基本信息:
课程编号、课程名称、考试成绩、平时成绩、综合成绩、学分、重修否等。
如果重修,需要考虑重修学期、重修成绩,并且要考虑多次重修的情况。
(2)统计每个学生各门功课的平均成绩,并按平均成绩从高到低的次序排名输出每个学生各门功课的综合成绩和平均成绩(名次、学号、姓名、平均成绩、各门功课的考试成绩、平时成绩、综合成绩)。
(3)统计并输出各班各门功课的平均成绩和总平均成绩。
(4)统计并输出每个同学已修学分。
(5)列出不及格学生清单(学号、姓名、不及格的课程和成绩)。
(6)教务信息其它方面的统计(自行确定,加分项)。
2、题目要求
(1)按照分析、设计、编码、调试和测试过程完成应用程序;
(2)学习并使用流程图等工具,并在撰写论文中使用;
(3)程序的各项功能在程序运行时,以菜单方式选择并执行;
(4)要求用户输入数据时,要给出清晰、明确的提示,包括:
输入数据的内容、格式及结束方式等
(5)所有的信息存储在文件中,并实现文件读写操作。
3、提示
(1)学生基本信息可以设计一个结构体类型
(2)多个学生基本信息可以以数组或链表来存储。
1.1系统功能分析
实现学生信息的输入,保存,统计,输出等动能。
1.2开发平台及工具介绍
开发平台:
Windows7
开发工具:
VisualC++6.0
2
系统设计
2.1系统总体结构设计
2.2数据结构设计
主要数据的结构:
用户的通讯录信息数据在载入程序后以Treap的形式存在。
Treap是一棵二叉排序树,它的左子树和右子树分别是一个Treap,和一般的二叉排序树不同的是,Treap纪录一个额外的数据,就是优先级。
Treap在以关键码构成二叉排序树的同时,还满足堆的性质。
二叉排序树有一个特性,就是每个子树的形态在优先级唯一确定的情况下都是唯一的,不受其他因素影响,也就是说,左子树的形态与树中大于根节点的值无关,右子树亦然。
因此,Treap的根节点是优先级最小的那个节点,考虑它的左子树,树根也是子树里面最小的一点,右子树亦然。
所以Treap相当于先把所有节点按照优先级排序,然后插入,实质上就相当于以随机顺序建立的二叉搜索树,只不过它并不需要一次读入所有数据,可以一个一个地插入。
而当这个随机顺序确定的时候,这个树是唯一的。
在给定优先级的情况下,只要是用符合要求的操作,通过任何方式得出的Treap都是一样的,所以不改变优先级的情况下,特殊的操作不会造成Treap结构的退化。
因此,Treap是一种平衡的二叉排序树。
可以证明,Treap的插入、删除、查找等操作的期望复杂度是O(logn)。
本程序中Treap以链表的形式实现。
数据的持久存储设计:
所有用户的账号与密码统一存放在名为UserList.dat的文件中,而各个用户的通讯录信息数据分别存放在一个文件中,文件名均为十位随机的大写字母或数字,后缀名为.dat。
2.3系统各个函数及函数之间关系设计
界面函数:
voidgotoxy(int,int);//光标定位
主菜单界面函数:
voidMainMenu(void);//主菜单界面
intLogIn(void);//用户登录
intRegister(void);//用户注册
voidSettings(void);//功能设置
voidAbout(void);//关于软件
intQuit(void);//退出程序
用户界面函数:
voidUserInterface(void);//用户界面
voidAdd_New_Contact(void);//添加联系人信息
voidEdit_Contact(void);//修改联系人信息
voidDelete_Contact(void);//删除联系人信息
voidSearch(void);//查找联系人信息
voidShow_Group(void);//显示分类信息
voidStatistics(void);//统计功能
intNewPsd(void);//用户密码修改
intLogOut(void);//注销
数据与文件操作函数:
voidLoadFile(void);//载入数据
voidSaveFile(void);//保存数据
structContactPersonNode*Insert(structContactPersonNode*,structContactPersonNode*);//Treap的插入操作
structContactPersonNode*Delete(structContactPersonNode*,structContactPersonNode*);//Treap的删除操作
structContactPersonNode*Search_Name(structContactPersonNode*,structContactPersonNode*);//Treap的查找操作
structContactGroupNode*Count(structContactGroupNode*,structContactPersonNode*);//Treap的统计功能
2.4界面设计
本程序的界面设计的最大特点是使用指针符号指向用户即将选择的选项,并采用键盘的方向键进行移动指针操作,避免用户记忆繁杂的键盘操作,使用起来更便捷。
图(a)主菜单界面
图(b)用户界面
3
系统实现
用户登录流程图
添加联系人信息流程图
修改联系人信息流程图
删除联系人信息流程图
查找联系人信息流程图
显示分类信息流程图
统计功能流程图
4
系统测试
4.1模块测试
用户登录测试
说明:
登录前已注册了账号为Scott,密码为12345的用户。
成功操作测试:
输入数据:
账号:
Scott,密码:
12345。
预期结果:
登录成功。
运行结果:
登录成功。
测试结论:
预期结果与运行结果一致,通过成功操作测试。
失败操作测试:
输入数据:
账号:
Scott,密码:
12346。
预期结果:
密码错误,登录失败。
运行结果:
登录失败。
测试结论:
预期结果与运行结果一致,通过失败操作测试。
总结论:
通过用户登录测试。
添加联系人信息测试
说明:
添加联系人信息前已存在联系人AliceZhang,BobLi,CindyDeng,EricChen,MikeTang,TomHuang,YoyoZheng。
成功操作测试:
输入数据:
分类:
Friend,姓名:
LindaCheung,姓氏:
Cheung,地址:
HongKong,电话号码:
1357924680,QQ:
1470369258,E-mail:
lindacheung@,备注:
Joking。
预期结果:
添加成功。
运行结果:
添加成功。
测试结论:
预期结果与运行结果一致,通过成功操作测试。
失败操作测试:
输入数据:
分类:
Friend,姓名:
AliceZhang,姓氏:
Zhang,地址:
U.S.A.,电话号码:
1357924680,QQ:
1470369258,E-mail:
alicezhang@,备注:
Joking。
预期结果:
联系人已存在,添加失败。
运行结果:
添加失败。
测试结论:
预期结果与运行结果一致,通过失败操作测试。
总结论:
通过添加联系人信息测试。
修改联系人信息测试
说明:
修改联系人信息前已存在联系人AliceZhang,BobLi,CindyDeng,EricChen,MikeTang,TomHuang,YoyoZheng。
其中,BobLi的地址为England。
成功操作测试:
输入数据:
姓名:
BobLi,修改地址:
Australia。
预期结果:
修改成功。
运行结果:
修改成功。
测试结论:
预期结果与运行结果一致,通过成功操作测试。
失败操作测试:
输入数据:
姓名:
LindaCheung,修改地址:
U.S.A.。
预期结果:
联系人不存在,修改失败。
运行结果:
修改失败。
测试结论:
预期结果与运行结果一致,通过失败操作测试。
总结论:
通过修改联系人信息测试。
删除联系人信息测试
说明:
删除联系人信息前已存在联系人AliceZhang,BobLi,CindyDeng,EricChen,MikeTang,TomHuang,YoyoZheng。
成功操作测试:
输入数据:
姓名:
CindyDeng。
预期结果:
删除成功。
运行结果:
删除成功。
测试结论:
预期结果与运行结果一致,通过成功操作测试。
失败操作测试:
输入数据:
姓名:
LindaCheung。
预期结果:
联系人不存在,删除失败。
运行结果:
删除失败。
测试结论:
预期结果与运行结果一致,通过失败操作测试。
总结论:
通过删除联系人信息测试。
查找联系人信息测试
说明:
查找联系人信息前已存在联系人AliceZhang,BobLi,CindyDeng,EricChen,MikeTang,TomHuang,YoyoZheng。
成功操作测试1:
输入数据:
姓名:
EricChen。
预期结果:
查找成功,显示联系人的信息。
运行结果:
查找成功,显示联系人的信息。
测试结论:
预期结果与运行结果一致,通过成功操作测试1。
成功操作测试2:
输入数据:
姓氏:
Tang。
预期结果:
查找成功,显示联系人的信息。
运行结果:
查找成功,显示联系人的信息。
测试结论:
预期结果与运行结果一致,通过成功操作测试2。
失败操作测试1:
输入数据:
姓名:
LindaCheung。
预期结果:
联系人不存在,查找失败。
运行结果:
查找失败。
测试结论:
预期结果与运行结果一致,通过失败操作测试1。
失败操作测试2:
输入数据:
姓氏:
Cheung。
预期结果:
联系人不存在,查找失败。
运行结果:
查找失败。
测试结论:
预期结果与运行结果一致,通过失败操作测试2。
总结论:
通过查找联系人信息测试。
显示分类信息测试
说明:
显示分类信息前已存在分类Classmate,包含联系人AliceZhang,BobLi,CindyDeng,EricChen,分类Friend,包含联系人MikeTang,TomHuang,YoyoZheng。
成功操作测试:
输入数据:
分类名:
Classmate。
预期结果:
查找成功,显示相应分类的信息。
运行结果:
查找成功,显示相应分类的信息。
测试结论:
预期结果与运行结果一致,通过成功操作测试。
失败操作测试:
输入数据:
分类名:
Family。
预期结果:
分类不存在,查找失败。
运行结果:
分类不存在,查找失败。
测试结论:
预期结果与运行结果一致,通过失败操作测试。
总结论:
通过显示分类信息测试。
统计功能测试
说明:
显示分类信息前已存在分类Classmate,包含联系人AliceZhang,BobLi,CindyDeng,EricChen,分类Friend,包含联系人MikeTang,TomHuang,YoyoZheng。
操作测试:
输入数据:
无。
预期结果:
显示各分类人数及相关信息。
运行结果:
显示各分类人数及相关信息。
测试结论:
预期结果与运行结果一致,通过操作测试。
总结论:
通过统计功能测试。
4.2系统测试
说明:
进行系统测试前不存在任何数据文件。
测试任务:
(1)注册一个账号为Administrator,密码为Password的用户。
(2)登录Administrator。
(3)添加五个新的联系人,信息如下:
第一个联系人:
分类:
Test
姓名:
Guest1Random
姓氏:
Random
地址:
Internet
电话号码:
12345678
QQ:
13572468
E-mail:
guestrandom@
备注:
Default
第二个联系人:
分类:
Test
姓名:
Guest2Random
姓氏:
Random
地址:
Internet
电话号码:
12345678
QQ:
13572468
E-mail:
guestrandom@
备注:
Default
第三个联系人:
分类:
Test
姓名:
Guest3Random
姓氏:
Random
地址:
Internet
电话号码:
12345678
QQ:
13572468
E-mail:
guestrandom@
备注:
Default
第四个联系人:
分类:
Add
姓名:
Guest4Random
姓氏:
Random
地址:
Internet
电话号码:
12345678
QQ:
13572468
E-mail:
guestrandom@
备注:
Default
第五个联系人:
分类:
Add
姓名:
Guest5Random
姓氏:
Random
地址:
Internet
电话号码:
12345678
QQ:
13572468
E-mail:
guestrandom@
备注:
Default
(4)修改联系人Guest1Random的信息,将地址改为SouthChinaAgriculturalUniversity。
(5)删除联系人Guest2Random的信息。
(6)以姓名方式查找Guest3Random的信息。
(7)以姓氏方式查找Random的信息
(8)查找分类为Add的信息。
(9)查看各分类的人数。
结果:
运行结果与预期结果一致。
结论:
通过系统测试。
5
系统运行界面
图(a)注册成功
图(b)登录
图(c)添加联系人信息
图(d)修改联系人信息
图(e)删除联系人信息
图(f)查找联系人信息
图(g)显示分类信息
图(h)统计功能
图(i)用户密码修改
图(j)注销
图(k)主菜单界面
图(l)用户界面
图(m)关于软件
图(n)退出程序
6
总结
通过完成这次高级语言课程设计,我不仅学会综合运用高级语言程序设计课程中所学到的知识,提高编写程序解决实际问题的能力,还深深地体会到了软件工程思想的先进性。
在完成课程设计的过程中,我了解了程序设计的基本开发过程,并掌握了编写、调试和测试C/C++语言程序的基本技巧以及充分理解到结构化程序设计的基本方法。
具体地说,我基本上按照题目的要求完成相关的功能实现,制作了对应比较美观的界面,还在程序中使用了函数、排序、查找、文件、结构体、链表等程序设计知识。
另外,对于效率要求较高的部分,我使用了一种平衡的二叉排序树——Treap来完成相应的查找、排序等功能。
而在文件操作中,我采用的是文件缓冲区等高效文件读写操作。
除了题目要求的功能外,我还设计并实现了修改密码、指针选择等新增功能,使我的通讯录程序功能更加丰富、实用。
当然,美中有不足,在实现查找功能时,我没有考虑到用户对于模糊查找的需求,只能使用精确查找。
总的来说,对于这次的课程设计,我对自己表现的评价是基本满意的。
在具体实现程序中的每个功能时,我逐渐发觉软件工程思想是一种非常先进的思想。
比如说,在制作软件之前,我们需要准确了解用户的需求,设定功能实现的对应方案,并在规定的时间内合理地分配任务到各种不同人员的手中,以完成最终的任务。
我虽然明白这个道理,但在实践当中却很难做到里面的要求。
首先,这次课程设计的任务是个人独立任务,我需要独立完成软件的所有部分。
其次,我在动手制作前曾反复提醒自己先写主体骨架,再将每个部分拓展为具体功能。
但是,由于我不太熟悉控制台相关的功能设置,在开始的好几天都只是试探性的探索相关的功能,没有实质的进展。
随后,我又急着把界面弄好,在核心代码完全没有动笔之前,我就一直在做界面。
结果,经不完全统计,我制作界面的时间占了整个程序制作时间的三分之二。
这种做法是非常危险的,万一我的界面一直没弄好,而我又钻牛角尖,我很可能无法在规定的时间内完成整个课程设计。
这一点,我真的需要好好反省。
最后要说的是,在完成课程设计的过程中,我对程序设计的认识又加深了一层,弄懂了好多以前不懂的问题。
在经历了这两千多行的代码的磨练后,我相信,以后的程序设计之路可以少走很多弯路了。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程 论文 模块 30740327 张健东