已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VC+课程设计 电话簿管理程序的设计 本程序是在第5章第5题的基础之上改进而来的。增加了加密,修改记录的功能、录入时间的显示及存储、智能查询等功能。汉化了菜单与帮助,并且使用了类与对象重建了系统。 程序中使用了friend_node来表示一个记录,其中包含了char last_name20表示朋友的姓,char first_name15表示朋友的名,char phone_num12表示电话号码,指针friend_node *next指向后一个结点,指针friend_node *last指向前一个结点。程序中使用了类friend_node来封装双向链表,其成员数据及成员函数如下:void handle_choice(int choice) 根据用户选择调用函数void add_record() 增加记录void insert_node(friend_node *new_rec_ptr)将一个由new_rec_ptr指向的新结点插入链表中friend_node*position_insertion_point(charlastname20)根据姓氏,返回其在链表中的正确位置, 新结点即将插入此点 void make_node_new_head(friend_node *new_rec_ptr) 使新插入结点成为头结点void add_node_to_end(friend_node *new_rec_ptr) 使新插入结点成为尾结点void move_current_to_end()移动当前结点到链表尾void display_list()输出所有数据void delete_record()删除结点void delete_head_of_list()删除链表头void delete_end_of_list(friend_node *previous_ptr)删除链表尾void delete_from_middle_of_list(friend_node*previous_ptr)删除中间当前结点int verify_delete()要求拥护确认void delete_node(friend_node *previous_ptr) 删除当前结点void delete_list()删除成个链表void search_by_lastname()根据姓氏查找void search_by_name()精确查找某一记录void search_by_firstname()按名查询void modify_record()修改数据void look_char() 智能查询void write_list_to_file()将链表数据写如文件void load_list_from_file()读取数据,重建链表处理函数void help_me()帮助void welcome()使用菜单界面void enter()用户登录程序流程图如下:初始界面用户登录界面新用户注册输入密码NY欢迎屏幕,列出功能选项。 Y N 是否选择了退出。选择相应功能。完成相应功能。退出系统。 现在主要说明一下此次程序改进中几个新增和改进的地方1、 增加记录,程序增加了记录写入时间的功能,时间取自格林威治时间1970年1月1日00:00所经过的秒数,在结点数据域中增加了时间单元,并在写入记录时调用系统时间给时间单元赋值.void friend_node:add_record() friend_node *new_rec_ptr; new_rec_ptr = new friend_node; if(new_rec_ptr != NULL) system(cls); cin.ignore(20,n);cout last_name,20); cin.ignore(20,n); cout first_name,15); cin.ignore(20,n); cout phone_num,15); cin.ignore(20,n); time_date=time(0); /time( )函数是取得自格林威治时间1970年1月1日00:00所经过的秒数CurrentTime=localtime(&time_date); new_rec_ptr-year=CurrentTime-tm_year+1900;new_rec_ptr-month=CurrentTime-tm_mon+1; new_rec_ptr-day=CurrentTime-tm_mday ; new_rec_ptr-hour=CurrentTime-tm_hour ; new_rec_ptr-minute=CurrentTime-tm_min ; insert_node(new_rec_ptr); else cout 警告:您输入了错误的信息,此记录无效!n; system(cls); 2、 显示所有记录,由函数 void list:display_list() 完成,增加了控制每屏显示数据个数的功能,难度不大.清屏之后询问一次显示几个记录,输入n,置计数器count=0;每次显示记录时判断是否要清屏,是则清屏,否则继续显示记录,直到所有记录均显示完毕。void list:display_list()int count=0;system(cls);coutn;cin.ignore(20,n);system(cls);current_ptr=head_ptr;while(current_ptr)cout姓名:last_namefirst_nameendl; cout电话:phone_numendlnext;count+;if(count%n=0)getchar();system(cls);cout没有数据!endl; getchar();3、查找记录,分为四类,此次程序改动较大的地方.新增了相对于按姓查询的按名查询,和智能查询.(1)按姓查找,查找记录时可能并不知道名字,故程序中提供了按姓查找的功能,由函数void friend_node:search_by_lastname();完成,其代码如下:void friend_node:search_by_lastname()system(cls); char search_string20; current_ptr = head_ptr; cin.ignore(20,n); cout last_name, search_string) != 0) /顺序依次查找结点,若不匹配循环查找 current_ptr = current_ptr-next; if(current_ptr != NULL) /若匹配,输出结点信息 cout 找到您所需记录n; cout first_name last_name endl; cout phone_num endl; cout year-month-daythour:minuteendl; else /若不匹配 cout 未找到你要查找的记录n;cout 键入Enter键继续n;cin.get(pause);system(cls); (2)相应的本程序也添加了按名查询,更加方便使用,优化系统.void friend_node:search_by_firstname() system(cls); char search_string20; current_ptr = head_ptr; cin.ignore(20,n); cout first_name, search_string) != 0) current_ptr = current_ptr-next; if(current_ptr != NULL) cout 找到您所需记录n; cout first_name last_name endl; cout phone_num endl; cout year-month-daythour:minuteendl; else /若不匹配 cout 未找到你要查找的记录n;cout 键入Enter键继续n;cin.get(pause);system(cls); (3)按姓名查找是最原始的查找,但是比较精确,当记录非常多的时候,能够直接找到指定联系人.故程序中延承了按姓名查找.void friend_node:search_by_name()system(cls);char last_name_string20; char first_name_string20; current_ptr = head_ptr; cin.ignore(20,n);cout n请输入你想查询(或修改)者的姓: ;cin.get(last_name_string,20); cin.ignore(20,n); cout first_name, first_name_string) = 0 & strcmp(current_ptr-last_name, last_name_string) = 0)temp_ptr=current_ptr;cout n找到信息n;cout endl;cout - -n;cout 姓名 电话号码 n;cout - -n;cout.unsetf(ios:left);cout.setf(ios:right);cout last_name first_name ;cout setw(36) phone_num next;current_ptr=temp_ptr;elsecout 没有找到记录n;cout 按回车键继续n;cin.get(pause);system(cls); (4)按姓名首字母查询是本次程序新增加的一个服务,在缺省情况下查询可以更方便快捷.5、帮助系统,由函数void friend_node:help_me()执行,但由于能力有限,该系统空有架势,只是一些输入输出的简单功能.void list:help_me() do system(cls); cout欢迎来到帮助系统,请选择:endl; cout1,我的记录怎么了?endl; cout2,如何清除所有记录?endl; cout3,何时会有新版本?endl; cout4,新版本会增加什么功能?endl; cout5,离开。n; switch(n) case 1: system(cls); cout在目录里查找文件Friends.dat;endl; cout如果不存在则将一个文件该为Friends.dat;endl; getchar(); break; case 2: system(cls); cout删除文件Friends.dat;endl; getchar(); break; case 3: system(cls); cout等我有时间。endl; getchar(); break; case 4: system(cls); cout我希望增加如下功能:endl;cout删除所有记录的指令;endl; cout病毒预防系统;endl; getchar(); break; while(n!=5);6.号码簿是用于个人记录朋友联系方式等个人隐私,处于保密考虑,本人试着为该程序添加加密程序.最后是本次程序最大突破的地方,然而也是遗憾之处. 由于事前未接触过加密的程序设计,而且是在其他改进即将结束的时候,在设计过程中遇到了很大的困难.该部分是本人参照5.3股票交易系统的用户登录和注册部分设计的.但是两个程序有不同的环境,所以参照反而是本程序不伦不类,影响了一些原本功能的性能和流畅.最主要的一个问题是如何为用户信息,也就是Customer_name Password封装储存,并可以更改.在程序中添加了friend class Customer 用户类来封装用户信息pivate: char Customer_name30; char password10; public: void log_in(char*,Customer)const; void Register(Customer*)这个程序的程序量较大,约800行,所以调试起来有一定难度。困难主要集中在双向链表的操作上,因为程序中几乎每一个函数的功能均建立在双向链表的操作上。而双向链表的操作中的问题主要出现在一些边缘情况上,例如删除头结点、尾结点,插入头结点、尾结点等。在双向链表中,每一个结点均有两个指针,分别指向前一个结点和后一个结点,但是头结点与尾结点比较特殊,因为它
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 腺泡导管组织转化的病理机制与临床意义
- 智慧未来出行-交通科技引领城市变革
- 领跑未来:创业空间崭新篇章-回顾成果展望未来共创辉煌
- 构筑村卫生新模式-打造全面升级的乡村医疗体系
- 革新口腔清洁科技-探索化学清洁剂新篇章
- 传统媒体与数字媒体的竞争-媒体行业分析师
- 传统文化传承发展与中学生德育教育创新
- 高中历史教学中研究性学习方式的应用
- 企业员工培训计划与课程体系构建
- 合力构建信任共创长远未来承诺书5篇
- 5.0 中国四大地理区域划分 同步练习 原卷版
- 地基与基础计算题
- 消防安装工程各项调试方案
- 沉浸式文旅景区演绎规划方案【旅游】【沉浸式演艺空间】
- 中医师承关系协议书
- 数据挖掘与机器学习全套教学课件
- 2024-2025年上海中考英语真题及答案解析
- 举一反三奥数解题技巧大全100讲
- 产品合格证标准模板
- 山西省建设工程计价依据
- 制药空调净化系统基础培训
评论
0/150
提交评论