《C语言课程设计报告 .docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告 .docx(51页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、精品名师归纳总结课程名称 运算机高级语言课程设计(C)老师姓名刘 刚本科生姓名郭 勇 权本科生学号20211003468本科生专业机械设计制造及其自动化所在院系机 电 学 院类别 :C. 本科生日期 :2021.7.11可编辑资料 - - - 欢迎下载精品名师归纳总结课程设计评语对课程论文的评语 :平常成果:课程论文成果:总 成 绩:评阅人签名:注: 1、无评阅人签名成果无效。2、必需用钢笔或圆珠笔批阅,用铅笔阅卷无效。3 、 如 有 平 时 成 绩 , 必 须 在 上 面 评 分 表 中 标 出 , 并 计 算 入 总 成 绩 .可编辑资料 - - - 欢迎下载精品名师归纳总结目 录1题目要
2、求.12需求分析.13总体设计.14详细设计.25上机操作.236总结287致谢28参考文献29可编辑资料 - - - 欢迎下载精品名师归纳总结1. 题目要求模拟手机通信录治理系统,实现对手机中的通信录进行治理 .功能要求如下:( 1)查看功能:选择此功能时,列出以下 3 类选择 .办公类 . 个人类 . 商务类 .当选中某类时,显示出此类全部数据中的姓名、电话号码和电子邮件 .( 2)增加功能:能录入新数据 .一个结点包括:姓名、电话号码、分类(办公类、个人类、商务类)、电子邮件 .例如:杨春 135896664454 商务类 chuny当录入了重复的姓名和电话号码时,就提示数据录入重复并取
3、消录入。当通信录中超过15 条信息时,储存空间已满,不能再录入新数据。录入的新数据能按递增的次序自动进行条目编号 .( 3)修改功能:选中某个人姓名时,可对此人的相应数据进行修改.( 4)删除功能:选中某个人的姓名时,可对此人的相应数据进行删除,并自动调整后续条目的编号 .2. 需求分析依据题目要求,由于联系人信息时存放在文件中,所以应供应文件的输入、输出等操作。在程序中需要查看联系人信息,应供应显示、查看功能。要实现修改和删除联系人功能,所以应供应对文件的修改和删除操作 .3. 总体设计以下分析整个系统,依据上面的需求分析,可将这个系统的设计分为四大模块(如图一):可编辑资料 - - - 欢
4、迎下载精品名师归纳总结图一 系统功能模块图4. 详细设计【详细设计】1. 主函数程序main/*主函数 */menu 。2. 主菜单主菜单函数供应用户对系统功能的选择,包括浏览联系人、增加联系人、修改联系人、删除联系人 .该函数的流程图如图二所示.程序如下 .开头显示一系列功能选项输入 n,判定 n 是否是 1-4?Y依据 n 的值调用各功能模块函数可编辑资料 - - - 欢迎下载精品名师归纳总结终止图二 主菜单流程图 程序 void menu/*菜单函数 */int n=0,w1 。doputstt*主菜单*nn。putstttt1.查看联系人 。putstttt2.增加联系人 。putst
5、ttt3.修改联系人信息 。putstttt4.删除联系人 。putsnntt*n。printf 请选择 1-4: bb 。scanf%d,&n 。ifn4可编辑资料 - - - 欢迎下载精品名师归纳总结elsew1=1 。getchar。w1=0 。可编辑资料 - - - 欢迎下载精品名师归纳总结whilew1=1。switchncase 1:browse。 break。/* 浏览联系人模块 */ case 2:add。break。/* 增加联系人模块 */ case 3:modify 。 break。/* 修改联系人模块 */ case 4:del。 break。/* 删除联系人模块 */
6、3. 数据结构设计各联系人信息包括有姓名、电话号码、联系人类型、电子邮件.可以使用结构体数组,就姓名、电话、类型和电子邮件作为结构体成员.可编辑资料 - - - 欢迎下载精品名师归纳总结struct member/* 联系人结构体 */char name20 。/* 联系人姓名 */ char tel11 。/* 联系人电话 */int type 。/* 联系人类型: 1 为办公类。 2 为个人类。 3 为商务类 */char email30 。/* 联系人电子邮件 */memN 。/*N 为全局变量,表示能够储存的联系人数量*/4. 浏览联系人模块需求分析 该模块的功能是使用户可以浏览或者分
7、类浏览各联系人信息.如图三所示,当用户输入1、2、3、 4 时,分别显示办公类联系人、个人类联系人、商务类联系人和全部联系人.图三 浏览联系人模块流程图程序void browse/*浏览联系人函数 */int m,n=0,w1 。m=load 。doputsnntt*查询联系人*。putstttt1.查询办公类联系人 。/* 查询办公类联系人*/putstttt2.查询个人类联系人 。/* 查询个人类联系人*/putstttt3.查询商务类联系人 。/* 查询商务类联系人*/putstttt4.查询全部联系人 。/* 查询全部联系人 */ putstttt5.返回主菜单 。/* 返回菜单 */
8、printf 请键入数字 1-5 选择 : bb 。可编辑资料 - - - 欢迎下载精品名师归纳总结scanf%d,&n 。ifn5可编辑资料 - - - 欢迎下载精品名师归纳总结elsew1=1 。getchar。w1=0 。可编辑资料 - - - 欢迎下载精品名师归纳总结whilew1=1。ifn=1printf_clem 。/* 显示办公类联系人*/ putsn 信息已显示,按任意键返回菜单n 。systempause 。/* 暂停系统工作 */ getchar。menu。else ifn=2printf_perm 。/* 显示个人类联系人*/ putsn 信息已显示,按任意键返回菜单n
9、 。systempause 。/* 暂停系统工作 */ getchar。menu。else ifn=3printf_comm 。/* 显示商务类联系人*/ putsn 信息已显示,按任意键返回菜单n 。systempause 。/* 暂停系统工作 */ getchar。menu。else ifn=4可编辑资料 - - - 欢迎下载精品名师归纳总结elseprintf_allm 。/* 显示商务类联系人 */ putsn 信息已显示,按任意键返回菜单n 。systempause 。/* 暂停系统工作 */ getchar。menu。可编辑资料 - - - 欢迎下载精品名师归纳总结menu。5.
10、增加联系人模块 需求分析 该模块的功能是使用户实现增加新联系人的功能,从键盘输入新联系人信息并加入到原文件中 .该模块流程图如图四所示.程序 void addint m,w1,n,t,w2,i,j 。/*m 为现有联系人数量 */m=load 。/* 加载联系人信息,并将联系人数量输入m*/ ifm=N开头运行 m=load 函数,加载现有联系人信息Y判定 m 是否小于 N? N输入联系人姓名、电话、类型、电子N是否储存?Y输出:储存空间已满,无法输入运行saveint 函数,将信息储存至文件中返回至主菜单终止图四 增加联系人模块流程图可编辑资料 - - - 欢迎下载精品名师归纳总结print
11、f 储存空间不足! n 。printf 按任意键返回菜单.。getchar。systempause 。menu。可编辑资料 - - - 欢迎下载精品名师归纳总结elseputst 请输入联系人姓名: 。 /* 输入联系人姓名 */ scanf%s,memm.name 。/* 将联系人姓名储存至结构体*/ putst 请输入联系人电话号码:。scanf%s,memm.tel 。do/* 选择联系人类型语句 */可编辑资料 - - - 欢迎下载精品名师归纳总结putsnnnnn:nnn请选择联系人类型。puts1, 办公类 t 。puts2, 个人类 t 。puts3. 商务类 t 。puts 请
12、键入数字选择联系人类型: bb 。scanf%d,&n 。ifn.=1&n.=2&n.=3可编辑资料 - - - 欢迎下载精品名师归纳总结elsew1=1 。getchar。w1=0 。可编辑资料 - - - 欢迎下载精品名师归纳总结whilew1=1。switchn/* 将联系人类型信息存入结构体中*/case 1:memm.type=1 。break。case 2:memm.type=2 。break。case 3:memm.type=3 。break。putst 请输入联系人电子邮件的址: 。scanf%s,memm.email 。doputs 确定储存 .1.是 2.否 bb 。sca
13、nf%d,&t 。可编辑资料 - - - 欢迎下载精品名师归纳总结ift2可编辑资料 - - - 欢迎下载精品名师归纳总结elsew2=1 。getchar。w2=0 。可编辑资料 - - - 欢迎下载精品名师归纳总结whilew2=1。ift=1fori=0 。 im 。 i+ifstrcmpmemi.name,memm.name=0可编辑资料 - - - 欢迎下载精品名师归纳总结单. 。puts 姓名已存在!不能储备,请按任意键返回菜forj=0 。j20 。j+memm.namej=0 。forj=0 。j11 。j+memm.telj=0 。memm.type=0 。fori=0 。i
14、30 。i+memm.emailj=0。systempause 。menu。可编辑资料 - - - 欢迎下载精品名师归纳总结ifstrcmpmemi.tel,memm.tel=0可编辑资料 - - - 欢迎下载精品名师归纳总结单. 。puts 姓名已存在!不能储备,请按任意键返回菜forj=0 。j20 。j+memm.namej=0 。forj=0 。j11 。j+memm.telj=0 。memm.type=0 。fori=0 。i30 。i+memm.emailj=0。systempause 。menu。可编辑资料 - - - 欢迎下载精品名师归纳总结savem。/* 储存联系人信息至文
15、本文档*/可编辑资料 - - - 欢迎下载精品名师归纳总结puts 信息已储备 .n 。puts 以下是全部信 :n 。printf_allm+1 。getchar。puts 请按任意键返回菜单 。systempause 。menu。ift=2/* 假如用户不储存,就将刚刚存入结构体中的数据删除*/fori=0 。 i20 。i+memm.namei=0 。fori=0 。 i11。i+memm.teli=0 。memm.type=0 。fori=0 。 i30 。i+memm.emaili=0。puts 信息储备失败 .n 。puts: 以下是全部信息 n 。printf_allm 。get
16、char。puts 请按任意键返回菜单 。systempause 。menu。6. 修改联系人模块 需求分析 该模块的功能的功能是显示全部联系人信息.显示完后,用户输入要修改联系人的序号,系统依据用户输入的序号显示用户选择的联系人,并提示用户需要修改哪部分信息,是姓名、电话、类型仍是电子邮箱.依据用户的选择修改相应的信息. 程序 void modifyint m,n,t,w1,w2 。m=load 。puts 以下是全部信息 :t 。printf_allm 。/* 显示全部信息,以便用户确认所要修改的信息*/ doputs 请输入您想修改的联系人数字代号,或按0 退出: 。可编辑资料 - -
17、- 欢迎下载精品名师归纳总结scanf%d,&n 。ifnm可编辑资料 - - - 欢迎下载精品名师归纳总结elsew1=1 。getchar。开头w1=0 。可编辑资料 - - - 欢迎下载精品名师归纳总结whilew1=1。ifn=0menu。printf_onen 。do运行 m=load ()函数, 加载现有联系人信息, 并显示全部用户信息可编辑资料 - - - 欢迎下载精品名师归纳总结putstttt1,姓名 。putstttt2.电话号码 。putstttt3.类型 。putstttt4.电子邮件 。putstttt0.退出 。输入 n判定 n 是否在N 015 中可编辑资料 -
18、- - 欢迎下载精品名师归纳总结Yputs 请输入您想修改的类型数字代号,或按0 退出: 。scanf%d,&t 。依据 n 的值调用相可编辑资料 - - - 欢迎下载精品名师归纳总结ift4应功能模块可编辑资料 - - - 欢迎下载精品名师归纳总结elsew2=1 。getchar。w2=N0 。n 是否等于 0Y可编辑资料 - - - 欢迎下载精品名师归纳总结whilew2=1。输入 t可编辑资料 - - - 欢迎下载精品名师归纳总结N判定 t 是否在04 中Y调用相应功能模块可编辑资料 - - - 欢迎下载精品名师归纳总结返回至主菜单终止图五 修改联系人模块流程图ift=1modify_
19、namen,m 。/* 修改姓名函数, n 为要修改的联系人编号。 m 为总联系人数 */ift=2modify_teln,m 。/*修改电话函数, n 为要修改的联系人编号。 m 为总联系人数 */ift=3modify_typen,m 。/*修改类型函数, n 为要修改的联系人编号。 m 为总联系人数 */ift=4modify_emailn,m 。/*修改 Email 函数, n 为要修改的联系人编号。 m 为总联系人数 */ift=0menu。7. 删除联系人模块 需求分析 该模块第一显示现有全部联系人,显示完成后,用户输入要删除的联系人序号.删除方式是将数据从结构体中删除,然后将后面
20、的记录向前移.删除之后将记录储存至文件中. 程序 void delint m,n,w1,w2,t,i 。m=load 。puts 以下是全部信息 :t 。printf_allm 。doputs 请输入您想要删除的联系人数字代号: bb 。scanf%d,&n 。ifnmw1=1 。可编辑资料 - - - 欢迎下载精品名师归纳总结elsegetchar。w1=0 。可编辑资料 - - - 欢迎下载精品名师归纳总结whilew1=1。do/* 用 do while 语句把握用户的输入,使用户只能输入1 或者 2*/puts 您确定要删除此联系人: 。printf_onen 。putsn 您确定要删
21、除吗?1,是 2,否 。scanf%d,&t 。开头运行 m=load 。加载现有联系人信息。并显示全部联系人信输入要删除的联系人序号n判定 0 n m 是否成立NY显示用户要删除的联系人的全部信息用户是否确认删除NY删除数据,并运行move 函数,将删除位置后面的数据运行 save 函数,将信息储存至文件中可编辑资料 - - - 欢迎下载精品名师归纳总结返回至主菜单终止图六 删除联系人模块ift2可编辑资料 - - - 欢迎下载精品名师归纳总结elsew2=1 。getchar。w2=0 。可编辑资料 - - - 欢迎下载精品名师归纳总结whilew2=1。ift=2可编辑资料 - - -
22、欢迎下载精品名师归纳总结ift=1puts 信息已保留,请按任意键反回菜单n 。getchar。systempause 。menu。fori=0 。 i20 。i+memn-1.namei=0 。fori=0 。 i11。i+memn-1.teli=0。memn-1.type=0 。fori=0 。 i30 。i+memn-1.emaili=0。moven,m 。puts 信息已删除,请按任意键反回菜单n 。getchar。systempause 。menu。可编辑资料 - - - 欢迎下载精品名师归纳总结8. 公共函数以下为各模块中可能用到的一些公共函数.( 1)加载联系人信息函数:int
23、load可编辑资料 - - - 欢迎下载精品名师归纳总结说明该函数用于将文件中的数据加载至结构体中,并且可以返回现有联系人的数目. 程序int loadFILE *fp 。int i,j 。iffp=fopenE:vcprogrammesmembers.txt,rb=NULL/*以只读方式打开一个二进制文件 */printfn不能找到信息 。可编辑资料 - - - 欢迎下载精品名师归纳总结结构体中 */fori=0 。.feoffp&iN。i+fread&memi,sizeofstructmember,1,fp 。 /* 将文件中的数据加载至fclosefp 。/* 关闭文件 */forj=0
24、 。 strcmpmemj.name,0.=0&j0 时,第一进入 save_1 函数,新建一个文件, 同时把 mem0 的数据储存。然后进入 save_2 函数,将 mem1 到 memm 的数据追加至文件中 */save_2m。该包含两个子函数: void save_1和 void save_2int m,当结构体中只有一个元素,即m=0时,只执行第一个函数,新建一个文件并将数据存入文件中。假如结构体中多于一个元素, 即 m0 时,第一执行第一个函数新建一个文件,然后执行其次个函数,将结构体中下标大于 0 的数据存入文件中 .可编辑资料 - - - 欢迎下载精品名师归纳总结程序void s
25、ave_1FILE *fp 。iffp=fopenE:vc programmesmembers.txt,wb=NULLprintfn不能找到信息 。可编辑资料 - - - 欢迎下载精品名师归纳总结程序fwrite&mem0,sizeofstruct member,1,fp。fclosefp 。可编辑资料 - - - 欢迎下载精品名师归纳总结void save_2int mint i 。FILE *fp 。iffp=fopenE:vc programmesmembers.txt,ab=NULLprintfn不能找到信息 。fori=1 。i=m 。i+fwrite&memi,sizeofstru
26、ct member,1,fp。fclosefp 。( 3)显示全部联系人函数: void printf_allint m说明形参 m 表示现有联系人的数目.用以把握输出联系人的数量.该函数用于输出全部的联系人信息.程序void printf_allint m可编辑资料 - - - 欢迎下载精品名师归纳总结n。int i 。printfnntt以下是全部联系人: 。printfnnNO.姓名电话号码类型电子邮件fori=0 。im 。i+/* 判定联系人类别并输出*/可编辑资料 - - - 欢迎下载精品名师归纳总结ifmemi.type=1printf%2d%-20s %-11s办公类%- 30
27、sn,i+1,memi.name,memi.tel,memi.email。ifmemi.type=2可编辑资料 - - - 欢迎下载精品名师归纳总结printf%2d%-20s%-11s个 人 类%-30sn,i+1,memi.name,memi.tel,memi.email。ifmemi.type=3printf%2d%-20s%-11s商 务 类%-30sn,i+1,memi.name,memi.tel,memi.email。( 4)显示办公类联系人函数:void printf_cleint m说明形参 m 表示现有联系人数目 .用以把握循环终点.该函数用于输出全部办公类联系人信息. 程序
28、void printf_cleint mint i 。printfnntt办公类联系人 : 。printfnn姓名电话号码类型电子邮件n 。fori=0 。im 。i+ifmemi.type=1/*判定联系人是否属于办公类*/printf%-20s%-11s办 公 类%- 30sn,memi.name,memi.tel,memi.email。( 5) 显示个人类联系人函数:void printf_perint m 说明形参 m 表示现有联系人数目 .用以把握循环终点.该函数用于输出全部个人联系人信息.程序void printf_perint mint i 。printfnntt个人类联系人 :
29、 。printfnn姓名电话号码类型电子邮件n 。fori=0 。im 。i+ifmemi.type=2/*判定联系人是否属于个人类*/printf%-20s%-11s个 人 类%- 30sn,memi.name,memi.tel,memi.email。( 6) 显示商务类联系人函数:void printf_comint m 说明形参 m 表示现有联系人数目 .用以把握循环终点.该函数用于输出全部商务类联系人信息.程序void printf_comint m可编辑资料 - - - 欢迎下载精品名师归纳总结int i 。printfnntt商务类联系人 : 。printfnn姓名电话号码类型电子
30、邮件n 。fori=0 。im 。i+ifmemi.type=3/*判定联系人是否属于商务类*/printf%-20s%-11s商 务 类%- 30sn,memi.name,memi.tel,memi.email。( 7) 显示某一联系人函数:void printf_oneint m 说明形参 m 表示现有联系人数目 .用以把握循环终点.该函数用于输出某一指定联系人信息.程序void printf_oneint mprintf 姓名电话号码类型电子邮件n 。ifmemm-1.type=1/*三个 if 语句判定联系人类型 */printf%-20s %-11s办公类%-30sn,memm-1.
31、name,memm- 1.tel,memm-1.email 。ifmemm-1.type=2printf%-20s%-11s个人类%-30sn,memm-1.name,memm- 1.tel,memm-1.email 。ifmemm-1.type=3printf%-20s%-11s商务类%-30sn,memm-1.name,memm- 1.tel,memm-1.email 。( 8) 修改姓名函数: void modify_nameint n,int m 说明该函数用于修改联系人姓名.形参 n 为用户输入的要修改的联系人序号。m 表示现有联系人数量.程序void modify_nameint n,int mchar mod_name20 。/* 用于暂存用户输入的更换后的联系人姓名*/ int i,t,w1 。puts 请输入新姓名 : 。scanf%s,mod_name 。doputs 确定要储备吗 .1.是 2.否 bb 。scanf%d,&t 。ift2可编辑资料 - - - 欢迎下载精品名师归纳总结elsew1=1 。getchar。w1=0 。可编辑资料 - - - 欢迎下载精品名师归纳总结wh
限制150内