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

合集下载

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

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

#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAX 100//定义最大值typedef struct ENode{ int num;char Add[MAX];//地址char Name[MAX];//名字char telephone[MAX];//电话号码struct ENode *next;}ENode,*ENoteBook;ENoteBook CreatList(int n){ENoteBook P,Q,H;int i,x;for(i=1;i<=n;i++){P=(ENoteBook)malloc(sizeof(ENode));printf("请输入地址\n");gets(P->Add);gets(P->Add);printf("请输入名字\n");gets(P->Name);printf("请输入电话\n");gets(P->telephone);if(i==1) H=P;else Q->next=P;Q=P;}P->next=NULL;return H;}void InsertNoteBook(ENoteBook &L) {ENoteBook Q;Q=(ENoteBook)malloc(sizeof(ENode)); printf("现在输入插入元素信息\n"); printf("\n");printf("请输入地址\n");gets(Q->Add);//gets(Q->Add);// puts(Q->Add);printf("请输入名字\n");gets(Q->Name);printf("请输入电话\n");gets(Q->telephone);Q->next=L->next;//L->next=NULL;L->next=Q;printf("个人信息添加完成\n");}PrintNoteBook(ENoteBook &L)//打印函数{ENoteBook P;P=L;if(L!=NULL)printf("\t\t电子通讯录\n");printf("名字地址电话\n");do{printf("%s %s %s",P->Name,P->Add,P->telephone);printf("\n");P=P->next;}while(P!=NULL);}Deletemember(ENoteBook L){char str[MAX];ENoteBook P,Q;printf("请输入你要删除的名字\n");gets(str);P=L;while(P->next!=NULL){if (strcmp(str,P->next->Name)==0){P->next=P->next->next;goto end;}elseP->next=P->next->next;}printf("出错了!");end: printf("删除完成!\n");}void Checkmember(ENoteBook &L)//按名字{char str[MAX];ENoteBook Q;printf("请输入你要查找的名字\n");gets(str); gets(str);Q=L;while(Q->next!=NULL){ if (strcmp(str,Q->Name)==0){puts(Q->Name);puts(Q->Add);puts(Q->telephone);} else Q=Q->next;}printf("你出错了\n");}main(){ENoteBook q;int n;int i;eww: printf("欢迎使用电子通讯本管理软件\n");printf("----1. 创建信息----\n");printf("----2. 插入信息----\n");printf("----3. 打印信息----\n");printf("----4. 查找信息----\n");printf("----5 .删除信息----\n");printf("请选择您要执行的操作\n");scanf("%d",&i);switch(i){case 1: printf("请输入元素的个数\n");scanf("%d",&n);q=CreatList(n); goto eww; break;case 2: InsertNoteBook(q);goto eww; break;case 3: PrintNoteBook(q); goto eww; break;case 4: Checkmember(q);goto eww; break;case 5: Deletemember(q);goto eww;break;default:printf("操作出错\n");goto eww;}//Deletemember(q); }。

c语言实现通讯录管理系统(用链表实现)

c语言实现通讯录管理系统(用链表实现)

c语⾔实现通讯录管理系统(⽤链表实现)题⽬:通讯录(通过链表实现)设计并实现⼀个简易的通讯录软件,管理个⼈通讯记录。

⼀条通讯记录可包括:姓名、⼯作单位、⼿机、住宅电话、E-Mail、家庭住址等(可⾃⾏增删,但不可过少)。

该系统应实现以下基本功能:(1)增加新的通讯记录。

(2)删除已有的通讯记录。

(3)修改已有的通讯记录。

(4)浏览全部或指定(如指定姓名、⼯作单位等)的通讯记录。

(5)合理组织排列各项功能,界⾯可使⽤键盘操作。

(6)以⽂件的形式存储数据。

说明:⼤⼀时的c语⾔课设,⽤链表实现⼀个通讯录管理系统,为了美观好看,花了很多时间调整齐度,记录⼀下⼤⼀时的作业。

其主要功能是对通讯录可输⼊,显⽰,插⼊,删除,最难是可保存,这个学⽂件的时候不怎么会。

内容我⾃⼰弄了7个,名字,性别,⼯作单位,⼿机,住宅电话,E-Mail,家庭住址(其他太多其实都是⼀样的,就懒得加了)。

主要运⽤到对指针中的链表的功能和使⽤要⽐较扎实,分部列写就可以了。

实现图⽚:附上代码:1 #include <stdio.h>2 #include <string.h>3 #include <stdlib.h>4 typedef struct student5 {6char name[20];//名字7char wm[20];//性别8char work[100];//⼯作单位9char stel[20];//⼿机10char htel[20];//住宅号码11char mail[20];//E-Mail12char home[100];//家庭住址13struct student *next;14 }stu;15 stu *head;//头指针16void screen()//主菜单17 {18 printf("\n=======================================================\n");19 printf(" 欢迎来到通讯录管理系统\n\n");20 printf(" 1.输⼊数据 2.显⽰数据\n");21 printf(" 3.插⼊数据 4.删除数据\n");22 printf(" 5.查看数据 6.修改数据\n");23 printf(" 7.保存数据 8.返回主菜单\n");24 printf("\n~~~~~~输~~~~~~⼊~~~~~~9~~~~~~退~~~~~~出~~~~~~程~~~~~~序\n");25 }26void input()//输⼊数据27 {28int ans;//判断是否继续输⼊29 stu *p1,*p2;30 p1=(stu *)malloc(sizeof(stu));//申请内存来⽤31if(p1!=NULL)32 {33 printf("========输⼊数据========\n");34 head=p1;35while(1)36 {37 printf("名字:");38 scanf("%s",&p1->name);39 printf("性别:");40 scanf("%s",&p1->wm);41 printf("⼯作单位:");42 scanf("%s",&p1->work);43 printf("⼿机:");44 scanf("%s",&p1->stel);45 printf("住宅号码:");46 scanf("%s",&p1->htel);47 printf("E-Mail:");48 scanf("%s",&p1->mail);49 printf("家庭地址:");50 scanf("%s",&p1->home);51 printf("===================================\n");52 p2=p1;53 p1=(stu *)malloc(sizeof(stu));//申请下⼀个要⽤的空间54if(p1!=NULL)55 p2->next=p1;56 printf("请选择是否继续输⼊:1.继续 2.退出\n请选择:");//⽤户选择57 scanf("%d",&ans);58if(ans==1)//继续59continue;60else//退出61 {62 printf("========输⼊完毕========\n");63 p2->next=NULL;64free(p1);//将申请的的⽆⽤内存释放65break;66 }67 }68 }69 }70void look(stu *p1)//显⽰数据71 {72 printf("========显⽰数据========\n");73while(p1!=NULL)74 {75 printf("名字:%s\n",p1->name);76 printf("性别:%s\t",p1->wm);77 printf("⼯作单位:%s\t",p1->work);78 printf("⼿机:%s\t",p1->stel);79 printf("住宅号码:%s\t",p1->htel);80 printf("E-Mail:%s\t",p1->mail);81 printf("家庭住址:%s\n",p1->home);82 printf("=====================================\n");83 p1=p1->next;84 }85 printf("========显⽰完毕========\n");86 }87void insert()//插⼊数据88 {89int ans;//选择插⼊位置90char name[20];//插⼊者的名字91 printf("========插⼊数据========\n");92 stu *p1,*p2,*p3;93 p1=head;94 p3=(stu *)malloc(sizeof(stu));//申请内存95 p3->next=NULL;96 printf("请输⼊插⼊者的数据:\n");97 printf("名字:");98 scanf("%s",&p3->name);99 printf("性别:");100 scanf("%s",&p3->wm);101 printf("⼯作单位:");102 scanf("%s",&p3->work);103 printf("⼿机:");104 scanf("%s",&p3->stel);105 printf("住宅号码:");106 scanf("%s",&p3->htel);107 printf("E-Mail:");108 scanf("%s",&p3->mail);109 printf("家庭地址:");110 scanf("%s",&p3->home);111 printf("请选择插⼊位置:1.⾸位置插⼊ 2.尾部插⼊ 3.插到某⼈前⾯\n请选择:");112 scanf("%d",&ans);113switch(ans)114 {115case1://放到头指针116 p3->next=p1;117 head=p3;118break;119case2://放到尾部120while(p1->next!=NULL)121 p1=p1->next;122 p1->next=p3;123break;124case3://放到某⼈前⾯125 printf("请输⼊插到谁前⾯名字:");126 scanf("%s",name);127while(strcmp(name,p1->name)!=0)128 {129 p2=p1;130 p1=p1->next;131 }132 p2->next=p3;133 p3->next=p1;134break;135 }136 printf("========插⼊成功========\n");137 }138void deleted()//删除数据139 {140 stu *p1,*p2;141char name[20];//删除者名字142 printf("========删除数据========\n");143 printf("请输⼊要删除者的名字:");144 scanf("%s",name);145 p1=head;146if(head==NULL)//通讯录已经没数据了147 {148 printf("通讯录⾥什么也没有了。

c语言单链表的基本操作

c语言单链表的基本操作

c语言单链表的基本操作C语言的单链表是一种常见的数据结构,常常用于存放数据的操作。

在实际开发中,掌握C语言单链表的基本操作是非常重要的。

下面,我们将分步骤阐述C语言单链表的基本操作。

第一步:定义单链表节点的结构体单链表的每个节点都有三个部分组成:数据域、指针域和链头。

其结构体如下所示:```struct Listnode{int data; //数据域struct Listnode* next; //指针域};```第二步:创建单链表创建单链表的方法有很多,这里我们介绍一个使用头插法的创建方法。

该方法需要定义一个头节点,然后将新的节点插到头节点后面。

代码如下所示:```struct Listnode * create(){struct Listnode * head = NULL; //定义头节点为空int x; //定义数据变量xprintf("请输入数据:");while (scanf("%d", &x) != EOF) //判断当前输入是否结束{struct Listnode * p = (structListnode*)malloc(sizeof(struct Listnode)); //利用malloc函数为新节点分配内存p->data = x; //将x的值存储进新开辟的节点p->next = head; //将head指向的节点作为p节点的下一个节点head = p; //然后将p作为新的head}return head; //返回头节点}```第三步:遍历单链表遍历单链表需要用到while循环,直到链表中没有节点可以遍历。

遍历的过程中,可以利用指针打印节点的数据值。

代码如下所示:```void traverse(struct Listnode *head){if (head == NULL) //判断链表是否为空printf("链表为空!");struct Listnode * p = head; //定义一个指向head节点的指针 while (p != NULL) //当指针p不为空时{printf("%d ", p->data); //打印节点中的数据p = p->next; //指针p指向下一个节点}}```第四步:插入节点在插入节点前,需要先找到插入位置的前一个节点。

c语言单链表的实现

c语言单链表的实现

c语言单链表的实现摘要:1.引言2.C 语言单链表的基本概念3.单链表的结构定义4.单链表的创建5.单链表的插入6.单链表的删除7.单链表的遍历8.单链表的应用实例9.总结正文:1.引言在计算机科学中,链表是一种重要的数据结构,它允许我们在运行时插入和删除元素。

C 语言是一种广泛使用的编程语言,其中包含了对链表的支持。

本文将介绍C 语言单链表的实现。

2.C 语言单链表的基本概念单链表是一种线性数据结构,其中每个元素包含两个部分:数据和指向下一个元素的指针。

这种结构使得我们可以在运行时插入和删除元素,而不需要移动其他元素。

3.单链表的结构定义在C 语言中,我们可以使用结构体来定义单链表的节点。

一个典型的单链表节点定义如下:```typedef struct Node {int data; // 数据部分struct Node *next; // 指向下一个节点的指针} Node;```4.单链表的创建要创建一个单链表,我们需要先创建一个节点,然后将该节点的指针赋值给链表头。

例如:```ode *createList() {Node *head = (Node *)malloc(sizeof(Node)); // 创建一个新节点head->data = 1;head->next = NULL; // 头节点的指针初始化为NULLreturn head;}```5.单链表的插入要在单链表中插入一个新元素,我们需要创建一个新节点,然后将该节点的指针赋值给要插入的位置。

例如:```void insertNode(Node *head, int data) {Node *newNode = (Node *)malloc(sizeof(Node)); // 创建一个新节点newNode->data = data;newNode->next = head; // 新节点的指针指向原链表头return head; // 返回新的链表头}```6.单链表的删除要从单链表中删除一个元素,我们需要遍历链表,找到要删除的元素,并修改指针。

通讯录管理系统 链表

通讯录管理系统  链表

一、通讯录管理系统1.题目要求通讯录一般包括通讯者的编号、姓名、性别、电话及地址等信息,设计一个通讯录要求实现通讯者的插入、查询、删除、更新、排序操作。

struct node{char num[5]; //编号char name[8]; //姓名char sex; //性别char tel[8]; //电话char address[100]; //地址};2.应用程序功能开始运行时界面如下:通讯录链表建立界面如下:通讯录链表插入界面如下:通讯录链表查询界面如下:按编号查询界面如下:按姓名查询编号如下:通讯录链表删除界面如下:通讯录链表输出界面如下:3.输入数据类型、格式和内容限制输入数据类型为字符型,但在输入过程中不可包含空格,如输入地址过程中不可出现空格!4.主要算法模块描述流程图:5.源程序代码#include<stdio.h>#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; //结束标志置0rear=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->;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;rear->next=NULL; //终端结点指针置空return head; //返回链表头指针}/*********在通讯录链表head中插入结点************/void InsertNode(LinkList head,ListNode *p){ListNode *p1,*p2;p1=head;p2=p1->next;while(p2!=NULL && strcmp(p2->data.num,p->data.num)<0){p1=p2; //p1指向刚访问过的结点p2=p2->next; //p2指向表的下一个结点}p1->next=p; //插入p所指向的结点p->next=p2; //连接表中剩余的结点}/**********有序通讯录链表的查找****************/ListNode *ListFind(LinkList head){ListNode *p;char num[5];char name[9];char pp;printf("==================\n");printf(" a. 按编号查询\n");printf(" b. 按姓名查询\n");printf("==================\n");printf(" 请选择:");p=head->next;cin>>pp;if (pp=='a'||pp=='A'){printf("请输入要查找者的编号:");cin>>num;while (p&&strcmp(p->data.num,num)<0) p=p->next;if ((p==NULL)||strcmp(p->data.num,num)>0) p=NULL; //没有查到要查找的通讯信息}if (pp=='b'||pp=='B'){printf(" 请输入要查找者的姓名:");cin>>name;while(p&&strcmp(p->,name)!=0) p=p->next;}return p;}/********通讯录链表上的结点删除*****************/void DelNode(LinkList head){char cho;ListNode *p,*q;p=ListFind(head); //调用查找函数if (p==NULL){printf("没有查到要删除的通讯者!\n");return;}else if(p!=NULL){printf("真的要删除该结点吗?(y/n)");cin>>cho;if (cho=='y'||cho=='Y'){q=head;while ((q!=NULL)&&(q->next!=p)) q=q->next;q->next=p->next; //删除结点free(p); //释放被删结点空间printf("删除成功!\n");}}}/********通讯录链表的输出函数**********/void PrintList(LinkList head){ListNode *p;p=head->next;printf("编号姓名性别联系电话地址\n");printf("--------------------------------------------------------------------------------\n");while (p!=NULL){printf("%s,%s,%s,%s,%s\n",p->data.num,p->,p->data.sex,p->data.phone,p->data.a ddr);printf("---------------------------------------------------------------------------------\n");p=p->next; //后移一个结点}}void main(){int choice,j=1;while(j){printf("\n\n\n\n\n");printf("\t\t\t\t通信录链表\n");printf("\n\t\t\t******************************");printf("\n\t\t\t* 1--- 通信录链表建立*");printf("\n\t\t\t* 2--- 通信录链表插入*");printf("\n\t\t\t* 3--- 通信录链表查询*");printf("\n\t\t\t* 4--- 通信录链表删除*");printf("\n\t\t\t* 5--- 通信录链表输出*");printf("\n\t\t\t* 0--- 退出管理系统*");printf("\n\t\t\t******************************");printf("\n\t\t\t请选择菜单号(0--5):");cin>>choice;getchar();switch(choice){case 1:{printf("**********************************\n");printf("* 通讯录链表的建立*\n");printf("**********************************\n");head=CreateList( );flag1=1;system("cls");break;}case 2:{if(flag1!=1) {printf("请先建立表!");Sleep(1500); system("cls");}printf("**********************************\n");printf("* 通讯者信息的添加*\n");printf("**********************************\n");printf("编号(4) 姓名(8) 性别(3) 电话(11) 地址(31)\n");printf("************************************* \n");p=(ListNode *)malloc(sizeof(ListNode)); //申请新结点printf("\n添加的编号:\n");cin>>p->data.num;printf("\n添加的姓名:\n");cin>>p->;printf("\n性别:\n");cin>>p->data.sex;printf("\n电话:\n");cin>>p->data.phone;printf("\n地址:\n");cin>>p->data.addr;InsertNode(head,p);system("cls");break;}case 3:{if(flag1!=1) {printf("请先建立表!");Sleep(1500);system("cls");}else{printf("***********************************\n");printf("* 通讯录信息的查询*\n");printf("***********************************\n");p=ListFind(head);if (p!=NULL){printf("编号姓名性别联系电话地址\n");printf("--------------------------------------------------\n");printf("%s,%s,%s,%s,%s\n",p->data.num,p->,p->data.sex,p->data.phone,p->data.a ddr);printf("---------------------------------------------------\n");}else printf("没有查到要查询的通讯者!\n");}break;}case 4:{if(flag1!=1) {printf("请先建立表!"); Sleep(1500);}else{printf("***********************************\n");printf("* 通讯录信息的删除*\n");printf("***********************************\n");DelNode(head); //删除结点}break;}case 5:{if(flag1!=1) {printf("请先建立表!"); Sleep(1500);}else{printf("************************************\n");printf("* 通讯录链表的输出*\n");printf("************************************\n");PrintList(head);}break;}case 0:j=0;system("cls");break;default:printf("\t\t\n 输入有错,请重新输入!\n");Sleep(1500);system("cls");break;}}}。

c语言通讯录管理系统

c语言通讯录管理系统

一课程设计要求1通讯录要求惯例的信息结构体成员有:姓名,单位,电话,家庭住址。

2程序菜单为:************************MEUN***************************0.Enter record /*输入记录*/1.List the file /*显示全部记录*/2.Search record on name /*查找记录*/3.display record on name /*按序号显示记录*/4.Delete a record /*删除记录*/5.add record /*增加记录*/6.sort by name /*按姓名排序*/7.Quit /*退出*/3定义多个子函数与菜单对应:/***********以下是函数原型************/int menu_Select(); /*主菜单函数*/void Init();/*单链表初始化*/void Create();/*创建单链表,输入记录*/void List (ADDRESS t[],int n); /*显示全部记录*/void SearchByName (ADDRESS t[],int n); /*按姓名查找*/int Delete (ADDRESS t[],int n); /*删除记录*/int Delete (ADDRESS t[],int n); /*删除记录*/int Add (ADDRESS t[],int n); /*插入记录*/void SearchByIndex (ADDRESS t[],int n); /*按序号查找显示序列 */ void Sort(ADDRESS t[],int n); /*按姓名排序*/二功能框图图2.1图2.2查询功能流程图图2.3删除功能流程图三主要功能的实现1 结构体由于使用静态数组需要预先估计记录数,所以先预定义一个常数M 表示记录,也就是数组的大小,记录联系人的信息至少应有姓名、单位、电话。

利用c语言实现电话簿管理系统课程设计

利用c语言实现电话簿管理系统课程设计

利用c语言实现电话簿管理系统课程设计电话簿管理系统VER1.0系别 : 计算机科学与技术系专业(班级):作者(学号):指导教师:完成日期: 2011年6月15日蚌埠学院教务处制目录1摘要 ..................................................................... ................................................................. 3 第一章前言 ..................................................................... (4)第二章电话簿管理系统介绍 ..................................................................... (5)2.1 流程图 ..................................................................... (5)2.2 程序编写概要 ..................................................................... .................................. 6 第三章主要功能实现 ..................................................................... . (7)3.1 删除功能设计 ..................................................................... . (7)添加功能设计 ..................................................................... .................................. 7 3.2第四章源程序...................................................................... ............................................................... 9 第五章系统测试 ..................................................................... ........................................................ 20 第六章结语 ..................................................................... . (25)致谢 ..................................................................... ............................................................... 26 参考文献 ..................................................................... (26)2摘要电话簿管理系统是利用单链表实现电话簿管理,进而掌握C语言中的结构体、链表,指针、函数(系统函数,自定义函数)等C语言知识。

学生通讯录管理系统c语言编程

学生通讯录管理系统c语言编程

学生通讯录管理系统c语言编程以下是一个简单的C语言程序,用于管理学生通讯录。

该程序可以添加、显示、查找和删除学生信息。

c复制代码:#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX_STUDENTS 100#define MAX_NAME_LENGTH 50// 学生结构体struct Student {char name[MAX_NAME_LENGTH];int age;char gender;char phone[15];char email[50];};// 学生数组struct Student students[MAX_STUDENTS];int num_students = 0;// 添加学生信息void add_student() {if (num_students >= MAX_STUDENTS) {printf("Error: Reached maximum number of students\n");return;}struct Student new_student;printf("Enter name: ");scanf("%s", new_);printf("Enter age: ");scanf("%d", &new_student.age);printf("Enter gender (M/F): ");scanf(" %c", &new_student.gender);printf("Enter phone number: ");scanf("%s", new_student.phone);printf("Enter email: ");scanf("%s", new_student.email);students[num_students] = new_student;num_students++;}// 显示所有学生信息void display_students() {printf("Name\tAge\tGender\tPhone\tEmail\n");for (int i = 0; i < num_students; i++) {printf("%s\t%d\t%c\t%s\t%s\n", students[i].name, students[i].age, students[i].gender, students[i].phone, students[i].email);}}// 查找学生信息void find_student() {char name[MAX_NAME_LENGTH];printf("Enter student name: ");scanf("%s", name);for (int i = 0; i < num_students; i++) {if (strcmp(students[i].name, name) == 0) {printf("Name: %s\n", students[i].name);printf("Age: %d\n", students[i].age);printf("Gender: %c\n", students[i].gender); printf("Phone: %s\n", students[i].phone); printf("Email: %s\n", students[i].email); return;}}printf("Error: Student not found\n");}// 删除学生信息void delete_student() {char name[MAX_NAME_LENGTH];printf("Enter student name: ");scanf("%s", name);int found = 0;for (int i = 0; i < num_students; i++) {if (strcmp(students[i].name, name) == 0) { found = 1;for (int j = i; j < num_students - 1; j++) { students[j] = students[j+1];}num_students--;break;}}if (!found) {printf("Error: Student not found\n");} else {printf("Student deleted successfully\n"); }}int main() {int choice;do {printf("\nMenu:\n");printf("1. Add student\n");printf("2. Display students\n");printf("3. Find student\n");printf("4. Delete student\n");printf("5. Exit\n");printf("Enter choice: ");scanf("%d", &choice);switch (choice) {case 1: add_student(); break;case 2: display_students(); break;case 3: find_student(); break;case 4: delete_student(); break;case 5: printf("Exiting...\n"); break; default: printf("Invalid choice\n"); break; }} while (choice != 5);return 0。

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

广州大学物理与电子工程学院程序与设计训练通讯录管理系统实验报告专业班级:电子121设计人员:元达鹏学号:**********2013年6月24日通讯录管理系统一.需求分析设计题目及需求:(1)查看功能:选择此功能时,列出下列三类选择。

A 办公类 B 个人类 C 商务类,当选中某类时,显示出此类所有数据中的姓名和电话号码)(2)增加功能:能录入新数据(一个结点包括:姓名、电话号码、分类(可选项有:A 办公类 B 个人类 C 商务类)、电子邮件。

例如:杨春135****4454商务类*************(3)当录入了重复的姓名和电话号码时,则提示数据录入重复并取消录入;当通信录中超过15条信息时,存储空间已满,不能再录入新数据;录入的新数据能按递增的顺序自动进行条目编号。

(4)修改功能:选中某个人的姓名时,可对此人的相应数据进行修改(5)删除功能:选中某个人的姓名时,可对此人的相应数据进行删除,并自动调整后续条目的编号。

系统功能需求分析:主要包含以下几种功能:1.建立通讯录(建立功能)2.删除通讯人(删除功能)3.保存通讯录(保存功能)4.读取通讯录文件(读取功能)5.查找通讯人(查找功能)6.添加通讯人(添加功能)7.修改通讯人信息(修改功能)8.退出通讯录系统二.概要设计系统功能模块图:建立功能:在主菜单中输入1,进入建立功能。

用户自己输入通讯录文件名,建立一个新的通讯录,便开始输入信息,一旦想结束添加,在输入姓名处输入“*”结束录入。

(当录入相同的姓名和电话时,系统会告诉你已经重复录入)删除功能:在主菜单中输入2,进入删除功能。

用户输入待删除人的姓名,系统会自动显示待删除人的信息,并且提示是否删除该通讯人。

(当输入的姓名不存在的时候,系统会告诉你此人不存在)保存功能:在主菜单中输入3,进入保存功能。

将你已经写好的通讯录保存在建立时创建的文件里面。

(当保存成功后,系统会告诉你保存成功)读取功能:在主菜单中输入4,进入读取功能。

读取一个任意一个已经存在的文件,用户可以输入想要读取的文件,一旦文件读取成功,系统会告诉你文件读取成功。

查找功能:在主菜单中输入5,进入查找功能。

查找方式有三种:1. 按姓名查找 2. 按类型查找 3. 查看所有人添加功能:在主菜单中输入6,进入添加功能。

在还没有读取或者建立一个新的通讯录的时候,添加功能是无效的,系统会告诉你请你先新建立一个通讯录或者先读取通讯录文件。

进入添加功能以后,可以按提示添加通讯人信息。

修改功能:在主菜单中输入7,进入修改功能。

在还没有读取或者建立一个新的通讯录的时候,修改功能也是无效的,系统会告诉你请你先新建立一个通讯录或者先读取通讯录文件。

修改功能是和删除功能一样,也是通过姓名进行查找的。

退出功能:在主菜单中输入8,退出通讯录管理系统。

三.详细设计(1)通讯录#define ID struct tel //宏定义,方便以后的使用struct tel{char name[10]; //姓名char tele[15]; //电话char style[15]; //类型char mail[20]; //邮箱ID * next;};void main(){ID *head=NULL; //这是这个程序的头,什么功能都是靠这个来进行链接的int choice; //存放用户的选择int j=0; //这个j是用于功能之间的配合使用while(1){system("cls"); //清屏printf("\n\n");printf("\t # # # # # System Of Communication # # # # #\n");printf("\t 1. 建立通讯录\n");printf("\t 2. 删除通讯人\n");printf("\t 3. 保存通讯录\n");printf("\t 4. 读取通讯录文件\n");printf("\t 5. 查找通讯人\n");printf("\t 6. 添加通讯人\n");printf("\t 7. 修改通讯人信息\n");printf("\t 8. 退出通讯录系统\n");printf("\t\t\t\t\tMade by 元达鹏\n");printf("\t # # # # # # # # # # # # # # # # # # # # # #\n");printf("\n\n");scanf("%d",&choice); //输入功能getchar(); //吸收回车键switch(choice){case 1:head=Create(); //创建j=1; //让功能7可以进得去break;case 2:head=Delete(head); //删除break;case 3:Save(head); //保存函数break;case 4:head=Read(); //读取文件的函数j=2; //让功能7可以进得去break;case 5:Search(head); //查找break;case 6:if((j==1)||(j==2)) //当你进入过创建或者读取之后才可以进入添加{head=Add(head); //添加}else{printf("在你添加通讯人的时候请先创建通讯录或者读取通讯录文件\n\n");printf("请按任意键返回主菜单\n");getch(); //按下任意键就进入下一条语句的函数}break;case 7:if((j==1)||(j==2)) //当你进入过创建或者读取之后才可以进入添加{head=Change(head); //修改}else{printf("在你删除通讯人的时候请先创建通讯录或者读取通讯录文件\n\n");printf("请按任意键返回主菜单\n");getch(); //按下任意键就进入下一条语句的函数}break;case 8:exit(0); //退出break;default:printf("你输入错了吧,请你重新输入\n");}}}(2)工作流程图①建立:建立一个通讯录④读取:读取文件中的通讯录⑥添加:添加通讯人⑦修改:通过名字修改通讯人信息四.程序源代码#include <stdio.h>#include <stdlib.h> //除了一些常用函数需要以外,如在网上查到的system清屏函数,exit退出函数也需要这个H文件#include <string.h> //程序中的字符比较strump函数需要这个H文件#include <conio.h> //在网上查的getch函数需要这一个H文件#define ID struct tel //宏定义,方便以后的使用struct tel{char name[10]; //姓名char tele[15]; //电话char style[15]; //类型char mail[20]; //邮箱ID * next;};int total=0; //通讯录人数的统计void Save(ID *head); //保存函数的声明,因为你在调用Create函数时用到了/************************************************函数名:Create(创建)*功能:创建一个单链表,把数据放在链表里面,一旦需要保存,就调用save函数保存在文件中*返回值:ID *(结构体指针)***********************************************/ID* Create(){total=0;int k=0;int i=0;ID *head,*p1,*p2,*p3; //创建一个头指针和两个可用于移动的指针char saveflag; //这个字符用来接收是否保存的Y or y的head=p1=p2=NULL; //首先把上述的指针赋值为空while(1) //这个循环可以实现多次添加通讯人{p1= (ID*)malloc(sizeof(ID)); //给p1分配一个动态存储空间printf("请输入姓名,当你不想录入时,在姓名处输入*,结束录入\n");scanf("%s",p1->name); //输入姓名if(strcmp(p1->name,"*")==0) //这里是结束函数的一个通道(没有输入联系人),就是判断输入的是否为*号{if(total==0) //当记录人数为0时做以下事情{printf("你输入了0条记录,单链表没有创建...\n");free(p1); //释放p1空间return (head); //把head返回}else{break; //跳出while循环}}printf("请输入电话号码:\n");scanf("%s",p1->tele);printf("请输入类别:办公类、个人类、商务类\n");scanf("%s",p1->style);printf("请输入邮箱:\n");scanf("%s",p1->mail);if(k>0){p3=head; //让p3从头开始遍历while(p3!=NULL) //当p3不为空时{if((strcmp(p1->name,p3->name)==0)&&(strcmp(p1->tele,p3->tele)==0)){free(p1);printf("你重复输入了,这一条不保存。

请按任意键返回主菜单\n");i=1;printf("请按任意键返回主菜单\n");getch(); //按下任意键就进入下一条语句的函数break;}if((strcmp(p1->name,p3->name))&&(strcmp(p1->tele,p3->tele))&&(p3==p2)) //一旦到了最后一个结点,并且还没有和他相同的信息的时候{i=0;break; //跳出第一个循环}p3=p3->next;}if(i==1){break; //跳出第二个循环}}if(head==NULL) //这是第一次进来的时候,head为空{head=p1; //head和p2都为p1p2=p1;}else{p2->next=p1; //这是第二次以后的执行命令,目的就是p2向后移,而head 的位置不变p2=p1;}total++; //这是录入一个人后,总数就加1k++;}p2->next=NULL; //把最后一个的指针域赋值为NULL,在以后的函数中,很多判断都是靠这一点来实现的,所以很重要if(i==0){free(p1);printf("\n新建通讯录成功,共有%d个联系人,是否保存?(Y/N)\n ",total);getchar(); //这个getchar是吸收回车键的,十分重要scanf("%c",&saveflag); //写入一个字符if(saveflag=='y'||saveflag=='Y') //判断它是不是为Y or ySave (head); //进入到保存函数里面,保存到文件里面elseprintf("\n没有保存到成功保存到文件,请在返回主菜单后输入3保存通讯录。

相关文档
最新文档