电话簿管理程序设计

合集下载

个人通讯录系统设计【范本模板】

个人通讯录系统设计【范本模板】

个人通讯录系统设计摘要:系统主要为满足单个用户对联系人的管理和查询工作而设计。

系统使用Visual Basic 作为编程语言、选用Access 2003作为后台数据库,并用ADO对象和ADO Data 控件进行数据库编程,实现了用户对联系人信息的添加、查询、浏览、修改、删除和对基本用户的管理。

系统设计突出个性化、人性化的特点。

界面美观,友好.登录后即出现欢迎画面,为防止用户出现密码遗忘的情况,系统还创新性地设计了密码保护程序。

用户可通过回答密码提示问题,找回自己遗忘的密码,实现登录.用户可以随时修改密码,还可通过系统获得必要的帮助,查看系统的介绍。

关键字:通讯录 VB Access目录:一、选题背景—--——-—--—--——————--——--——————-————--————————---——-———21、系统开发背景--———-—-——-———————-—————--—---—————--——---——————22、设计思路-—-—-----—--———--—-——-—--—---—----——-————-—----—-———33、系统指导思想——-—---———-----————-—--—---—-——-—-----—-—-—----—34、应解决的主要内容—---—————————-—--—-—-——----——---——--—--—--—3二、可行性分析——----——-——-—----—-——-------—————-------—-————————-41、技术可行性------—-—-—-—————-——----—--—--—---——----—---————--42、经济可行性——--—-—--——-----————--————---—-—-—----——-———-—-—-—43、环境可行性-----—---—---—--——-----—--——--—----————---—---—-—-54、进度可行性—--—-—-—-————————-——---——-----—--————---—-——-———--5三、需求分析—-————--—----——--—-——---—-———-——--—-—-———-——-—--——51、用户需求分析-—————---——---—---—-—-—-—-—--—---—-——--—-——-——--52、业务流程分析---——-—-----—————-—-------——-———-—-———------——-—63、数据流程分析--—-——--—---—————---—-—--—-—-—-——-—-—--————————-64、数据字典-—-—---——————-——-——----—-——-—-———---—-------———-——75、处理逻辑分析—--——--——-—------——-——--—---—-—-—--———----——--—16四、系统设计-——--—-———------—-—---—-—-—--—-—--———-—--——-——----——161、总体结构设计--—-—-——-—------————-—-----—--—--—-——---—----——162、E—R模型设计-—----———--———-—-——---—-—--—————-—-—---———-—-—-—173、代码设计-——--——--————-—---——--—————-—---—-—-—-—-—-———————---174、输入输出设计—----——---—----—-——-——-—------———--—-———--——-——185、人机对话设计—--——-——-—-——---—-———-—----—-——---—-———---——----10五、系统实现方法——--—-——--——--—--—--——--———-——-———————---—--—--20六、系统测试及评价----—--—-—--——-—-—----——-—-—---—-—---—-—----20七、附录——-—--————-——--————--—-——————------————-——--—-——--—-——--—-21八、参考文献——-—----—---———-——--—---——————--——-—-—————-——————---42正文:一、选题背景1、系统开发背景通讯录在当今的日常生活工作中的应用是十分普及的。

C++课程设计电话本管理

C++课程设计电话本管理

VC++ 课程实验报告专业班级:学号:报告人:C++课程实验报告一、实验题目:电话本管理二、功能描述:这是一个电话簿管理小程序,利用文本文件储存电话簿数据,具有添加、删除、显示和查询联系人电话号码功能。

在这个小型管理程序中,类与类之间通过链表将各个数据相连接,形成一个通畅的应用小程序!在程序中,对于用户需求尽可能的予以满足.三、算法设计与实验步骤四、流程图:按ENTER进入电话本功能界面电话本功能界面(用户根据界面说明进行选择操作)0 进入帮助1添加联系人2查找并修改3姓名查找联系人4首字母近似查找5显示全部记录6删除记录用户根据帮助程序根据提示用户新建联系人姓名和电话号码输入联系人姓名,查找修改输入姓名查找输入首字母匹配查找显示电话薄全部数据逐一删除联系人数据,首先输入联系人姓名7退出电话簿程序并保存电话簿数据四、类与对象结构描述,核心程序代码(需要有相应的注释)1.程序中所定义的类 (1)电话簿记录类 class CTelRecord {private:int nYear,nMonth,nDay,nHour,nMinute,nSecond; //时间单元 char szName[20]; //电话簿数据:姓名和电话号码 char Last[20]; char szNumber[20]; public:CTelRecord(){} //构造函数CTelRecord(char *name,char *number);void SetRecord(char *name,char *last,char *number); //输出时间 int Compare(char *name); //根据姓名查找void SetName(char *name){strcpy(szName,name);} void SetNum(char *num){strcpy(szNumber,num);} void SetLast(char *last){strcpy(Last,last);}char *GetName(void){return szName;} //需通过函数访问的私有成员char *GetLast(void){return Last;} char *GetNum(void){return szNumber;} int GetYear(void){return nYear;} int GetMonth(void){return nMonth;}用户选择0后进入帮助界面1 怎样产生一个新纪录2 怎样显示我的电话本3 什么时候我有一种新版面4 什么时候有一种新版面5 退出帮助进入电话簿功能界面电话本功能界面int GetDay(void){return nDay;}int GetHour(void){return nHour;}int GetMinute(void){return nMinute;}int GetSecond(void){return nSecond;}void Show(); //打印数据void Modify(char *number); //修改结点函数int LookChar(char *szName); //按首字母查找匹配姓名};(2)定义结点类class CNode{private:CTelRecord *pData; //用于指向数据类指针CNode *pNext; //指向链表下一个结点指针public:CNode(){pData=0;pNext=0;} //结点构造CNode(CNode &node); //拷贝构造函数void ShowNode(){pData->Show();} //指向打印函数CTelRecord *GetData(void){return pData;}friend class CList; //定义链表类为友元类};(3) 定义链表类class CList{CNode *head_ptr,*current_ptr;public:CList(){head_ptr=NULL;} //构造函数void Help_me(); //帮助函数void AddNode(); //在首部添加结点void DeleteNode(); //删除结点void ShowList(); //显示所有记录void DeleteList(); //删除所有记录void Search(); //查找CNode *GetListHead(){return head_ptr;}void Insert(CNode *new_rec_ptr); //按顺序插入新节点CNode*Position_insertion_point(char name[20]);void ModNum(void); //修改号码void SearchFriends(void); //查找具有相似名的记录void load_list_from_file(void); //保存文件void write_list_to_file(); //把文件数据写入链表中};2.新增函数说明根据姓氏,返回其在链表中的正确位置,新节点即将插入此点。

《面向对象程序设计》教案

《面向对象程序设计》教案

《面向对象程序设计》教案一、教案简介本教案旨在帮助学生掌握面向对象程序设计的基本概念、原理和方法,培养学生的编程能力和软件开发思维。

通过本课程的学习,学生将能够熟练运用面向对象的编程语言,如Java或C++,进行软件开发和设计。

二、教学目标1. 了解面向对象程序设计的基本概念,如类、对象、封装、继承和多态等。

2. 掌握面向对象程序设计的基本原则,如单一职责原则、开闭原则、里氏替换原则等。

3. 学会使用面向对象的编程语言进行程序设计和开发。

4. 培养学生的软件开发思维和团队协作能力。

三、教学内容1. 面向对象程序设计的基本概念1.1 类与对象1.2 封装1.3 继承1.4 多态2. 面向对象程序设计的基本原则2.1 单一职责原则2.2 开闭原则2.3 里氏替换原则2.4 接口隔离原则2.5 依赖倒置原则3. 面向对象的编程语言3.1 Java3.2 C++4. 面向对象的设计模式4.1 创建型模式4.2 结构型模式4.3 行为型模式四、教学方法1. 讲授法:讲解面向对象程序设计的基本概念、原理和编程方法。

2. 案例分析法:分析实际项目中的面向对象设计案例,让学生理解并掌握面向对象的设计思想。

3. 实践操作法:让学生通过编写代码,亲身体验面向对象程序设计的流程和方法。

4. 小组讨论法:分组进行讨论,培养学生的团队协作能力和解决问题的能力。

五、教学评价1. 课堂参与度:评估学生在课堂上的发言和提问情况,了解学生的学习兴趣和积极性。

2. 课后作业:布置相关的编程作业,检查学生对面向对象程序设计知识的掌握程度。

3. 项目实践:评估学生在团队项目中的表现,包括代码质量、设计思路和团队协作能力。

4. 期末考试:全面测试学生对面向对象程序设计知识的掌握情况。

六、教学资源1. 教材:推荐《Java面向对象程序设计》、《C++ Primer》等经典教材。

2. 在线资源:提供相关的在线教程、视频课程和编程练习平台,如慕课网、Coursera、LeetCode等。

c语言通讯录课程设计报告

c语言通讯录课程设计报告

一引言当今时代是飞速发展的信息时代。

在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。

计算机的最大好处在于利用它能够进行信息管理。

使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。

尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。

计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。

本系统就是为了管理而设计的。

通讯录管理系统的建立是可以有效节省同学、朋友、客户间日常交流的投资(指时间、精力),其设计理念很简单,变传统的纸张与笔录方式为计算机自动化进行通讯录信息管理系统,既省时间又提高效率。

因此在系统构建时,只要我们本着丰富通讯录的信息资源,为用户提供最为方便的快捷的信息阅览途径和管理手段,去吸引用户,那么通讯录管理系统是完全可行的。

通讯录软件设计的灵感来源于生活和工作中的需要。

如今,随着社会的飞速发展,信息时代改变着人们的各种生活方式。

人们的联系信息,联系方式变得复杂而多样化,以前所使用的各种电话簿、通讯本等小册子由于查找不方便、功能单一等缺陷已经无法胜任它的“时代使命”,而现在各种手机,商务通内设的电话簿尽管携带方便却又挥之不去其“记录量少,界面小,浏览不方便”的缺点。

工作中看到有些人巧妙地利用excell或者word制表格来建立通讯录,每逢用时再打开,可是查找极其不便,维护起来也麻烦。

通讯录系统设计,它的内容对于计算机来说是至关重要的,通讯录系统为计算机的使用者提供充足的信息和快捷的查询手段。

用c语言构建的通讯录系统设计,通过课上学到的和查阅一些文献的一些关于结构体[1]、数组、指针、函数以及循环函数的运用[1]和字符串的处理[2]等基本知识可以初步的实现通讯录的输入、显示、查找、删除、快速查询等通讯录简单而用的一些实用的功能,给人们带来更多的方便。

本管理系统设计合理、操作方便、运行稳定、功能完备,具有较高的实用价值。

本课程设计主要运用C语言中的结构体、数组、链表、等数据结构,设计一个简单的管理系统应用程序。

通讯录管理系统

通讯录管理系统

通讯录管理系统姓名:学号:班级:导师:目录摘要 (2)第一部分 (3)1.1设计构思 (3)1.2系统数据流图: (4)1.3系统数据流程图: (5)1.4系统功能结构图: (6)1.5管理员用户部分功能图: (6)1.6普通用户部分功能图: (6)1.7开发及运行环境: (7)第二部分数据库设计: (7)2.1用户信息表(tb_User): (7)2.2资料信息表(tb_info) (8)第三部分通讯录管理系统的实现 (9)3.1 公共类的编写 (9)3.1.1 OperateAndValidate.cs类 (10)3.1.2 OperateAndValidate.cs类 (12)3.2 系统登录模块设计: (13)3.3 系统主窗体块模块设计:......................................................... 错误!未定义书签。

3.4 添加用户窗体块模块设计:................................................. 错误!未定义书签。

3.5 添加窗体块模块设计:......................................................... 错误!未定义书签。

3.6 修改密码窗体块模块设计:................................................. 错误!未定义书签。

第四部分总结 .............................................. 错误!未定义书签。

摘要日益繁多的人际交往使得我们很难搞清楚与每个人之间的联系方式,特别是对于做经常出差的人来说更是难,所以通讯录能够便捷的给我们带来所需要的相关信息。

而随着计算机的普及,人们的生活摆脱了传统式的记事本、电话簿,越来越多的靠计算机来帮助人们记住这些事情,极其简便。

管理归口分工及程序

管理归口分工及程序
建议(归口部门:人事行政部) 1、 设置员工信箱(放在总部、分店门口,由行政经理收集。) 2、 凡员工投诉或建议并署名者,由行政经理指定一名经理调查 界定事件后,给予答复,如员工是书面投诉或建议,则需给 予书面答复,时限为3天内。 3、 凡员工匿名投诉,由行政经理处理。
4、 公文发放、传真归档 1、 所有公司文件发放到位,收件人要注意保存。‘ 2、 所有传真第一时间到位,并登记在册。 3、 所有传真当事人到前台领取,前台不负责送到。 4、 发放公司的公文由行政主管负责。
5、 客户档案管理(归口部门:客户服务部) 1、 客户自上门咨询起即建立客户档案表。 2、 凡签订合同的客户资料,自签约日起正式建立档案夹,统一
惠活动的通知等,由各部门经理负责通知到人,行政助理协 助贯彻,各部门经理负责两天内将执行情况及分析报告人事 行政部。 二十、 培训反馈(归口:人事行政部) 1、 凡各类培训后两天内各部门经理须反馈效果至人事行政部。 2、 人事部负责建立培训档案卡,并及时登录。 二十一、表格整理(归口:人事行政部、各行政助理) 1、 凡公司内部各类表格原件,均由前台保管。如发生表格短 缺,由前台用原件复印或安排印刷。 二十二、工资考核(归口:人事行政部) 1、 各行政助理配合人事主管详细统计各类考核处罚汇总。 2、 每月1日前将上月情况上报 二十三、考核(归口:人事行政部) 1、 定期对员工考核。 2、 人事主管负责将考核汇总上报总经理。 二十四、公司所有外在、内在形象包装(归口:企划部) 1、 随时跟踪调整。
二十六、各类与处罚相关的事务更改归口(总经理) 1、 所有处罚更改权归总经理所有。 2、 更改情况包括(事后补假、处罚金额更改、处罚取消等)。 3、 各部门经理有权对员工的处罚提出申诉,但无权更改。
更新日期:2010-06-19 生效日期:2010-07-01

电话簿管理系统修改的程序设计报告(参考)

电话簿管理系统修改的程序设计报告(参考)

课程设计报告题目电话薄管理系统——分组模块及其附属功能课程名称结构化程序设计课程设计院部名称信息技术学院专业计算机科学与技术班级学生姓名学号课程设计地点工科楼A101、1318 课程设计学时20学时指导教师金陵科技学院教务处制成绩电话簿管理系统修改的程序设计报告——分组模块及其附属功能(一)课程设计目的与要求1.目的1)了解并掌握C语言的基本知识和技能;2)基本掌握面向对象程序设计的基本思路和方法;3)提高综合运用所学的理论知识与方法分析和解决问题的能力;4)掌握C语言中的结构体、函数、文件操作等知识。

2.要求1)要求在设计的过程中,建立清晰的层次;2)在程序中要定义清楚,区分好类别,每个类别要有各自的属性和方法;(二)课程设计的主要内容1.项目名称:电话薄管理系统——分组模块及其附属功能2.实验设备及环境1)实验设备:教室机房2)硬件环境:具备C++、TC的计算机3)软件环境:C语言、C++3.系统功能介绍及结构设计软件各个模块功能:(1)、开场模块:首先是一个游戏界面,通过游戏来进入电话簿,游戏成功正常进入电话簿管理系统,退出游戏则进入紧急拨号界面。

(2)、对电话簿管理系统修改的模块:输入记录模块:主要实现将数据存入数组中,当从数据文件中读出记录时,它调用fread(&tele[count],sizeof(TELEBOOK),1,fp)文件读取函数,执行一次从文件中读取一条电话簿记录信息存入某个数组元素中的操作,并且这个操作在main()中调用执行,即在电话簿管理系统进入显示菜单界面时,该操作已经执行了。

若该文件中没有数据,则系统会提示数组为空,没有任何记录可操作,此时,用户应选择1,调用Add()函数,进行记录的输入,即完成在数组中添加元素的操作。

查询记录模块:主要实现在数组中按联系人姓名或电话或分组查找满足条件的记录。

在查询函数Qur()中,为了遵循模块化编程的原则,我们对在数组中进行的记录定位操作设计成了一个单独的函数int Locate(TELEBOOK temp[],int n,char findmess[],charnameorphonenum[]),参数findmess[]保存要查找的具体内容,nameorphonenum[]保存要查找的字段(值为字符串类型的name或phonenum或group),若找到该记录,则返回指向该记录的数组元素的下标;否则,返回一个-1的值。

0511590114周洵电话簿管理

0511590114周洵电话簿管理

C++课程设计实验报告姓名周洵学号0511590114班级05115901任课教师肖亮时间 2006-9-21教师指定题目电话簿管理评定难易级别 A实验报告成绩1.实验内容:电话簿管理1.1 程序功能介绍一个基本的电话簿管理程序,具有插入、删除、显示、修改和查询联系人的功能。

1.2 程序设计要求(1)增加纪录修改功能。

(2)增加显示功能(每屏显示数目可由用户自己设定)(3)汉化菜单和帮助2. 源程序结构流程框图与说明(含新增子函数的结构框图)3. 基本数据结构struct friend_node //结构体类型定义,包括:姓、名和电话号码{char last_name[20];//用户名字char first_name[15];//用户的姓char phone_num[12];//电话号码friend_node *next;};friend_node *head_ptr; //全程变量,链头指针friend_node *current_ptr; //全程变量,用于指明当前在链表中的位置//function prototypesvoid handle_choice(int choice); //--函数原形说明void add_record();//增加记录函数,用于输入新用户的信息void insert_node(friend_node *new_rec_ptr);//插入函数,用于将新结点插入链表中friend_node *position_insertion_point(char lastname[20]);//根据姓氏返回其在链表中的正确位置,新结点将插入此点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 help_me();//帮助函数void revice_record();//修改记录的函数void display_onebyone_list();//按使用者要求的显示数目显示用户信息的函数4. 程序运行结果界面图1修改前图2修改后图3显示一名用户图4显示两名用户图5汉化前图6汉化后5. 课程设计遇到的技术问题与解决思路问题1:如何设计修改功能的函数解决办法:基本思路:查找目标---建立新信息---插入新信息---删除原记录首先根据姓名查找用户的方法找到需要修改的目标,然后建立一个新结点输入修改的内容,此时新信息储存在新结点中,再将新结点插入到链表中并将查找到的需要修改的结点删除。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.设计内容:电话薄管理程序存储的数据包括:人名,工作单位,电话号码和E-mail地址有如下功能:1)加入一个新的电话号码2)删除一个电话号码3)显示保存的已有的电话号码4)修改功能5)排序功能(按电话号码,按姓名字母顺序)6)查询功能(按人名查电话号码,按电话号码查人名)要求:1)程序运行开始,首先显示一个命令菜单。

用户选择那条命令,就调用那项功能。

2)显示数据时,一页显示不下,可以分页显示。

1、设计目的通过本次课程设计了解指针、函数、文件、链表等在实际中的具体应用及他们各自特点,并通过这次实习能达到熟练应用c语言来编辑一些简单的可以在生活中使用的程序的目的,而且学会添加、删除、修改、排序、查找、显示等功能在c语言下的实现。

2、3、程序代码#include<stdio.h> /*标准输入输出库*/#include<conio.h> /*界面处理库*/#include<stdlib.h> /*标准库*/#include<string.h> /*处理字符串函数库*/char filename[20]="E:\\tx123.txt";struct phone /*定义结构体变量*/{char name[10]; /*存放姓名*/char mobile[15]; /*存放手机号码*/char phone[15]; /*存放家庭电话*/char company[20]; /*存放工作单位*/char add_Email[20]; /*存放Email地址*/struct phone *next; /*存放下一个节点的地址*/};typedef struct phone tel; /*重命名*/tel *head=NULL;int z=1,x=1; /*标记量x,z*/void showmenu(); /*显示功能菜单*/void add( ); /*控制添加记录*/void creat(); /*添加记录并按姓名排序*/void modify(); /*修改记录函数*/void searchshow(); /*查找功能显示*/tel *search(); /*查找菜单*/tel *searchname(); /*按人名查找*/tel *searchmob(); /*按手机号码查找*/tel *searchph(); /*按家庭号码查找*/void del(); /*删除记录函数*/void show(); /*显示全部记录*/void save(); /*保存函数*/void openfile(); /*输出文件到链表*/void fre(); /* 释放链表空间*/void showmenu() /*显示功能菜单*/{ int i;clrscr();for(i=0;i<80;i++)printf("%c",14);printf("\n\t\t********************************************\n"); printf("\t\t\t欢迎使用通讯录管理系统");printf("\n\t\t********************************************\n"); printf("\n\n\t\t\t******请选择你的操作******\n");printf("\t\t\t +-------------------------------+\n");printf("\t\t\t | 1 增加记录|\n");printf("\t\t\t | 2 修改记录|\n");printf("\t\t\t | 3 查找记录|\n");printf("\t\t\t | 4 删除记录|\n");printf("\t\t\t | 5 显示全部记录|\n");printf("\t\t\t | 0 退出|\n");printf("\t\t\t +-------------------------------+\n");printf("\n\n\t注意!!输入电话号码或Email要在英文状态下,中文状态无法输入!!\n\n"); printf("请在0--6选择:\n");for(i=0;i<80;i++)printf("%c",14);}void add( ) /*控制添加记录*/{int x=1;printf("开始添加纪录,在添加记录过程中按0 停止添加\n");while(x!=0){do{ creat();printf("操作完成\n");break;}while(1);printf("按0结束添加!!按其他数字键,继续添加!!!\n");scanf("%d",&x);if(x==0){ save();system("cls");}}}void creat() /*添加记录并按姓名排序*/{ int i;tel *new,*p1,*p2;new=(tel *)malloc(sizeof(tel));aa: printf("\t\t\t请输入姓名:");scanf("%s",new->name);printf("\t\t\t请输入工作单位:");scanf("%s",new->company);printf("\t\t\t请输入手机号码:");scanf("%s",new->mobile);printf("\t\t\t请输入家庭电话:");scanf("%s",new->phone);printf("\t\t\t请输入Email地址:");scanf("%s",new->add_Email);p1=head; /*将头指针赋给变量p1*/if(head!=NULL) /*先判断是否有记录*/do{if((strcmp(p1->mobile,new->mobile))==0||(strcmp(p1->phone,new->phone))==0){printf("记录已经存在\n");printf("\n%-10s%-20s%-15s%-15s%-20s\n",p1->name,p1->company,p1->mobile,p1->phone,p1->add_Email);printf("是否继续添加?1 继续添加\t其他数字键重新输入\n");scanf("%d",&i);if(i==1)break;elsegoto aa;}p1=p1->next;}while(p1!=NULL);p1=head;if(head==NULL) /*检测是否为空链表*/{head=new; /*链表为空,插入的结点作为第一个结点*/new->next=NULL;}else{while((p1->next!=NULL)&&(strcmp(p1->name,new->name)<0)){ p2=p1;p1=p1->next;}if((strcmp(p1->name,new->name)>0)){if(head==p1){ new->next=head;head=new;}else{ p2->next=new;new->next=p1;}}else{ p1->next=new;new->next=NULL;}}}void modify() /*修改记录函数*/ { tel *new=search();if(z==0);else if(x==0);else if(z==0&&x==0);else{ if(new==NULL){printf("请输入新纪录:\n");printf("\t\t\t请输入姓名:");scanf("%s",head->name);printf("\t\t\t请输入工作单位:"); scanf("%s",head->company);printf("\t\t\t请输入手机号码:"); scanf("%s",head->mobile);printf("\t\t\t请输入家庭电话:"); scanf("%s",head->phone);printf("\t\t\t请输入Email地址:"); scanf("%s",head->add_Email); save();}else{printf("请输入新纪录:\n");printf("\t\t\t请输入姓名:");scanf("%s",new->name);printf("\t\t\t请输入工作单位:"); scanf("%s",new->company);printf("\t\t\t请输入手机号码:"); scanf("%s",new->mobile);printf("\t\t\t请输入家庭电话:"); scanf("%s",new->phone);printf("\t\t\t请输入Email地址:"); scanf("%s",new->add_Email);save();}}printf("\n\n");printf("\t\t\t按任意键继续");getch();system("cls");}void searchshow() /*查找功能显示*/{ int i;clrscr();for(i=0;i<80;i++)printf("%c",16);printf("\n\t\t********************************************\n"); printf("\n\n\t\t\t******请选择你的操作******\n");printf("\t\t\t +-------------------------------+\n");printf("\t\t\t | 1 按人名查找|\n");printf("\t\t\t | 2 按手机号码查找|\n");printf("\t\t\t | 3 按家庭号码查找|\n");printf("\t\t\t +-------------------------------+\n");printf("\n\t\t********************************************\n"); printf("请在1--3选择:\n");for(i=0;i<80;i++)printf("%c",17);}tel *search() /*查找菜单*/{ int i;tel *p1=NULL,*p2=NULL,*p=NULL;searchshow();loop:scanf("%d",&i);if(i>=1&&i<=3)switch(i){case 1:p2=searchname();break;case 2:p2=searchmob();break;case 3:p2=searchph();break;}else{printf("选择错误,请重新选择\n\n");goto loop;}p1=head;while(p1!=NULL){if((strcmp(p1->name,p2->name))==0||(strcmp(p1->mobile,p2->mobile))==0||(strcmp(p1->phone,p2->phone))==0){printf("找到记录:\n");printf("%-10s%-20s%-15s%-15s%-20s\n","姓名","工作单位","手机号码","电话号码","家庭住址");printf("\n%-10s%-20s%-15s%-15s%-20s",p1->name,p1->company,p1->mobile,p1->phone,p1->a dd_Email);getch();break;}p=p1;p1=p1->next;}if(p1==NULL){printf("\t\t\t电话本中无此记录\n\n");printf("\t\t是否重新进行?按1 继续\t\n");scanf("%d",&i);if(i==1){free(p2);goto loop;}}return p;}tel *searchname() /*按人名查找*/{tel *p2=NULL;printf("\t\t请输入姓名:");p2=(tel *)malloc(sizeof(tel));scanf("%s",p2->name);return p2;}tel *searchmob() /*按手机号码查找*/{ tel *p2=NULL;printf("\t\t请输入手机号码:");p2=(tel *)malloc(sizeof(tel));scanf("%s",p2->mobile);return p2;}tel *searchph() /*按家庭号码查找*/{ tel *p2=NULL;printf("\t\t请输入家庭电话:");p2=(tel *)malloc(sizeof(tel));scanf("%s",p2->phone);return p2;}void del() /*删除记录函数*/{tel *p2=search();int i;if(z==0);else if(x==0);else if(z==0&&x==0);else if(p2==NULL){printf("\n\n\n确实要删除吗?\t按1 删除\t按其他数字保留!!\n"); scanf("%d",&i);if(i==1)head=head->next;save();printf("\t\t\t按任意键返回\n");getch();system("cls");}else{printf("\n\n\n确实要删除吗?\t按1 删除\t按其他数字保留!!\n"); scanf("%d",&i);if(i==1){p2->next=p2->next->next;save();}printf("\t\t\t按任意键返回\n");getch();system("cls");}}void show() /*显示全部记录*/{ tel *p1=NULL;clrscr();if(head==NULL) /*判断是否是空链表*/{printf("\n\t\t\t电话簿中没有记录,请输入纪录后,在使用本能!\n");printf("\t\t\t按任意键返回\n");getch();return;}p1=head;printf("\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~\n");printf("%-10s%-20s%-15s%-15s%-20s\n","姓名","工作单位","手机号码","电话号码","E_mail 地址");printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~\n");do{printf("%-10s%-20s%-15s%-15s%-20s",p1->name,p1->company,p1->mobile,p1->phone,p1->add_Email);p1=p1->next;}while(p1!=NULL);printf("\t\t\t按任意键返回\n");getch();system("cls");}void save() /*保存函数*/{tel *p1=NULL;FILE *fp;if((fp=fopen(filename,"w"))==NULL){printf("不能打开文件\n");return ;}p1=head;for(;p1!=NULL;p1=p1->next){fprintf(fp,"%s\t\t%s\t\t%s\t\t%s\t\t%s\n",p1->name,p1->company,p1->mobile,p1->phone,p1->add_Email);}printf("操作完毕\n");fclose(fp);}void openfile() /*输出文件到链表*/{FILE *fp;tel *p1=NULL,*p2=NULL;head=NULL;if((fp=fopen(filename,"r"))==NULL) /*打开文件*/{ /*文件不存在,表明第一次使用本电话簿*/ printf("\n\t\t\t********这是一个新电话簿*********\n");return ;}while(!feof(fp) ) /*循环读取文件数据*/{p1=(tel*)malloc (sizeof(tel));fscanf(fp,"%s%s%s%s%s\n",p1->name,p1->company,p1->mobile,p1->phone,p1->add_Email); if(head==NULL){head=p1;p1->next=NULL;p2=p1;}else{p2->next=p1;p1->next=NULL;p2=p1;}}fclose(fp);}void fre() /* 释放链表空间*/{tel *p=head;while(head!=NULL){head=head->next;free(p);p=head;}free(head);}main(){int x;openfile(); /*读取文件到链表*/textbackground(4);/*设置背景颜色*/textcolor(0); /*设置字体颜色*/while(1) /*设置循环条件为真*/{showmenu(); /*显示各个功能*/fflush(stdin); /*刷新缓存区,即清除上一次的存储数据*/printf("请作出您的选择:");scanf("%d",&x);if(x>=0&&x<=5){switch(x){ clrscr();case 1:add();break; /*添加记录函数*/case 2:modify();break; /*修改记录函数*/case 3:search();break; /*查找记录函数*/case 4:del();break; /*删除记录函数*/case 5:show();break; /*显示全部记录*/case 0:fre();printf("\n\t\t欢迎再次使用通讯录管理系统,再见!\n\n");exit(0); /*程序正常退出*/}}else printf("\n\n选择错误,请再次选择!\n");}}4、运行结果具体运行结果见实际操作5、分析与讨论大体上设计的程序与要求符合,但在分页程序的设计上,虽然我们设计出了较简单的可行的分页程序,可是在糅合进主程序时我们遇到了问题,主要是添加记录后显示的结果中始终带有乱码,这里可能是因为主程序的复杂性使输入、输出的数据格式与分页程序中的无法相匹配。

相关文档
最新文档