通讯录管理系统(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语⾔实现通讯录管理系统(⽤链表实现)题⽬:通讯录(通过链表实现)设计并实现⼀个简易的通讯录软件,管理个⼈通讯记录。
⼀条通讯记录可包括:姓名、⼯作单位、⼿机、住宅电话、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语言单链表的基本操作。
第一步:定义单链表节点的结构体单链表的每个节点都有三个部分组成:数据域、指针域和链头。
其结构体如下所示:```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语言单链表的实现摘要: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语言通讯录管理系统

一课程设计要求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语言实现电话簿管理系统课程设计电话簿管理系统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复制代码:#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。
链表实现c语言通讯录管理系统,C++链表实现通讯录管理系统

链表实现c语⾔通讯录管理系统,C++链表实现通讯录管理系统⽤数据结构⾥⾯线性结构的链表实现,供⼤家参考,具体内容如下⽂件操作未写有登录操作,复制源码需要更改登录模块的密码⽂件存放位置使⽤VS2017编译器需要保留开头:#define _CRT_SECURE_NO_WARNINGS#define _CRT_SECURE_NO_WARNINGS#include "iostream"#include "cstdio"#include "fstream"#include "stdlib.h"#include "String"#include "iomanip"#include "windows.h"#define LEN 100using namespace std;using std::cin;using std::cout;using std::endl;using std::ifstream;using std::ofstream;using std::ios;using std::cerr;using std::string;using std::setw;typedef struct LNode {char num[10];char name[20];char telNum[12];char qq[10];struct LNode *next;}LNode,*LinkList;int n = 0;LinkList SearchName(LinkList L);//按姓名查找LinkList SearchNum(LinkList L);//按学号查找void DelLNode(LinkList &L,LinkList p);//删除p结点void PrintLNode(LinkList p);//打印结点void PrintList(LinkList L);//打印表/*----------------系统函数----------------*/void CreateLinkList(LinkList &L);//创建链表void DelName(LinkList &L);//按姓名删除通讯录成员void DelNum(LinkList &L);//按学号删除通讯录成员void saveRecord(LinkList L);//存储信息void loadRecord(LinkList &L);//加载信息/*--------------------------------------*/void Secret();void fun();void ver();void yanshi(char *p);void clear();void header();void menu() {LinkList L=NULL;int select;do {system("cls");printf("\t\t\t Welcome to the address book information management system!\n\n\n"); printf("\t\t\t\t***************************************************\n");printf("\t\t\t\t * │1.InitList 2.Add Message │ *\n");printf("\t\t\t\t * │ │ *\n");printf("\t\t\t\t * │3.Search Message 4.Save File │ *\n");printf("\t\t\t\t * │ │ *\n");printf("\t\t\t\t * │5.Sort Static 6.Load Message │ *\n");printf("\t\t\t\t * │ │ *\n");printf("\t\t\t\t * │7.Display Message 8.Delete Message│ *\n");printf("\t\t\t\t***************************************************\n");cout << endl;yanshi((char *)"\t\tPlease choose the mode of operation(1~8):\n");/* cout << "\t\tPlease choose the mode of operation(1~8):" << endl;*/cin >> select;switch (select) {case 8:cout << "Please select the deletion method:\n1.Delete by student number 2.Delete by name\n" << endl; int x;cin >> x;switch (x) {case 1:DelNum(L);break;case 2:DelName(L);break;}case 6:loadRecord(L);break;case 5:break;case 4:saveRecord(L);break;case 3:clear();cout << "Please select a search method:\n1.Find by student number 2.Find by name\n" << endl;int a;cin >> a;switch (a) {{LinkList aa = SearchNum(L); header();PrintLNode(aa);cout << "\n\n\n成功!" << endl; system("pause");menu();}break;case 2:clear();{LinkList b = SearchName(L); header();PrintLNode(b);cout << "\n\n\n成功!" << endl; system("pause");menu();break;}}break;case 1:InitList(L);break;case 9:break;case 7:PrintList(L);break;case 2:CreateLinkList(L);cout << endl << endl << endl;cout << "The programe is over!" << endl << endl << endl; Sleep(2000);exit(0);break;}} while (select != 8);}int main() {fun();ver();//版本信息Secret();//密码登录menu();return 0;}//初始化表void InitList(LinkList & L){L = new LNode;//申请头结点L->next= NULL;}//插⼊⼀条信息void InsertLNode(LinkList & L, LNode *s){s->next = L->next;L->next = s;}//按姓名查找LinkList SearchName(LinkList L){char name[20];cout << "请输⼊要查找的姓名:" << endl;while (p) {//如果找到,退出循环,返回pif (strcmp(p->name, name) == 0) break;elsep = p->next;}return p;}//按学号查找LinkList SearchNum(LinkList L){char num[10];cout << "请输⼊要查找的学号:" << endl; cin >> num;LinkList p = L->next;while (p) {//如果找到,退出循环,返回pif (strcmp(p->num, num) == 0) break;elsep = p->next;}return p;}//删除节点void DelLNode(LinkList &L,LinkList p) {LinkList s=NULL, q;q = L->next;//将s指向p前⾯的⼀个结点while (q&&q!=p) {}s->next = q->next;delete q;}//打印⼀条信息void PrintLNode(LinkList p){printf("%15s", p->num);printf("%15s", p->name);printf("%15s", p->telNum);printf("%15s\n",p->qq);}//打印通讯录void PrintList(LinkList L){clear();header();LinkList p = L->next;while (p) {PrintLNode(p);p = p->next;}system("pause");}//添加信息void CreateLinkList(LinkList & L) {char ans = 'y';n = 0;while (ans=='y'||ans=='Y') { system("cls");LNode *p = new LNode;cout << "请输⼊姓名:" << endl;cin >> p->name;cout << "请输⼊电话号码:" << endl;cin >> p->telNum;cout << "请输⼊QQ号:" << endl;cin >> p->qq;InsertLNode(L,p);n++;cout<getchar();ans=getchar();}system("pause");}//按姓名删除void DelName(LinkList &L){char name[20];LinkList p;cout << "请输⼊要删除的学⽣姓名:" << endl; cin >> name;p = SearchName(L);if (p) {DelLNode(L,p);}system("pause");}//按学号删除void DelNum(LinkList & L){char num[20];LinkList p;p = SearchName(L);if (p) {DelLNode(L, p);}system("pause");}//存储信息void saveRecord(LinkList L){FILE *fp=NULL;int count = 0;if ((fp=(fopen("student.dat","wb")))==NULL) { cout << "Can't open this file!" << endl;Sleep(3000);}LinkList q = L->next;while (q) {fwrite(q, sizeof(LNode), 1, fp);count ++;q = q->next;}fclose(fp);cout << "Save the file successfully!" << endl; getchar();}//加载信息void loadRecord(LinkList & L){FILE *fp=NULL;int count = 0;if ((fp=(fopen("student.dat", "rb"))) == NULL) { cout << "Can't open this file!" << endl;LinkList p=NULL;while(1){p = new LNode;if (fread(p, sizeof(LNode), 1, fp) > 0) {InsertLNode(L,p);count++;}else {break;}}fclose(fp);cout << endl << endl << "Load "<Sleep(2200);}//控制台样式void fun() {system("color 2a");system("title 学⽣通讯录信息管理系统");}//版本信息void ver(){yanshi((char*)"\t \3\3\3\3\3\3\3欢迎使⽤通讯录信息管理系统\3\3\3\3\3\3\3\n\n\n\n"); cout << "\t 学⽣通讯录信息管理系统\n\n\n\n\n";cout << "\t\t version 1.0\n\n\n\n\n";cout << "\t\t xxxxxxxxx 某某某\n\n\n\n\n";cout << "\t\t Loading......\n\n" << endl;Sleep(3000);system("cls");}//延时输出while (1) {if (*p != 0)cout << *p++;elsebreak;Sleep(50);}}//清屏void clear(){system("cls");}//表头void header(){printf("%15s%15s%15s%15s\n","学号","姓名","电话","QQ");}/*--------------------------------登录模块----------------------------------*//*--------------------------------登录模块----------------------------------*//*--------------------------------登录模块----------------------------------*/struct UsrInfo//⽤户名的账户和密码信息{char UsrName[20];char Psword[20];};/*注意我的⽂件中⽤户名是⼀⾏,密码是⼀样。
C语言课程设计通讯录

实现通讯录管理系统任务:自学C语言中有关链表及外部文件的内容,设计出通讯录管理系统。
要求如下所述:◆建立通讯录信息,信息至少包含编号、姓名、年龄、电话、通讯地址、电子邮箱等;;◆能够提供添加、删除和修改通讯录信息的功能;◆能够提供按不同方式查询的功能;如按姓名或年龄、电话等查询;◆将通讯录保存在文件中;◆能够按表格方式输出通讯录信息。
要求:①根据以上功能需求,自己定义单链表结点的存储结构;②为了保证所有的数据可以长期被使用,要求程序能将相关数据存储在外部数据文件中,具体数据格式和文件名、路径等自定;③提供友好的用户界面,方便用户操作。
设计目的随着信息社会的高速发展,人与人之间的联系越来越频繁,通讯方式越来越多样化,如何保证与朋友、同学、同事、领导、亲戚等之间的联系,并能方便快捷的查找、记录、修改其相关通讯信息。
仅靠以前单独的手工记录已远远不能满足当前的需要。
开发一个通讯录管理系统,借助计算机可以方便、快捷、灵活的管理个人的朋友及相关人员的通讯信息,了解友人相关信息,帮助与友人保持联络。
所以设计一个通讯录管理系统管理各人的通讯信息是是非必要的。
系统功能概要通讯录管理系统是基于链表设计而成的信息管理系统。
该系统通过对程序进行模块化,建立添加、显示、修改、查找和删除功能的函数,各函数中运用链表存储数据。
从主函数开始执行,调用各函数,并运用文件相关知识将信息存入磁盘中。
统功能模块图如图1图1系统功能模块图数据结构及原理(1)为存储通讯录信息,需定义一个结构体类型,成员包括姓名、编号、年龄、通讯地址、电话、电子邮箱等,结构体定义如下:struct student{char num[20];char name[10];char age[10];char tel[20];char adress[50];char email[20];struct student *next; /*建立通讯录信息结构体;*/};(2)以列表的形式输出文件。
c语言单链表的实现

c语言单链表的实现C语言单链表的实现单链表是一种常用的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。
在C语言中,我们可以通过定义结构体和指针来实现单链表的操作。
我们需要定义一个节点的结构体,该结构体包含数据和指向下一个节点的指针。
假设我们需要实现一个存储整数的单链表,可以定义如下结构体:```cstruct Node {int data;struct Node* next;};```接下来,我们可以定义一些基本的操作函数,例如创建链表、插入节点、删除节点、查找节点等。
下面我们逐一介绍这些操作函数的实现方法。
1. 创建链表创建链表需要分配内存,并设置头节点的指针为空。
代码如下:```cstruct Node* createList() {struct Node* head = (struct Node*)malloc(sizeof(struct Node));head->next = NULL;return head;}```2. 插入节点插入节点需要找到要插入位置的前一个节点,然后进行插入操作。
代码如下:```cvoid insertNode(struct Node* head, int data, int position) {struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));newNode->data = data;struct Node* temp = head;for (int i = 0; i < position - 1; i++) {temp = temp->next;}newNode->next = temp->next;temp->next = newNode;}```3. 删除节点删除节点需要找到要删除节点的前一个节点,然后进行删除操作。
c语言程序设计通讯录管理系统

c语言程序设计通讯录管理系统通讯录管理系统是一种常见的应用程序,用于管理个人或者组织的联系人信息。
本文将介绍一个基于C语言的通讯录管理系统的设计和实现。
一、需求分析通讯录管理系统需要满足以下功能需求:1. 添加联系人:可以添加新的联系人,包括姓名、电话号码、邮箱等信息。
2. 查找联系人:可以根据姓名或者电话号码查找已存在的联系人。
3. 删除联系人:可以根据姓名或者电话号码删除已存在的联系人。
4. 修改联系人:可以修改已存在联系人的信息,包括姓名、电话号码、邮箱等。
5. 显示所有联系人:可以显示当前通讯录中的所有联系人信息。
二、设计思路1. 数据结构:使用结构体来表示一个联系人的信息,包括姓名、电话号码、邮箱等字段。
使用数组来存储多个联系人的信息。
2. 添加联系人:通过用户输入的方式获取联系人信息,然后将联系人信息添加到联系人数组中。
3. 查找联系人:通过用户输入的姓名或者电话号码,在联系人数组中查找匹配的联系人,并显示其详细信息。
4. 删除联系人:通过用户输入的姓名或者电话号码,在联系人数组中查找匹配的联系人,并将其从数组中删除。
5. 修改联系人:通过用户输入的姓名或者电话号码,在联系人数组中查找匹配的联系人,并允许用户修改其信息。
6. 显示所有联系人:遍历联系人数组,逐个显示联系人的详细信息。
三、代码实现下面是一个简单的通讯录管理系统的C语言代码实现:```c#include <stdio.h>#include <string.h>#define MAX_CONTACTS 100typedef struct {char name[50];char phone[20];char email[50];} Contact;Contact contacts[MAX_CONTACTS];int numContacts = 0;void addContact() {printf("Enter name: ");scanf("%s", contacts[numContacts].name);printf("Enter phone number: ");scanf("%s", contacts[numContacts].phone);printf("Enter email: ");scanf("%s", contacts[numContacts].email);numContacts++;printf("Contact added successfully!\n");}void findContact() {char search[50];printf("Enter name or phone number to search: ");scanf("%s", search);int found = 0;for (int i = 0; i < numContacts; i++) {if (strcmp(contacts[i].name, search) == 0 || strcmp(contacts[i].phone, search) == 0) {printf("Name: %s\n", contacts[i].name);printf("Phone: %s\n", contacts[i].phone);printf("Email: %s\n", contacts[i].email);found = 1;break;}}if (!found) {printf("Contact not found!\n");}}void deleteContact() {char search[50];printf("Enter name or phone number to delete: ");scanf("%s", search);int found = 0;for (int i = 0; i < numContacts; i++) {if (strcmp(contacts[i].name, search) == 0 || strcmp(contacts[i].phone, search) == 0) {for (int j = i; j < numContacts - 1; j++) {strcpy(contacts[j].name, contacts[j + 1].name);strcpy(contacts[j].phone, contacts[j + 1].phone);strcpy(contacts[j].email, contacts[j + 1].email);}numContacts--;printf("Contact deleted successfully!\n");found = 1;break;}}if (!found) {printf("Contact not found!\n");}}void modifyContact() {char search[50];printf("Enter name or phone number to modify: ");scanf("%s", search);int found = 0;for (int i = 0; i < numContacts; i++) {if (strcmp(contacts[i].name, search) == 0 || strcmp(contacts[i].phone, search) == 0) {printf("Enter new name: ");scanf("%s", contacts[i].name);printf("Enter new phone number: ");scanf("%s", contacts[i].phone);printf("Enter new email: ");scanf("%s", contacts[i].email);printf("Contact modified successfully!\n");found = 1;break;}}if (!found) {printf("Contact not found!\n");}}void displayContacts() {printf("Contacts:\n");for (int i = 0; i < numContacts; i++) {printf("Name: %s\n", contacts[i].name); printf("Phone: %s\n", contacts[i].phone); printf("Email: %s\n", contacts[i].email); printf("\n");}}int main() {int choice;do {printf("1. Add contact\n");printf("2. Find contact\n");printf("3. Delete contact\n");printf("4. Modify contact\n");printf("5. Display all contacts\n"); printf("0. Exit\n");printf("Enter your choice: ");scanf("%d", &choice);switch (choice) {case 1:addContact();break;case 2:findContact();break;case 3:deleteContact();break;case 4:modifyContact();break;case 5:displayContacts();break;case 0:printf("Exiting...\n");break;default:printf("Invalid choice!\n");break;}} while (choice != 0);return 0;}```四、总结本文介绍了一个基于C语言的通讯录管理系统的设计和实现。
c语言单链表代码

c语言单链表代码单链表是一种数据结构,它由一系列节点构成,每个节点都包含一个数据域和一个指向下一个节点的指针域。
在C语言中,实现单链表需要使用指针和动态内存分配。
下面分步骤阐述一下如何实现单链表的代码。
1.定义单链表节点结构体单链表的节点包含两个域,一个是数据域用于存储数据,另一个是指针域用于指向下一个节点。
定义单链表节点结构体如下:```cstruct Node {int data;struct Node* next;};```其中,data表示节点存储的数据,next表示指向下一个节点的指针。
2.创建单链表创建单链表需要考虑两个问题,一个是如何在内存中分配节点的空间,另一个是如何将各个节点连接起来。
在C语言中使用malloc函数动态分配内存。
具体步骤如下:```cstruct Node *create_list(int n) {int i;struct Node *head = NULL;//定义头节点指针,初始化为空struct Node *p, *tail;//定义节点指针p和tail,用于遍历和尾插//读入n个节点的数据for (i = 0; i < n; i++) {p = (struct Node*)malloc(sizeof(struct Node));//动态分配内存scanf("%d", &p->data);p->next = NULL;//新节点的指针要初始化为空if (head == NULL)head = p;elsetail->next = p;//将上一个节点的next指向当前节点 tail = p;//更新尾节点指针}return head;//返回头节点指针}```其中,head指向链表的第一个节点,p表示当前节点,tail表示尾节点,next指向下一个节点。
3.遍历单链表遍历单链表需要用指针从头节点开始往下遍历。
原创c语言学生通讯录管理系统设计

原创 C 语言学生通讯录管理系统设计简介本文将介绍一个基于 C 语言的学生通讯录管理系统的设计。
该系统旨在提供一个方便管理学生通讯录信息的工具,包括学生的基本信息、联系方式以及其他相关信息。
功能需求学生通讯录管理系统应具备以下功能:1.添加学生信息:包括学生姓名、年龄、性别、学号、联系方式等。
2.删除学生信息:根据学生姓名或学号进行删除。
3.修改学生信息:根据学生姓名或学号进行修改。
4.查询学生信息:根据学生姓名或学号进行查询。
5.显示所有学生信息:以表格形式展示所有学生的基本信息。
数据结构设计为了实现上述功能需求,我们需要设计适当的数据结构来存储学生信息。
本系统采用单链表作为主要数据结构,每个节点表示一个学生的信息。
每个节点包括以下字段:•char name[50]:学生姓名•int age:学生年龄•char gender[10]:学生性别•int studentID:学生学号•char contact[50]:学生联系方式其中,name、gender和contact字段使用字符数组来存储字符串信息,age和studentID字段使用整数来存储相应的信息。
为了方便管理学生信息,我们还需要定义一个指针变量head来表示链表的头节点。
以下是相关数据结构的定义:typedef struct ListNode {char name[50];int age;char gender[10];int studentID;char contact[50];struct ListNode* next;} ListNode;ListNode* head = NULL;功能实现添加学生信息添加学生信息的功能通过以下步骤实现:1.创建一个新的节点newNode2.提示用户输入学生的基本信息,并将信息保存到newNode的相应字段中3.将newNode插入到链表中的合适位置以下是添加学生信息的代码实现:```c ListNode* newNode = (ListNode*)malloc(sizeof(ListNode)); printf(。
C语言基于单链表实现通讯录功能

C语⾔基于单链表实现通讯录功能本⽂实例为⼤家分享了C语⾔基于单链表实现通讯录功能的具体代码,供⼤家参考,具体内容如下#include<stdio.h>#include<stdlib.h>#include<string.h>#pragma warning(disable:4996);//解决VS报严重性代码错误typedef struct LNode{char name[20];double ph_number;struct LNode* next;}LinkNode;//创建通讯录LNode* CreateList(LNode*& L){LNode* s, * r;int n;L = (LNode*)malloc(sizeof(LNode));r = L;printf("请输⼊要创建联系⼈的个数:");scanf("%d", &n);printf("\n");for (int i = 0; i < n; i++){s = (LNode*)malloc(sizeof(LNode));printf("请输⼊第%d个联系⼈的姓名,电话:\n", i + 1);scanf("%s%lf", &s->name, &s->ph_number);printf("\n");r->next = s;r = s;}r->next = NULL;return L;}//添加联系⼈void ListInsert(LNode*& L){LNode* new_s, * r = L;while (r->next != NULL){r = r->next;}new_s = (LNode*)malloc(sizeof(LNode));printf("请输⼊要添加的联系⼈的姓名,电话:\n");scanf("%s%lf", &new_s->name, &new_s->ph_number);printf("\n");r->next = new_s;r = new_s;r->next = NULL;}//查找联系⼈bool Locate(LNode*& L){LNode* p = L->next;char name_[20];printf("请输⼊要查找的联系⼈的姓名:\n");scanf("%s", &name_);printf("\n");while (p != NULL && strcmp(p->name, name_) != 0)//注意判断条件{p = p->next;}if (p == NULL) return false;else return true;}//修改联系⼈bool ModifyList(LNode*& L){LNode* p = L;char name_[20];double ph_number_;printf("请输⼊要修改的联系⼈的姓名:\n");scanf("%s", name_);printf("\n");while (p != NULL && strcmp(p->name, name_) != 0)//注意判断条件 {p = p->next;}if (p == NULL) return false;else {printf("请输⼊修改后的电话号码为:\n");scanf("%lf", &ph_number_);printf("\n");p->ph_number = ph_number_;return true;}}//删除联系⼈bool ListDelete(LNode*& L){LNode* p = L->next, * q = L;char name_[20];printf("请输⼊要删除联系⼈的姓名:\n");scanf("%s", name_);printf("\n");while (p != NULL && strcmp(p->name, name_) != 0)//注意判断条件 {p = p->next;q = q->next;}if (p == NULL)return false;else {q->next = q->next->next;free(p);return true;}}//加载通讯录void DispList(LNode* L){int i = 0;LNode* p = L->next;while (p != NULL){printf("姓名:%s 电话:%.0lf\n", p->name, p->ph_number);p = p->next;i++;}}int main(){printf("*****************************************\n");printf("* *\n");printf("* 1:添加联系⼈ *\n");printf("* *\n");printf("* 2: 查找联系⼈ *\n");printf("* *\n");printf("* 3: 修改联系⼈ *\n");printf("* *\n");printf("* 4: 删除联系⼈ *\n"); printf("* *\n");printf("* 5: 加载通讯录 *\n"); printf("* *\n");printf("*****************************************\n"); printf("\n");LNode* L = CreateList(L);int operand;printf("\n");for (int i = 0; i < 5; i++){printf("请输⼊您要执⾏操作的操作数:\n");scanf("%d", &operand);switch (operand){case 1:ListInsert(L);break;case 2:if (Locate(L) == 1) {printf("找到该联系⼈\n");printf("\n");break;}else {printf("未找到改联系⼈\n");printf("\n");break;}case 3:if (ModifyList(L) == 1) {printf("修改成功\n");printf("\n");break;}else {printf("修改失败\n");printf("\n");break;}case 4:if (ListDelete(L) == 1) {printf("删除成功\n");printf("\n");break;}else {printf("删除失败\n");printf("\n");break;}case 5:DispList(L);break;default:printf("ERROR\n");}}return 0;}运⾏截图以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
c语言单链表基本操作

c语言单链表基本操作
5. 查找节点:
```c struct Node* searchNode(struct Node* head, int data) {
c语言单链表基本操作
4. 删除节点:
```c void deleteNode(struct Node** head, int data) {
struct Node* currentNode = *head; struct Node* prevNode = NULL;
// 遍历链表,找到要删除的节点 while (currentNode != NULL && currentNode->data != data) {
c语言单链表基本操作
这些是单链表的基本操作,可以根据需要进行调用和组合,实现对链表的创建、插入、删 除、查找和打印等操作。需要注意的是,在使用完链表后,要记得释放节点所占用的内存, 避免内存泄漏。
struct Node* currentNode = head; while (currentNode != NULL && currentNode->data != data) {
currentNode = currentNode->next; } return currentNode; // 返回找到的节点(如果找到) } ```
c语言单链表基本操作
2. 创建链表: ```c struct Node* createLinkedList() {
return NULL; // 返回一个空链表 }
单链表通讯录课程设计

单链表通讯录课程设计1.题目:单链表通讯录2.设计思路:单链表通讯录是一款用C++语言编写的数据管理系统,主要用于存储和管理用户的通讯信息,如姓名、电话号码、邮箱和地址等个人信息。
通过该系统,用户可以方便地查找和管理自己的通讯录,以方便日常生活和工作。
该系统的核心结构是单链表,采用了面向对象的设计思想,具有可扩展性和灵活的操作方式。
3.功能模块:(1)主菜单模块:该模块是整个系统的核心模块,包含多个子菜单,用户可以通过该模块访问其他功能模块。
(2)添加联系人模块:该模块用于添加新的联系人信息,包括姓名、电话号码、邮箱和地址等。
(3)删除联系人模块:该模块用于删除已有的联系人信息,用户可以根据输入的姓名或电话号码查找并删除联系人。
(4)修改联系人信息模块:该模块用于修改已有联系人的信息,包括姓名、电话号码、邮箱和地址等。
(5)查询联系人信息模块:该模块用于查询已有联系人的信息,用户可以根据输入的姓名或电话号码查找并显示联系人信息。
(6)显示所有联系人信息模块:该模块用于显示所有已有联系人的信息,以便用户进行整体管理。
(7)退出系统模块:该模块用于退出整个系统,结束数据管理工作。
4.代码实现:(1)定义联系人类Class 联系人{private:String name; //姓名String phone; //电话String email; //EmailString address; //地址public:联系人(); //类的构造函数void setName(String name);String getName();void setPhone(String phone);String getPhone();void setEmail(String email);String getEmail();void setAddress(String address);String getAddress();};(2)定义单链表类Class 单链表{private:联系人 *head; //头指针int length; //链表长度public:单链表(); //类的构造函数void add(); //添加联系人void del(); //删除联系人void modify(); //修改联系人void query(); //查询联系人void show(); //显示联系人};(3)定义主函数int main(){单链表 contacts; //创建单链表对象int choice; //用户输入选项while (1){printf("--------------------------------------------\n"); printf(" 通讯录管理系统 V1.0\n");printf("--------------------------------------------\n"); printf(" 1. 添加联系人\n");printf(" 2. 删除联系人\n");printf(" 3. 修改联系人\n");printf(" 4. 查询联系人\n");printf(" 5. 显示所有联系人\n");printf(" 6. 退出系统\n");printf("--------------------------------------------\n");printf(" 请输入选项: ");scanf("%d", &choice);switch (choice){case 1:contacts.add(); //添加联系人break;case 2:contacts.del(); //删除联系人break;case 3:contacts.modify(); //修改联系人break;case 4:contacts.query(); //查询联系人break;case 5:contacts.show(); //显示所有联系人break;case 6:printf(" 退出通讯录管理系统,欢迎下次使用!\n"); exit(0);default:printf(" 输入选项有误,请重新输入!\n");break;}}return 0;}5.实现流程:该系统的实现流程如下:(1)首先定义联系人类,具有姓名、电话、Email和地址等属性和对应的get/set方法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
广州大学物理与电子工程学院
程序与设计训练
通讯录管理系统实验报告
专业班级:电子121
设计人员:元达鹏
学号:65
2013年6月24日
通讯录管理系统
一.需求分析
设计题目及需求:
(1)查看功能:选择此功能时,列出下列三类选择。
A 办公类 B 个人类 C 商务类,当选中某类时,显示出此类所有数据中的姓名和电话号码)
(2)增加功能:能录入新数据(一个结点包括:姓名、电话号码、分类(可选项有:A 办公类 B 个人类 C 商务类)、电子邮件。
例如:杨春商务类
(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 建立通讯录\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("2.类别\n");
printf("3.所有人\n");
scanf("%d",&num); ",count);
count++;
printf("姓名:%s\t电话号码: %s\t类型:%s\t邮箱:%s\n",p->name,p->tele,p->style,p->mail);
flag=1; ",count);
count++;
printf("姓名:%s\t电话号码: %s\t类型:%s\t邮箱:%s\n",p->name,p->tele,p->style,p->mail);
flag=1; ",count);
count++;
printf("姓名:%s\t电话号码: %s\t类型:%s\t邮箱:%s\n",p->name,p->tele,p->style,p->mail);
p=p->next; .\n");
getch(); 建立通讯录\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");
}
}
}
四.界面测试
开始界面:
建立通讯录界面:
删除界面:
保存界面:
读取界面:
查找界面(1):
查找界面(2):
查找界面(3):
添加界面:
修改界面:
个人的体会和感想
这个程序设计训练给我体会十分深刻,因为我在其中下了很大功
夫,并且获得了成效。
这个程序设计训练花了我一个星期的时间,几乎是从早弄到晚,但是正好有这一次的机会让我复习和巩固了数据结构,并且对整一个流程的设计有了一个全新的了解,这是很有意义的一件事。
我写程序的其中,不乏有问题的出现,但是有问题你才知道你的不足在哪里,才可以去不停地完善。
所以这一次的程序设计训练总体而言是十分有意思的一件事情,既动脑又动手,自我感觉良好吧。