c++ 课程设计 简单电话簿管理报告

2020-02-21 23:20

C++语言程序设计》课程设计

实验报告

题目: 简单电话簿管理

班级: 学号: 姓名: 成绩: 指导教师:

日期: 年 月 日

(一)程序功能

电话簿是一个简单的数据库库表,每一个记录(节点)包含一个人的所有信息。 程序的执行过程为:显示主菜单,用户在choice:处输入选项(按照功能输入0-7中的一个数字),按回车后,执行相应的功能。 主菜单如图所示,各菜单项功能如下:

1.增加记录

提示输入各字段。一次输入一个人的数据。 2.按姓名查找,修改一个记录

用户输入输入姓名,系统显示该姓名下的所有信息,同时显示“请输入用户号码和性别”,此时操作者重新输入用户信息,系统提示确认要修改用户信息,再由操作者选择。 3.删除记录

输入待删除记录的姓名,显示该姓名下的信息,让用户确认是否要删除

4.查找(按姓名) 按姓名查找并显示一个记录输入姓名,显示该姓名下的信息。 5.排序

电话簿按指定的顺序排序可输入“5”来修改按1.姓名(升序)2.按电话号码(升序)3.按姓名(降序)4.按电话号码(降序)通过这四种方式来显示电话

簿中的信息。 6.显示记录

显示电话簿中所有信息记录。 7.全删

清空电话簿中的信息记录。 0.退出 退出系统

(二)课题分析

本课程设计的数据有每个人的姓名,性别,电话号码并且所有人的数据默认以姓名为关键字按升序排放,排序方式可修改,同时为了减少执行“添加”、“删除”等过于复杂和繁琐的操作,采用单向链表来进行数据的存储和操作。同时需要一个文本文件来存储联系人信息,数据可从该文本文件中导出。同时也可以从程序中导出数据,从而保存。为了方便,选择了汉化菜单。

(三)设计中遇到的问题及解决方法

1、从文本中写入数据时可能指针指错位置,导致不能正常进行。解决的办法是对指针进行必要跟踪,把该函数写入独立的cpp文件中,单个进行检查。

2、刚开始程序运行的时候有很多错误,不知道从哪儿下手,后来从头开始一个一个的去修改,会发现有很多错误是因为上面的程序错误引发的。

4、程序在调试中出现很大难度,调试有时会出现混乱现象。方法是:逐个逐个功能进行测试,这样便于找到问题所在,相对比较清晰;

5、从文本文件中载入数据时,出现不能读的情况,解决的办法是分情况,写程序分别进行处理。

(四)设计感谢与心得

通过几天的课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次真真的做程序设计,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说类,指针??通

过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍。

开始的时候真的感觉编程是一件很恐怖的事情,感觉工作量巨大。不过当一个程序运行成功的时候那种喜悦是无法言语的,那种成就感是无法比拟的。又经过几天的努力,在老师同学的帮助下,终于把程序完成了,尽管程序还是有很多功能上的欠缺和漏洞,可我还是很高兴的。无论如何是自己的劳动成果,是自己经过努力得到的成绩,同时也是学习C++语言的一次实践作业,自己进步的证明。 (五)源代码

#include #include #include #include #include #define M 20 #define N 12 class Fphone { char name[M]; char phone_num[N]; int sex; public: Fphone(char *na=\中间不加空格 char *getname();//获取姓名 char *getphone_num();//获取电话号码 int getsex();//获取性别 void setname(char *na);//设置姓名 void setphone_num(char *num);//设置电话号码 void setsex(int);//置性别 void disp();//输出用户信息 };

//下成员函数为构造函数,缺省值为空

Fphone::Fphone(char *na,char *num,int gender) {

strcpy(name,na); strcpy(phone_num,num); sex=gender; }

//下成员函数用于获取姓名 char *Fphone::getname() { return name; }

//下成员函数用于获取电话号码 char *Fphone::getphone_num() { return phone_num; }

//下成员函数用于设置姓名 void Fphone::setname(char *na) { strcpy (name,na); }

//下成员函数用于设置电话号码

void Fphone::setphone_num(char *num) { strcpy (phone_num,num); }

//下成员函数用于获取性别 int Fphone::getsex() { return sex; }

//下成员函数用于设置性别 void Fphone::setsex(int gender) { sex=gender; }

//下成员函数用于输出用户信息 void Fphone::disp() { cout<<\姓名:\电话号码:\性别:\}

class UserDatabase { int nElem;//用户信息表中元素个数 int Maxu;//最多的用户 Fphone *user;//指向用户信息的指针 public: UserDatabase(int n=10);//构造函数,初始化用户信息表,将user.txt文件中数据读到user[]中 ~UserDatabase();//析构函数,将user[]写入user.txt文件中 void clear();//删除所有用户信息 void add_record(char *na,char *ph_num,int);//添加用户信息,插入用户后仍按升序排列 void delete_record(Fphone *p,int k);//删除用户信息 void modify_record(Fphone *p,char *ph_num,int);//修改用户信息 Fphone *query(char *na);//按姓名查找 顺序查找,这里也可以用折半查找 void sorta_name();//按姓名升序排序 插入排序法 void sorta_phonenum();//按电话号码升序排序 选择排序法 void sort_name();//按姓名降序排序,将排成升序的对象数组逆向放置 void sort_phonenum();//按电话号码降序排序 冒泡排序法 void disp();//输出所有用户信息 void dispmen();//输出所有男同学用户信息 void dispwomen();//输出所有女同学用户信息 Fphone *getuser();//获取头指针

};

//构造函数

UserDatabase::UserDatabase(int n) { int i; char na[M],ph_num[N];int gender; ifstream infile;//定义文件对象 infile.open(\打开数据文件 if(!infile)//if(linfile)//打开文件错误 { cout<<\打开文件错误!'\\n'\ exit(0); } nElem=0; Maxu=n; if(n) user=new Fphone[n]; else user=0; while(infile>>na) { infile>>ph_num>>gender; if(nElem>=Maxu)//实际空间不足 { Fphone *newptr; newptr=new Fphone[Maxu+15];//申请一新表空间 for(i=0;i

user[nElem].setphone_num(ph_num); user[nElem].setsex(gender);//增加元素 nElem++; } infile.close(); }

//析构函数,将user[]写入user.txt文件中 UserDatabase::~UserDatabase() { ofstream outfile; outfile.open(\ if(!outfile) {

cout<<\目标文件无法打开!\ exit(2); } for(int i=0;i

//删除所有用户信息

void UserDatabase::clear() { cout<<\是否删除全部用户信息?是<1> 否<0>\ int a; cin>>a; if(a==1) delete[]user;

else if(a==0) cout<<\未删除!\ else cout<<\您输入不正确,请重新输入:\ }

//添加用户信息,插入用户后仍按升序排列copy

void UserDatabase::add_record(char *na,char*ph_num,int gender) { if (nElem==0)//还没有用户时,首地址赋值 { user->setname(na);

user->setphone_num(ph_num); user->setsex(gender); nElem++; } if(nElem==Maxu)//线性表已满 {

Fphone *p;

p=new Fphone[Maxu+10];//申请空间,一次多申请一些 for(int i=0;i

p[i]=user[i]; //原表复制到新表 delete []user; Maxu+=10;

user=p;//指针指向新表 }

if( query(na)!=NULL )

cout<<'\\t'<<\该用户已存在!\ else

{

user[nElem].setname(na);

user[nElem].setphone_num(ph_num); user[nElem].setsex(gender); nElem++;

} }

//删除用户信息

void UserDatabase::delete_record(Fphone *p,int k) { cout<<\确认要删除用户信息? 是<1>,否<0>:\ int a; cin>>a; if(a==0) { cout<<\操作取消,未删除任何用户信息!\ return; } else if(a==1) { for(int i=k;i

//修改用户信息

void UserDatabase::modify_record(Fphone *p,char *ph_num,int gender) { cout<<\确认要修改用户信息? 是<1>,否<0>:\ int a; cin>>a;


c++ 课程设计 简单电话簿管理报告.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:如何理解“经济全球化是一把双刃剑”?

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: