c++ 课程设计 简单电话簿管理报告
更新时间:2024-02-27 19:37:01 阅读量: 综合文库 文档下载
- c罗推荐度:
- 相关推荐
C++语言程序设计》课程设计
实验报告
题目: 简单电话簿管理
班级: 学号: 姓名: 成绩: 指导教师:
日期: 年 月 日
(一)程序功能
电话簿是一个简单的数据库库表,每一个记录(节点)包含一个人的所有信息。 程序的执行过程为:显示主菜单,用户在choice:处输入选项(按照功能输入0-7中的一个数字),按回车后,执行相应的功能。 主菜单如图所示,各菜单项功能如下:
1.增加记录
提示输入各字段。一次输入一个人的数据。 2.按姓名查找,修改一个记录
用户输入输入姓名,系统显示该姓名下的所有信息,同时显示“请输入用户号码和性别”,此时操作者重新输入用户信息,系统提示确认要修改用户信息,再由操作者选择。 3.删除记录
输入待删除记录的姓名,显示该姓名下的信息,让用户确认是否要删除
4.查找(按姓名) 按姓名查找并显示一个记录输入姓名,显示该姓名下的信息。 5.排序
电话簿按指定的顺序排序可输入“5”来修改按1.姓名(升序)2.按电话号码(升序)3.按姓名(降序)4.按电话号码(降序)通过这四种方式来显示电话
《
簿中的信息。 6.显示记录
显示电话簿中所有信息记录。 7.全删
清空电话簿中的信息记录。 0.退出 退出系统
(二)课题分析
本课程设计的数据有每个人的姓名,性别,电话号码并且所有人的数据默认以姓名为关键字按升序排放,排序方式可修改,同时为了减少执行“添加”、“删除”等过于复杂和繁琐的操作,采用单向链表来进行数据的存储和操作。同时需要一个文本文件来存储联系人信息,数据可从该文本文件中导出。同时也可以从程序中导出数据,从而保存。为了方便,选择了汉化菜单。
(三)设计中遇到的问题及解决方法
1、从文本中写入数据时可能指针指错位置,导致不能正常进行。解决的办法是对指针进行必要跟踪,把该函数写入独立的cpp文件中,单个进行检查。
2、刚开始程序运行的时候有很多错误,不知道从哪儿下手,后来从头开始一个一个的去修改,会发现有很多错误是因为上面的程序错误引发的。
4、程序在调试中出现很大难度,调试有时会出现混乱现象。方法是:逐个逐个功能进行测试,这样便于找到问题所在,相对比较清晰;
5、从文本文件中载入数据时,出现不能读的情况,解决的办法是分情况,写程序分别进行处理。
(四)设计感谢与心得
通过几天的课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次真真的做程序设计,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说类,指针??通
过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍。
开始的时候真的感觉编程是一件很恐怖的事情,感觉工作量巨大。不过当一个程序运行成功的时候那种喜悦是无法言语的,那种成就感是无法比拟的。又经过几天的努力,在老师同学的帮助下,终于把程序完成了,尽管程序还是有很多功能上的欠缺和漏洞,可我还是很高兴的。无论如何是自己的劳动成果,是自己经过努力得到的成绩,同时也是学习C++语言的一次实践作业,自己进步的证明。 (五)源代码
#include
//下成员函数为构造函数,缺省值为空
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; if(a==0) { cout<<\操作取消,未修改任何用户信息!\ return; } else if(a==1) { p->setphone_num(ph_num); p->setsex(gender); cout<<\已修改!\ return; } else if(a!=0&&a!=1) cout<<\输入错误!\ return; } //按姓名查找 Fphone *UserDatabase::query(char *na) { /* int low=0,mid,up;//折半法查找,可与下面程序替换 Fphone *p=user; up=nElem-1; while(low<=up) { mid=(low+up)/2; if(strcmp(p[mid].getname(),na)==0) return &p[mid]; else if(strcmp(p[mid].getname(),na)>0) up=mid-1; else low=mid+1; } return NULL;*/ Fphone *p=user; //顺序查找 int i=0; while(i<=nElem) { if((strcmp(p->getname(),na))==0) return p; p++; i++; } return NULL; } //按姓名升序排序 void UserDatabase::sorta_name() { Fphone k; int i,j; for(i=1;i //按电话号码升序排序 void UserDatabase::sorta_phonenum() { int i,j,p; Fphone k; for(i=0;i if(strcmp(user[j].getphone_num(),user[p].getphone_num())<0) if(p!=i) { k=user[p]; user[p]=user[i]; user[i]=k; } } cout<<\排序完成\} //按姓名降序排序 void UserDatabase::sort_name() { Fphone tempt; int i,m=(nElem+1)/2; for(i=0;i //按电话号码降序排序 void UserDatabase::sort_phonenum() { int i,j; Fphone k; for(i=0;i //输出所有男同学用户信息 void UserDatabase::dispmen() { int i,n=0; cout< if((user+i)->getsex()==1) { cout< < if(n==0) { system(\ system(\ } } } cout< //输出所有女同学用户信息 void UserDatabase::dispwomen() { int i,n=0; cout< if(!(user+i)->getsex()) { cout< < if(n==0) { system(\ system(\ } } } cout< //输出所有用户信息 void UserDatabase::disp() { if(user==NULL) cout<<\空电话簿。\ int i,n=0; cout< if((user+i)->getsex()==1) cout< < < if(n==0) { system(\ system(\ } } cout< //获取头指针 Fphone *UserDatabase::getuser() { return user; } //主函数 void main() { char i; UserDatabase d; for(;;) { cout<<\***\ cout< cout< cout<<\ 2-修改记录\ cout<<\ 3-删除记录\ cout<<\ 4-查找(按姓名)\ cout<<\ 5-排序\ cout<<\ 6-显示记录\ cout<<\ 7-全删\ cout<<\ 0-退出\ cout<<\ 请输入选择:\ cin>>i; switch(i) { case '1' : { system(\ cout<<\***\ cout<<\ 增加记录\ int gender; cout< else { cout<<\请输入用户号码和性别男<1>女<0>:\ cin>>num>>gender; d.add_record(name,num,gender); d.sorta_name(); } system(\ system(\ break; } case '2' : { system(\ cout<<\***\ cout<<\ 修改记录\ cout<<\ ***\ char name[20],num[15]; int gender; cout< cout<<\***\ char name[20]; cout< ***\ char name[20]; cout< cout< cout<<\请选择排序方式:\cout<<\按姓名(升序)\cout<<\按电话号码(升序)\cout<<\按姓名(降序)\cout<<\按电话号码(降序)\cout<<\请输入选择:\cin>>j; switch(j) { case '1': { system (\ d.sorta_name(); d.disp(); system(\ system(\ break; } case '2': { system (\ d.sorta_phonenum(); d.disp(); system(\ system(\ break; } case '3': { system (\ d.sort_name(); d.disp(); system(\ system(\ break; } case '4': { system (\ d.sort_phonenum(); d.disp(); system(\ system(\ break; } default :cout<<\您输入的不正确。\ }; break; } case '6': { system (\ cout<<\***\ cout<<\ 显示记录\ cout<<\***\ char j; cout<<\请选择显示方式:\ cout<<\全部\ cin>>j; } case '7': { switch(j) { case '1': { system (\ d.disp(); system(\ system(\ break; } case '2': { system (\ d.dispmen(); system(\ system(\ break; } case '3': { system (\ d.dispwomen(); system(\ system(\ break; } default :cout<<\您输入的不正确。\}; break; system (\ cout<<\***\ cout<<\ 全部删除记录\ cout<<\***\ d.clear(); cout< } } } } /*************************************************************** 增加记录 ************************************************************** 请输入用户姓名:sunli 请输入用户号码和性别男<1>女<0>:15996356398 0 已排序! ************************************************************** 修改记录 ************************************************************** 请输入用户姓名:zhangsheng 原号码:18762406904 男 请输入用户号码和性别男<1>女<0>:187624001102 1 确认要修改用户信息? 是<1>,否<0>:1 已修改! 已排序! ************************************************************** 查找记录 ************************************************************** 输入用户姓名:zhaoyinhong 姓名:zhaoyinhong 号码:13851236987 女 ************************************************************** 排序: ************************************************************** 请选择排序方式: 1-按姓名(升序) 2-按电话号码(升序) 3-按姓名(降序) 4-按电话号码(降序) 请输入选择: 请按任意键继续. . . ************************************************************** 退出系统,谢谢您的使用,欢迎再次使用本电话簿管理系统 ************************************************************** */
正在阅读:
c++ 课程设计 简单电话簿管理报告02-27
现代化企业对外宣传手册—规章制度04-29
构造柱设置04-12
真技术顶级密授班11-14
自挂东南枝歌词 出处 全诗 整理03-05
缠绕管式换热器的管理及其应用前景分析04-02
安全保证体系 - 图文12-31
培智四年级生活数学下期末考查09-20
广夏结构CAD10.0建模系统说明书09-25
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- c++
- 电话簿
- 课程
- 简单
- 报告
- 设计
- 管理
- 财务顾问协议-境内上市(范本)
- 高考地理冲刺60天精品模拟卷(九)(含答案解析)
- 江西省的道地药材
- 青岛市科学技术协会 - 图文
- 关于建立我国行政案例指导制度的思考
- 怎样培养小学生学习数学的兴趣
- 批判性思维教学大纲
- 8上册U5句子词组
- 工商企业管理重点专业申请表doc-山西工商职业学院欢迎你
- 第六册人类社会的发展历程 - 九年级政治教案 - 模板
- 汽车销售公司实习报告模板
- 安全生产事故统计报告制度
- 中央空调维修保养管理规程(2制冷机房)
- 电子商务基础单元测试
- 南新注塑机电热圈节能改造方案
- 未成年人寻衅滋事罪法律适用问题探析
- 《社会调查理论与实践》试题(十)(附参考答案)
- 高中信息技术 1.2技术的性质(1)导学案
- 毒理
- 焊热处理工艺规程