




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、中南大学C 语言程序设计实践报告题 目通讯录程序设计学生姓名指导教师学 院专业班级完成时间一、任务描述通讯录程序设计设计一个实用的小型通讯录程序,具有添加,查询和删除功能。由姓名,籍 贯,电话号码1,电话号码2,电子邮箱组成,姓名可以由字符和数字混合编码。 电话号码可由字符和数字组成。实现功能: (1)系统以菜单方式工作(2)信息录入功能(3)信息浏览功能(4)信息查询功能(5)信息修改功能(6)系统退出功能二、算法描述设计一个实用的的小型通讯录程序必须具备系统以菜单方式工作、信息录 入、信息浏览、信息查询、信息修改、系统退出功能,那么就需要这样的函数来 实现。因此,我需要自定义这样的函数来解
2、决问题,当然还会调用库函数。在定 义函数的过程中会用到选择结构、循环结构等基本语句,以及对结构体数组的定 义等。三、程序设计/*头文件(.h) */#include stdio.h/*I/0 函数*/#include stdlib.h /*标准库函数*/#include st ring.h/水字符串函数*/#include ctype.h /*字符操作函数*/#define M 50 /*定义常数表示记录数*/typedef struct /*定义数据结构*/char NAME20; /*姓名*/char EMAIL30; /*邮箱*/char TELE110; /*电话*/char TELE
3、210; /*电话*/char HOMETOWN30; /*籍贯*/DATA;/*以下是函数原型*/int enter(DATA t); /*输入记录*/int add(DATA t,int n); /*添加记录*/int change(DATA t,int n); /*修改记录*/int deleter(DATA t,int n); /*删除记录*/void list(DATA t,int n); /*显示记录*/void search(DATA t,int n); /*按姓名查找显示记录*/void qseek(DATA t,int n); /*快速查找记录*/void print(DAT
4、A temp); /*显示单条记录*/int find(DATA t,int n,char *s) ; /*查找函数*/int menu_select(); /*主菜单函数*/*主函数开始*/main()int i;DATA dM; /*定义结构体数组*/int length; /*保存记录长度*/system(cls);for(;)/*无限循环*/switch(menu_select() /*调用主菜单函数,返回值整数作开关语句的条件*/case l:leng th二en ter(d);break;/*输入记录*/case 2:length=add(d,length); break; /*添
5、加记录*/case 3:length=deleter(d,length);break; /*删除记录*/case 4:list(d,length);break; /*显示全部记录*/case 5:search(d,length);break; /*查找记录*/case 6:qseek(d,length);break; /*快速查找记录*/case 7:length=change(d,length);break;case 8:exit(0); /*如返回值为8则程序结束*/*菜单函数,函数返回值为整数,代表所选的菜单项*/*n);printf(* 1. 录入联系人数据5.按姓名查找*n);pri
6、ntf(*n);printf(* 2. 添加联系人数据6.快速查找*n);printf(*n);printf(* 3. 删除联系人数据7. 修改联系人数据*n);printf(*n);printf(* 4. 显示全部联系人8.退出系统*n);printf( * *n);printf( *n);printf(doprintf(n 请输入您的选项(18):); /*提示输入选项*/scanf(%s,s); /*输入选择项*/c=atoi(s); /*将输入的字符串转化为整型数*/while(c8); /*选择项不在17之间重输*/return c; /*返回选择项,主程序根据该数调用相应的函数*/
7、*输入记录,形参为结构体数组,函数值返回类型为整型表示记录长度*/int enter(DATA t)int i,n;system(cls);printf(n请输入需录入数据的个数:);/*提示信息*/scanf(%d,&n); /*输入记录数*/printf(n请输入数据:n); /*提示输入记录*/printf(n 姓名邮箱电话号码 1电话号码 2籍贯n);printf(*-*n);for(i=0;in;i+) scanf(%s%s%s%s%s,ti.NAME,ti.EMAIL,ti.TELE1,ti.TELE2,ti.HOMETOWN);/*输入记录*/printf(*-*n);retur
8、n n; /*返回记录条数*/*显示记录,参数为记录数组和记录条数*/void list(DATA t,int n)int i;system(cls);printf(nnprintf( 姓名 邮箱 电话号码 1 电话号码 2 籍贯n);printf(n);for(i=0;in;i+)printf(%-20s%-30s%-10s%-10s%-30sn,ti.NAME,ti.EMAIL,ti.TELE1,ti.TELE2 ,ti.HOMETOWN);if(i+1)%10=0) /*判断输出是否达到10条记录*/printf(请输入任意键继续.n); /*提示信息*/system (pause);p
9、rintf(/*查找记录*/void search(DATA t,int n)char s20; /*保存待查找姓名字符串*/int i; /*保存查找到结点的序号*/system(cls);printf( 请输入姓名 );scanf(%s,s); /*输入待查找姓名*/i=find(t,n,s); /*调用find函数,得到一个整数*/if(in-l) /*如果整数i值大于n-1,说明没找到*/printf(n 未查找到该记录! n);elseprint(ti); /*找到,调用显示函数显示记录*/*显示指定的一条记录*/void print(DATA temp)system(cls);r
10、八 r );printf(姓名邮箱电话号码1电话号码2籍贯n);printf(n);printf(%-20s%-30s%-10s%-10s%-30sn,temp.NAME,temp.EMAIL,temp.TELE1,temp.TELE2 ,temp.HOMETOWN);printf(*end*n);/*查找函数,参数为记录数组和记录条数以及姓名s */int find(DATA t,int n,char *s)int i;for(i=0;in;i+)/*从第一条记录开始,直到最后一条*/if(strcmp(s,ti.NAME)=0) /*记录中的姓名和待比较的姓名是否相等*/return i;
11、 /*相等,则返回该记录的下标号,程序提前结结束*/return i; /*返回 i 值*/*修改函数*/int change(DATA t,int n)DATA stu;char s20;int i,c;printf(请输入修改联系人的姓名:n);scanf(%s,s);i=find(t,n,s);if(in-l) /*如果整数i值大于n-1,说明没找到*/printf(n未查找到该记录! printf(n未查找到该记录! n);请输入您的选项(15):); 请输入您的选项(15):); /*提示输入选项*/print(ti);printf(n);printf(1代表修改姓名!n)print
12、f(2代表修改邮箱!n)printf(3代表修改电话号码1!n)printf(4代表修改电话号码2!n)printf(5代表修改籍贯!n)printf(n);doprintf(nscanf(%d,&c);switch(c)casel:strcpy(stu.NAME, ti.NAME);scanf(%s, ti.NAME);printf (修改成功!n);break; case2:strcpy(stu.EMAIL,ti.EMAIL);scanf(%s,ti.EMAIL);printf( 修 改 成 功 ! n);break;case 3:strcpy(stu.TELE1,ti.TELE1);sc
13、anf(%s,ti.TELE1);printf( 修 改 成 功 ! n);break;case 4:strcpy(stu.TELE2,ti.TELE2);scanf(%s,ti.TELE2);printf( 修 改 成 功 ! n);break;case5:strcpy(stu.HOMETOWN, ti.HOMETOWN);scanf(s,&t i.HOMETOWN);printf(修改成 功! n);break;while(c5); /*选择项不在15之间重输*/return n;/*删除函数,参数为记录数组和记录条数*/int deleter(DATA t,int n)char s20;
14、 /*要删除记录的姓名*/int ch=0;int i,j;printf( 请输入删除联系人姓名: ); /*提示信息*/scanf(%s,s);/*输入姓名 */i=find(t,n,s); /*调用 find 函数*/if(in-l) /*如果in-l超过了数组的长度*/printf( n未找到要删除的记录! n); /*显示没找到要删除的记录*/elseprint(ti); /*调用输出函数显示该条记录信息*/printf(确认是否删除该联系人(10)提示:1为删除,0为不删除!n); /*确认是否要删除*/printf( 请输入你的选项:);scanf(%d,&ch); /*输入一个整
15、数0或1*/if(ch=1) /*如果确认删除整数为1*/for(j=i+1;jn;j+) /*删除该记录,实际后续记录前移*/strcpy(tj-1.NAME,tj.NAME); /*将后一条记录的姓名拷贝到前一 条*/strcpy(tj-1.EMAIL,tj.EMAIL); /*将后一条记录的单位拷贝到前 一条*/strcpy(tj-1.TELE1,tj.TELE1); /*将后一条记录的电话拷贝到前一条*/strcpy(tj-1.TELE2,tj.TELE2); /*将后一条记录的电话拷贝到前 一条*/strcpy(tj-1.HOMETOWN,tj.HOMETOWN); /*将后一条记录
16、的籍贯拷 贝到前一条*/n-;/*记录数减1*/printf(删除成功!! ! n);return n; /*返回记录数*/*添加记录函数,参数为结构体数组和记录数*/int add(DATA t ,int n)/*添加函数,参数为结构体数组和记录数*/DATA temp; /*新插入记录信息*/int i,j;char s20; /*确定插入在哪个记录之前*/printf(请输入新插入联系人数据:n);printf(printf(姓名邮箱电话号码 1printf(姓名邮箱电话号码 1电话号码 2籍贯n);printf(n);scanf(%s%s%s%s,temp.NAME,temp.EMAI
17、L,temp.TELE1,temp.TELE2,temp.HOMETOWN); /*输入插入信息*/printf(n);i=find(t,n,s);/*调用find,确定插入位置*/for(j=n-1;j=i;j-)/*从最后一个结点开始向后移动一条*/strcpy(tj+1.NAME,tj.NAME); /*将前记录的姓名复制到后一条*/strcpy(tj+1.EMAIL,tj.EMAIL); /*将前记录的邮箱复制到后一条*/strcpy(tj+1.TELE1,tj.TELE1); /*将前记录的电话复制到后一条*/strcpy(tj+1.TELE2,tj.TELE2); /*将前记录的电
18、话复制到后一条*/strcpy(tj+1.HOMETOWN,tj.HOMETOWN); /*将前记录的籍贯复制到后一条*/ strcpy(ti.NAME, temp.NAME); /*将新插入记录的姓名复制到第i个位置*/strcpy(ti.EMAIL, temp.EMAIL); /*将新插入记录的邮箱复制到第i个位置*/strcpy(ti.TELEl, temp.TELEl); /*将新插入记录的电话复制到第i个位置*/strcpy(ti.TELEl, temp.TELE2); /*将新插入记录的电话复制到第i个位置*/strcpy(ti.HOMETOWN, temp.HOMETOWN); /*将新插记录的籍贯复制到第i个位置*/n+;/*记录数加1*/return n; /*返回记录数*/ /*快速查找,参数为结构体数组和记录数*/void qseek(DATA t,int n)char s20;int l,r,m;printf(请输入需快速查找的联系人姓名:);/*提示输入*/scanf(%s,s); /*输入待查找的姓名*/l=0;r=n-1; /*设置左边界与右边界的初值*/while(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030中国儿童照明行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国便携式扬声器行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国低碳钢板行业市场发展趋势与前景展望战略研究报告
- 特岗教师乐理试题及答案
- 2025-2030中国中高级轿车行业市场现状供需分析及重点企业投资评估规划分析研究报告
- 2025-2030中国个人3D打印机行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国PC垫圈行业市场发展趋势与前景展望战略研究报告
- 组织能力笔试题及答案
- 电工实操理论试题及答案
- 2025-2030中国IP机顶盒行业市场发展分析及竞争格局与投资前景研究报告
- 中华人民共和国民营经济促进法
- 华为企业采购流程
- 大部分分校:地域文化形考任务四-国开(CQ)-国开期末复习资料
- CQI-23模塑系统评估审核表-中英文
- 2024年共青团入团积极分子考试题库(附答案)
- 2069-3-3101-002WKB产品判定准则-外发
- GB/T 5237.1-2017铝合金建筑型材第1部分:基材
- 2022山东高考语文答题卡(新高考I卷)word版3
- lovo操作手册中文翻译版-professorgong
- 有限空间作业气体检测记录表
- 重力式降落救生艇的降落和释放装置课件
评论
0/150
提交评论