c语言程序设计之通讯录
- 格式:wps
- 大小:41.50 KB
- 文档页数:10
一、设计任务书1)复习、巩固C语言的基础知识,进一步加深对C语言的理解和掌握;2)课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。
提高学生适应实际,实践编程的能力;3)培养学生在项目开发中团队合作精神、创新意识及能力。
4)对系统进行功能模块分析、控制模块分析正确,符合课题要求,实现相应功能;可以加以其他功能或修饰,使程序更加完善、合理;二、本组课题设计一个通讯录管理系统三、程序功能简介该程序具有添加、查找,修改、删除通讯录中各个成员所有信息的功能。
四、主体内容1、设计分析1.1问题提出本人计划编写一个通讯录管理系统,主要用来记录和管理所有联系人的详细联系方式1.2本系统涉及的知识点本系统涉及到所学过的知识点有:编译预处理,函数,循环结构,循环结构,数组,结构体,指针,文件等1.3功能要求1、制作一个通讯录程序,要求可以记录联系人的详细联系方式,包括:姓名,联系电话,居住地所在省份,城市,街道,以及当地邮编2、能根据需要随时在通讯录中添加联系人3、能根据联系人的名字查找他的详细联系方式4、能根据需要修改某联系人的联系方式5、能删除某特定联系人的所有联系方式2、程序结构流程图这里只附部分模块流程图:(1)系统的界面如图1所示(下图)图1 系统的菜单选项2.2、删除模块流程图:如图(2)图(2)删除模块流程图3.各模块的功能及程序说明3.1各模块的功能:* Main模块:根据选单内容实现调用函数* Delete模块:删除通讯录中某人的信息,其程序如下* list模块:显示通讯录中的所有记录3.2程序说明:(1)Main函数/******主函数开始*******/main(){int i;person p[M];int length; /*保存记录长度*/clrscr();/*清屏*/for(;;)/*无限循环*/{switch(menu())()) /*调用主菜单函数,返回值整数作开关语句的条件*/{case 0:length=create(p);break;case 1:list(p,length);break; /*显示全部记录*/case 2:search(p,length);break; /*查找记录*/case 3:length=delete(p,length);break; /*删除记录*/case 4:length=add(p,length); break; /*插入记录*/case 5:exit(0); /*如返回值为5则程序结束*/}}}(2) Delete函数/*删除函数,参数为记录数组和记录条数*/int delete(person t[],int n){char s[20]; /*要删除记录的姓名*/int ch=0;int i,j;printf("please deleted name\n"); /*提示信息*/scanf("%s",s); /*输入姓名*/i=find(t,n,s); /*调用find函数*/if(i>n-1) /*如果i>n-1超过了数组的长度*/printf("no found not deleted\n"); /*显示没找到要删除的记录*/ else{print(t[i]); /*调用输出函数显示该条记录信息*/printf("Are you sure delete it(1/0)\n"); /*确认是否要删除*/scanf("%d",&ch); /*输入一个整数0或1*/if(ch==1) /*如果确认删除整数为1*/{for(j=i+1;j<n;j++) /*删除该记录,实际后续记录前移*/{strcpy(t[j-1].name,t[j].name); /*将后一条记录的姓名拷贝到前一条*/strcpy(t[j-1].units,t[j].units); /*将后一条记录的单位拷贝到前一条*/strcpy(t[j-1].tele,t[j].tele); /*将后一条记录的电话拷贝到前一条*/strcpy(t[j-1].street,t[j].street); /*将后一条记录的街道拷贝到前一条*/strcpy(t[j-1].city,t[j].city); /*将后一条记录的城市拷贝到前一条*/strcpy(t[j-1].provience,t[j].provience); /*将后一条记录的省份拷贝到前一条*/strcpy(t[j-1].num,t[j].num); /*将后一条记录的邮编拷贝到前一条*/}n--; /*记录数减1*/}}return n; /*返回记录数*/}(3)List函数/*显示记录,参数为记录数组和记录条数*/void list(person t[],int n){int i;clrscr();printf("\n\n*******************ADDRESS******************\n");printf("name unit telephone street city provience num\n");printf("------------------------------------------------\n");for(i=0;i<n;i++)printf("%-20s%-30s%-10s%-20s%-20s%-20s%-20s\n",t[i].name,t[i].units,t[i].tele,t[i].street,t[i].city,t[i].provience,t[i].num);if((i+1)%10==0) /*判断输出是否达到10条记录*/{printf("Press any key continue...\n"); /*提示信息*/getch();/*压任意键继续*/}printf("************************end*******************\n");}4、试验结果『含输入数据和输出结果』通过很多次的实验,本程序(源程序在程序清单中)终于可以正常运行,任何一项功能都能顺利实现5、设计体会以前不曾做过课程设计,因此在做课程设计时遇到了很大的困难,首先是在编写程序时,用的时间很长,并且经过多次运行都不能成功。
c语言课程设计 通讯录一、课程目标知识目标:1. 理解并掌握C语言结构体和数组的使用,能够运用其创建和操作通讯录。
2. 学习并掌握C语言中的文件操作,实现通讯录数据的保存和读取功能。
3. 掌握C语言中的函数定义和应用,实现通讯录各项功能模块的划分和调用。
技能目标:1. 能够编写C程序,实现通讯录的增加、删除、修改和查询功能。
2. 能够运用所学知识,设计出界面友好、操作简便的通讯录管理系统。
3. 能够对程序进行调试和优化,提高代码的可读性和执行效率。
情感态度价值观目标:1. 培养学生主动探索、积极实践的学习态度,增强其解决实际问题的能力。
2. 培养学生的团队协作精神,学会与他人共同分析问题、解决问题。
3. 通过本课程的学习,使学生认识到编程在生活中的应用价值,激发其对计算机科学的兴趣。
分析课程性质、学生特点和教学要求:本课程为C语言课程设计,旨在巩固和拓展学生所学知识,提高其编程能力。
学生已具备一定的C语言基础,能够独立完成简单的程序编写。
课程要求学生通过动手实践,掌握结构体、数组、文件操作等知识,并能够将其应用于实际项目中。
课程目标明确,分解为具体学习成果,便于教学设计和评估。
在教学过程中,注重培养学生的实际操作能力和团队协作能力,提高其综合素质。
二、教学内容根据课程目标,教学内容主要包括以下几部分:1. C语言基础知识回顾:结构体、数组、函数、文件操作等。
- 结构体:定义、声明、初始化、结构体数组。
- 数组:一维数组、二维数组、字符串与字符数组。
- 函数:函数定义、声明、调用、参数传递。
- 文件操作:文件打开、关闭、读写、定位。
2. 通讯录管理系统功能模块设计:- 系统架构设计:功能模块划分、模块间关系。
- 功能实现:增加、删除、修改、查询、排序等。
3. 编程实践与调试:- 编写代码实现通讯录管理系统各项功能。
- 调试程序,优化代码,提高执行效率。
4. 团队协作与项目展示:- 分组进行项目开发,培养学生团队协作能力。
通讯录C语言程序设计通讯录C语言程序设计是一个常见的编程练习项目,它可以帮助初学者熟悉C语言的基本语法和数据结构。
下面是一个简单的通讯录程序设计示例,包括了程序的基本框架、功能实现和代码实现。
程序设计目标设计一个通讯录程序,能够实现以下功能:1. 添加联系人2. 删除联系人3. 修改联系人信息4. 显示所有联系人5. 按姓名查找联系人6. 保存联系人信息到文件7. 从文件加载联系人信息程序设计思路1. 数据结构设计:使用结构体`struct Contact`来存储联系人信息,包括姓名、电话号码、电子邮件等。
2. 功能模块划分:将程序分为多个功能模块,如添加、删除、修改、显示、查找、保存和加载。
3. 用户界面设计:设计一个简单的文本界面,使用循环让用户选择相应的操作。
4. 文件操作:使用C语言的文件操作函数来实现联系人信息的持久化存储。
数据结构定义```c#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX_CONTACTS 100#define MAX_NAME 50#define MAX_PHONE 20#define MAX_EMAIL 50struct Contact {char name[MAX_NAME];char phone[MAX_PHONE];char email[MAX_EMAIL];};struct Contact contacts[MAX_CONTACTS];int contactCount = 0;```功能实现1. 添加联系人```cvoid addContact() {if (contactCount >= MAX_CONTACTS) {printf("Contact list is full.\n"); return;}printf("Enter name: ");scanf("%49s", contacts[contactCount].name);printf("Enter phone: ");scanf("%19s", contacts[contactCount].phone);printf("Enter email: ");scanf("%49s", contacts[contactCount].email);contactCount++;}```2. 删除联系人```cvoid deleteContact() {int i, index;printf("Enter name of the contact to delete: ");scanf("%49s", contacts[index].name);for (i = 0; i < contactCount; i++) {if (strcmp(contacts[i].name, contacts[index].name) == 0) {index = i;break;}}if (i == contactCount) {printf("Contact not found.\n");} else {for (; i < contactCount - 1; i++) {contacts[i] = contacts[i + 1];}contactCount--;printf("Contact deleted.\n");}}```3. 修改联系人信息```cvoid modifyContact() {// 类似于删除联系人,找到联系人后修改信息}```4. 显示所有联系人```cvoid displayContacts() {for (int i = 0; i < contactCount; i++) {printf("%s, %s, %s\n", contacts[i].name, contacts[i].phone, contacts[i].email);}}```5. 按姓名查找联系人```cvoid findContact() {char name[MAX_NAME];printf("Enter name to find: ");scanf("%49s", name);for (int i = 0; i < contactCount; i++) {if (strcmp(contacts[i].name, name) == 0) { printf("%s, %s, %s\n", contacts[i].name, contacts[i].phone, contacts[i].email);return;}}printf("Contact not found.\n");}```6. 保存联系人信息到文件```cvoid saveContactsToFile() {FILE *file = fopen("contacts.txt", "w");if (file == NULL) {printf("Error opening file.\n");return;}for (int i = 0; i < contactCount; i++) {fprintf(file, "%s,%s,%s\n", contacts[i].name, contacts[i].phone, contacts[i].email);}fclose(file);printf("Contacts saved to file.\n");}```7. 从文件加载联系人信息```cvoid loadContactsFromFile() {FILE *file = fopen("contacts.txt", "r");if (file == NULL) {printf("。
c语言课程设计通讯录一、课程目标知识目标:1. 理解并掌握C语言中的结构体概念,能够运用结构体创建复杂数据类型;2. 学会使用数组存储结构体数据,实现结构体数组的操作;3. 掌握文件操作的基本方法,实现对通讯录数据的读写和存储。
技能目标:1. 能够编写C程序,设计并实现一个基本的通讯录管理系统;2. 能够运用选择、循环等基本控制结构实现对通讯录的有效管理;3. 能够对程序进行调试和优化,提高代码的执行效率。
情感态度价值观目标:1. 培养学生的编程兴趣,激发他们主动探索问题的积极性;2. 培养学生团队协作意识,提高沟通与协作能力;3. 引导学生认识到编程在生活中的实际应用,增强学以致用的意识。
课程性质分析:本课程为C语言课程设计,旨在通过设计一个通讯录管理系统,让学生将所学C语言知识应用于实际项目中,提高编程实践能力。
学生特点分析:学生已具备基本的C语言知识,熟悉语法和基本控制结构,但可能缺乏实际项目经验,对复杂数据类型和文件操作尚需加强。
教学要求:1. 注重理论与实践相结合,引导学生通过实际操作掌握知识;2. 鼓励学生相互讨论、协作,培养解决问题和团队协作能力;3. 强化代码规范,提高代码质量和可读性。
二、教学内容1. 结构体和结构体数组:- 介绍结构体的定义和使用;- 通过通讯录管理系统的需求,设计联系人结构体;- 引导学生运用结构体数组存储和管理联系人信息。
2. 文件操作:- 讲解文件的基本概念和文件操作函数;- 结合通讯录管理系统,实现数据的读写和存储。
3. 通讯录功能实现:- 添加联系人:实现输入、存储联系人信息的功能;- 删除联系人:实现根据条件删除指定联系人的功能;- 查找联系人:实现根据关键字查找联系人的功能;- 显示所有联系人:实现显示通讯录中所有联系人的功能。
4. 程序调试与优化:- 分析程序可能出现的错误和异常;- 引导学生掌握调试方法,优化代码执行效率。
教材章节关联:本教学内容与教材中关于结构体、数组、文件操作等章节密切相关。
c 课程设计之通讯录一、教学目标本节课的教学目标是让学生掌握通讯录的基本知识和技能,能够运用编程语言实现一个简单的通讯录管理系统。
具体来说,知识目标包括了解通讯录的概念、结构和常用编程语言;技能目标包括掌握基本的编程语法、数据结构和算法;情感态度价值观目标包括培养学生的团队合作意识、自主学习和解决问题的能力。
二、教学内容本节课的教学内容主要包括通讯录的概念、结构和常用编程语言,以及如何运用编程语言实现一个简单的通讯录管理系统。
具体来说,首先介绍通讯录的概念和结构,让学生了解通讯录的基本组成和分类;然后讲解常用编程语言的基本语法和特点,让学生能够选择合适的编程语言进行通讯录管理系统的设计和实现;最后通过案例分析和实践操作,让学生动手编写代码,完成一个简单的通讯录管理系统。
三、教学方法为了达到本节课的教学目标,采用多种教学方法相结合的方式进行教学。
首先,运用讲授法向学生讲解通讯录的概念、结构和编程语言的基本语法;其次,通过讨论法引导学生探讨如何实现通讯录管理系统的功能,并运用案例分析法分析实际案例,让学生更好地理解通讯录管理系统的应用;最后,利用实验法让学生动手实践,编写代码并完成一个简单的通讯录管理系统。
四、教学资源为了支持本节课的教学内容和教学方法的实施,准备以下教学资源:教材《编程语言基础》、参考书《通讯录管理系统设计与实现》、多媒体资料(包括编程语言的教学视频和案例分析的图片、文档等)、实验设备(计算机、网络等)。
这些教学资源将有助于丰富学生的学习体验,提高学生的学习效果。
五、教学评估本节课的教学评估采用多元化的方式,以全面、客观、公正地评估学生的学习成果。
评估方式包括平时表现、作业和考试。
平时表现主要评估学生在课堂上的参与程度、提问回答和团队协作等情况;作业则通过学生提交的编程练习和项目任务来评估其掌握编程语言和通讯录管理系统的能力;考试则以书面测试的形式,评估学生对通讯录概念、结构和编程语言知识的掌握程度。
c语言课程设计通讯录好的,我可以帮助您设计一个简单的通讯录程序。
下面是一个示例代码,实现了通讯录的基本功能,包括添加联系人、显示联系人列表、查找联系人、删除联系人和修改联系人信息。
c复制代码:#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX_CONTACTS 100 // 通讯录最大容量// 定义联系人结构体typedef struct {char name[20]; // 姓名char phone[15]; // 电话号码char email[30]; // 邮箱地址} Contact;// 定义通讯录结构体typedef struct {Contact contacts[MAX_CONTACTS]; // 联系人数组int size; // 当前联系人数量} AddressBook;// 添加联系人void add_contact(AddressBook *book) {if (book->size >= MAX_CONTACTS) {printf("通讯录已满,无法添加联系人。
\n"); return;}printf("请输入联系人姓名:");scanf("%s", book->contacts[book->size].name); printf("请输入联系人电话号码:");scanf("%s", book->contacts[book->size].phone); printf("请输入联系人邮箱地址:");scanf("%s", book->contacts[book->size].email); book->size++;printf("联系人已添加。
C语言程序设计通讯录系别:电气与信息工程系专业班级:10机电一班姓名:贾云鹏学号:04041001018设计内容:设计与开发一个通讯录管理系统,对通讯录中的姓名、单位、电话、QQ 、mail等基本信息进行管理、主要功能如下:1)输入记录;2)显示记录;3按姓名查找显示记录;4)删除记录;5)插入记录;6记录保存为文件;7从文件中读记录;8按姓名排序;9显示单条记录;本系统显示这样的菜单请选择系统功能项a 输入记录;b 显示全部纪录;c 查找记录;d 删除记录;e 插入记录;f 保存文件;g 读文件:(1)按序号显示记录;(2)按姓名排序;(3)快速查找记录;算法提示:1.数据结构;结构体类型数组。
测试数据:源程序/******头文件(.h)***********/#include "stdio.h" /*I/O函数*/#include "stdlib.h" /*标准库函数*/#include "string.h"/*字符串函数*/#include "ctype.h" /*字符操作函数*/#define M 50 /*定义常数表示记录数*/typedef struct /*定义数据结构*/{char name[20]; /*姓名*/char units[30]; /*单位*/char tele[10]; }ADDRESS;/*电话*//******以下是函数原型*******/int enter(ADDRESS t[]); /*输入记录*/void list(ADDRESS t[],int n); /*显示记录*/void search(ADDRESS t[],int n); /*按姓名查找显示记录*/int delete(ADDRESS t[],int n); /*删除记录*/int add(ADDRESS t[],int n); /*插入记录*/void save(ADDRESS t[],int n); /*记录保存为文件*/int load(ADDRESS t[]); /*从文件中读记录*/void display(ADDRESS t[]); /*按序号查找显示记录*/void sort(ADDRESS t[],int n); /*按姓名排序*/void qseek(ADDRESS t[],int n); /*快速查找记录*/void copy(); /*文件复制*/void print(ADDRESS temp); /*显示单条记录*/int find(ADDRESS t[],int n,char *s) ; /*查找函数*/int menu_select(); /*主菜单函数*//******主函数开始*******/main(){int i;ADDRESS adr[M]; /*定义结构体数组*/int length; /*保存记录长度*/clrscr(); /*清屏*/for(;;)/*无限循环*/{switch(menu_select()) /*调用主菜单函数,返回值整数作开关语句的条件 {case 0:length=enter(adr);break;/*输入记录*/case 1:list(adr,length);break; /*显示全部记录*/case 2:search(adr,length);break; /*查找记录*/case 3:length=delete(adr,length);break; /*删除记录*/case 4:length=add(adr,length); break; /*插入记录*/case 5:save(adr,length);break; /*保存文件*/case 6:length=load(adr); break; /*读文件*/case 7:display(adr);break; /*按序号显示记录*/case 8:sort(adr,length);break; /*按姓名排序*/case 9:qseek(adr,length);break; /*快速查找记录*/case 10:copy();break; /*复制文件*/case 11:exit(0);}}} /*如返回值为11则程序结束*//*菜单函数,函数返回值为整数,代表所选的菜单项*/menu_select(){ char s[80];int c;gotoxy(1,25);/*将光标定为在第25行,第1列*/printf("press any key enter menu......\n");/*提示压任意键继续*/ getch(); /*读入任意字符*/clrscr(); /*清屏*/gotoxy(1,1);printf("********************MENU*********************\n\n");printf(" 0. Enter record\n");printf(" 1. List the file\n");printf(" 2. Search record on name\n");printf(" 3. Delete a record\n");printf(" 4. add record \n");printf(" 5. Save the file\n");printf(" 6. Load the file\n");printf(" 7. display record on order\n");printf(" 8. sort to make new file\n");printf(" 9. Quick seek record\n");printf(" 10. copy the file to new file\n");printf(" 11. Quit\n");printf("***********************************************\n");do{printf("\nEnter you choice(0~11):"); /*提示输入选项*/scanf("%s",s); /*输入选择项*/c=atoi(s); } /*将输入的字符串转化为整型数*/while(c<0||c>11); /*选择项不在0~11之间重输*/return c; }/*返回选择项,主程序根据该数调用相应的函数*//***输入记录,形参为结构体数组,函数值返回类型为整型表示记录长度*/ int enter(ADDRESS t[]){ int i,n;char *s;clrscr(); /*清屏*/printf("\nplease input num \n"); /*提示信息*/scanf("%d",&n); /*输入记录数*/printf("please input record \n"); /*提示输入记录*/printf("name unit telephone\n"); printf("------------------------------------------------\n");for(i=0;i<n;i++){scanf("%s%s%s",t[i].name,t[i].units,t[i].tele); /*输入记录*/ printf("----------------------------------------------\n");}return n; }/*返回记录条数*//*显示记录,参数为记录数组和记录条数*/void list(ADDRESS t[],int n){int i;clrscr();printf("\n\n*******************ADDRESS******************\n");printf("name unit telephone\n"); printf("------------------------------------------------\n");for(i=0;i<n;i++)printf("%-20s%-30s%-10s\n",t[i].name,t[i].units,t[i].tele);if((i+1)%10==0) /*判断输出是否达到10条记录*/{printf("Press any key continue...\n"); /*提示信息*/getch();} /*压任意键继续*/printf("************************end*******************\n");}/*查找函数,参数为记录数组和记录条数以及姓名s */int find(ADDRESS t[],int n,char *s){int i;for(i=0;i<n;i++)/*从第一条记录开始,直到最后一条*/{if(strcmp(s,t[i].name)==0) /*记录中的姓名和待比较的姓名是否相等*/ return i; } /*相等,则返回该记录的下标号,程序提前结结束*/return i; /*返回i值*/}/*删除函数,参数为记录数组和记录条数*/int delete(ADDRESS t[],int n){char s[20]; /*要删除记录的姓名*/int ch=0;int i,j;printf("please deleted name\n"); /*提示信息*/scanf("%s",s);/*输入姓名*/i=find(t,n,s); /*调用find函数*/if(i>n-1) /*如果i>n-1超过了数组的长度*/printf("no found not deleted\n"); /*显示没找到要删除的记录*/else{print(t[i]); /*调用输出函数显示该条记录信息*/printf("Are you sure delete it(1/0)\n"); /*确认是否要删除*/scanf("%d",&ch); /*输入一个整数0或1*/if(ch==1) /*如果确认删除整数为1*/{for(j=i+1;j<n;j++) /*删除该记录,实际后续记录前移*/ {strcpy(t[j-1].name,t[j].name); /*将后一条记录的姓名拷贝到前一条*/ strcpy(t[j-1].units,t[j].units); /*将后一条记录的单位拷贝到前一条strcpy(t[j-1].tele,t[j].tele); } /*将后一条记录的电话拷贝到前一条 n--;}} /*记录数减1*/return n; }/*返回记录数*//*插入记录函数,参数为结构体数组和记录数*/int add(ADDRESS t[],int n)/*插入函数,参数为结构体数组和记录数*/ {ADDRESS temp; /*新插入记录信息*/int i,j;char s[20]; /*确定插入在哪个记录之前*/printf("please input record\n");printf("************************************************\n");printf("name unit telephone\n");printf("--------------------------------------------------\n");scanf("%s%s%s",,temp.units,temp.tele); /*输入插入信息*/printf("---------------------------------------------\n");printf("please input locate name \n");scanf("%s",s); /*输入插入位置的姓名*/i=find(t,n,s); /*调用find,确定插入位置*/for(j=n-1;j>=i;j--) /*从最后一个结点开始向后移动一条*/{ strcpy(t[j+1].name,t[j].name); /*当前记录的姓名拷贝到后一条*/strcpy(t[j+1].units,t[j].units); /*当前记录的单位拷贝到后一条*/ strcpy(t[j+1].tele,t[j].tele); } /*当前记录的电话拷贝到后一条*/strcpy(t[i].name,); /*将新插入记录的姓名拷贝到第i个位置strcpy(t[i].units,temp.units); /*将新插入记录的单位拷贝到第i个位置 strcpy(t[i].tele,temp.tele); /*将新插入记录的电话拷贝到第i个位置*/ n++; /*记录数加1*/return n; } /*返回记录数*//*保存函数,参数为结构体数组和记录数*/void save(ADDRESS t[],int n){int i;FILE *fp; /*指向文件的指针*/if((fp=fopen("record.txt","wb"))==NULL)/*打开文件,并判断打开是否正常 {printf("can not open file\n");/*没打开*/exit(1); } /*退出*/printf("\nSaving file\n"); /*输出提示信息*/fprintf(fp,"%d",n); /*将记录数写入文件*/fprintf(fp,"\r\n"); /*将换行符号写入文件*/for(i=0;i<n;i++){fprintf(fp,"%-20s%-30s%-10s",t[i].name,t[i].units,t[i].tele);/*格式写入记录*/fprintf(fp,"\r\n");}/*将换行符号写入文件*/fclose(fp);/*关闭文件*/printf("****save success***\n");}/*显示保存成功*//*读入函数,参数为结构体数组*/int load(ADDRESS t[]){int i,n;FILE *fp; /*指向文件的指针*/if((fp=fopen("record.txt","rb"))==NULL)/*打开文件*/{printf("can not open file\n"); /*不能打开*/exit(1);} /*退出*/fscanf(fp,"%d",&n); /*读入记录数*/for(i=0;i<n;i++)fscanf(fp,"%20s%30s%10s",t[i].name,t[i].units,t[i].tele); /*按格式读入记录*/fclose(fp); /*关闭文件*/printf("You have success read data from file!!!\n"); /*显示保存成功 return n; }/*返回记录数*//*按序号显示记录函数*/void display(ADDRESS t[]){int id,n;FILE *fp; /*指向文件的指针*/if((fp=fopen("record.txt","rb"))==NULL) /*打开文件*/{printf("can not open file\n"); /*不能打开文件*/exit(1);} /*退出*printf("Enter order number...\n"); /*显示信息*/scanf("%d",&id); /*输入序号*/fscanf(fp,"%d",&n); /*从文件读入记录数*/if(id>=0&&id<n) /*判断序号是否在记录范围内*/{fseek(fp,(id-1)*sizeof(ADDRESS),1); /*移动文件指针到该记录位置*/ print(t[id]); /*调用输出函数显示该记录*/printf("\r\n");}elseprintf("no %d number record!!!\n ",id); /*如果序号不合理显示信息*/ fclose(fp); } /*关闭文件*//*排序函数,参数为结构体数组和记录数*/void sort(ADDRESS t[],int n){int i,j,flag;ADDRESS temp; /*临时变量做交换数据用*/for(i=0;i<n;i++){flag=0; /*设标志判断是否发生过交换*/for(j=0;j<n-1;j++)if((strcmp(t[j].name,t[j+1].name))>0) /*比较大小*/{flag=1;strcpy(,t[j].name); /*交换记录*/strcpy(temp.units,t[j].units);strcpy(temp.tele,t[j].tele);strcpy(t[j].name,t[j+1].name);strcpy(t[j].units,t[j+1].units);strcpy(t[j].tele,t[j+1].tele);strcpy(t[j+1].name,);strcpy(t[j+1].units,temp.units);strcpy(t[j+1].tele,temp.tele);}if(flag==0)break;} /*如果标志为0,说明没有发生过交换循环结束*/ printf("sort sucess!!!\n"); }/*显示排序成功*//*快速查找,参数为结构体数组和记录数*/void qseek(ADDRESS t[],int n){char s[20];int l,r,m;printf("\nPlease sort before qseek!\n"); /*提示确认在查找之前,记录是否已排序*/printf("please enter name for qseek\n"); /*提示输入*/scanf("%s",s); /*输入待查找的姓名*/l=0;r=n-1; /*设置左边界与右边界的初值*/while(l<=r) /*当左边界<=右边界时*/{m=(l+r)/2; /*计算中间位置*/if(strcmp(t[m].name,s)==0) /*与中间结点姓名字段做比较判是否相等*/ {print(t[m]); /*如果相等,则调用print函数显示记录信息*/return ; } /*返回*/if(strcmp(t[m].name,s)<0) /*如果中间结点小*/l=m+1; /*修改左边界*/elser=m-1;} /*否则,中间结点大,修改右边界*/if(l>r) /*如果左边界大于右边界时*/printf("not found\n");}/*显示没找到*/。
通讯录程序设计c通讯录程序设计是计算机编程中的一个常见项目,旨在通过编写代码来实现对联系人信息的存储、查询、修改和删除等功能。
以下是关于通讯录程序设计的详细内容。
一、设计目标通讯录程序的主要目标是提供一个用户界面,允许用户添加、查找、更新和删除联系人信息。
联系人信息通常包括姓名、电话号码、电子邮件地址、住址等。
二、需求分析1. 用户界面:简洁直观,易于操作。
2. 数据存储:能够持久化存储联系人信息。
3. 功能需求:- 添加联系人:允许用户输入并保存新的联系人信息。
- 查询联系人:根据姓名或其他信息搜索联系人。
- 修改联系人:允许用户更新已存在的联系人信息。
- 删除联系人:允许用户删除不再需要的联系人信息。
三、技术选型1. 编程语言:根据项目需求和团队熟悉度选择合适的编程语言,如C、Java、Python等。
2. 数据存储:可以使用文件系统、数据库或内存中的数据结构。
3. 开发环境:选择适合的IDE(集成开发环境)进行编码,如Visual Studio、Eclipse等。
四、系统设计1. 数据结构:设计合适的数据结构来存储联系人信息,如使用结构体或类。
2. 功能模块:- 输入模块:负责接收用户输入的联系人信息。
- 存储模块:负责将联系人信息存储到指定的存储介质。
- 查询模块:提供搜索功能,根据用户输入的关键字查找联系人。
- 修改模块:允许用户修改已存储的联系人信息。
- 删除模块:允许用户删除联系人信息。
五、界面设计1. 主界面:显示所有功能选项,如添加、查询、修改、删除。
2. 输入界面:当用户选择添加或修改联系人时,提供输入界面。
3. 查询结果界面:显示查询结果,可能包括联系人列表或详细信息。
六、实现步骤1. 定义数据结构:根据需求定义联系人的数据结构。
2. 编写功能模块:逐一实现添加、查询、修改和删除功能。
3. 集成测试:将各个模块集成到一起,进行系统测试。
4. 用户测试:让实际用户测试程序,收集反馈并进行优化。
#include<stdio.h>#include<string.h>#include<stdlib.h>int mimayanzheng(char a[],char b[]);void luru(int n);void xinxichaxun(struct txl_type mulu[],int n); int chazhao(struct txl_type mulu[],int n,int j); void xiugai(struct txl_type mulu[],int n);void shanchu(struct txl_type mulu[],int n);void paixu(struct txl_type mulu[],int n);void baocun(struct txl_type mulu[],int n);struct txl_type{ char name[15] ;char sex[5] ;char age[4] ;char phnum[15] ;char email[20];char adr[30] ;};void main(){char a[8]="1234567",b[8];int i,j;FILE *fp;for(i=0;i<3;i++){printf("请输入密码并按回车键确认\n");if(mimayanzheng(a,b)==1){printf("密码正确,成功");printf("进入系统\n");break;}elseprintf("密码错误请重新输入\n");}if(i==3){printf("退出程序\n");goto loop;}if((fp=fopen("tx1.txt","a"))==NULL)goto loop;fclose(fp);for(;;){struct txl_type mulu[500],*p;char ch;int n;FILE *fp;fp=fopen("tx1.txt","r");n=0;p=mulu;while((ch=fgetc(fp))!=EOF){fscanf(fp,"%s%s%s%s%s%s",p->name,p->sex,p->age,p->phnum,p->email,p->adr);p++;n++;};do{printf("1.信息录入 2.信息修改 3.信息查询4信息删除5信息排序6信息保存7退出\n");scanf("%d",&j);fflush(stdin);}while(j!=1&&j!=2&&j!=3&&j!=4&&j!=5&&j!=6&&j!=7);switch(j){case 1:printf("进入信息录入系统\n");luru(n);break;case 2:printf("进入信息修改系统\n");xiugai(mulu,n);break;case 3:printf("进入信息查询系统\n");xinxichaxun(mulu,n);break;case 4:printf("进入信息删除系统\n");shanchu(mulu,n);break;case 5:printf("进入信息排序系统\n");paixu(mulu,n);break;case 6:printf("进入信息保存系统\n");baocun(mulu,n);break;case 7:goto loop;}}loop:;}mimayanzheng(char a[],char b[]){int i;scanf("%7s",b);for(i=0;i<7;i++){ if(a[i]!=b[i])return 0;}return 1;}void luru(int n){struct txl_type t;int i;FILE *fp;fp=fopen("tx1.txt","a");i=1;while(i==1){fflush(stdin);printf("请输入联系人姓名\n");scanf("%s",);fflush(stdin);printf("请输入联系人性别\n");scanf("%s",t.sex);fflush(stdin);printf("请输入联系人年龄\n");scanf("%s",t.age);fflush(stdin);printf("请输入联系人手机号\n");scanf("%s",t.phnum);fflush(stdin);printf("请输入联系人邮箱\n");scanf("%s",t.email);fflush(stdin);printf("请输入联系人地址\n");scanf("%s",t.adr);fflush(stdin);fprintf(fp,"\n");fprintf(fp,"%12s %3s %4s %10s %6s %6s", ,t.sex ,t.age ,t.phnum ,t.email,t.a dr);printf("------------------------------------------------\n");n++;printf("新增联系人成功还可以添加%d个是否继续添加?\n",(500-n));printf(" 1.是 2. 否\n");scanf("%d",&i);fflush(stdin);}printf("已有%d名联系人\n",n);printf("还可以新增%d个联系人人\n",(500-n));fclose(fp);}void xinxichaxun(struct txl_type mulu[],int n){struct txl_type *p;int k=1,j;while(k==1){p=mulu;printf("请选择:1.用姓名查找 2.用电话号码查找\n");scanf("%d",&j);fflush(stdin);chazhao(p,n,j);/*调用查找程序*/printf("\n");printf(" 查找结束,是否继续查找?\n");printf(" 1.是 2.否\n");scanf("%d",&k);fflush(stdin);}}int chazhao(struct txl_type *p,int n,int j){int i,m[10],a=0,b;char keyName[10],keyphnum[15];if(j==1){printf("请输入姓名:\n");scanf("%s", keyName);fflush(stdin);printf("查找结果:\n");for(i=0;i<n;i++){if(strcmp(keyName,p->name)==0){printf("联系人%d: name:%s age:%s phnum:%s email:%s adr:%s\n",(a+1),p->name,p->age,p->phnum,p->email,p->adr);a++;m[a]=i;}p++;}}else if(j==2){printf("请输入电话号码:\n");scanf("%s", keyphnum);fflush(stdin);printf("查找结果:\n");for(i=0;i<n;i++){if(strcmp(keyphnum,p->phnum)==0){printf("联系人%d: name:%s age:%s phnum:%s email:%s adr:%s\n",(a+1),p->name,p->age,p->phnum,p->email,p->adr);a++;m[a]=i;}p++;}}if(a==0){printf(" 该联系人不存在!\n");return i;}else{printf("共找到以上%d个联系人\n",a);printf("请选择你要找的联系人(输入该联系人序号)\n");scanf("%d",&b);}return m[b];}void xiugai(struct txl_type mulu[],int n){struct txl_type *p,k;int m,i,t,j=1;FILE *fp;p=mulu;t=chazhao(p,n,j);/*调用查找程序*/if(t>=n);else{printf("请对该联系人资料进行修改进行修改\n");printf("请输入修改后联系人姓名\n");scanf("%s",);fflush(stdin);printf("请输入修改后联系人性别\n");scanf("%s",k.sex);fflush(stdin);printf("请输入修改后联系人年龄\n");scanf("%s",k.age);fflush(stdin);printf("请输入修改后联系人手机号\n");scanf("%s",k.phnum);fflush(stdin);printf("请输入修改后联系人邮箱\n");scanf("%s",k.email);fflush(stdin);printf("请输入修改后联系人地址\n");scanf("%s",k.adr);fflush(stdin);printf("修改前联系人资料:name:%s age:%s phnum:%s email:%s adr:%s\n",mulu[t].name,mulu[t].age,mulu[t].phnum,mulu[t].email,mulu[t].adr);printf("修改后联系人资料:name:%s age:%s phnum:%s email:%s adr:%s\n",,k.age,k.phnum,k.email,k.adr);printf("是否保存对联系人的修改? 1.是 2.否\n");scanf("%d",&m);if(m==1){mulu[t]=k;if((fp=fopen("tx1.txt","w"))!=NULL){for(i=0;i<n;i++){fprintf(fp,"\n");fprintf(fp,"%12s %3s %4s %10s %6s %6s",mulu[i].name ,mulu[i].sex ,mulu[i].age , mulu[i].phnum ,mulu[i].email,mulu[i].adr);}printf("已保存修改\n");}fclose(fp);}}}void shanchu(struct txl_type mulu[],int n){struct txl_type *p;int m,i,t,j=1;FILE *fp;p=mulu;t=chazhao(p,n,j);/*调用查找程序*/if(t>=n);else{printf(" 是否删除该联系人?\n");printf(" 1.是 2.否\n");scanf("%d",&m);fflush(stdin);if(m==1){for(i=t;i<n-1;i++)mulu[i]=mulu[i+1];if((fp=fopen("tx1.txt","w"))!=NULL){for(i=0;i<n-1;i++){fprintf(fp,"\n");fprintf(fp,"%12s %3s %4s %10s %6s %6s",mulu[i].name ,mulu[i].sex ,mulu[i].age , mulu[i].phnum ,mulu[i].email,mulu[i].adr);}}printf("该联系人已删除\n");fclose(fp);}}}void paixu(struct txl_type mulu[],int n){int i,j,m;struct txl_type t;FILE *fp;printf("请选择排序方式: 1.按姓名排序 2.按年龄排序\n");scanf("%d",&m);for(i=1;i<=n-1;i++){for(j=0;j<n-i;j++){if(m==1){if(strcmp(mulu[j].name,mulu[j+1].name)==1){t=mulu[j];mulu[j]=mulu[j+1];mulu[j+1]=t;}}else if(m==2){if(strcmp(mulu[j].age,mulu[j+1].age)==1){t=mulu[j];mulu[j]=mulu[j+1];mulu[j+1]=t;}}}}printf("排序后\n");if((fp=fopen("tx1.txt","w"))!=NULL){for(i=0;i<n;i++){fprintf(fp,"\n");fprintf(fp,"%12s %3s %4s %10s %6s %6s",mulu[i].name ,mulu[i].sex ,mulu[i].age , mulu[i].phnum ,mulu[i].email,mulu[i].adr);printf("name:%-12s sex:%-2s age:%-3s phnum:%-8s email:%-5s adr:%-5s\n",mulu[i].name,mulu[i].sex,mulu[i].age,mulu[i].phnum,mulu[i].email,mulu[i].adr);}}fclose(fp);printf("排序已完成,按回车键返回主菜单\n");fflush(stdin);if(m){char a;scanf("%c",&a);}}void baocun(struct txl_type mulu[],int n){int i,m;FILE *fp;printf(" 是否将联系人名单保存至lianxiren.txt?\n");printf(" 1.是 2.否\n");scanf("%d",&m);if(m==1){if((fp=fopen("lianxiren.txt","w"))!=NULL){for(i=0;i<n-1;i++){fprintf(fp,"\n");fprintf(fp,"姓名:%-10s 性别:%-2s 年龄:%-2s 电话号码:%-10s 邮箱:%-5s 地址:%-5s",mulu[i].name ,mulu[i].sex ,mulu[i].age ,mulu[i].phnum ,mulu[i].email,mulu[i].adr);}}fclose(fp);printf(" 保存成功,按回车键返回主菜单\n");}fflush(stdin);if(m!=2){char a;scanf("%c",&a);}}。