




已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
信息科学与技术学院程序设计基础课程设计报告题目名称: 通信管理系统 学生姓名: 学 号: 专业班级: 指导教师: 2016年 12月 31日目录1.课程设计题目与要求11.1设计题目11.2设计要求12.总体设计22.1 总体功能框架22.2 数据结构概要设计23.详细设计33.1 数据结构详细设计33.2 系统功能详细设计114.运行结果165.课程设计总结205.1 编程中的问题及解决方法205.2 小结205.3 心得体会205.4 程序设计方法20参考文献211.课程设计题目与要求1.1设计题目通信管理系统1.2设计要求用C/C+设计出模拟手机通信录管理系统,实现对手机中的通信录进行管理。(一)功能要求(1)查看功能:选择此功能时,列出下列三类选择。A 办公类 B 个人类 C 商务类 ,当选中某类时,显示出此类所有数据中的姓名和电话号码)(2)增加功能:能录入新数据(一个结点包括:姓名、电话号码、分类(可选项有:A 办公类 B 个人类 C 商务类)、电子邮件)。例如杨春商务类 Chuny126.C+om当录入了重复的姓名和电话号码时,则提示数据录入重复并取消录入;当通信录中超过15条信息时,存储空间已满,不能再录入新数据;录入的新数据能按递增的顺序自动进行条目编号。(3)拔号功能:能显示通信录中所有人姓名,当选中某个姓名时,屏幕上模拟打字机的效果依次显示此人电话号码中的各个数字,并伴随相应的拔号声音。(4)修改功能:选中某个人的姓名时,可对此人的相应数据进行修改(5)删除功能:选中某个人的姓名时,可对此人的相应数据进行删除,并自动调整后续条目的编号。(二)其它要求:(1) 只能使用C/C+语言,源程序要有适当的注释,使程序容易阅读(2) 至少采用文本菜单界面(如果能采用图形菜单界面更好)(3) 建议使用结构和链表等数据结构(4) 学生可自动增加新功能模块(视情况可另外加分)2.总体设计2.1 总体功能框架图 2-1 总体功能框架图2.2 数据结构概要设计本通信管理系统采用的数据结构为线性表中的链表。链表的结构体成员分为数据域和指针域。数据域为联系人(contacts)结构体,成员有联系人姓名(name)、联系人电话号码(teleNum)、联系人类别(classes)、电子邮件(email)四个。图 2-2 数据结构组成3.详细设计3.1 数据结构详细设计结构体名称:contact,LNode,*LinkListtypedef structstring name; /姓名string teleNum; /电话号码int classes; /分类string email; /电子邮件contacts;typedef struct LNodecontacts data; /数据域struct LNode* next; /指针域LNode,*LinkList;具体操作:InitList(&L)操作结果:初始化链表具体代码:int InitList(LinkList &L)L = new LNode;L-next = NULL;return 0;CreateList_H(&L, n)操作结果:前插法创建一个链表具体代码:void CreateList_H(LinkList &L,int n) LinkList p; for(int i = 0;i n;i+) /根据联系人个数创建链表 p = new LNode; cout ; cout p-data.teleNum; cout 请输入联系人的分类(分类如下,输入相应序号即可) endl; cout 1 办公类 2 个人类 3 商务类 p-data.classes; cout p-data.email; p-next = L-next; L-next=p; CheckAll(L, c)操作结果:显示类别为c的联系人姓名和电话号码具体代码:void CheckAll(LinkList L,int c)/c是联系人类别LinkList p;p = L-next;cout 姓名tt 电话号码 data.classes=c) /若符合类别则输出联系人姓名和电话号码 cout tt data.teleNum next;CheckAll(L)操作结果:显示已有联系人的姓名具体代码:void CheckAll(LinkList L)LinkList p; p=L-next; while(p) cout next; Search(L, name)操作结果:找到名为name的联系人位置具体代码:LinkList Search(LinkList L,string name) LinkList p; p=L-next; while(p&!=name) /当链表没到尾部且没找到联系人时 p=p-next; return p;IfExist(L, c)操作结果:判断是否存在联系人contacts具体代码:char IfExist(LinkList L,contacts c) LinkList p; p=L-next; while(p&!=) /根据姓名查找是否存在该联系人 p=p-next; if(!p) /若到达链表尾部,则不存在 return n; if(p-data.teleNum=c.teleNum) /若找到联系人姓名 if(p-data.classes=c.classes) /依次判断电话号码、类别、电子邮件是否相同 if(p-data.email=c.email) return y; return n;Length(L)操作结果:获取链表的长度具体代码:int Length(LinkList L) int i=0; LinkList p=L-next; while(p) +i; p=p-next; return i;Add(&L, c)操作结果:把contacts添加到链表中具体代码:int Add(LinkList &L,contacts c)LinkList p,s;if(Length(L)=MAXSIZE) /判断链表长度是否达到最大值 cout 存储空间已满,无法新增联系人! endl; return 0; if(IfExist(L,c)=y) /判断输入的联系人是否已经存在 cout 对不起,您输入的联系人已存在! data=c;s-next=p-next;p-next=s;return 0;Dail(L,name)操作结果:拨打姓名为name的联系人的电话具体代码:void Dail(LinkList L,string name) LinkList p,s; p=L-next; s=Search(L,name); /根据姓名查找联系人所在/模拟打字机效果,输出联系人电话号码 string tele=s-data.teleNum; for(int i=0;itele.length();i+) char c=telei; Sleep(500); cout c;cout endl;/播放声音 PlaySound(E:670.wav,NULL,SND_FILENAME|SND_ASYNC);ChangeInfo(&L, name)操作结果:修改姓名为name的联系人的信息具体代码:void ChangeInfo(LinkList &L,string name) LinkList p; p=Search(L,name); /找到联系人的位置所在 cout 请输入要修改的信息(输入对应序号即可): endl; cout 1 姓名 endl; cout 2 电话号码 endl; cout 3 分类 endl; cout 4 电子邮件 elec; switch(elec) case 1: cout 姓名改为: newName; =newName; break; case 2: cout 电话号码改为: newTele; p-data.teleNum=newTele; break; case 3: cout 分类改为(分类如下,输入相应序号即可); cout 1 办公类 2 个人类 3 商务类 newCalsses; p-data.classes=newCalsses; break; case 4: cout 电子邮件改为: newEmail; p-data.email=newEmail; break; Delete(&L, name)操作结果:删除姓名为name的联系人具体代码:void Delete(LinkList &L,string name) LinkList p=L,s; /找到需删除联系人的前一个位置 while(p-next&!=name) p=p-next; s=p-next; p-next=s-next; delete s; /删除联系人 Read(L)操作结果:从文件中读入信息到链表具体代码:void Read(LinkList L)LinkList p;/打开文件导入通信录 ifstream fin;fin.open(通信录.txt,ios:in);string s1,s2,s3,s4;fin s1 s2 s3 s4;while(!fin.eof() /当没有到文件尾时 string s5;contacts c;fin c.teleNum s5 c.email;if(pare(办公类)=0)c.classes=1;if(pare(个人类)=0)c.classes=2;if(pare(商务类)=0)c.classes=3;Add(L,c); /将联系人c增加到链表中 fin.close(); Write(L)操作结果:将所有联系人导出到文件里保存具体代码:void Write(LinkList L)LinkList p=L-next;int l=Length(L);/打开文件写入通信录 ofstream fout(通信录.txt,ios:out|ios:trunc);fout 姓名t 电话号码t 分类t 电子邮件 endl;for(int i=0;il;i+)fout t data.teleNum data.classes)case 1:fout 办公类;break;case 2:fout 个人类;break;case 3:fout 商务类;break; fout t data.email;if(i(l-1)fout next;fout.close();3.2 系统功能详细设计3.2.1 文件数据读出(1)函数原型: void CreateList_H(LinkList &L,int n)(2)函数功能: 创建链表,给链表增加n个联系人(3)函数形参: CreateList_H(&L, n),其中L是链表指针,n是增加的联系人的数目(4)函数算法流程:如图3-1所示3-1算法流程图13.2.2 文件数据读出(1)函数原型: int Add(LinkList &L, contacts c)(2)函数功能: 单个增加联系人(3)函数形参: Add(&L, c),其中L是链表指针,c是具体的联系人(4)函数算法流程:如图3-2所示3-2算法流程图23.2.3 文件数据读出(1)函数原型:void Dail(LinkList L, string name)(2)函数功能: 拨打姓名为name的联系人的电话,在拨打时依次显示此人电话号码中的各个数字,并伴随相应的拔号声音(3)函数形参: Dail(L, name),其中L为链表指针,name为拨号的联系人的姓名(4)函数算法流程:如图3-3所示3-3 算法流程图33.2.4 文件数据读出(1)函数原型: void ChangeInfo(LinkList &L, string name)(2)函数功能: 修改姓名为name的联系人的信息(3)函数形参: ChangeInfo(&L, name),其中L为链表指针,name为将要修改信息的联系人的姓名(4)函数算法流程:如图3-4所示3-4 算法流程图43.2.5 文件数据读出(1)函数原型: void Delete(LinkList &L, string name)(2)函数功能: 从链表中删除姓名为name的联系人(3)函数形参: Delete(&L, name),其中L为链表指针,name为将要删除的联系人的姓名(4)函数算法流程:如图3-5所示3-5 算法流程图53.2.6 文件数据读出(1)函数原型: void Read(LinkList L)(2)函数功能: 将文件中的联系人信息导入通信管理系统中(3)函数形参:Read(L),其中L为链表指针(4)函数算法流程:如图3-6所示3-6 算法流程图63.2.7 文件数据读出(1)函数原型: void Write(LinkList L)(2)函数功能: 将通信管理系统中所有联系人的各项信息有序的导出,保存在文件里(3)函数形参: Write(L),其中L为链表指针(4)函数算法流程:如图3-7所示3-7 算法流程图74.运行结果(1)打开系统,显示主菜单界面,如图4-1所示:图4-1 主菜单界面(2)输入数字1,进行新增联系人的操作。接着输入1选择批量增加,输入数字2选择单个增加。批量增加如图4-2所示,单个增加如图4-3所示:图4-2 批量增加联系人图4-3 单个增加联系人(3)输入数字2,进行查看通信录的操作,然后选择联系人的类别,查看此类中的所有联系人姓名及电话号码,如图4-4所示:图4-4 按类别查看联系人(4)输入数字3,进行拨号操作,如图4-5所示:图4-5 拨号(5)输入数字4,进行修改信息操作,然后输入将要修改信息的联系人姓名,再选择学要修改的信息项,如图4-6所示:图4-6 修改联系人信息(6)输入数字5,然后输入将要删除的联系人姓名,进行删除联系人的操作,如图4-7所示:图4-7 删除联系人(7)输入数字6,进行导入通信录操作,将文件“通讯录.txt”中的联系人信息导入通讯管理系统,如图4-8所示:图4-8 导入通信录(8)输入数字7,进行导出通信录操作,如图4-9所示;导出的通信录如图4-10所示:图4-9 导出通信录图4-10 已导出通信录列表(9)输入数字0,退出通信管理系统,如图4-11所示:图4-11 退出通信管理系统5.课程设计总结5.1 编程中的问题及解决方法在本次程序设计过程中,遇到的主要
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025届春季中国融通集团校园招聘考前自测高频考点模拟试题及答案详解1套
- 2025年宁波市中医院公开招聘派遣制护士20人考前自测高频考点模拟试题含答案详解
- 2025广西仙城投资发展集团有限公司第一次招聘人员考前自测高频考点模拟试题附答案详解
- 2025广东广州市榄核咨询服务有限公司招聘1人笔试历年参考题库附带答案详解
- 贵州国企招聘2025六枝特区区属国有企业选聘市场化职业经理人笔试历年参考题库附带答案详解
- 浙江国企招聘2025温州平阳县国润控股有限公司公开招聘项目制专技人员9人笔试历年参考题库附带答案详解
- 2025黑龙江省水利水电集团有限公司总部机关及财务共享分中心员工岗位竞聘10人笔试历年参考题库附带答案详解
- 2025陕西建工控股集团有限公司校园招聘启动笔试历年参考题库附带答案详解
- 2025年金华东阳市人民医院招聘编外人员8人模拟试卷及1套参考答案详解
- 2025国网物资有限公司第二批高校毕业生录用人选的考前自测高频考点模拟试题及完整答案详解一套
- 动物安乐死协议书(2篇)
- 2019年医疗器械体外诊断与病理诊断行业分析报告
- DL-T2078.2-2021调相机检修导则第2部分:保护及励磁系统
- 国开(河北)2024年《中外政治思想史》形成性考核1-4答案
- 新起点大学英语综合教程1
- 小学数学添括号去括号简便计算练习100道及答案
- 师德师风考核表
- 三年级上册语文必考点1-8单元按课文内容填空专项练习
- 《一、圆锥曲线的光学性质及其应用》教学设计(部级优课)-数学教案
- 装配钳工高级试题与答案
- GB/T 27809-2011热固性粉末涂料用双酚A型环氧树脂
评论
0/150
提交评论