课程设计(论文)任务书
软 件 学 院 软件+桥梁 专 业 2012-3 班
一、课程设计(论文)题目 手机通讯录管理系统
二、课程设计(论文)工作自 2012 年 6 月 17日起至 2013 年6月 23日止。
三、课程设计(论文) 地点: 软件学院实训中心
四、课程设计(论文)内容要求:
1.本课程设计的目的
(1)熟练掌握C++语言的基本知识和技能;
(2)基本掌握面向对象程序设计的基本思路和方法;
(3)利用所学的基本知识和技能,解决简单的面向对象程序设计问题;
(4)提高学生的科技论文写作能力。
2.课程设计的任务及要求
1)基本要求:
(1)课程设计前必须根据课程设计题目认真准备实验源程序及调试时所需的数据;
(2)要求采用简明、严格的问题描述,设计求解算法;
(3)数据结构选用得当,程序结构合理;
(4)程序简明易懂,多运用输出提示,程序运行正确;
(5)对设计进行总结和讨论。
2)课程设计论文编写要求
(1)要按照书稿的规格打印撰写课设论文
(2)论文包括中文摘要、目录、绪论、正文、总结和体会、参考文献、附录等
(3)正文中要有问题描述、设计求解算法、算法的实现、调试分析(调试时出现
的主要问题:编译语法错误及修改,重点是运行逻辑问题修改和调整)
(4)课设论文装订按学校的统一要求完成
3)课设考核:
从以下几方面来考查:
(1)出勤情况;
(2)设计任务的难易程度及饱满程度;
(3)课设任务完成情况;
(4)动手调试能力;
(5)论文撰写的原理分析、设计思路以及论述的层次性、条理性、格式的规范性。
4)参考文献:
[1] 谭浩强.C++程序设计(第二版).清华大学出版社
[2] http://download.chinaitlab.com/
[3] 吕凤翥.C++语言基础教程(第2版).清华大学出版社.
[4] 吕凤翥.C++语言基础教程题解与上机指导(第二版).清华大学出版社.
[5] StanleyB.Lippman , JoseeLaijoie等.C++ primer(中文版).人民邮电出版社
5)课程设计进度安排
内容 天数 地点
构思及收集资料 1 图书馆
程序设计与调试 3 计算机房
撰写论文 1 图书馆
6)选择课程设计题目具体要求:
用C++设计出模拟手机通信录管理系统,实现对手机中的通信录进行管理。至少采
文本菜单界面(如果能采用图形菜单界面更好),功能要求:
查看功能:选择此功能时,A 同事 B 朋友 C 家庭 ,当选中某类时,显
示出此类所有数据中的姓名和电话号码)
增加功能:能录入新数据;修改功能:选中某个人的姓名时,对此人的数据进行修改
删除功能:选中某个人的姓名时,可对此人的相应数据进行删除等等功能。
学生签名:
2008年6月16日
课程设计(论文)评审意见
(1)完成原理分析(20分):优( )、良( )、中( )、一般( )、差( );
(2)设计分析 (25分):优( )、良( )、中( )、一般( )、差( );
(3)完成调试 (20分):优( )、良( )、中( )、一般( )、差( );
(4)运行结果 (20分):优( )、良( )、中( )、一般( )、差( );
(5)答辩 (15分):优( )、良( )、中( )、一般( )、差( );
(6)格式规范性及考勤是否降等级:是( )、否( )
评阅人签名: 职称: 副教授
2012 年6 月10日
摘 要
该课程设计报告分别对模拟手机通信管理系统的功能需求进行了分析,对程序设计说明、程序功能说明、算法说明、主要变量说明、调试说明等。以将每个功能分别编译实现,再通过函数包含,调用等方法实现各项功能间的连接为设计思想,在程序设计中,采用了用两种方法解决问题:一是传统的结构化程序设计方法,二是更先进的面向对象程序设计方法。采用将联系人当作一个整体,整体类型为结构体,结构体中的域表示联系人的属性的这种定义结构作为数据结构。各个模块的功能分为列菜单、修改、录入、删除、查询和退出保存等来组成整个程序,实现对联系人的通信信息的较好的系统管理。该程序采用文本界面,易于操作,使操作者和使用者应用更加方便。在程序设计中,采用了结构化与面向对象两种解决问题的方法。程序通过调试运行,初步实现了设计目标,并且经过适当完善后,将可以应用于解决实际问题。
关键字:数据结构、设计思想、方法、功能需求等。
目 录
绪论 1
第一章 选题的意义 2
第二章 系统功能需求分析 2
第三章 通信录管理系统设计 3
第五章 总结和体会 22
参考文献 23
绪论
本次课程设计的目的是用C++语言编写一个模拟手机通信录管理系统,该系统采用文本菜单样式界面,基本实现了对通信录数据的录入、查看、修改等操作并把数据保存到简单的数据库中。本课程设计报告将结合实践操作从以下就几个方面来阐述:一、课程设计题目及其要求;二、模拟系统的功能模块图;三、程序编译和调试过程当中的问题发现和解决方案;四、对自己写的主要的功能进行简要概述;五、介绍自己实践后的心得体会;六、介绍程序设构思和功能函数的设计流程为:主要是采用面向对象的方法来定义一个类class message有私有成员private: linkman *head头指针; linkman *currptr当前指针;公有成员public: message()构造函数;~message()析构函数;void Creat()新建联系人通信录;void Insert()通信录修改联系人信息;void Delete()在通信录删除联系人信息;void WriteFile()从文件中读取通信录的信息;void ReadFile()向文件写入联系人通信录信息; void Search()在通信录中查询联系人信息; void Display()在屏幕中输出全部联系人信息;void Exit()退出;然后围绕该类当中的思想来构思设计自己做的主要的系统功能函数:void Creat()数据录入;void Insert()数据修改插入;void Display()数据显示。
总之,只要有好的构思好的程序设计思想我们就可以很好的去做一个有一定要求的程序。下面将按以上几个方面来阐述这次的课程设计。
第一章 选题的意义
(1)要求学生达到熟练掌握C++语言的基本知识和技能;
(2)基本掌握面向对象程序设计的基本思路和方法;
(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。
意义:
这是一个运用C++程序代码构成的一个手机通讯录管理系统,虽然功能不是很完善,但从一定程度上提高了学生对C++语言运用的灵活性,使学生将理论知识与实际操作更好的结合。
第二章 系统功能需求分析
手机通信录系统信息包括:查看功能、增加功能、修改功能、删除功能。
(1)、查看功能:选择此功能时,列出下列四个选项:1.办公类 2.个人类 3.商务类 4.全部号码。当选中某类时,显示出此类数据中的所有姓名和电话号码。
(2)、增加功能:能录入新数据,每个结点包括编号、姓名、电话号码、个人信息、邮箱类型以及信息类型。当录入重复的电话号码时,系统会提醒“该电话号码已经存在,不能重复插入!”;当添加超过15条时,系统会提醒“本通讯录最多存储15条信息,已满! 不能再插入,抱歉!”;新数据:当录入新数据时,系统能按照递增顺序对条目进行编号。
(3)、修改功能:选择要修改的人的编号,可以对此人进行相应的信息的修改。
(4)、删除功能:选择要删除的人的编号,可以对此人的信息删除,并自动调整后续条目的编号。
第三章 通信录管理系统设计
问题描述:通信录管理系统,以将所需每个功能分别编译实现,再通过函数包含,调用等方法实现各项功能间的连接为设计思想。
函数流程图
查看功能:
N
Y
N
Y
进入主菜单后,选择查看选项,进入后选择查看的类型,系统显示条目后,选择是否返回主菜单,选“Y”则回到主菜单,选“N”则继续查看。
增加功能:
进入主菜单后,选择增加条目,根据系统提示分别输入电话号码、姓名、类别、个人信息、邮箱地址,然后选择是否继续添加,选“Y”则继续添加条目,选“N”则返回主菜单;当增加的条目电话号码重复时,系统会提示“该号码已经存在,不能重复插入”;当输入的条目超过系统设置的最大容量时,系统会提示“本通讯录最多存储15条信息,已满!不能再插入,抱歉!”。
程序调试分析与修改:
在测试程序时,发现了一下问题:
1.增加功能中,添加的条目不能保存在文档中,在下一次打开此程序时,前一次输入的数据都没有保存;
2.查看功能中,如果三个分类中都存在联系人,当要查看其中一个分类的联系人时,系统不能显示所在分类的联系人。只有只在一类中存入联系人,当要查看时才能显示所要查看的条目。
第四章 系统实现
#include #include #include #include using namespace std; int Count; int ch; char phone[30]; class date //基类(抽象类) { protected: int No; //编号 char Name[20]; //姓名 char phonenum[30]; //电话号码 char information[30];//个人信息 char email[30]; //邮箱地址 int type; //类型 date *next; //指针域 public: date() //基类构造 { next=0; //指针域设置为空 } virtual ~date() //基类虚析构 { } virtual void Input()=0; //从键盘输入数据 virtual void Output()=0; //向屏幕输出数据 friend class operiate; }; class office:virtual public date //朋友类公有继承基类 { public: office() //构造函数,初始化部分数据 { } void Input() //键盘输入数据 { Count=Count+1; No=Count; { strcpy(phonenum,phone); cout<<" "<<"编号: "; cout< cout<<" "<<"电话号码: ";cout< cout<<" "<<"邮箱地址: "; cin>>email; cout<<" "<<"信息类型: "; type=ch;cout< } void Output() { cout< friend class operiate; }; class individual:virtual public date //同事类公有继承基类 { public: individual() //构造函数, { } void Input() //键盘输入数据 { Count=Count+1; No=Count; { strcpy(phonenum,phone); cout<<" "<<"编号: "; cout< cout<<" "<<"电话号码: ";cout< cout<<" "<<"邮箱地址: "; cin>>email; cout<<" "<<"信息类型: "; type=ch;cout< } void Output() { cout< friend class operiate; }; class business:virtual public date //家庭类公有继承基类 { public: business() //构造函数, { } void Input() //键盘输入数据 { Count=Count+1; No=Count; { strcpy(phonenum,phone); cout<<" "<<"编号: "; cout< cout<<" "<<"电话号码: ";cout< cout<<" "<<"邮箱地址: "; cin>>email; cout<<" "<<"信息类型: "; type=ch;cout< } void Output() { cout< friend class operiate; }; class operiate { private: date *PL; office *OF; individual *IN; business *BU; void Clear(); int operiate::Find(int ID1,date **p1,date **p2); int operiate::Find2(char *ID2,date **p3,date **p4); public: operiate(); //申明指向基类的构造函数; ~operiate(); //析构 void Add(); //增加通讯录信息 void Delete(); //删除通讯录信息 void Modify(); //修改通讯录信息 void Print(); //查询通讯录信息 void virtual user();//输出全部通讯录信息 }; operiate::operiate() //定义指向基类的构造函数,创建1个头结点的链表 { date *p=new office; PL=p; } operiate::~operiate() //析构函数 仅保留1个头结点 { date *p=PL; while(p) //逐个删除结点,包括头结点 { PL=p->next; delete p; p=PL; } PL=0; } void operiate::Clear() //清除所有的信息结点(仅保留头结点) { date *p=PL->next; while(p) { PL->next=p->next; delete p; p=PL->next; } } int operiate::Find(int ID1,date **p1,date **p2) //根据编号查找信息结点(返回1-找到,0-未找到.结点指针由p1返回,p2为前看指针) { *p1=PL->next; *p2=PL; while(*p1) { if((*p1)->No==ID1) break; //找到 else { *p2=*p1; //继续查找 *p1=(*p1)->next; } } return *p1?1:0; } int operiate::Find2(char *ID2,date **p3,date **p4) //根据号码查找信息结点(返回1-找到,0-未找到.结点指针由p1返回,p2为前看指针) { *p3=PL->next; *p4=PL; while(*p3) { if(strcmp((*p3)->phonenum,ID2)==0)//((*p3)->phonenum==ID2) break; //找到 else { *p4=*p3; //继续查找 *p3=(*p3)->next; } } return *p3?1:0; } void operiate::user() { cout<<"-----------------------------------------------------------------"< if(!p) { cout<<" *********************"< } while(p) //收索链表,输出通讯录信息 { p->Output(); p=p->next; } cout<<"-----------------------------------------------------------------"< void operiate::Print() //查询通讯录信息 { int a; do { cout<<"--------------------------------------------------------"< cin>>a; cout< { case 1: { system ("cls"); char t; { date *p=PL->next; if(!p) { cout<<" *********************"< } cout<<"---------------------------------------------------------"< { if(p->type==1) { p->Output(); p=p->next; } } } cout< cout<<"返回主菜单 (Y/N) ? "; cin>>t; cout< if (t=='y'||t=='Y') return; else break; } } case 2: { system ("cls"); char u; { date *p=PL->next; if(!p) { cout<<" *********************"< } cout<<"---------------------------------------------------------"< { if(p->type==2) { p->Output(); p=p->next; } } } cout< cin>>u; cout< if (u=='y'||u=='Y') return; else break; } case 3: { system ("cls"); char o; { { date *p=PL->next; if(!p) { cout<<" *********************"< cout<<"-------------------------------------------------------"< { if(p->type==3) { p->Output(); p=p->next; } } } cout< cout<<"返回主菜单 (Y/N) ? "; cin>>o; cout< if (o=='y'||o=='Y') return; else break; } case 4: system ("cls"); char h; operiate::user();//输出全部信息 cout< cin>>h; cout< if (h=='y'||h=='Y') return; else break; } }while(a==1||a==2||a==3||a==4); } void operiate::Add() //增加信息 { { date *p3,*p4; cout<<"-------------------------------------------------------"< cout< {if(Count<15) { date *p=PL; while(p->next)p=p->next; cout<<"有如下信息分类:"< individual *pi; business *pb; switch(ch) {case 1: po=new office; po->Input(); p->next=po; break; case 2: pi=new individual; pi->Input(); p->next=pi; break; case 3: pb=new business; pb->Input(); p->next=pb; break; default: return; } cout<<" *********************"< else { cout<<" ****************************************************"< } else {cout<<" *****************************************************"< } } void operiate::Modify() //修改信息 { cout<<"----------------------------------------------------------"< int No; date *p1,*p2; cout< if(!Find(No,&p1,&p2)) { cout<<" *********************"< else { cout<<"该编号的原信息为:"< cout<<"输入新的信息"< cout<<" *********************"< } int MAX; void operiate::Delete() //删除信息 { cout<<"-----------------------------------------------------------------"< int No; date *p1,*p2; cout<<"请选择您要删除的信息编号:"; cin>>No; if(!Find(No,&p1,&p2)) { cout<<" *********************"< else { Count=Count-1; p2->next=p1->next; //连接 delete p1; cout<<"成功删除!\\n"; cout<<"-----------------------------------------------------------------"< } void main() { int i; char j,k; operiate d; //定义操作对象 //显示主菜单 do { cout<<" ******************************************************"< cout< { case 1: system ("cls"); d.Print(); break; case 2: system ("cls"); do { d.Add(); cout<<"继续添加新的信息(Y/N)?"; cin>>j; system ("cls"); if(j=='Y'||j=='y') continue; else break; } while(j=='Y'||j=='y'); break; case 3: system ("cls"); do { d.Modify(); cout<<"继续修改其他信息(Y/N)?"; cin>>j; system ("cls"); if(j=='Y'||j=='y') continue; else break; }while(j=='Y'||j=='y'); break; break; case 4: system ("cls"); do {d.Delete(); cout<<"继续删除其他信息(Y/N)?"; cin>>j; system ("cls"); if(j=='Y'||j=='y') continue; else break; } while(j=='Y'||j=='y'); break; case 5: cout<<"确定退出(Y/N)?"; cin>>k; if (k=='y'||k=='Y') return; else break; } }while(i==1||i==2||i==3||i==4||i==5); } 第五章 总结和体会 通过这段时间使用C++语言来设计手机模拟通信系统的实际动手操作后,我从中学到了不少东西,并且对C++语言程序设计这门课程有了更深一步的认识。虽然我对这些C++语言的有些知识理解的还不够透彻并且运用得还不是很熟练,但是在这实际操作中,我可以尽我所能把这学期所学到的书本上的大篇大篇的理论知识和少有的实践联系起来,并在这次所要开发的模拟手机通信系统当中渐渐丰富自己的程序设计思想。在程序没有完整的调试出来之前我应当要多发现问题,多提出问题,尽量靠自己来解决好每一个问题, 如果自己实在是解决不了问题就应该多多与老师交流交流。 在实际操作当中,我和我的搭档潘军军设计了一组对手机通信录进行管理的系统,它基本满足了界面友好,易于操作的要求,因此更利于手机用户操作方便,运行比较简单容易,从而达到对联系人的通信信息更加有效系统的管理,并且速度更快内容更直接地达到用户所想要的效果。在该模拟系统当中我们实现了对联系人信息的录入、修改、查看、显示、删除、退出保存6个基本功能,但系统中仍然存在一些令人不满意的的地方,例如在将录入同一联系人通信数据两次或两次以上以后,该系统不会提示用户录入了同一数据,还有就是选做的拨号功能没有实现,这就留下了很大的遗憾。该程序还有待完善,我和我的搭档一边实际操作一边互相交流程序设计思想。说到程序设计思想这一方面,我认为思想对于开发一个项目来说是相当的重要,只要知道了该怎样去做才会有可能把它做好,我们应该多多交流这方面的思想才行。另外我发现如果想要将书本上的大篇大篇的理论知识和实际操作充分地有效的结合,是需要有很好的扎实的基本功的,这也就是说学好C++基础知识是将理论知识付诸于实践的前提要求。 我相信在这次设计手机模拟通信系统的过程当中我和我的搭档都学到了很多很多,我还认为在开发一个项目当中团队合作的精神非常非常的重要,我们可以互相促进学习。希望在以后我和我的搭档还有其他同学都能够充分利用好像这次课程设计的机会来提高自己丰富自己,并希望在今后的学习过程当中能有更多的更好的这些机会。最后,我想说我很感谢这次的课程设计,我学到了很多知识。 参考文献 [1] 谭浩强.C++程序设计(第二版).清华大学出版社. [2] http://download.chinaitlab.com [3] 吕凤翥.C++语言基础教程(第2版).清华大学出版社. [4] 吕凤翥.C++语言基础教程题解与上机指导(第二版).清华大学出版社. [5] StanleyB.Lippman , JoseeLaijoie等.C++ primer(中文版).人民邮电下载本文