简单通讯录c 课程设计

合集下载

c通讯录课程设计

c通讯录课程设计

c 通讯录课程设计一、教学目标本课程旨在让学生掌握通讯录的基本知识和技能,能够使用常见的通讯录软件进行个人信息管理。

通过本课程的学习,学生将能够:1.理解通讯录的基本概念和结构;2.熟练使用通讯录软件进行联系人信息的添加、删除、修改和查询;3.掌握通讯录软件的高级功能,如分组、设置提醒等;4.培养学生的信息管理和能力,提高日常生活和工作中的通讯效率。

二、教学内容本课程的教学内容主要包括以下几个部分:1.通讯录的基本概念和结构:介绍通讯录的定义、分类和常见的通讯录软件;2.通讯录软件的基本操作:讲解如何使用通讯录软件进行联系人信息的添加、删除、修改和查询;3.通讯录软件的高级功能:介绍如何使用通讯录软件进行分组、设置提醒等高级功能;4.实际操作练习:安排一定的实践时间,让学生实际操作,巩固所学知识。

三、教学方法为了提高教学效果,本课程将采用多种教学方法相结合的方式进行教学:1.讲授法:讲解通讯录的基本概念、结构和软件操作方法;2.案例分析法:通过分析实际案例,让学生学会如何使用通讯录软件解决实际问题;3.讨论法:学生进行小组讨论,分享使用通讯录软件的心得和技巧;4.实验法:安排实际操作练习,让学生动手实践,提高操作能力。

四、教学资源为了支持教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:选用权威、实用的通讯录教材,为学生提供系统的理论知识;2.参考书:提供相关的参考书籍,丰富学生的知识视野;3.多媒体资料:制作课件、视频等多媒体资料,增强课堂教学的趣味性和生动性;4.实验设备:准备电脑、通讯录软件等实验设备,确保学生能够进行实际操作练习。

五、教学评估本课程的评估方式将包括以下几个方面:1.平时表现:评估学生在课堂上的参与程度、提问回答等情况,占比20%;2.作业:评估学生完成作业的质量和速度,占比30%;3.考试:安排一次期末考试,评估学生对课程知识的掌握程度,占比50%。

六、教学安排本课程的教学安排如下:1.教学进度:按照教材的章节顺序进行教学,确保每个章节都有足够的教学时间;2.教学时间:每周安排两节课,每节课45分钟,共16周;3.教学地点:教室。

c通讯录课程设计

c通讯录课程设计

c 通讯录课程设计一、课程目标知识目标:1. 理解通讯录的基本概念,掌握电子通讯录的组成和功能。

2. 学会使用电子表格软件(如Microsoft Excel)创建、编辑和管理通讯录。

3. 掌握利用电子通讯录进行信息检索、排序和筛选的基本方法。

技能目标:1. 能够运用电子表格软件,自主设计并制作一份格式规范、信息准确的通讯录。

2. 培养学生运用电子通讯录进行信息整理和快速查找的能力,提高数据处理效率。

3. 培养学生合作交流、分享信息的能力,提高团队协作意识。

情感态度价值观目标:1. 培养学生尊重他人隐私,合法使用通讯录信息的意识。

2. 激发学生对信息技术课程的兴趣,提高学习积极性。

3. 培养学生勇于尝试、乐于探究的学习态度,增强自信心。

课程性质:本课程为信息技术课程,结合实际生活,教授学生如何使用电子通讯录,提高信息处理能力。

学生特点:学生具备基本的计算机操作能力,对新鲜事物充满好奇心,但需引导培养良好的信息素养。

教学要求:注重实践操作,鼓励学生自主探究,关注学生个体差异,因材施教。

将课程目标分解为具体的学习成果,以便于教学设计和评估。

二、教学内容1. 通讯录基本概念:介绍通讯录的定义、分类及其在日常生活中的应用。

2. 电子通讯录制作:a. 熟悉电子表格软件(以Microsoft Excel为例)的操作界面。

b. 学习如何创建新的工作簿,设置工作表标签。

c. 掌握单元格的选取、编辑和格式化。

d. 引导学生设计通讯录表格框架,包括姓名、电话、邮箱等基本信息。

3. 数据录入与编辑:a. 教授数据录入的方法,如填充柄、拖拽等。

b. 学习如何修改和删除数据,掌握撤销和恢复操作。

c. 引导学生学会检查数据的准确性,避免错误和遗漏。

4. 数据管理与查询:a. 掌握排序、筛选和查找功能,快速检索通讯录信息。

b. 学习使用公式和函数进行数据分析,如求和、平均值等。

c. 引导学生运用条件格式对通讯录进行个性化设置。

通讯录系统c课程设计

通讯录系统c课程设计

通讯录系统c 课程设计一、课程目标知识目标:1. 学生能理解通讯录系统的基本概念,掌握其功能结构和设计原理。

2. 学生能掌握运用编程语言(如C语言)实现通讯录系统的基本功能,如添加、删除、查找和修改联系人信息。

3. 学生了解数据结构在通讯录系统中的应用,如链表、结构体等。

技能目标:1. 学生能运用所学知识,独立完成一个简单的通讯录系统设计与实现。

2. 学生通过实践操作,提高编程能力和解决问题的能力。

3. 学生能够运用调试工具进行程序调试,找出并修复程序中的错误。

情感态度价值观目标:1. 学生通过课程学习,培养对计算机编程的兴趣和热情。

2. 学生在学习过程中,养成合作、分享、探究的良好学习习惯。

3. 学生能够认识到编程在生活中的应用价值,激发其进一步学习的动力。

分析课程性质、学生特点和教学要求:本课程为计算机编程课程,以C语言为载体,结合实际生活中的通讯录系统,让学生在实践中掌握编程知识。

学生处于高年级阶段,已具备一定的编程基础,求知欲强,喜欢挑战性任务。

教学要求注重培养学生的动手能力和实际应用能力,将理论知识与实际操作相结合,提高学生的综合素养。

将目标分解为具体的学习成果:1. 学生能够自主设计并实现一个简单的通讯录系统,包括基本功能模块。

2. 学生能够运用所学知识解决实际编程问题,如优化程序性能、修复程序错误等。

3. 学生在学习过程中,能够积极与同学交流合作,分享学习心得和经验。

4. 学生能够通过课程学习,提高自己的编程水平和实际应用能力,为后续学习奠定基础。

二、教学内容1. 通讯录系统基本概念:介绍通讯录系统的定义、功能、应用场景等,使学生对其有一个全面的了解。

2. C语言基础知识回顾:回顾结构体、指针、函数等C语言基础知识,为后续编程打下基础。

3. 数据结构:讲解链表、结构体等数据结构在通讯录系统中的应用,使学生掌握如何利用数据结构组织数据。

4. 编程实现通讯录功能:详细讲解如何用C语言实现通讯录的添加、删除、查找和修改联系人信息等功能,让学生动手实践。

c语言课程设计通讯录

c语言课程设计通讯录

c语言课程设计通讯录好的,我可以帮助您设计一个简单的通讯录程序。

下面是一个示例代码,实现了通讯录的基本功能,包括添加联系人、显示联系人列表、查找联系人、删除联系人和修改联系人信息。

c复制代码:#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX_CONTACTS 100 // 通讯录最大容量// 定义联系人结构体typedef struct {char name[20]; // 姓名char phone[15]; // 电话号码char email[30]; // 邮箱地址} Contact;// 定义通讯录结构体typedef struct {Contact contacts[MAX_CONTACTS]; // 联系人数组int size; // 当前联系人数量} AddressBook;// 添加联系人void add_contact(AddressBook *book) {if (book->size >= MAX_CONTACTS) {printf("通讯录已满,无法添加联系人。

\n"); return;}printf("请输入联系人姓名:");scanf("%s", book->contacts[book->size].name); printf("请输入联系人电话号码:");scanf("%s", book->contacts[book->size].phone); printf("请输入联系人邮箱地址:");scanf("%s", book->contacts[book->size].email); book->size++;printf("联系人已添加。

c通讯录系统课程设计

c通讯录系统课程设计

c 通讯录系统课程设计一、教学目标本课程旨在通过学习C通讯录系统,使学生掌握C语言编程的基本技能,能够运用C语言实现简单的通讯录管理系统。

具体目标如下:1.掌握C语言的基本语法和数据类型。

2.了解函数的定义和调用。

3.学习结构体和指针的运用。

4.理解程序的编译和调试过程。

5.能够编写简单的C语言程序。

6.学会使用结构体和指针编写复杂的数据结构。

7.掌握函数的调用和递归。

8.学会使用C语言实现简单的通讯录管理系统。

情感态度价值观目标:1.培养学生的编程兴趣,提高学生对计算机科学的热爱。

2.培养学生解决问题的能力,增强学生的自信心。

3.培养学生团队合作的精神,提高学生的沟通协作能力。

二、教学内容本课程的教学内容主要包括C语言的基本语法、数据类型、函数、结构体和指针等。

具体安排如下:1.C语言的基本语法和数据类型(2课时)2.函数的定义和调用(2课时)3.结构体和指针(3课时)4.通讯录管理系统的设计与实现(5课时)三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用多种教学方法,包括讲授法、讨论法、案例分析法和实验法等。

1.讲授法:用于讲解C语言的基本语法、数据类型、函数、结构体和指针等概念。

2.讨论法:通过小组讨论,让学生深入理解编程中的问题,培养学生的沟通能力。

3.案例分析法:分析实际编程案例,让学生学会将理论知识应用于实际问题。

4.实验法:让学生动手编写代码,实现通讯录管理系统,提高学生的实践能力。

四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将准备以下教学资源:1.教材:《C程序设计语言》2.参考书:《C Primer Plus》、《C和指针》3.多媒体资料:教学PPT、编程案例视频4.实验设备:计算机、编程环境(如Code::Blocks、Visual Studio等)五、教学评估本课程的教学评估将采用多元化的评估方式,以全面、客观、公正地评估学生的学习成果。

评估方式包括:1.平时表现(30%):评估学生在课堂上的参与度、提问回答、小组讨论等,以考察学生的学习态度和积极性。

通讯录c课程设计

通讯录c课程设计

通讯录c 课程设计一、课程目标知识目标:1. 让学生掌握通讯录的基本概念,了解其在信息技术中的应用。

2. 学会使用电子表格软件创建、编辑和保存通讯录。

3. 掌握对通讯录进行排序、筛选和查找等操作的方法。

技能目标:1. 培养学生运用电子表格软件处理数据的能力,提高信息处理效率。

2. 培养学生独立解决实际问题的能力,如运用通讯录进行联系人管理。

情感态度价值观目标:1. 培养学生热爱信息技术,认识到其在生活中的重要性。

2. 培养学生的团队协作意识,学会在小组合作中分享与交流。

3. 增强学生的信息意识,培养其尊重和保护个人隐私的观念。

课程性质:本课程为信息技术课程,旨在让学生掌握通讯录的基本操作,提高信息处理能力。

学生特点:学生为六年级学生,具备一定的信息技术基础,对电子表格软件有一定了解。

教学要求:1. 结合学生实际,注重实践操作,让学生在实际操作中掌握知识。

2. 注重培养学生的团队协作能力,提高课堂互动性。

3. 教学过程中关注学生的个体差异,提供个性化指导,确保每位学生都能达到课程目标。

二、教学内容1. 通讯录概念介绍:介绍通讯录的定义、作用及其在信息技术中的应用场景。

教材章节:第一章第二节2. 电子表格软件操作:指导学生使用电子表格软件(如Microsoft Excel或WPS表格)进行通讯录的创建、编辑和保存。

教材章节:第二章3. 通讯录排序与筛选:教授学生对通讯录进行排序、筛选和查找等操作的方法,以便快速检索联系人信息。

教材章节:第三章4. 高级应用技巧:介绍如何利用公式、函数进行通讯录数据的计算和汇总,如统计联系人数量、分组等。

教材章节:第四章5. 课堂实践:组织学生进行实际操作,巩固所学知识,提高实际应用能力。

教材章节:第五章6. 小组合作与分享:安排学生以小组形式完成通讯录制作任务,培养团队协作意识,分享操作技巧和经验。

教材章节:第六章教学内容安排与进度:第一课时:通讯录概念介绍,电子表格软件操作基础第二课时:通讯录创建、编辑和保存,排序与筛选操作第三课时:高级应用技巧,课堂实践第四课时:小组合作与分享,总结与反馈确保教学内容科学性和系统性,结合教材章节和教学实际,注重理论与实践相结合,使学生在掌握知识的同时,提高实际操作能力。

c课程设计通讯录

c课程设计通讯录

c 课程设计 通讯录一、课程目标知识目标:1. 学生能理解通讯录的基本概念,掌握其组成元素,如姓名、电话号码、地址等。

2. 学生能掌握在特定电子设备或应用中创建、编辑和存储通讯录的步骤。

3. 学生了解通讯录在生活中的重要性,认识到它对个人信息管理的价值。

技能目标:1. 学生能够独立在电子设备上新建通讯录,输入和修改联系人信息。

2. 学生能够利用排序和搜索功能,快速找到通讯录中的联系人。

3. 学生能够理解并使用分类、标签等功能,对通讯录进行有效的整理和优化。

情感态度价值观目标:1. 学生培养良好的信息管理习惯,认识到个人信息保护的重要性。

2. 学生在小组合作中,学会分享和交流,增强团队协作意识。

3. 学生通过学习通讯录的使用,认识到科技在生活中的应用,激发学习兴趣和探索精神。

课程性质:本课程为实践操作课程,结合生活实际,以培养学生的实际操作能力为主。

学生特点:四年级学生已具备一定的信息素养,对电子设备有较高的兴趣,但实际操作能力还需加强。

教学要求:教师应结合学生特点,采用讲解与实操相结合的教学方法,关注学生个体差异,确保每个学生都能掌握通讯录的基本操作。

在教学过程中,注重引导学生培养良好的信息管理习惯,提升学生的团队协作能力。

通过课程评估,确保学生达到预定的学习目标。

二、教学内容1. 通讯录的定义与作用- 介绍通讯录的基本概念- 讲解通讯录在生活中的重要性2. 通讯录的基本组成- 姓名、电话号码、地址等个人信息- 分类、标签、排序等管理功能3. 通讯录的创建与编辑- 在电子设备上新建通讯录- 添加、修改和删除联系人信息4. 通讯录的存储与管理- 保存和备份通讯录- 搜索和筛选联系人5. 通讯录的实用技巧- 设置头像、铃声等个性化选项- 使用共享和导出功能6. 信息安全与隐私保护- 讲解信息安全的基本知识- 强调保护个人隐私的重要性7. 小组合作与分享- 以小组为单位,共同创建一个班级通讯录- 分享创建过程中的经验和心得教学内容根据课本章节进行安排,结合课程目标,确保学生掌握通讯录的相关知识和操作技能。

c语言课程设计通讯录

c语言课程设计通讯录

c语言课程设计通讯录一、教学目标本课程的教学目标是使学生掌握C语言的基本语法和编程技巧,通过编写程序实现简单的通讯录管理系统。

知识目标包括:了解C语言的基本数据类型、运算符、控制结构、函数等基本概念;掌握结构体和指针的使用方法;理解面向对象编程的基本思想。

技能目标包括:能够使用C语言编写简单的程序;能够使用结构体和指针实现数据的有效管理;能够运用面向对象编程思想解决实际问题。

情感态度价值观目标包括:培养学生的编程兴趣和自信心;培养学生的问题解决能力和创新精神;培养学生团队合作和自主学习的意识。

二、教学内容本课程的教学内容主要包括C语言的基本语法、数据结构、函数、面向对象编程等内容。

具体安排如下:1.C语言基本语法:介绍C语言的基本数据类型、运算符、控制结构等,通过编写简单的程序让学生熟悉C语言的编程环境。

2.数据结构:讲解结构体的使用方法,引导学生掌握如何使用结构体来表示通讯录中的信息。

3.函数:介绍函数的定义和调用方法,让学生学会如何编写和使用函数来实现特定的功能。

4.面向对象编程:讲解面向对象编程的基本思想,引导学生掌握如何使用类和对象来实现通讯录管理系统。

三、教学方法本课程采用讲授法、讨论法、案例分析法、实验法等多种教学方法。

通过讲授法,为学生提供系统的知识框架;通过讨论法,激发学生的思考和讨论,培养学生的问题解决能力;通过案例分析法,让学生了解实际应用中的问题解决方法;通过实验法,培养学生的动手能力和创新精神。

四、教学资源本课程的教学资源包括教材、参考书、多媒体资料、实验设备等。

教材选用《C程序设计语言》作为主教材,参考书选用《C Primer Plus》等;多媒体资料包括教学PPT、视频等;实验设备包括计算机、网络等。

教学资源的选择和准备旨在支持教学内容和教学方法的实施,丰富学生的学习体验。

五、教学评估本课程的评估方式包括平时表现、作业和考试三个部分。

平时表现主要评估学生的课堂参与度、提问回答、团队协作等情况,通过观察和记录来评价学生的学习态度和积极性。

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

简单通讯录c 课程设计C++课程设计——简单通讯录管理0411204班041120431董力1.程序菜单功能通讯录是一个简单的数据库库表,每一个记录(结点)包含个人所有通讯信息。

程序执行过程为:显示主菜单,用户在choice:处输入选项(按照功能列表输入1~9中的一个数字),按回车后执行相应的功能。

具体函数的功能请见下面4. 提供典型测试数据组2.分析,感想。

(1)、数据结构程序采用一个单向链表类结构实现,每个结点代表一个通讯记录,链表类实现通讯录多个记录的管理工作。

(2)、新增功能可批量输入,一次输入多个人的信息。

(3)、遇到的问题这次课设遇到的问题较多,首先就是学过的知识无法融会贯通。

在完成课设时,许多知识点需要翻书查找(比如在输入输出流的部分),有时需要请教他人。

其次,是程序十分长,而且自己小错误不断,这样检查起来非常麻烦。

所以当运行程序时,出现了102个错误,其中大部分不是算法的问题,而是像少了“;”或是if中判断是否相等时用“=”而不是“==”。

最后,程序较长,编辑起来费力,有时一个算法出问题,其后的几个函数连带都会出问题,而且编译时没有显示有错误,这让检查起来非常麻烦,需要一遍又一遍阅读,有时还要请教别人一起阅读,耗时很长。

(4)、感想这次课设成功完成,让我非常惊讶。

平时作业的一个程序,有时需要一个下午来完成。

现在,我发现原来我也可以完成如此复杂的程序。

更重要的是,这次课设让我的一些知识能记得更加深刻,对于编程也更加熟练。

而且,我知道请教他人的重要性,有时自己一个人想不出来的问题,问问同学,可以更好更快的解决。

最后,我知道了光把理论知识还不够,还要不断实践,这样才能将知识掌握得更加牢固,更加灵活。

3.提供有注释的源程序#include <iostream.h>#include <stdlib.h>#include <ctype.h>#include <string.h>#include <iomanip.h>#include <fstream.h>class Node{char Name[10]; //姓名int OfficePhone; //办公室电话int HomePhone; //家庭电话char MobilePhone[15]; //手机号码char E_Mail[20]; //电子邮箱地址Node*Next; //下一个结点指针public:Node(char na[]="sb",int op=0,int hp=0,char mp[]="0",char em[]="0") //构造函数,有缺省值{strcpy(Name,na); //将na中的姓名拷贝到Name中OfficePhone=op; //将op中的数值赋给OfficePhoneHomePhone=hp; //将hp中的数值赋给HomePhonestrcpy(MobilePhone,mp);//将mp中的字符串拷贝到MobilePhone中strcpy(E_Mail,em); //将em中的字符串拷贝到E_Mail中}void Show() //显示结点数据{cout<<'\t'<<Name<<'\t'<<OfficePhone<<'\t'<<HomePhone<<'\t'<<MobilePhone<<'\t'< <E_Mail<<endl; //输出一个记录中的所有数据}void print(ofstream &out) //将结点数据写入文件{out.open("addresslist.text");//打开名为"addresslist.text"的文档out<<'\t'<<Name<<'\t'<<OfficePhone<<'\t'<<HomePhone<<'\t'<<MobilePhone<<'\t'<< E_Mail<<endl; //将数据存入"addresslist.text"中out.close(); //关闭文档}void SetName(char na[]) //修改姓名{strcpy(Name,na);}void SetOfficePhone(int op)//修改办公室电话{OfficePhone=op;}void SetHomePhone(int hp)//修改住宅电话{HomePhone=hp;}void SetMobilePhone(char mp[])//修改手机号码{strcpy(MobilePhone,mp);}void SetE_Mail(char em[])//修改电子邮箱地址{strcpy(E_Mail,em);}friend class AddressList; //将AddressList类说明为友元类};class AddressList{Node *HeadPtr; //链表首指针Node *T ailPtr; //链表尾指针int T ag; //排序状态标志public:AddressList() //构造函数,创建空链表,将T ag的值置为1 {HeadPtr=NULL; //设置首指针的初始值为空T ailPtr=NULL; //设置尾指针的初始值为空T ag=1; //T ag的初始值为1}void AddT ail(Node*p) //将p指向的结点加入到链表的尾部{if(HeadPtr==NULL)//如果链表为空,将数据添加在第一条{HeadPtr=T ailPtr=p;//链表为空,首尾指针均指向p}else{T ailPtr->Next=p;//如果不为空,则尾指针的Next指向pT ailPtr=p; //将p的值赋给T ailPtrT ailPtr->Next=NULL;//使T ailPtr的成员Next为空}}void AddSort(Node*p) //将p指向的结点按T ag指定的顺序插入到链表中{if(HeadPtr==NULL)//当链表为空时{HeadPtr=T ailPtr=p;//直接将数据记录在第一条p->Next=NULL;}else //如果链表不为空{Node *p1=HeadPtr,*p2=HeadPtr;//定义两个Node型指针变量if(T ag==1)//按姓名排列{p1=HeadPtr;//将首指针赋给p1while(strcmp(p->Name,p1->Name)>0&&p1->Next!=NULL)//比较p中Name和p1中的大小{p2=p1;p1=p1->Next;}//如果p大,就将下一个数据赋给p1,否则跳出循环if(strcmp(p->Name,p1->Name)<=0)//如果p的成员Name比较小{p->Next=p1;//将p的下一个指向p1if(HeadPtr==p1) HeadPtr=p;//如果首指针等于p1,则将p的值赋给首指针else p2->Next=p;}//如果p1是第一个将p赋给HeadPtr,否则p2下一个指向pelse//如果找不到比p的Name小的数据,就将p插在链表末尾{p1->Next=p;//将p赋给p的下一条记录p->Next=NULL;//而p的下一条为空}}if(T ag==2)//按办公室电话排列,同按姓名排列的方法{p1=HeadPtr;while((p->OfficePhone)>(p1->OfficePhone)&&p1->Next!=NULL){p2=p1;p1=p1->Next;}if((p->OfficePhone)<=(p1->OfficePhone)){p->Next=p1;if(HeadPtr==p1) HeadPtr=p;else p2->Next=p;}else{p1->Next=p;p->Next=NULL;}}if(T ag==3)//按家庭电话排列,同按姓名排列的方法{p1=HeadPtr;while((p->HomePhone)>(p1->HomePhone)&&p1->Next!=NULL){p2=p1;p1=p1->Next;}if((p->HomePhone)<=(p1->HomePhone)){p->Next=p1;if(HeadPtr==p1) HeadPtr=p;else p2->Next=p;}else{p1->Next=p;p->Next=NULL;}}if(T ag==4)//按手机号码排列,同按姓名排列的方法{p1=HeadPtr;while(strcmp(p->MobilePhone,p1->MobilePhone)>0&&p1->Next!=NULL){p2=p1;p1=p1->Next;}if(strcmp(p->MobilePhone,p1->MobilePhone)<=0){p->Next=p1;if(HeadPtr==p1) HeadPtr=p;else p2->Next=p;}else{p1->Next=p;p->Next=NULL;}}if(T ag==5)//按电子邮箱地址排列,同按姓名排列的方法{p1=HeadPtr;while(strcmp(p->E_Mail,p1->E_Mail)>0&&p1->Next!=NULL){p2=p1;p1=p1->Next;}if(strcmp(p->E_Mail,p1->E_Mail)<=0){p->Next=p1;if(HeadPtr==p1) HeadPtr=p;else p2->Next=p;}else{p1->Next=p;p->Next=NULL;}}}}Node *LookUp(char*name)//按姓名查找结点,返回该结点指针{Node *p=HeadPtr;//定义一个Node型指针,初始值为HeadPtrwhile(p!=NULL)//当链表不为空时{if(strcmp(p->Name,name)==0)//循环比较数据中的Name成员return p;//如果存在,返回结点p=p->Next;//将p的下一组数据赋给p}return NULL;//如果不存在,返回值为空}void Delete(char*name)//删除指定姓名的结点{Node *p1,*p2;if(HeadPtr==NULL)//当链表为空时{cout<<"通讯录为空,无结点可删!\n";}p1=HeadPtr;while(strcmp(p1->Name,name)!=0&& p1->Next!=NULL)//查找所在位置{p2=p1;//将p1的值赋给p2p1=p1->Next;//p1指向下一条记录}if(strcmp(p1->Name,name)==0)//若找到该姓名对应的数据,删除该数据{if(p1==HeadPtr)//如果p1在第一条,则将首指针指向下一条记录,将p1空出HeadPtr=p1->Next;else//否则将p1的上一个记录的成员Next直接指向p1的下一条记录p2->Next=p1->Next;delete p1;//释放p1的空间cout<<"删除了一个数据!\n";}else //若找不到,则输出"通讯录上没找到该条记录!"cout<<name<<"通讯录上没找到该条记录!\n";}void DeleteAll()//删除链表中全部结点{Node*p;//定义一个Node型指针变量pwhile(HeadPtr)//当首指针不为0时,进行循环{p=HeadPtr;//将head赋给pHeadPtr=HeadPtr->Next;//将head的下一条数据赋给headdelete p;//释放p的空间}}void Sort(int tag) //按T ag指定的关键字重新排序{ T ag=tag; //将tag的值赋给T agNode *p1,*p;//定义两个Node型指针变量p1,pp=HeadPtr;//将首指针的值赋给pHeadPtr=NULL;//将首指针置为空while(p) //当首指针不为空时,进行循环{ p1=p;//将p的值赋给p1p=p->Next;//p指向下一条记录p1->Next=NULL;//p1的成员Next指向空AddSort(p1);//调用公有成员函数,将p1重新按关键字排序}}void ShowAll() //显示全部结点,每10个显示一屏{Node *p=HeadPtr;//定义一个Node型指针p,初始化为首指针的值int i=1; //定义一个整型变量,计算现实的数据个数system("cls"); //清屏while(p) //当p不为空时,进行循环{ cout<<i<<'\t';p->Show(); //循环输出数据pp=p->Next; //将下一条记录的值赋给pif(!(i++%10)) //当i是10的倍数时,暂停程序并清屏{ system("pause");system("cls");}}}void SetT ag(int t) //重置T ag的值{T ag=t;}int GetT ag() //获取T ag的值{return(T ag);//返回T ag的值}int Count() //计算链表中有多少个结点{Node*p;//定义一个Node型指针pint t=0;//定义一个整型变量t,用来计算链表中结点的个数p=HeadPtr;//将首指针的值赋给pwhile(p->Next!=NULL)//当链表不为空时{t=t+1;//每当数据不为空时,t就加1p=p->Next;//p指向下一条记录}t=t+1; //因为当p->Next=NULL是就退出程序,所以末尾t要加1return t;//返回t}Node*GetHeadPtr()//获取链表首指针{return HeadPtr;//返回首指针}~AddressList() //析构函数,释放链表空间{ Node*p;//定义一个Node型的指针变量while(HeadPtr!=NULL)//链表不为空,进行循环{p=HeadPtr;//将第一条数据赋给pHeadPtr=HeadPtr->Next;//将下一条数据赋给首指针delete p;//释放p的空间}}#define Len sizeof(class Node)//定义常量Len为Node类数据的长度void CreateList(char*filename)//从二进制文件中读入数据,构造链表{Node*p[100];//定义一个有100个数据空间的指针数组int i=0,j=0;//定义两个整型变量,来记录第几条数据和读取数据的个数fstream file(filename,ios::in|ios::binary);//定义一个文件流对象if(!filename)//当文件为空时,无法打开{cout<<"不能打开文件:"<<filename<<endl;exit(1);}file.read((char*)&T ag,sizeof(int));//从文件中读取T agfile.read((char*)&j,sizeof(int));//从文件中读取数据的个数p[0]=new Node; //申请一个p的动态存储空间while(file.read((char*)p[i],Len)!=0)//从文件中读取Len长度的数据不为0{p[i+1]=new Node;AddSort(p[i+1]);//调用公有成员函数AddSort(),将文件中数据读取后,重新排序}file.close;//关闭文件}void WriteT oFile(char*filename)//将链表中的数据写入指定的二进制文件{Node*p;//定义一个Node型的指针变量p=HeadPtr;//将首指针的值赋给pfstream file(filename,ios::in|ios::binary);//定义一个文件流对象if(!filename)//当文件为空时,无法打开文件{cout<<"不能打开文件:"<<filename<<endl;exit(1);}while(p!=0)//当数据不为0时,将数据写入文件中{file.write((char*)p,Len);//将p写入文件中p=p->Next;}file.close;//关闭文件}void outtxt(char *file)//将数据从文件file导出{ Node *p=HeadPtr;//定义一个Node型指针变量,初始值为HeadPtr int n=1;//定义一个整型变量,作为数据的序号fstream out(file,ios::out);//以写入的方式打开正文文件if(!out)//定义一个输出文件流对象{ cout<<"不能打开该文件:"<<file<<endl;exit(1);}while(p){out<<n++<<'\t'<<(*p).Name<<'\t'<<(*p).OfficePhone<<'\t'<<(*p).HomePhone<<'\t'<<(* p).MobilePhone<<'\t'<<(*p).E_Mail<<endl;//按以上方式输出到文件中p=p->Next;}out.close();}};int menu_select() //菜单实现{char*a[]={"1.Add Record","2.Delete Record","3.Display All Record","4.Query","5.Modify Record","6.Add from a T ext File","7.Write to a T ext File","8.Sort","9.Delet All","0.Quit",NULL};//将菜单的选项赋给数组int i,choice;//定义两个整型变量,一个用于输出选项,一个用于选择,并调用相关函数do{system("cls");cout<<"\n\n========Address Book Managing Syetem========\n\n";for(i=0;a[i];i++)//循环输出选项cout<<a[i]<<endl;cout<<"\n================================================\n";cout<<"Input 1-9,0:";cin>>choice;//输入choice}while(choice<0||choice>9);//在0到9的菜单中做出选择return(choice);//返回所选的值}void add(AddressList&addrlist) //增加记录{Node *p[50];//一次需要输入的数据char n[100],m[100],o[100];//姓名,手机,电子邮箱int q,r;//办公和家庭电话int i,j;cout<<"请输入本次需要输入的数据的个数(0~100):";cin>>j;cout<<"请依次输入姓名、办公电话、家庭电话、手机号码和电子邮箱地址:";for(i=0;i<j;i++)//按所选个数输入数据{cin>>n>>q>>r>>m>>o;//输入数据的各个成员p[i]=new Node;//申请动态存储空间p[i]->SetName(n);//调用公用成员函数,修改姓名p[i]->SetOfficePhone(q);//调用公用成员函数,修改办公电话p[i]->SetHomePhone(r);//调用公用成员函数,修改家庭电话p[i]->SetMobilePhone(m);//调用公用成员函数,修改手机p[i]->SetE_Mail(o);//调用公用成员函数,修改电子邮箱addrlist.AddSort(p[i]);//调用公有函数AddSort()}} void del(AddressList&addrlist) //删除记录{Node *p;p=addrlist.GetHeadPtr();//调用GetHeadPtr()函数,获取首指针if(p==0) //当链表中没有数据时cout<<"无数据!"<<endl;else{char*n;n=new char;int s;cout<<"请输入要删除的记录的个数"<<endl;cin>>s;//输入需要删除的数据个数for(int i=0;i<s;i++){cout<<"请输入要删除的姓名"<<endl;cin>>n;//输入要删除的数据的姓名addrlist.Delete(n);//调用公有函数删除记录}} //删除多条记录}void showall(AddressList&addrlist)//显示所有记录{ Node *p;p=addrlist.GetHeadPtr();//调用GetHeadPtr()函数,获取首指针if(p==0)cout<<"无数据!"<<endl;elseaddrlist.ShowAll();//调用公有成员函数,显示所有记录}void query(AddressList&addrlist)//按姓名查找并显示一条记录{char*n;Node *p;p=addrlist.GetHeadPtr();//调用GetHeadPtr()函数,获取首指针if(p==0)//当链表中无数据时cout<<"无数据!"<<endl;else{Node*q;cout<<"请输入姓名:";n=new char;//为姓名申请动态存储空间cin>>n;//输入姓名q=addrlist.LookUp(n);//调用LookUp函数,查找该姓名对应的数据if(q!=0) q->Show();//调用函数Show,显示该条记录else cout<<"查无此人。

相关文档
最新文档