C语言通讯录
c语言课程设计通讯录
c语言课程设计 通讯录一、课程目标知识目标:1. 理解并掌握C语言结构体和数组的使用,能够运用其创建和操作通讯录。
2. 学习并掌握C语言中的文件操作,实现通讯录数据的保存和读取功能。
3. 掌握C语言中的函数定义和应用,实现通讯录各项功能模块的划分和调用。
技能目标:1. 能够编写C程序,实现通讯录的增加、删除、修改和查询功能。
2. 能够运用所学知识,设计出界面友好、操作简便的通讯录管理系统。
3. 能够对程序进行调试和优化,提高代码的可读性和执行效率。
情感态度价值观目标:1. 培养学生主动探索、积极实践的学习态度,增强其解决实际问题的能力。
2. 培养学生的团队协作精神,学会与他人共同分析问题、解决问题。
3. 通过本课程的学习,使学生认识到编程在生活中的应用价值,激发其对计算机科学的兴趣。
分析课程性质、学生特点和教学要求:本课程为C语言课程设计,旨在巩固和拓展学生所学知识,提高其编程能力。
学生已具备一定的C语言基础,能够独立完成简单的程序编写。
课程要求学生通过动手实践,掌握结构体、数组、文件操作等知识,并能够将其应用于实际项目中。
课程目标明确,分解为具体学习成果,便于教学设计和评估。
在教学过程中,注重培养学生的实际操作能力和团队协作能力,提高其综合素质。
二、教学内容根据课程目标,教学内容主要包括以下几部分:1. C语言基础知识回顾:结构体、数组、函数、文件操作等。
- 结构体:定义、声明、初始化、结构体数组。
- 数组:一维数组、二维数组、字符串与字符数组。
- 函数:函数定义、声明、调用、参数传递。
- 文件操作:文件打开、关闭、读写、定位。
2. 通讯录管理系统功能模块设计:- 系统架构设计:功能模块划分、模块间关系。
- 功能实现:增加、删除、修改、查询、排序等。
3. 编程实践与调试:- 编写代码实现通讯录管理系统各项功能。
- 调试程序,优化代码,提高执行效率。
4. 团队协作与项目展示:- 分组进行项目开发,培养学生团队协作能力。
通讯录C语言程序设计
通讯录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)每一条记录包括姓名、单位、联系电话,家庭住址等信息。
(2)输入功能:可以一次完成若干条记录的输入。
(3)显示功能:完成全部记录的显示。
(4)查找功能:能够按姓名或单位查找记录,并显示。
(5)排序功能:按姓名进行排序。
(6)插入功能:插入一条记录。
(7)将记录存在文件中,并能进行复制。
#include "stdio.h"#include "stdlib.h"#include "string.h"/*字符串函数*/#include "ctype.h"#define M 50typedef struct /*定义数据结构*/{ char name[20];char units[30];char tele[10];}ADD_BOOK;/******以下是函数原型*******/int enter(ADD_BOOK t[]); /*输入记录*/void list(ADD_BOOK t[],int n); /*显示记录*/void search(ADD_BOOK t[],int n); /*按姓名查找显示记录*/ int delete(ADD_BOOK t[],int n); /*删除记录*/int add(ADD_BOOK t[],int n); /*插入记录*/void save(ADD_BOOK t[],int n); /*记录保存为文件*/int load(ADD_BOOK t[]); /*从文件中读记录*/void display(ADD_BOOK t[]); /*按序号查找显示记录*/void sort(ADD_BOOK t[],int n); /*按姓名排序*/void qseek(ADD_BOOK t[],int n); /*快速查找记录*/void copy(); /*文件复制*/void print(ADD_BOOK temp); /*显示单条记录*/int find(ADD_BOOK t[],int n,char *s) ; /*查找函数*/int menu_select(); /*主菜单函数*//******主函数开始*******/main(){ int i;ADD_BOOK adr[M]; /*定义结构体数组*/int length; /*保存记录长度*/system("CLS");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;printf("按下任意键开始......\n");getch();system("CLS");printf("********************MENU*********************\n\n");printf(" 0. 输入新的项目\n");printf(" \t1. 列出内存中的数据\n");printf(" 2. 按姓名搜索记录\n");printf(" \t3. 删除一条记录\n");printf(" 4. 添加一条记录 \n");printf(" \t5. 保存到文件\n");printf(" 6. 读取文件\n");printf(" \t7. 按记录编号单条显示\n");printf(" 8. 按姓名排序 \n");printf(" \t9. 快速搜索已经排序的记录\n");printf(" 10. 复制文件到新的文件\n");printf(" \t11. 退出\n");printf("***********************************************\n");do{ printf("\n 请选择(0~11):");scanf("%s",s);c=atoi(s);//atio()的作用是把字符转换成整数;}while(c<0||c>11);return c;}/***输入记录,形参为结构体数组,函数值返回类型为整型表示记录长度*/ int enter(ADD_BOOK t[]){ int i,n;char *s;system("cls");printf("\n请问您想输入几条信息? \n");scanf("%d",&n);printf("请输入新的条目 \n");printf("姓名单位电话号码\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(ADD_BOOK t[],int n){ int i;system("CLS");printf("\n\n*******************ADD_BOOK******************\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){ printf("任意键继续\n");getch();}printf("************************end*******************\n");}/*查找记录*/void search(ADD_BOOK t[],int n){ char s[20];int i;system("CLS");printf("输入要查找的姓名\n");scanf("%s",s);i=find(t,n,s);if(i>n-1)printf("没有这个记录\n");elseprint(t[i]);}/*显示指定的一条记录*/void print(ADD_BOOK temp){ system("CLS");printf("\n\n********************************************\n"); printf("姓名单位电话\n"); printf("------------------------------------------------\n"); printf("%-20s%-30s%-10s\n",,temp.units,temp.tele);printf("**********************end***********************\n"); }/*查找函数,参数为记录数组和记录条数以及姓名 */int find(ADD_BOOK t[],int n,char *s){ int i;for(i=0;i<n;i++){if(strcmp(s,t[i].name)==0)return i;}return i;}/*删除函数,参数为记录数组和记录条数*/int delete(ADD_BOOK t[],int n){ char s[20];int ch=0;int i,j;printf("请输入要删除条目的姓名\n");scanf("%s",s);i=find(t,n,s);if(i>n-1)printf("没找到要删除的记录\n");else{ print(t[i]); /*调用自定义的输出函数显示该条记录信息*/printf("确定要删除么?(1/0)\n");scanf("%d",&ch);if(ch==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--;}}return n;}/*插入记录函数,参数为结构体数组和记录数*/int add(ADD_BOOK t[],int n){ ADD_BOOK temp;int i,j;char s[20];printf("请输入记录\n");printf("************************************************\n");printf("name unit telephone\n"); printf("--------------------------------------------------\n");scanf("%s%s%s",,temp.units,temp.tele);printf("------------------------------------------------\n");printf("请输入在哪里插入? \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,);strcpy(t[i].units,temp.units);strcpy(t[i].tele,temp.tele);n++;return n;}/*保存函数,参数为结构体数组和记录数*/void save(ADD_BOOK t[],int n){ int i;FILE *fp;if((fp=fopen("record.txt","wb"))==NULL){printf("error:can not open file\n");exit(1);}printf("\n保存文件\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");fflush(stdin);//清空内存}/*读入函数,参数为结构体数组*/int load(ADD_BOOK t[]){ int i,n;FILE *fp;if((fp=fopen("record.txt","rb"))==NULL){printf("error: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("删除成功!!!\n");return n;}/*按序号显示记录函数*/void display(ADD_BOOK t[]){ int id,n;FILE *fp;if((fp=fopen("record.txt","rb"))==NULL){printf("can not open file\n");exit(1);}printf("输入记录编号...\n");scanf("%d",&id);fscanf(fp,"%d",&n); /*从文件读入记录数*/if(id>=0&&id<n){ fseek(fp,(id-1)*sizeof(ADD_BOOK),1); //fseek()是移动文件指针到记录位置print(t[id]);printf("\r\n");}elseprintf("没有第 %d 条记录!!!\n ",id);fclose(fp);}/*排序函数,参数为结构体数组和记录数*/void sort(ADD_BOOK t[],int n){int i,j,flag;ADD_BOOK 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("排序成功!!!\n");}/*快速查找,参数为结构体数组和记录数*/void qseek(ADD_BOOK t[],int n){ char s[20];int l,r,m;printf("\n认在查找之前,记录是否已排序!\n");printf("输入需要查找的姓名\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]);return ;}if(strcmp(t[m].name,s)<0) l=m+1;else r=m-1;}if(l>r) printf("not found\n"); //}/*复制文件*/void copy(){ char outfile[20]; /*目标文件名*/int i,n;ADD_BOOK temp[M]; /*临时变量*/FILE *sfp,*tfp;system("CLS");if((sfp=fopen("record.txt","rb"))==NULL){ printf("error:can not open file\n");exit(1);}printf("输入将要输出的文件名称,例如 c:\\f1\\te.txt:\n"); scanf("%s",outfile);if((tfp=fopen(outfile,"wb"))==NULL) /*打开目标文件*/{printf("不能打开文件\n"); /*显示信息*/exit(1);}fscanf(sfp,"%d",&n); /*读出文件记录数*/fprintf(tfp,"%d",n);/*写入目标文件数*/fprintf(tfp,"\r\n"); /*写入换行符*/for(i=0;i<n;i++){ fscanf(sfp,"%20s%30s%10s\n",temp[i].name,temp[i].units, temp[i].tele);fprintf(tfp,"%-20s%-30s%-10s\n",temp[i].name,temp[i].units,temp[i].tele); /*写入记录*/fprintf(tfp,"\r\n"); /*写入换行符*/}fclose(sfp); /*关闭源文件*/fclose(tfp); /*关闭目标文件*/printf("复制成功!!!\n"); /*显示复制成功*/}。
c语言课程设计通讯录
5.设计友好的用户界面,使操作更加便捷。
2、教学内容
本节课在上一阶段的基础上,进一步深化以下教学内容:
1.对结构体数组进行排序,实现通讯录联系人的姓名排序功能;
2.引入链表结构,将通讯录升级为动态存储,提高内存利用率;
3.实现链表在增加、删除节点时的动态调整,确保通讯录数据的准确性;
3.结合教材中的文件操作知识,编写函数实现通讯录数据的导入和导出功能,以便于数据的备份和迁移;
4.讨论如何优化程序性能,例如通过索引、二分查找等方法提高通讯录的查询效率;
5.强调代码规范和注释的重要性,指导学生编写整洁、易于理解的C语言代码,为后续的学习和协作打下基础。
4、教学内容
在第四部分的教学内容中,我们将重点关注以下方面:
1.结合实际应用场景,引入内存分配与释放的概念,讲解动态内存管理的重要性,并在通讯录项目中正确使用malloc和free函数;
2.通过案例展示内存泄漏和野指针的问题,教育学生注意避免这些常见的编程错误;
3.引导学生设计测试用例,对通讯录程序进行单元测试和集成测试,确保程序稳定性和正确性;
4.讨论程序异常处理的重要性,教授学生如何使用try-catch机制来处理程序中可能出现的错误;
c语言课程设计通讯录
一、教学内容
本节课为九年级下学期《C语言》课程设计示范课,基于教材第七章“数组与字符串”和第十章“文件操作”的内容,开展“C语言课程设计通讯录”项目实践。教学内容主要包括:
1.使用一维数组存储通讯录中的联系人姓名;
2.使用结构体数组存储联系人的详细信息(如姓名、电话、邮箱等);
3.实现通讯录的增加、删除、查找、修改和显示等功能;
c语言课程设计通讯录
c语言课程设计通讯录一、课程目标知识目标:1. 理解并掌握C语言中的结构体概念,能够运用结构体创建复杂数据类型;2. 学会使用数组存储结构体数据,实现结构体数组的操作;3. 掌握文件操作的基本方法,实现对通讯录数据的读写和存储。
技能目标:1. 能够编写C程序,设计并实现一个基本的通讯录管理系统;2. 能够运用选择、循环等基本控制结构实现对通讯录的有效管理;3. 能够对程序进行调试和优化,提高代码的执行效率。
情感态度价值观目标:1. 培养学生的编程兴趣,激发他们主动探索问题的积极性;2. 培养学生团队协作意识,提高沟通与协作能力;3. 引导学生认识到编程在生活中的实际应用,增强学以致用的意识。
课程性质分析:本课程为C语言课程设计,旨在通过设计一个通讯录管理系统,让学生将所学C语言知识应用于实际项目中,提高编程实践能力。
学生特点分析:学生已具备基本的C语言知识,熟悉语法和基本控制结构,但可能缺乏实际项目经验,对复杂数据类型和文件操作尚需加强。
教学要求:1. 注重理论与实践相结合,引导学生通过实际操作掌握知识;2. 鼓励学生相互讨论、协作,培养解决问题和团队协作能力;3. 强化代码规范,提高代码质量和可读性。
二、教学内容1. 结构体和结构体数组:- 介绍结构体的定义和使用;- 通过通讯录管理系统的需求,设计联系人结构体;- 引导学生运用结构体数组存储和管理联系人信息。
2. 文件操作:- 讲解文件的基本概念和文件操作函数;- 结合通讯录管理系统,实现数据的读写和存储。
3. 通讯录功能实现:- 添加联系人:实现输入、存储联系人信息的功能;- 删除联系人:实现根据条件删除指定联系人的功能;- 查找联系人:实现根据关键字查找联系人的功能;- 显示所有联系人:实现显示通讯录中所有联系人的功能。
4. 程序调试与优化:- 分析程序可能出现的错误和异常;- 引导学生掌握调试方法,优化代码执行效率。
教材章节关联:本教学内容与教材中关于结构体、数组、文件操作等章节密切相关。
c语言编写的通讯录代码、
#include<stdio.h>#include<string.h>struct friends_list{char name[10];int age;char telephone[13];};int Count=0;void new_friend(struct friends_list friends[]);void search_friend(struct friends_list friends[],char*name);void Modify_friend(struct friends_list friends[],char*name);void Delete_friend(struct friends_list friends[],char*name,int n);int main(void){int choice,n;char name[10];struct friends_list friends[50];do{printf("手机通讯录功能选项: 1:新建2:查询3:修改4:删除0:退出\n"); printf("请选择功能:");scanf("%d",&choice);switch(choice){case 1:new_friend(friends);break;case 2:printf("请输入要查找的联系人姓名:");scanf("%s",name);search_friend(friends,name);break;case 3:printf("请输入您要修改的联系人的姓名:");scanf("%s",name);printf("\n");Modify_friend(friends,name);break;case 4:printf("1:单个删除2:全部删除\n\n");printf("请选择您需要的操作:\n");scanf("%d",&n);if(n==1){printf("输入名字\n");scanf("%s",name);Delete_friend(friends,name,n);break;}if(n==2){Delete_friend(friends,name,n);break;}case 0: break;}}while(choice!=0);printf("谢谢使用通讯录功能!\n");return 0;}void new_friend(struct friends_list friends[ ]){struct friends_list f;if(Count==50){printf("通讯录已满!\n");return;}printf("请输入新的联系人的姓名:");scanf("%s",);printf("请输入新联系人的年龄:");scanf("%d",&f.age);printf("请输入新联系人的联系电话:");scanf("%s",f.telephone);friends[Count] = f;Count++;}/*查询联系人*/void search_friend(struct friends_list friends[],char*name){int i,flag=0;if(Count==0){printf("通讯录是空的!\n");return;}/*在书本源代码的基础上,我修改了一下,让程序可以查询多个相同名字的联系人*/ for(i=0;i<Count;i++)if(strcmp(name,friends[i].name)==0){printf("姓名:%s\t",friends[i].name);printf("年龄:%d\t",friends[i].age);printf("电话:%s\n",friends[i].telephone);flag++;}if(flag==0)printf("无此联系人!\n");}/*修改联系人*/void Modify_friend(struct friends_list friends[],char*name){int k,y=0;int t,j=1,g=0;struct friends_list x;if(Count==0){printf("通讯录是空的!\n");return;}/*首先,判断要修改的联系人中有没有相同的名字*/for(k=0;k<Count;k++){if(strcmp(name,friends[k].name)==0)y++;}/*如果,y等于1,说明只有一个需要修改的联系人*/if(y==1){for(k=0;k<Count;k++){if(strcmp(name,friends[k].name)==0){printf("请重新输入姓名\n");scanf("%s",);printf("请重新输入年龄\n");scanf("%d",&x.age);printf("请重新输入电话号码\n");scanf("%s",x.telephone);friends[k]=x;}}}/*如果,y大于1,说明你选择修改的人中,有多个相同名字的联系人*/ if(y>1){/*用序号来显示所有需要修改的联系人*/printf("此通讯录有%d个名字相同的联系人.\n",y);for(k=0;k<Count;k++){if(strcmp(name,friends[k].name)==0){printf("%d:姓名:%-10s",j,friends[k].name);printf("年龄:%-5d",friends[k].age);printf("电话:%13s\n",friends[k].telephone);j++;}}/*选择需要修改的联系人的序号*/printf("请选择所要修改的联系人序号:\n");scanf("%d",&t);for(k=0;k<Count;k++){if(strcmp(name,friends[k].name)==0){g++;if(g==t){/*如果g等于t,说明在序号中找到了需要修改的人*/ printf("请重新输入姓名\n");scanf("%s",);printf("请重新输入年龄\n");scanf("%d",&x.age);printf("请重新输入电话号码\n");scanf("%s",x.telephone);friends[k]=x;}}}}if(y==0)printf("无此联系人\n");}void Delete_friend(struct friends_list friends[],char*name,int n) {int l,h=0,y=0,i,k;int j=1;int a[50],t,g=0;if(Count==0){printf("通讯录是空的!\n");return;}/*如果,n等于1,说明用户选择单个删除*/if(n==1){/*首先,判断在修改的人当中有没有相同名字的*/for(i=0;i<Count;i++){if(strcmp(name,friends[i].name)==0)y++;}/*如果,y等于1,说明你需要修改的人当中只有一个*/if(y==1){for(l=0;l<Count;l++){if(strcmp(name,friends[l].name)==0){do{friends[l]=friends[l+1];l++;}while(l<Count);h++;Count--;printf("删除成功!\n");}}}/*如果,y>1 说明你要修改的人当中有多个相同的名字*/if(y>1){/*用序号来显示所有需要修改的联系人*/printf("有%d个相同的联系人:\n",y);for(l=0;l<Count;l++){if(strcmp(name,friends[l].name)==0){a[l]=l;printf("%d:姓名:%-10s",j,friends[l].name);printf("年龄:%-5d",friends[l].age);printf("电话:%13s\n",friends[l].telephone);j++;h++;}}/*选择需要修改的联系人序号*/printf("请选择所要删除的联系人序号:\n");scanf("%d",&t);for(k=0;k<Count;k++)if(strcmp(name,friends[k].name)==0){g++;if(g==t){/*如果g等于选择的序号t,就开始删除*/do{friends[k]=friends[k+1];k++;}while(k<Count);}if(g==t){/*这里又使用一个g等于t,表面上看是多余的.其实当在选择的序号超出现有的序号时,起到限制作用*/printf("删除成功!\n");Count--;}}}if(h==0)printf("没有此联系人\n");}/*如果n等于2,说明用户选择了全部删除*/if(n==2){Count=0;/*把Count赋0,也就是清空所有联系人*/printf("已全部删除!\n");} }。
C语言编程-通讯录
C语言编程-通讯录#include<string.h> /*字符函数和字符串函数*/#include<conio.h> /*字符模式函数(调用getch()函数)*/#include<stdio.h> /*输入输出函数*/ int i;struct friend /*电子通讯录结构定义*/{char num[5]; /*编号*/char name[11]; /*名字*/char sex[2]; /*性别*/char phone[12]; /*电话*/char address[26]; /*地址*/char post_num[11]; /*邮编*/}friends[50];FILE *fp;void Data_load() /*数据载入函数*/{ int j;fp=fopen("friend.txt","r+"); /*打开文件friend.txt*/if(fp==NULL) /*判断是否存在friend.txt,如果不存在则创建*/ { fp=fopen("friend.txt","w");i=0;}else{ for(i=0;i<50;i++){ j=fgetc(fp);if(j==EOF)/*判断是否到了文件尾*/return;fseek(fp,i*sizeof(struct friend),0);fread(&friends[i],sizeof(struct friend),1,fp); /*从文件中读取一条记录*/}}}void Menu_Select() /*显示菜单界面*/{printf(" \n");printf(" \n");printf(" \n");printf(" Address Book Management System \n");printf(" \n");printf(" ======================\n"); printf(" 1.Address book data Entry\n"); /*数据输入*/printf(" 2.Address Book data Show\n"); /*数据显示*/printf(" 3.Address Book data Search\n"); /*数据查找*/printf(" 4.Address Book data Alter\n"); /*数据修改*/printf(" 5.Address Book data Insert\n"); /*数据插入*/printf(" 6.Address Book data Delete\n");/*数据删除*/printf(" 7.Address Book data Save\n"); /*数据保存*/printf(" 0.Exit\n"); /*退出*/printf(" ======================\n"); printf( " Please chioce 0-7 \n\n");}int Data_check(int k,char ID[5]) /*检查通讯录中是否存在相同ID或ID输入格式错误*/{int j;if(ID[0]=='0')k=1;for(j=0;ID[j]!='\0';j++){if(ID[j]>'9'||ID[j]<'0')k++;}for(j=0;j<i+1;j++){if(strcmp(ID,friends[j].num)==0)k++;}return k;}void Data_Input() /*数据输入函数*/{char yes_no='1';char ID[5];int k=0;if(i>=50)printf("\n\n Storage full!\n\n");if(i<50){printf("***************************************** *******************************\n");printf(" ******************* Add Address Book Information ***********************\n");printf("***************************************** *******************************\n");printf("***************************************** *******************************\n");}for(;i<50;i++){do{switch(yes_no){case '1': /*如果输入为'1',则进行数据输入*/printf(" ****** No.(4) Name(10) Sex(M/F) Phone(11) Address(25) Zip_Code(10)*******\n");scanf("%s%s%s%s%s%s",ID,friends[i].name,f riends[i].sex,friends[i].phone,friends[i].address,f riends[i].post_num);Data_check(k,ID);while(Data_check(k,ID)>0) /*检查输入的ID是否已存在,如果存在重新输入*/{printf("The No. already exists Or The No. isn't correct, please re-enter\n");scanf("%s",ID);Data_check(k,ID);}strcpy(friends[i].num,ID);if(i<49){printf("\n\n Whether to be continue? Y(1)/N(0) \n\n");yes_no=getch();}if(i>=49)printf("\n\nStorage full!\n\n");break;case '0':break;default:yes_no=getch();}}while(yes_no!='1'&&yes_no!='0'); /*如果输入的不是'1'或'0'则重新输入*/if(yes_no=='0')/*如果输入'0'则退出输入函数*/{i++;break;}}}int The_Size(char a[],char b[]) /*比较两个ID的大小*/{int j,t;if((j=strlen(a)-strlen(b))>0) t=1;if((j=strlen(a)-strlen(b))<0) t=-1;if((j=strlen(a)-strlen(b))==0){if(strcmp(a,b)>0) t=1;if(strcmp(a,b)<0) t=-1;if(strcmp(a,b)==0) t=0;}return t;}void Data_Show() /*数据输出函数*/{ int j,k;char m;struct friend t;printf("***************************************** ***************************\n");printf(" No. Name Sex Phone Address Zip_Code \n");printf("***************************************** ***************************\n");for(j=0;j<i-1;j++)/*对数据进行排序*/{ for(k=0;k<i-1-j;k++){if(The_Size(friends[k].num,friends[k+1].num)= =1){t=friends[k];friends[k]=friends[k+1];friends[k+1]=t;}}}for(j=0;j<i;j++)/*数据输出*/{printf("%4s %10s %4s %11s %20s %10s\n",fri ends[j].num,friends[j].name,friends[j].sex,friend s[j].phone,friends[j].address,friends[j].post_num );m=getch();if(m==' ')break;}printf("\n\n There are %d data in the book .\n\n",i);}void Data_Search() /*数据查找函数*/{char k;int j,a,b;char ID[5];char NAME[11];printf("Search by No. : 1\n");printf("Search by name : 2\n");k=getch();switch(k){case '1': /*按ID查找*/a=0;printf("\n\n Please enter the No.\n\n");scanf("%s",ID);for(j=0;j<i+1;j++){if(strcmp(ID,friends[j].num)==0){a++;printf(" No. Name Sex Phone Address Zip_Code \n");printf("%4s %10s %4s %11s %20s %10s\n",fri ends[j].num,friends[j].name,friends[j].sex,friend s[j].phone,friends[j].address,friends[j].post_num );}}if(a==0)printf(" Do not have to find the No.!\n\n");break;case '2': /*按姓名查找*/b=0;printf("\n\n Please enter the Name\n\n");scanf("%s",NAME);for(j=0;j<i+1;j++){if(strcmp(NAME,friends[j].name)==0){b++;printf(" No. Name Sex Phone Address Zip_Code \n");printf("%4s %10s %4s %11s %20s %10s\n",fri ends[j].num,friends[j].name,friends[j].sex,friend s[j].phone,friends[j].address,friends[j].post_num );}}if(b==0)printf(" Do not have to find the Name!\n\n");break;default:printf("\n\n Error!\n");break;}}void Data_Insert() /*数据插入函数*/{ if(i>=50)printf("\n\n Storage full!\n\n");if(i<50){char ID[5];int k=0;printf("Please enter the No. that you want to insert.\n");scanf("%s",ID);Data_check(k,ID);printf("%d",Data_check(k,ID)); /*检查所需插入的ID是否已存在,如果存在重新输入*/while(Data_check(k,ID)>0){printf("The No. already exists Or The No. isn't correct, please re-enter\n");scanf("%s",ID);Data_check(k,ID);}strcpy(friends[i].num,ID);/*插入数据*/printf(" ****** Name(10) Sex(M/F) Phone(11) Address(30) Zip_Code(10)*******\n");scanf("%s%s%s%s%s",friends[i].name,friends [i].sex,friends[i].phone,friends[i].address,friends [i].post_num);i++;}}void Data_Delete() /*数据删除函数*/{int k,t=0;char ID[5];printf("\n\n Please enter the No. need to be deleted\n\n");scanf("%s",ID);for(k=0;k<i;k++){if(strcmp(friends[k].num,ID)==0){t++;break;}}if(t==0)printf("\n\n The No. does not Exist!\n\n");if(t>0){for(;k<i;k++)/*删除位置前的元素顺序前移*/{friends[k]=friends[k+1];}printf("\n\n Delete success!\n\n");i=i-1;}}void Data_Alter() /*修改函数*/{int k,t=0;char ID[5];printf("\n\n Please enter the No. to be Amended\n\n");scanf("%s",ID);for(k=0;k<i;k++){if(strcmp(friends[k].num,ID)==0){t++;break;}}if(t==0)printf("\n\n The No. does not Exist!\n\n");if(t>0){strcpy(friends[k].num,ID);printf(" ****** Name(10) Sex(M/F) Phone(11) Address(30) Zip_Code(10)*******\n");scanf("%s%s%s%s%s",friends[k].name,friend s[k].sex,friends[k].phone,friends[k].address,frie nds[k].post_num);printf("\n\n Alter Success!\n\n");}}void Data_Save() /*数据保存函数*/{int j;fp=fopen("friend.txt","w");for(j=0;j<=i-1;j++){fwrite(&friends[j],sizeof(struct friend),1,fp);}printf("\n\n Save Success!\n\n");}void Exit() /*退出函数*/{char flag;printf(" Save or Not? (Y/N)\n"); /*判断是否保存*/do{flag=getch();switch(flag){case 'Y': /*保存*/Data_Save();break;case 'y': /*保存*/Data_Save();break;case 'N':break;case 'n':break;}}while(flag!='Y'&&flag!='y'&&flag!=' N'&&flag!='n');}void main(){ char choose,yes_no;Data_load();do{Menu_Select();choose=getch();switch(choose){case '1': Data_Input(); break; /*输入*/case '2': Data_Show(); break; /*显示*/case '3': Data_Search(); break; /*查找*/case '4': Data_Alter(); break; /*修改*/case '5': Data_Insert(); break; /*插入*/case '6': Data_Delete(); break; /*删除*/case '7': Data_Save(); break; /*保存*/case '0': Exit(); break; /*退出*/default : printf(" Error!\n");}if(choose=='0')break;printf(" Would you like to be continue? (Y/N)\n");do{yes_no=getch();}while(yes_no!='Y'&&yes_no!='y'&&yes _no!='N'&&yes_no!='n');if(yes_no=='N'||yes_no=='n'){Exit();break;}}while(yes_no!='Y'||yes_no!='y');。
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语言简单通讯录
C语言简单通讯录#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<string.h>#include<windows.h>#define LEN sizeof(struct student)#define TITLE_T "╔═══════════════╗\n"#define NAME "║※姓名: 号码: ║\n"#define GESHI "║※%-15s %-11s ║\n"#define BOTTOM_B "╚═══════════════╝\n"#define NEIRONG stu[i].name,stu[i].numstruct student //定义通讯录结构体{char name[15]; //姓名char num[12]; //号码};struct student stu[50]; //定义结构体数组void in(); //添加联系人void show(); //显示联系人void order(); //按字符排序void del(); //删除联系人void modify(); //修改联系人void menu(); //主菜单void total(); //计算总人数void search(); //查找联系人void main() //主函数{system("title 某某某通讯录"); //设置cmd窗口标题system("mode con cols=85 lines=35");break;case 5:modify();break;case 6:total();break;default:printf("输入编码有误!正在返回...");Sleep(3000);break;}menu(); //执行完功能再次显示菜单界面scanf("%d",&n);}}void menu() //自定义函数实现菜单功能{system("cls");system("date /t");system("time /t");printf("\n\n\n\n\n");printf("\t\t╔══════════某某某通讯录══════════╗\n");printf("\t\t║※0. 退出║\n");printf("\t\t║※ 1. 添加║\n");printf("\t\t║※ 2. 查看║\n");printf("\t\t║※ 3. 查找║\n");printf("\t\t║※ 4. 删除║\n");printf("\t\t║※ 5. 修改║\n");printf("\t\t║※ 6. 联系人总数║\n");printf("\t\t╚══════════════════════════╝\n\n");printf("\t\t请选择(0-6):");}void in() //添加联系人{int i,m=0; //m是记录的条数char ch[2];FILE *fp; //定义文件指针if((fp=fopen("data","ab+"))==NULL) //打开指定文件{printf("打开文件失败!正在返回...");Sleep(3000);return;}while(!feof(fp)){if(fread(&stu[m] ,LEN,1,fp)==1)m++;//统计当前记录条数}fclose(fp);if(m==0)printf("当前无记录!\n");else{system("cls");printf(TITLE_T);printf(NAME);for(i=0;i<m;i++)printf(GESHI,NEIRONG);//将信息按指定格式输出printf(BOTTOM_B);}if((fp=fopen("data","wb"))==NULL) //以只写二进制方式打开文件{printf("打开文件失败!正在返回...");Sleep(3000);return;}for(i=0;i<m;i++)fwrite(&stu[i] ,LEN,1,fp); //如果原来有记录,就将记录写入到磁盘文件中printf("是否添加?(y/n):");scanf("%s",ch);while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0) //判断是否要添加联系人{back: printf("请输入联系人姓名:");scanf("%s",&stu[m].name); //输入姓名for(i=0;i<m;i++)if(strcmp(stu[i].name,stu[m].name)==0){printf("您输入的联系人已存在!\n");goto back;}printf("请输入联系人号码:");scanf("%s",stu[m].num);if(fwrite(&stu[m],LEN,1,fp)!=1) //将新录入的信息写入指定的磁盘文件{printf("保存'%s'失败!是否继续?(y/n):",stu[m].name);scanf("%s",ch);continue;}else{printf("添加'%s'成功!\n",stu[m].name);m++;}printf("是否继续?(y/n):"); //询问是否继续scanf("%s",ch);}printf("正在返回...");fclose(fp);order();return;}void show() //显示联系人{FILE *fp;int i,m=0;if((fp=fopen("data","ab+"))==NULL) //打开指定文件{printf("打开文件失败!正在返回...");Sleep(3000);return;}while(!feof(fp)){if(fread(&stu[m] ,LEN,1,fp)==1)m++;}fclose(fp);if(m>0){printf(TITLE_T);printf(NAME);for(i=0;i<m;i++)printf(GESHI,NEIRONG);//将信息按指定格式输出printf(BOTTOM_B);}elseprintf("当前无记录!");printf("按任意键返回...");getch();}void del() //删除联系人函数{FILE *fp;int i,j,m=0;char sname[15];char ch[2];if((fp=fopen("data","ab+"))==NULL){printf("不能打开文件,正在返回...\n");return;}while(!feof(fp))if(fread(&stu[m],LEN,1,fp)==1)m++;fclose(fp);if(m==0){printf("当前无记录!正在返回...\n");Sleep(3000);return;}printf("请输入联系人姓名:");scanf("%s",sname);for(i=0;i<m;i++)if(strcmp(sname,stu[i].name)==0) break;if(i==m){printf("找不到'%s'!正在返回...",sname);return;}printf("已找到'%s',是否删除?(y/n)",sname);scanf("%s",ch);if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0) //判断是否要进行删除{for(j=i;j<m;j++)stu[j]=stu[j+1];//将后一个记录移到前一个记录的位置m--;//记录的总个数减1printf("删除'%s'成功!\n",sname);}if((fp=fopen("data","wb"))==NULL){printf("打开文件失败!正在返回...\n");Sleep(3000);return;}for(j=0;j<m;j++)//将更改后的记录重新写入指定的磁盘文件中if(fwrite(&stu[j] ,LEN,1,fp)!=1){printf("保存失败!正在返回...\n");Sleep(3000);}fclose(fp);show();}void search() //自定义查找函数{FILE *fp;int i,m=0;char sname[15];char ch[2];if((fp=fopen("data","ab+"))==NULL){printf("打开文件失败!正在返回...\n");Sleep(3000);return;}while(!feof(fp))if(fread(&stu[m],LEN,1,fp)==1)m++;fclose(fp);if(m==0){printf("当前无记录!正在返回...\n");Sleep(3000);return;}back1: printf("请输入联系人姓名:");scanf("%s",&sname);for(i=0;i<m;i++)if(strcmp(sname,stu[i].name)==0) //查找输入的号码是否在记录中{printf("已找到'%s',是否显示?(y/n)",sname);scanf("%s",ch);if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0){printf(TITLE_T);printf(NAME);printf(GESHI,NEIRONG); //将查找出的结果按指定格式输出printf(BOTTOM_B);}else{printf("正在返回...");Sleep(3000);return;}}if(i==m+1){printf("找不到'%s',是否继续?(y/n):",sname); //未找到要查找的信息scanf("%s",ch);while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0) //判断是否要继续查找联系人goto back1;printf("正在返回...");Sleep(3000);return;}printf("按任意键返回...\n");getch();}void modify(){ FILE *fp;int i,j,m=0;char sname[15];if((fp=fopen("data","ab+"))==NULL){printf("打开文件失败!正在返回...\n");Sleep(3000);return;while(!feof(fp))if(fread(&stu[m],LEN,1,fp)==1)m++;fclose(fp);if(m==0){printf("当前无记录!正在返回...\n");Sleep(3000);return;}printf("请输入联系人姓名:\n");scanf("%s",&sname);for(i=0;i<m;i++)if(strcmp(sname,stu[i].name)==0) //检索记录中是否有要修改的信息break;if(i<m){printf("已找到'%s',请修改!\n",sname);printf("请输入联系人姓名:\n");scanf("%s",stu[i].name);//输入名字printf("请输入联系人号码:\n"); //输入号码scanf("%s",stu[i].num);}else{printf("找不到'%s'!正在返回...",sname);Sleep(3000);return;}if((fp=fopen("data","wb"))==NULL){printf("打开文件失败!正在返回...\n");Sleep(3000);return;}for(j=0;j<m;j++) //将新修改的信息写入指定的磁盘文件中if(fwrite(&stu[j] ,LEN,1,fp)!=1){printf("保存'%s'失败!正在返回...",sname);Sleep(3000);return;}fclose(fp);order();show();}void total() //自定义计算总人数函数{FILE *fp;int m=0;if((fp=fopen("data","ab+"))==NULL){printf("打开文件失败!正在返回...\n");Sleep(3000);return;}while(!feof(fp))if(fread(&stu[m],LEN,1,fp)==1)m++;printf("此通讯录总共有%d名联系人!\n",m); //将统计的个数输出fclose(fp);printf("\n按任意键返回...\n");getch(); //输入任意键返回}void order() //自动排序函数{FILE *fp;struct student t; //用于交换信息int i=0,j=0,m=0; //i,j用于循环if((fp=fopen("data","ab+"))==NULL){printf("打开文件失败!正在返回...");Sleep(3000);return;}while(!feof(fp))if(fread(&stu[m] ,LEN,1,fp)==1)m++;for(i=0;i<m-1;i++)for(j=i+1;j<m;j++) //双重循环实现联系人比较并交换if((strcmp(stu[i].name,stu[j].name))>0){t=stu[i];stu[i]=stu[j];stu[j]=t;}if((fp=fopen("data","wb"))==NULL){printf("文件打开失败!正在返回...\n");Sleep(3000);return;}for(i=0;i<m;i++)//将重新排好序的内容重新写入指定的磁盘文件中if(fwrite(&stu[i],LEN,1,fp)!=1){printf("排序失败!正在返回...");Sleep(3000);return;}fclose(fp);}。
通讯录的制作c语言
通讯录的制作1. 介绍通讯录是一种管理联系人信息的工具,能够存储和查找联系人的姓名、电话号码、邮箱等信息。
在现代社会中,通讯录已经成为人们日常生活中必备的工具之一。
本文将介绍如何使用C语言编写一个简单的通讯录程序。
2. 功能需求通讯录程序应该具备以下功能: - 添加联系人:用户可以输入联系人的姓名、电话号码和邮箱,将其添加到通讯录中。
- 删除联系人:用户可以根据姓名或电话号码删除已存在的联系人。
- 修改联系人信息:用户可以根据姓名或电话号码修改已存在联系人的信息。
- 查找联系人:用户可以根据姓名或电话号码查找已存在的联系人,并显示其详细信息。
- 显示所有联系人:用户可以显示通讯录中所有联系人的列表。
3. 数据结构设计为了实现上述功能,我们需要设计合适的数据结构来存储联系人信息。
在C语言中,可以使用结构体来表示一个联系人。
typedef struct {char name[50];char phone[20];char email[50];} Contact;以上代码定义了一个名为Contact的结构体,包含了三个字段:姓名、电话号码和邮箱。
每个字段都使用字符数组来表示。
同时,我们需要定义一个数据结构来存储多个联系人,可以使用数组或链表。
在本文中,我们将使用数组来实现通讯录。
#define MAX_CONTACTS 100Contact contacts[MAX_CONTACTS];int numContacts = 0;以上代码定义了一个名为contacts的数组,用于存储所有联系人的信息。
numContacts变量用于记录当前通讯录中联系人的数量。
4. 功能实现4.1 添加联系人添加联系人功能允许用户输入联系人的姓名、电话号码和邮箱,并将其添加到通讯录中。
void addContact() {if (numContacts >= MAX_CONTACTS) {printf("通讯录已满,无法添加更多联系人。
C语言通讯录
/*关于菜单界面及操作界面我就不作任何调了,有些界面显得有点“乱”,但我想你应该会看得懂并且会修改显示界面的!这个主要是用数组写的,里面的功能不多,你也可以自己增加!关于程序的优化:你可以自己调整main函数与其他模块的位置而使代码美观一点!*//*通讯录-数组*/#include "stdio.h"#include "string.h"#define N 100void myprint();void mycreate(char num[N][10],char name[N][10],char tel[N][10],int *n);void mydisplay(char num[N][10],char name[N][10],char tel[N][10],int n);void mysearch(char num[N][10],char name[N][10],char tel[N][10],int n);void sch_num(char num[N][10],char name[N][10],char tel[N][10],int n);void sch_name(char num[N][10],char name[N][10],char tel[N][10],int n);void mymodify(char num[N][10],char name[N][10],char tel[N][10],int n);void myadd(char num[N][10],char name[N][10],char tel[N][10],int *n);void mydelete(char num[N][10],char name[N][10],char tel[N][10],int *n);void del_num(char num[N][10],char name[N][10],char tel[N][10],int *n);void del_name(char num[N][10],char name[N][10],char tel[N][10],int *n);void main(){char choose,yes_no,num[N][10],name[N][10],tel[N][10];int n=0;do{//system(“CLS”); //清屏myprint();printf(" ");choose=getchar();switch(choose){case '1':mycreate(num,name,tel,&n);break;case '2':if(n==0){ printf("无记录\n");break;}mydisplay(num,name,tel,n);break;case '3':if(n==0){ printf("无记录\n");break;}mysearch(num,name,tel,n);break;case '4':if(n==0){ printf("无记录\n");break;}mymodify(num,name,tel,n);break;case '5':if(n==0){ printf("无记录\n");break;}myadd(num,name,tel,&n);break;case '6':if(n==0){ printf("无记录\n");break;}mydelete(num,name,tel,&n);break;case '0':break;default:printf(" %c为非法选项!\n",choose);}if(choose=='0') break;printf(" 要继续吗(Y/N)\n");do{yes_no=getchar();}while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');getchar();}while(yes_no=='Y'||yes_no=='y');}void myprint(){printf("\n\n\n\n\n");printf(" 1 创建\n");printf(" 2 显示\n");printf(" 3 查询\n");printf(" 4 修改\n");printf(" 5 添加\n");printf(" 6 删除\n");printf(" 0 退出\n");}void mycreate(char num[N][10],char name[N][10],char tel[N][10],int *n) {int i=0;char tempnum[10],tempname[10],temptel[10];printf("\n 请输入第1个记录(全部输入#表示结束):");printf(" 学号:");do{gets(tempnum);}while(strcmp(tempnum,"")==0);printf(" 姓名:");gets(tempname);printf(" 电话:");gets(temptel);while(tempnum[0]!='#'&&tempname[0]!='#'&&temptel[0]!='#'){strcpy(num[i],tempnum);strcpy(name[i],tempname);strcpy(tel[i],temptel);i++;printf("\n 请输入第%d个记录:\n",i+1);do{gets(tempnum);}while(strcmp(tempnum,"")==0);printf(" 姓名:");gets(tempname);printf(" 电话:");gets(temptel);}(*n)=i;}void mydisplay(char num[N][10],char name[N][10],char tel[N][10],int n) {int i;//system(“CLS”); //清屏printf(" 学号姓名电话\n");for(i=0;i<n;i++) printf("%12s%15s%15s\n",num[i],name[i],tel[i]); }void mysearch(char num[N][10],char name[N][10],char tel[N][10],int n) {char c;//system(“CLS”);printf(" 按学号查(h)还是按姓名查(m)?\n");getchar();c=getchar();if(c=='h'||c=='H') sch_num(num,name,tel,n);else if(c=='m'||c=='M') sch_name(num,name,tel,n);else printf("\n 非法字符!\n");}void sch_num(char num[N][10],char name[N][10],char tel[N][10],int n) {int i,flag=0;char tempnum[10];getchar();printf("\n 请输入要查询的学号:");gets(tempnum);for(i=0;i<n;i++)if(strcmp(tempnum,num[i])==0){if(flag==0)printf(" 学号姓名电话\n");printf("%12s%15s%15s\n",num[i],name[i],tel[i]);flag=1;}if(flag==0) printf(" 无此人!\n");}void sch_name(char num[N][10],char name[N][10],char tel[N][10],int n){int i,flag=0;char tempname[10];getchar();printf("\n 请输入要查询的姓名:");gets(tempname);for(i=0;i<n;i++)if(strcmp(tempname,name[i])==0){if(flag==0)printf(" 学号姓名电话\n");printf("%12s%15s%15s\n",num[i],name[i],tel[i]);flag=1;}if(flag==0) printf(" 无此人!\n");}void mymodify(char num[N][10],char name[N][10],char tel[N][10],int n){int i,find;char c,tempnum[10],tempname[10],temptel[10];getchar();//system(“CLS”);printf("\n 请输入要修改记录的学号:");gets(tempnum);for(i=0;i<n;i++)if(strcmp(tempnum,num[i])==0) {find=i;break;} //find记住修改记录的位置if(i==n) printf(" 无此人!\n");else{do{printf(" 请输入正确的学号:");do{gets(tempnum);}while(strcmp(tempnum,"")==0);printf(" 请输入正确的姓名:");gets(tempname);printf(" 请输入正确的电话号码:");gets(temptel);for(i=0;i<n;i++)if((strcmp(tempnum,num[i])==0)&&(i!=find)){printf(" 学号重复,要重新输入吗(Y/N)?");do{c=getchar();}while(c!='Y'&&c!='y'&&c!='N'&&c!='n');putchar('\n');break;}if(i==n){strcpy(num[find],tempnum);strcpy(name[find],tempname);strcpy(tel[find],temptel);break;}}while(c=='y'||c=='Y');}}void myadd(char num[N][10],char name[N][10],char tel[N][10],int *n) {int i;char c,tempnum[10],tempname[10],temptel[10];do{printf("\n 请输入新记录的学号:");do{gets(tempnum);}while(strcmp(tempnum,"")==0);printf(" 请输入新记录的姓名:");gets(tempname);printf(" 请输入新记录的电话:");gets(temptel);for(i=0;i<(*n);i++)if(strcmp(tempnum,num[i])==0){printf(" 学号重复,要重新输入吗?(Y/N)?");do{c=getchar();}while(c!='Y'&&c!='y'&&c!='N'&&c!='n');putchar('\n');break;}if(i==(*n)){strcpy(num[i],tempnum);strcpy(name[i],tempname);strcpy(tel[i],temptel);(*n)++; //添加记录后记录总数加1break;}}while(c=='y'||c=='Y');}void mydelete(char num[N][10],char name[N][10],char tel[N][10],int *n) {char c;getchar();printf("\n 按学号删除(h),还是按姓名删除(m)?");c=getchar();if(c=='h'||c=='H') del_num(num,name,tel,n);else if(c=='m'||c=='M') del_name(num,name,tel,n);else printf("\n 非法字符!\n");}void del_num(char num[N][10],char name[N][10],char tel[N][10],int *n) {int i,k;char tempnum[10];getchar();printf("\n 请输入要删除记录的学号:");gets(tempnum);for(k=0;k<(*n);k++)if(strcmp(tempnum,num[k])==0) break;if(k<(*n)){for(i=k;i<(*n)-1;i++){strcpy(num[i],num[i+1]);strcpy(name[i],name[i+1]);strcpy(tel[i],tel[i+1]);}(*n)--; //删除后总数减1}else printf(" 无此人!\n");}void del_name(char num[N][10],char name[N][10],char tel[N][10],int *n) {int i,k;char tempname[10];getchar();printf("\n 请输入要删除记录的姓名:");gets(tempname);for(k=0;k<(*n);k++)if(strcmp(tempname,name[k])==0) break;if(k<(*n)){for(i=k;i<(*n)-1;i++){strcpy(num[i],num[i+1]);strcpy(name[i],name[i+1]);strcpy(tel[i],tel[i+1]);}(*n)--; //删除后总数减1}else printf(" 无此人!\n");}。
c语言课程设计通讯录
c语言课程设计通讯录一、教学目标本课程的教学目标是使学生掌握C语言的基本语法和编程技巧,通过编写程序实现简单的通讯录管理系统。
知识目标包括:了解C语言的基本数据类型、运算符、控制结构、函数等基本概念;掌握结构体和指针的使用方法;理解面向对象编程的基本思想。
技能目标包括:能够使用C语言编写简单的程序;能够使用结构体和指针实现数据的有效管理;能够运用面向对象编程思想解决实际问题。
情感态度价值观目标包括:培养学生的编程兴趣和自信心;培养学生的问题解决能力和创新精神;培养学生团队合作和自主学习的意识。
二、教学内容本课程的教学内容主要包括C语言的基本语法、数据结构、函数、面向对象编程等内容。
具体安排如下:1.C语言基本语法:介绍C语言的基本数据类型、运算符、控制结构等,通过编写简单的程序让学生熟悉C语言的编程环境。
2.数据结构:讲解结构体的使用方法,引导学生掌握如何使用结构体来表示通讯录中的信息。
3.函数:介绍函数的定义和调用方法,让学生学会如何编写和使用函数来实现特定的功能。
4.面向对象编程:讲解面向对象编程的基本思想,引导学生掌握如何使用类和对象来实现通讯录管理系统。
三、教学方法本课程采用讲授法、讨论法、案例分析法、实验法等多种教学方法。
通过讲授法,为学生提供系统的知识框架;通过讨论法,激发学生的思考和讨论,培养学生的问题解决能力;通过案例分析法,让学生了解实际应用中的问题解决方法;通过实验法,培养学生的动手能力和创新精神。
四、教学资源本课程的教学资源包括教材、参考书、多媒体资料、实验设备等。
教材选用《C程序设计语言》作为主教材,参考书选用《C Primer Plus》等;多媒体资料包括教学PPT、视频等;实验设备包括计算机、网络等。
教学资源的选择和准备旨在支持教学内容和教学方法的实施,丰富学生的学习体验。
五、教学评估本课程的评估方式包括平时表现、作业和考试三个部分。
平时表现主要评估学生的课堂参与度、提问回答、团队协作等情况,通过观察和记录来评价学生的学习态度和积极性。
通讯录的制作c语言
通讯录的制作c语言一、前言通讯录是一个常见的管理工具,它可以帮助我们更好地组织和管理联系人信息。
在日常生活中,我们经常需要制作通讯录来保存联系人信息。
本文将介绍如何使用C语言来制作一个简单的通讯录程序。
二、需求分析在开始编写程序之前,我们需要先确定程序的需求。
通讯录程序需要具备以下功能:1. 添加联系人:输入联系人信息并保存到文件中。
2. 显示所有联系人:从文件中读取所有联系人信息并显示。
3. 查找联系人:根据姓名查找并显示相应的联系人信息。
4. 修改联系人:根据姓名修改相应的联系人信息。
5. 删除联系人:根据姓名删除相应的联系人信息。
三、程序设计1. 文件结构设计为了实现通讯录数据的持久化存储,我们可以将所有联系人信息保存在一个文件中。
文件结构可以设计为以下格式:struct Contact {char name[20]; // 姓名char phone[20]; // 电话号码char email[30]; // 邮箱地址};2. 界面设计为了方便用户操作,我们可以设计一个简单的命令行界面,通过输入数字选择相应功能。
界面可以设计为以下格式:*********************** 通讯录管理系统 ** 1. 添加联系人 ** 2. 显示所有联系人 ** 3. 查找联系人 ** 4. 修改联系人 ** 5. 删除联系人 ** 0. 退出系统 ***********************请选择功能:3. 功能实现根据需求分析,我们需要实现以下功能:1. 添加联系人添加联系人需要输入姓名、电话号码和邮箱地址,并将数据保存到文件中。
可以使用以下代码实现:void addContact() {struct Contact contact;printf("请输入姓名:");scanf("%s", );printf("请输入电话号码:");scanf("%s", contact.phone);printf("请输入邮箱地址:");scanf("%s", contact.email);FILE *fp = fopen("contacts.dat", "ab");fwrite(&contact, sizeof(struct Contact), 1, fp);fclose(fp);printf("添加成功!\n");}2. 显示所有联系人显示所有联系人需要从文件中读取数据并输出到屏幕上。
c语言通讯录程序(共5篇)
c语言通讯录程序(共5篇)第一篇:c语言通讯录程序C语言程序设计实践——通讯录管理系统六、程序源代码及注释#include #include #include #include #define SUM 100 #define STOP 1000typedef struct /*结构体,存放通讯录成员信息,重新定义成member型变量*/ { char name[10]; char tel[15]; char cla[5]; char mail[20]; char qq[15]; }member;member info[SUM]; //所有成员空间FILE *fp;//文件指针,用于打开或保存通讯录文件int count=0; //全局变量,用于计数已存入数量/*-----------------------*/int load(char filename[])//打开通讯录文件{ member *p; int i=0; if((fp=fopen(filename,"rb"))==NULL)return i; else{while(!feof(fp)){p=(member *)malloc(sizeof(member));if(fread(p,sizeof(member),1,fp)==1){strcpy(info[i].name,p->name);strcpy(info[i].tel,p->tel);strcpy(info[i].cla,p->cla);strcpy(info[i].mail,p->mail);strcpy(info[i].qq,p->qq);i++;}free(p);}return i;} } /*------------------*/void save(char filename[]) //保存通讯录文件 {int i;member *p;if((fp=fopen(filename,"wb"))==NULL){printf("无法保存!打开文件%s时出错\n",filename); exit(1);}elsefor(i=0;i{p=(member *)malloc(sizeof(member));strcpy(p->name,info[i].name);strcpy(p->tel,info[i].tel);strcpy(p->cla,info[i].cla);strcpy(p->mail,info[i].mail);strcpy(p->qq,info[i].qq);fwrite(p,sizeof(member),1,fp);free(p);}fclose(fp); } /*-----------------*/ void display(void) //分类查看功能 { system("cls");char dis;char way[5];int i,j=0;choice:printf("**********请选择查看分类***********\n");printf("**********1.亲友**********\n");printf("**********2.同学**********\n");printf("**********3.老师**********\n");printf("**********4.其他**********\n");printf("**********5.查看全部**********\n");printf("**********0.返回上一级菜单**********\n");printf("*****************************************\n"); printf("请选择(1~5或0):");dis=getchar();getchar();switch(dis){case '1':strcpy(way,"亲友");break;case '2':strcpy(way,"同学");break;case '3':strcpy(way,"老师");break;case '4':strcpy(way,"其他");break;case '5':printf("*******全部通讯成员*******\n"); for(i=0;iprintf("姓名:%s\n",info[i].name);printf("电话号码:%s\n",info[i].tel);printf("电子邮箱:%s\n",info[i].mail);printf("QQ号:%s\n",info[i].qq);printf("分类:%s\n",info[i].cla);printf("*****************************\n");j++;}if(j==0){printf("************************\n");printf("无任何通讯成员\n");}j=0;Sleep(STOP);goto choice; break;case '0':return; break;default:printf("*************************\n");printf("输入指令有误!\n");printf("*************************\n");Sleep(STOP);goto choice;}printf("********通讯成员之%s*******\n",way); for(i=0;iif(strcmp(info[i].cla,way)==0){printf("****姓名:%s\n",info[i].name);printf("****电话号码:%s\n",info[i].tel);printf("****电子邮箱:%s\n",info[i].mail);printf("****QQ号:%s\n",info[i].qq);printf("****分类:%s\n",info[i].cla);printf("**********************************\n"); j++;}}if(j==0){printf("该分类中无通讯成员\n");printf("******************\n");}j=0;Sleep(STOP);goto choice; }/*------*/ int add(void)//增加新的成员 {member temp;int i;reinput_name:printf("请输入新成员的姓名:");gets();for(i=0;iif(strcmp(info[i].name,)==0){ printf("该姓名已存在!\n");Sleep(STOP);goto reinput_name;}reinput_tel:printf("请输入新成员的电话号码:"); gets(temp.tel);for(i=0;iif(strcmp(info[i].tel,temp.tel)==0){ printf("该电话号码已存在!\n");Sleep(STOP);goto reinput_tel;}printf("请输入新成员的电子邮箱:"); gets(temp.mail);printf("请输入新成员的QQ号:");gets(temp.qq);printf("请输入新成员的分类:");gets(temp.cla);info[count]=temp;count++;return count; }/*-----*/ int search(char sname[]) //查找功能 { int flag=0,i;for(i=0;iif(strcmp(info[i].name,sname)==0){printf("*****************************\n"); printf("****姓名:%s\n",info[i].name);printf("****电话号码:%s\n",info[i].tel);printf("****电子邮箱:%s\n",info[i].mail);printf("****QQ号:%s\n",info[i].qq);printf("****分类:%s\n",info[i].cla);printf("******************************\n"); flag=1;}return flag; }/*---------*/ int rework(char rname[])//修改功能 {int flag=0,i;for(i=0;iif(strcmp(info[i].name,rname)==0){printf("*********************");printf("请输入新的姓名:");gets(info[i].name);printf("请输入新的电话号码:");gets(info[i].tel);printf("请输入新的电子邮箱:");gets(info[i].mail);printf("请输入新的QQ号:");gets(info[i].qq);printf("请输入新的分类:");gets(info[i].cla);printf("********************");flag=1;}return flag; }/*-----------------------------*/ int erase(char ename[]) //删除功能 {int flag=0,i,j;for(i=0;iif(strcmp(info[i].name,ename)==0){for(j=i;jinfo[j]=info[j+1];count--;flag=1;}return flag; } /*-----------------------------*/ int call(void)//拨号功能 {int i,j,flag=0;char cname[10];printf("**************************\n");for(i=0;iprintf("%s ",info[i].name);}putchar('\n');printf("请输入需要拨号的姓名:");gets(cname);for(i=0;iif(strcmp(info[i].name,cname)==0){printf("正在拨号:");for(j=0;info[i].tel[j]!='\0';j++){printf("%c",info[i].tel[j]);Sleep(300);}putchar('\n');flag=1;}return flag; } /*-----------------------*/ int main(void)//主函数{ char filename[40]; char c,save_j; int t; char s_r_e_name[10];printf("欢迎使用通讯录系统!请输入通讯录文件的有效路径(若文件不存在则自动创建新通讯录)\n"); gets(filename); count=load(filename); system("cls");printf("======================================\ n");printf("==========欢迎使用我的通讯录==========\n");printf("============ 制作:石贵清===========\n");begin:printf("★★★★★★★★★★★★★★★★★★★★★★★★★★\n");printf("※※\n");printf("※通迅录※\n");printf("※※\n");printf("※1. 添加新联系人.5. 分类显示查询.※\n");printf("※※\n");printf("※2. 删除联系人.6.拨出电话.※\n");printf("※※\n");printf("※3. 查询通讯成员.7.保存通讯文件.※\n");printf("※※\n");printf("※4. 修改信息.0. 关闭通迅录.※\n");printf("★★★★★★★★★★★★★★★★★★★★★★★★★★\n"); printf("友情提醒:请在退出本程序之前按7保存通讯文件! \n"); printf("请输入您选择的操作:");c=getchar();getchar(); switch(c) {case '1':if(count==SUM){printf("======= 通讯录空间已满,无法继续录入!===\n"); Sleep(STOP);goto begin; break;}t=add();printf("===== 信息已建立,请尽快保存!=====\n");if(t==SUM){printf("===== 通讯录空间已满,无法继续录入!=====\n"); }Sleep(STOP);goto begin;break; case '2': if(count==0){printf("========================\n");printf("=== 通讯录中无任何成员!====\n");printf("======================\n");Sleep(STOP);goto begin;break; }printf("请输入要删除成员的姓名:");gets(s_r_e_name);t=erase(s_r_e_name);if(!t) {printf("=================\n");printf("==== 查无此人====\n");printf("=================\n"); } else {printf("======================\n");printf("======已成功删除======\n");printf("======================\n"); } Sleep(STOP); goto begin;break; case '3':printf("请输入要查找的成员姓名:");gets(s_r_e_name);t=search(s_r_e_name);if(!t){printf("======================\n");printf("===== 查无此人 =======\n");printf("======================\n");}Sleep(STOP);goto begin;break;case '7':save(filename);printf("==============================\n");printf("======保存成功!=======\n");printf("==============================\n"); Sleep(STOP); goto begin;break;case '4':printf("请输入要修改的成员姓名:");gets(s_r_e_name);t=rework(s_r_e_name);if(!t) {printf("=======查无此人====\n"); }else{printf("=========================\n"); printf("====修改成功====\n");}Sleep(STOP);goto begin;break;case '5':display();Sleep(STOP);goto begin;break;case '6':t=call();if(!t){printf("=============================\n"); printf("====== 输入姓名错误! =======\n");printf("============================\n"); }else{printf("=========================\n");printf("======电话已经拨出=====\n");printf("=======================\n");}Sleep(STOP);goto begin;break;case '0':printf("是否保存数据文件?(Y:是/N:否)");save_j=getchar();if(save_j=='Y'||save_j=='y'){save(filename);printf("====== 保存成功!=======\n");printf("======= 感谢您的使用!再见! ======\n");}else{printf("========================\n");printf("=== 感谢您的使用!再见! ===\n");printf("========================\n");}exit(0); default:printf("=====Sleep(STOP);goto begin; } return 0; }输入指令无效!====");第二篇:C语言程序设计学生通讯录管理系统#include "stdio.h" #include "stdlib.h" #include "string.h" #include "conio.h" #include "stdlib.h" #define null 0 struct record { char name[20]; char phone[20]; char adress[40]; char postcode[10]; char e_mail[30]; }student[500]; struct LinkList { struct record US; struct LinkList *next; }a; struct LinkList *head=null; int num=0; FILE *fp; int menu_select(); int adduser(); int list(); int search(); int display(); int add(); int listbyname(); int dele(); int save(); int exit();void main() {system("cls"); for(;;) { switch(menu_select()) { case 0:adduser();break; case 1:list();break; case 2:search();break; case 3:add();break; case 4:dele();break; case 5:save();break; case 6:exit(0); } } } menu_select() { char s[80]; int a; printf("*_* press any key enter menu! *_* \n"); getch(); system("cls"); printf("\t\t********************MENU*********************\n\n"); printf("\t\t 0. 输入记录\n"); printf("\t\t 1. 显示记录 \n"); printf("\t\t 2. 按姓名查找\n"); printf("\t\t 3. 插入记录 \n"); printf("\t\t 4. 删除记录\n"); printf("\t\t 5. 记录保存文件\n"); printf("\t\t 6. Quit\n"); printf("\t\t***********************************************\n");do{ printf("\n Enter you choice(0~11):"); scanf("%s",s); a=atoi(s); } while (a<0||a>11); return a; }adduser() { printf("\n\t\t**************** 请输入用户信息****************\n"); printf("\n\t\t输入姓名:"); scanf("%s",&student[num].name); printf("\n\t\t输入电话号码:"); scanf("%s",&student[num].phone); printf("\n\t\t输入地址:"); scanf("%s",&student[num].adress); printf("\n\t\t输入邮编:"); scanf("%s",&student[num].postcode); printf("\n\t\t输入e-mail:"); scanf("%s",&student[num].e_mail); num++; printf("\n\t\t是否继续添加?(Y/N):"); if (getch()=='y') adduser(); return(0); } list() { int i; system("cls"); if(num!=0) { printf("\n\t\t*************** 以下为通讯录所有信息************"); for (i=0;iprintf("\n\t\t姓名:%s",student[i].name); printf("\n\t\t电话:%s",student[i].phone); printf("\n\t\t地址:%s",student[i].adress); printf("\n\t\t邮编:%s",student[i].postcode); printf("\n\t\te-mail:%s",student[i].e_mail); printf("\t\t"); if (i+1add() { int i; if ((fp=fopen("student.bin","wb"))==NULL) { printf("\n\t\t文件打开失败"); } for (i=0;isave() { int j; FILE*fp; fp=fopen("student.txt","w"); if (fp==NULL) printf("can't open the file."); if(num!=0) { for(j=0;j fwrite(student,sizeof(student),1,fp); } } printf("保存成功!"); fclose(fp); return(0); }第三篇:C语言作业:学通讯录学生通讯录一、语言和环境1.实现语言:C语言。
通讯录的录入与显示c语言多种解题思路
通讯录的录入与显示C语言多种解题思路一、概述通讯录是我们日常生活中常用的功能之一,通过通讯录我们可以方便地管理通联人的信息,并随时查找需要的通联人。
在编程领域中,通讯录的录入与显示是一个常见的问题,C语言作为一种经典的编程语言,对于通讯录的解题思路也有多种方式。
本文将介绍通讯录的录入与显示问题,并从C语言多种解题思路进行讨论。
二、通讯录的录入1. 使用结构体在C语言中,我们可以使用结构体来表示一个通联人的信息,包括尊称、通联方式号码、电流新箱等。
我们需要定义一个结构体来存储通联人的信息:```ctypedef struct{char name[50];char phone[20];char em本人l[50];} Contact;```我们可以定义一个数组来存储多个通联人的信息:```cContact contacts[100];```接下来,我们可以通过循环和用户输入的方式来进行通讯录的录入:```cint numContacts;printf("请输入通联人数量:");scanf("d", numContacts);for(int i=0; i<numContacts; i++){printf("请输入第d个通联人的尊称:", i+1);scanf("s", contacts[i].name);printf("请输入第d个通联人的通联方式号码:", i+1);scanf("s", contacts[i].phone);printf("请输入第d个通联人的电流新箱:", i+1);scanf("s", contacts[i].em本人l);}```通过以上方式,我们可以实现通讯录的录入功能,并且将通联人的信息存储在一个结构体数组中。
原创c语言课程设计通讯录
原创C语言课程设计通讯录1. 引言通讯录是一种用于存储联系人信息的工具,对于个人和组织来说,它是必不可少的。
在本篇文章中,我将介绍一个基于C语言的通讯录设计方案。
通过这个课程设计项目,我们可以学习到如何使用C语言实现基本的数据处理和文件操作。
2. 功能需求分析在设计通讯录之前,我们需要明确所要实现的功能。
根据常见的通讯录需求,以下是我们的功能设计:•添加联系人信息:通过输入姓名、手机号码、邮箱等信息,将联系人添加到通讯录中。
•删除联系人信息:根据姓名或手机号码查找并删除指定联系人。
•修改联系人信息:根据姓名或手机号码查找并修改指定联系人的信息。
•查找联系人信息:根据姓名或手机号码查找并显示指定联系人的信息。
•显示全部联系人信息:将通讯录中的所有联系人信息按照一定的格式显示出来。
•保存通讯录:将通讯录中的联系人信息保存到文件中。
3. 数据结构设计在实现通讯录的功能之前,我们需要设计合适的数据结构来存储联系人信息。
考虑到联系人的信息较为复杂,并且需要支持动态增删改查的操作,我们选择使用链表来存储联系人信息。
每个节点包含姓名、手机号码、邮箱等信息,以及指向下一个节点的指针。
struct Contact {char name[50];char phone[20];char email[50];struct Contact *next;};4. 程序流程设计4.1 主菜单设计通讯录程序的主要界面是一个菜单,让用户选择不同的功能。
使用一个无限循环来保持程序一直运行,用户可以输入不同的指令来选择要执行的功能。
```c while (1) { // 显示菜单 printf(。
c语言课程设计通讯录
c语言课程设计通讯录一、教学目标本节课的学习目标为:1.知识目标:使学生掌握C语言编程基础,了解结构体和指针在实际编程中的应用,理解通讯录程序的设计原理。
2.技能目标:培养学生运用C语言进行程序设计的能力,能够独立完成一个简单的通讯录程序。
3.情感态度价值观目标:培养学生对计算机科学的兴趣,提高学生解决问题的能力,培养学生的团队协作意识。
二、教学内容本节课的教学内容主要为:1.C语言基础:数据类型、运算符、表达式、语句等。
2.结构体和指针:结构体的定义、使用和指针的基本概念。
3.通讯录程序设计:通讯录的数据结构设计、程序流程设计、功能实现等。
三、教学方法本节课的教学方法采用:1.讲授法:讲解C语言基础知识和通讯录设计原理。
2.案例分析法:分析具体的通讯录案例,引导学生理解程序设计过程。
3.实验法:学生动手编写通讯录程序,巩固所学知识。
四、教学资源本节课的教学资源包括:1.教材:《C语言程序设计》。
2.参考书:《C语言编程实例解析》。
3.多媒体资料:PPT课件、在线编程练习平台。
4.实验设备:计算机、网络环境。
五、教学评估本节课的评估方式包括:1.平时表现:通过课堂参与、提问、讨论等环节,评估学生的学习态度和积极性。
2.作业:布置与课程内容相关的编程作业,评估学生的编程能力和对知识的掌握程度。
3.考试:期末进行闭卷考试,评估学生对C语言基础知识和通讯录程序设计的掌握情况。
评估方式要求客观、公正,能够全面反映学生的学习成果。
通过对学生的综合评估,了解学生的学习状况,为后续教学提供参考。
六、教学安排本节课的教学安排如下:1.教学进度:按照教材的章节顺序,逐步讲解C语言基础、结构体和指针、通讯录程序设计等内容。
2.教学时间:共计4课时,每课时45分钟。
3.教学地点:计算机实验室。
教学安排要求合理、紧凑,确保在有限的时间内完成教学任务。
同时,考虑学生的实际情况和需要,如学生的作息时间、兴趣爱好等,尽量提高教学效果。
C语言课程设计报告 通讯录
《C语言课程设计》目录摘要 (3)一、课程设计目的 (4)二、课程设计内容 (4)三、总体设计 (5)四、详细设计 (6)(1)数据结构设计 (6)(2)模块接口设计 (7)(3)流程图 (7)五、调试与测试 (10)(1)调试过程中的主要问题 (10)(2)测试结果的分析与讨论 (10)六. 实习总结 (12)注: 13摘要日益繁多的人际交往使得我们很难搞清楚与每个人之间的联系方式, 特别是对于做经常出差的人来说更是难, 所以通讯录能够便捷的给我们带来所需要的相关信息。
而随着计算机的普及, 人们的生活摆脱了传统式的记事本、电话簿, 越来越多的靠计算机来帮助人们记住这些事情, 极其简便。
这就需要有一个使用的通讯录管理系统, 用户可以方便的通过自己电脑的通讯录管理系统, 来随时查阅自己所需要的信息, 而不必再大费周折去翻开那繁琐的记事本。
通讯录管理系统是一个专门针对储存用户联系方式以及一些简单个人信息的实用管理系统, 它方便了用户对众多客户、朋友、同事等个人信息的储存和快速查阅的功能, 大大减少了查找过程的时间。
一、课程设计目的1、通过课程设计, 加深对结构化设计思想的理解, 能对系统功能进行分析, 并设计合理的模块化结构。
2、通过课程设计, 学会设计数据结构。
其中包括对结构数组、链表和数据结构等知识的运用。
3、通过课程设计, 提高程序开发功能, 能运用合理的控制流程编写清晰高效的程序。
4、通过课程设计, 训练C程序调试能力, 能将一个中小型各级组织系统联调通过。
通过课程设计, 开发一个中小型系统, 掌握系统研发全过程。
通话课程设计, 培养分析问题、解决实际问题的能力。
二、课程设计内容(1)设计一个实用的通讯录管理系统, 能以简便高效的方式对通讯录进行管理和检索, 具体要示:(2)录入:通讯录信息包括:编号, 姓名, 单位, 电话, 地址, QQ, 邮编。
以结构通讯录信息。
(3)更新: 能插入、删除通讯录信息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言程序设计课程设计报告题目: 通讯录课程设计报告书一、设计目的:灵活使用C语言进行程序编写,巩固有关语句,指针,结构体,链表,文件操作等概念和方法。
提高调试程序的技能,提高软件编写的能力。
二、总体设计:三、详细设计1、编写菜单界面程序,并用Switch 语句实现菜单的选择,通过函数调用实现菜单跳转。
2、编写菜单中调用的各个函数,思路如下:(1)、add _record (添加记录)程序会提示用户输入增加的姓名和号码,并且输入一组数据后,会提示用户是否继续输入数据,如选择否,就会显示记录,自动返回二级菜单(如流程图(1))。
流程图(2)流程图(1)(2)、find_record (查找记录)程序会提示用户输入要查找的姓名,并输出该人的姓名和电话号码,如果查找不到会自动提示没有该人的姓名记录,并自动返回二级菜单(如流程图2)。
(3)、change_record(修改记录)程序会提示用户输入要修改的姓名,并要求输入该人新的姓名和电话号码,如果查找不到会自动提示没有该人的姓名记录,如果修改成功就输出新的记录。
(4)、delete_ record(删除记录)程序会提示用户输入要删除的姓名,如果没有该人会自动提示没有该人的姓名记录,否则就会删除该记录,输出删除后的记录并返回二级菜。
(6)、sort -record(记录排序)程序自动将姓名按字母顺序排列并输出并返回二级菜。
(流程图3)(7) load(读取已有的记录)程序会自动打开已保存的文件记录,以便用户进行修改、删除等。
(8)display(显示链表)此函数经过调用会显示链表中的记录,以便用户查看。
四、调试与测试调试过程中,遇到了很多的问题,如排序问题、用fopen函数打开原有记录会出现一大堆乱码等。
不过,经过和同学们讨论却从中受到了很好的启示,并能更好地解决问题和复习了C语言程序设计。
五、源程序清单和执行结果#include<stdio.h>#include<stdlib.h>#include<malloc.h>#include<string.h>#define NULL 0#define LEN sizeof(struct address)typedef struct address//通讯录中记录的结构//{char name[18];char tel[20];struct address *next;}ADDR;int menu2(); //函数的声明//int menu(); //对menu 函数的声明//int menu1();//对menu1函数的声明//void display(ADDR *head)//定义显示连表display函数//{ADDR *p=head;printf("\nThese records are:\n");if(head!=NULL)do{printf("\n name:%s\t\t,tel:%s\r\n",p->name,p->tel);//输出名字和电话号码//p=p->next;}while(p!=NULL);else printf("These file is empty");//提醒连表为空//putchar('\n');}ADDR* add(ADDR* head,ADDR* per)//定义添加记录add函数,此函数不开辟{新的空间,只在原有基础增加//ADDR *p;if(head==NULL){return per;}else{p=head;while(p->next!=NULL) p=p->next;p->next=per;return head;//返回头指针//}}ADDR* add_record(ADDR *head)//定义添加记录add_record函数,此函数可开{ADDR *p1=head,*p2=head;辟新的空间//if(p1==NULL){head=(ADDR*)malloc(LEN);//开辟空间//p1=head;}else{do{p2=p1;p1=p1->next;}while(p1!=NULL);p2->next=(ADDR*)malloc(LEN);p1=p2->next;}printf("\nname:");scanf("%s",p1->name);//添加姓名//printf("\ntel:");scanf("%s",p1->tel);//添加电话号码//p1->next=NULL;display(head);//凋用display函数,显示当前连表//putchar('\n');return(head);}ADDR* delete_record(ADDR* head)//定义删除函数delete_record//{ADDR *per,*p1=head,*p2=head;if (head==NULL) puts("This link has no record!!!\n");//提醒连表为空//else{puts("please input the delete name:\n");scanf("%s",per->name);//输入要删除的名字//while (strcmp(per->name,p1->name)!=0&&p1->next!=NULL){p2=p1;p1=p1->next;}if (strcmp(per->name,p1->name)==0){if(p1==head) head=p1->next;else p2->next=p1->next;printf("delete:%s\n\n",per->name);display(head);//显示删除后的连表//}else printf("%s can not find\n\n",per->name);//提醒没有要删除的人//}return (head);}void find_record(ADDR*head)//定义查询记录函数find_record//{ADDR *p;char s[18];printf("please input the find name:");scanf("%s",s);p=head;do{if(strcmp(s,p->name)==0){printf("\nname:%s,tel:%s\n",p->name,p->tel);//输出所查找的人的名字和电话/break;}p=p->next;}while(p!=NULL);if(p==NULL) printf("\ncannot find the people!");//提醒找不到//}ADDR* load()//定义读入函数load//{FILE* fp;ADDR* head=NULL;ADDR* per=NULL;char filename[30]={"E:\\jim.txt"};if((fp=fopen(filename,"rb"))==NULL){printf("can not open the file\n");exit(0);//提醒不可以打开文件//}while(!feof(fp)){per=(ADDR*)malloc(LEN);fscanf(fp,"%s\t\t%s\r\n",per->name,per->tel);per->next=NULL;head=add(head,per);//跳到添加函数add//}display(head);//显示连表//fclose(fp);return head;}ADDR* sort(ADDR* head)//定义排序函数sort//{ADDR *p1=head,*p2,p;if(head==NULL) printf("the file is empty!\n");for(;p1!=NULL;p1=p1->next)for(p2=p1;p2!=NULL;p2=p2->next){if(strcmp(p1->name,p2->name)>0){strcpy(,p1->name);strcpy(p1->name,p2->name);strcpy(p2->name,);strcpy(p.tel,p1->tel);strcpy(p1->tel,p2->tel);strcpy(p2->tel,p.tel);}}display(head);//显示连表//return head;}int menu_change() //定义选择修改项函数//{char s;int cn;printf("1. Change the name\n");printf("2. Change the tel\n");printf("3. Change the name and tel\n");printf("Input 1-3:");do{s=getchar();cn=(int)s-48;}while(cn<0||cn>3);return cn;}ADDR* change_record(ADDR* head)//定义修改函数change_record//{ADDR *p=head;char s[18];if(head==NULL) printf("is empty!");//连表为空//else{printf("please input the change name:");//提醒输入要改变的名字//scanf("%s",s);do{if(strcmp(s,p->name)==0){printf("\nname:%s,tel:%s\n",p->name,p->tel);switch(menu_change()){case 1:printf("please input the new name:");scanf("%s",p->name);break;case 2:printf("please input the new tel:");scanf("%s",p->tel);break;case 3:printf("please input the new name:");scanf("%s",p->name);printf("please input the new tel:");scanf("%s",p->tel);break;default:printf("error,try again\n");//提醒输入错误//}display(head);break;//显示修改后的连表//}p=p->next;}while(p!=NULL);if(p==NULL) printf("can not find the people\n");}return (head);}void save1(ADDR* head,char* filename)//定义保存函数savel//{FILE* fp;ADDR* p=head;if((fp=fopen(filename,"wb"))==NULL){printf("cannot open file\n");return;}fprintf(fp,"name\t\ttel\r\n");while(p!=NULL){fprintf(fp,"%s\t\t,%s\r\n",p->name,p->tel);p=p->next;}fclose(fp);}void save2(ADDR* head)//定义保存函数save2//{FILE* fp;ADDR* p=head;if((fp=fopen("E:\\jim.txt","wb"))==NULL){printf("cannot open file\n");return;//提醒打不开文件//}while(p!=NULL){fprintf(fp,"%s\t\t,%s\r\n",p->name,p->tel);p=p->next;}fclose(fp);}void clear(ADDR* head)//定义释放空间函数//{ADDR* p=head;while(p!=NULL){head=head->next;free(p);p=head;}}int second_menu1()//二级菜单second_menu1//{FILE *fp;int i;ADDR* head=NULL;char filename[30];printf("please input the filename:\n");//输入文件名和路径//scanf("%s",filename);if((fp=fopen(filename,"wb+"))==NULL){printf("cannot open the file\n");exit(0);}fclose(fp);for(;;){switch(menu1()){case 1:printf("add_record\n");head=add_record(head);//跳到添加函数//break;case 2:printf("find_record\n");find_record(head);//跳到查询记录函数//break;case 3:printf("change_record\n");head=change_record(head);//跳到修改函数//break;case 4:printf("delete_record\n");head=delete_record(head); //跳到删除记录函数//break;case 5:printf("sort\n");head=sort(head);//跳到排序函数//break;case 6:printf("save1\n");printf("If save the link?\n");//询问是否保存数据//puts("1.Yes 0.No\nplease selete 1or0");scanf("%d",&i);if(i){save1(head,filename);printf("<<<success save>>>\n");//提醒保存成功//}else printf("Had not save yet!");//警告还没有保存数据//break;case 7:printf("go back to the first menu\n");clear(head);menu();exit(0);default: printf("error!try again\n");}}}int menu1()//定义二级菜单选择函数//{char s;int cn;printf("1.add_record\n");printf("2.find_record\n");printf("3.change_record\n");printf("4.delete_record\n");printf("5.sort\n");printf("6.save1\n");printf("7.go back to the first menu\n");printf("Input 1-7:");do{s=getchar();cn=(int)s-48;}while(cn<0||cn>7);return cn;}int second_menu2()//二级菜单second_menu2//{ADDR* head;char filename[30];int i;head=load();for(;;){switch(menu2()){case 1:printf("add_record\n");head=add_record(head);//跳到添加记录//break;case 2:printf("find_record\n");find_record(head);//跳到查询记录//break;case 3:printf("change_record\n");head=change_record(head);//跳到修改记录//break;case 4:printf("delete_record\n");head=delete_record(head)//跳到删除记录//break;case 5:printf("sort\n");head=sort(head);//跳到排序函数//break;case 6:printf("save2\n");printf("If save the record?\n");//提醒是否保存//printf("1.Yes 0.No\nselete 1or0\n");scanf("%s",&i);if(i){save2(head);printf("<<<sucess save>>>\n");//提醒已保存成功//}else printf("Had not save yet!");//警告还没有保存//break;case 7:printf("go back to the first menu");//返回一级菜单//clear(head);menu();exit(0);default: printf(":error!try again\n");}}}int menu2()//定义二级菜单选择函数//{char s;int cn;printf("1.add_record\n");printf("2.find_record\n");printf("3.change_record\n");printf("4.delete_record\n");printf("5.sort\n");printf("6.save2\n");printf("7.go back to the first menu\n");printf("Input 1-7:");do{s=getchar();cn=(int)s-48;}while(cn<0||cn>7);return cn;}int menu()//定义一级菜单选择函数//{char s;int cn;printf("1. Build a new file\n");printf("2. Open the file\n");printf("3. Quit the file\n");printf("Input 1-3:");do{s=getchar();cn=(int)s-48;}while(cn<0||cn>3);return cn;}void main()//主函数//{for(;;){switch( menu()) {case 1:printf("Build a new file\n");second_menu1();//调用二级菜单//break;case 2:printf("Open the file\n");second_menu2();//调用二级菜单//break;case 3:printf("Quit the file\n");exit(0);default: printf("error!try again\n");}}}附带电子板:。