




已阅读5页,还剩47页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 课课 程程 设设 计计 报报 告告 C 语言课程设计语言课程设计 通讯录管理系统通讯录管理系统 系 院 计算机工程学院 班级 13 级计科二班 学生姓名 学号 老师 任正云 时间 2014 年 6 月 3 日 学校 荆楚理工学院 2 摘要摘要 本通讯录信息管理系统用计算机管理电子通讯录的一种算机应 用技术的创新 在计算机还未普及之前通讯管理都是由联系人采用名 片 笔录手工记帐的方式来操作的 现在一般的通讯录管理都是采用 计算机作为工具的实用的计算机通讯录管理程序来帮助人们进行更 有效的通讯录信息管理 通讯录管理系统是典型的信息管理系统 MIS 其开发主要包括后台数据库的建立和维护以及前端应用程序 的开发两个方面 对于前者要求建立起数据一致性和完整性强 数 据安全性好的库 而对于后者则要求应用程序功能完备 易使用等特 点 经过分析 我们使用 MICROSOFT 公司的 C 语言开发工具 利用 其提供的各种面向对象的开发工具 尤其是数据窗口这一能方便而简 洁操纵数据库的智能化对象 首先在短时间内建立系统应用原型 然 后 对初始原型系统进行需求迭代 不断修正和改进 直到形成用户满 意的可行系统 3 目录 第一章第一章 前言前言 3 第二章第二章 系统设计系统设计 5 2 1 系统设计的目的 5 2 2 数据存储结构 6 第三章第三章 系统主菜单的设计系统主菜单的设计 8 第四章第四章 功能演示及说明功能演示及说明 10 4 1 启动程序界面 10 4 2 主菜单功能及其实现 13 4 3 添加功能 16 4 4 查找功能 22 4 5 修改功能 28 4 6 全部输出功能 35 4 7 删除功能 41 4 8 格式化和退出功能 45 第五章第五章 总结总结 46 5 1 C 语言总结 47 5 2 想法 49 第一章第一章 前言前言 在当今社会 知识爆炸的年代里 科技的发展日新月异 我们 都被无数无形的网充斥着 缠绕着 联系着 信息网 互联网的到 来把人与人之间的距离拉得更近了 人与人之间的关系也更复杂了 4 基于此原因各个不同种类的通讯录层出不穷 然而在众多通讯录中 存储功能多样性便成为人们关注的焦点 同时 电脑语言的开发也 日新月异 它的发展促使了很多通讯设备的革命性发展 当然通讯 录也不例外 过去 人们都采用传统方式的手工记录通讯资料 即费时 易 丢失 保密性也不高 效率太低 可以说传统意义上的手工记录已 经不能适应现代人的要求 所以人们急切的要求利用这些技术来进 行创新 来提高工作效率 工作质量 减轻人们的工作压力 编 辑通讯录系统 进一步提高现代人在工作 学习 生活中的效率 通过此通讯录程序来实现资料存储的合理化 查询资料的系统化 存储容量的规模化 从而来替代传统意义上的手工记录 本软件采用 C 语言程序编程 运用子函数调用的方式实现了多 个功能 密码验证 通讯录基本功能 输入 载入 存储 查询等 本软件在中文版 Dev C CodeBlocks 或 Visual C 6 0 中运行 操作简单方便 可移植性好 本软件的特点是 运行完一个操作 系统会自动回复到主菜单 以免忘记操作键 并且为了加强系统的 安全性 本软件适时的添入密码验证功能 让用户的信息得到保障 缺点是 本软件功能单一 只有通讯录的基本的 输入 载入 存 储 查询 删除等功能 5 第二章第二章 系统设计系统设计 2 1 系统设计的目的系统设计的目的 课程设计为学生提供一个既动手又动脑的 独立实现的机会 将课上的理论知识与实践有机结合起来 锻炼我们的实践解决问题 的能力 提高实践能力 解决问题的能力 6 2 2 数据存储结构数据存储结构 通迅录基本存储信息 姓名 QQ 电话 性别 出生年月等 通讯录 姓名 QQ 电话 性别 出身年月日 基本介绍 姓名的保存 通过保存中文姓名以及英文姓名 方便后面的查 找 然后基本的保存信息是 QQ 电话 性别 出生年月等 在我 的原计划中本来还想加上相片的 可是由于目前的知识有限无法做 出 实属本程序的遗憾 对于要保存上述一个联系人的结构 我们需要新建一个专门适 用于本程序的数据结构 通过 struct 来定义一个 下面就是本程序 的定义结构的代码 typedef struct 7 char namechina 10 char nameenglish 30 char pnumber 13 char qq 13 char sex 4 int birth 3 yuansu yuansu 则是来定义一个联系人的结构类型 char namechina 10 是用来保存一个中文名字的 在写代码的开始时 我写的是 char namechina 5 数组的大小定义为五个字节 我当时想 中文名字最 多也就四个字的 所以五个字节足够存放的 但当我运行程序的时 候 输出的是乱码 得不到我想要的结果 按照我当时的想法 应 该没有 很合理啊 那到底哪里出错了 汉字也是字符啊 这也没 有错啊 那到底是为什么了 就不卖关子了 汉字的确是字符 但 是汉字的存储时需要两个字符的 当我用数组大小为 5 个字节的字 符数组存放汉字 写入三个名字的汉字的时候 毫无疑问需要六个 字节 char nameenglish 30 char pnumber 13 char qq 13 char sex 4 其余的几个应该没有什么问题了 但还需要值 得提一下的事 数组的大小应该比所存放的字节要大 是 为了在字符的后面存放空字符 8 第三章第三章 系统主菜单的设计系统主菜单的设计 通讯录 输入板块 输出板块 修改板块 查询板块 格式化板 块 删除板块 系统板块 按中文查 找找 按英文查 找 退出 主菜单简单介绍 1 输入模块 在主菜单的界面里 把输入模块作为第一个 功能 当然 通讯录的首要功能当然是要保存联系人 9 而存入作为第一个也是可接受的 当然在此模块中 有 时候会出现一些添加重复 于是就想到添加防重复模块 当存入以存在的信息时 则显示一个提示 显示信息已 存在 2 输出模块 把输出作为第二个功能 根据该功能在平常 日常生活中的使用频率来说 该功能的使用仅次于存于 功能 3 修改模块 该功能是改联系人的 4 查询模块 查询联系人 5 格式化模块 该功能在一些人看来可能是多余的 可是 我认为 有些时候需要从新存入 删除以前所有的联系 人 这是一个很不错的功能 6 删除模块 该模块提供的功能是 需要删除某个联系人 可以输入名字显示出来 然后进行删除 7 退出模块 这个模块最为最后一个模块 在执行上面的 所有的模块当中 返回的都是主菜单界面 所以需要一 个来退出程序的功能 于是就把最后的一个功能作为退 出程序 在下一章节里 将会着重分析程序的思想以及每个模块的 功能 会出现的问题 外加个人的思想 10 第四章第四章 功能演示及说明功能演示及说明 在本章中 会先给出每个界面 然后对每个界面进行解说 从 而来让大家明白本程序的编写原理以及思想 其中每个小节会演示 一个功能 4 1 启动程序界面启动程序界面 11 在上图中可以看到 提示要输入密码 其作用是起到保护隐私 的作用 而本程序所设置的密码为 123456 而对于别人是不知道密 码的 会输错密码 此时给出了人性化的提示 例如下图所示 这个模块式通过调用一个函数来实现的 一下则是该函数的代 码 bool mima void char p 100 long i n 0 printf 请输入密码 for i 8 i 0 i 设置为只有 8 次机会 gets p if strlen p 6 12 puts 请输入 6 位数字 printf 密码错误 你还有 ld 次机会 n i 1 puts n 请从新输入 continue if strcmp chushi p 0 return true else printf 密码错误 你还有 ld 次机会 n i 1 if i 1 0 最后一次不需要输出 printf n 请重新输入 exit 0 本程序的主要思想可以用下面的结构图进行说明 输入密码输入密码 密码正确 密码正确 进入主菜单进入主菜单 密码错误 密码错误 从新输入 从新输入 并限制次数并限制次数 密码 密码 输入正确的密码 123456 后得到的界面如下图 13 从上面对色程序可以看出 输入正确的密码后 显示的是主界 面 而不知道大家有没有注意到 在主界面的上面并没有刚开始输 入密码的那些提示 这是为什么呢 这里说到底也是一个起到保护 的作用 而主要是靠 system cls 来进行刷屏 从而删除以前显 示的所有字符 好了 下面开始介绍本程序的重头戏了 4 2 主菜单功能及其实现主菜单功能及其实现 在上面的截图中 有主功能界面 而这写功能的选择及如何实 14 现了 对此我们大家估计首先想到的是 使用 switch 来选择 这 的确是很好的一个法子 可是新的问题又来了 每一个功能都对应 一个函数块 怎么来选择执行这些函数块了 对此我们需要用到函 数指针 为此就把这些功能模块的函数原型都定义一样 bool 函数 名 void 然后在定义一个函数指针 bool 变量 void 然后把函 数名的地址赋给变量 使变量能只想该函数 而本程序的函数原型 为 bool mima void 设置密码 bool cunru 向文件里存储 bool duchu 把文件里的数据全部读出来 bool chazhao 通过名字字符串来查找 void fengge void 以输出一行 来构建 bool gongneng 功能选择 void zhixing char a 执行所选择的功能 bool xiugai 修改 bool geshihua 格式化文件 bool shanchu 删除联系人 bool tuichu 然后通过 变量 void 来执行函数 就可以了 下面给出 switch 与函数的选择使用的代码 void zhixing char a bool pd false bool pst switch a 15 case 1 pst cunru break case 2 pst chazhao break case 3 pst xiugai break case 4 pst duchu break case 5 pst shanchu break case 6 pst geshihua break case 0 pst tuichu break default printf 输入有误 n while getchar n 去掉换行符 免得会在存入里 面作为第一个输入字符 break system pause return while getchar n 去掉换行符 免得会在存入里面作为第一个输 入字符 break fengge while pd false 返回值为 false 为失败 则任然需要继续执行 而 返回 true 则不需要执行 pd pst while getchar n break return true 在上面的代码中 你可能也发现没有输出字符串的函数 也没 有需要选择功能的输入函数 下面给出功能界面输出的模块 bool gongneng char a fengge printf 请选择你所要执行的功能 n n printf 1 添加 n n printf 2 查找 n n printf 3 修改 n n 16 printf 4 全部输出 n n printf 5 删除 n n printf 6 格式化文件 n n printf 0 退出 n n fengge scanf c zhixing a return true scanf c 是通过键盘来输入一个字符 保存在变量 a 中 然后通过 zhixing a 来调用 zhixing 这个函数 并把 a 中的值传递 过去 从而达到执行函数的目的 4 3 添加功能添加功能 在键盘上输入数字 1 然后回车可进入添加功能 可以得到的界 面为 17 并按照提示信息输入要存入的信息 当输入完信息后 按回车 键会显示是否会继续存入还是退出 退出时会回到主界面上 当然 不这些信息都已经 存入到了另外开辟的文件里 而这个文件的名 为 txl lkx 的里面 位置为当前位置 而此函数的的代码模块为 bool cunru system cls int last count 0 FILE file yuansu one 1 two 1 char a z h if file fopen D txl lkx ab NULL ab 打开并创建二进制文 件 结构体用二进制文件来存取 puts 打开失败 return true printf 请输入中文名字 gets one namechina printf 请输入英文名字 gets one nameenglish printf 电话号码 gets one pnumber printf QQ 号 gets one qq printf 性别 gets one sex printf 出身年月 中间以逗号隔开 scanf d d d 需要加一个防重复的 fseek file 0L SEEK END last ftell file rewind file while count namechina one namechina 0 printf n 此信息已存在 n while getchar n 去掉第 106 行的换行符 break fengge printf n printf 继续存入还是退出 1 存入 2 退出 n z getchar if z 2 return true if z 1 printf n fengge return false fclose file 从新打开存入 if file fopen D txl lkx ab NULL ab 打开并创建二进制文 件 结构体用二进制文件来存取 puts 打开失败 return true fwrite one sizeof yuansu 1 file fclose file fengge while getchar n 去掉第 106 行的换行符 免得会在存入里面作 19 为第一个输入字符 break printf n printf 继续存入还是退出 1 存入 2 退出 n z getchar if z 2 return true else if z 1 printf n fengge return false else printf n 输入错误 请从新开始 n system pause return true 上面的代码看起来很长 对此下面会给出结构图来帮助理解这 个功能 20 输出提示信息 输出提示信息 对其输入信息对其输入信息 判断是否判断是否 重复 重复 则显示重复 则显示重复 并不会存入 并不会存入 提示结束还是提示结束还是 继续存入继续存入 否否 将信息存入文将信息存入文 件中 提示结件中 提示结 束还是继续存束还是继续存 入入 是是 对于上述功能中 有两个要值得提一下的是 第一就是 如何 将结构数组的内容保存在文件中 if file fopen D txl lkx ab NULL ab 打开并创建二进制文件 结构体用二进制文件来存取 puts 打开失败 return true fwrite one sizeof yuansu 1 file fclose file 这就是存入文件的代码 可以看出 我并没有在信息输入后就 直接存入 而是先关闭然后再打开存入 主要是考虑到 在存入文 件中 避免格式出错 导致在输出的时候乱码 而且在存入的时候 我用到的事二进制存入方式 ab 采取这种忖度方式的好处是 21 可以再文件不存在的时候 能新建一个 即能写也能读 写的的方 式是在后面追加 并不会破坏先前的内从 读的话 相当于 rb 一样的功能 从用二进制的方式 也是防止数据的丢失 第二个需 要值得提一下的是 在存入成功后 马上接着会输出 是否继续存入 这样的提示 实现这样的功能是在执行模块和当前函数模块里的 在执行模块的代码为 while pd false 返回值为 false 为失败 则任然需要继续 执 行 而返回 true 则不需要执行 pd pst while getchar n break return true 在当前函数模块的代码为 printf 继续存入还是退出 1 存入 2 退出 n z getchar if z 2 return true else return false 可以看出 当要退出时 会返回一个布尔常量 true 而在执行的 模块中 当函数的返回值 true 时 while pd false 会停止循环 执行函数模块结束运行 此时回到了主函数里面 稍不注意就可以 回认为程序运行结束 程序关闭 但是在本程序里面 此时会返回 到显示主功能的界面里 接下来我们来看看主函数的代码 就会豁 然开朗了 22 主函数代码为 int main void mima system cls printf n while 1 system cls gongneng system pause return 0 在主函数里面有一个循环 而这个循环的后面圆括号里是 1 也就是说可以无限制循环下去 此时又有人估计会有疑问 既然此 循环无限制循环下去 那又怎么来结束程序呢 这个疑问将在讲退 出模块里 具体来说明 4 4 查找功能查找功能 对于查找功能 实现应该很简单 只要找到与输入字符创相对 应的就可以了 在着了采用的是名字作为查找标记 而本程序的查 找是把应经存在文件里的内容按照结构体数组输出 在这里本程序 在这个功能模块里只创建一个大小为一的结构体数组 将 txl lkx 文 件里的内容一个一个输出 输出一个就马上与要查找的字符串 也 23 就是名字 进行比较 看是否相同 若相同则会输出 然后执行完 循环直至结束 但是若找不到 则会显示找不到联系人 在键盘上输入 2 可以进入查找功能 显示的界面为 然后按照提示输入你要查找的名字 输入汉字或拼音都可以 当你输入你要查找的名字时 若当前文件存有你要查找的名字 则 输入名字后显示出你要查找的名字的所有信息 并且会显示出是否 继续查找 按 1 继续 按 2 退出 若当前文件没有存有你要查找的 名字 则会显示出查找失败或不存在的提示信息 并且会显示出是 否继续查找 按 1 继续 按 2 退出 有关信息都存入好文件名为 txl lkx 的文件当中 24 而此函数的代码模块是 bool chazhao system cls FILE file yuansu one 1 char hedui 30 zi int count 0 last n 0 if file fopen D txl lkx ab NULL 打开并创建二进制文件 结构 体用二进制文件来存取 puts 打开失败 return true printf 输入要查找的名字 输入汉字或者拼音 输入用户要查找的名字 gets hedui fseek file 0L SEEK END 将光标移至文件的最后面 last ftell file 测试文件的末位置 并赋值给 last while count namechina hedui 0 strcmp one nameenglish hedui 0 printf n s one namechina printf s n n one nameenglish printf 电话 s n n one pnumber printf QQ s n n one qq printf 性别 s n n one sex printf 出生年月 d 年 d 月 d 日 n one birth 0 one birth 1 one birth 2 25 fengge n fclose file if n 0 printf 查找失败 或者不存在 n fengge printf n printf 继续查找还是退出 1 查找 2 退出 n zi getchar if zi 2 return true if zi 1 printf n fengge return false 查找这一功能的代码比较长 可以用流程图来帮助理解 26 输入输入 2 执行查找功能 执行查找功能 打开文件打开文件 输入要查找的名字输入要查找的名字 当前光标是否处于文件末当前光标是否处于文件末 尾尾 将文件内的第一个名字与将文件内的第一个名字与 所要查找的名字核对所要查找的名字核对 输出相关信息输出相关信息 是是 将光标移向下一个名字将光标移向下一个名字 处处 否否 否否 名字是否相名字是否相 同同 27 对于查找这一功能 比较注意的几个部分是 第一 代码为 fseek file 0L SEEK END last ftell file 虽然代码比较简单 但还是比较需要注意的地方 这一 代码的作用是将光标移至文件的末位置 并赋值给 last 这一步是必 须做的 第二 代码为 while count last fseek file count SEEK SET fread one sizeof yuansu 1 file count count sizeof yuansu 这几行代码看似简单 但却是必不可少的 首先 fseek 函数将光 标移至文件的开头位置 这个的意思是将用户所要查找的信息从文 件的第一个存储的信息开始核对 这样的话就不会漏掉一个要进行 核对的信息 然后将文件中第一个人的信息存入数组 one 中 这样 就可以在数组中于用户要查找的姓名进行核对 最后将一个人的信 息所占的字节数赋值给 count 中 这样做的原因是进行 countnamechina hedui 0 strcmp one nameenglish hedui 0 printf n s one namechina printf s n n one nameenglish printf 电话 s n n one pnumber printf QQ s n n one qq printf 性别 s n n one sex printf 出生年月 d 年 d 月 d 日 n one birth 0 one birth 1 one birth 2 fengge n fclose file 这一段代码比较长 但确很容易理解 这一段代码的作用是 将用户输入的中文名字或者英文名字和文件内存储的信息名字相核 对 若一样的话则将该人的相关信息输出 若不存在 程序会显示 出相关提示信息 第四 代码为 zi getchar if zi 2 return true if zi 1 printf n fengge 该代码也相对比较简单 当用户输入的是 2 是 则程序将退出此 功能 当用户输入的是 1 是 则程序将返回开始重新执行 这里的 分割功能主要是使提示信息显示的时候比较清晰 容易懂 在做这个功能代码的整体思想应该为 首先应该定义一个文件指 针类型 然后在定义两个字符数组 用来存放文件内的信息和用户 输入的信息 因为核对信息的时候从文件的开头开始核对 所以应 该知道什么时候文件内的信息就是最后一个 所以利用 fseek 函数测 29 出文件的末位置 再利用 while 函数进行一一核对 一样是 再利 用 if 语句将此人的相关信息输出 还需要啰嗦一下的是 怎么来知道内容不存在 而输出一个提示 呢 对此我想到的一个方法是 定义一个整数 n 0 然后把它放在 if strcmp one namechina hedui 0 strcmp one nameenglish hedui 0 大括号里 对其进行自加 然后在本函数块的结尾给出一个判断 看 n 0 若成立 则说明 n 没有进行自加 也说明不存在要查找 的信息 就直接输出此信息不存在即可 反之 若 n 0 不成立 则会导致要查找的信息存在 就会使本函数正常结束返回 true 即可 4 5 修改功能修改功能 修改功能 大家通过字面上的意思应该就可以知道 修改已存 在信息 首先我们肯定需要输入名字查找 将该信息显示然后在选 择需要修改的信息 然后在存入文件中 虽然这几步看似简单 但 是他比我们所想的要复杂的多 并且这里的查找功能与上一个小节 的查找实现是不一样的 先来显示一下该功能的界面 通过键盘输入数字 3 回车我们可以得到修改界面 30 在上图中 我们可以看到 当写入 yangguanlin 也可以写杨冠 林 时 回车可以得到这个联系人的信息 下面接着是显示你所要 修改的目录 这个功能块的代码为 bool xiugai system cls FILE file yuansu one max char hedui 30 zi h z int count 0 last ji m 0 n 0 if file fopen D txl lkx ab NULL puts 打开失败 return true printf 输入要修改的名字 输入汉字或者拼音 gets hedui 31 fseek file 0L SEEK END last ftell file rewind file while count last fseek file count SEEK SET fread if strcmp one m namechina hedui 0 strcmp one m nameenglish hedui 0 printf n s one m namechina printf s n n one m nameenglish printf 电话 s n n one m pnumber printf QQ s n n one m qq printf 性别 s n n one m sex printf 出生年月 d 年 d 月 d 日 n one m birth 0 one m birth 1 one m birth 2 找出要修的 就开始修改 printf n printf 选择你要修改的部分 n n printf 1 中文名字 n printf 2 英文名字 n printf 3 电话号码 n printf 4 QQ 号 n printf 5 性别 n printf 6 出身年月 中间以逗号隔开 n printf n 输入数字 zi getchar while h getchar n break switch zi case 1 printf n 请输入中文名字 gets one m namechina break case 2 printf n 请输入英文名字 gets one m nameenglish break case 3 printf n 电话号码 gets one m pnumber break case 4 printf nQQ 号 gets one m qq break 32 case 5 printf n 性别 gets one m sex break case 6 printf n 出身年月 中间以逗号隔开 scanf d d d break n m count count sizeof yuansu fclose file 确认是否修改 if n 0 printf 查找失败 或不存在 n else printf 确定修改 1 确定 2 退出 n z getchar if z 2 return true if z 1 while getchar n break return false 把文件清空 file fopen D txl lkx wb fread one sizeof yuansu 1 file fclose file if file fopen D txl lkx ab NULL wb 先将文件清空在存 puts 打开失败 return true rewind file m 0 count 0 while count last 33 fwrite count count sizeof yuansu m fclose file fengge printf n printf 继续修改还是退出 1 修改 2 退出 n z getchar if z 2 return true if z 1 printf n fengge return false return true 直接看这个函数块的代码 可能很纠结 下面给出这个功能块 的流程图来说明下 34 输入要查找的输入要查找的 对象对象 打开文件 将信息全打开文件 将信息全 部输出到大数组里 部输出到大数组里 然后逐一核对然后逐一核对 有相同信息有相同信息 吗 吗 则输查找失败 提示则输查找失败 提示 是否继续查找 还是是否继续查找 还是 退出退出 否否 是是 输出联系人的信息 并修改 后输出联系人的信息 并修改 后 放回原位置不动 然后就将存放放回原位置不动 然后就将存放 信息的数组放回文件即可信息的数组放回文件即可 存放成功后 最后提示存放成功后 最后提示 是继续修改还是退出是继续修改还是退出 通过这个流程图 大家就可以很好理解这个功能模块了 下面 我们来具体分析这个修改模块的精髓地方 首先我来谈一下我自己刚开始写这个模块的想法 对于修改我 首先想到的事将他查找出来 然后在进行修改 修改后在放回文件 以此来达到修改的目的 可是当我把这个代码写好后进行调试后是 发现用查找功能来进行查找那个修改的联系人 会显示两个 修改 三次的时候 查找就会显示三次 对此才知道 那个想法是无法达 到目的的 修改后的信息再次存入到文件中时 并不会覆盖原有的 内容 只会在后面追加 就无法达到修改的目的 对此又想到另一 种方法 首先定义一个很大结构体数组 本程序的数组大小设置为 1000 这也导致了一个弊端 存放联系人的个数有限 把文件里的 35 信息全部输出来 然后需要修改哪一个就查找到对应的信息 马上 修改 修改完后放回原数组位置 剩下的就是把这些信息放入到文件 中去 如果和刚才一样直接放进去 那么会出现同样的问题 对此 在放入之前需要对文件进行清空 然后存放 这样就可以达到目的 file fopen txl lkx wb fclose file 上面两行代码则可以达到清空作用 wb 同样是以二进制方 式打开 但是他的方式有些不同 打开的时候会把文件里面的内容 清空 在关闭文件 在存放的时候 从新以 ab 方式打开存入即 可 当然写入文件的方式 是在修改后 并不是马上存入文件的 而是采取和添加一样的形式 这里我详细解释一样下为什么要这么 做 我们使用 fopen 来打开问价的时候 一般情况是指在文件的 开始位置 然而向里面存入或读出的时候都会使文件的指向发生偏 移 不知道大家有没有注意到没 在上面的代码中可能有人注意到 rewind 这个函数 这是干什么用的呢 这是可以使文件指向位置 发生变化的 其作用是使其位置指向文件的开始位置 而我关闭文 件在打开从新存入文件也是取得这样类似的效果 当然也有人就纳 闷 直接使用 rewind 不好些 何必写那么多代码 当然我也想这 样 但是使用关闭文件重新打开存入 可以再避免查找遗漏 关闭 后在存入 然后马上执行查找他会从文件的开始位置查找 而不会 36 从上次查找的地方接着向下查找从而导致有些会遗漏 简单用流程图来总结一下上面的表述 将将 txl lkx 文件文件 全写入全写入 one max 根据查找到信息进根据查找到信息进 行修改 修改后放行修改 修改后放 回原数组回原数组 将将 txl lkx 的内的内 容清空容清空 将存放信息的数将存放信息的数 组放入文件即可组放入文件即可 4 6 全部输出功能全部输出功能 在键盘上输入 4 后可以进入全部输出功能 显示界面为 37 如图所示 程序将文件内的所用信息全部输出 然后根据用户的需要可 以查询用户所要查询的信息 此函数的代码为 bool duchu system cls yuansu one 1 FILE file 定义一个文件指正类型 int m 0 int count 0 last if file fopen txl lkx ab NULL 将存储数据的文件打开 printf cannot open file n return false fseek file 0L SEEK END 将文件的光标移至末尾 last ftell file 获取文件的末位置 rewind file while count namechina printf s n n one nameenglish printf 电话 s n n one pnumber printf QQ s n n one qq printf 性别 s n n one sex printf 出生年月 d 年 d 月 d 日 n one birth 0 one birth 1 one birth 2 m fclose file if m 0 printf n 内容为空 n printf n n 按回车键键退出 n return true 该功能可用流程图表示 将更加方便理解 39 打开存储数据的文件打开存储数据的文件 获取文件的末位置获取文件的末位置 将光标移将光标移 至文件的开头至文件的开头 光标是否处于文件光标是否处于文件 的末位置的末位置 将当前要输出信息的字节数赋给将当前要输出信息的字节数赋给 count 将当前的信息全部输出将当前的信息全部输出 在令在令 m 加一加一 M 的值是否为的值是否为 0 当前文件为空当前文件为空 按回车键结束输出功能按回车键结束输出功能 否否 是是 否否 是是 40 在设计此功能的时候 应注意的几点为 第一 代码为 yuansu one 1 FILE file int m 0 int count 0 last if file fopen txl lkx ab NULL printf cannot open file n return false 先定义一个结构体数组 该数组是用来存放文件内将要输出的 信息 然后在利用数组将其输出 然后在定义一个文件指针类型 该指针用来指向存放数据的文件 然后在将存放数据的文件打开 在输出信息前 一定先将文件打开 第二 代码为 fseek file 0L SEEK END last ftell file rewind file 这几行代码虽然很少 但确必不可少 先利用 fseek 函数将文件 的光标移至末位置 然后在将末位置赋给 last last 就作为后面 while 循环的条件 然后记得在将光标移至文件的开头位置 因为要 从开头将信息一一输出 这样才不会漏掉一个 第三 代码为 while count namechina printf s n n one nameenglish printf 电话 s n n one pnumber printf QQ s n n one qq printf 性别 s n n one sex printf 出生年月 d 年 d 月 d 日 n one birth 0 one birth 1 one birth 2 m 这几行代码看似复杂 但其实就是一个简单的 while 循环 当 文件内的光标不在文件的末位置时 将文件内的信息一一输出 知 道光标处于文件的末位置是 文件内的信息也就全部输出了 每输 出一个信息时 令 m 加 1 这样是为了下面的 if 语句 在全部输出以后切记要关闭存储数据文件 第四 代码为 if m 0 printf n 内容为空 n printf n n 按回车键键退出 n return true 这是一个简单的 if 语句 是用来当文件内的数据为空时 用来 提示用户当前文件的数据为空的 这个程序总体来说 设计的时候相对比较的简单 在设计的时候主 要需要注意将文件的末位置搞出来 用来 while 循环的条件 然后 再将文件内的数据一一输出 这样输出的时候才不会漏掉一个文件 内的信息 42 4 7 删除功能删除功能 在写这个程序的时候 并没有用到任何链表的知识 在写这个 功能的时候 我想没有链表也无所谓吧 最后程序写成功的时候 发现其实在删除某一个信息的时候 链表的方便真是无与伦比了 太强大了 虽然我没有用到链表把删除功能给做出来了 但是却存 在很大的遗憾 这里先大致说一下 待会就详说 首先我满来看看删除更能的界面 有上图可以看出 先查找然后在进行删除 并提示是 否删除 在本程序里面 我事先保存了两个联系人 现在 删除一个那么在 txl lkx 文件里面应该只保存了一个联系人 信息 对吧 用全部输出功能 也只能输出一个 下面我 们来看如下的截图 43 由上信息我们可以看出 虽然把信息给删除了 可是 在在 txl lkx 里面还是占据了内存 并以空信息的方式输出 了 倘若是链表的话就不会出现这样的缺陷了 但是如今 的技术发达 内存都很大 所以这些问题也不算是很大的 问题 下面我们来看看这个功能的代码吧 bool shanchu system cls FILE file yuansu one max char hedui 30 zi h z int count 0 last ji m 0 n 0 if file fopen txl lkx ab NULL puts 打开失败 return true printf 输入要删除的名字 输入汉字或者拼音 gets hedui 44 fseek file 0L SEEK END last ftell file rewind file while count last fseek file count SEEK SET fread if strcmp one m namechina hedui 0 strcmp one m nameenglish hedui 0 printf n s one m namechina printf s n n one m nameenglish printf 电话 s n n one m pnumber printf QQ s n n one m qq printf 性别 s n n one m sex printf 出生年月 d 年 d 月 d 日 n one m birth 0 one m birth 1 one m birth 2 n ji m m count count sizeof yuansu fclose file if n 0 printf 查找失败 或不存在 n else printf n 确定删除 1 确定 2 退出 n z getchar if z 2 return true if z 1 while getchar n break return false 移动数组的元素进行删除 while ji m one ji one ji 1 ji 45 file fopen txl lkx wb fread one sizeof yuansu 1 file fclose file if file fopen txl lkx ab NULL wb 先将文件清空在存入 puts 打开失败 return true rewind file m 0 count 0 while count last fwrite count count sizeof yuansu m fclose file fengge printf n printf 继续删除还是退出 1 删除 2 退出 n z getchar if z 2 return true if z 1 printf n fengge return false 用表格的形式来演示本功能的原理 下列是演示删除第二个联 系人 信息信息 1信息信息 2信息信息 3 信息信息 n 信息信息 1信息信息 3 信息信息 n信息信息 n 1 46 数组一旦确定后并放入了数据就无法修改数组的大小 这大家 都知道的 所以从上图大家可以看出 删除一个信息后 必然会在 后面引入一个数组 才能保证数组大小不变 也就会出现上图中输 出空白信息 就是这样造成的 所以在此建议大家以后写这样的程 序时 就把链表的知识引用到里面去吧 其他的相信大家也都看得 懂 我也不多啰嗦了 下面简单介绍下格式化和退出功能 4 8 格式化和退出功能格式化和退出功能 格式化功能 这连个功能比较简单所以我就放在一起讲 首先 来讲讲格式化功能 在文件管理这一章里面 我们都学过打开文件 以何种方式打开 而本功能就是用到这点知识 file fopen txl lkx wb 才用 wb 的形式打开 二进制方式打开 在打开的时候就 把文件给清空了 下面来给出代码 bool geshihua system cls FILE file yuansu one 1 char z printf 确定格式化 1 确定 2 退出 n z getchar if z 2 return true if z 1 if file fopen txl lkx wb NULL puts 打开失败 return true 47 fread one sizeof yuansu 1 file fclose file puts 格式化成功 system pause return true 退出功能 上面已经介绍过 主函数里面有个死循环 也就是 不会终止的循环 所以如果不出意外的话 程序会无休止的循环下 去 对此可以使用 exit 0 函数来结束程序 从而退出 下面给出代码 bool tuichu exit 0 第五章第五章 总结总结 在本程序的设计开始时候 由于是第一次写 所以许多准备工 作都做得不足 到时再此程序中有许多地方不够严谨 希望可以谅 解 现在我总体来说说本程序 本程序主要是建立一个二进制文件 然后对此文件进行一系列 操作 比如 对此文件的数据进行查找 修改 添加 输出 存入 然后在对此文件设计一个加密功能 在用分割功能对输出的数据和 对用户的提示信息进行分割 使信息更加清晰 使用户更加容易懂 设计者的用意 48 5 1 C 语言总结语言总结 此程序用了 C 语言的大量知识 第一 结构体 在程序开头需要定义一个结构体 结构体内容包括 姓名 中文和 英文 性别 电话号 QQ 号 出身年月日 建立一个结构体的目 的是在对文件进行操作时 方便对数据进行处理 在 C 语言中 结 构体是不同数据类型的集合 所以 避免了对信息的批量定义 方 便简单 在此程序中 涉及到对结构体变量的引用 结构体成员的表示方法为 结构体变量名 成员名 其中 是成员运算符 用于连接结构体类型 变量名和成员名 它在所用运算符中的优先级最高 因此把 结构 体变量名 成员名 作为一个整体来对待 且整体的数据类型与结构 体中该成员的数据类型相同 此程序还涉及到对结构体变量
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 乐理考试题及答案小学
- 消防安全生产人考试题库及答案解析
- 矿山电工考试题及答案
- 课件显示不完整问题
- 教师招聘之《小学教师招聘》考前自测高频考点模拟试题及完整答案详解(典优)
- 课件时间修改
- 铝及铝合金熔铸工晋升考核试卷及答案
- 2025年中国纸浆模包装制品数据监测报告
- 轻冶沉降工技能操作考核试卷及答案
- 经济政治考试题及答案
- 朝阳河流域生态修复综合治理工程环评报告
- 2025年汽车租赁公司车辆托管及运营管理合同
- 2024新版2025秋教科版科学二年级上册全册教案教学设计
- (2025秋新版)人教版八年级历史上册全册教案
- 企业向个人还款合同范本
- 钢模板安全知识培训课件
- 2025-2026学年人民版小学劳动技术六年级上册教学计划及进度表
- 新学期三年级班主任工作计划(16篇)
- 接种疫苗预防流感课件
- 游戏体验寻规律(教学设计)-2024-2025学年人教版(2024)小学信息技术五年级全一册
- 基于plc的恒压供水控制系统设计
评论
0/150
提交评论