数据结构课程设计-通信录的制作(附录中有全部代码)
学生通讯录管理系统数据结构课程设计代码

一、概述在当今数字化信息时代,学生通讯录管理系统已成为学校教育管理和日常生活中不可或缺的一部分。
针对校园学生的通讯录管理系统,既能方便学生之间的交流通信,也能方便管理者对学生信息进行统一管理。
本次课程设计旨在设计一个学生通讯录管理系统的数据结构与代码,实现信息的存储、查询和管理的功能。
二、系统需求分析1.系统功能需求(1) 实现学生基本信息的录入和存储,包括尊称、学号、性别、通信方式等信息;(2) 实现学生信息的查询、修改和删除功能;(3) 实现学生信息的按关键字检索功能,如按尊称、学号、班级等进行检索;(4) 实现学生通讯录的导出和导入功能,方便数据备份和迁移;(5) 实现用户权限管理功能,包括管理员和普通用户权限的划分。
2.系统性能需求(1) 系统应具有良好的用户界面设计,操作简单、友好;(2) 系统应具有较高的数据安全性,保护学生个人信息不被泄露;(3) 系统应具有较高的稳定性和可靠性,能够长时间稳定运行;(4) 系统应具有较高的查询和数据处理效率,能够快速响应用户请求。
三、系统设计1. 数据结构设计(1) 学生信息采用结构体进行存储,包括尊称、学号、性别、通信方式等字段;(2) 学生通讯录采用链表结构进行存储,方便动态添加、删除和查询操作;(3) 用户权限采用权限控制字段进行划分,保证不同用户有不同的操作权限。
2. 系统架构设计(1) 采用C语言进行开发,具有较高的执行效率和跨评台性;(2) 采用面向对象编程思想进行系统的模块化设计,方便系统维护和扩展;(3) 采用简洁的用户界面设计,操作逻辑清晰,用户体验良好。
四、代码实现以下为部分代码示例,展示系统核心功能的实现:1. 学生信息的录入和存储typedef struct Student {char name[20];int id;char gender[10];char contact[20];} Student;// 使用链表存储学生信息typedef struct Node {Student data;struct Node *next;} Node;2. 学生信息的查询、修改和删除// 查询学生信息void searchStudent(Node *head, char *name) {Node *p = head->next;while (p != NULL) {if (strcmp(p->, name) == 0) {// 输出学生信息printf("Name: s, ID: d, Gender:s, Contact: s\n", p->, p->data.id, p->data.gender, p->data.contact); return;}p = p->next;}printf("The student is not found\n");}// 修改学生信息void modifyStudent(Node *head, char *name, int id, char *gender, char *contact) {Node *p = head->next;while (p != NULL) {if (strcmp(p->, name) == 0) {// 修改学生信息strcpy(p->, name);p->data.id = id;strcpy(p->data.gender, gender);strcpy(p->data.contact, contact);return;}p = p->next;}printf("The student is not found\n");}// 删除学生信息void deleteStudent(Node *head, char *name) {Node *p = head;while (p->next != NULL) {if (strcmp(p->next->, name) == 0) { Node *temp = p->next;p->next = p->next->next;free(temp);return;}p = p->next;}printf("The student is not found\n");}3. 用户权限管理int m本人n() {// 管理员权限if (isAdmin) {// 管理员操作} else {// 普通用户操作}return 0;}五、系统测试与优化1. 系统测试(1) 对系统进行功能测试,包括学生信息录入、查询、修改、删除等功能的测试;(2) 对系统进行性能测试,测试系统的稳定性和数据处理效率。
数据结构课程设计(通讯录)

数据结构课程设计(通讯录)
题目描述:
设计一个通讯录程序,实现以下功能:
1. 添加联系人信息
2. 删除联系人信息
3. 修改联系人信息
4. 查找联系人信息
5. 显示所有联系人信息
6. 退出程序
要求:
1. 使用链表作为数据结构存储联系人信息
2. 界面友好,操作简单方便
3. 能够防止重复添加联系人信息
设计思路:
1. 定义一个结构体Contact表示联系人信息,包括姓名、电话、邮箱等成员变量。
2. 定义一个链表结构体List表示联系人链表,包括头结点、
节点数量等成员变量。
3. 实现添加联系人信息函数,首先判断联系人是否存在,如果存在则提示用户,否则分配一个新的节点,并将联系人信息存储在节点中,将新节点插入链表中。
4. 实现删除联系人信息函数,首先判断联系人是否存在,如果不存在则提示用户,否则在链表中删除该节点。
5. 实现修改联系人信息函数,首先判断联系人是否存在,如果不存在则提示用户,否则修改节点中的信息。
6. 实现查找联系人信息函数,遍历链表查找是否有匹配姓名的联系人。
7. 实现显示所有联系人信息函数,遍历链表打印出所有联系人信息。
8. 在main函数中调用上述函数,根据用户输入的指令调用对应的函数,直到用户选择退出程序。
数据结构课程设计(通讯录制作)-参考模板

一.设计内容(通讯录)本系统应完成一下几方面的功能:1) 输入信息——enter();2) 显示信息———display( );3) 查找以姓名作为关键字———search( );4) 删除信息———delete( );5) 存盘———save ( );6) 装入———load( ) ;设计要求:1) 每条信息至包含:姓名(NAME )街道(STREET)城市(CITY)邮编(EIP)国家(STATE)几项2) 作为一个完整的系统,应具有友好的界面和较强的容错能力二.设计思路通过visual c++6.0(用的是C语言)编写一个dos界面的控制台程序,该程序通过链表的操作,文件存储来实现通讯录的基本功能struct address{ /*定义结构*/char name[10]; /*姓名*/char street[50]; /*街道*/char city[10]; /*城市*/char state[15]; /*国家*/char eip[7]; /*邮编*/struct address *next; /*后继指针*/struct address *prior; /*前驱指针*/}链表的插入,删除来实现通讯录里的内容的插入删除当操作完成通过文件件来存储链表的信息,下次打开程序时,读取文件里的内容到内存中,放在链表,然后又可以对链表进行操作;在这里面,文件内容不可以在外部更改,只能通过读取到内存链表中,通过程序进行更改,然后再写入到文件,写入过程会覆盖上次的内容。
struct address *start; /*首结点*/struct address *last; /*尾结点*/struct address *find(char *); /*声明查找函数*/void enter(); /*函数声明*/void search(); /*查找,查找过程中调用find函数*/void save(); /*存盘,将链表信息保存到文件中*/void load(); /*导入,将文件内容导入到内存链表中*/void list(); /*显示当前链表中信息*/void ddelete(struct address **,struct address **);void insert(struct address *i,struct address **start,struct address **last);void inputs(char *,char *,int);void display(struct address *);int menu_select(void);三.详细设计1.主界面设计通过switch语句调用各种函数,实现各种操作。
数据结构课程设计报告---通讯录

数据结构课程设计报告专业:计算机科学与技术年级:课题名称:通讯录小组成员1:小组成员2:小组成员3:一、问题描述设计目的:用〈〈数据结构〉〉中的双向链表作数据结构,结合C语言基本知识。
编写一个通讯录管理系统。
以把所学数据结构知识应用到实际软件开发中去。
设计内容:本系统应完成一下几方面的功能:1) 输入信息——enter();2) 显示信息———display( );3) 查找以姓名作为关键字———search( );4) 删除信息———delete( );5) 存盘———save ( );6) 装入———load( ) ;设计要求:1) 每条信息至包含:姓名(NAME )街道(STREET)城市(CITY)邮编(EIP)国家(STATE)几项2) 作为一个完整的系统,应具有友好的界面和较强的容错能力3) 上机能正常运行,并写出课程设计报告二、需求分析A,添加:系统将提示用户输入新添加人员信息,输入到文件中,人员信息数据包括姓名(name),街道(street),城市(city),邮编(eip),国家(state).B,删除:首先由用户输入要删除的人员的姓名,然后调用删除函数,删除该人员的所有相关资料.C,显示所有人员信息:该功能将显示已经保存的所有人员的姓名,街道,城市,邮编及国家.D,查询:可由用户输入要查找的人员姓名,然后系统用查找函数查找,接着系统使用相关文件命令输出所查找的人员的全部信息.E,退出系统关闭通讯录管理系统.三、概要设计六个函数的实现:void enter(); 新添纪录void search(); 按姓名查询void display(); 显示void load(); 读取文件void save(); 写入文件void delete(); 删除四、详细设计通讯录管理系统功能说明图:通讯录管理系统数据结构及各模块分析:1.设计类、对象及基本数据类型:创建一个record类,它有五个数据成员:char name[20]; 姓名char street[20]; 街道char city[20]; 城市char eip[20]; 邮编char state[20]; 国家2.包含函数及功能如下:void mainmenu(); 主菜单void searchmenu(); 查找菜单void enter(); 新添纪录void search(); 按姓名查询void display(); 显示所有void load(); 读取文件void save(); 写入文件void delete(); 按姓名删除3.结构体:struct record{char street[20];char name[20];char city[20];char state[20];char eip[20];}student[500];struct slnode{record date;struct slnode *next;struct slnode *prior;};五、调试分析void load()//从文件导入{if((fp=fopen("student","rb"))==NULL) //打开文件进行读的操作{printf("\n\t\t通讯录文件不存在");if ((fp=fopen("student","wb"))==NULL)//打开文件进行读的操作{printf("\n\t\t建立失败");exit(0);}else{printf("\n\t\t通讯录文件已建立");printf("\n\t\t按任意键进入主菜单");getch(); //从键盘接收一个字符}return; //返回主函数的主菜单}exit(0);}fseek(fp,0,2); /*文件位置指针移动到文件末尾*/if (ftell(fp)>0) /*文件不为空*/{rewind(fp); /*文件位置指针移动到文件开始位置*/for (num=0;!feof(fp) && fread(&student[num],sizeof(struct record),1,fp);num++);.......getch();return;}●void mainmenu()//主菜单{char choic;system("cls");printf("\n\t\t***************欢迎进入通讯录系统***************");printf("\n\t\t******************1-新添纪录******************");printf("\n\t\t******************2-查找联系人****************");printf("\n\t\t******************3-删除联系人***************");printf("\n\t\t******************4-保存退出*****************");printf("\n\t\t******************5-不保存退出***************");printf("\n\t\t************************************************"); printf("\n\t\t请选择:");choic=getch();switch (choic){case '1':enter();break;case '2':searchmenu();break;case '3':delet();break;case '4':save();break;case '5':exit(0);default:mainmenu();}}●void searchmenu()//查询菜单{char choic;system("cls");printf("\n\t\t******************* 查询菜单*******************");printf("\n\t\t**************** 1-显示所有********************");printf("\n\t\t**************** 2-按姓名查询******************");printf("\n\t\t**************** 3-返回主菜单******************"); printf("\n\t\t************************************************"); printf("\n\t\t请选择:");choic=getch();switch (choic){case '1':display();break;case '2':search();break;case '3':mainmenu();break;}}void enter()//添加纪录{printf("\n\t\t**************** 请输入学生信息****************\n"); printf("\n\t\t姓名:");scanf("%s",&student[num].name);printf("\n\t\t街道:");scanf("%s",&student[num].street);printf("\n\t\t城市:");scanf("%s",&student[num].city);printf("\n\t\t输入邮编:");scanf("%s",&student[num].eip);printf("\n\t\t国家:");scanf("%s",&student[num].state);num++;listinsert();printf("\n\t\t是否继续添加?(Y/N):");if (getch()=='y')enter();return;}void display()//显示所有{int i;system("cls");if(num!=0){printf("\n\t\t*************** 以下为通讯录所有信息************");for (i=0;i<num;i++){printf("\n\t\t姓名:%s",student[i].name);printf("\n\t\t街道:%s",student[i].street);printf("\n\t\t城市:%s",student[i].city);printf("\n\t\t邮编:%s",student[i].eip);printf("\n\t\t国家:%s",student[i].state);printf("\t\t");if (i+1<num){printf("\n\t\t__________________________");// system("pause");}}printf("\n\t\t************************************************"); }elseprintf("\n\t\t通讯录中无任何纪录");printf("\n\t\t按任意键返回主菜单:");getch();return;}void search()//查找联系人{int j=0,a=0;//j用来记录查找.......scanf("%s",name);for(int i=a;i<num;i++,p=p->next)//num用来表示联系人的个数{if(strcmp(name,p->next->)==0)//查找是否有该人,有则输出该点所有信息,并往下查找。
数据结构课程设计-通迅录

数据结构课程设计-通迅录课程设计报告书题目:通迅录专业:计算机计算机科学与技术班级: 12级<4>班姓名:马立萍学号: 2012051434 指导老师:米文丽成绩:一.需求分析整个通讯录一共6个部分,分别为预选准备,增加联系人,删除联系人,显示联系人,修改联系人,以及退出系统。
0.预选准备:首先调用定义的read_func函数,查询是否有预先保存的数据,如果有则载入没有则先调用insert_func函数输入一个数据然后进入主菜单1.增加联系人:在主菜单中键入1则进入增加联系人部分。
通过调用insert_func函数输入名字与电话。
由于系统的原因,名字和电话的字符长度为20,超过20则出错,但由于国内的实际情况20字符几乎可以满足所有非特殊的电话用途。
2.删除联系人:在主菜单中键入2则进入删除联系人部分。
通过调用delete_func()函数,查找需要删除联系人的名字进行删除。
3.显示联系人:在主菜单中键入3则进入显示联系人部分。
通过调用display_func()函数,显示并按照电话号码的大小排列显示并统计所有的联系人个数。
4.修改联系人:在主菜单中键入4则进入修改联系人部分。
通过调用modify_func()函数,查找需要删除联系人的名字进行修改号码。
5.退出系统:在主菜单中键入5则进入退出系统部分。
通过调用write_func()函数,保存已输入的电话号码,并退出系统。
二.概要设计:三.详细设计/* file name: slist.c *//* 单链表,插入、删除使用排序 */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <conio.h>void read_func(void);void write_func(void);void insert_func(void);void tel_func(void);void delete_func(void);void display_func(void);void modify_func(void);void anykey_func(void);struct student {char name[20];char telephone[20];struct student *next;};struct student *ptr, *head, *current, *prev; void main(void){char option1;system("cls");read_func();while(1){printf("****************************************\n");printf(" 1.增加联系人\n");printf(" 2.删除联系人\n");printf(" 3.显示联系人\n");printf(" 4.修改联系人\n");printf(" 5.退出系统\n");printf("****************************************\n");printf(" Please enter your choice (1-5)...");option1=getche();printf("\n");switch(option1){case '1':insert_func();break;case '2':delete_func();break;case '3':display_func();break;case '4':modify_func();break;case '5':write_func();exit(0);}}}void read_func(void){FILE *fptr;head=(struct student *) malloc(sizeof(struct student));head->next = NULL;/* 开始时,若表中不存在数据,则要求输入第一笔数据 */if((fptr=fopen("slist.dat","r")) == NULL){printf("表中数据不存在\n");printf(" 请按任意键输出第一组数据...\n");getch();insert_func();}else{ptr=(struct student *) malloc(sizeof(struct student));while(fscanf(fptr, "%s %s", ptr->name, &ptr->telephone) != EOF) {tel_func();ptr=(struct student *) malloc(sizeof(struct student));}fclose(fptr);}}void write_func(void){FILE *fptr;fptr=fopen("slist.dat","w");current=head->next;while(current != NULL){fprintf(fptr, "%s %s\n", current->name, current->telephone);current = current->next;}fclose(fptr);}void insert_func(void){ptr=(struct student *) malloc(sizeof(struct student));printf(" 名字 : ");gets(ptr->name);printf(" 电话: ");gets(ptr->telephone);tel_func();}/*以电话高低由大到小排列*/void tel_func(void){//插入数据prev = head;current = head->next;while ((current != NULL) && (current->telephone > ptr->telephone)) {prev = current;current = current->next;}ptr->next = current;prev->next = ptr;}void delete_func(void){char del_name[20];printf(" 删除名字: ");gets(del_name);prev = head;current = head->next;while ((current != NULL) && (strcmp(current->name , del_name)!=0)) {prev = current;current = current->next;}if (current != NULL){prev->next = current->next;free(current);printf(" %s 档案已删除\n",del_name);}elseprintf(" 姓名 %s 没找到\n",del_name);anykey_func();}void modify_func(void){char n_temp[20];printf(" 需要修改信息的名字: ");gets(n_temp);current=head->next;while ((current != NULL) && (strcmp(current->name , n_temp)!=0)) {prev = current;current = current->next;}if (current != NULL){printf(" **************************\n");printf(" 名字 : %s\n",current->name);printf(" 电话: %s\n",current->telephone);printf(" **************************\n");printf(" 请输入新的电话: ");gets(ptr->telephone);printf(" %s 档案修改\n",n_temp);}elseprintf(" 名字 %s 没有被找到\n",n_temp);anykey_func();}void display_func(void){int count=0;system("cls");if(head->next == NULL){ printf(" No student record\n"); }else{printf(" 名字电话\n");printf(" ---------------------------\n");current=head->next;while(current != NULL){printf(" %-20s %3s\n", current->name, current->telephone);count++;current=current->next;if(count % 20 == 0) getch();}printf(" ---------------------------\n");printf(" 总共 %d 记录被找到\n", count);}anykey_func();}void anykey_func(void){printf(" 请输入任意键以继续");getch();printf("\n");}四.测试和结果分析:(一).测试1.开头载入不成功输入第一组数据以及显示主菜单界面2.添加联系人界面:3.删除联系人界面:4.显示联系人界面:5.修改联系人界面:6.退出后保存的slist.dat文件(二)结果分析界面比较烦乱,或许应该使用system(“cls”)来使系统更加简洁,而且系统功能过于简单,如果是显示使用的通讯录应该包含多个电话号码,包括固定电话几个手机,QQ,地址,邮箱等等数据,而且开始时电话号码的数据不能超过10位,否则就不能正常显示,经过修改现在能显示20位以内,但是总觉得这样的修改并不灵活,有待修改。
数据结构课程设计通讯录的制作

数据结构课程设计通讯录的制作一、引言二、需求分析1. 功能需求2. 性能需求3. 安全需求三、设计思路1. 数据结构选择2. 界面设计四、系统功能模块设计与实现1. 添加联系人模块2. 删除联系人模块3. 修改联系人模块4. 查询联系人模块五、系统性能测试与优化六、安全性测试与优化七、总结一、引言通讯录是我们日常生活中必不可少的工具之一,它可以帮助我们轻松地管理和查找联系人的信息。
本次课程设计旨在通过数据结构的应用,实现一个简单易用的通讯录管理系统。
二、需求分析1. 功能需求本系统需要实现以下功能:(1)添加联系人:可添加新的联系人信息,包括姓名、电话号码等;(2)删除联系人:可删除已有的联系人信息;(3)修改联系人:可修改已有的联系人信息;(4)查询联系人:可根据姓名或电话号码等关键字查询已有的联系人信息。
2. 性能需求本系统需要满足以下性能需求:(1)快速响应:用户操作时,系统需要快速响应,避免出现卡顿等情况;(2)稳定性:系统需要保持稳定,避免出现崩溃等情况;(3)易用性:系统需要易于使用,用户可以轻松地完成各项操作。
3. 安全需求本系统需要满足以下安全需求:(1)用户身份验证:用户在登录时需要进行身份验证,确保只有授权用户才能使用该系统;(2)数据隐私保护:系统需要对用户的数据进行加密处理,确保用户的隐私得到保护。
三、设计思路1. 数据结构选择本系统采用链表作为主要的数据结构。
链表具有插入、删除等操作效率高的优点,可以很好地满足通讯录管理中添加、删除联系人等操作的需求。
2. 界面设计本系统采用图形界面设计,界面简洁明了,易于操作。
主要界面包括登录界面、主界面和添加/修改联系人界面等。
四、系统功能模块设计与实现1. 添加联系人模块(1)输入联系人信息;(2)将新联系人信息插入链表中。
2. 删除联系人模块(1)输入待删除联系人姓名或电话号码等关键字;(2)查找并删除相应节点。
3. 修改联系人模块(1)输入待修改联系人姓名或电话号码等关键字;(2)查找相应节点;(3)修改节点信息。
数据结构课程设计-通信录的制作(附录中有全部代码)

课程设计任务书专业名称:计算机科学与技术(软件工程)课程名称:数据结构课程设计设计题目:通讯录的制作起止时间:2013年6月24日至2013年7月12日问题描述编写一个通讯录管理系统。
基本要求1)每条信息至少包含:姓名(name)、街道(street)、城市(city)、邮编(eip)、国家(state)这几项;2)作为一个完整的系统,应具有友好的界面和较强的容错能力;3) 利用链表作为存储结构4) 上机能正常运行通信录的制作1概要设计该程序主要是解决用链表实现通讯录,并通过通讯录实现存取,显示,插入、删除记录等问题,首先进行数据的录入,包括编号、姓名、性别、电话号和地址;其次是显示之前所录入的信息,并通过编号或姓名进行查询;第三是实现插入功能;第四是实现删除功能;之后是删除记录退出程序。
系统主要由五个函数组成:第一个函数是主函数主要功能主函数(main()函数)是通过一个多分支语句(switch(i)语句)实现的。
,第二个函数主要的功能输入通讯录的信息包括编号、姓名、性别等,第三个函数通过编号或姓名查询所有信息。
第四个函数将新的信息插入到系统中。
第五个函数通过编号或姓名对所对应的通讯录信息进行删除。
系统主要由四个模块组成:●输入模块:输入通讯录的信息包括编号、姓名、性别等。
●查询模块:通过编号或姓名查询所有信息。
●插入模块:将新的信息插入到系统中。
●删除模块:通过编号或姓名对所对应的通讯录信息进行删除。
图1模块图2详细设计关键代码解析:主函数int main(){Pointer Head=NULL;int i;do{printf("-------------通讯录系统--------------\n");printf("\n");printf("1.插入联系人信息\n");printf("2.查找联系人信息\n");printf("3.修改联系人信息\n");printf("4.删除联系人信息\n");printf("5.显示联系人信息\n");printf("6.退出\n");scanf("%d",&i);switch(i){case 1:Insert(&Head);break;case 2:Search(Head);break;case 3:Update(Head);break;case 4:Delete(&Head);break;case 5:Show(Head);break;case 6:break;default:printf("输入错误!请重新输入!");break;}}while(i!=6);return 0;}void Insert(Pointer *Head){char in_name[10];Pointer p,q,r;printf("请输入姓名:");scanf("%s",in_name);p=q=*Head;while(p!=NULL){q=p;p=p->next;}r=(Pointer)malloc(sizeof(Link));r->next=NULL;if(r==NULL){printf("分配空间失败!");return;}if(q==NULL)*Head=r;else{q->next=r;}strcpy(r->name,in_name);printf("请输入街道:");scanf("%s",r->street);printf("请输入城市:");scanf("%s",r->city);printf("请输入邮编:");scanf("%s",r->eip);printf("请输入国家:");scanf("%s",r->state);}void Search(Pointer Head){int flag=1;char in_name[10];Pointer p;printf("请输入要查询的姓名:");scanf("%s",in_name);p=Head;while(p!=NULL&&flag){if(strcmp(p->name,in_name)){p=p->next;}else{printf("街道:%s\n",p->street);printf("城市:%s\n",p->city);printf("邮编:%s\n",p->eip);printf("国家:%s\n",p->state);flag=0;}}if(flag)printf("没有查询到!");}void Update(Pointer Head){int flag=1;char in_name[10];Pointer p;printf("请输入要修改的姓名:");scanf("%s",in_name);p=Head;while(p!=NULL&&flag){if(strcmp(p->name,in_name)){p=p->next;}else{printf("请输入街道:");scanf("%s",p->street);printf("请输入城市:");scanf("%s",p->city);printf("请输入邮编:");scanf("%s",p->eip);printf("请输入国家:");scanf("%s",p->state);flag=0;}if(flag){printf("没有找到要修改的记录!");}}}void Delete(Pointer *Head){int flag=1;char in_name[10];Pointer p,q;printf("请输入要删除的姓名:");scanf("%s",in_name);p=q=*Head;while(p!=NULL&&flag){if(strcmp(p->name,in_name)){q=p;p=p->next;}else{if(p==*Head){*Head=p->next;free(p);}else{q->next=p->next;free(p);}flag=0;}}}void Show(Pointer Head){Pointer p;p=Head;while(p!=NULL){printf("姓名:%-10s",p->name);printf("街道:%-10s",p->street);printf("城市:%-10s",p->city);printf("邮编:%-10s",p->eip);printf("国家:%-10s",p->state);p=p->next;}}3调试报告在编辑完成一个C语言源程序并最终在计算机上看到程序的运行结果要经过以下几个步骤:上机输入与编辑源程序文件;编译源程序文件;与库函数连接;运行可执行文件。
数据结构课程设计通讯录管理系统

数据结构课程设计通讯录管理系统一、系统需求分析通讯录管理系统的主要目标是提供一个方便、高效的方式来管理联系人信息。
具体需求包括:1、能够添加联系人,包括姓名、电话号码、电子邮件、地址等基本信息。
2、可以对联系人信息进行修改和删除操作。
3、支持按照姓名、电话号码等关键字进行快速查找。
4、能够以列表形式展示所有联系人的信息。
二、数据结构选择为了实现上述功能,我们需要选择合适的数据结构来存储联系人信息。
考虑到联系人信息的多样性和动态性,链表是一个不错的选择。
链表可以方便地进行插入、删除和修改操作,并且能够灵活地调整存储空间。
另外,为了提高查找效率,我们可以结合使用哈希表。
通过将联系人的关键信息(如姓名或电话号码)进行哈希运算,快速定位到对应的联系人节点。
三、系统功能实现1、添加联系人功能当用户选择添加联系人时,系统会提示用户输入联系人的各项信息。
这些信息被封装成一个结构体,并通过链表的插入操作添加到链表中。
同时,将关键信息映射到哈希表中,以便后续快速查找。
2、修改联系人功能用户输入要修改的联系人的关键字,系统通过哈希表快速找到对应的联系人节点。
然后,提示用户输入修改后的信息,并更新链表和哈希表中的数据。
3、删除联系人功能与修改功能类似,通过关键字找到联系人节点,从链表和哈希表中删除相应的节点和信息。
4、查找联系人功能用户输入查找关键字,系统通过哈希表进行快速定位,如果找到匹配的联系人,则显示其详细信息。
5、展示所有联系人功能遍历链表,将所有联系人的信息以列表形式输出到屏幕上。
四、系统界面设计为了提高用户体验,系统设计了简洁直观的界面。
主界面提供了添加、修改、删除、查找和展示所有联系人等功能选项。
用户通过选择相应的选项,进入对应的操作流程。
五、代码实现示例以下是部分关键代码的示例:```c//联系人结构体typedef struct Contact {char name50;char phoneNumber20;char email50;char address100;struct Contact next;} Contact;//哈希表节点结构体typedef struct HashNode {char key50;Contact contact;struct HashNode next;} HashNode;//链表插入联系人void insertContact(Contact head, Contact newContact) {newContact>next = head;head = newContact;}//哈希函数unsigned int hashFunction(const char key) {unsigned int hash = 0;while (key) {hash =(hash << 5) + key++;}return hash % HASH_TABLE_SIZE;}//查找联系人Contact findContact(Contact head, const char key, HashNode hashTable) {unsigned int hashValue = hashFunction(key);HashNode node = hashTablehashValue;while (node) {if (strcmp(node>key, key) == 0) {return node>contact;}node = node>next;}Contact current = head;while (current) {if (strcmp(current>name, key) == 0 ||strcmp(current>phoneNumber, key) == 0) {//更新哈希表HashNode newNode =(HashNode )malloc(sizeof(HashNode));strcpy(newNode>key, key);newNode>contact = current;newNode>next = hashTablehashValue;hashTablehashValue = newNode;return current;}current = current>next;}return NULL;}```六、系统测试在完成系统的开发后,需要进行全面的测试以确保系统的稳定性和可靠性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计任务书专业名称:计算机科学与技术(软件工程)课程名称:数据结构课程设计设计题目:通讯录的制作起止时间:2013年6月24日至2013年7月12日问题描述编写一个通讯录管理系统。
基本要求1)每条信息至少包含:姓名(name)、街道(street)、城市(city)、邮编(eip)、国家(state)这几项;2)作为一个完整的系统,应具有友好的界面和较强的容错能力;3) 利用链表作为存储结构4) 上机能正常运行通信录的制作1概要设计该程序主要是解决用链表实现通讯录,并通过通讯录实现存取,显示,插入、删除记录等问题,首先进行数据的录入,包括编号、姓名、性别、电话号和地址;其次是显示之前所录入的信息,并通过编号或姓名进行查询;第三是实现插入功能;第四是实现删除功能;之后是删除记录退出程序。
系统主要由五个函数组成:第一个函数是主函数主要功能主函数(main()函数)是通过一个多分支语句(switch(i)语句)实现的。
,第二个函数主要的功能输入通讯录的信息包括编号、姓名、性别等,第三个函数通过编号或姓名查询所有信息。
第四个函数将新的信息插入到系统中。
第五个函数通过编号或姓名对所对应的通讯录信息进行删除。
系统主要由四个模块组成:●输入模块:输入通讯录的信息包括编号、姓名、性别等。
●查询模块:通过编号或姓名查询所有信息。
●插入模块:将新的信息插入到系统中。
●删除模块:通过编号或姓名对所对应的通讯录信息进行删除。
图1模块图2详细设计关键代码解析:主函数int main(){Pointer Head=NULL;int i;do{printf("-------------通讯录系统--------------\n");printf("\n");printf("1.插入联系人信息\n");printf("2.查找联系人信息\n");printf("3.修改联系人信息\n");printf("4.删除联系人信息\n");printf("5.显示联系人信息\n");printf("6.退出\n");scanf("%d",&i);switch(i){case 1:Insert(&Head);break;case 2:Search(Head);break;case 3:Update(Head);break;case 4:Delete(&Head);break;case 5:Show(Head);break;case 6:break;default:printf("输入错误!请重新输入!");break;}}while(i!=6);return 0;}void Insert(Pointer *Head){char in_name[10];Pointer p,q,r;printf("请输入姓名:");scanf("%s",in_name);p=q=*Head;while(p!=NULL){q=p;p=p->next;}r=(Pointer)malloc(sizeof(Link));r->next=NULL;if(r==NULL){printf("分配空间失败!");return;}if(q==NULL)*Head=r;else{q->next=r;}strcpy(r->name,in_name);printf("请输入街道:");scanf("%s",r->street);printf("请输入城市:");scanf("%s",r->city);printf("请输入邮编:");scanf("%s",r->eip);printf("请输入国家:");scanf("%s",r->state);}void Search(Pointer Head){int flag=1;char in_name[10];Pointer p;printf("请输入要查询的姓名:");scanf("%s",in_name);p=Head;while(p!=NULL&&flag){if(strcmp(p->name,in_name)){p=p->next;}else{printf("街道:%s\n",p->street);printf("城市:%s\n",p->city);printf("邮编:%s\n",p->eip);printf("国家:%s\n",p->state);flag=0;}}if(flag)printf("没有查询到!");}void Update(Pointer Head){int flag=1;char in_name[10];Pointer p;printf("请输入要修改的姓名:");scanf("%s",in_name);p=Head;while(p!=NULL&&flag){if(strcmp(p->name,in_name)){p=p->next;}else{printf("请输入街道:");scanf("%s",p->street);printf("请输入城市:");scanf("%s",p->city);printf("请输入邮编:");scanf("%s",p->eip);printf("请输入国家:");scanf("%s",p->state);flag=0;}if(flag){printf("没有找到要修改的记录!");}}}void Delete(Pointer *Head){int flag=1;char in_name[10];Pointer p,q;printf("请输入要删除的姓名:");scanf("%s",in_name);p=q=*Head;while(p!=NULL&&flag){if(strcmp(p->name,in_name)){q=p;p=p->next;}else{if(p==*Head){*Head=p->next;free(p);}else{q->next=p->next;free(p);}flag=0;}}}void Show(Pointer Head){Pointer p;p=Head;while(p!=NULL){printf("姓名:%-10s",p->name);printf("街道:%-10s",p->street);printf("城市:%-10s",p->city);printf("邮编:%-10s",p->eip);printf("国家:%-10s",p->state);p=p->next;}}3调试报告在编辑完成一个C语言源程序并最终在计算机上看到程序的运行结果要经过以下几个步骤:上机输入与编辑源程序文件;编译源程序文件;与库函数连接;运行可执行文件。
拿到程序题目要求的初期我们首先按照指导老师的要求写了一篇预习报告,这要为我们的后续开发奠定了坚实的基础。
再有了大体思路后我便开始开发程序,在开发初期我编的只是不全面的很小的程序,有了一个大体的框架便开始一点一点的充实它,由于基本功不是很扎实所以开始时程序中存在着不少的错误,有物理性的错误也有逻辑上的错误,我便开始在指导老师的帮助下对它进行调试:在程序开发起初物理错误犯的比较多如scanf("%d",&m);没有写“&”符号,还有一些语句后面没有加“;”,或者在for(i=10,i<D,i++)的语句中应该用“;”号隔开我却用“,”,就会出现error C2143: syntax error : missing ';' before ')'的提示,在一些判断是否相等的时候我写的是“if(i%*q1=*q2)”,这样虽然是物理错误但系统不会提示你出现错误因为没有语法错误,这样便是0个错误0个警告而真正运行起来就会发现结果与设计结果不符。
发现了这个问题后我便开始仔细的检查程序最后对i进行赋值判断的语句,终于发现了这个问题并更正过来。
有时在声明时明明定义的变量是k但是写的时候就写成了i这样虽然也是没有语法错误但程序执行时结果会和你预计的有天壤之别,令人意想不到,但仔细加查便会不难发现。
4测试结果输入输出显示如下:图2图3图4 5 使用说明下面便是执行过程的简要说明:首先选择插入联系人信息如图5图5查找联系人信息如图6图6 修改联系人信息如图7图7删除联系人信息如图8图8显示联系人信息如图9图96总结在这次课程设计中我得到了很多,从开始的不知道从何入手到后来的慢慢完善,在这个过程中虽然出现了许多的错误,有的是物理错误有的是逻辑上的错误。
但通过老师和同学的帮助,我逐渐改正了错误,一点一点的完善程序。
在此过程中指导老师的意见给了我很大的启发,让我更加深入的思考程序和完善程序。
在这次的课程设计中,虽然把程序编出来比较困难,但是在编写的过程中时我明白了很多以前不会的知识,比如说如何建立并使用文件,并且更好的使用while循环及指针问题,定义了多个具有独立功能的函数模块。
更好的运用函数调用,程序设计思路清晰,程序可读性高。
实现了结构化的思想。
通过这些天的努力这次程序设计即将结束,虽然不是很完美但我想这次的课程设计会给我以后的设计程序时带来很大帮助和鼓励。
通过这次学习,让我明白编写程序的涵义不是我们自己会就可以的而是应该提供给别人,让别人能正确运行的。