c语言程序设计实践报告.docx_第1页
c语言程序设计实践报告.docx_第2页
c语言程序设计实践报告.docx_第3页
c语言程序设计实践报告.docx_第4页
c语言程序设计实践报告.docx_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中南大学C语言程序设计实践报告题 目 通讯录程序设计 学生姓名 指导教师 学 院 专业班级 完成时间 一、 任务描述 通讯录程序设计 设计一个实用的小型通讯录程序,具有添加,查询和删除功能。由姓名,籍贯,电话号码1,电话号码2,电子邮箱组成,姓名可以由字符和数字混合编码。电话号码可由字符和数字组成。实现功能: (1)系统以菜单方式工作 (2)信息录入功能 (3)信息浏览功能 (4)信息查询功能 (5)信息修改功能 (6)系统退出功能二、算法描述设计一个实用的的小型通讯录程序必须具备系统以菜单方式工作、信息录入、信息浏览、信息查询、信息修改、系统退出功能,那么就需要这样的函数来实现。因此,我需要自定义这样的函数来解决问题,当然还会调用库函数。在定义函数的过程中会用到选择结构、循环结构等基本语句,以及对结构体数组的定义等。三、程序设计 /*头文件(.h)*/ #include stdio.h /*I/O函数*/ #include stdlib.h /*标准库函数*/ #include string.h/*字符串函数*/ #include ctype.h /*字符操作函数*/ #define M 50 /*定义常数表示记录数*/ typedef struct /*定义数据结构*/ char NAME20; /*姓名*/ char EMAIL30; /*邮箱*/ char TELE110; /*电话*/ char TELE210; /*电话*/ 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(DATA 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 1:length=enter(d);break;/*输入记录*/ case 2:length=add(d,length); break; /*添加记录*/ 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); printf( * *n); printf( * 2. 添加联系人数据 6.快速查找 *n); printf(* *n); printf( * 3. 删除联系人数据 7.修改联系人数据 *n); printf( * *n); printf( * 4. 显示全部联系人 8.退出系统 *n); printf( * *n); printf(* *n); printf( *n); do printf(n 请输入您的选项(18):); /*提示输入选项*/ scanf(%s,s); /*输入选择项*/ c=atoi(s); /*将输入的字符串转化为整型数*/ while(c8); /*选择项不在17之间重输*/ return c; /*返回选择项,主程序根据该数调用相应的函数*/ /*输入记录,形参为结构体数组,函数值返回类型为整型表示记录长度*/ 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); return n; /*返回记录条数*/ /*显示记录,参数为记录数组和记录条数*/ void list(DATA t,int n) int i; system(cls); printf(nn *DATA*n); printf( 姓名 邮箱 电话号码1 电话号码2 籍贯n); printf( -n); for(i=0;in-1) /*如果整数i值大于n-1,说明没找到*/ printf(n 未查找到该记录! n); else print(ti); /*找到,调用显示函数显示记录*/ /*显示指定的一条记录*/ void print(DATA temp) system(cls); printf(*n); 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-1) /*如果整数i值大于n-1,说明没找到*/ printf(n 未查找到该记录! n); else print(ti); printf( n); printf( 1代表修改姓名!n); printf( 2代表修改邮箱! n); printf( 3代表修改电话号码1! n); printf( 4代表修改电话号码2! n); printf( 5代表修改籍贯! n); printf( n); do printf(n 请输入您的选项(15):); /*提示输入选项*/ scanf(%d,&c); switch(c) case 1:strcpy(stu.NAME,ti.NAME);scanf(%s,ti.NAME);printf(修改成功!n);break; case 2:strcpy(stu.EMAIL,ti.EMAIL);scanf(%s,ti.EMAIL);printf(修改成功!n);break; case 3:strcpy(stu.TELE1,ti.TELE1);scanf(%s,ti.TELE1);printf(修改成功! n);break; case 4:strcpy(stu.TELE2,ti.TELE2);scanf(%s,ti.TELE2);printf(修改成功!n);break; case 5:strcpy(stu.HOMETOWN,ti.HOMETOWN);scanf(%s,&ti.HOMETOWN);printf(修改成功!n);break; while(c5); /*选择项不在15之间重输*/ return n;/*删除函数,参数为记录数组和记录条数*/ int deleter(DATA t,int n) char s20; /*要删除记录的姓名*/ int ch=0; int i,j; printf( 请输入删除联系人姓名: ); /*提示信息*/ scanf(%s,s);/*输入姓名*/ i=find(t,n,s); /*调用find函数*/ if(in-1) /*如果in-1超过了数组的长度*/ printf( n 未找到要删除的记录!n); /*显示没找到要删除的记录*/ else print(ti); /*调用输出函数显示该条记录信息*/ printf( 确认是否删除该联系人(10)n); /*确认是否要删除*/ printf( 请输入你的选项:); scanf(%d,&ch); /*输入一个整数0或1*/ if(ch=1) /*如果确认删除整数为1*/ for(j=i+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); /*将前记录的电话复制到后一条*/ strcpy(tj+1.HOMETOWN,tj.HOMETOWN); /*将前记录的籍贯复制到后一条*/ strcpy(ti.NAME,temp.NAME); /*将新插入记录的姓名复制到第i个位置*/ strcpy(ti.EMAIL,temp.EMAIL); /*将新插入记录的邮箱复制到第i个位置*/ strcpy(ti.TELE1,temp.TELE1); /*将新插入记录的电话复制到第i个位置*/ strcpy(ti.TELE1,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(l=r) /*当左边界=右边界时*/ m=(l+r)/2; /*计算中间位置*/ if(strcmp(tm.NAME,s)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论