数据结构单链表通讯录

数据结构单链表通讯录
数据结构单链表通讯录

实验报告

实验名称单链表通讯录

一、实验目的

1.熟练掌握线性表的类型定义方法、存储方法及其基本运算(元素的插入、删除等)

的实现方法,培养综合运用所学知识,根据具体问题进行数据结构设计和算法设计

的能力。

二、实验内容

1.● 用带头结点的单链表作存储结构,实现通讯录单链表的建立、查询、修改、排序、合并、统计、结点的查找、移动以及通讯录链表的输出功能。

三、实验要求

● 设计要求:

为了实现通讯录管理的操作功能,首先设计一个含有多个菜单项的主控菜单程序,然后再为这些菜单项配上相应的功能。

主控菜单设计要求:

? 菜单内容

程序运行后,给出9个菜单项的内容和输入提示:

1.创建通讯录链表;

2.将姓名为Name的好友的手机号改为MTel;

3.输出通讯录;

4.插入姓名为Name、手机号为MTel的好友信息,将链表中姓名≤Name的结点放到该结点的前面,将姓名>Name的结点放到该结点后面

5.将通讯录按照好友姓名进行非递减排序;

6.将两个按姓名非递减排序的通讯录合并为一个,姓名相同且手机号相同的好友记录在结果中只保留一个;

7.统计籍贯是“大连”的好友人数;

8.将通讯录中倒数第k个结点之后的所有结点移到头结点后面(保持结点间的先后顺序);

9.将通讯录的正中间位置结点之后的全部结点倒置;

0.退出管理系统

请选择0—9:

? 菜单设计要求:使用数字0—9来选择菜单项,其它输入则不起作用。

四、实验概要设计

1)功能框图

五. 使用说明

1.运行环境:VC6.0

2.首先选择主控菜单中的操作1,即建表,然后进行其它操作.六.实验截图

(见下页)

七实验体会

附源程序代码:

#include

#include

#include

#define Newsp (TxlList *)malloc(sizeof(struct TxlList))

typedef struct TxlList

{

char Name[16]; //姓名

char MTel[11]; //手机号

char Tel[9]; //固定电话

char EMail[16]; //邮箱地址

char BornAddr[20];//籍贯(值域:"北京"、"上海"、"大连"等等,只写城市名称)

char BroadN[50]; //博客名

struct TxlList *next; //指针域

}TxlList, *TxlLink;

void Lbuild1(TxlLink &T){//创建文件

FILE *fp;

TxlLink q;

q=Newsp;

q=T;

int NUM;

char filename[20];

printf("\n*请输入要创建的通讯录名:\n");

gets(filename);

if ((fp=fopen(filename, "wb"))==NULL) { /*以写方式在当前目录打开(新建)文件*/

printf("can't open file!!!\n");

exit(0); //如果文件无法打开,关闭已经打开的其它文件,结束程序。

}

printf("*请输入要储存的人数:");

scanf("%d",&NUM);

getchar();

for(int a=0;a

TxlLink p;

p=Newsp;

printf("\n*请输入第%d个人的数据,按回车键结束,数据若为空请输“无”",a+1);

printf("\n*姓名:");

gets(p->Name);

printf("*手机号:");

gets(p->MTel);

printf("*固定电话:");

gets(p->Tel);

printf("*邮箱地址:");

gets(p->EMail);

printf("*籍贯:");

gets(p->BornAddr);

printf("*博客名:");

gets(p->BroadN);

p->next=NULL;

q->next=p;

q=q->next;

if

(fprintf(fp,"%s %s %s %s %s %s\n",p->Name,p->MTel,p->Tel,p->EMail,p->BornAddr,p->Broad N)==1)//向文件中一次写一个结构体量值

{

printf("file write error\n");

break;

}

}

fclose(fp);

}

void Lbuild2(TxlLink &T){//读取文件

FILE *fp;

TxlLink q;

q=Newsp;

q=T;

char filename[20];

printf("\n*请输入要读取的通讯表名:\n");

gets(filename);

if((fp=fopen(filename,"rb"))==NULL){

printf("can't open file!!!\n");

exit(0); //如果文件无法打开,关闭已经打开的其它文件,结束程序。

}

while(!feof(fp)){

TxlLink p;

p=Newsp;

fscanf(fp,"%s %s %s %s %s %s ",p->Name,p->MTel,p->Tel,p->EMail,p->BornAddr,p->BroadN);

q->next=p;

p->next=NULL;

q=q->next;

}

fclose(fp);

}

void Build(TxlLink &T){//选择建立方式的函数

int Choice;

printf("*******************************************************************") ;

printf("\n*请输入想要实现的功能编号:\n");

printf("*1.新建通讯录;\n*2.输出已有有通讯录;\n*其它-退出。\n*选择为:");

scanf("%d",&Choice);

printf("*******************************************************************") ;

getchar();

switch(Choice){

case 1:

{

Lbuild1(T);

break;

}

case 2:{

Lbuild2(T);

break;

}

default:

{

printf("无通讯录\n\n");

break;

}

}

}

void Update(TxlLink &T, char *Name, char *MTel){//将姓名为Name的好友的手机号改为MTel;

TxlLink p;

p=T->next;

while(p){

if(strcmp(p->Name,Name)==0){

strcpy(p->MTel,MTel);

}

p=p->next;

}

}

void Buildnew(TxlLink &T){//创建一个空资料单元

char a[]="无";

strcpy(T->Name,a);

strcpy(T->MTel,a);

strcpy(T->EMail,a);

strcpy(T->BornAddr,a);

strcpy(T->BroadN,a);

strcpy(T->Tel,a);

T->next=NULL;

}

void OutPut(TxlLink T){//输出通讯表数据

TxlLink p;

p=Newsp;

p=T->next;

printf("*******************************************************************") ;

printf("\n*通讯录信息:\n姓名,手机号,固定电话,邮箱地址,籍贯,博客名分别为:\n");

while(p){

printf("%s %s %s %s %s %s\n",p->Name,p->MTel,p->Tel,p->EMail,p->BornAd dr,p->BroadN);

p=p->next;

}

}

void Sort(TxlLink &T){ //将该通讯录按照好友姓名进行非递减排序

TxlLink p,q,r;

p=T;

q=p->next;

int SUM=0;

while(q){//记录通讯表数据个数

SUM++;

q=q->next;

}

q=p->next;

for(int i=0;i

for(int j=0;j

r=q->next;

if(r){

if(strcmp(q->Name,r->Name)>0){

p->next=r;

q->next=r->next;

r->next=q;

}

p=p->next;

q=p->next;

}

}

p=T;

q=p->next;

r=q->next;

}

}

void Merge(TxlLink &T1, TxlLink &T2){ //将两个按姓名非递减排序的通讯录合并为一个,姓名相同且手机号相同的好友记录在结果中只保留一个

Sort(T1);

Sort(T2);

TxlLink p,q,r,t,head;

p=T1->next;

q=T2->next;

head=T1;

while(p||q){

r=p;

t=q;

if(strcmp(p->Name,q->Name)>0)

{

q=q->next;

head->next=t;

head=head->next;

head->next=NULL;

printf("w ");

}

else if(strcmp(p->Name,q->Name)<0)

{

p=p->next;

head->next=r;

head=head->next;

head->next=NULL;

}

else {

if(strcmp(p->MTel,q->MTel)>0){

q=q->next;

head->next=t;

head=head->next;

head->next=NULL;

}

else if(strcmp(p->MTel,q->MTel)<0){

p=p->next;

head->next=r;

head=head->next;

head->next=NULL;

}

else{

p=p->next;

free(r);

printf("x ");

}

}

if(!p){

while(q){

head->next=q;

q=q->next;

head=head->next;

head->next=NULL;

}

}

if(!q){

while(p){

head->next=p;

p=p->next;

head=head->next;

head->next=NULL;

}

}

}

T2=T1;

}

void Insert(TxlLink &T, char *Name, char *MTel){ //插入姓名为Name、手机号为MTel的好友信息,将链表中姓名≤Name的结点放到该结点的前面,将姓名>Name的结点放到该结点后面;

Sort(T);

TxlLink p,q,r;

int n=1;

r=Newsp;

Buildnew(r);

strcpy(r->Name,Name);

strcpy(r->MTel,MTel);

p=T->next;

q=p->next;

while(q){

if(strcmp(p->Name,r->Name)>=0)

{

T->next=r;

r->next=p;

n=0;

break;

}

if(strcmp(p->Name,r->Name)<=0){

if(strcmp(q->Name,r->Name)>=0)

{

p->next=r;

r->next=q;

n=0;

break;

}

}

p=p->next;

q=q->next;

}

if(n==1){

p->next=r;

}

}

int Count(TxlLink T){//统计籍贯是某地的好友人数;

int x=0;

char BornAddr[20];

TxlLink p;

p=T->next;

printf("*请输入要查询的地址:");

gets(BornAddr);

while(p){

if(strcmp(p->BornAddr,BornAddr)==0)

x++;

p=p->next;

}

return x;

}

int Number1(TxlLink p,TxlLink &r,TxlLink &t,int k){//运用递归方法找到倒数第k个结点的地址

int x=0;

TxlLink q;

if(p){

q=p;

p=p->next;

x=Number1(p,r,t,k)+1;

}

if(k==x)

r=q;

if((k+1)==x)

t=q;

return x;

}

int Number2(TxlLink p,TxlLink &r,TxlLink &t,int &k){//运用递归方法找到倒数第k个的地址int x=0;

TxlLink q;

if(p){

q=p;

k++;

p=p->next;

x=Number2(p,r,t,k)+1;

}

if((k/2)==x)

r=q;

if((k/2+1)==x)

t=q;

return x;

}

void MoveK(TxlLink &T, int k){//将通讯录中倒数第k个结点之后的所有结点移到头结点后面

int x;

TxlLink p,q,r,t;

p=T->next;

x=Number1(p,r,t,k);

T->next=r;

t->next=NULL;

while(r){

q=r;

r=r->next;

}

q->next=p;

}

void ReverseN(TxlLink T){//将通讯录的正中间位置结点之后的全部结点倒置int k=0;

TxlLink p,q,r,t;

p=T->next;

Number2(p,r,t,k);

T->next=r;

t->next=NULL;

while(r){

q=r;

r=r->next;

}

q->next=p;

}

int main(void){

TxlLink P;

int x=1;

P=Newsp;

Build(P);

int Choice;

while(x){

printf("\n*请输入想要实现的功能编号:\n");

printf("*1.排序;\n*2.插入信息;\n*3.更改手机;\n*4.合并;\n*5.统计籍贯人数;\n*6.移节点;\n*7.倒置链表;\n*其它-退出。\n*选择为:");

scanf("%d",&Choice);

getchar();

switch(Choice)

{

case 1:

{

printf("*******************************************************************") ;

printf("\n************************排序前的通讯表*************************\n");

OutPut(P);

Sort(P);

printf("\n************************排序后的通讯表*************************\n");

OutPut(P);

break;

}

case 2:

{

printf("\n*************************插入前的通讯录*************************\n");

OutPut(P);

char name[16],mtel[11];

printf("\n*请输入要插入的好友姓名:");

gets(name);

printf("\n*请输入要插入的好友号码:");

gets(mtel);

Insert(P,name,mtel);

printf("\n*************************插入后的通讯录*************************\n");

OutPut(P);

printf("********************************************************************");

break;

}

case 3:

{

printf("\n*************************改写前的通讯录*************************\n");

OutPut(P);

char name[16],mtel[11];

printf("\n*请输入要改写的好友姓名:");

gets(name);

printf("\n*请输入要改写的好友号码:");

gets(mtel);

Update(P,name,mtel);

printf("\n*************************改写后的通讯录*************************\n");

OutPut(P);

printf("********************************************************************");

break;

}

case 4:

{

TxlLink Q;

Q=Newsp;

printf("********************************************************************" );

printf("\n*建立另一个通讯录\n");

Build(Q);

printf("\n*第一个通讯录\n");

OutPut(P);

printf("\n*第二个通讯录\n");

OutPut(Q);

Merge(P,Q);

printf("\n**********************合并并排序后的通讯录***********************\n");

OutPut(P);

printf("********************************************************************" );

break;

}

case 5:

{

int N;

printf("\n***************************输出通讯录

***************************\n");

OutPut(P);

N=Count(P);

printf("\n*统计结果为:\n*共%d个人\n",N);

printf("********************************************************************");

break;

}

case 6:

{

int n;

printf("\n*请输入移动节点数:\n n=");

scanf("%d",&n);

printf("\n*移动前的通讯录:\n");

OutPut(P);

MoveK(P,n);

printf("\n*移动后的通讯录:\n");

OutPut(P);

break;

}

case 7:

{

printf("\n*************************倒置前的通讯录*************************\n");

OutPut(P);

ReverseN(P);

printf("\n*************************倒置后的通讯录*************************\n");

OutPut(P);

printf("********************************************************************" );

break;

}

default:

{

x=0;

break;

}

}

}

return 0;

}

C++链表通讯录完美版

C++语言课程设计 学号:010910236 姓名:楚归羽 指导老师:张

目录 一、程序功能 (2) 二、题目分析 (2) 三、设计中遇到的问题及解决方法 (2) 四、感想与心得 (2) 五、程序说明 (2) 六、函数调用关系及主要算法的实现 (8) 七、数据测试 (8)

一、程序功能 程序采用单向链表类结构实现实现通讯录多个纪录的管理工作。 1、提示输入个字段,一次输入一个人的数据 2、输入待删除记录的姓名,显示其所有信息,让用户确认是否删除 3、按顺序显示所有记录,每显示10条记录暂停,按Enter继续 4、输入姓名,显示其所有信息 5、用户输入姓名,系统显示该姓名下所有信息,同时显示子菜单,用户按子菜单提示进行修改 6、从实现建立的正文文件中批量导入数据。程序运行时,用户需输入正文文件名 7、将库表中数据写入一个正文文件中。程序运行时,用户需输入正文文件名 8、首先显示当前排序关键字,然后提示是否需要改变。系统默认按姓名排序,可在按办公室电话排序之间切换 9、退出系统 二、题目分析 程序采用单向链表类结构实现,每个结点代表一个通讯记录。链表类实现通讯录多个纪录的管理工作。 三、设计中遇到的问题及解决方法 初次接触课程设计,刚刚拿到题目,实在是茫然无头绪,于是反复研究了题目,仔细复习了链表部分的知识点,加上和同学的讨论,终于是有了一个大概的思路。 刚开始着手编写的时候问题不断,幸好经过练习册上的指示,搭好了基本的框架,可是链表部分仍然是出了很大的问题,经过自己的反复实验与不断努力终于编译成功。后面的文本文件的读入与写入则是另一个难题,因为这一块练习的不是很多,只在课本上看到了一些皮毛,在编译与调试时也遇到了很大问题。最后通过看书上的例题并在与同学交流探讨中解决了这些问题。 四、感想与心得 C++作为一门必修课程,学习的过程实在是痛苦的,尤其是在编程的时候,因为总是会出现各种各样的错误。只有通过反复的调试,通过无数次的排错,才能编写出正确的程序,更多的时候,一个很小的很无聊错误就能导致长时间的迷惑。但是,这也让我学到了还能多,尤其是面对错误坚韧不拔的意志和不达目的绝不低头的毅力,这一点对科研工作想来也是相当重要的。 五、程序说明 /*通讯录管理系统||Copyright:010910236 丁志伟*/ #include #include #include #include #include #include /*------------------------分割线||节点类的定义--------------------------------------------*/ class node { char Name[15]; int OfficePhone; int HomePhone; char MobilePhone[15]; char Email[20]; node *next; public: node(char *n="a",int o=0,int h=0,char *m="b",char *e="c",node *ne=NULL)//初始化 { if(n)strcpy(Name,n); if(m)strcpy(MobilePhone,m); if(e)strcpy(Email,e); next=ne; OfficePhone=o;HomePhone=h; } void show() //显示节点数据 { cout<

数据结构实验一通讯录

数据结构实验报告 实验名称:实验一——线性表 学生姓名:大学霸 班级: xxxxxxxxxx 班内序号: xx 学号: xxxxxxxxxx 日期: 2012年11月1日 1.实验要求 实验目的: 1.学习指针,模板类,异常处理的使用; 2.掌握线性表的操作实现方法; 3.培养使用线性表解决实际问题的能力。 实验内容: 利用线性表实现一个通讯录管理,通信录的数据格式如下:struct DataType

{ int ID; 程序分析 编程完成通讯录的一般性管理工作如通讯录中记录的增加、修改、查找、删除、输出等功能。每个记录包含姓名、电话号码、住址等个人基本信息。 用《数据结构》中的链表做数据结构结合c 语言基本知识编写一个通讯录管理系统。本程序为使用方便,几乎不用特殊的命令,只需按提示输入即可,适合更多的用户使用。对于建立通讯录管理系统,则需了解并掌握数据结构与算法的设计方法,提高综合运用所学的理论知识和方法独立分析和解决问题的能力。 存储结构 存储结构:带头结点和尾结点的单链表 front 关键算法分析 本实验从整体上分为七大模块:(1)输入联系人信息; (2)添加联系人信息;(3)查找联系人信息;(4)查看联系人信息; (5 )删除

联系人信息;(6)修改联系人信息;(7)退出通讯录管理。通讯录系统图 通讯录的建立 伪代码: 1.在堆中申请新的结点; 2.新节点的数据域为a[i]; 3.将新节点加入到链表中; 4.修改尾指针;

5.全部结点插入后需要将终结结点的指针域设为空。 C++实现: ContactBook::ContactBook(DataType a[],int n)找不到返回空指针。 C++实现: 程序运行结果 主函数流程图:

通讯录的制作(数据结构C语言版)

通讯录的设计 一、设计思路: 经过一个学期的程序设计学习,我逐渐了解了计算机的基本原理和c语言的基本常识,并可以逐渐自己来实现一些简单的程序任务。此次程序设计我选择了通讯录设计,通过函数、结构体的定义以及一些基本操作运用,经过一个多月的编写、调试、测试,最终完成了该程序的设计。以下为我的设计思路:首先,确定通讯录的功能,我初步设计了六项功能:输入(程序中对应 enter ())、删除(程序中对应delete())、显示通讯录(程序中对应list())、搜索(程序中对应search())、保存(程序中对应save())、装载(程序中对应 load())。 其次,对于存储的数据结构,我则主要选择了一下几个方面的信息:姓名、性别年龄、籍贯、手机、下一个指针(用于链表的操作与实现)、当前指针(用于链表的操作与实现)。 二、程序源代码: #include struct address{ /*创建一个address结构*/ char name[10]; /*姓名*/ char sex[2]; /*性别*/ char age[2]; /*年龄*/ char native[10]; /*籍贯*/ char telephone[12]; /*手机*/ struct address *next; /*下一个入口的指针*/ struct address *prior; /*当前记录的指针*/ } list_entry; struct address *start; /*指向列表中第一个入口*/ struct address *last; /*指向列表中最后一个入口*/

链表实现通讯录

#include #include #include #include struct txl { char n[10]; char name[10]; char sex [10]; char tele[12]; char address[100]; struct txl *next; }; typedef struct txl TXL; typedef struct txl * link; enum result {exit_ok}; void menu_select()//主菜单 { printf(" 欢迎进入通讯录管理系统\n"); printf("********************************\n"); printf(" 1.联系人添加\n"); printf(" 2.联系人删除\n"); printf(" 3.联系人修改\n"); printf(" 4.联系人查找\n"); printf(" 5.联系人总览\n"); printf(" 0.退出通讯录管理系统\n"); printf("********************************\n"); } void is_malloc_ok(link *new_node) { if((*new_node) == NULL) { printf("Malloc error!"); exit(-1); } } void create_link(link *head)

{ (*head) = (link)malloc(sizeof(TXL)); is_malloc_ok(head); (*head)->next = NULL; } void create_new_node(link *new_node) { int i; *new_node = (link)malloc(sizeof(TXL)); is_malloc_ok(new_node); printf("请输入编号:\n"); scanf("%s",&(*new_node)->n); printf("请输入姓名:\n"); scanf("%s",&(*new_node)->name); printf("请输入性别:\n"); scanf("%s",&(*new_node)->sex); printf("请输入联系电话:\n"); scanf("%s",&(*new_node)->tele); printf("请输入家庭地址:\n"); scanf("%s",&(*new_node)->address); printf("联系人添加成功!\n"); } insert_new_node(link *new_node,link *head) { (*new_node)->next = (*head)->next; (*head)->next = (*new_node); } void add_new_node(link *head) { link new_node; create_new_node(&new_node); insert_new_node(&new_node,head); } void display(link *head) { int i = 1; link p = NULL; if((*head)->next == NULL) { printf("通讯录为空!\n");

通讯录管理系统

通讯录管理系统说明书 一、使用的技术和开发平台: 基于https://www.360docs.net/doc/762504484.html,技术开发的数据库应用程序。开发平台为windows,使用的语言为C#2008,数据库为:MSSQL SERVER2008 二、系统功能模块 本系统是使用c#2008和MSSQL SERVER2008开发的一个数据库应用程序,其主要功能是实现对不同组别的联系人信息进行管理,具体来说分如下几个功能模块: 1、后台管理模块 对系统管理员账户的添加、删除、修改等操作 2、登录验证系统 系统启动时,将出现登录窗口,要求用户输入正确的用户名和密码,否则无法进入系统。 2、联系人管理系统 登录成功后将进入系统的主窗口(FormMain.cs),如下图所示: 其中组别是对联系人分的类,根据添加到数据库中的所有联系人的组别确定,是可以更改的。主窗口第一次显示时,默认显示第一个组别的所有联系人。可以在左边树形列表中选择不同的组别,同时右边的ListView自动显示不同组别的所有联系人。在联系人菜单下可以实现新增联系人、删除联系人、修改或查看联系人以及搜索,不论是新增、删除还是修改联系人完毕后,下面的ListView会同时更新显示联系人及组别。状态栏显示登录账户名和选中组别包含的联系人个数。 当用户单击新增联系人菜单项时,弹出如下窗体(FrmAdd.cs),以实现新增:

其中组别是根据数据库中已有的组别自动加载到组合框中的。当用户在ListView中选择某个联系人后再单击删除联系人菜单项,可将该联系人删除。当用户在ListView中双击某个联系人或单击修改或查看联系人菜单项,会弹出如下窗体(FrmMod.cs),以实现修改或查看联系人:不论是添加还是修改联系人时,组别都是可以修改的,注意姓名和组别不能为空。

通讯录总体功能要求

一.需求分析说明 (1) 1.通讯录总体功能要求: (1) 2. 各功能模块的功能描述: (1) 二.概要设计说明 (3) 1.模块调用图: (3) 2.各函数简要说明: (3) 三.详细设计说明 (4) 1.数据结构设计 (4) 2.主函数模块 (5) 3.密码验证模块 (5) 4.输入信息模块 (6) 5. 显示信息模块 (7) 6.查找模块 (7) 7.修改信息模块 (7) 8.删除信息模块 (8) 9. 信息加载 (8) 10.存盘模块 (8) 11. 密码修改模块 (8) 四.调试分析 (9) 1.问题一 (9) 2.问题二 (9) 3.问题三 (9) 五.用户使用说明 (10) 六.课程设计总结 (16) 七.测试结果 (17) 1.测试密码登陆 (17) 2.测试输入信息 (17) 3.测试显示信息 (18) 4.测试查找信息 (18) 5.测试修改信息 (19) 6.测试删除信息 (19) 7.测试加载信息 (20) 8.测试存盘 (21) 9.测试密码修改 (22) 参考书目 (23) 附录 (24)

一.需求分析说明 1.通讯录总体功能要求: 在window7系统下用vc6.0开发工具以双向链表作数据结构,编写一个通讯录管理系统。每条信息包含:姓名(name )街道(street)城市(city)邮编(eip)电话(tel)国家(state)。此系统具有友好的界面和较强的容错能力。 本系统具有以下几方面的功能: (1).密码验证passWord():通过密码登陆本系统。 (2).输入信息enter():通过键盘输入所需添加信息。 (3).显示信息display( ):显示所有通讯录信息。 (4).查找search( ):以名字为关键字查找用户信息。 (5).修改modify():修改指定的信息。 (6).删除信息del ( ):用户通过输入指定名字找到相关记录然后确定是否删除。 (7).存盘save ( ):把所有用户通过键盘录入的信息或者通过文件加载的信息以 文本文件存入硬盘。 (8).装入load( ) :从文本文件加载通讯录信息。 (9).密码修改modpw():由用户自己修改为指定的密码。 2. 各功能模块的功能描述: (1)主函数模块: 本模块的主要功能是初始化各种数据,根据用户选择的数字调用对应的

通讯录管理系统需求分析

通讯录管理系统需求分析 项目编号:S1-BS-HTML-001 l项目概述 1.引言 1.1编写目的 在完成了针对通讯录管理系统的前期调查,同时与多位软件使用者进行了全面深入地探讨和分析的基础上,提出了这份软件需求规格说明书。 此需求规格说明书对《通讯录管理系统》软件做了通讯录管理系统的用户需求分析,明确所要开发的软件应具有的功能、性能与界面,使系统分析人员及软件开发人员能清楚地了解用户的需求,并在此基础上进一步提出概要设计说明书和完成后续设计与开发工作。本说明书的预期读者为客户、业务或需求分析人员、测试人员、用户文档编写者、项目管理人员。 本说明书是整个软件开发的依据,它对以后阶段的工作起指导作用。本文也是项目完成后系统验收的依据。

1.2项目背景 本通讯录信息管理系统用计算机管理电子通讯录的一种计算机应用技术的创新,在计算机还未普及之前通讯管理都是由联系人采用名片,笔录手工记帐的方式来操作的.现在一般的通讯录管理都是采用计算机作为工具的实用的计算机通讯录管理程序来帮助人们进行更有效的通讯录信息管理。通讯录管理系统是典型的信息管理系统(mis),要求应用程序功能完备,易使用等特点。 1.3定义 需求:用户解决问题或达到目标所需的条件或功能;系统或系统部件要满足合同、标准,规范或其它正式规定文档所需具有的条件或权能。 2.任务概述 2.1目标 实现通讯录管理系统的基本功能,可以实现电话用户的查询、电话号码的查询、电话号码所在地的查询、电话号码的添加及删除等功能,以方便人们的记录和通讯。 2.2运行环境 2.2.2.1服务端 A. 操作系统:Windows 2003 Server 2.2.2.2客户端 A. Windows 95/98/me/Xp/2000/2003, Unix, Linux,Vista,Mac OS各版 2.3条件与限制 本通讯录信息管理系统用计算机管理电子通讯录的一种计算机应用技术的创新,在计算机还未普及之前通讯管理都是由联系人采用名片,笔录手工记帐的方式来操作的.现在一般的通讯录管理都是采用计算机作为工具的实用的计算机通讯录管理程序来帮助人们进行更有效的通讯录信息管理。通讯录管理系统是典型的信息管理系统(mis),要求应用程序功能完备,易使用等特点。 3.数据描述 开始 3.1数据流图 以可读写的方式打开一个数据文件 将此文件的内容读出,并存入一个新的结构体类型的数组中。 调用menu()菜单函数

通讯录管理 数据结构

#include #include #include typedef struct{ char num[20]; char name[20]; char phone[20]; char addr[20]; }datatype; typedef struct node{ datatype data; struct node * next; }Listnode; typedef Listnode * Linklist; Linklist head; Listnode *p; int menu_select( ); Linklist Createlist(void); void Insertnode(Linklist head,Listnode *p); Listnode *Listfind(Linklist head); void Delnode(Linklist head); void Printlist(Linklist head); int main(){ for( ; ; ){ switch(menu_select() ){ case 1: printf(" ***********************************************\n"); printf(" ************** 通讯录链表的建立***************\n"); printf(" ***********************************************\n"); head=Createlist(); break; case 2: printf(" ***********************************************\n"); printf(" ************** 通讯录信息添加*****************\n"); printf(" ***********************************************\n"); printf(" ** 编号(4) 姓名(3) 电话(13) 地址(10)**\n"); printf(" ***********************************************\n"); p=(Listnode *)malloc(sizeof(Listnode)); scanf("%s%s%s%s",p->data.num,p->https://www.360docs.net/doc/762504484.html,,p->data.phone,p->data.addr); Insertnode(head,p); break; case 3: printf(" ******************************\n"); printf(" ******* 通讯录信息查询*******\n");

通讯录 双向链表

//node.h #include #include #include #include #include struct data //数据 { char name[20]; //姓名 char tel[20]; //电话 int age; //年龄 }; class node //节点 { friend class link; //友远类 private: data person; //数据 node * next; node * pre; public: void show() //显示数据信息 { cout<<"姓名:"<

(完整版)通讯录管理系统数据结构毕业课程设计(C语言)

湖南工程学院课程设计报告 通讯录管理系统 姓名:李任

学院:计算机与通讯学院 专业:计算机科学与技术 班级:计算机0803班 指导教师:刘长松 目录 1.第一章:前言 (2) 2.第二章:概述 (3) 3.第三章:算法分析 (5) 4.第四章:主要流程图 (12) 5.第五章:程序源代码 (13) 6.第六章:测试及输出结果 (20)

7.第七章:课程设计体会 (23) 8.第八章:参考文献 (24) 第一章:前言 通过一个学期的学习,我认为要学好C语言程序这门课程,不仅要认真阅读课本知识,更重要的是要通过上机实践才能增强和巩固我的知识。 而C语言课程设计则对我们有以下几点帮助: 1. 进一步掌握和利用C语言进行程序设计的能力; 2. 进一步理解和运用结构化程序设计的思想和方法; 3. 初步掌握开发一个小型实用系统的基本方法; 4. 学会调试一个较长程序的基本方法; 5. 学会利用流程图或N-S图表示算法; 6. 掌握书写程设计开发文档的能力 (书写课程设计报告) 。 第二章:概述 一、本课程设计的目的和意义 本课程设计可加深对课堂理论学习的理解,增强动手能力,以培养学生合作的能力,为毕业设计作好实践环节上的准备。通讯录系统是在学校常见的计算机信息管理系统。它的主要任

务是对学生信息进行管理,如学生信息的输入、查询、修改、增加、删除,迅速准确地完成各种学生信息的统计和查询。 二、本课程设计主要内容 本系统有分7个功能:(1)写入数据(2)读取数据(3)追加数据(4)查找数据(5)备份数据(6)删除数据(7)还原数据。其主要利用结构类型,指针,数组,函数等C语言知识来实现。 第三章:算法分析 整个系统共分为8模块,主函数加7个子函数,从而实现7大功能:写入数据,读取数据,追加数据,查找数据,备份数据,删除数据,还原数据;各个程序的算法分析如下: (1)主函数main(): 利用for( ; ; )和switch()实现主界面的显示与各选项的连接; 流程图如下: (2)写入函数void input1(): 利用文件的fwrite()语句来实现数据的保存; 流程图如下: (3)读取数据void read1(): 利用文件的fread()语句来实现数据的读取;

数据结构 链表的应用 通讯录管理

数据结构链表的应用通讯录管理 实验要求: 一、设计一个含有多个菜单项的程序,菜单项内容如下: 1通讯录链表的建立 2通讯录链表的插入 3通讯录链表的查询 4通讯录链表的删除 5通讯录链表的输出 0退出管理系统 要求只能用0-5来选择菜单项,其他的输入无效 二、分别实现多个菜单项的功能,要求每个功能在操作时都有确认提示 三、编写一个程序实现整个通讯录管理系统,把主菜单的生成和各菜单项功能的实现作为子程序或者函数或者过程来实现。 四、要求关键语句必须要写注释。 #include"stdio.h" #include"string.h" #include"stdlib.h" typedefstructabc{//通讯录结点类型 charnum[5];//编号 charname[9];//姓名 charsex[3];//性别 charphone[13];//电话 charaddr[31];//地址 }DataType; typedefstructnode{//结点类型定义

DataTypedata;//结点数据域 structnode*next;//结点指针域 }ListNode; typedefListNode*LinkList; LinkListhead; ListNode*p; //函数说明 intmenu_select(); LinkListCreateList(void); voidInsertNode(LinkListhead,ListNode*p); ListNode*ListFind(LinkListhead); voidDelNode(LinkListhead); voidPrintList(LinkListhead); //主函数 voidmain() { for(;;){ switch(menu_select()) { case1: printf("**********************************\n"); printf("*通讯录链表的建立*\n"); printf("**********************************\n"); head=CreateList(); break; case2:

学校通讯录管理系统数据库设计

数据库设计 在本实例中使用的是SQLServer 2000数据库管理系统。数据库服务器安装的位置为本机,数据库名称为commu ni catio nserver 。下面将介绍数据库分析和设计、数据表的创建、数据表关系图和创建存储过程的内容。 4.2.1 数据库分析和设计 在本节中,将根据上一节系统功能的设计分析创建各数据表的实体E-R关系图,它是数 据库设计非常重要的一步,下面用E-R图的形式表示出各实体的属性。 1. 用户E-R实体图 用户的实体具有用户ID、密码、姓名、性别、电话、E-mail、用户权限7个属性,ER图如图4-5所示。 图4-5 用户E-R实体图 2. 地区E-R实体图 地区的实体具有地区编号、地区名称2个属性,E-R图如图4-6所示。 图4-6 地区E-R实体图 3. 职务E-R实体图 职务的实体具有职务编号、职务名称2个属性,E-R图如图4-7所示。 图4-7 职务E-R实体图 姓名用户权限性别 1 用户E-mail 地区 职务职务名称

4. 学校E-R 实体图 学校的实体具有学校名称、学校所在地区、在校学生人数3个属性,可用 E-R 图表示, 如图4-8所示。 (学校名称X 学校一(在校学生人数 图4-8 学校E-R 实体图 5. 通讯录E-R 实体图 通讯录的实体具有联系人姓名、地址、联系电话、所属职务、所在学校、所在单位、所 属地区7个属性,E-R 图如图4-9所示。 图4-9 通讯录E-R 实体图 4.2.2 数据表的创建 在上面一节中讲解了实体的 E-R 图,本节中将根据E-R 图的内容,创建企业信息管理系 统中的各数据表,在此系统中共涉及到 5个数据表的应用,分别为如下。 1、 字段采用camel 风格定义 2、 用不同颜色区分字段 主键:蓝色 外键:白色 既是主键又是外键:淡蓝色 普通字段:青绿 学校编号 学校所在地区 联系电话 通讯录 所在单位 * 所在学校 彳所属职务

数据结构课程设计通讯录的制作

数据结构课程设计通讯录 的制作 Modified by JEEP on December 26th, 2020.

软件学院 课程设计报告书 课程名称数据结构课程设计 设计题目通讯录的制作 专业班级软件工程XXXX 学号 XXXXXXXX 姓名 X X X 指导教师X X X 2012 年 01 月 目录 1、设计时间 (3) 2、设计目的 (3) 3、设计任务 (3) 4、设计内容 (3) 需求分析 (3) 总体设计 (4) 4.2.1本程序中用到的所有抽象数据类型的定义 (4) 4.2.2主程序的流程 (4) 详细设计 (6) 4.3.1定义的所有数据类型 (6) 4.3.2主函数 (11)

4.3.3函数的调用关系图 (12) 测试与分析 (13) 4.4.1测试 (13) 4.4.2分析 (19) 附录 (19) 5、总结与展望 (28) 参考文献 (29)

”4.4.2 m=n%HASHSIZE; ame); pp=p; while(H->elem[pp]!=NULL) { pp=collision(p,c); if(pp<0) { printf("createHash1第%d记录无法解决冲突",i+1); n",HASHSIZE,H->count); } void SearchHash1(HashTable* H,int c) { el); pp=p; while(H->elem[pp]!=NULL) { pp=collision(p,c); if(pp<0) { printf("第%d记录无法解决冲突",i+1); n",HASHSIZE,H->count); } void SearchHash2(HashTable* H,int c) { ame); printf("请输入第%d个记录的电话号码:\n",i+1); scanf("%s",a[i].tel); printf("请输入第%d个记录的地址:\n",i+1); scanf("%s",a[i].add); ame); for(i=0;i

通讯录管理系统(C语言)—单链表

广州大学物理与电子工程学院 程序与设计训练 通讯录管理系统实验报告 专业班级:电子121 设计人员:元达鹏 学号:1219200065 2013年6月24日

通讯录管理系统 一.需求分析 设计题目及需求: (1)查看功能:选择此功能时,列出下列三类选择。A 办公类 B 个人类 C 商务类,当选中某类时,显示出此类所有数据中的姓名和电话号码) (2)增加功能:能录入新数据(一个结点包括:姓名、电话号码、分类(可选项有:A 办公类 B 个人类 C 商务类)、电子邮件。例如:杨春135******** 商务类chuny@https://www.360docs.net/doc/762504484.html, (3)当录入了重复的姓名和电话号码时,则提示数据录入重复并取消录入;当通信录中超过15条信息时,存储空间已满,不能再录入新数据;录入的新数据能按递增的顺序自动进行条目编号。 (4)修改功能:选中某个人的姓名时,可对此人的相应数据进行修改 (5)删除功能:选中某个人的姓名时,可对此人的相应数据进行删除,并自动调整后续条目的编号。 系统功能需求分析: 主要包含以下几种功能: 1.建立通讯录(建立功能) 2.删除通讯人(删除功能) 3.保存通讯录(保存功能) 4.读取通讯录文件(读取功能) 5.查找通讯人(查找功能) 6.添加通讯人(添加功能) 7.修改通讯人信息(修改功能)

8.退出通讯录系统 二.概要设计 系统功能模块图: 主菜单 建立删除保存读取查找添加修改退出 建立功能:在主菜单中输入1,进入建立功能。用户自己输入通讯录文件名,建立一个新的通讯录,便开始输入信息,一旦想结束添加,在输入姓名处输入“*”结束录入。(当录入相同的姓名和电话时,系统会告 诉你已经重复录入) 删除功能:在主菜单中输入2,进入删除功能。用户输入待删除人的姓名,系统会自动显示待删除人的信息,并且提示是否删除该通讯人。(当输 入的姓名不存在的时候,系统会告诉你此人不存在) 保存功能:在主菜单中输入3,进入保存功能。将你已经写好的通讯录保存在建立时创建的文件里面。(当保存成功后,系统会告诉你保存成功) 读取功能:在主菜单中输入4,进入读取功能。读取一个任意一个已经存在的文件,用户可以输入想要读取的文件,一旦文件读取成功,系统会告诉你文件读取成功。 查找功能:在主菜单中输入5,进入查找功能。查找方式有三种:1. 按姓名查

数据结构课程设计-通讯录管理系统

《数据结构》 课程设计报告书 题目:通讯录管理系统 系别:计算机科学与应用系学号: 学生姓名: 指导教师: 完成日期:2012年5月28日

1 问题描述 (1)题目内容:通讯录管理。 (2)基本要求:利用单链表实现通讯录的建立、通讯者的插入、通讯者的删除、通讯者的查询以及通讯录的输出。 (3)设计目的:通过本次课程设计,了解通讯录的一些基本功能。掌握利用单链表进行插入,查找,用关键字建立单链表。 2 需求分析 经过本次的课程设计,我认为通讯录主要实现的功能如下: (1)添加信息:一个通讯录应该有其基本的添加功能。在程序设计时,我通过一个具有添加功能的函数,实现了个人信息的添加,如:姓名,性别,电话号码,QQ号码,地址。 (2)删除信息:当你不需要某个联系人的信息时,可以直接将该人的信息删除。 (3)查找:一个通讯录应该具有令一基本功能就是查找,本设计时可以按联系人为关键字查找的,只要你输入要查找人的姓名或手机号码或QQ号码就可出来相应的个人信息。 (4)输出:一个通讯录应该具有输出所有联系人的功能,本设计按照次序可以从头到尾把通讯录中的所有联系人都输出,供自己查看。 (5)退出:当你做完你要做的事情之后,就可以退出该程序。 3 总体设计 3.1 算法的定义 LinkList Creat_LinkList()创建空单链表 void Insert_LinkList(LinkList H)建立通讯录,录入联系人的信息,可以把联系人的姓名,性别,手机号,QQ号,地址录入系统。 void Locate_LinkList(LinkList H)按照联系人的姓名,手机号码,QQ号码查找通讯录中联系人的信息。 void Delete_LinkList(LinkList H)按照联系人的姓名,手机号码,QQ号码删除联系人的所有信息。 void print_LinkList(LinkList H)输出通讯录中的所有联系人的信息供使用者查看。

通讯录管理系统数据库设计说明

通讯录管理系统数据库设计与实现 1 需求简介() 1.1功能概述 1.2数据要求 功能中涉及的数据项说明。 1.用分组基本信息(Admin):包括分组号、分组名; 2.用户基本信息(Dormitory):包括账号、密码、昵称、个性签名,这样可以 方便分清用户记录的联系人;

3.联系人基本信息(linkman):包括、性别、关系、手机号、座机号、QQ、E-mail、 生日、工作单位、地址、所属用户、所属分组; 1.3数据字典 数据项列表 数据项编号数据项名数据项含义与其它数据项的关系存储结构别名TXL-1 G_number 分组号CHAR(10) TXL-2 G_name 分组名CHAR(20) TXL-3 ID 所属用户等同于账号ID CHAR(10) TXL-4 ID 账号CHAR(10) TXL-5 Nickname 昵称CHAR(20) TXL-6 Password 密码CHAR(20) TXL-7 Qianming 签名CHAR(50) TXL-8 L_number 联系人号CHAR(100) TXL-9 Name CHAR(20) TXL-10 Sex 性别CHAR(2) TXL-11 Concern 关系CHAR(10) TXL-12 Phone 手机号CHAR(11) TXL-13 Landline 座机号CHAR(10) TXL-14 QQ QQ号CHAR(10) TXL-15 Email E-mail CHAR(20) TXL-16 Work 工作单位CHAR(30) TXL-17 Address 地址CHAR(30) TXL-18 Birthday 生日Date 数据结构列表 数据结构编号数据结构名 数据结构 含义 组成 DS-1 Grouping 分组G_number,G_name,ID, DS-2 Worker 用户ID,Nickname,Password,Qianming DS-3 Linkman 联系人L_number,Name,Sex,Concern,Phone,Landline,QQ,Email,Work,Address,Birthday,ID,G_number

数据结构 通讯录

数据结构课程设计报告 2010年01月03日

目录 1、需求分析 (3) 问题描述 (3) 基本要求 (3) 2、概要设计 (3) 数据结构 (3) 程序模块 (3) 3、详细设计 (4) 4、测试与分析 (8) 5、总结 (8) 6、附录(原程序清单) (10)

1.需求分析 数据结构课程主要是研究非数值计算的程序设计中所出现的计算机操作对象以及它们之间的关系和操作的学科。学习数据结构是为了将实际问题中所涉及的对象在计算机表示出来并对它们进行处理。通过课程设计可以提高思维能力、促进综合应用能力和专业素质的提高。 1.1问题描述 现代人社会交往越来越多,人们随身携带有通讯录,对通讯录进行必要的管理,对人们实现快速查询记录提供了极大的方便。考虑到要对通讯录进行快速检索,所以采用C语言来实现通讯录查找系统。要求的模块包括:插入、查找、删除、修改、保存。人机界面友好,使用图形化界面,菜单的选择用动画显示。 1.2基本要求 (1)输入的形式与输入值的范围 name 字符 phone 字符 ad 字符 (2)输出的形式 姓名、电话号码及住址以字符输出 (3)程序所能达到的功能 1)记录姓名、地址、电话项 2)查找并显示给定电话号码的记录 2.概要设计 1)数据结构 依据给定的通讯录信息和数据格式,链表结点必须用结构实现。结构类型的层次结构:typedef struct node {char name[20]; char ad[50]; char phone[20]; struct node *next; }slink; 2)程序模块 主函数 Main()

数据结构顺序表(电话通讯录)

数据结构用顺序表实现的电话通讯录(C语言) #include #include #include #include #define FALSE 0 #define ERROR 0 #define OK 1 #define INFEASIBLE -1 #define LIST_INIT_SIZE 10 #define LIST_INCREMENT 5 #define N 5 typedefint Status; typedefstruct { char name[10]; //姓名 char num[15]; //号码 }student; typedefstruct { student *elem; //存储空间基址 int length; //当前长度 intlistsize; //当前分配的存储空间(以sizeof(student)为单位) }Sqlist; Sqlist L; //定义全局变量L 为Sqllist类型 Status ListInsert(Sqlist&L,inti,student e) { //插入学生信息到顺序表L中 int j; student *newbase; if(i<1||i>L.length+1) return ERROR; //i值不合法 if(L.length>=L.listsize) //当前存储空间已满,增加分配 { newbase=(student *)realloc(L.elem,(LIST_INIT_SIZE+LIST_INCREMENT)*(sizeof(student))); if(!newbase) //存储分配失败 exit(OVERFLOW); L.elem=newbase; //新基址 L.listsize+=LIST_INCREMENT; //增加存储容量 } for(j=L.length;j>=i;j--) L.elem[j]=L.elem[j-1]; //插入位置及之后元素的右移 L.elem[i-1]=e; L.length++; return OK;

通讯录管理系统 链表

一、通讯录管理系统 1.题目要求 通讯录一般包括通讯者的编号、姓名、性别、电话及地址等信息,设计一个通讯录要求实现通讯者的插入、查询、删除、更新、排序操作。 struct node { char num[5]; //编号 char name[8]; //姓名 char sex; //性别 char tel[8]; //电话 char address[100]; //地址 }; 2.应用程序功能 开始运行时界面如下: 通讯录链表建立界面如下:

通讯录链表插入界面如下: 通讯录链表查询界面如下: 按编号查询界面如下:

按姓名查询编号如下: 通讯录链表删除界面如下: 通讯录链表输出界面如下: 3.输入数据类型、格式和内容限制 输入数据类型为字符型,但在输入过程中不可包含空格,如输入地址过程中不可出现空

格! 4.主要算法模块描述 流程图: 5.源程序代码 #include #include "iostream" int flag1=0; #include "string.h" #include "stdlib.h" #include "windows.h" using namespace std; typedef struct { //通讯录结点类型char num[5]; //编号 char name[9]; //姓名

char sex[3]; //性别 char phone[13]; //电话 char addr[31]; //地址 } DataType; typedef struct node { //结点类型定义 DataType data; //结点数据域 struct node *next; //结点指针域 } ListNode; typedef ListNode *LinkList; LinkList head; ListNode *p; LinkList CreateList(void); void InsertNode(LinkList head,ListNode *p); ListNode *ListFind(LinkList head); void DelNode(LinkList head); void PrintList(LinkList head); /*******尾插法建立带头结点的通讯录链表算法*******/ LinkList CreateList(void) { LinkList head=(ListNode *)malloc(sizeof(ListNode)); //申请头结点ListNode *p,*rear; char flag='y'; //int flag=0; //结束标志置0 rear=head; //尾指针初始指向头结点 while (flag=='y') { p=(ListNode *)malloc(sizeof(ListNode)); //申新结点 printf("编号(4) 姓名(8) 性别电话(11) 地址(31)\n"); printf("-----------------------------------------------\n"); printf("\n添加的编号:\n"); cin>>p->data.num; printf("\n添加的姓名:\n"); cin>>p->https://www.360docs.net/doc/762504484.html,; printf("\n性别:\n"); cin>>p->data.sex; printf("\n电话:\n"); cin>>p->data.phone; printf("\n地址:\n"); cin>>p->data.addr; rear->next=p; //新结点连接到尾结点之后 rear=p; //尾指针指向新结点 printf("继续建表?(y/n):"); cin>>flag;

相关文档
最新文档