500字范文,内容丰富有趣,生活中的好帮手!
500字范文 > 通讯录管理系统C语言课程设计大作业 c语言课程设计报告---通讯录管理系统.doc...

通讯录管理系统C语言课程设计大作业 c语言课程设计报告---通讯录管理系统.doc...

时间:2021-07-13 14:31:08

相关推荐

通讯录管理系统C语言课程设计大作业 c语言课程设计报告---通讯录管理系统.doc...

c语言课程设计报告---通讯录管理系统.doc

Yangtze University College of Arts and Science 学生实习手册 (课程设计报告) 学 部 理 工 学 部 专 业 电 子 信 息 工 程 班 级 5111班 姓 名 王嘉 学 号 40020 课程名称 C 语言课程设计 指导教师 杜红 呙明辉 实习时间 年 7 月 6 日至 年 7 月 15 日 一 、 实习题目 通讯录管理系统 二、需求分析 问题描述 本程序属于非数值计算型算法设计,学生需要设计出 图书馆模拟 系统所需要的基本功能,并设计简单的界面(无需图形化) 。 实现功能 1、 通过 提示 菜单选择 可以进行的 操作 2、将图书的信息存入文件中,并命名为 BookInfo.txt 3、将图书借阅情况信息存入文件中,并命名为 SendInfo.txt 4、在本系统中可以进行管理系统包含的基本操作,其中包括 a 查看所有图书的信息; b 输入一本图书的图书编号,从当前图书中进行查找,如果找到则显示该图书的相关信息,如果没有找到则给出提示信息; c 添加一本图书的基本信息,通过输入图书编号,首先查找是否存在该图书编号的图书,如果存在则提示重新输入,否则将该图书按照顺序插入到相应位置; d 删除一本图书的基本信息,通过输入图书编号,首先查找是否存在该图书编号的图书,如果存在则将该图书删除,否则给出提示信息,提示该图书不存在; e 借阅一本图书,需要给出学号和 图书编号,如果图书编号不存在则重新输入,直到输入正确为止,并将学号和相应的图书编号存入 SendInfo.txt文件中。 5、图书基本信息包括图书编号、书名、作者、出版社和价钱这些简单信息。 6、图书信息文件中每一行存放一本图书的信息。 7、借阅信息文件中每一行存放一本书的借阅情况。 知识点 本程序主要考察对自定义函数的熟悉程度,本程序中主要使用到的是数组的相关操作,包括数组的输入、输出、查找、插入、删除等操作,需要对数组有比较深入的掌握。 说明 1当程序执行的时候所读取的图书信息文件必须存在,否则可 能会出现错误。 2图书信息文件中存放图书信息的时候是按照行来存放的,即一行一本书。 3借阅信息文件中存放学生借阅情况是按照行来存放的,即一行存放一个学号和一个图书编号。 4程序执行的基本过程为 a 在所有操作之前,也就是加载操作菜单之前,先从文件中读取所有图书的信息,并存入一个数组中,此时数组可以定义为包含 100个元素; b 然后根据菜单所进行的所有操作都是对当前数组进行操作,此时也就是对数组的查找、定位、添加、修改、删除操作; c 当退出系统的时候再将当前数组中的所有元素按照一本图书一行的方式写回图书信 息文件中,此时注意选择覆盖方式,这样就可以将原来的所有数据覆盖,只保留最新的数据; 当按行读取图书信息文件的时候,有可能最后一行只有一个回车,这时候实际上所读取的数据为空字符串,需要对此作判断,如果是空字符串,则说明已经没有人员,就必须将当前读入的空字符串写入数组中。 三、概要设计 系统功能模块图 主 菜 单添 加 显 示 删 除 查 询 修 改 保 存模 糊 查 询帮 助姓 名地 址电 话精 确 查 询排 序添加可以添加通讯录记录,依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱后,会提示是否继续添加。 显示可以以表格形式输出所有通讯录里的记录。 删除输入欲删除的那个人的名字后,会选择删除他(她)的记录内容。 查询可以选择用姓名、电话、地址三种方式查询。 修改输入欲修改的那个人的名字后,再依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱即可完成修改。 保存输入文件名(带后缀名)后,即可将通讯录信息保存到文件。 帮助显示帮助信息。 四、详细设计 1.通讯录 程序主体 include include include typedef struct /*公共部分 */ int score; /*编号 */ char name10; /*姓名 */ char num15; /*号码 */ char email20; /*邮箱 */ char age8; /*年龄 */ char adds20; /*住址 */ Person; Person pe80,temp; int menu_select; /*界面函数 陆 */ int Person per,int n; /*添加记录 王 */ void DisplayPerson per,int n; /*显示函数 公共 */ int Delete_a_recordPerson per,int n; /*删除函数 赵应振 */ void Query_a_recordPerson per,int n; /*查询函数 王嘉 */ void ChangePerson per,int n; /*修改函数 赵 */ void WritetoTextPerson per,int n; /*打印保存 公共 */ void rankint n; /*排序函数 陆 */ void main /*主函数 陆 */ int n0,i0,k; FILE *fp1; /*运行之前从文件中读取之前输入的项目 */ iffp1“PersonInfo.dat“,“rb“NULL /*如果没有文件,自动创建一个 */ fp1“PersonInfo.dat“,“wb“; do kfread i; ni-1; whilek0; /*文件读取完毕或 错误时 fread 函数返回值为 0。资料来自 csdn论坛 */ fclosefp1; for switchmenu_select case 1 printf“nt 添加记录到通讯录 n“; /*添加记录 */ npe,n; break; case 2 printf“nttt 通讯录记录表 n“; /*显示记录 */ Displaype,n; break; case 3 printf“nt 从通讯录中删除记录 n“; nDelete_a_recordpe,n; /*删除记录 */ printf“t“; system“pause“; break; case 4 printf“nt 在通讯录中查找记录 n“; Query_a_recordpe,n; /*查找记录 */ printf“t“; system“pause“; break; case 5 printf“nt 修改通讯录中的记录 n“; Changepe,n; /*修改数据 */ printf“t“; system“pause“; break; case 6 printf“nt 保存通讯录中的记录 n“; WritetoTextpe,n; /*保存数据 */ printf“t“; system“pause“; break; case 7 /*帮助信息 */ printf“nt 使用帮助 n“; printf“nt1.添加记录,用于输入你想添加的条目的信息,注意格式。 n“; printf“nt2.显示记录,用于显示当前所有条目。 n“; printf“nt3.删除记录,用于删除当前所有条目中的某一条。 n“; printf“nt4.查找记录,用于查找当前所有条目中的某一条,可以姓名模糊查找。n“; printf“nt5.修改记录,用于修改当前所有条目中的某一条。 n“; printf“nt6.保存记录,用于保存当前所有条目和打印当前所有条目。 n“; system“pause“; break; case 0 printf“ntt 谢谢使用,再见 n“; /*结束程序 */ printf“ntt“; system“pause“; printf“ntt“; exit0; 主体部分主要做一些基本定义,如结构体定义,函数声明, 主函数 。 其中主函数中 有读取函数,即 开始 使用时 加载之前输入 存储文件 内容信息 ,另外的存储文件 内容信息 函数部分,我们放在了存储打印函数了。函数主体是一个死循环加通道函数,循环的终止时依靠 system()和 exit()函数控制。 二 工作流程图 添加函数 用于添加通讯录记录, 入口 参数 为结构体,总人数 n, 出口参数 ni,无其他函数调用 开 始I n t i 0 为 计 数 循 环 的 次 数终 止 条 件为 输 入 y / n依 次 输 入 要 录 入的 内 容并 循 环 i 返 回 值n i 结 束YN显示函数 用于显示通讯录记录, 入口 参数 为结构体,总人数 n,无 出口参数 ,调用排序函数函数对编号进行排序 开 始I n t i 0 控 制 循 环 并记 录 此 时 i 对 应 的 结 构 体 信 息判 断 条 件i 7,循环中有清屏 system“cls“;直到有 0到 7输入时循环结束。 测试 3 添加函数 和修改函数 中输入编号是一定为整型数字, Do while0scanf“td“, forj0;j对此有解释 A return value of 0 indicates that no fields were assigned。 这时字母 会遗留在 “输入缓冲区 “中。因为缓冲中有数据,所以 scanf 不会等待用户输入,就再次去缓冲中读取,可是缓冲中的却是字母,这个字母再次被遗留在缓冲中,如此反复,从而导致死循环。可用 getchar 将输入缓冲区中的内容清掉,从而避免了 scanf 输入失败时的死循环 程序用了很多的循环,因此对于循环的控制要十分小心, 循环三个函数 for while 和do-while 的区别也是十分重要的, 有的循环是要先作某步,就用 do-while,有的循环不知道循环次数用 while 等等。 解决其中大部分问题,当然还存在一些问题没有解决 。我相信在以后的学习能够解决好它们。 但是,收获还是不小的, 我不仅对 C 的操作有了进一步的掌握,还了解到了程序设计的书写风格及其注释的格式。 还有一点体会就是,书上和老师教的内容是有限的,我们需要不断地靠自己去学习,向他人请教,了解和掌握更多的知识,这样我们才能编出更好的 C 程序。 总体来说,这次 C 语言程序设计实验还是比较成功的,虽然最终程序还存在一些不足,但能取得这样的成绩我还是比较高兴的。 希望以后的日子,能有更加努力。 八、附录 源程序清单 include include include typedef struct /*公共部分 */ int score; /*编号 */ char name10; /*姓名 */ char num15; /*号码 */ char email20; /*邮箱 */ char age8; /*年龄 */ char adds20; /*住址 */ Person; Person pe80,temp; int menu_select; /*界面函数 陆 */ int Person per,int n; /*添加记录 王 */ void DisplayPerson per,int n; /*显示函数 公共 */ int Delete_a_recordPerson per,int n; /*删除函数 赵应振 */ void Query_a_recordPerson per,int n; /*查询函数 王嘉 */ void ChangePerson per,int n; /*修改函数 赵 */ void WritetoTextPerson per,int n; /*打印保存 公共 */ void rankint n; /*排序函数 陆 */ void main /*主函数 陆 */ int n0,i0,k; FILE *fp1; /*运行之前从文件中读取之前输入的项目 */ iffp1“PersonInfo.dat“,“rb“NULL /*如果没有文件,自动创建一个 */ fp1“PersonInfo.dat“,“wb“; do kfread i; ni-1; whilek0; /*文件读取完毕或错误时 fread 函数返回值为 0。资料来自 csdn论坛 */ fclosefp1; for switchmenu_select case 1 printf“nt 添加记录到通讯录 n“; /*添加记录 */ npe,n; break; case 2 printf“nttt 通讯录记录表 n“; /*显示记录 */ Displaype,n; break; case 3 printf“nt 从通讯录中删除记录 n“; nDelete_a_recordpe,n; /*删除记录 */ printf“t“; system“pause“; break; case 4 printf“nt 在通讯录中查找记录 n“; Query_a_recordpe,n; /*查找记录 */ printf“t“; system“pause“; break; case 5 printf“nt 修改通讯录中的记录 n“; Changepe,n; /*修改数据 */ printf“t“; system“pause“; break; case 6 printf“nt 保存通讯录中的记录 n“; WritetoTextpe,n; /*保存数据 */ printf“t“; system“pause“; break; case 7 /*帮助信息 */ printf“nt 使用帮助 n“; printf“nt1.添加记录,用于输入你想添加的条目的信息,注意格式。 n“; printf“nt2.显示记录,用于显示当前所有条目。 n“; printf“nt3.删除记录,用于删除当前所有条目中的某一条。 n“; printf“nt4.查找记录,用于查找当前所有条目中的某一条,可以姓名模糊查找。n“; printf“nt5.修改记录,用于修改当前所有条目中的某一条。 n“; printf“nt6.保存记录,用于保存当前所有条目和打印当前所有条目。 n“; system“pause“; break; case 0 printf“ntt 谢谢使用,再见 n“; /*结束程序 */ printf“ntt“; system“pause“; printf“ntt“; exit0; int menu_select /*界面函数 陆 */ char c,null20; do system“cls“; printf“tt *通讯录 * n“; printf“tt n“; printf“tt 1. 添加记 录 n“; printf“tt 2. 显示记录 n“; printf“tt 3. 删除记录 n“; printf“tt 4. 查询记录 n“; printf“tt 5. 修改记录 n“; printf“tt 6. 保存记录 n“; printf“tt 7. 功能帮助 n“; printf“tt 0. 退出程序 n“; printf“tt n“; printf“t 提醒退出程序前,请保存记录。 n“; printf“tt 请您选择 0-7“; cgetchar; getsnull; whilec7; returnc-0; int Person per,int n /*添加记录 王 */ int temp,i0,j0,k10,k20; /*temp 为临时编号存 储变量 */ char sign,null20; /*k1 为编号检测阀开关, k2 为 符检测阀开关 */ whilesignn /*编号的唯一 by王嘉 */ do while0scanf“td“, forj0;j1 printf“t“; system“pause“; printf“t-n“; printf“n“; system“pause“; int Delete_a_recordPerson per,int n /*删除函数 赵应振 */ char ch,name20; int i0,j,tabi,deletescore,count10,count20; /*tabi 为标记的 i 值 ,deletescore 为选择删除的编号 */ printf“t 请输入想删除记录中的名字 “; scanf“s“,name; whilestrcmpperi.name,name0 count2; ifin printf“t 通讯录中没有此人 n“; returnn; fori0;in;i /*同名人员删除问题 */ /*统计并找出通讯录中存在相同姓名的条目 */ while strcmpperi.name,name0 printf“t 此人姓名 sn“,peri.name; printf“t 此人年龄 sn“,peri.age; printf“t 通讯地址 sn“,peri.adds; printf“t 电 子邮箱 sn“,peri.email; printf“t-n“; count1; i; ifcount11 /*当姓名唯一时 */ printf“t 是否删除 y/n“; fstdin; scanf“c“, ifchy chy-32 forjcount2;jn-1;j perjperj1; printf“tt 已经成功删除 n“; fstdin; return n-1; else printf“t 未删除 nt 谢谢使用 nt“; return n; else /*当姓名有两个或以上时,按编号删除。 */ printf“tt 请输入要删除人的编号 ntt“; scanf“d“, fori0;in;i if peri.scoredeletescore printf“t-n“; printf“t 此人编号 dn“,peri.score; printf“t 此人姓名 sn“,peri.name; printf“t 此人年龄 sn“,peri.age; printf“t 通讯地址 sn“,peri.adds; printf“t 电子邮箱 sn“,peri.email; printf“t-n“; tabii; printf“tt 是否删除 y/nntt“; fstdin; scanf“c“, ifchy chy-32 forjtabi;jn-1;j perjperj1; printf“ttt 已经成功删除 n“; fstdin; return n-1; else printf“tt 谢谢使用 “; return n; void Query_a_recordPerson per,int n /*查询函数 by王嘉 */ int m; printf“tn 请选择查询方式 n“; /*查找总菜单 */ printf“t n“; printf“t 1姓名 n“; printf“t 2电话 n“; printf“t 3地址 n“; printf“t 4返回 n“; printf“t n“; printf“请选择 “; scanf“d“, whilem1 getchar; scanf“d“, ifm1 int x; printf“tn 请选择查询方式 n“; /*查找二级菜单 */ printf“t n“; printf“t 1精确查找 n“; printf“t 2模糊查找 n“; printf“t n“; printf“请选择 “; scanf“d“, whilex1 getchar; scanf“d“, ifx1 /*精确查找单元 */ char s20; int i0; printf“t 请输入想查询的姓名 “; scanf“ts“,s; whilestrcmpperi.name,s0 ifin printf“t 通讯录中没有此人 n“; return; printf“t 此人编号 dn“,peri.score; printf“t 此人年龄 sn“,peri.age; printf“t 电话号码 sn“,peri.num; printf“t 通讯地址 sn“,peri.adds; printf“t 电子邮箱 sn“,peri.email; ; ifx2 /*模糊查找单元 */ char s20; int i0,j0; printf“t 请输入想查询的姓名 “; scanf“ts“,s; whilein ifstrstrperi.name,s /*使用 strstr函数指向第一次出现 */ printf“s“,peri.name; printf“t 此人编号 dn“,peri.score; printf“t 此人年龄 sn“,peri.age; printf“t 电话号码 sn“,peri.num; printf“t 通讯地址 sn“,peri.adds; printf“t 电子邮箱 sn“,peri.email; else j; i; ifjn printf“t 通讯录中没有此人 n“; /*如果找了 n 次没结果,则无此人 */ ifm2 char s20; int i0; printf“t 请输入想查询的电话 “; scanf“ts“,s; whilestrcmpperi.num,s0 ifin printf“t 通讯录中没有此人 n“; return; printf“t 此人编号 dn“,peri.score; printf“t 此人姓名 sn“,peri.name; printf“t 此人年龄 sn“,peri.age; printf“t 通讯地址 sn“,peri.adds; printf“t 电子邮箱 sn“,peri.email; ; ifm3 char s20; int i0; printf“t 请输入想查询的地址 “; scanf“ts“,s; whilestrcmpperi.adds,s0 ifin printf“t 通讯录中没有此人 n“; return; printf“t 此人编号 dn“,peri.score; printf“t 此人姓名 sn“,peri.name; printf“t 此人年龄 sn“,peri.age; printf“t 电话号码 sn“,peri.num; printf“t 电子邮箱 sn“,peri.email; void ChangePerson per,int n /*修改函数 赵 */ char s20; int i0,j0,temp,k10,k20; printf“t 请输入想修改的记录中的名字 “; scanf“s“,s; whilestrcmpperi.name,s0 ifin printf“t 通讯录中没有此人 n“; return; else printf“t 此人编号 dn“,peri.score; printf“t 此人姓名 sn“,peri.name; printf“t 此人年龄 sn“,peri.age; printf“t 电话号码 sn“,peri.num; printf“t 电子邮箱 sn“,peri.email; printf“nt 重新输入信息 n“; printf“t 编号 “; do /*修改函数同样重复输入函数时的问题 */ while0scanf“td“, forj0;jn;j /*此处循环为计数 k1, k1 初值为 0*/ iftempperj.score k1; /*k1 为两种情况 0 或 1*/ ifk11 /*k1 为 1 时,有重复并使 k1 归零进入循环 */ printf“t 编号重复,请重新输入 nt 编号 “; k10; else break; /*k1 为 0 时,无重复,结束循环 */ whilek10; /*循环的终止条件是没有找出相同, k10*/ peri.scoretemp; printf“t 姓名 “; scanf“ts“,peri.name; printf“t 年龄 “; scanf“ts“,peri.age; printf“t 电话号码 “; scanf“ts“,peri.num; printf“t 通讯住址 “; scanf“ts“,peri.adds; printf“t 电子邮箱 “; scanf“ts“,peri.email; do /*Email 的 符检测 */ /*By陆文虎 */ forj0;j20;j ifperi.emailj k2; ifk21 printf“tEmail 格式错误,未检测到合法 符,请重新输入 nt 电子邮箱 “; scanf“ts“,peri.email;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。