班级通讯录管理系统课程设计分析报告
通讯录管理系统c语言课程设计报告课题简介

通讯录管理系统C语言课程设计报告
一、课题简介
通讯录管理系统是一种常见的应用程序,旨在帮助用户组织和管理他们的联系人信息。
本课程设计将利用C语言来实现一个基本的通讯录管理系统,旨在帮助学生掌握C语言编程的基本知识和技能。
二、设计目的
1.帮助学生熟悉C语言的基本语法和编程逻辑;
2.提高学生对数据结构的理解和运用能力;
3.培养学生的编程能力和软件开发思维;
4.提高学生的团队合作和项目管理能力。
三、设计内容
本课程设计将围绕以下几个方面展开:
1.用户界面设计:设计一个简洁直观的用户界面,包括菜单选项、输
入输出界面等;
2.数据结构设计:设计通讯录数据结构,包括联系人姓名、电话号码
等信息的存储方式;
3.功能实现:实现通讯录管理系统的基本功能,包括添加联系人、删
除联系人、查找联系人等操作;
4.文件操作:实现通讯录数据的读写操作,将联系人信息保存到文件
中,以便下次运行时读取;
5.错误处理:处理用户输入错误等异常情况,保证程序的稳定性和可
靠性。
四、预期效果
通过本课程设计,学生将能够掌握以下技能:
1.掌握C语言基本语法和编程逻辑;
2.熟悉数据结构的设计和运用;
3.提高编程能力和软件开发思维;
4.培养团队合作和项目管理能力。
五、总结
通过设计一个通讯录管理系统的C语言课程项目,学生将在实践中加深对C语言的理解和应用,提高编程技能和解决问题的能力。
希望本课程设计能够为学生的编程学习提供一定的帮助和指导。
以上为《通讯录管理系统C语言课程设计报告》的简要介绋,希望能够为课程设计的顺利进行提供一定的参考和指引。
通讯录管理系统课程设计报告

通讯录管理系统课程设计报告一、课程设计背景随着信息化时代的到来,通讯录管理系统已经成为了人们日常生活中必不可少的一部分。
在这个快节奏的社会中,人们需要随时随地地获取和管理自己的联系人信息。
因此,设计一个高效、方便、易用的通讯录管理系统就显得尤为重要。
二、需求分析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语句来完成对数据库中表格的增删改查操作,并将结果返回给前端界面显示。
通讯录管理系统c语言课程设计报告(一)

通讯录管理系统c语言课程设计报告(一)通讯录管理系统C语言课程设计报告1. 简介通讯录管理系统是一款基于C语言开发的软件,旨在帮助用户方便地存储、查找、编辑和删除联系人信息。
本报告将对该系统的功能和设计进行详细介绍。
2. 系统功能通讯录管理系统具备以下主要功能:•添加联系人:用户可以输入联系人的姓名、电话号码、电子邮件等信息,并将其添加到通讯录中。
•查找联系人:用户可以根据姓名或电话号码等方式,快速查找通讯录中的联系人信息。
•编辑联系人:用户可以修改通讯录中已有联系人的信息,如电话号码、电子邮件等。
•删除联系人:用户可以从通讯录中删除特定联系人。
•显示通讯录:用户可以查看通讯录中的所有联系人信息。
•退出系统:用户可以选择退出通讯录管理系统。
3. 系统设计数据结构通讯录管理系统主要使用以下数据结构存储联系人信息:•结构体:定义了一个联系人的数据结构,包括姓名、电话号码、电子邮件等字段。
•数组:用于存储多个联系人信息,构成通讯录。
数组的每个元素对应一个联系人的结构体。
主要函数添加联系人函数void addContact(struct Contact contacts[], int *num Contacts)•功能:向通讯录中添加一个联系人。
•输入参数:通讯录数组contacts、通讯录中联系人数量numContacts的指针。
•输出:无。
查找联系人函数void searchContact(struct Contact contacts[], int n umContacts)•功能:根据用户提供的关键词在通讯录中查找联系人。
•输入参数:通讯录数组contacts、通讯录中联系人数量numContacts。
•输出:无。
编辑联系人函数void editContact(struct Contact contacts[], int num Contacts)•功能:根据用户选择的联系人在通讯录中编辑联系人信息。
班级通讯录管理系统课程设计报告

班级通讯录管理系统课程设计报告Coca-cola standardization office【ZZ5AB-ZZSYT-ZZ2C-ZZ682T-ZZT18】高级语言程序设计(1)课程设计专业班级学号姓名完成日期指导教师:1.程序设计说明书【设计题目】班级通讯录管理系统【问题描述】信息1002班上学生的通讯基本信息包含姓名、电话号码、QQ号和宿舍号。
对信息1002班学生的基本通讯信息进行统一整理,并可以按电话号码或姓名等查到学生个人基本通讯信息。
可以显示所有的通讯记录,并对现有的通讯记录进行修改和增删等处理。
【基本要求】1.通过此软件可以直接录入各个学生的基本通讯信息,并且会将所有信息自动保存到磁盘上。
2.通过此软件可以直接对已录入的各个学生的通讯基本信息进行修改,并且修改完成后会将更改后的信息情况自动保存到原磁盘文件中。
3.通过此软件可以直接对信息1002班每个同学的基本信息情况进行查询。
【算法思想】1.根据要求,通讯录数据以文本文件存放在文件中:2.需要提供文件的输入输出的等操作:3.还需要保存记录已进行修改,删除,查找的操作:4.另外还需提供键盘式选择菜单实现功能的选择。
图1系统功能模块图【详细设计】主函数主函数设计要求简洁,只提供部分提示语和函数的调用【程序】图2.主函数流程图Voidmenu()/*主界面*/{intn,w1;voidenter();voidadd();voidmodify();voidbrowse();voiddelete();voidsearch(); do{puts("\t*******菜单**************\t\n\n");puts("\t\t\t\t1.新建联系人");puts("\t\t\t\t2.添加联系人");puts("\t\t\t\t3.修改");puts("\t\t\t\t4.删除");puts("\t\t\t\t5.浏览");puts("\t\t\t\t6.查找");puts("\t\t\t\t7.退出");puts("\n\n\t*****信息1002班通讯录*************\t\n");printf("请选择服务种类(1-7):[]\b\b");scanf("%d",&n);if(n<1||n>7){w1=1;getchar();}elsew1=0;}while(w1==1);switch(n){case1:enter();break;/*输入模块*/case2:add();break;/*添加模块*/【模块流程图】main函数delete函数search函数2.按照程序提示,分别输入信息1002班所有同学的通讯基本信息。
通讯录管理系统课程设计报告系统存储结构

通讯录管理系统课程设计报告系统存储结构一、引言通讯录管理系统是一种方便快捷地存储和管理联系人信息的应用程序。
在该系统中,数据的存储结构至关重要,它直接关系到系统的性能和稳定性。
本文将介绍通讯录管理系统的系统存储结构设计,包括数据的组织方式、存储介质选择等内容。
二、存储结构设计1. 数据的组织方式在通讯录管理系统中,联系人信息是系统中最主要的数据之一。
为了高效地存储和管理这些信息,我们选择采用数据库的方式进行组织。
数据库将联系人信息按照一定的结构进行组织和存储,方便系统对数据的检索和更新。
2. 数据库的选择在选择数据库时,我们考虑到系统的使用特点和性能要求,最终选择了关系型数据库。
关系型数据库具有良好的数据一致性和完整性,能够满足系统的数据管理需求。
同时,支持 SQL 查询语言的特性也使得对数据进行灵活的操作成为可能。
3. 数据表设计在关系型数据库中,数据是以表的形式进行存储的。
针对通讯录管理系统的需求,我们设计了以下几张表:•用户表:用于存储系统的用户信息,包括用户名、密码等;•联系人表:用于存储用户的联系人信息,包括姓名、电话号码、邮箱地址等;•分组表:用于将联系人进行分类管理,方便用户对联系人信息进行组织。
每张表之间通过外键进行关联,确保数据的一致性和完整性。
三、存储介质选择除了数据库存储外,系统还需要选择适当的存储介质来保存一些系统配置信息和用户的登录状态等数据。
我们选择了文件系统作为存储介质,将这些数据以文件的形式进行存储。
四、存储结构的优化为了提高系统的性能和响应速度,我们对存储结构进行了一定的优化。
主要包括以下几点:•索引设计:对关键字段建立索引,加快检索速度;•归档策略:定期对系统中的数据进行归档,减少存储空间的占用;•缓存机制:使用缓存技术对频繁访问的数据进行缓存,减少数据库访问的频率。
五、总结系统存储结构的设计对于通讯录管理系统的性能和稳定性具有重要影响。
通过合理选择数据库和存储介质,并对存储结构进行优化,可以有效提高系统的用户体验和响应速度。
数据结构课程设计通讯录管理系统报告

数据结构课程设计通讯录管理系统报告前言通讯录管理系统是一种常见的应用程序,用于帮助用户有效地组织和管理他们的联系人信息。
本报告旨在介绍和分析一个基于数据结构设计的通讯录管理系统,其中实现了基本的通讯录功能,并且通过合适的数据结构和算法进行优化。
功能需求通讯录管理系统需要实现以下基本功能: - 添加联系人信息 - 查找联系人信息 - 删除联系人信息 - 更新联系人信息 - 显示所有联系人信息数据结构选择为了实现通讯录管理系统的功能,我们选择使用链表作为数据结构。
链表是一种简单而灵活的数据结构,可以动态地添加或删除节点,非常适合存储联系人信息这种动态的数据。
在这里,我们采用双向链表,使得查找、插入和删除操作更加高效。
算法设计添加联系人信息添加联系人信息时,我们需要遍历链表找到合适的位置插入新节点,这里的算法复杂度为O(n),其中n表示链表的长度。
查找联系人信息查找联系人信息时,我们需要遍历链表查找目标节点,这里的算法复杂度为O(n)。
删除联系人信息删除联系人信息时,我们同样需要遍历链表找到目标节点并删除,其算法复杂度为O(n)。
更新联系人信息更新联系人信息时,我们首先需要查找到目标节点,然后进行更新操作,其算法复杂度也为O(n)。
系统优化为了提高系统的性能,我们可以通过以下几种方式进行优化: - 使用哈希表索引联系人信息,减少查找联系人的时间复杂度; - 引入缓存机制,减少频繁的IO 操作。
总结通过本报告的介绍和分析,我们了解了一个基于数据结构设计的通讯录管理系统的实现原理和优化方法。
在实际应用中,针对具体需求和场景,我们可以进一步优化系统性能,提升用户体验。
通讯录管理系统作为一种简单而实用的应用程序,将在日常生活中发挥重要作用。
通讯录管理系统课程设计报告

通讯录管理系统课程设计报告(总7页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--设计课题题目一、课程设计目的与要求1.课程设计目的(1)综合运用之前所学知识(选择控制,循环控制,数组,函数,指针,结构体和文件等)来完成一个简单的信息管理程序的设计。
(2)充分体现和体会函数在程序设计中的必要性和实用性,并反映主函数main()在程序设计中的实现思路和方法。
2. 课程设计要求制作一个通讯录系统。
(1)该程序具有查找、添加、修改、删除功能。
(2)通讯录包括:姓名、电话、街道、城市、省、邮编等。
二、总体设计根据系统的要求,系统总体设计如图1所示。
三、详细设计1、数据结构设计#include<> /*标准输入输出函数库*/ #include<> /*标准函数库*/#include<> /*字符串函数库*/#define FILENAME ""struct date退出printf("\t--------------------\n");printf("\t请您选择(0-7):");scanf("%d",&c);}while(c>7&&c<0);return(c);}int Input(struct date per[10],int n){ int i=0;char sign,x[10];while(sign!='n'&&sign!='N'){ printf("\t姓名:");scanf("%s",per[n+i].name);printf("\t电话号码:");scanf("%s",per[n+i].phone);printf("\t电子邮箱:");scanf("%s",per[n+i].email);printf("\tQQ:");scanf("%s",per[n+i].QQ);gets(x);printf("\n\t是否继续添加(Y/N)");fflush(stdin); ame,per[i-1].phone,per[i-1].QQ,per[i-1].email);if(i>1&&i%10==0){ printf("\t-----------------------------------\n");printf("\t");system("pause");printf("\t-----------------------------------\n");}}printf("----------------------------------------------------------------------\n");system("pause");}int Delete_a_record(struct date per[10],int n){ char s[20];int i=0,j;printf("\t请输入想删除记录中的名字:");scanf("%s",s);while(strcmp(per[i].name,s)!=0&&i<n) i++;if(i==n){printf("\t通讯录中没有此人!\n");return(n);}for(j=i;j<n-1;j++){ strcpy(per[j].phone,per[j+1].phone);strcpy(per[j].name,per[j+1].name);strcpy(per[j].QQ,per[j+1].QQ);strcpy(per[j].email,per[j+1].email);}printf("\t\t\t已经成功删除!\n");return(n-1);}void Query_a_record(struct date per[10],int n){ int m;printf("\t\n请选择查询方式:\n");printf("\t┌──────┐\n");printf("\t│1------姓名│\n");printf("\t│2------电话│\n");printf("\t│3------返回│\n");printf("\t└──────┘\n");printf("请选择:");scanf("%d",&m);while(m!=1&&m!=2&&m!=3&&m!=4){printf("输入错误,请重新选择:");scanf("%d",&m);}if(m==1){ char s[20];int i=0;printf("\t请输入想查询的姓名:");scanf("\t%s",s);while(strcmp(per[i].name,s)!=0&&i<n) i++;if(i==n){printf("\t通讯录中没有此人!\n");return;}printf("\t此人QQ: %s\n",per[i].QQ);printf("\t电话号码: %s\n",per[i].phone);printf("\t电子邮箱: %s\n",per[i].email);} ;if(m==2){ char s[20];int i=0;printf("\t请输入想查询的电话:");scanf("\t%s",s);while(strcmp(per[i].phone,s)!=0&&i<n) i++;if(i==n){printf("\t通讯录中没有此人!\n");return;}printf("\t此人姓名: %s\n",per[i].name);printf("\t此人QQ: %s\n",per[i].QQ);printf("\t电子邮箱: %s\n",per[i].email);} ;}void Change(struct date per[10],int n){ char s[20];int i=0;printf("\t请输入想修改的记录中的名字:");scanf("%s",s);while(strcmp(per[i].name,s)!=0&&i<n) i++;if(i==n){ printf("\t通讯录中没有此人!\n");return;}printf("姓名:");scanf("%s",per[i].name);printf("电话号码:");scanf("%s",per[i].phone);printf("QQ:");scanf("%s",per[i].QQ);printf("电子邮箱:");scanf("%s",per[i].email);printf("\n修改成功!");}void WritetoText(struct date per[10],int n){ int i=0;FILE *fp;ame,per[i].phone,per[i].QQ,per[i].email);i++;}fprintf(fp,"-------------------------------------------------------------------------\n");fprintf(fp,"********************************共有%d条记录***************************\n",n);fclose(fp);其是在调试过程中,会因为某些原因出不来结果,也会因为个别错误而导致运行不出来,在这个过程中,遇到问题是不可避免的,但是在遇到困难是我们不退缩。
通讯录管理系统课程设计报告书 (2)

数据结构课程设计报告题目:通讯录管理系统设计学院信息工程学院 __________ 专业计算机科学与技术_______________ 年级班别 _ 12级四班___________学号 _2012051419________学生姓名张海涛_____指导教师米文丽___成绩 _2013年12月通讯录管理系统一.需求分析设计题目及要求:◆建立通讯录信息,信息至少包含编号、姓名、年龄、电话、通讯地址、电子邮箱等;◆能够提供添加、删除和修改通讯录信息的功能;◆能够提供安不同方式查询的功能;如按姓名或年龄、电话等查询;◆将通讯录保存在文件中;◆能够按表格方式输出通讯录信息。
系统功能需求分析:主要包含一下多种功能:添加:添加通讯录记录显示:显示通讯录记录删除:删除通讯录记录查询:查询通讯录记录修改:修改通讯录记录保存:将信息保存到文件二.概要设计系统功能模块图:添加:可以添加通讯录记录,依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱后,会提示是否继续添加。
显示:可以以表格形式输出所有通讯录里的记录删除:输入欲删除的那个人的名字后,会自动删除他(她)的记录内容查询:可以选择用姓名、电话、地址三种方式查询修改:输入欲修改的那个人的名字后,再依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱即可完成修改保存:,输入文件名(带后缀名)后,即可将通讯录信息保存到文件三.详细设计(1).通讯录:typedef struct{char score; /*编号*/char name[10]; /*姓名*/char num[15]; /*号码*/char email[20]; /*邮箱*/char age[8]; /*年龄*/char adds[20]; /*住址*/}Person;void main() /*主函数*/{int n=0;for(;;){switch(menu_select()){case 1:printf("\n\t添加记录到通讯录\n"); /*添加记录*/n=Input(pe,n);break;case 2:printf("\n\t\t\t 通讯录记录表\n"); /*显示记录*/Display(pe,n);break;case 3:printf("\n\t从通讯录中删除记录\n");n=Delete_a_record(pe,n); /*删除记录*/printf("\t");system("pause");break;case 4:printf("\n\t在通讯录中查找记录\n");Query_a_record(pe,n); /*查找记录*/printf("\t");system("pause");break;case 5:printf("\n\t修改通讯录中的记录\n");Change(pe,n); /*修改数据*/printf("\t");system("pause");break;case 6:printf("\n\t保存功能\n");WritetoText(pe,n); /*保存数据*/printf("\t");system("pause");break;case 0:printf("\n\t\t谢谢使用,再见!\n"); /*结束程序*/printf("\n\t\t");system("pause");exit(0);}}}(2).工作流程图:①添加:添加通讯录记录②显示:显示通讯录记录③删除:删除通讯录记录④查询:查询通讯录记录先选择查询方式,以姓名查询方式为例⑤修改:修改通讯录记录四.测试数据及其结果分析测试:1).显示的主菜单界面2).添加界面:3).显示界面:4).删除界面:删除后,通讯录里的显示记录:5).查询界面:以姓名查询方式为例:6).修改界面:修改后,通讯录里的显示记录:7).保存界面:tongxunlu.txt文件截图:问题思考:1.当我在进行删除、查询、修改、保存等功能时,以查询为例,输入名字按回车后,虽然会显示该人的所有记录,但是显示后,它马上自动消失了,还没来得及等我看内容。
通讯录管理系统课程设计报告

通讯录管理系统课程设计报告一、引言通讯录管理系统是一种用于存储和管理联系人信息的应用程序,它可以帮助用户方便地记录和查找各种联系人信息。
在本课程设计报告中,我们将讨论通讯录管理系统的设计和实现过程,以及系统的功能特点和操作流程。
二、需求分析通讯录管理系统需要具备以下基本功能: 1. 添加联系人信息:用户可以输入姓名、电话号码、电子邮件地址等信息来添加新的联系人。
2. 查找联系人信息:用户可以通过姓名或电话号码等关键词来查找已添加的联系人信息。
3. 修改联系人信息:用户可以对已有联系人信息进行修改和更新。
4. 删除联系人信息:用户可以选择删除不需要的联系人信息。
5. 显示所有联系人信息:系统可以按照一定的格式将所有联系人信息展示给用户。
三、系统设计1. 数据结构为了存储联系人信息,我们可以使用一个包含姓名、电话号码、电子邮件地址等字段的结构体来表示每个联系人。
可以使用链表或数组来组织所有联系人信息。
2. 模块设计通讯录管理系统可以划分为以下几个模块: - 添加联系人模块:实现添加新联系人信息的功能。
- 查找联系人模块:实现根据关键词查找联系人信息的功能。
- 修改联系人模块:实现对已有联系人信息进行修改和更新的功能。
- 删除联系人模块:实现删除不需要的联系人信息的功能。
- 显示联系人模块:实现将所有联系人信息按照一定格式展示给用户的功能。
3. 用户界面设计用户界面应该简洁明了,包括各个功能的按钮或选项,以及输入框和显示信息的区域。
用户应该能够方便地进行各种操作和查看联系人信息。
四、系统实现1. 数据存储可以使用文件来存储联系人信息,也可以使用数据库来进行数据持久化。
2. 界面实现可以使用图形界面或命令行界面来实现用户交互功能,不同的界面设计会影响用户体验。
3. 功能实现根据需求分析中的功能,实现各个模块的功能代码,确保系统可以正确地完成相关操作。
五、功能测试在系统实现完毕后,需要进行功能测试,确保系统的各个功能都能正常运行,并且符合需求。
通讯录管理系统课程设计报告总结

通讯录管理系统课程设计报告总结
通讯录管理系统课程设计报告总结
本次课程设计的主题是通讯录管理系统,旨在通过设计一个实用的通讯录管理系统,提高学生的软件开发能力和实践能力。
在本次课程设计中,我们采用了Java语言和MySQL数据库进行开发。
在开发过程中,我们首先进行了需求分析,明确了系统的功能和用户需求。
然后进行了系统设计,包括数据库设计和界面设计。
在开发过程中,我们采用了面向对象的开发方法,将系统分为多个模块,每个模块负责不同的功能。
同时,我们也采用了MVC设计模式,将数据、视图和控制分离,使得系统更加灵活和易于维护。
在实际开发中,我们遇到了许多问题,如数据库连接问题、界面设计问题等。
但是,我们通过不断的学习和实践,最终成功地完成了系统的开发。
在开发过程中,我们也学习了许多新的知识和技能,如Java 语言的基本语法、MySQL数据库的使用、面向对象的开发方法等。
最终,我们成功地开发出了一个实用的通讯录管理系统,该系统具有以下功能:
1. 用户登录和注册功能,保证系统的安全性和可靠性。
2. 通讯录的添加、删除、修改和查询功能,方便用户管理通讯录。
3. 通讯录的导入和导出功能,方便用户备份和恢复通讯录。
4. 通讯录的分类和分组功能,方便用户对通讯录进行分类管理。
5. 通讯录的搜索功能,方便用户快速查找通讯录。
通过本次课程设计,我们不仅提高了自己的软件开发能力和实践能力,也为今后的学习和工作打下了坚实的基础。
同时,我们也深刻认识到
软件开发需要不断学习和实践,只有不断地提高自己的技能和能力,
才能在竞争激烈的市场中立于不败之地。
通讯录管理系统课程设计报告总结

通讯录管理系统课程设计报告总结一、引言通讯录管理系统作为一种常见的信息管理工具,在日常生活中发挥着重要作用,能够帮助人们方便地管理和查找联系人信息。
本次课程设计旨在设计和实现一个简单的通讯录管理系统,运用所学的软件开发技术和方法,提升学生的实际项目开发能力。
二、需求分析本系统主要包括以下功能模块: 1. 用户登录和注册:用户可以通过用户名和密码登录系统,也可以注册新用户; 2. 通讯录管理:用户可以添加、删除、修改联系人信息,并可以按照姓名、电话号码等字段进行排序和搜索; 3. 导入和导出:用户可以将通讯录数据导出到文件中,也可以从文件中导入数据; 4. 权限管理:管理员可以对用户进行管理,设定不同用户的权限和角色。
三、设计与实现本系统采用Python语言进行开发,使用了Django框架进行Web应用的搭建,并结合SQLite数据库实现数据的存储和管理。
系统的前端页面采用HTML、CSS和JavaScript进行设计,实现了用户友好的界面交互。
在系统的设计过程中,我们遵循了软件工程的相关原则和方法,包括需求分析、概要设计、详细设计、编码和测试等阶段。
通过团队合作,我们按照功能模块分工合作,每位成员负责不同的部分,最终将各部分整合在一起进行测试和优化。
四、测试与优化在系统开发过程中,我们进行了严格的测试工作,包括单元测试、集成测试和系统测试等,确保系统的功能正常运行和性能优秀。
在测试过程中,我们发现了一些问题并对其进行了优化,提高了系统的稳定性和用户体验。
五、总结与展望通过本次通讯录管理系统课程设计,我们深入了解了软件开发的整个流程,提升了团队协作能力和项目管理能力。
在未来的学习和工作中,我们将继续探索软件开发领域,不断提高自己的技术水平,为社会和行业做出更多贡献。
以上是本次通讯录管理系统课程设计的报告总结,希望能够对读者有所启发和帮助。
感谢大家的支持与关注!。
通讯录管理系统课程设计报告Java

通讯录管理系统课程设计报告Java1. 简介通讯录管理系统是一种方便用户存储和管理联系人信息的工具。
本课程设计将使用Java语言开发一个简单的通讯录管理系统,实现对联系人信息的增删改查功能。
通过本项目的实践,学习者将掌握Java编程语言的基础知识和面向对象编程的技巧。
2. 功能需求通讯录管理系统应包含以下功能: - 添加联系人信息:用户可以输入联系人的姓名、电话号码、邮箱等信息添加到通讯录中。
- 显示所有联系人信息:系统能够展示所有已保存在通讯录中的联系人信息。
- 查找联系人信息:用户可以通过姓名或电话号码查找特定联系人的信息。
- 修改联系人信息:用户可以对已保存的联系人信息进行修改。
- 删除联系人信息:用户可以删除通讯录中的联系人信息。
实现以上功能需要设计相应的数据结构和算法,以及编写用户交互界面。
3. 技术实现3.1 数据结构在Java中,可以使用ArrayList或HashMap等数据结构来存储联系人信息。
ArrayList适用于有序的联系人列表,而HashMap适用于根据键值快速查找联系人信息。
3.2 用户交互界面用户交互界面可以通过Java的Swing或JavaFX等GUI工具包来实现。
设计一个简洁明了的界面,包含菜单栏、输入框、按钮等组件,以方便用户操作。
3.3 功能实现•添加联系人信息:用户输入信息后,将联系人信息添加到数据结构中。
•显示所有联系人信息:遍历数据结构,将所有联系人信息展示在界面上。
•查找联系人信息:根据用户输入的查询条件,在数据结构中查找对应的联系人信息。
•修改联系人信息:根据用户输入的修改信息,更新数据结构中相应的联系人信息。
•删除联系人信息:根据用户输入的删除条件,从数据结构中移除对应的联系人信息。
4. 总结通讯录管理系统是一个简单实用的应用程序,能够帮助用户有效管理联系人信息。
通过本课程设计,学习者将学习如何使用Java语言开发基本的应用程序,掌握面向对象编程的基本原理和技巧。
通讯录管理系统课程设计报告总结

任务名称:通讯录管理系统课程设计报告总结一、引言通讯录管理系统是一种用于管理联系人和通讯信息的应用程序。
该系统的设计旨在满足用户对个人和组织通讯信息的管理和查询需求。
本报告对通讯录管理系统的设计过程进行总结,并提出了改进建议。
二、系统需求分析在进行系统设计前,我们首先对用户需求进行了深入分析。
以下是我们对通讯录管理系统的需求分析总结:2.1 用户需求1.用户需要能够方便地添加、删除和编辑联系人信息。
2.用户需要能够快速搜索和查找特定联系人的信息。
3.用户需要能够导出通讯录信息并与其他应用程序集成。
4.用户需要能够进行批量操作,如导入联系人信息或发送批量邮件。
2.2 系统需求1.系统需要提供用户友好的用户界面,操作简单直观。
2.系统需要具备高效的搜索和查询功能,以满足用户的快速查找需求。
3.系统需要能够存储大量联系人信息,并确保数据安全性和完整性。
4.系统需要提供数据导入导出功能和与其他应用程序的集成能力。
三、系统设计在系统设计阶段,我们采用了面向对象的方法进行系统建模和设计。
以下是系统设计的要点:3.1 系统架构通讯录管理系统采用了三层架构模式:表示层、业务逻辑层和数据访问层。
这种架构模式将系统的功能划分为不同的层次,方便系统的维护和扩展。
3.2 数据库设计我们使用了关系型数据库来存储和管理通讯录信息。
数据库设计包括联系人表、联系人组表等。
通过合理的数据表设计,实现了联系人和联系人组之间的关联和查询。
3.3 用户界面设计为了提供用户友好的界面,我们通过使用图形用户界面(GUI)的方式构建了系统界面。
界面设计简洁明了,用户可以方便地进行联系人管理和查询操作。
3.4 功能设计根据用户需求,系统实现了联系人的添加、删除、编辑等功能。
同时,系统还提供了高效的搜索和查询功能,用户可以通过姓名、电话号码等信息快速查找联系人。
四、系统实现与测试在系统实现阶段,我们按照设计要求逐步开发各个模块,并进行了系统测试。
学生通讯录管理系统课程设计报告

学生通讯录管理系统课程设计报告一、课程设计背景学生通讯录管理系统是一个旨在帮助学生和教师更好地管理个人信息和通讯录的软件系统。
随着信息技术的不断发展,现代教育领域对教学、管理和学习等方面的要求越来越高,传统的纸质通讯录管理方式已经无法满足教育机构的需求。
因此,开发一个便捷、高效的学生通讯录管理系统成为当今教育信息化的重要课题。
二、需求分析学生通讯录管理系统主要包括以下功能模块:1.学生信息管理:用于录入、修改和删除学生个人信息,包括姓名、学号、性别、联系方式等;2.通讯录管理:实现通讯录的分类、查找、添加和删除功能,方便学生和教师进行联系;3.用户权限管理:设置不同权限等级的用户,如学生、教师和管理员,确保信息安全性;4.数据备份与恢复:对系统中的重要数据进行定期备份,保障数据的安全性;5.界面友好性:系统界面简洁明了,操作便捷,用户体验良好。
三、系统设计1. 系统架构学生通讯录管理系统采用客户端-服务器架构,客户端提供给学生和教师使用,服务器端用于存储核心数据和处理业务逻辑。
2. 数据库设计系统采用关系型数据库,主要包括以下表:•学生表(Student):包含学生的基本信息;•教师表(Teacher):包含教师的基本信息;•通讯录表(Contact):记录学生或教师之间的联系方式;•用户表(User):存储系统用户的账号信息和权限。
3. 功能实现(1)学生信息管理学生信息管理模块提供学生信息的增删改查功能,管理员可以对学生信息进行修改和删除,学生可以查看、修改自己的个人信息。
(2)通讯录管理通讯录管理模块支持对通讯录的分类和搜索功能,学生和教师可以添加、删除通讯录条目,并对通讯录进行管理。
(3)用户权限管理系统设定不同权限等级的用户,管理员有最高权限,可以管理用户账号和角色,确保系统的安全性。
四、系统实现系统采用Java语言进行开发,前端界面使用JavaFX技术,后端采用Spring框架实现业务逻辑,数据库连接采用JDBC等技术。
班级通讯录可行性分析报告

班级通讯录可行性分析报告一、引言班级通讯录是一种用于方便学生之间相互联系和了解信息的工具。
通过班级通讯录,学生可以轻松地找到同班同学的联系方式,方便进行学习和沟通。
本报告将对班级通讯录的可行性进行分析。
二、需求分析1.学生联系方式的共享:班级通讯录应能够汇总并共享学生的联系方式,包括手机号码和电子邮箱等信息。
2.信息的安全性:班级通讯录应确保学生的个人信息安全,防止被他人非法使用或泄露。
3.便捷性和易用性:班级通讯录应具备使用便捷、操作简单的特点,方便学生快速查找到需要的联系方式。
4.信息的更新和维护:班级通讯录应能够方便地进行信息的更新和维护,确保通讯录的准确性和完整性。
三、可行性分析1.技术可行性班级通讯录可以利用现有的手机应用开发技术进行实现,如Android开发和iOS开发等。
这些技术已经得到广泛应用,且拥有庞大的开发资源和技术支持,因此在技术上可行。
2.市场可行性班级通讯录在现代社会中有广泛的应用需求。
随着互联网的普及和移动设备的普及,人们对于便捷的交流工具的需求越来越高。
班级通讯录作为一种方便快捷的工具,具备较大的市场潜力。
3.经济可行性班级通讯录可以通过广告投放或收费等方式实现盈利。
通过向相关企业或组织展示广告,可以为通讯录带来一定的收入。
另外,对于一些学校或班级来说,班级通讯录可以作为一种必备的工具,可以通过收取一定的费用来维护和更新通讯录,从而实现盈利。
4.安全可行性在设计班级通讯录时,需要将学生的个人信息进行加密保存,并且设置相应的安全措施,以防止信息被非法窃取或滥用。
可以采用用户认证、权限管理等技术手段来保障数据的安全。
5.管理可行性班级通讯录的信息更新和维护可以采用分布式管理的方式。
由班级管理员或学校教师负责对通讯录进行管理,可以对学生信息进行审核和更新,确保通讯录的及时准确。
四、结论综上所述,班级通讯录具备较高的可行性。
在满足学生的信息共享需求的同时,也能够为相关企业或组织带来一定的经济收益。
通讯录管理系统课程设计报告需求分析

通讯录管理系统课程设计报告需求分析一、背景介绍在当今社会,随着通讯技术的不断发展和普及,通讯录管理系统成为人们日常生活和工作中不可或缺的工具。
为了提高通讯录管理系统的便捷性和效率,本课程设计旨在分析通讯录管理系统的需求,进而设计一个功能完善、操作简便的系统,满足用户的实际需求。
二、需求分析1. 功能需求通讯录管理系统应具备以下基本功能: - 添加联系人:用户可以录入新的联系人信息,包括姓名、电话号码、邮箱等。
- 编辑联系人:用户可以修改已有联系人的信息。
- 删除联系人:用户可以删除不需要的联系人信息。
- 搜索联系人:用户可以根据关键词快速搜索联系人信息。
- 分组管理:用户可以对联系人进行分类管理,方便查找和管理。
2. 性能需求通讯录管理系统的性能需求包括: - 快速响应:系统应具备快速响应用户操作的能力,保证用户体验流畅。
- 数据安全:系统需要保障用户数据的安全性,防止数据泄露和丢失。
- 稳定性:系统需要保持稳定运行,避免出现频繁的崩溃和错误。
3. 可靠性需求通讯录管理系统的可靠性需求包括: - 数据备份:系统应具备数据备份和恢复功能,确保数据不会因意外情况丢失。
- 异常处理:系统需要具备异常处理机制,能够处理用户操作中出现的异常情况。
- 用户权限管理:系统需要对用户进行权限管理,保证只有授权用户可以访问和操作系统。
4. 易用性需求通讯录管理系统的易用性需求包括: - 界面友好:系统界面设计应简洁明了,操作逻辑清晰,便于用户使用。
- 操作简便:用户操作应简单明了,不需要复杂的步骤就能完成常用功能。
- 提示反馈:系统应提供操作提示和反馈,帮助用户正确使用系统。
三、总结基于以上需求分析,通讯录管理系统应具备功能完善、性能优良、可靠稳定、易用便捷的特点,以满足用户的实际需求。
通过本课程设计,我们将致力于设计一个满足以上需求的通讯录管理系统,为用户提供便捷高效的通讯录管理体验。
以上是对通讯录管理系统课程设计报告需求分析的整体内容,系统将围绕这些需求进行设计和实现。
通讯录管理系统课程设计报告函数调用关系图

通讯录管理系统课程设计报告函数调用关系图一、引言通讯录管理系统是一种重要的信息管理工具,用于记录个人或团体的联系信息并进行管理。
在本课程设计报告中,将介绍通讯录管理系统的设计以及函数调用关系图。
二、系统设计概述通讯录管理系统的设计目标是实现对联系人信息的存储、检索、更新和删除等操作。
系统主要包括以下功能模块:用户登录、联系人信息管理、数据存储、数据检索等。
三、函数调用关系图以下是通讯录管理系统中各功能模块的函数调用关系图:1. 用户登录模块•login(): 用户登录函数–调用:check_username()–调用:check_password()–调用:show_main_menu()2. 联系人信息管理模块•add_contact(): 添加联系人函数–调用:validate_input()–调用:save_contact()•delete_contact(): 删除联系人函数–调用:search_contact()–调用:confirm_delete()•update_contact(): 更新联系人信息函数–调用:search_contact()–调用:modify_contact()3. 数据存储模块•save_contact(): 保存联系人信息函数4. 数据检索模块•search_contact(): 检索联系人信息函数四、总结通过本报告中的函数调用关系图,我们能清晰了解通讯录管理系统各功能模块之间的调用关系,确保系统设计合理、功能完整。
通讯录管理系统的设计将便捷用户管理联系人信息,提高信息管理效率。
班级通讯录管理系统 课程设计报告

高级语言程序设计(1)课程设计专业 班级 学号姓名 完成日期 指导教师:1. 程序设计说明书【设计题目】 班级通讯录管理系统【问题描述】信息1002班上学生的通讯基本信息包含姓名、电话号码、QQ 号和宿舍号。
对信息1002班学生的基本通讯信息进行统一整理,并可以按电话号码或姓名等查到学生个人基本通讯信息。
可以显示所有的通讯记录,并对现有的通讯记录进行修改和增删等处理。
【基本要求】1. 通过此软件可以直接录入各个学生的基本通讯信息,并且会将所有信息自动保存到磁盘上。
2. 通过此软件可以直接对已录入的各个学生的通讯基本信息进行修改,并且修改完成后会将更改后的信息情况自动保存到原磁盘文件中。
3. 通过此软件可以直接对信息1002班每个同学的基本信息情况进行查询。
【算法思想】1. 根据要求,通讯录数据以文本文件存放在文件中:2. 需要提供文件的输入输出的等操作:3. 还需要保存记录已进行修改,删除,查找的操作:4. 另外还需提供键盘式选择菜单实现功能的选择。
【总体设计】图1 系统功能模块图【详细设计】通讯录管理系统数据输入 数据修改 删除 数据添加 查找 浏览主函数设计要求简洁,只提供部分提示语和函数的调用【程序】开始显示一系列功能选项n输入n,判断n是否是1~7 ?根据n的值调用各功能模块函数结束图2. 主函数流程图Void menu() /*主界面*/{int n, w1;void enter(); void add(); void modify(); void browse(); void delete(); voidsearch();do{puts("\t*******菜单**************\t\n\n");puts("\t\t\t\t1.新建联系人");puts("\t\t\t\t2.添加联系人");puts("\t\t\t\t3.修改");puts("\t\t\t\t4.删除");puts("\t\t\t\t5.浏览");puts("\t\t\t\t6.查找");puts("\t\t\t\t7.退出");puts("\n\n\t*****信息1002班通讯录*************\t\n");printf("请选择服务种类(1-7) : [ ]\b\b");scanf("%d",&n);if(n<1||n>7){w1=1;getchar();}else w1=0;}while(w1==1);switch(n){case 2: add(); break; /*添加模块*/【模块流程图】main函数开始显示一系列功能选项n输入n,判断n是否是1~7 ?根据n的值调用各功能模块函数结束enter函数输入选择服务类型1输入要新建学生数量n(n<N)输入第一个,第二个.......第n个学生信息记录What do you want to do?1>.浏览所有 2.>..返回modify函数输入选择服务类型3输入要修改学生姓名,选择修改选项1>.姓名 5.>.所有数据2.>.电话3.>.QQ号4.>.宿舍号 6.>.取消返回是否确定修改?1.>.是2.>.不,重新修改3.>.保存并返回browse函数输入浏览服务号5浏览所有学生基本通讯信息返回主菜单delete函数输入服务选项4输入要删除学生的姓名是否删除1.>.是2.>.否,返回search函数选择服务类型6选择查找类别1.>.姓名2.>.QQ号查看已查找到地通讯信息1.>继续2.>.返回【程序使用方法】1. 执行程序,按照界面提示进行选择。
通讯录管理系统课程设计报告

通讯录管理系统一、目的随着信息科技高速的发展,计算机的使用也越来越广泛,它渐渐的成为在人们生活中占有重要位置的工具,给人们的生活带来了极大便利和帮助,它帮助人们处理繁琐复杂的工作,可以帮人们高效的处理和存储信息。
在以前,科技不发达,好多事情只能通过人力来完成,对于通讯录人们只能手工管理,手写记录、查找,给人们带来很大的不便。
而随着信息技术的发展,特别是计算机的普及,人们希望能让机器代替人力来解决一些实际问题,开发通讯录管理系统,可以便于人们对通讯录的联系人进行管理,方便日常生活。
该报告主要介绍通讯录管理系统的设计与实现,主要讲述如何开发通讯录管理系统,以及该系统一些模块功能的实现。
二、需求分析本系统为简单的通讯录管理系统,应具备以下功能:(1)输入相关数据,创建一个新联系人信息(姓名、性别、地址、电话、QQ、生日)。
(2)按姓名/电话号码查询某个通讯者的信息。
(3)按姓名/电话号码删除某个通讯者的信息。
(4)输出显示所有通讯者的信息。
(5)清空联系人信息。
(6) 按姓名/电话号码查找修改某联系人的信息。
三、概要设计1、本程序包含的模块(1)主程序模块Main(){通讯录链表定义及初始化;根据用户输入选择调用功能模块;}(2)功能模块—实现对通讯录链表的操作主函数调用功能函数实现对通讯录链表的增、删、改、查。
2、链表的定义及功能函数的抽象数据类型定义(1)链表的定义typedef struct node{char name[MAXLEN];char sex;int number; /* number在头结点被用来存放链表的长度,所以定义为int型*/ char address[MAXLEN];int QQnum;char birth[MAXLEN];struct node *next; /* 指向下一节点的指针*/}AddressNode; /* 结构体类型范例*/typedef struct node *AddressList; /* 结构体指针类型范例*/(2)功能函数的抽象数据类型定义void PrintAddressNode(AddressList L);/* 打印当前工作指针指向的节点的数据*/void PrintList(AddressList L); /* 打印当前链表内所有节点的数据*/int GetElemByNum(AddressList L,int number);/* 按号码查找节点*/int GetElemByName(AddressList L,const char *name);/*按名字查找结点*/AddressList CreateEmptyList();/*创建一个空链表*/void AddNode(AddressList L,AddressNode n);/*插入一个节点,插入位置为头结点之后*/void InputNode(AddressList L);/*用户输入数据,然后插入链表内*/int DeleteElemByNum(AddressList L,int number);/*删除号码为number的节点*/int DeleteElemByName(AddressList L,const char *name);/*删除名字为name的节点*/void ClearList(AddressList L);/*清空链表*/void SelectBySex(AddressList L,char sex);/*筛选链表内所有男/女的数据*/int ChangeByName(AddressList L,const char *name);/*修改名字为name的节点*/int ChangeByNum(AddressList L,int number);/*修改号码为number的节点*//*menu.c*/void menu_start();/* 初始菜单*/void menu_delete(AddressList L)/*选择删除联系人后的次级界面*/;void menu_getelem(AddressList L);/*选择查找联系人后的次级界面*/void menu_change(AddressList L);/*选择修改联系人后的次级界面*//*main.c*/AddressList InitListWithData(AddressList L);/*给通讯录设置一些初始数据*/ 2、主程序流程图四、详细设计本程序总共有4个文件,一个.h头文件,三个.c资源文件1、my.h文件#ifndef __MY_H__#define __MY_H__#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAXLEN 128#define OK 1#define ERROR 0typedef struct node{char name[MAXLEN];char sex;int number;char address[MAXLEN];int QQnum;char birth[MAXLEN];struct node *next;}AddressNode;typedef struct node *AddressList;/*函数声明部分*//*fun.c*/void PrintAddressNode(AddressList L);void PrintList(AddressList L);int GetElemByNum(AddressList L,int number);int GetElemByName(AddressList L,const char *name); AddressList CreateEmptyList();void AddNode(AddressList L,AddressNode n);void InputNode(AddressList L);int DeleteElemByNum(AddressList L,int number);int DeleteElemByName(AddressList L,const char *name); void ClearList(AddressList L);int ChangeByName(AddressList L,const char *name);int ChangeByNum(AddressList L,int number);/*menu.c*/void menu_start();void menu_delete(AddressList L);void menu_getelem(AddressList L);void menu_change(AddressList L);/*main.c*/AddressList InitListWithData(AddressList L);#endif2、main.c文件#include"my.h"/***************函数:InitListWithData()*参数:链表头结点L*返回值:链表头结点*功能:给通讯录设置一些初始数据**************/AddressList InitListWithData(AddressList L){AddressNode n;strcpy(,"Li");n.sex = 'm';n.number = 10010;strcpy(n.address,"武汉");n.QQnum = 123456789;strcpy(n.birth,"1996.9.1");AddNode(L,n);strcpy(,"Liu");n.sex = 'f';n.number = 11000;strcpy(n.address,"上海");n.QQnum = 78563491;strcpy(n.birth,"1996.4.9"); AddNode(L,n);strcpy(,"Shi");n.sex = 'm';n.number = 10000;strcpy(n.address,"深圳");n.QQnum = 12389769;strcpy(n.birth,"1995.1.23"); AddNode(L,n);strcpy(,"NiNa");n.sex = 'f';n.number = 10001;strcpy(n.address,"北京");n.QQnum = 18967543;strcpy(n.birth,"1994.10.19"); AddNode(L,n);strcpy(,"Lucy");n.sex = 'f';n.number = 10100;strcpy(n.address,"南京");n.QQnum = 129879889;strcpy(n.birth,"1996.8.7"); AddNode(L,n);return L;}int main(){int select;AddressList phone = CreateEmptyList();phone = InitListWithData(phone);do{system("cls");//清屏menu_start();scanf("%d",&select);getchar();if(select==0){printf("欢迎下次使用!\n");break;}switch(select){case 1:PrintList(phone);break;case 2:InputNode(phone);break;case 3:menu_delete(phone);break;case 4:menu_getelem(phone);break;case 5:ClearList(phone);break;case 6:menu_change(phone);break;default:printf("输入非法数据,请重新输入!\n");}printf("请按回车继续……\n");getchar();}while(select!=0);return 0;}3、menu.c文件#include"my.h"/***************函数:menu_start()*参数:无*返回值:无*功能:起始界面**************/void menu_start(){printf("****************************\n");printf("欢迎使用简易通讯录!\n");printf("****************************\n");printf("1:输出全部联系人信息\n");printf("2:插入新的联系人\n");printf("3:删除一个联系人\n");printf("4:查找某个联系人\n");printf("5:清空联系人信息\n");printf("6:修改某个联系人\n");printf("0:退出\n");printf("****************************\n");printf("请选择要执行的操作:");}/***************函数:menu_delete()*参数:链表头结点L*返回值:无*功能:选择删除联系人后的次级界面**************/void menu_delete(AddressList L){int select,number;char name[MAXLEN];printf("****************************\n");printf("请输入删除数据的方式:\n");printf("1:按姓名\n");printf("2:按号码\n");printf("0:返回\n");printf("****************************\n");do{printf("请选择:");scanf("%d",&select);getchar();if(select!=1 && select!=2 && select!=0)printf("输入非法数据,请重新输入!\n");}while(select!=1 && select!=2 && select!=0);switch(select){case 1:printf("请输入姓名:");scanf("%[^\n]",name);getchar();DeleteElemByName(L,name);break;case 2:printf("请输入号码:");scanf("%d",&number);getchar();DeleteElemByNum(L,number);break;case 0:printf("即将返回上级目录,");break;}}/***************函数:menu_getelem()*参数:链表头结点L*返回值:无*功能:选择查找联系人后的次级界面**************/void menu_getelem(AddressList L){int select,number;char name[MAXLEN];printf("****************************\n");printf("请输入查找联系人的方式:\n");printf("1:按姓名\n");printf("2:按号码\n");printf("0:返回\n");printf("****************************\n");do{printf("请选择:");scanf("%d",&select);getchar();if(select!=1 && select!=2 && select!=0)printf("输入非法数据,请重新输入!\n");}while(select!=1 && select!=2 && select!=0);switch(select){case 1:printf("请输入姓名:");scanf("%[^\n]",name);getchar();GetElemByName(L,name);break;case 2:printf("请输入号码:");scanf("%d",&number);getchar();GetElemByNum(L,number);break;case 0:printf("即将返回上级目录,");break;}}/***************函数:menu_change()*参数:链表头结点L*返回值:无*功能:选择修改联系人后的次级界面**************/void menu_change(AddressList L){int select,number;char name[MAXLEN];printf("****************************\n");printf("请输入查询修改数据的方式:\n");printf("1:按姓名\n");printf("2:按号码\n");printf("0:返回\n");printf("****************************\n");do{printf("请选择:");scanf("%d",&select);getchar();if(select!=1 && select!=2 && select!=0)printf("输入非法数据,请重新输入!\n");}while(select!=1 && select!=2 && select!=0);switch(select){case 1:printf("请输入姓名:");scanf("%[^\n]",name);getchar();ChangeByName(L,name);break;case 2:printf("请输入号码:");scanf("%d",&number);getchar();ChangeByNum(L,number);break;case 0:printf("即将返回上级目录,");break;}}4、fun.c文件#include"my.h"*函数:PrintAddressNode()*参数:当前工作指针p*返回值:无*功能:打印当前工作指针指向的节点的数据 **************/void PrintAddressNode(AddressList p){printf("姓名:%s\n",p->name);printf("性别:%s\n",p->sex=='m'?"男":"女");printf("电话号码:%d\n",p->number);printf("地址:%s\n",p->address);printf("QQ:%d\n",p->QQnum);printf("生日:%s\n",p->birth);}/***************函数:PrintList()*参数:链表头结点L*返回值:无*功能:打印当前链表内所有节点的数据void PrintList(AddressList L)//遍历打印整个链表{AddressList p = L->next;if(!p)printf("通讯录为空!\n");else{printf("共%d个人\n",L->number);while(p){printf("****************************\n");PrintAddressNode(p);p=p->next;}printf("****************************\n");}}/***************函数:GetElemByNum()*参数:链表头结点L,待查找的号码number*返回值:成功OK/失败ERROR*功能:按号码查找节点**************/int GetElemByNum(AddressList L,int number){AddressList p;p = L->next;while(p && p->number!=number){p = p->next;//让p指向下一个节点}if(!p){printf("没有%d号码的记录,请核对后查阅\n",number);return ERROR;}else{printf("找到记录:\n");PrintAddressNode(p);return OK;}}/***************函数:GetElemByName()*参数:链表头结点L,待查找的姓名name*返回值:成功OK/失败ERROR*功能:按姓名查找节点**************/int GetElemByName(AddressList L,const char *name) {AddressList p;p = L->next;while(p && strcmp(p->name,name)){p = p->next;//让p指向下一个节点}if(!p){printf("没有%s的记录,请核对后查阅\n",name);return ERROR;}else{printf("找到记录:\n");PrintAddressNode(p);return OK;}}/***************函数:CreateEmptyList()*参数:无*返回值:链表头结点*功能:创建一个空链表**************/AddressList CreateEmptyList()//创建一个空表{AddressList p;p = (AddressList)malloc(sizeof(AddressNode));if(p==NULL){perror("CreateEmptyAddressList error");exit(0);}p->number=0;//在头结点中的num存储的是链表的整个长度 p->next=NULL;return p;}/***************函数:AddNode()*参数:链表头结点L,保存新节点数据的结构体n*返回值:无*功能:插入一个节点,插入位置为头结点之后**************/void AddNode(AddressList L,AddressNode n)//插入新节点{AddressList p;if((p = (AddressList)malloc(sizeof(AddressNode)))==NULL) {printf("插入新节点失败!\n");}strcpy(p->name,);p->sex = n.sex;p->number = n.number;strcpy(p->address,n.address);p->QQnum = n.QQnum;strcpy(p->birth,n.birth);p->next = L->next;L->next = p;L->number++;}/***************函数:InputNode()*参数:链表头结点L*返回值:无*功能:用户输入数据,然后插入链表内 **************/void InputNode(AddressList L)AddressNode n;printf("请输入姓名:");scanf("%[^\n]",);do{getchar();printf("请输入性别(m为男,f为女):");scanf("%c",&n.sex);if(n.sex!='m'&&n.sex!='f')printf("输入错误,请重新输入!\n"); }while(n.sex!='m'&&n.sex!='f');printf("请输入电话号码:");scanf("%d",&n.number);getchar();printf("请输入地址:");scanf("%[^\n]",n.address);getchar();printf("请输入QQ号码:");scanf("%d",&n.QQnum);printf("请输入生日:");scanf("%[^\n]",n.birth);getchar();AddNode(L,n);}/***************函数:DeleteElemByNum()*参数:链表头结点L,待删除的号码number *返回值:成功OK/失败ERROR*功能:删除号码为number的节点**************/int DeleteElemByNum(AddressList L,int number) {AddressList p,q;p = L;while(p->next && p->next->number!=number) {p = p->next;//让p指向下一个节点}{printf("没有%d号码的记录,请核对后删除\n",number);return ERROR;}else{printf("找到记录:\n");q = p->next;PrintAddressNode(q);p->next = q->next;free(q);L->number--;printf("该记录已被删除\n");return OK;}}/***************函数:DeleteElemByName()*参数:链表头结点L,待删除的姓名name*功能:删除姓名为name的节点**************/int DeleteElemByName(AddressList L,const char *name) {AddressList p,q;p = L;while(p->next && strcmp(p->next->name,name)){p = p->next;//让p指向下一个节点}if(!p->next){printf("没有%s的记录,请核对后查阅\n",name);return ERROR;}else{printf("找到记录:\n");q = p->next;p->next = q->next;free(q);L->number--;printf("该记录已被删除\n");return OK;}}/***************函数:ClearList()*参数:链表头结点L*返回值:无*功能:清空链表**************/void ClearList(AddressList L)//清空链表{AddressList p,q;p=L->next;while(p){free(p);p=q;}L->next=NULL;L->number=0;printf("清空通讯录成功\n");}/***************函数:ChangeByName()*参数:链表头结点L,待修改的姓名name*返回值:成功OK/失败ERROR*功能:按姓名查找修改节点**************/int ChangeByName(AddressList L,const char *name) {AddressList p,q;p = L;while(p->next && strcmp(p->next->name,name)) {}if(!p->next){printf("没有%s的记录,请核对后查阅\n",name); return ERROR;}else{printf("************************\n");printf("找到记录:\n");q = p->next;PrintAddressNode(q);printf("************************\n");printf("现在开始修改联系人信息!\n");printf("************************\n");printf("请输入姓名:");scanf("%[^\n]",q->name);do{printf("请输入性别(m为男,f为女):"); scanf("%c",&q->sex);if(q->sex!='m'&&q->sex!='f')printf("输入错误,请重新输入!\n");}while(q->sex!='m'&&q->sex!='f');printf("请输入电话号码:");scanf("%d",&q->number);getchar();printf("请输入地址:");scanf("%[^\n]",q->address);getchar();printf("请输入QQ号码:");scanf("%d",&q->QQnum);getchar();printf("请输入生日:");scanf("%[^\n]",q->birth);getchar();printf("修改成功!");return OK;}/***************函数:ChangeByNum()*参数:链表头结点L,待修改的号码number*返回值:成功OK/失败ERROR*功能:按号码查找修改节点**************/int ChangeByNum(AddressList L,int number){AddressList p,q;p = L;while(p->next && p->next->number!=number){p = p->next;//让p指向下一个节点}if(!p->next){printf("没有%d的记录,请核对后查阅\n",number); return ERROR;else{printf("************************\n");printf("找到记录:\n");q = p->next;PrintAddressNode(q);printf("************************\n");printf("现在开始修改联系人信息!\n");printf("************************\n");printf("请输入姓名:");scanf("%[^\n]",q->name);do{getchar();printf("请输入性别(m为男,f为女):"); scanf("%c",&q->sex);if(q->sex!='m'&&q->sex!='f')printf("输入错误,请重新输入!\n");}while(q->sex!='m'&&q->sex!='f');printf("请输入电话号码:");scanf("%d",&q->number);getchar();printf("请输入地址:");scanf("%[^\n]",q->address);getchar();printf("请输入QQ号码:");scanf("%d",&q->QQnum);getchar();printf("请输入生日:");scanf("%[^\n]",q->birth);getchar();printf("修改成功!");return OK;}}五调试分析1、该程序的关键就是弄清楚单链表的原理,保证结构体指针指向的地址是你想要的地址,要非常清楚指针从头结点开始遍历,到第一个数据节点,然后第二个,第三个,一个一个遍历下去。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
高级语言程序设计(1)课程设计专业班级学号姓名完成日期指导教师:1.程序设计说明书【设计题目】班级通讯录管理系统【问题描述】信息1002班上学生的通讯基本信息包含姓名、电话号码、QQ号和宿舍号。
对信息1002班学生的基本通讯信息进行统一整理,并可以按电话号码或姓名等查到学生个人基本通讯信息。
可以显示所有的通讯记录,并对现有的通讯记录进行修改和增删等处理。
【基本要求】1.通过此软件可以直接录入各个学生的基本通讯信息,并且会将所有信息自动保存到磁盘上。
2.通过此软件可以直接对已录入的各个学生的通讯基本信息进行修改,并且修改完成后会将更改后的信息情况自动保存到原磁盘文件中。
3.通过此软件可以直接对信息1002班每个同学的基本信息情况进行查询。
【算法思想】1.根据要求,通讯录数据以文本文件存放在文件中:2.需要提供文件的输入输出的等操作:3.还需要保存记录已进行修改,删除,查找的操作:4.另外还需提供键盘式选择菜单实现功能的选择。
【总体设计】图1系统功能模块图【详细设计】主函数主函数设计要求简洁,只提供部分提示语和函数的调用【程序】图2.主函数流程图Voidmenu()/*主界面*/{intn,w1;voidenter();voidadd();voidmodify();voidbrowse();voiddelete();voidsearch(); do{puts("\t*******菜单**************\t\n\n");puts("\t\t\t\t1.新建联系人");puts("\t\t\t\t2.添加联系人");puts("\t\t\t\t3.修改");puts("\t\t\t\t4.删除");puts("\t\t\t\t5.浏览");puts("\t\t\t\t6.查找");puts("\t\t\t\t7.退出");puts("\n\n\t*****信息1002班通讯录*************\t\n");printf("请选择服务种类(1-7):[]\b\b");scanf("%d",&n);if(n<1||n>7){w1=1;getchar();}elsew1=0;}while(w1==1);switch(n){case1:enter();break;/*输入模块*/case2:add();break;/*添加模块*/【模块流程图】main函数delete函数search函数1”,进入新建联系人。
2.按照程序提示,分别输入信息1002班所有同学的通讯基本信息。
(注:这里默认为信息1002班有30名同学,可以通过宏定义进行修改。
)3.输入成功后,自动返回主界面。
输入“5”,进入通讯录预览,程序自动将各个已录入同学的基本通讯信息输出到屏幕上。
4.输入“2”返回主界面。
输入“3”,进入基本通讯信息修改,按照提示进行输入。
5.输入成功后,输入“1”浏览输入信息,输入“2”返回主界面。
输入“4”,进行删除根据提示操作。
6.输入“6”进行查找,根据提示“1”按姓名查找,“2”按电话号码查找。
7.输入“1”浏览所查找信息,“2”返回主界面。
输入“7”退出程序。
2.程序上机调试报告【语法错误及其排除】1、单词拼写错误,导致出现没有定义的变量。
2、宏定义时在末尾处加上了分号,应该不加分号。
3、菜单输出时不整齐。
【算法错误及其排除】1、逐个检查,用查找替换等。
2、在修改个人通讯信息时,不小心将姓名删除。
3.程序测试结果1.新建联系人;图一2.添加联系人;图二3.修改,删除联系人信息;图三4.浏览,查找。
图四图一图二图三图四【收获及体会】通过为期十多天的课程设计,我对《C语言》这门课程有了更深一步的了解。
它是计算机程序设计的重要理论技术基础,在我们信息与计算科学专业的学习中占据着十分重要的地位。
同时也使我们知道,要学好这门课程,仅学习书本上的知识是不够的,还要有较强的实践能力。
因为我们学习知识就是为了实践。
而只有多实践,多编写程序,才能更好的理解与掌握书本上的东西。
运用《C语言》中的算法思想作数据结构,结合C语言基本知识,编写一个通讯录管理系统。
通过完成本课题,进一步熟悉C语言的基本知识,并掌握数据结构的一些基本算法思想,掌握C语言的文件操作(包括从磁盘读入和向磁盘写入内容),进一步熟悉指针的用法,数组的建立运用和函数的调用等。
4.源程序代码#defineN30//(宏定义)学生人数#include<stdio.h>//预编译命令#include<string.h>//预编译命令structstudent//定义学生基本通讯信息的结构体{charname[20];charphone[50];charQQnum[15];chardorm[20];}stu[N];voidprintf_face(){printf("\n\t姓名\t电话号码\tQQ号\t宿舍号\n");}voidprintf_one(inti){printf("\t%s\t%s\t%s\t%s\n",stu[i].name,stu[i].phone,stu[i].QQnum,stu[i].dorm);} voidprintf_n(intn){intj;for(j=0;j<n;j++){if((j!=0)&&(j%10==0)){printf("\n\nPressanykeytocontinue...:");getchar();puts("\n\n") ;}printf_one(j);}getchar();}intload(){FILE*fp;inti;if((fp=fopen("file","rb"))==NULL){printf("\nCannotopenfile\n");exit(0);}for(i=0;!feof(fp);i++)fread(&stu[i],sizeof(structstudent),1,fp);fclose(fp);return(i-1);}intmodify_data(inti,intn){intc,w1;voidinput(inti);voidmenu();do{puts("\n修改选项=>\n\n1).姓名2).电话号码3).QQ号4).宿舍号5).所有数据6).取消并返回");printf("请选择?:[]\b\b");scanf("%d",&c);if(c>6||c<1){puts("\nChooseerror!Pleaseagain!");getchar();}}while(c>6||c<1);do{switch(c){case1:printf("name:");scanf("%s",stu[i].name);break;case2:printf("phone:");scanf("%s",stu[i].phone);break;case3:printf("QQnum:");scanf("%s",stu[i].QQnum);break;case4:printf("dorm:");scanf("%s",stu[i].dorm);break;case5:input(i);break;case6:menu();}puts("\nNow:\n");printf_face();printf_one(i);printf("\n确定?\n\n\t1).是2).不,重新修改3).返回不保存[]\b\b");scanf("%d",&w1);}while(w1==2);return(w1);}voidinput(inti){printf_face();printf("\t");scanf("%s\t%s\t%s\t%s",stu[i].name,stu[i].phone,stu[i].QQnum,stu[i].dorm);}voidsave(intn){FILE*fp;inti;if((fp=fopen("file","wb"))==NULL){printf("\nCannotopenfile\n");exit(0);}for(i=0;i<n;i++)if(stu[i].name[0]!='\0')if(fwrite(&stu[i],sizeof(structstudent),1,fp)!=1)printf("filewriteerror\n");fclose(fp);}voidprintf_back(){intw;voidbrowse();voidmenu();printf("\n\n\t^_^.Successful.^_^\n\n");printf("Whatdoyouwanttodo?\n\n\t1).浏览所有\t2).返回:[]\b\b");scanf("%d",&w);if(w==1)browse();elsemenu();}voidmain(){voidmenu();//主菜单函数menu();}voidmenu(){intn,w1;voidenter();voidadd();voidmodify();voidbrowse();voiddelete();voidsearch(); doputs("\t*************欢迎进入信息1002班通讯录菜单***********");puts("\n\t\t*******************1.新建联系人*******************");puts("\t\t*******************2.添加联系人*******************");puts("\t\t*******************3.修改*******************");puts("\t\t*******************4.删除*******************");puts("\t\t*******************5.浏览*******************");puts("\t\t*******************6.查找*******************");puts("\t\t*******************7.退出*******************");puts("\n\n\t**************信息1002班通讯录*********************");printf("请选择服务种类(1-7):[]\b\b");scanf("%d",&n);if(n<1||n>7){w1=1;getchar();}elsew1=0;}while(w1==1);switch(n){case1:enter();break;case2:add();break;case3:modify();break;case4:delete();break;case5:browse();break;case6:search();break;case7:exit(0);}}voidenter()//新建联系人函数{inti,n;printf("Howmanystudent(0-%d)?:",N-1);scanf("%d",&n);printf("请输入数据:\n");for(i=0;i<n;i++){printf("\n输入第%d个记录.\n",i+1);input(i);}if(i!=0)save(n);printf_back();}voidadd()//添加联系人函数{inti,n,k,t;n=load();printf("Howmanystudentdoyouwanttoadd(0-%d)?:",N-n-1);scanf("%d",&t);k=n+t;for(i=n;i<k;i++){printf("\n输入第%d个记录.\n",i-n+1);input(i);}save(k);printf_back();}voidmodify()//修改通讯信息函数{structstudents;inti,n,k,w0=1,w1,w2=0;n=load();do{k=-1;printf_face();printf_n(n);do{printf("\n\nEnternamethatyouwanttomodify!\nName:");scanf("%s",);for(i=0;i<n;i++)if(strcmp(,stu[i].name)==0){k=i;s=stu[i];}if(k==-1)printf("\n\n没有记录请重新输入!");}while(k==-1);printf_face();printf_one(k);w1=modify_data(k,n);if(w1==1){printf("\n\t^_^.Successful^_^.\n\n是否继续?\n\n\t1).是2).保存返回\t[]\b\b");scanf("%d",&w0);w2=1;}else{w0=0;if(w2==0)stu[k]=s;}if((w0!=1)&&(w2==1))save(n);}while(w0==1);menu();{intn;n=load();printf_face();printf_n(n);printf("\t共有%d记录.\n",n);printf("\nPressanykeytoback...");getchar();menu();}voidsearch()//查找函数{intw0,k,i,n,w1,w2;structstudents;n=load();do{printf("请选择查找类别:1).姓名2).电话号码[]\b\b");scanf("%d",&w1);if(w1<1||w1>2){printf("输入错误!请重新输入!\n");w2=1;} }while(w2==1);if(w1==1){do{k=-1;do{printf("\n\nEnternamethattouwanttosearch!\nName:");scanf("%s",);for(i=0;i<n;i++)if(strcmp(,stu[i].name)==0){k=i;s=stu[i];}if(k==-1)printf("\n\n没有记录请重新输入!");}while(k==-1);printf_face();printf_one(k);printf("\nWhatdoyouwanttodo?\n\t1).继续2).返回菜单[]\b\b");scanf("%d",&w0);}while(w0==1);menu();}else{do{k=-1;do{printf("\n\nEnterphonenumberthattouwanttosearch!\nphone:");scanf("%s",s.phone);for(i=0;i<n;i++)if(strcmp(s.phone,stu[i].phone)==0){k=i;s=stu[i];}if(k==-1)printf("\n\n没有记录请重新输入!");}while(k==-1);printf_face();printf_one(k);printf("\nWhatdoyouwanttodo?\n\t1).继续2).返回菜单[]\b\b");scanf("%d",&w0);}while(w0==1);menu();}{structstudents;inti,n,k,w0,w1;n=load();do{k=-1;printf_face();printf_n(n);do{printf("\n\nEnternamethatyouwanttodelete!\nName:"); scanf("%s",);for(i=0;i<n;i++)if(strcmp(,stu[i].name)==0){k=i;s=stu[i];}if(k==-1)printf("\n\n没有记录请重新输入!");}while(k==-1);printf_face();printf_one(k);printf("\n确定?\n\t1).是2).返回[]\b\b");scanf("%d",&w0);if(w0==1){stu[k].name[0]='\0';save(n);}elsebreak; printf("\n\t^_^.Successful^_^.\n");printf("Whatdoyouwanttodo?\n\t1).继续2).返回[]\b\b"); scanf("%d",&w1);}while(w1==1);menu();}。