c++ 课程设计 简单电话簿管理报告
更新时间:2023-12-14 15:17:01 阅读量: 教育文库 文档下载
- c t 阴性阳性推荐度:
- 相关推荐
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++ 课程设计 简单电话簿管理报告12-14
宁波大学03-04高等数学(下)期末试题01-25
轻松讲好一节公开课,新老教师必看02-22
20100414期望和方差05-24
人教版语文九年级上册第六单元第21课陈涉世家同步练习04-08
火眼金睛的妈妈作文350字06-21
2016年反洗钱年度报告03-02
西安电子科技大学研究生发表学术论文参考目录 - 图文01-10
迪斯尼的产品组合与创新以及其对中国文化产业发展的启示03-01
2018年中国中药材百合行业分析报告目录08-26
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- c++
- 电话簿
- 课程
- 简单
- 报告
- 设计
- 管理