通讯录设计报告
- 格式:doc
- 大小:550.50 KB
- 文档页数:27
通讯录管理系统课程设计报告一、课程设计背景随着信息化时代的到来,通讯录管理系统已经成为了人们日常生活中必不可少的一部分。
在这个快节奏的社会中,人们需要随时随地地获取和管理自己的联系人信息。
因此,设计一个高效、方便、易用的通讯录管理系统就显得尤为重要。
二、需求分析1.功能需求(1)用户注册与登录:用户可以通过注册账号并登录到系统中。
(2)通讯录添加:用户可以添加联系人,包括姓名、电话号码、电子邮件等信息。
(3)通讯录查询:用户可以根据姓名或电话号码等信息查询特定联系人。
(4)通讯录修改:用户可以对已有联系人信息进行修改。
(5)通讯录删除:用户可以删除指定的联系人。
2.非功能需求(1)易用性:系统应该具有良好的界面设计和操作逻辑,使用户能够快速上手使用。
(2)安全性:系统应该具有安全防护措施,保护用户的数据不被非法获取或篡改。
(3)稳定性:系统应该具有高可靠性和稳定性,确保在任何情况下都能正常运行。
三、技术选型本次课程设计采用Java语言进行开发,使用MySQL数据库作为数据存储后端。
前端采用Java Swing框架进行设计,实现用户界面的构建和交互。
后端采用JDBC技术进行与数据库的交互。
四、系统设计1.系统架构本系统采用MVC(Model-View-Controller)架构模式,将业务逻辑、数据存储和用户界面分离开来,提高了代码的可维护性和可扩展性。
2.模块设计(1)用户管理模块:实现用户注册、登录等功能。
(2)通讯录管理模块:实现通讯录添加、查询、修改、删除等功能。
(3)数据存储模块:负责与数据库进行交互,实现数据的持久化存储。
五、系统实现1.前端实现本系统采用Java Swing框架进行开发,通过调用Swing组件库中的各种控件来构建用户界面。
其中包括登录窗口、注册窗口、主窗口等界面。
2.后端实现本系统采用JDBC技术进行与MySQL数据库的交互。
通过编写SQL语句来完成对数据库中表格的增删改查操作,并将结果返回给前端界面显示。
一.题目分析1.1数据库设计:建立通讯录管理系统的数据库,通讯录包括姓名、关系、手机号码、通信地址等。
1.2系统结构设计:利用模块化设计思想,将系统进行模块划分,并给出系统功能结构图。
1.3功能模块设计:(1)数据输入功能:可以增加记录。
(2)数据显示功能:可以显示每条记录。
(3)查询功能:可以按姓名查找通讯录信息。
(4)删除功能:可以按姓名删除通讯录信息。
(5)打印功能:可以打印个人通讯录信息二.设计过程通讯录的基本设计思想是通过对不同功能的窗体的调用,达到完成各种功能的目的,在不减少功能的前提下尽可能减少主窗体的繁琐,充分发挥VB的可视化功能和事件驱动功能。
系统结构图如下:图一通讯录查结构图图二个人信息结构图图三通信录功能结构图数据库设计:数据库设计的任务是确定系统所需的数据库。
数据库是表的集合,通常一个系统只需一个数据库。
设计的任务是根据需求分析,确定数据库所包含的表及字段、表间的关系,然后具体确定表的结构,包括字段名、字段类型及宽度,需要的索引等。
根据对需求得到的数据结构进行分析,按数据输入输出的要求,确定表和表间的关系,并进行验证、调整、修改、完善,使其能够实现用户对数据和功能的要求。
、根据分析确定系统要设置如下表:通讯信息表,包括以下字段:姓名、关系、手机号码、通讯地址等。
通讯信息表字段名类型宽度小数位数姓名字符型10关系字符型10手机号码字符型14通讯地址字符型20表一通讯信息表通讯信息功能:实现功能:添加、修改、删除、查看个人信息数据。
实现过程:可采用表单向导制作针对个人档案表数据维护的表单。
图四Visual Basic设计界面三.调试过程1.由于不小心将语句For n = 1 to 记录数书写成For n = 1 记录数(漏掉了to)提示了如下界面2.在用VB是常出现下面的界面,再通过了解之后发现是由于被删除产生的。
提示了如下界面3.在这个语句编写的过够中由于一开始没有If,导致了错误。
数据结构课程设计报告---通讯录## 一、项目背景随着信息科技的发展,现代社会通讯录的应用越来越普遍,满足了人们信息的获取和管理的需求。
本项目的设计目的在于使用面向对象的程序思想,以面向对象的方式它来实现对通讯录信息的管理,进而提高信息的管理效率,提升信息的可靠性和安全性,最终达到为社会实施科学管理的目的。
## 二、系统需求1. 界面美观、格式明确,有良好的友好提示。
2. 系统稳定性强,能承受短时间的高并发量使用。
3. 提供友好的系统操作界面,对用户操作进行一定的约束,方便用户操作。
4.提供有效的联系人信息管理功能,能够实现增删改查等操作。
5.支持联系人信息备份和恢复,以及密码设置。
6.能够防止任何人未经授权而访问系统,或者磁盘信息的泄露。
此系统的设计主要分为三大部分,即界面层、业务逻辑层和数据存储层。
界面层通过展示信息给用户,实现数据的输入及输出;业务逻辑层主要处理用户请求,实现对数据的操作;数据存储层通过文件存储数据,实现对联系人信息的永久保存。
本项目采用C++语言,以链表数据结构为基础,将用户的联系人存储在链表中,充分利用其动态性,实现联系人的增删改查操作.同时,为了提供更进一步的使用,增加了密码功能,对未授权访问进行防止,以及数据备份和恢复功能。
## 四、功能实现1. 界面设计:首先,根据系统所需要的功能,采用控制台方式,以文字提示形式,配以整齐美观的各项参数和信息,实现各项功能。
2. 加密控制:本系统实现授权登陆加密功能,使系统对未经授权的用户隐藏信息,以确保系统的安全性。
3. 测试功能:功能的测试旨在确保程序的完整性和正确性。
4. 管理功能:本系统实现联系人信息的增删改查操作,在这几项功能的实现过程中,使用链表数据结构,更好的实现程序的功能。
5. 修改密码功能:此功能实现用户可以修改自己的密码,以确保用户自己可以比较安全的使用系统,不会受到他人的侵犯。
6. 加载和存储数据:通过使用文件存储,实现数据的存储和读取,以及备份功能,实现对数据永久保存。
通讯录管理系统设计报告一、引言通讯录在日常生活中扮演着重要的角色,用来存储和管理各种联系人信息,方便人们随时找到需要联系的人或组织。
随着移动互联网的普及,通讯录的管理变得更加便捷和高效。
为了提高通讯录的管理效率,我们设计并开发了一款通讯录管理系统。
二、系统概述通讯录管理系统是一个基于Web的应用程序,用户可以通过浏览器访问系统,进行通讯录的管理操作。
系统主要包括以下功能:•用户登录与注册:用户可以注册新账号,并通过账号密码登录系统。
•联系人管理:用户可以添加、编辑、删除联系人信息,包括姓名、电话号码、邮箱等。
•分组管理:用户可以创建分组并将联系人归类到不同分组。
•搜索功能:用户可以通过关键词搜索联系人信息。
•导出和导入功能:用户可以将联系人信息导出为Excel表格,并可以通过Excel文件导入联系人到系统中。
三、系统架构通讯录管理系统采用了前后端分离的架构,前端使用Vue.js框架开发,提供友好的用户界面;后端使用Node.js和Express框架搭建RESTful API,负责数据的存储和管理。
系统中的数据存储在MySQL数据库中,用户的密码使用bcrypt进行加密存储,确保用户信息的安全性。
同时,系统对用户权限进行了细致管理,保障用户在系统中的数据安全。
四、系统界面系统的界面设计简洁直观,用户可以轻松进行操作。
主要包括登录页面、通讯录首页、联系人管理页面、分组管理页面等。
用户登录页面:[登录页面截图]通讯录首页:[通讯录首页截图]联系人管理页面:[联系人管理页面截图]五、系统特色•简洁高效:系统操作简单直观,提供了快速的联系人管理功能。
•个性化定制:用户可以根据自己的需求创建分组,快速查找联系人。
•数据安全:采用了加密技术和权限管理,确保用户数据的安全性。
•导入导出功能:支持Excel文件导入导出,方便用户管理大批量联系人信息。
六、未来展望通讯录管理系统将继续进行优化和迭代,引入更多智能化功能,如联系人推荐、消息提醒等,提升用户体验。
通讯录管理系统课程设计报告系统存储结构一、引言通讯录管理系统是一种方便快捷地存储和管理联系人信息的应用程序。
在该系统中,数据的存储结构至关重要,它直接关系到系统的性能和稳定性。
本文将介绍通讯录管理系统的系统存储结构设计,包括数据的组织方式、存储介质选择等内容。
二、存储结构设计1. 数据的组织方式在通讯录管理系统中,联系人信息是系统中最主要的数据之一。
为了高效地存储和管理这些信息,我们选择采用数据库的方式进行组织。
数据库将联系人信息按照一定的结构进行组织和存储,方便系统对数据的检索和更新。
2. 数据库的选择在选择数据库时,我们考虑到系统的使用特点和性能要求,最终选择了关系型数据库。
关系型数据库具有良好的数据一致性和完整性,能够满足系统的数据管理需求。
同时,支持 SQL 查询语言的特性也使得对数据进行灵活的操作成为可能。
3. 数据表设计在关系型数据库中,数据是以表的形式进行存储的。
针对通讯录管理系统的需求,我们设计了以下几张表:•用户表:用于存储系统的用户信息,包括用户名、密码等;•联系人表:用于存储用户的联系人信息,包括姓名、电话号码、邮箱地址等;•分组表:用于将联系人进行分类管理,方便用户对联系人信息进行组织。
每张表之间通过外键进行关联,确保数据的一致性和完整性。
三、存储介质选择除了数据库存储外,系统还需要选择适当的存储介质来保存一些系统配置信息和用户的登录状态等数据。
我们选择了文件系统作为存储介质,将这些数据以文件的形式进行存储。
四、存储结构的优化为了提高系统的性能和响应速度,我们对存储结构进行了一定的优化。
主要包括以下几点:•索引设计:对关键字段建立索引,加快检索速度;•归档策略:定期对系统中的数据进行归档,减少存储空间的占用;•缓存机制:使用缓存技术对频繁访问的数据进行缓存,减少数据库访问的频率。
五、总结系统存储结构的设计对于通讯录管理系统的性能和稳定性具有重要影响。
通过合理选择数据库和存储介质,并对存储结构进行优化,可以有效提高系统的用户体验和响应速度。
通讯录管理系统课程设计报告一、引言通讯录管理系统是一种用于存储和管理联系人信息的应用程序,它可以帮助用户方便地记录和查找各种联系人信息。
在本课程设计报告中,我们将讨论通讯录管理系统的设计和实现过程,以及系统的功能特点和操作流程。
二、需求分析通讯录管理系统需要具备以下基本功能: 1. 添加联系人信息:用户可以输入姓名、电话号码、电子邮件地址等信息来添加新的联系人。
2. 查找联系人信息:用户可以通过姓名或电话号码等关键词来查找已添加的联系人信息。
3. 修改联系人信息:用户可以对已有联系人信息进行修改和更新。
4. 删除联系人信息:用户可以选择删除不需要的联系人信息。
5. 显示所有联系人信息:系统可以按照一定的格式将所有联系人信息展示给用户。
三、系统设计1. 数据结构为了存储联系人信息,我们可以使用一个包含姓名、电话号码、电子邮件地址等字段的结构体来表示每个联系人。
可以使用链表或数组来组织所有联系人信息。
2. 模块设计通讯录管理系统可以划分为以下几个模块: - 添加联系人模块:实现添加新联系人信息的功能。
- 查找联系人模块:实现根据关键词查找联系人信息的功能。
- 修改联系人模块:实现对已有联系人信息进行修改和更新的功能。
- 删除联系人模块:实现删除不需要的联系人信息的功能。
- 显示联系人模块:实现将所有联系人信息按照一定格式展示给用户的功能。
3. 用户界面设计用户界面应该简洁明了,包括各个功能的按钮或选项,以及输入框和显示信息的区域。
用户应该能够方便地进行各种操作和查看联系人信息。
四、系统实现1. 数据存储可以使用文件来存储联系人信息,也可以使用数据库来进行数据持久化。
2. 界面实现可以使用图形界面或命令行界面来实现用户交互功能,不同的界面设计会影响用户体验。
3. 功能实现根据需求分析中的功能,实现各个模块的功能代码,确保系统可以正确地完成相关操作。
五、功能测试在系统实现完毕后,需要进行功能测试,确保系统的各个功能都能正常运行,并且符合需求。
c通讯录课程设计报告一、课程目标本通讯录课程设计旨在通过实践活动,使学生在信息技术学科的基础上,掌握以下知识目标、技能目标和情感态度价值观目标:1. 知识目标:- 了解通讯录的基本概念、功能及在实际生活中的应用。
- 掌握通讯录的录入、修改、删除、查询等基本操作。
- 了解如何对通讯录进行分类、排序和筛选,以便快速查找和整理信息。
2. 技能目标:- 学会使用电子表格软件(如Microsoft Excel)创建、编辑和管理通讯录。
- 能够运用所学知识,设计并优化个人或团队的通讯录,提高信息处理效率。
- 培养学生的团队协作能力,通过小组讨论和分享,提高问题解决和沟通表达能力。
3. 情感态度价值观目标:- 培养学生珍惜个人信息,尊重他人隐私的观念。
- 增强学生的信息素养,认识到信息技术在生活中的重要性,激发对信息技术的学习兴趣。
- 通过对通讯录的学习和实际操作,培养学生的责任心和细致严谨的工作态度。
课程性质:本课程为实践性较强的信息技术课程,结合学生年级特点和教学要求,注重培养学生的动手操作能力和团队协作能力。
学生特点:考虑到学生所在年级,他们在信息技术方面已具备一定的基础,对新鲜事物充满好奇心,善于合作学习。
教学要求:结合课程目标和学科特点,教师应注重实践操作,引导学生主动探索、积极思考,将所学知识应用于实际生活中,达到学以致用的目的。
在教学过程中,教师需关注学生的学习进度,及时调整教学策略,确保课程目标的实现。
通过本课程的学习,使学生能够熟练掌握通讯录的制作和管理,提高个人信息素养。
二、教学内容根据课程目标,本章节教学内容围绕通讯录的制作和管理展开,确保内容的科学性和系统性。
以下是详细的教学大纲及教材关联内容:1. 通讯录概述- 介绍通讯录的定义、功能及应用场景。
- 教材章节:第一章 信息技术与日常生活。
2. 通讯录的基本操作- 学习通讯录的录入、修改、删除、查询等操作。
- 教材章节:第二章 电子表格软件的基本操作。
通讯录管理系统课程设计报告总结一、引言通讯录管理系统作为一种常见的信息管理工具,在日常生活中发挥着重要作用,能够帮助人们方便地管理和查找联系人信息。
本次课程设计旨在设计和实现一个简单的通讯录管理系统,运用所学的软件开发技术和方法,提升学生的实际项目开发能力。
二、需求分析本系统主要包括以下功能模块: 1. 用户登录和注册:用户可以通过用户名和密码登录系统,也可以注册新用户; 2. 通讯录管理:用户可以添加、删除、修改联系人信息,并可以按照姓名、电话号码等字段进行排序和搜索; 3. 导入和导出:用户可以将通讯录数据导出到文件中,也可以从文件中导入数据; 4. 权限管理:管理员可以对用户进行管理,设定不同用户的权限和角色。
三、设计与实现本系统采用Python语言进行开发,使用了Django框架进行Web应用的搭建,并结合SQLite数据库实现数据的存储和管理。
系统的前端页面采用HTML、CSS和JavaScript进行设计,实现了用户友好的界面交互。
在系统的设计过程中,我们遵循了软件工程的相关原则和方法,包括需求分析、概要设计、详细设计、编码和测试等阶段。
通过团队合作,我们按照功能模块分工合作,每位成员负责不同的部分,最终将各部分整合在一起进行测试和优化。
四、测试与优化在系统开发过程中,我们进行了严格的测试工作,包括单元测试、集成测试和系统测试等,确保系统的功能正常运行和性能优秀。
在测试过程中,我们发现了一些问题并对其进行了优化,提高了系统的稳定性和用户体验。
五、总结与展望通过本次通讯录管理系统课程设计,我们深入了解了软件开发的整个流程,提升了团队协作能力和项目管理能力。
在未来的学习和工作中,我们将继续探索软件开发领域,不断提高自己的技术水平,为社会和行业做出更多贡献。
以上是本次通讯录管理系统课程设计的报告总结,希望能够对读者有所启发和帮助。
感谢大家的支持与关注!。
课程设计报告:Java通讯录一、引言本次课程设计是关于Java通讯录的开发,旨在让我们更深入地理解Java编程语言在现实生活中的应用。
通讯录是一种常见的应用程序,它可以帮助我们管理联系人信息,方便我们与朋友和家人保持联系。
二、需求分析本次课程设计的目标是根据用户需求,设计并实现一个功能齐全的Java通讯录应用程序。
具体需求如下:用户可以添加联系人信息,包括姓名、电话号码、电子邮件地址等。
用户可以删除联系人信息。
用户可以编辑联系人信息。
用户可以按姓名、电话号码或电子邮件地址搜索联系人信息。
用户可以查看所有联系人信息。
三、设计数据库设计为了存储联系人信息,我们选择使用Java内置的ArrayList类作为数据库。
ArrayList是一个动态数组,可以根据需要自动增长。
我们将使用ArrayList的add()方法添加联系人信息,使用get()方法获取联系人信息,使用remove()方法删除联系人信息。
界面设计我们使用Java Swing库来创建用户界面。
界面包括以下组件:JLabel:显示提示信息和标题。
JTextField:用于输入和编辑联系人信息。
JButton:用于触发添加、删除、编辑和搜索等操作。
JTable:用于显示所有联系人信息。
JComboBox:用于选择搜索条件。
四、实现添加联系人信息当用户点击“添加”按钮时,程序会创建一个新的联系人对象,并将用户输入的信息设置到该对象中。
然后,程序将该对象添加到ArrayList中。
删除联系人信息当用户选择要删除的联系人并点击“删除”按钮时,程序会从ArrayList中删除该联系人对象。
编辑联系人信息当用户选择要编辑的联系人并点击“编辑”按钮时,程序会将该联系人的信息显示在文本框中,以便用户进行修改。
修改完成后,程序会将修改后的信息保存到ArrayList中。
搜索联系人信息当用户选择搜索条件并输入搜索关键字时,程序会在ArrayList 中查找符合条件的联系人对象,并将其显示在表格中。
通讯录c 课程设计报告一、课程目标本课程为六年级信息技术学科“通讯录C”课程设计,旨在通过实践操作,使学生在知识、技能及情感态度价值观方面取得以下目标:1. 知识目标:(1)掌握通讯录的基本概念及作用;(2)学会使用电子表格软件(如Microsoft Excel)创建、编辑和保存通讯录;(3)了解通讯录信息分类和排序的方法。
2. 技能目标:(1)能够独立完成通讯录的创建、编辑和保存操作;(2)能够运用电子表格软件对通讯录进行信息分类和排序;(3)学会在电子表格中插入公式,实现通讯录信息的自动计算。
3. 情感态度价值观目标:(1)培养学生对信息技术的兴趣和热情,提高信息素养;(2)培养学生团队协作精神,学会在小组合作中共同解决问题;(3)引导学生认识到信息保护的重要性,养成信息安全意识。
本课程结合六年级学生的认知特点,注重实践操作,将知识目标、技能目标和情感态度价值观目标融入教学过程中,使学生能够在轻松愉快的氛围中学习信息技术,提高综合运用能力。
同时,课程目标具体、可衡量,便于教学设计和评估。
二、教学内容本章节教学内容依据课程目标,结合教材第四章“电子表格与数据处理”内容,具体安排如下:1. 通讯录基本概念与作用:介绍通讯录的定义、功能及在日常生活和工作中重要性。
2. 电子表格软件操作:(1)认识Microsoft Excel界面,学会基本操作;(2)创建新工作簿,编辑单元格内容;(3)保存和打开工作簿。
3. 通讯录创建与编辑:(1)设计通讯录表格结构;(2)录入联系人信息;(3)调整单元格格式,美化通讯录。
4. 通讯录信息处理:(1)运用公式进行信息统计;(2)使用排序和筛选功能,快速查找联系人;(3)分类汇总联系人信息。
5. 通讯录保护与分享:(1)设置密码保护通讯录;(2)导出和分享通讯录。
教学进度安排:共计4课时,分别为:1. 第1课时:通讯录基本概念与作用、电子表格软件认识;2. 第2课时:创建与编辑通讯录;3. 第3课时:通讯录信息处理;4. 第4课时:通讯录保护与分享。
C程序设计报告系(部、中心)姓名学号专业班级课程名称设计题目名称起止时间成绩指导教师签名目录第1章题目与要求 (3)1.1 基本要求(及格 (3)1.2 高级要求(加分)... (3)第2章用户需求分析 (3)2.1 功能需求 (3)第3章设计方案 (3)3.1设计思路 (3)3.2功能设计 (3)第4章实施方案 (4)第5章软件调试 (5)5.1 错误介绍 (5)5.2 错误分析及解决方案 (5)第6章程序流程图及结构说明 (6)第7章程序清单 (7)第8章效果展示 (18)第1章题目与要求本次程序设计实践的题目是《通信录管理系统的设计》。
1.1基本要求(及格)(1)使用C语言,设计一个字符界面并带有菜单的通信录管理系统,每个记录中应包含:姓名、性别、年龄、联系电话、电子邮箱等项目。
(2)最大记录数:100。
(3)程序基本功能:显示记录、添加记录、删除记录。
1.2高级要求(加分)(1)以多文件方式设计该程序。
(2)对程序中的数据类型进行自定义(为方便程序的阅读和管理,定义自己的类型名)。
(3)能将该通讯录制作成文件保存于磁盘。
第2章用户需求分析2.1 功能需求通过《程序设计实践I(能源11-12)》指导书中的相关要求,以及参考程序流程图的基本程序的框架,同时用户需求的基本功能,要求系统需要有以下功能:(1)有菜单选择界面;(2)联系人信息修改简单方便,支持多种方式的修改;(3)方便的联系人信息查询,支持多种方式的查询;(4)联系人信息查看功能能供用户详细的查看;(5)退出时若用户更改了联系人相关信息或添加、删除联系人时,会提示用户联系人信息已更改是否保存;(8)有动态的开始界面。
第3章设计方案3.1 设计思路为了更好地实现上述内容,此程序采用了结构体、链表,来处理联系人的数据。
结构体能够包含联系人的各项信息,如姓名、家庭地址、电话号码等,克服了数组只能包含同种类型的数据的缺点。
链表数据的存放不需要连续的内存,相对于结构体数组减少了内存空间的浪费。
利用fopen等函数创建文件、保存文件数据等,实现退出程序后联系人的数据能够保存,方便以后的查看、添加、修改等动作。
采取多文件的方式,能够更好地对程序进行维护调试。
3.2 功能设计本程序一共有13个子文件,共11个模块,有实现9项功能。
(1)创建联系人列表模块能够建立新的文件,实现联系人的分类存放,方便用户的对联系人的管理。
(2)添加功能能够打开已有的文件,用户需选择添加的联系人所在的文件,事先联系人的分类存放,方便以后的查看修改等操作。
添加完成后,程序将自动的进行排序操作。
(3)删除联系人选择此功能后,用户需要选择要删除联系人所在文件,再行删除。
提醒用户是否保存设置。
(4)修改联系人信息选择此功能后,用户需要选择要删除联系人所在文件,再进行各项修改。
提示用户是否保存修改。
(5)查询联系人信息用户选择了打开的文件后,可以按照姓名、手机号等对联系人进行查找。
然后打印在屏幕上。
(6)查看联系人列表用户只需选择要查看的联系人所在的文件。
系统将自动将此文件中的所有所有人打印在屏幕上。
(7)删除文件(8)退出系统第4章实施方案(1)数据结构采用链表,定义如下结构体用来建立节点:typedef struct LinkPerson{char name[20],mobile[15];char home_ph[15],E_mail[40],work_units[40];char qq[11];struct LinkPerson *next;}LP;将此结构体的typedef式的名字是LP。
next是是结构体指针,用来指向下一节点,保证链表的连续性,最后一个节点的next=NULL,作为链表的结束标志。
(2)建立链表部分代码如下:里面的所有变量已经在函数中声明while(1){n++;if(n==1) head->next=p1;else p2->next=p1;p2=p1;p1=(struct LinkPerson *)malloc(LEN);printf("姓名\n");scanf("%s",p1->name);if(strcmp(p1->name,"0")==0)break;printf("手机号\n");scanf("%s",p1->mobile);printf("家庭电话\n");scanf("%s",p1->home_ph);printf("电子邮箱\n");scanf("%s",p1->E_mail);printf("班级\n");scanf("%s",p1->work_units);printf("QQ\n");scanf("%s",p1->qq);}free(p1);当用户输入的姓名为0,程序会退出链表的创建。
循环对出后,p1->next=NULL;将最后一个节点指向空(NULL),(3)文件操作本程序对文件进行的主要操作有打开、关闭、顺序读写操作。
采用fopen函数打开文件,打开方式采用了w+、r、r+,当文件不存在时采取w+方式打开能够创建一个新的文本,r用来打开已经存在的文件,当文本不存在时将对出系统。
(4)通过对以上介绍的算法的不同组合完成了整个程序的需要的函数creat()、read ()add()等。
(5)函数的衔接各个功能函数之间的衔接主要通过函数的返回值以及函数的参数。
例如完成创建功能时,第一步调用函数creat()时会产生一个结构体指针指向结构体的头,第二部在调用save ()函数时将利用creat产生的返回值完成文件的创建以及数据的保存。
其他的功能亦如此。
第5章软件的调试5.1 错误介绍(1)变量重复定义。
(2)无法统计人数,统计人数超过实际人数。
(3)进行某项功能时,出现提示,点击确定后,软件退出运行。
(4)输出联系人列表时,屏幕上出现乱码。
5.2错误分析及解决方案(1)在本程序中有全局变量n用来统计人数,当n出现问题后将不能完成统计以及排序工作,n 在编译链接时系统提示重复定义,经过查找资料后,修改的方案是,将n 的定义有在头文件中的static n 改在main.c 中 int c ;在其他文件中用extern n ;声明。
统计人数超过实际人数,经分析是read 函数里没有将n 归0,导致再次调用时又在原来的基础上操作。
(2)出现错误3的原因 在于某个函数出现死循环,经查找是由于save 函数将数据写入文件时,循环条件的不合适导致了,死循环才会出现此错误。
如果输入文件名错误时有可能导致软件自动退出,但不会出现提示。
(3)出现错误4 有两种可能。
第一种是没有文件中没有存入数据。
第二种是读数据的方式为w+导致文件重建,将原先的数据丢失。
第6章 程序流程图及结构说明6.1 程序流程图分析根据《程序设计实践I (能源11-12)》指导书中的相关要求,以及参考程序流程图的基本程序的框架,同时由我用C 设计的通讯录管理系统的功能和相关的界面,我将我的通讯录管理系统设计如图一的程序流程图。
图一第7章程序清单(1)主函数/***********ton.c******************/#include "main.h"char selete[10];int n=0;//统计联系人的个数void main(){ int sele=0;system("color 4F");printf("请耐心等待!!");load();while(1){printf("\n \2\1\t\t\t 欢迎使用通讯录管理系统\n\n");printf("\n 1.新建联系人列表2.添加联系人 3.删除 4.修改 5.查询 6.输出联系人的信息7.删除文件\n8.退出9.paixu\n请输入选择:");scanf("%d",&sele);switch(sele){case 1:{head=creat();save(head);break;}case 2:{head=add();save(head);break;}case 3:{system("cls"); head=del();save(head);break;}case 4:{system("cls");head=modify();save(head);break;}case 5:{system("cls");find();break;}case 6:{ print();break;}case 7:{delfile();break;}case 8:{exit(0);break;}case 9:{head=read();head=array(head);save(head);break;}}}}(2)子函数/***********add.c****************/#include "main.h"LP *add(void) //函数功能:增加联系人信息{LP *head,*p1,*p2;extern n;head=p2=read();while(p2->next!=NULL) //找到原先数据的终点,作为新增数据的起点 {p2=p2->next;}p1=(LP *)malloc(LEN);printf("请输入增加联系人的信息:\n");printf("姓名\n");scanf("%s",p1->name);//if(strcmp(p1->name,"0")==0)// break;printf("手机号\n");scanf("%s",p1->mobile);printf("家庭电话\n");scanf("%s",p1->home_ph);printf("电子邮箱\n");scanf("%s",p1->E_mail);printf("班级\n");scanf("%s",p1->work_units);printf("QQ\n");scanf("%s",p1->qq);// FORMAT;while(1){n++;if(n==1) head->next=p1;else p2->next=p1;p2=p1;p1=(struct LinkPerson *)malloc(LEN);printf("姓名\n");scanf("%s",p1->name);if(strcmp(p1->name,"0")==0)break;printf("手机号\n");scanf("%s",p1->mobile);printf("家庭电话\n");scanf("%s",p1->home_ph);printf("电子邮箱\n");scanf("%s",p1->E_mail);printf("班级\n");scanf("%s",p1->work_units);printf("QQ\n");scanf("%s",p1->qq);//scanf("%s%s%s%s%s%s%s%s%s",p1->name,p1->mobile,p1->office_ ph,p1->home_ph,p1->E_mail,p1->in_cities,p1->work_units,p1->address,p1->group);}p2->next=NULL;free(p1);p1=NULL;head=array(head);return (head);}/***********array.c*****************/#include "main.h"LP *array(LP *head) //函数功能:排序{ extern n;int i,j;LP *p0,*p1,*p2,*h;h=p1=p2=head;if(n<=1) return(h);for(i=0; i<n-1; i++){p1=p2=h;for(j=0; j<n-i-1; j++){p2=p1->next;if((p1==h) && strcmp(p1->name,p2->name)>0 ){h=p2;p1->next=p2->next;p2->next=p1;p0=p2;}else if( strcmp(p1->name,p2->name)>0 ){p0->next=p2;p1->next=p2->next;p2->next=p1;p0=p2;}else { p0=p1; p1=p2; p2=p2->next; }}}return(h);}/**********creat.c**************/#include"main.h"LP creat() //创建{int m=0;LP *head,*p1,*p2;printf("\n请输入通讯录联系人信息:\n\n");p2=p1=head=(struct LinkPerson *)malloc(LEN); p1->next=NULL;printf("姓名\n");scanf("%s",p1->name);printf("手机号\n");scanf("%s",p1->mobile);printf("家庭电话\n");scanf("%s",p1->home_ph);printf("电子邮箱\n");scanf("%s",p1->E_mail);printf("班级\n");scanf("%s",p1->work_units);printf("QQ\n");scanf("%s",p1->qq);while(1){m++;if(m==1) head=p1;elsep1->next=p2;p1=p2;p2=(struct LinkPerson *)malloc(LEN) ;printf("姓名\n");scanf("%s",p2->name);if(strcmp(p2->name,"0")==0)break;printf("手机号\n");scanf("%s",p2->mobile);printf("家庭电话\n");scanf("%s",p2->home_ph);printf("电子邮箱\n");scanf("%s",p2->E_mail);printf("班级\n");scanf("%s",p2->work_units);printf("QQ\n");scanf("%s",p2->qq);}p1->next=NULL;free(p2);n=m;head=array(head);return head;}/*************del.c*******************/#include "main.h"LP *del(void) //函数功能:删除信息{;char [20];LP *head,*p1,*p2;start_del:p1=p2=head=read();printf("请输入要删除的联系人姓名: ");scanf("%s",name);while( strcmp(p1->name,name)!=0 && (p1->next!=NULL) ){ p2=p1; p1=p1->next; } //找出p1指向的节点if( strcmp(p1->name,name)==0){if(p1==head) head=p1->next;elsep2->next=p1->next;printf("del: %s\n",name);free(p1);n--;printf("还有联系人%d位\n",n);}elseprintf("没有你要删除的联系人!\n");printf("\n是否继续进行删除操作? 1.是2.返回主菜单3.退出4.是否保存设置y\\n \n请输入:");scanf("%s",selete);if( strcmp(selete,"1")==0 ) goto start_del;else if( strcmp(selete,"2")==0 ) return 0;else if( strcmp(selete,"n")==0 ) return 0;else if( strcmp(selete,"3")==0 ) exit(0);else if( strcmp(selete,"y")==0 ) return head;else return(head);}/*****shanchuwenjian******/void delfile(){char file[80];printf( " 输入要删除的文件名");scanf("%s",file);//gets(file);if (remove(file)==0)printf( "已删除:%s.\n ",file);elseprintf("无法删除文件,可能是文件不存在!!");}/**************find.c**************************/#include "main.h"int find() //函数功能:查找{char select[10],home_ph[15];char name[20],mobile[15];LP *p1,*p2,*head;start_f:p1=p2=head=read();printf("按下列选项查询联系人信息\n");printf(" 1.按姓名 2.按手机号码 3.家庭电话\n 请选择:");scanf("%s",select);if( strcmp(select,"1")==0 ){printf("请输入姓名:");scanf("%s",name);while( strcmp(p1->name,name)!=0 && (p1->next!=NULL) ){ p2=p1; p1=p1->next; } //找出p1指向的节点if( strcmp(p1->name,name)==0 ){FORMAT;printf("%s %s %s %s %s %s %s %s%s\n",p1->name,p1->mobile,p1->home_ph,p1->E_mail,p1->work_units,p1->qq);}else printf("没有要查找的联系人信息!!\n");}else if( strcmp(select,"2")==0 ){printf("请输入手机号码:");scanf("%s",mobile);while( strcmp(p1->mobile,mobile)!=0 && (p1->next!=NULL) ){ p2=p1; p1=p1->next; } //找出p1指向的节点if(strcmp(p1->mobile,mobile)==0){FORMAT;printf("%s %s %s %s %s %s %s %s%s\n",p1->name,p1->mobile,p1->home_ph,p1->E_mail,p1->work_units,p1->qq);}else printf("没有要查找的联系人信息!!\n");}else if( strcmp(select,"3")==0 ){int n_n=0;printf("请输入群组:");scanf("%s",home_ph);while( strcmp(p1->home_ph,home_ph)!=0 && (p1->next!=NULL) ) { p2=p1; p1=p1->next; } //找出p1指向的节点if(strcmp(p1->home_ph,home_ph)==0){FORMAT;printf("%s %s %s %s %s %s %s %s%s\n",p1->name,p1->mobile,p1->home_ph,p1->E_mail,p1->work_units,p1->qq);}else printf("没有要查找的联系人信息!!\n");}else { printf("\n请输入正确的选择!!\n"); goto start_f; }printf("\n 1.继续查找2.返回主菜单3.退出\n请选择:");scanf("%s",select);if( strcmp(select,"1")==0 ) goto start_f;else if( strcmp(select,"2")==0 ) return 0;else if( strcmp(select,"3")==0 ) exit(0);else return 0;}/********************load.c*********************/#include"main.h"#include "windows.h"char l[]="load.....";void load(){int i=0,a=0;while(i<3){system("cls");while(l[a]!='\0'){printf("%c",l[a]);a++;Sleep(50);}a=0;i++;Sleep(50);}system("cls");}/**************modify.c***************/#include "main.h"LP *modify() //函数功能:修改联系人信息{char name[20];int select;LP*p2,*head,*p1;start_mod:p1=p2=head=read();printf("请输入要修改的联系人姓名: ");scanf("%s",name);while( strcmp(p1->name,name)!=0 && (p1->next!=NULL) ) { p2=p1; p1=p1->next; } //找出p1指向的节点if( strcmp(p1->name,name)==0 ){printf("将要修改的联系人的信息\n");FORMAT;printf("%s %s %s %s %s %s\n",p1->name,p1->mobile,p1->home_ph,p1->E_mail,p1->work_units,p1->qq);printf("请输入要修改的选项\n");printf(" 1.姓名\t 2.手机\t 3.家庭电话\t 4.电子邮箱\n 5.班级\t6.QQ\n请输入:");scanf("%d",&select);printf("请输入该项新的信息:");if(select==1) { scanf("%s", p1->name); }if(select==2) { scanf("%s",p1->mobile); }//if(select==3) { scanf("%s",p1->office_ph); }if(select==3) { scanf("%s",p1->home_ph); }if(select==4) { scanf("%s",p1->E_mail); }//if(select==6) { scanf("%s",p1->in_cities); }if(select==5) { scanf("%s",p1->work_units); }if(select==6) { scanf("%s",p1->qq); }//if(select==9) { scanf("%s",p1->group); }///save(head);}else { printf("\n没有该联系人,请重新输入!\n\n"); goto start_mod;}printf("\n是否继续进行修改操作? 1.是2.返回主菜单3.退出4.是否保存y\n \n请输入:");scanf("%s",selete);if( strcmp(selete,"1")==0 ) goto start_mod;else if( strcmp(selete,"2")==0 ) return 0;else if( strcmp(selete,"3")==0 ) exit(0);else if( strcmp(selete,"n")==0 ) return 0;else if( strcmp(selete,"y")==0 ) return head;}/***********print.c*************/#include"main.h"void print() //函数功能:输出信息{LP *p1,*head;extern n;p1=head=read();printf("共有联系人%d 名\n\n",n);FORMAT;if(head!=NULL)do{printf("\n%s %s %s %s %s%s\n",p1->name,p1->mobile,p1->home_ph,p1->E_mail,p1->work_units,p1->qq);p1=p1->next;}while(p1!=NULL);}/******************reead.c******************/#include"main.h"LP *read(void) //函数功能:读取文件{FILE *fp;LP *head=NULL, *p1=NULL, *p2=NULL;int m=0;extern n;n=0;printf("请输入要打开的文件");scanf("%s",infile);if ((fp=fopen(infile, "r"))==NULL){ printf("Can not open this file!\n"); exit(0); }while(!feof(fp)){p1=(LP *)malloc(LEN);fscanf(fp,"%s%s%s%s%s%s\n",p1->name,p1->mobile,p1->home_ph,p1->E_mail,p1->work _units,p1->qq);m+=1;n++;if(m==1) head=p1;else p2->next=p1;p2=p1;}p2->next=NULL;fclose(fp);return head;}/***********save.c**************/#include "main.h "void save(LP *head) //函数功能:保存文件{FILE *out;LP *p1=head;char outfile[30];printf("请输入要保存的文件!\n");scanf("%s",outfile);out=fopen(outfile, "w+");if (out==NULL){ printf("Can not open this file!\n"); exit(0); }fclose(out);if ((out=fopen(outfile, "r+"))==NULL){ printf("Can not open this file!\n"); exit(0); }while(p1!=NULL){fprintf(out,"%s\t%s\t%s\t%s\t%s\t%s\n",p1->name,p1->mobile,p1->home_ph,p1->E_mail,p1 ->work_units,p1->qq);p1=p1->next;}fclose(out);}头文件/***********main.h**************/#ifndef _MIAN_H_#define _MIAN_H_#include "stdio.h"#include "stdlib.h"#include "string.h"//#include "conio.h"#define LEN sizeof(struct LinkPerson)#define FORMAT printf("姓名手机家庭电话电子邮箱班级QQ") //int n=0;//统计联系人的个数static char infile[30];extern char selete[10];//姓名、手机、办公电话、家庭电话、电子邮箱、所在省市、工作单位、家庭住址,群组分类(亲属、同事、同学、朋友、其他)typedef struct LinkPerson{char name[20],mobile[15];char home_ph[15],E_mail[40],work_units[40];char qq[11];struct LinkPerson *next;}LP;LP *head;void print();LP *creat() ;void save(LP *head); //函数功能:保存文件LP *read(void); //函数功能:读取文件LP *array(LP *head); //函数功能:排序void print(); //函数功能:输出信息LP *add(void); //函数功能:增加联系人信息LP *del(void); //函数功能:删除信息LP *modify(); //函数功能:修改联系人信息int find(); //函数功能:查找void load();void delfile();#endif第8章效果展示图2 动画启动界面程序运行界面图3 功能列表功能1新建联系人列表图4 功能2添加联系人功能3 删除联系人图6图7功能4修改图8 功能5 查询功能能实现多种方式查询图9 功能6 输出联系人图10功能7 删除文件图11 204未删除图12功能9 退出系统。