数据结构课程设计-通信录的制作(附录中有全部代码)

合集下载

学生通讯录管理系统数据结构课程设计代码

学生通讯录管理系统数据结构课程设计代码

一、概述在当今数字化信息时代,学生通讯录管理系统已成为学校教育管理和日常生活中不可或缺的一部分。

针对校园学生的通讯录管理系统,既能方便学生之间的交流通信,也能方便管理者对学生信息进行统一管理。

本次课程设计旨在设计一个学生通讯录管理系统的数据结构与代码,实现信息的存储、查询和管理的功能。

二、系统需求分析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;}```六、系统测试在完成系统的开发后,需要进行全面的测试以确保系统的稳定性和可靠性。

数据结构课程设计-建通讯录

数据结构课程设计-建通讯录

数据结构课程设计-建通讯录建通讯录要求:第一个模块——主函数main()的功能是:根据选单的选项调用各函数,并完成相应的功能。

第二个模块——Menu()的功能是:显示英文提示选单。

第三个模块——Quit()的功能是:退出选单。

第四个模块——Create()的功能是:创建新的通讯录。

第五个模块——Add()的功能是:在通讯录的末尾,写入新的信息,并返回选单。

第六个模块——Find()的功能是:查询某人的信息,如果找到了,则显示该人的信息,如果未找到,则提示通讯录中没有此人的信息,并返回选单。

第七个模块——Alter()的功能是:修改某人的信息,如果未找到要修改的人,则提示通讯录中没有此人的信息,并返回选单。

第八个模块——Delete()的功能是:删除某人的信息,如果未找到要删除的人,则提示通讯录中没有此人的信息,并返回选单。

第九个模块——List()的功能是:显示通讯录中的所有记录。

人数:2人要求:实用目录第一章课程设计目的和要求 (1)1.1 课程设计的目的 (1)1.2 课程设计实现的要求 (1)第二章课程设计任务内容 (2)第三章详细设计说明 (3)3.1 模块 (3)3.2 性能 (4)3.3 算法说明 (5)3.4 函数说明 (5)3.5 系统程序流程图 (15)第四章软件使用说明 (17)4.1 软件使用说明及出现的问题 (17)4.2运行结果 (17)第五章课程设计心得与体会 (21)附录一:参考文献 (22)附录二:程序清单 (23)通讯录系统第一章课程设计目的和要求1.1 课程设计的目的进一步巩固《C++程序设计》所学的知识,特别加强数组,指针,结构体,文件数据类型的应用,熟悉面向过程的结构化和面向对象可视化程序设计方法,培养结构化程序设计的思想,加深对高级语言基本语言要素和控制结构的理解,锻炼程序设计的能力,以及用C/C++ 语言解决实际问题的能力,为以后后续课程的学习打好基础。

通讯录的设计_数据结构课程设计(含代码)

通讯录的设计_数据结构课程设计(含代码)

课程设计说明书课程名称:数据结构课程设计专业:电子信息科学与技术班级:2012-1 设计人:山东科技大学2015年7月11日目录1需求分析说明 (1)2概要设计说明 (1)2.1 数据结构定义 (1)2.2 整体程序流程图 (2)3详细设计说明 (3)3.1主函数模块 (3)3.2 增加联系人模块 (3)3.3 删除联系人模快 (3)3.4 查找联系人模块 (4)3.5 联系人保存到文件模块 (5)3.6 读取文件中的联系人信息模块 (6)3.7命令接收与判断模块 (8)3.8显示联系人信息模块 (8)4调试分析 (8)4.1遇到的问题 (8)4.2调试 (8)5用户使用说明 (11)6课程设计总结 (12)1需求分析说明通讯录管理系统总体设计目标:用《数据结构》中的双向链表作数据结构,结合C语言基本知识,编写一个具有良好可操作性、有一定容错能力通讯录管理系统,以把所学数据结构知识应用到实际软件开发中去。

其中联系人的信息包括姓名、街道、城市、邮编、国家等几项。

系统在命令行模式下运行,通过输入命令的方式操作。

根据以上基本要求分析出系统应具备以下功能:显示所有联系人信息,向通讯录中添加新的联系人,删除指定联系人,将联系人信息保存到文件中,从文件中读取联系人信息到内存,以姓名为关键字查找联系人。

根据以上要实现的功能,首先要构造一个保存联系人信息的数据结构person_info,根据要求这个结构应具有两个指针域以指向其前一个结构和后一个结构从而构成双链表;其数据域包括姓名、街道、城市、邮编、国家等信息,这些信息分别保存在字符数组中。

除了基本的联系人结构(相当于双链表的一个结点)还应构造一个person_list结构,包括一个指向第一个联系人结点的指针和一个保存链表长度的元素。

2概要设计说明2.1数据结构定义考虑到本系统在初始化阶段要进行大规模的插入操作以构造链表,故采用插入元素较为方便快速的链式存储结构。

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

通讯录制作(数据结构课程设计)
类似于(栈)那种情况
line *temp=p;
line *del=temp->next;
temp->next=temp->next->next;
free(del);
printf("删除成功\n"); return p;
}
//指定名字删除
int select_name(line *p,char *name)
if (t->elem==elem){
return i;
}
i++;
}
//程序执行至此处,表示查找失败
return -1;
}
三、课程设计中遇到的难点及解决办法问题:对数据进行增删改查后,如何将改变的数据同步到文件? 解决方法:在退出函数前面设置一个保存文件的函数,这样无论数据发生怎样的变化, 都会在结尾时,随着退出函数的实现而实现。
while(temp->next)
{if(strcmp(temp->name,name)==0)
{
printf("请对该账号进行重新修改\n");
scanf("%s %s",&temp->name,&temp->cell_number);
printf("修改成功!\n");
}
temp=temp->next;
算法实现:
//p为原链表,elem表示被查找元素、
int selectElem(link * p,int elem){
//新建一个指针t,初始化为头指针p
link * t=p;
int i=1;
//由于头节点的存在,因此while中的判断为t->next

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

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

通讯录的制作数据结构课程设计
在通讯录的制作数据结构课程设计中,我们将使用链表作为主要的数据结构来存储联系人的信息。

链表是一种动态数据结构,它可以根据实际需要动态地分配和释放内存,非常适合用来存储不定数量的联系人信息。

首先,我们需要设计一个联系人的结构体,包含姓名、电话号码、邮箱等基本信息。

然后,我们可以使用链表节点来表示每个联系人,每个节点包含一个联系人的信息以及指向下一个节点的指针。

在创建通讯录时,我们将使用一个头节点来表示通讯录的起始位置,该头节点不包含任何联系人信息,只有一个指向第一个联系人节点的指针。

这样,我们可以通过头节点来遍历整个通讯录,并且在需要插入或删除联系人时更加方便。

在通讯录的实现中,我们可以提供一系列的操作函数,例如添加联系人、删除联系人、查找联系人、显示通讯录等。

这些操作函数可以通过遍历链表来实现对联系人的管理。

除了基本的功能,我们还可以扩展通讯录的功能,例如按照姓名首字母进行排序、按照电话号码进行查找等。

这些功能的实现可以通过链表的操作和排序算法来完成。

此外,我们还可以考虑使用其他数据结构来优化通讯录的实现。

例如,可以使用哈希表来加快对联系人的查找速度,或者使用二叉搜索树来实现按照姓名首字母进行排序。

综上所述,通讯录的制作数据结构课程设计中,我们将使用链表作为主要的数据结构,并通过实现一系列的操作函数和扩展功能来实现对联系人的管理和查询。

同时,我们也可以考虑使用其他数据结构来优化通讯录的实现。

这样的设计可以提高通讯录的效率和方便性,使用户能够更加方便地管理和查找自己的联系人信息。

数据结构通讯录系统源代码

数据结构通讯录系统源代码

头文件:/* 单链表中每个结点的联系人结构体定义*/typedef struct Node/* 每个联系人结构体*/{char name[10];//姓名char telnum[20];//电话号码char address[256];//地址struct Node *next;}SLNode;void Initiate(SLNode ** head)/* 初始化单链表*/{if((*head=(SLNode *)malloc(sizeof(SLNode)))== NULL){printf("内存空间不足!\n");exit(1) ;}(*head)->next=NULL;/* 置链尾标记NULL */}int Length(SLNode *head)//求当前通讯录中的联系人数{SLNode *p;/* p指向头结点*/int size;/* size初始值为0 */p = head->next;size = 0 ;while(p != NULL && head != NULL)/* 循环计数*/{k = k->next;size++;}return size;/* 返回其大小*/}void DataWrite(SLNode *head){SLNode *p;int i;FILE *fp;fp = fopen("Address list.dat","wb+");//打开文件,覆盖以前的文件p = head->next;for( i = 0;i < Length(head);i++){fwrite(p,sizeof(SLNode),1,fp);p =p->next;}fclose(fp);//关闭文件}void Load(SLNode *head)/* 初始化*/{SLNode *q,*p,*m;FILE *fp;int count = 0 ;fp = fopen("Address list.dat","rb");//以读的方式打开二进制文件//rewind(fp);if(fp == NULL){fp = fopen("Address list.dat","wb+");if(fp != NULL){printf("通讯录打开失败!创建新的通讯录!\n");}else{printf("通讯录打开失败!创建新的通讯录失败!\n");exit(0);}}else{q = (SLNode *)malloc(sizeof(SLNode ));while(fread(q,sizeof(SLNode),1,fp)){//fread(q,sizeof(SLNode),1,fp);if(ferror(fp)){printf("error!\n");break;}p = head;m = (SLNode *)malloc(sizeof(SLNode));strcpy(m->name,q->name);strcpy(m->telnum,q->telnum);strcpy(m->address,q->address);count++;m->next=p->next;/* 将新结点插入队头结点*/p->next=m;memset(q,'\0',sizeof(SLNode));}}fclose(fp);printf("\t\t\t\t 通讯录总联系人数:%d \n",Length(head));}int PrintAll(SLNode *head)/* 打印所有出所有联系人信息*/{int i;SLNode *q;q = head->next;if(q == NULL){printf("通讯录为空!\n");return -1;}else{for(i = 0 ; i< Length(head);i++)//逐个打印联系人信息{printf("编号:%d\t姓名:%s\t号码:%s\t地址:%s\n",i+1,q->name,q->telnum,q->address);q = q->next;}return 0;}}void ANParam(SLNode *head)/* 在带头结点的单链表head的第i(0《i《size)个结点前插入一个存放数据元素x的结点*//* 插入成功则返回1,失败则返回0 */SLNode *p,*q;q=(SLNode*)malloc(sizeof(SLNode));/* 生成新结点由指针p指示*/printf("请输入新联系人姓名:");fflush(stdin);gets(q->name);printf("请输入新联系人的电话号码:");fflush(stdin);gets(q->telnum);printf("请输入新联系人的地址:");fflush(stdin);gets(q->address);p = head;q->next=p->next;/* 将新结点插入队头结点*/p->next=q;DataWrite(head);//将信息以覆盖方式重新写入通讯录中printf("添加成功!\n");}void AWParam(SLNode *head,char telnum[11],char name[10],char address[256])//带形参的添加函数/* 在带头结点的单链表head的第i(0《i《size)个结点前插入一个存放数据元素x的结点*//* 插入成功则返回1,失败则返回0 */{SLNode *p,*q;q=(SLNode*)malloc(sizeof(SLNode));/* 生成新结点由指针p指示*/strcpy(q->name,name);strcpy(q->telnum,telnum);strcpy(q->address,address);p = head;q->next=p->next;/* 将新结点插入队头结点*/p->next=q;DataWrite(head);printf("添加成功!\n");}void Delete(SLNode *head)/* 删除带头结点的单链表head的第i(1~n,n为结点个数)个结点/* 删除结点的元素有x带回,删除成功返回1,否则返回0 */{SLNode *p,*s;int choice,i,m,ret;if(PrintAll(head))//如果通讯录为空,则无法删除,退出返回主菜单{return ;}m = Length(head);//求当前通讯录人数printf("请输入你要删除联系人的前面编号:");ret = scanf("%d",&choice);while(!ret || choice > m || choice < 1)//判断输入是否为数字,是否为,若否,则重新输入{printf("请正确输入你要删除联系人的前面编号!\n");fflush(stdin);ret = scanf("%d",&choice);}p=head;i = 0;//由于我们打印出来时是由1开始,所以此处定义为0while(p->next != NULL && p->next->next != NULL && i < (choice-1) )//查找所选择编号前一个结点{p = p->next;i++;}s = p->next;p->next = p->next->next;free(s);DataWrite(head);//将更新的数据重新写入文件中printf("删除成功!");}void SBName(SLNode *head)/* 查找函数,如果不存在,可添加*/{SLNode *p;int choice;char telnum[11], name[10], address[256];p=head->next;printf("请输入你要查找联系人的姓名:");fflush(stdin);gets(name);while(p != NULL){if(!strcmp(p->name,name)){printf("姓名:%s\t电话:%s\t地址:%s\n",p->name,p->telnum,p->address);break;}p=p->next;}if(p == NULL){printf("错误!所查找联系人不在通讯录,是否将该联系人添加至通讯录?\n");printf("请按0确认添加,否则不添加\n");scanf("%d",&choice);//判断输入是否为数字,且数字范围是1~m之间,否则重新输入if(!choice){printf("该联系人姓名:%s\n",name);printf("请输入该联系人的电话:\n");fflush(stdin);gets(telnum);printf("请输入该联系人的地址:\n");fflush(stdin);gets(address);AWParam(head,telnum,name,address);}}}void SBTell(SLNode *head)/* 查找函数,如果不存在,可添加*/{SLNode *p;int choice;char telnum[20], name[10], address[256];p=head->next;printf("请输入你要查找联系人的号码:");fflush(stdin);gets(telnum);while(p != NULL){if(!strcmp(p->telnum,telnum)){printf("姓名:%s\t电话:%s\t地址:%s\n",p->name,p->telnum,p->address);break;}p=p->next;}if(p == NULL){printf("错误!所查找联系人不在通讯录,是否将该联系人添加至通讯录?\n");printf("请按0确认添加,否则不添加\n");scanf("%d",&choice);if(!choice){printf("该联系人电话号码:%s\n",telnum);printf("请输入该联系人的姓名:\n");fflush(stdin);gets(name);printf("请输入该联系人的地址:\n");fflush(stdin);gets(address);AWParam(head,telnum,name,address);}}}void Destroy(SLNode **head)/* 因为单链表的结点空间是在程序运行中申请的,而系统只负责自动收回程序中静态分配的内存空间,所以在程序退出前释放动态申请的内存空间*/{SLNode *p,*p1;p= *head;while(p!=NULL)/* 通过循环释放所有的动态开辟的内存空间*/{p1=p;p=p->next;free(p1);}*head=NULL;}void Alter(SLNode *head){SLNode *p;int choice,num,i,m;if(PrintAll(head))//通讯录为空无法进行修改,退出返回主菜单{return ;}printf("请输入你要更改的信息人的前面编号:");fflush(stdin);m = Length(head);//获取当前通讯录人数i = scanf("%d",&num);//判断是否输入数字while( !i || num > m || num < 1 )//判断输入是否为数字,若否,则重新输入{printf("请正确输入你要更改的信息人的前面编号!\n");fflush(stdin);}p = head->next;//p指向第一个联系人for(i = 0 ; i< Length(head);i++){if((i+1) == num){printf("姓名:%s\t号码:%s\t地址:%s\n",p->name,p->telnum,p->address); lable1: printf("请输入你要更改的信息:\n");printf("1、姓名\t2、号码\t3、地址\t0、全部修改\n");m = scanf("%d",&choice);while(!m || choice > 3 || choice < 0)//判断输入是否为数字,若否,则重新输入{printf("请正确输入选项!\n");fflush(stdin);m = scanf("%d",&choice);}switch(choice){case 1:printf("请输入新姓名:");fflush(stdin);gets(p->name);break;case 2:printf("请输入新号码:");fflush(stdin);gets(p->telnum);break;case 3:printf("请输入新地址:");fflush(stdin);gets(p->address);break;default:printf("请输入新姓名:");fflush(stdin);gets(p->name);printf("请输入新号码:");fflush(stdin);gets(p->telnum);printf("请输入新地址:");fflush(stdin);gets(p->address);break;}printf("以下是刚更改的信息,请确认:");printf("姓名:%s\t号码:%s\t地址:%s\n",p->name,p->telnum,p->address);printf("是否继续更改该联系人?\n");printf("继续修改请按0,否则保存修改!\n");printf("输入:");scanf("%d",&choice);if(!choice){goto lable1;}else{DataWrite(head);//将修改后的文件全部写入通讯录中}}p = p->next;}}int menu(){int ret,i;printf("\t\t******************通讯录******************\n\n");printf("\t\t 1、查找联系人\t");printf("2、添加联系人\n\n");printf("\t\t 3、显示所有联系人信息\t");printf("4、删除联系人\n\n");printf("\t\t 5、更改联系人信息\t");printf("6、退出\n\n");printf("\t\t**************请选择相应功能**************\n");printf("\t\t输入对应功能编号:");i = scanf("%d",&ret);while(!i || ret > 6 || ret <1)//判断输入是否为数字,若否,则重新输入{printf("\t\t请正确输入功能编号!\n");fflush(stdin);printf("\t\t输入对应功能编号:");i = scanf("%d",&ret);}return ret;}void DeleteAll(SLNode *head){FILE *fp;fp = fopen("Address list.dat","wb+");//已创建新的文件覆盖以前的文件,一达到清除目的Destroy(&head);Initiate(&head);//初始化单链表,创建新的头结点printf("清除成功!\n");}测试主函数:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <windows.h>#include "LinkList.h"int main(){int choice = 0 ,ret;SLNode *head;char s[500] = "\t\t**谢谢使用**\n",a[] = "\t\t华中农业大学楚天学院通讯录系统\n";system("title 华中农业大学楚天学院通讯录系统");system("color 30");while(choice < strlen(a)){putchar(a[choice]);Sleep(80);choice++;}Initiate(&head);Load(head);while(1){switch(menu()){case 1:system("cls");if(head->next == NULL){printf("通讯录为空!\n");break ;}else{printf("请选择查找方式:");printf("1、姓名\t 2、电话号码\t 3、退出\n");ret = scanf("%d",&choice);while(!ret || choice >3 || choice <1){printf("输入有误!请正确选择查找方式!\n");fflush(stdin);ret = scanf("%d",&choice);}switch(choice){case 1:SBName(head);break;case 2:SBTell(head);break;case 3:break;default:break;}}break;case 2:system("cls");ANParam(head);break;case 3:system("cls");PrintAll(head);break;case 4:system("cls");printf("请选择删除方式:\n");printf("1、清空通讯录\t2、删除指定联系人\n");ret = scanf("%d",&choice);while(!ret || choice <1 || choice >2){printf("输入错误!请正确选择删除方式!\n");ret = scanf("%d",&choice);}if(choice == 1){DeleteAll(head);}else if(choice == 2){Delete(head);}break;case 5:system("cls");Alter(head);break;case 6:choice = 0;while(choice < strlen(s)){putchar(s[choice]);Sleep(80);choice++;}exit(0);break;default:printf("输入错误!请重新输入!\n");break;}}Destroy(&head);//清除动态申请空间system("pause");return 0;}。

通讯录——数据结构课程设计

通讯录——数据结构课程设计

通讯录——数据结构课程设计通讯录是一个用于存储和管理联系人信息的工具。

在数据结构课程设计中,我们需要设计一个通讯录系统,使用户能够方便地添加、查找、修改和删除联系人信息。

下面是通讯录系统的标准格式文本,详细介绍了系统的功能和实现方法。

一、系统概述通讯录系统是一个基于数据结构的软件应用程序,用于存储和管理联系人信息。

它提供了一系列功能,包括添加联系人、查找联系人、修改联系人和删除联系人。

二、系统功能1. 添加联系人用户可以通过系统界面输入联系人的姓名、电话号码、电子邮件地址等信息,系统将这些信息存储在数据结构中。

每一个联系人的信息应包括惟一的标识符,以便于后续的查找、修改和删除操作。

2. 查找联系人用户可以通过姓名、电话号码或者电子邮件地址等关键字进行联系人的查找。

系统将根据用户提供的关键字,在数据结构中进行搜索,并返回与之匹配的联系人信息。

3. 修改联系人用户可以选择要修改的联系人,并提供新的姓名、电话号码、电子邮件地址等信息。

系统将根据用户提供的联系人标识符,在数据结构中找到对应的联系人,并更新其信息。

4. 删除联系人用户可以选择要删除的联系人,并确认删除操作。

系统将根据用户提供的联系人标识符,在数据结构中找到对应的联系人,并将其从通讯录中删除。

三、系统实现1. 数据结构选择为了高效地存储和管理联系人信息,我们选择使用链表作为数据结构。

每一个节点表示一个联系人,包含姓名、电话号码、电子邮件地址等信息,以及指向下一个节点的指针。

2. 添加联系人用户输入联系人信息后,系统将创建一个新的节点,并将其插入到链表的末尾。

为了保证联系人信息的惟一性,系统将检查新节点的标识符是否与已有节点的标识符重复。

如果重复,则提示用户重新输入。

3. 查找联系人用户输入关键字后,系统将从链表的头节点开始遍历,逐个比较节点中的姓名、电话号码和电子邮件地址与关键字是否匹配。

如果找到匹配的联系人,系统将返回其信息。

如果遍历完整个链表仍未找到匹配的联系人,则提示用户未找到。

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

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

数据结构课程设计通讯录的制作数据结构课程设计通讯录的制作Modified by JEEP on December 26th, 2020.软件学院课程设计报告书课程名称数据结构课程设计设计题⽬通讯录的制作专业班级软件⼯程XXXX学号 XXXXXXXX姓名 X X X指导教师X X X2012 年 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.2m=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{ if(strcmp(a[i].name,a[NUM_BER].name)==0)。

数据结构课程设计通讯录

数据结构课程设计通讯录

数据结构课程设计通讯录一、课程目标知识目标:1. 理解并掌握通讯录数据结构的基本概念,包括线性表的实现方式及其操作;2. 学会运用数组、链表等常见数据结构存储和检索通讯录信息;3. 掌握排序和查找算法在通讯录中的应用。

技能目标:1. 能够运用所学知识,设计并实现一个简单的通讯录管理系统;2. 掌握使用编程语言(如C/C++/Java等)实现通讯录的基本操作,如增加、删除、修改和查询联系人;3. 学会分析不同数据结构在通讯录管理中的性能特点,选择合适的算法优化系统。

情感态度价值观目标:1. 培养学生对数据结构在解决实际问题中应用的兴趣和认识,激发其学习主动性和积极性;2. 培养学生的团队合作意识,通过小组讨论和协作完成课程设计任务;3. 增强学生的信息素养,使其认识到数据结构在信息管理中的重要性。

课程性质:本课程设计为实践性较强的课程,旨在通过实际操作,让学生将所学的数据结构知识应用于通讯录管理系统中。

学生特点:针对高年级学生,具备一定的编程基础和数据结构理论知识,具备独立思考和解决问题的能力。

教学要求:注重理论与实践相结合,强调动手实践能力,关注学生的个性化发展,培养创新精神和团队合作能力。

通过本课程的学习,使学生能够将所学知识应用于实际项目中,提高解决实际问题的能力。

二、教学内容1. 通讯录数据结构基础- 线性表的基本概念与实现(教材第3章)- 通讯录数据结构设计原理(教材第4章)2. 通讯录管理系统功能设计- 联系人信息的增加、删除、修改、查询操作(教材第5章)- 排序与查找算法在通讯录中的应用(教材第6章)3. 编程语言与数据结构实现- C/C++/Java等编程语言的基本语法复习(教材第2章)- 使用编程语言实现通讯录数据结构及操作(教材第7章)4. 实践操作与系统优化- 设计并实现一个简单的通讯录管理系统(综合教材第3-7章内容)- 分析不同数据结构在通讯录管理中的性能特点,进行系统优化(教材第8章)5. 课程项目与团队协作- 分组讨论,明确项目需求和分工(教材第9章)- 团队协作完成课程设计,并进行成果展示与评价(教材第10章)教学内容安排与进度:第1周:通讯录数据结构基础,线性表的概念与实现第2周:通讯录管理系统功能设计,编写基本操作接口第3周:编程语言复习,实现通讯录数据结构及操作第4周:实践操作,设计并实现通讯录管理系统第5周:系统性能分析,优化数据结构和算法第6周:课程项目总结,团队协作成果展示与评价三、教学方法1. 讲授法:通过教师讲解,使学生掌握通讯录数据结构的基本概念、原理和实现方法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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循环及指针问题,定义了多个具有独立功能的函数模块。

更好的运用函数调用,程序设计思路清晰,程序可读性高。

实现了结构化的思想。

通过这些天的努力这次程序设计即将结束,虽然不是很完美但我想这次的课程设计会给我以后的设计程序时带来很大帮助和鼓励。

通过这次学习,让我明白编写程序的涵义不是我们自己会就可以的而是应该提供给别人,让别人能正确运行的。

相关文档
最新文档