通讯录系统的设计与实现桂林电子科技大学电信三班傅得耕3.1系统的需求分析通讯录系统作为一个应用软件将为人民提供一个可以串联人与人之间的信息的一个平台。
根据系统界面的提示信息对通讯录进行查询、初始化等操作。
系统功能需求分析描述如下:(1)创建联系人。
(2)显示所有联系人:显示可以进行的操作。
(3)删除联系人。
(4)查询:根据姓名进行查询,并可显示所有关于该人的信息。
(5) :退出。
3.2系统的设计3.2.1 系统的总体设计下面从系统的整体流程的功能模块、系统界面及数据结构进行总体设计。
(1)总体思想本系统主要设计思想是实现通讯录系统信息的创建联系人、删除、查找等主要功能。
系统的设计方法是结构化实际方法,系统用C语言进行开发用户可以清晰的了解联系人的情况。
(2)系统模块结构图根据需求分析结果,通讯录系统可以分为五大模块:创建联系人模块、显示功能模块、查找联系人功能模块、删除联系人模块以及退出模块。
㈡查询人物信息进入此菜单功能模块,输入您要查询的图书的名字。
图书查询模块流程如图:3.3创建删除系统3.4 源代码#include <stdio.h>#include <malloc.h>#include <string.h>#define LEN sizeof(struct people) struct people{char name[10];char address[50];char postcode[7];char phonenum[12];struct people * next;};int n = 0, c;static struct people * head;void insert();void show();void delete(char *);void query(char *);int main(int argc, char const *argv[]) {struct people * peo;char nam[10];int i, choose = 0;for (i = 0; i < 60; ++i){printf("*");}printf("\n\t\t\t\t通讯录\n");printf("\t\t\t1.创建联系人\n");printf("\t\t\t2.显示所有联系人\n");printf("\t\t\t3.删除联系人\n");printf("\t\t\t4.查找联系人\n");printf("\t\t\t5.退出\n\n");for (i = 0; i < 60; ++i){printf("*");}do{printf("\t\t\t请选择功能(1~5):\n");printf("\n");scanf("%d", &choose);switch (choose){case 1:insert();break;case 2:show();break;case 3:printf("\n请输入要删除联系人的姓名:");scanf("%s", nam);delete(nam);break;case 4:printf("\n请输入要查询联系人的姓名:");scanf("%s", nam);query(nam);break;case 5:exit(0);break;}} while (1);return 0;}void insert(){struct people * p1, *p2;p1 = (struct people *)malloc(LEN); if (n == 0){printf("姓名:");scanf("%s", &p1->name);printf("地址:");scanf("%s", &p1->address);printf("邮编:");scanf("%s", &p1->postcode);printf("电话:");scanf("%s", &p1->phonenum);head = p1;p1->next = NULL;}else {p1 = head;while (p1->next != NULL){p1 = p1->next;}p2 = p1;p1 = (struct people *)malloc(LEN);printf("姓名:");scanf("%s", &p1->name);printf("地址:");scanf("%s", &p1->address);printf("邮编:");scanf("%s", &p1->postcode);printf("电话:");scanf("%s", &p1->phonenum);p2->next = p1;p1->next = NULL;}n += 1;}void show(){struct people * p;printf("姓名\t 地址\t 邮政编码\t 电话号码\n");p = head;if (head != NULL){do{printf("%s \t %s %s \t %s \n", p->name, p->address, p->postcode, p->phonenum);p = p->next;} while (p != NULL);}}void delete(char * name){struct people * p1, *p2;if (head == NULL){printf("没有数据\n");}p1 = head;while (strcmp(name, p1->name) && p1->next != NULL){p2 = p1;p1 = p1->next;}if (!strcmp(name, p1->name)){if (p1 == head){head = p1->next;}else{p2->next = p1->next;}printf("已经删除%s的数据\n", name);n = n - 1;}else {printf("找不到这个人\n");}}void query(char * name){struct people * p;p = head;if (head != NULL){do{if (!strcmp(name, p->name)){printf("姓名:%s\n", p->name);printf("地址:%s\n", p->address);printf("邮编:%s\n", p->postcode);printf("电话:%s\n", p->phonenum);}p = p->next;} while (p != NULL);}else{printf("输入错误\n");}}第四章心得体会经过一个多星期的编译原理课程设计,在我的努力下,顺利完成该课程设计。
通过该课程设计,掌握了编译程序工作的基本过程及其各阶段的基本任务,熟悉了编译程序总流程框图,了解了编译程序的生成过程及其相关的技术,对课本上的知识也有了更深的理解。
老师常说,课本上的知识是机械的,表面的,要学会去运用,要举一反三。
现在终于深刻的了解了这句话。
经过这次的课程设计,发现书本上很深奥的知识变的更为简单,同样,对实验原理也了有更深的理解。
知道和理解了该理论在计算机中是怎样执行的,对该理论在实践中的应用有深刻的理解。
通过该课程设计,把死板的课本知识变得生动有趣,激发了学习的积极性。
能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解。
课程设计中程序比较复杂,在调试时应该仔细,在程序调试时,注意指针,将不必要的命令去除。
除了课堂外,课程设计是最能学到东西的,最考验人的。
在做课程设计的这段时间,时刻都感到自己学的知识有多么的贫瘠。
经过这次课程设计,让我对C这门语言有了更深的认识,操作能力有了提高要想是写出的代码能运行,需要耐心细心,毅力以及充沛的体力。
只有经过多次编辑,多次编译,再多次运行,才能编写出更好的程序,有时候需要多次的更正才能达到所要的运行结果。
参考文献谭洁强《C程序设计第二版》清华大学出版社。