湖南涉外经济学院
课程设计报告课程名称:面向对象程序设计课程设计
报告题目:通讯录管理
学生姓名:蒋行伍田方成刘倩
所在学院:信息科学与工程学院
专业班级:计应1301
指导教师:
2014 年6月10日
课程设计任务书
摘要
在《面向对象程序设计》课程理论与实验教学的基础上,根据软件工程的方法与流程,
在相对集中的实训教学时间内,通过一个功能较完整的小型应用系统,复习与深入掌握面
向对象的程序设计思想与技术方法。同时,作为整个实践教学体系一部分,系统培养学生
采用面向对象的方法分析问题与解决问题的能力及团体组织与协作能力。
本课题要设计的是简单的通讯录管理程序。通讯录记录有姓名,地址(省、市(县)、
街道),电话号码,邮政编码等四项。
程序提供了通信录的基本管理功能。包括添加、显示、存储、装入、查询和修改等功
能。
关键词:类;C++;通讯录;结构体
目录
一、概述 (1)
二、方案设计 (2)
1.类设计 (2)
2.特殊设计 (2)
三、系统整体设计及详细设计 (2)
1.整体设计 (2)
2.详细设计 (3)
四、系统测试 (6)
五、结论与心得 (8)
六、参考文献 (10)
七、程序代码 (11)
一、概述
编写一个简单的通讯录管理程序。通讯录记录有姓名,地址(省、市(县)、街道),电话号码,邮政编码等四项。
程序应提供的以下基本管理功能有:
1)添加:即增加一个人的记录到通信录中
2)显示:即在屏幕上显示所有通信录中的人员信息,应能分屏显示。
3)存储:即将通讯录信息保存在一个文件中。
4)装入:即将文件中的信息读入程序。
5)查询:可根据姓名查找某人的相关信息,若找到显示其姓名、地址、电话号码和邮政编码。
6)修改:可修改一个人的除姓名外其它信息。
二、方案设计
1.类设计
程序可用一个单向链表来管理人员信息,每个人员的姓名,地址,电话号码和邮政编码用一个类来实现,作为链表的值指针指向这些类对象,通过链表的遍历可以操作这些数据。
首先,本程序中设计如下的结构体存储通信录信息。该结构体重包括了姓名、
基于该结构体,定义了如下通信录类。该类中包括了指向结构体的头指针head。函数InitTeleBook()的功能是初始化head;函数isNameExist的功能是判断名字是否已存在结构体中,如果存在则返回1,否则返回0;函数addTeleBook()的功能是添加通讯录信息;函数findByName()的功能是根据姓名查找某人的相关信息;函数printTeleBook()的功能是在屏幕上显示所有通信录中的人员信息,可以分屏显示;函数writeToFile()的功能是将通讯录信息保存在一个文件中;函数loadFromFile()的功能是将文件中的信息读入程序;函数updateTeleBook()的功能
2.特殊设计
本程序为了加快数据定位查找的速度,采用常用优先的方法对链表的各个节点进行排序,即一旦操作了一个人员的数据,他的数据就将被调用到链表的链首。这样经过有限次操作,经常查阅的人员的信息就将排在链表的前端。虽然不能说链首的节点一定是最常用的,但常用的节点一定会排在较靠前的部分,链表查找时所要走的平均距离一定较短。
对于人员重名的情况,本程序会检测到将要添加的人名是否重复,并将提示用户重新输入新的人名。
三、系统整体框架及详细设计
1.总体框架
系统的整体框架如图1所示。
图1 系统总体框架
2.详细设计
显示通讯录功能的实现主要通过遍历链表来实现,主要代码如下所示。
对于查找功能,用优先的方法对链表的各个节点进行排序,一旦操作了一个人员
测试功能1,添加通讯录
测试功能2,显示通讯录
测试五,查询通讯录
测试6,修改
五、结论与心得
经过三周的课程设计,我完成了一个较大的C++语言程序的设计以及完成了课程设计的设计报告的撰写工作。
回忆着三周的时间,我的收获很大。首先,通过这次课程设计,我熟练的掌握并运用了所学知识进行编程,而去取得了成功,这大大激发了我对编程的兴趣;其次,在设计的过程中所遇到的困难,我都认真地去思考,和同学以及老师交流,或者利用网上资源来获取帮助,寻求解决办法,通过各种渠道完善所学到的东西。最后,这次设计让我了解到了更多课堂以外的知识,这对我将来的学习和应用都是很有帮助的。
对于计算机专业的大学生来说,积累实战经验是一项极其重要的内容,这可能会成为将来就业的敲门砖。而此次课程设计就是积累实战经验的一个过程,虽然程序的规模不是很大,但是能够让我们认识软件开发的重要性和必要性,为将来的就业打下坚实的基础。
通过这次课程设计,让我认识到,其实认真学习一门语言并不困难,关键是所要追求的学习的方法和途径。一条好的途径便于快速掌握,熟悉运用语言。学习的目的在于应用,理论来源于实践,如果在学习中能够通过有效的途径如自己动手设计一个功能比较强大的开发系统,借鉴于各种工具书,善于总结,一定可以有很好的效果。通过实践的学习,我认识到学好计算机要重视实践操作,不仅仅是学习C++,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己更好地学好计算机的相关课程。结束课设的时侯,心里就有一种很渴望但又很害怕的感觉,明白了自己与
实际所需的距离,因为现在毕业求职难,特别是对于像自己一般的人,更多的时侯是社会,职业选择自己,而不是更多的自己去选择职业,所以更应该把所学的知识灵活地用于实践,这次课设就是对自己一个很好的锻炼机会,无论任何的偿试,都是自己以后很宝贵的经验,更是对自己的一种充实。
六、参考文献
1、谭浩强着.《C++程序设计》. 北京:清华大学出版社,2004.6
2、吴乃陵、况迎辉着.《C++程序设计》. 北京: 高等教育出版社,2006.3
程序代码
#include
#include
#include
#include
using namespace std;
typedef struct TeleNode /*标记为telebook*/ {
char name[20]; /*姓名*/
char address[50]; /*电话号码*/
char phone[20]; /*省份*/
char code[20]; /*地址*/
struct TeleNode *next;
}TeleNode;
class TeleBook{
private:
TeleNode* head;
public:
TeleBook(){head=NULL;}
void InitTeleBook();
int isNameExist(char name[20]);
void addTeleBook();
void findByName();
void printTeleBook();
void writeToFile();
void loadFromFile();
void updateTeleBook();
};
void TeleBook::InitTeleBook(){
this->head = (TeleNode*)new(TeleNode);
this->head->next = NULL;
}
int TeleBook::isNameExist(char name[20]){ TeleNode *tmp = this->head->next;
while(tmp){
if(!strcmp(tmp->name, name)){
return 1;
}
tmp = tmp->next;
}
return 0;
}
void TeleBook::addTeleBook(){
TeleNode *tmp;
tmp = (TeleNode*)new(TeleNode);
tmp->next = NULL;
cout << "请输入姓名:";
cin >> tmp->name;
while(isNameExist(tmp->name)){
cout << "该用户名已存在,请输入别的名称以区分:";
cin >> tmp->name;
}
cout <<"请输入地址:";
cin >> tmp->address;
cout <<"请输入电话号码:";
cin >> tmp->phone;
cout <<"请输入邮政编码:";
cin >> tmp->code;
tmp->next = head->next;
head->next = tmp;
cout <<"添加成功!!\n";
}
void TeleBook::findByName(){
char name[20];
TeleNode *pre, *cur;
cout <<"请输入要查找的用户名:";
cin >> name;
pre = this->head;
cur = this->head->next;
cout.width(10);
cout << "姓名";
cout.width(20);
cout << "地址";
cout.width(15);
cout << "电话号码";
cout.width(10);
cout << "邮政编码";
cout << endl;
while(cur){
if(!strcmp(cur->name, name)){
cout.width(10);
cout << cur->name;
cout.width(20);
cout << cur->address;
cout.width(15);
cout << cur->phone;
cout.width(10);
cout << cur->code;
cout << endl;
pre->next = cur->next;
cur->next = head->next;
head->next = cur;
break;
}
pre = cur;
cur = cur->next;
}
}
void TeleBook::printTeleBook(){ TeleNode *cur;
int flag = 1;
cur = this->head->next;
cout.width(10);
cout << "姓名";
cout.width(20);
cout << "地址";
cout.width(15);
cout << "电话号码";
cout.width(10);
cout << "邮政编码";
cout << endl;
while(cur){
cout.width(10);
cout << cur->name;
cout.width(20);
cout << cur->address;
cout.width(15);
cout << cur->phone;
cout.width(10);
cout << cur->code;
cout << endl;
cur = cur->next;
if(flag %15==0){
getch();
}
flag++;
}
}
void TeleBook::writeToFile(){
ofstream file;
TeleNode *tmp;
file.open("telebook_info.dat", 0x02);//打开文件,不存在则创建if(!file)
{
cout << "File create Failure"<< endl;
return;
}
tmp = this->head->next;
while(tmp){
file<
tmp = tmp->next;
}
file.close();
}
void TeleBook::loadFromFile(){
ifstream file;
TeleNode *tmp;
char ch[100];
file.open("telebook_info.dat", 0x20);//打开文件,不存在则创建if(!file)
{
cout << "File open Failure"<< endl;
return;
}
while(file>>ch){
tmp = (TeleNode*)new(TeleNode);
strcpy(tmp->name,ch);
file >> tmp->address;
file >> tmp->phone;
file >> tmp->code;
tmp->next = this->head->next;
this->head->next = tmp;
}
file.close();
}
void TeleBook::updateTeleBook(){
TeleNode *tmp;
char name[20];
char tmp1[50], tmp2[20], tmp3[20];
cout << "请输入姓名:";
cin >> name;
tmp = this->head->next;
while(tmp){
if(!strcmp(tmp->name, name)){
cout <<"请输入新地址(输入0不修改):";
cin >>tmp1;
if(strcmp(tmp1, "0"))
strcpy(tmp->address, tmp1);
cout <<"请输入新电话(输入0不修改):";
cin >>tmp2;
if(strcmp(tmp2, "0"))
strcpy(tmp->phone, tmp2);
cout <<"请输入新邮编(输入0不修改):";
cin >>tmp3;
if(strcmp(tmp3, "0"))
strcpy(tmp->code, tmp3);
cout <<"修改成功!!\n";
return;
}
tmp = tmp->next;
}
cout <<"该姓名不存在!!\n";
}
void main(){
TeleBook teleBook;
int select = 111;
teleBook.InitTeleBook();
while(select!=0){
cout<<" 通信录管理系统 \n";
cout<<"****************************菜单
*******************************\n";
cout<<" * 1 添加 *\n";
cout<<" * 2 显示 *\n";
cout<<" * 3 存储 *\n";
cout<<" * 4 装入 *\n";
cout<<" * 5 查询 *\n";
cout<<" * 6 修改 *\n";
cout<<" * 0 退出 *\n";
cout<<"********************************************************** *****\n";
cout<<"请输入选择:";
cin>>select;
switch(select){
case 0:
return;
case 1:
teleBook.addTeleBook();
break;
case 2:
teleBook.printTeleBook();
break;
case 3:
teleBook.writeToFile();
break;
case 4:
teleBook.loadFromFile();
break;
case 5:
teleBook.findByName();
break;
case 6:
teleBook.updateTeleBook();
break;
default:
break;
}
}
return;
}