课程设计电话簿管理系统
学生通讯录管理系统课程设计

学生通讯录管理系统课程设计一、引言学生通讯录管理系统是一种能够有效管理学生通信信息的软件工具。
在当今信息化社会中,为了更好地维护学生通信信息和便于学校管理,设计一个高效、实用的学生通讯录管理系统至关重要。
本文将围绕学生通讯录管理系统的设计与实现展开讨论。
二、需求分析1. 用户需求•管理员需要能够对学生信息进行增删查改操作;•学生要能够方便地修改个人信息;•教师需要便捷地查看学生信息;•系统需要有良好的用户权限管理机制。
2. 功能需求•学生信息管理:包括学生基本信息的录入、修改和删除。
•通讯录管理:实现学生通讯录的管理和分类。
•查询功能:实现对学生信息的快速查询。
•权限管理:分管理员和普通用户,管理员有更高的权限控制。
三、系统设计1. 系统架构学生通讯录管理系统采用典型的客户-服务器架构,后端基于MySQL数据库存储学生信息,前端通过Web页面进行展示和操作。
2. 数据库设计设计数据库表格包括:学生信息表(包括学号、姓名、性别、年级等字段)、用户表、通讯录表等。
3. 页面设计•登录页面:对用户进行身份验证。
•学生信息管理页面:实现对学生基本信息的增删查改。
•通讯录管理页面:实现通讯录的分类和管理。
四、系统实现1. 环境配置•使用Python语言编写后端代码。
•前端采用HTML、CSS、JavaScript。
•数据库采用MySQL。
2. 实现步骤1.搭建后端框架,实现数据的增删查改功能。
2.设计前端页面,实现用户交互和数据展示。
3.进行系统测试和优化。
五、功能演示1. 登录功能输入正确的用户名和密码,用户可以成功登录系统。
2. 学生信息管理管理员可以添加、删除、修改学生信息,普通用户只能查看。
3. 通讯录管理实现对通讯录的添加、分类和管理。
六、总结与展望通过本次学生通讯录管理系统课程设计,我学到了如何进行系统设计、数据库设计和前后端分离开发的方法。
未来,还可以进一步改进系统功能,增加权限管理模块、优化界面交互等,使系统更加稳健和实用。
java课程设计(通讯录管理系统)

掌握Java语言基础
理解面向对象编程思 想
掌握数据库操作技术
提高团队协作和沟通 能力
完成一个实用的通讯 录管理系统
联系人管理:添加、删除、修改、查询联系人信息 联系人分组:创建、删除、修改、查询联系人分组 联系人搜索:根据姓名、电话、邮箱等信息进行搜索 联系人导出:将联系人信息导出为Excel、CSV等格式的文件 联系人导入:从Excel、CSV等格式的文件中导入联系人信息 系统设置:修改系统语言、主题、字体等设置
数据库类型:MySQL
数据库表结构:用户表、 联系人表、分组表等
主键和外键:用户ID、联 系人ID、分组ID等
数据库操作:增删改查等 基本操作
数据库优化:索引、缓存、 分表等优化措施
数据库安全:用户权限管 理、数据加密等安全措施
界面布局:简洁 明了,易于操作
色彩搭配:协调 统一,易于阅读
功能模块:联系 人管理、分组管 理、搜索功能等
汇报人:
添加标题
添加标题
查询方式:支持模糊查询和精确查 询
查询优化:使用索引提高查询效率
功能描述:删除指定联系人信 息
实现方法:调用数据库删除接 口
操作步骤:选择联系人,点击 删除按钮,确认删除
注意事项:确保删除操作不会 影响其他数据完整性
添加联系人:输入姓名、电话、邮箱等信 息
修改联系人:修改姓名、电话、邮箱等信 息
删除联系人:删除指定联系人
查询联系人:根据姓名、电话、邮箱等信 息进行查询
导出联系人:将联系人信息导出为Excel 或CSV文件
导入联系人:将Excel或CSV文件中的联系 人信息导入到系统中
修改模块界面:提供用户友 好的界面,方便用户操作
电话簿管理系统课程设计

课程设计簿管理系统VER1.0系别:计算机科学与技术系专业(班级):电子信息科学与技术2班XX 徐楚奇学号指导教师:翔完成日期:2014年11月7日目录摘要3第一章前言4第二章簿管理系统介绍52.1流程图52.2程序编写概要6第三章主要功能实现73.1删除功能设计73.2添加功能设计7第四章源程序9第五章总结心得23致谢 (24)参考文献 (24)摘要本次课程设计的题目是个人通讯录管理系统,要求将程序中所输人的联系人XX、、QQ、MSN和地址信息这些数据以文本的方式保存,并且能够对所储存的联系人信息进行显示、查询、修改、删除等功能。
本文通过利用模块化程序设计思想,使用单链表和结构体等编写出的可以实现存储、打印、删除等功能的簿管理系统。
通过完成这个课程设计让我们熟悉并掌握在c语言中使用结构体、单链表,指针,函数,和模块化设计思想。
关键词结构体,链表,指针,函数第一章前言在前面我们学习了c语言的一些基础知识对c语言有了初步的认识和了解,为了让我们更加全面地了解c语言程序设计的步骤和方法,在老师的指导下我们进行了一次综合实训。
设计一个简单的簿管理系统,可以存储,删除等。
为了方便使用DEV-C++来编写程序,可以添加汉字备注方便理解程序。
根据前面所学的单链表、指针、函数、结构体等知识在使用模块化设计思想去编写。
设计“通讯录管理系统”使其具有数据插入、修改、删除、显示和查询等功能。
使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法。
使学生掌握软件设计的基本容和设计方法,并培养学生进行规化软件设计的能力。
使学生掌握使用各种计算机资料和有关参考资料,提高学生进行程序设计的基本能力。
其功能包括以下各项:1)数据包括:人名、。
2)可对记录中的XX和进行修改。
3)可增加或删除记录。
4)可显示所有保存的记录。
第二章簿管理系统介绍2.1 流程图簿管理系统因具备以下功能有流程图表示,如下图2.10图2.102.2程序编写概要1 主函数main()主函数使用户进入簿管理系统主界面——用户选择界面,用户可以选择要使用的功能并选择相应的选项进入该功能。
c语言电话簿课程设计

c语言电话簿课程设计一、课程目标知识目标:1. 理解并掌握C语言结构体和数组的使用,能运用其创建电话簿数据结构;2. 学会使用C语言进行文件操作,实现对电话簿数据的保存和读取;3. 掌握C语言中字符串处理的相关函数,实现对电话簿信息的增删查改操作。
技能目标:1. 能够运用所学知识独立设计并实现一个简单的电话簿管理系统;2. 培养学生的编程实践能力,提高问题分析和解决问题的能力;3. 培养学生的团队协作能力,通过分组讨论和合作完成课程设计。
情感态度价值观目标:1. 培养学生对编程的兴趣,激发学生主动探索计算机科学的热情;2. 培养学生的创新意识,鼓励学生勇于尝试和改进自己的设计方案;3. 培养学生严谨、认真的学习态度,养成良好的编程习惯。
分析课程性质、学生特点和教学要求,本课程目标旨在使学生在掌握C语言基础知识的基础上,通过实际项目设计,提高学生的编程实践能力和问题解决能力。
同时,注重培养学生的团队协作精神和情感态度,使学生在完成课程设计的过程中,形成积极的学习态度和价值观。
课程目标分解为具体学习成果,便于后续教学设计和评估。
二、教学内容1. C语言基础知识回顾:结构体、数组、字符串处理函数(教材相关章节)- 结构体的定义和使用;- 数组的定义和操作;- 常用字符串处理函数。
2. 文件操作:文件读写、文件打开与关闭(教材相关章节)- 文件的打开与关闭;- 文件读写操作;- 错误处理。
3. 电话簿管理系统功能设计及实现(课程设计项目)- 系统需求分析;- 功能模块划分;- 编程实现电话簿的增删查改操作;- 文件存储与读取。
4. 课程设计实践:分组讨论、编程实现、测试与优化(教材实践环节)- 学生分组,明确分工;- 编程实践,完成电话簿管理系统;- 测试系统,发现并解决问题;- 优化程序,提高系统性能。
教学内容按照课程目标进行选择和组织,确保科学性和系统性。
教学大纲明确教学内容的安排和进度,结合教材相关章节,让学生在实践中掌握C语言电话簿课程设计所需的知识点。
(完整word版)电话簿管理系统

课程设计说明书设计名称:程序设计语言强化课程设计题目:电话簿管理系统学生姓名:专业:班级:学号:指导教师:日期:年月日课程设计任务书专业年级班一、设计题目(一)学生成绩排名(二)根据条件进行学生成绩排名(三)链表的操作(链表的建立,访问,删除链表指定结点,增加结点)(四)学生成绩文件管理(五)一个综合系统(电话簿管理系统)二、主要内容2.1学生成绩排名采用选择法,将学生成绩从高到低进行排序,再输入一个学生的成绩,将此成绩按照排序规律插入已排好序的学生成绩数组,最后将排好序的成绩单进行反序存放。
2.2 根据条件进行学生成绩排名在函数中进行10个学生成绩从高到低排名,再改进函数,进行n个学生成绩从高到低排名, 排名方式根据函数的style参数进行,如style为‘a'按升序排,style为' d ' 按降序排。
(a:ascending 升,d:descending 降)编写多个不同函数,使之能实现不同的排序算法(3种以上),再编写一个通用输出函数,(要求用函数指针做参数)能分别打印不同排序算法的结果。
2.3链表的操作(链表的建立,访问,删除链表指定结点,增加结点)建立一个动态链表,将学生数据(学号,成绩)存入链表结构中,实现链表的访问(求学生成绩的平均分,找到最高分,最低分,将其数据输出)。
删除指定学号的学生数据,对学生数据进行排序,分别在链表头部,中间,末尾插入学生数据。
2.4学生成绩文件管理定义一个结构体数组,存放10个学生的学号,姓名,三门课的成绩,输出单门课成绩最高的学生的学号、姓名、以及该门课程的成绩,输出三门课程的平均分数最高的学生的学号、姓名及其平均分,将10个学生的相关数据,存入文件中,再从文件中读出,按照平均分数从高到低进行排序,分别将结果输出到屏幕上和另一文件中,再从文件中读取第 1 ,3 , 5 ,7,9个学生的数据。
2.5 一个综合系统(电话簿管理系统)数据库的主要数据包括:姓名、工作单位、电话号码、E-mail地址。
电话簿模拟系统课程设计

电话簿模拟系统课程设计一、课程目标知识目标:1. 让学生掌握电话簿模拟系统的基本原理和功能,包括数据的存储、检索和更新。
2. 使学生了解并运用程序设计的基本思路和方法,实现电话簿系统的功能模块。
3. 引导学生理解数据结构中数组、链表等在电话簿系统中的应用。
技能目标:1. 培养学生运用所学知识,设计并编写简单的电话簿模拟系统程序。
2. 提高学生的问题分析能力,能够将现实生活中的问题转化为计算机程序进行处理。
3. 培养学生的团队协作能力,通过分组合作完成电话簿系统的设计。
情感态度价值观目标:1. 激发学生对计算机科学的兴趣,提高学习积极性,培养自主学习能力。
2. 培养学生面对问题时的耐心和毅力,增强解决问题的信心。
3. 引导学生认识到编程在解决实际问题中的应用价值,树立正确的价值观。
课程性质:本课程为信息技术学科的课程,结合编程语言和实际应用,培养学生的编程思维和实际操作能力。
学生特点:学生为初中年级,具备一定的计算机操作基础,对编程有初步了解,好奇心强,喜欢动手实践。
教学要求:教师需结合学生特点,采用任务驱动的教学方法,引导学生主动探索,注重理论与实践相结合,提高学生的实际操作能力。
通过课程目标的分解,确保学生在课程结束后能够独立完成一个简单的电话簿模拟系统设计。
二、教学内容1. 电话簿系统基本概念:介绍电话簿系统的定义、功能及在生活中的应用。
2. 数据结构:讲解数组、链表等基本数据结构,分析其在电话簿系统中的应用。
3. 编程语言基础:回顾相关编程语言的基本语法,如变量、条件语句、循环语句等。
4. 电话簿系统功能模块设计:- 数据存储:介绍如何使用数组或链表存储电话簿信息。
- 数据检索:讲解如何实现按照姓名、电话号码等条件进行查找。
- 数据更新:介绍如何添加、修改和删除电话簿中的信息。
5. 电话簿系统实现:结合实际案例,指导学生动手编写电话簿程序。
6. 测试与调试:教授学生如何测试电话簿程序,发现并解决程序中的错误。
数据结构课程设计通讯录管理系统

数据结构课程设计通讯录管理系统一、系统需求分析通讯录管理系统的主要目标是提供一个方便、高效的方式来管理联系人信息。
具体需求包括:1、能够添加联系人,包括姓名、电话号码、电子邮件、地址等基本信息。
2、可以对联系人信息进行修改和删除操作。
3、支持按照姓名、电话号码等关键字进行快速查找。
4、能够以列表形式展示所有联系人的信息。
二、数据结构选择为了实现上述功能,我们需要选择合适的数据结构来存储联系人信息。
考虑到联系人信息的多样性和动态性,链表是一个不错的选择。
链表可以方便地进行插入、删除和修改操作,并且能够灵活地调整存储空间。
另外,为了提高查找效率,我们可以结合使用哈希表。
通过将联系人的关键信息(如姓名或电话号码)进行哈希运算,快速定位到对应的联系人节点。
三、系统功能实现1、添加联系人功能当用户选择添加联系人时,系统会提示用户输入联系人的各项信息。
这些信息被封装成一个结构体,并通过链表的插入操作添加到链表中。
同时,将关键信息映射到哈希表中,以便后续快速查找。
2、修改联系人功能用户输入要修改的联系人的关键字,系统通过哈希表快速找到对应的联系人节点。
然后,提示用户输入修改后的信息,并更新链表和哈希表中的数据。
3、删除联系人功能与修改功能类似,通过关键字找到联系人节点,从链表和哈希表中删除相应的节点和信息。
4、查找联系人功能用户输入查找关键字,系统通过哈希表进行快速定位,如果找到匹配的联系人,则显示其详细信息。
5、展示所有联系人功能遍历链表,将所有联系人的信息以列表形式输出到屏幕上。
四、系统界面设计为了提高用户体验,系统设计了简洁直观的界面。
主界面提供了添加、修改、删除、查找和展示所有联系人等功能选项。
用户通过选择相应的选项,进入对应的操作流程。
五、代码实现示例以下是部分关键代码的示例:```c//联系人结构体typedef struct Contact {char name50;char phoneNumber20;char email50;char address100;struct Contact next;} Contact;//哈希表节点结构体typedef struct HashNode {char key50;Contact contact;struct HashNode next;} HashNode;//链表插入联系人void insertContact(Contact head, Contact newContact) {newContact>next = head;head = newContact;}//哈希函数unsigned int hashFunction(const char key) {unsigned int hash = 0;while (key) {hash =(hash << 5) + key++;}return hash % HASH_TABLE_SIZE;}//查找联系人Contact findContact(Contact head, const char key, HashNode hashTable) {unsigned int hashValue = hashFunction(key);HashNode node = hashTablehashValue;while (node) {if (strcmp(node>key, key) == 0) {return node>contact;}node = node>next;}Contact current = head;while (current) {if (strcmp(current>name, key) == 0 ||strcmp(current>phoneNumber, key) == 0) {//更新哈希表HashNode newNode =(HashNode )malloc(sizeof(HashNode));strcpy(newNode>key, key);newNode>contact = current;newNode>next = hashTablehashValue;hashTablehashValue = newNode;return current;}current = current>next;}return NULL;}```六、系统测试在完成系统的开发后,需要进行全面的测试以确保系统的稳定性和可靠性。
电话簿管理系统课程设计

目录摘要 (2)一、课程设计目的 (3)二、课程设计内容 (3)三、总体设计 (3)四、详细设计 (5)(1)数据结构设计 (5)(2)模块接口设计 (5)(3)部分函数细节 (6)五、调试与测试 (9)(1)调试过程中的主要问题 (9)(2)测试结果的分析与讨论 (9) (12)六.实习总结 (14)参考文献 (15)致谢辞 (16)附录:源程序代码 (17)摘要日益繁多的人际交往使得我们很难搞清楚与每个人之间的联系方式,特别是对于做经常出差的人来说更是难,所以电话簿能够便捷的给我们带来所需要的相关信息。
而随着计算机的普及,人们的生活摆脱了传统式的电话簿,越来越多的靠计算机来帮助人们记住这些事情,极其简便。
这就需要有一个使用的电话簿管理系统,用户可以方便的通过自己电脑的电话簿管理系统,来随时查阅自己所需要的信息,而不必再大费周折去翻开那繁琐的记事本。
电话簿管理系统是一个专门针对储存用户联系方式以及一些简单个人信息的实用管理系统,它方便了用户对众多客户、朋友、同事等个人信息的储存和快速查阅的功能,大大减少了查找过程的时间。
关键字:信息(Information)电话簿管理系统(The Management of Telephone Book)一、课程设计目的通过课程设计,加深对结构化设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。
通过课程设计,学会设计数据结构。
其中包括对结构数组、链表和数据结构等知识的运用。
通过课程设计,提高程序开发功能,能运用合理的控制流程编写清晰高效的程序。
通话课程设计,培养分析问题、解决实际问题的能力。
二、课程设计内容设计一个实用的电话簿管理系统,能以简便高效的方式对电话簿进行管理,具体要示:电话簿信息包括:姓名,电话。
(1)更新:能插入、删除电话簿信息。
.(2)浏览:能够查看所有的电话簿信息。
(3)查询:能实现指定姓名信息查询。
(4)修改:能修改指定的电话簿信息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一.程序功能简介一个基本的电话簿管理程序,具有插入、删除、显示、修改和查询联系人电话码的功能。
主菜单如右图所示,每个菜单项功能如下:1.增加记录菜单:请输入用户姓名,如果该用户已经存在则添加失败,否则,输入用户的电话号码,进行添加。
2.修改某条记录:请输入用户姓名,如果没有该用户显示“该用户不存在”信息,否则,输出原电话号码,然后输入新的电话号码,进行修改。
3.删除记录:输入用户姓名,进行删除(删除时要进行确认)。
4.查询:输入用户姓名,进行查找。
5.排序:根据子菜单,选择不同的排序方式。
6.显示:逐屏显示(每屏显示10条记录)。
7.全删:进行全部删除(要确认)。
二.课程设计要求请选择以下功能1- 增加记录2- 修改记录3- 删除记录4- 查找(按姓名)5- 排序6- 显示记录1.用汉化菜单实现。
2.提供按姓名查询电话号码的功能。
3.显示功能(提供逐屏显示的功能,每屏显示10条记录)。
4.删除和修改时要进行确认。
5.将电话簿记录以文件的形式存在磁盘上;每次操作时将电话簿调出,操作完毕后存盘。
三.课程设计说明1.程序采用数组数据结构实现。
2.用类来实现数据的封装。
四.参考数据结构1.“电话簿”称为用户信息表,用数组实现。
用户信息表由若干用户信息构成,每个用户信息是一个数组元素。
2.“user.txt”是一个文件,用于保存“用户信息表”中的信息。
当系统启动时,从该文件中读入信息,当退出系统时,将“用户信息表”中的信息写到该文件中。
该文件中信息存放形式如下:ZhangHong 5221369LiLi 84891112ZhaoQiang 5221498其中name(姓名)占20列phone_num(电话号码)占12列五.具体功能及实现定义Fphone类,通过其私有成员数组name[20]和phone[12]分别记录用户姓名与电话号码,定义UserDatabase类记录用户信息,通过公有成员函数实现对数据的操作。
六.源程序及注释#include<fstream.h>#include<iostream.h>#include<iomanip.h>#include<string.h>#include<stdlib.h>#define M 20#define N 12#define MAX 100class Fphone //用户信息类的定义{char name[M]; // 姓名char phone_num[N]; //电话号码public:Fphone(char *na="",char *ph=""){ strcpy(name,na);strcpy(phone_num,ph);}char*getname(); //获取姓名char*getphone_num(); //获取电话号码void setname(char*a); //设置姓名void setphone_num(char*a); //设置电话号码void disp(); //显示用户信息};char *Fphone::getname(){ return name;}char *Fphone::getphone_num(){ return (phone_num);}void Fphone::setname(char *a){ strcpy(name,a);}void Fphone::setphone_num(char*a){ strcpy(phone_num,a);}void Fphone::disp(){ cout<<"姓名:"<<name<<'\t'<<"电话号码:"<<phone_num<<endl;}class UserDatabase //用户信息表类的定义{ int nElem; //用户信息表中的元素个数,即当前记录总数int Maxu; //最多的用户Fphone *user; //指向用户信息表的指针public:UserDatabase() //构造函数,初始化用户信息表,将user.txt文件中数据读到User[]中{ nElem=0;Maxu=50;user=new Fphone[Maxu];fstream in;in.open("user.txt",ios::in|ios::nocreate); //打开文件for(int i=0;(!in.eof());i++){ in>>user[i].getname();in>>user[i].getphone_num();nElem++;}in.close();}~UserDatabase() //析构函数,将user[]写入user.txt文件中{ fstream out;Fphone *p=NULL;p=user;out.open("user.txt",ios::out,filebuf::sh_none);for(int i=0;i<nElem;i++){ out<<setw(20)<<((p+i)->getname())<<setw(15)<<((p+i)->getphone_num())<<endl;}delete []user;out.close();}void clear() //删除所有用户信息{ char ord;cout<<"确定删除吗?(选择:[y]是;[n]否)\a\a"<<endl;do{ cin>>ord;if(ord=='N'||ord=='n') return;else if(ord=='Y'||ord=='y'){ delete[Maxu]user;user=0;cout<<"删除成功啦!"<<endl;nElem=0;return;}else cout<<"请重新输入(选择:[y]是;[n]否)\a\a"<<endl;}while(ord!='n'||ord!='N'||ord!='y'||ord!='Y');}void add_record(char *na,char*ph_num) //添加用户信息,插入用户后仍按升序排列{ if (nElem==0){ nElem++;user->setname(na);user->setphone_num(ph_num);}else if(nElem<Maxu){ for(int i=nElem-1;i>=0;i--){ if(strcmp((user+i)->getname(),na)>0){ (user+i+1)->setname(((user+i)->getname()));(user+i+1)->setphone_num(((user+i)->getphone_num()));}else break;}(user+i+1)->setname(na);(user+i+1)->setphone_num(ph_num);nElem++;}else cout <<"空间不足,无法添加!"<<endl;}Fphone *getuser() //返回user指针{ return(user); }void delete_record(Fphone *p,int k) //删除用户信息{ char con;cout<<"确认删除?(Y/N)";cin>>con;if (con=='N'||con=='n') return;else if (con=='Y'||con=='y'){ for(int i=k;i<nElem;i++){ user[i]=user[i+1]; }nElem--;cout<<"已删除!"<<endl;return;}else{ cout<<"输入错误!"<<endl;system("pause");return;}}void modify_record(Fphone *p,char*ph_num)//修改用户信息{p->setphone_num(ph_num);}Fphone *query(char *na) //按姓名查找顺序查找,这里也可以用折半{ Fphone *p=user;int i=0;while(1){ if(strcmp(p->getname(),na)==0)return p;p++;if(i++==nElem)break;}return NULL;}void sorta_name() //按姓名升序排序插入排序法{ Fphone temp;int i,j;for(i=1;i<nElem;i++){ temp=user[i];for(j=i-1;j>=0&&(strcmp(temp.getname(),user[j].getname())<0);j--){ strcpy(user[j+1].getname(),user[j].getname());strcpy(user[j+1].getphone_num(),user[j].getphone_num());}strcpy(user[j+1].getname(),temp.getname());strcpy(user[j+1].getphone_num(),temp.getphone_num());}}void sorta_phonenum() //按电话号码升序排序选择排序法{ int i,j,p;Fphone temp;for(i=0;i<nElem-1;i++){ p=i;for(j=i+1;j<nElem;j++)if(strcmp(user[j].getphone_num(),user[p].getphone_num())<0) p=j;if(p!=i){ strcpy(temp.getname(),user[p].getname());strcpy(temp.getphone_num(),user[p].getphone_num());strcpy(user[p].getname(),user[i].getname());strcpy(user[p].getphone_num(),user[i].getphone_num());strcpy(user[i].getname(),temp.getname());strcpy(user[i].getphone_num(),temp.getphone_num());}}}void sort_name() //按姓名降序排序,将排成升序的对象数组逆向放置{ Fphone temp;int i,m=(nElem+1)/2;for(i=0;i<m;i++){ strcpy(temp.getname(),user[i].getname());strcpy(temp.getphone_num(),user[i].getphone_num());strcpy(user[i].getname(),user[nElem-i-1].getname());strcpy(user[i].getphone_num(),user[nElem-i-1].getphone_num());strcpy(user[nElem-i-1].getname(),temp.getname());strcpy(user[nElem-i-1].getphone_num(),temp.getphone_num());}}void sort_phonenum() //按电话号码降序排序冒泡排序法{ Fphone temp;int i,m=(nElem+1)/2;for(i=0;i<m;i++){ strcpy(temp.getname(),user[i].getname());strcpy(temp.getphone_num(),user[i].getphone_num());strcpy(user[i].getname(),user[nElem-i-1].getname());strcpy(user[i].getphone_num(),user[nElem-i-1].getphone_num());strcpy(user[nElem-i-1].getname(),temp.getname());strcpy(user[nElem-i-1].getphone_num(),temp.getphone_num());}}void disp(){ int i,n=0;cout<<setw(22)<<"姓名"<<setw(14)<<"电话号码"<<endl;for(i=0;i<nElem;i++){cout<<setw(22)<<(user+i)->getname()<<setw(14)<<(user+i)->getphone_num()<<endl;n++;if(n%10==0){ system("pause");system("cls");}}cout<<endl;}};void menu(){ cout<<" 请选择以下功能:"<<endl;cout<<" 1-增加记录"<<endl;cout<<" 2-修改记录"<<endl;cout<<" 3-删除记录"<<endl;cout<<" 4-查找(按姓名)"<<endl;cout<<" 5-排序"<<endl;cout<<" 6-显示记录"<<endl;cout<<" 7-全删"<<endl;cout<<" 0-退出"<<endl;cout<<" 输入选择:"<<endl;}void main(){ cout<<"************************************************** "<<endl;cout<<" "<<endl;cout<<" 欢迎使用电话簿管理系统"<<endl;cout<<" 祝您使用愉快"<<endl;cout<<" "<<endl;cout<<"***************************************************** "<<endl;system("pause");while(1){ UserDatabase s;system("cls");menu();int k;cin>>k;switch(k){ case 1:{ system("cls")cout<<"*****************************************"<<endl;cout<<" 增加记录"<<endl;char na[20],ph_num[12];Fphone *t=NULL;char w;do{ cout<<"请输入您要增加的用户的姓名";cin>>na;t=(s.query(na));if(t){ cout<<"用户已经存在,添加失败!!!"<<endl; }else{ cout<<"请输入用户的电话号码";cin>>ph_num;s.add_record(na,ph_num);cout<<"您添加的信息为:";cout<<"姓名:"<<na<<'\t'<<"电话号码:"<<ph_num<<endl;cout<<"成功添加"<<endl;}cout<<"是否继续?(Y or N)"<<endl;cin>>w;}while(w=='Y');break;}case 2:{ system("cls");cout<<"***************************************"<<endl;cout<<" 修改记录"<<endl;cout<<"***************************************"<<endl;char na[M],ph_num[N];Fphone *t=NULL;char w;do{ cout<<"请输入您要修改的用户的姓名";cin>>na;t=s.query(na);if(!t)cout<<"没有该用户!"<<endl;else{ cout<<"该用户原号码为:"<<t->getphone_num()<<endl;cout<<"请输入新的电话号码";cin>>ph_num;s.modify_record(t,ph_num);cout<<"成功修改"<<endl;}cout<<"是否继续?(Y or N)"<<endl;cin>>w;}while(w=='Y');break;}case 3:{ system("cls");cout<<"********************************************"<<endl;cout<<" 删除记录"<<endl;cout<<"************** ***************************"<<endl;char w;char na[M];int k;Fphone *p;do{ cout<<"请输入您要删除的用户的姓名";cin>>na;p=s.query(na);if(p==0)cout<<"没有该用户!"<<endl;else{ (*p).disp();k=p-s.getuser();s.delete_record(p,k);}cout<<"是否继续?(Y or N)"<<endl;cin>>w;}while(w=='Y');break;}case 4:{ system("cls");cout<<"*********************************"<<endl;cout<<" 查询记录"<<endl;cout<<"**********************************"<<endl;char na[M];int p=1;Fphone *t=NULL;char w;do{ cout<<"请输入您要查询的用户的姓名";cin>>na;t=s.query(na);if(t){cout<<"姓名:"<<t->getname()<<endl;cout<<"电话号码:"<<t->getphone_num()<<endl;}elsecout<<"对不起,没有此人信息!"<<endl;cout<<"是否继续?(Y or N)"<<endl;cin>>w;}while(w=='Y');break;}case 5:{ system("cls");cout<<" 请选择排序方式"<<endl;cout<<" 1.按姓名(升序) "<<endl;cout<<" 2.按电话号码(升序) "<<endl;cout<<" 3.按姓名(降序) "<<endl;cout<<" 4.按电话号码(降序) "<<endl;cout<<" 请输入你的选择:"<<endl;int k;cin>>k;switch(k){ case 1:s.sorta_name();cout<<"排序完成"<<endl;system("cls");break;case 2:s.sorta_phonenum();cout<<"排序完成"<<endl;system("cls");break;case 3:s.sort_name();cout<<"排序完成"<<endl;system("cls");break;case 4:s.sort_phonenum();cout<<"排序完成"<<endl;system("cls");break;}}case 6:{ system("cls");cout<<"*****************************************"<<endl;cout<<" 显示记录"<<endl;cout<<"*****************************************"<<endl;s.disp();system("pause");break;}case 7:{ system("cls");cout<<"您确定要删除所有记录吗?(Y or N)"<<endl;char q;cin>>q;if(q=='Y'||q=='y'){ cout<<"*********************************"<<endl;cout<<" 全部删除记录"<<endl;cout<<"*********************************"<<endl;s.clear();}else break;system("pause");break;}case 0:{ system("cls");cout<<"谢谢使用,再见!"<<endl;exit(0);}default:cout<<"不存在该选择,请重新输入要进行的操作:"<<endl;system("pause");break;}}}七.感想与心得1.电话簿管理程序较长,算法比较复杂,调试的过程中遇到了各种各样的问题。