收藏 分销(赏)

C语言qq好友管理系统课程设计报告.doc

上传人:二*** 文档编号:4535416 上传时间:2024-09-27 格式:DOC 页数:22 大小:200KB 下载积分:5 金币
下载 相关 举报
C语言qq好友管理系统课程设计报告.doc_第1页
第1页 / 共22页
本文档共22页,全文阅读请下载到手机保存,查看更方便
资源描述
. . 课 程 设 计 QQ好友管理系统 课程设计名称: 数据构造课程设计 专 业 班 级 : 16机电二班 小组成员 :王守锋 石松轶 陆永斌 智斌 浩明 指 导 教 师 : 徐丽萍 课程设计时间: 2021年5月30日 计算机应用技术 专业课程设计任务书 学生XX 专业班级 学号 题 目 QQ好友讯录管理系统 课题性质 工程设计 课题来源 自拟课题 指导教师 同组XX 无 主要容 运用C语言和数据构造知识设计QQ好友管理系统 QQ不仅仅是个社交平台,还应是个工作平台,将通讯录保存在QQ用时更加方便。 通过QQ可以直接呼叫联系人。 任务要求 1 添加好友信息 2 显示好友信息 3 删除好友信息 4 更改好友信息 5 查询好友信息 参考文献 ?数据构造〔C语言版〕?严蔚敏 清华大学 ?C语言程序设计?〔第三版〕谭浩强 清华大学 审查意见 指导教师签字: 教研室主任签字: 年 月 日 . .word.zl. . . 目 录 1 需求分析1 2概要设计1 3 详细设计1 4 运行环境1 5 开发工具和编程语言1 6 程序设计1 7 调试分析1 8 测试结果1 9参考文献1 10心得体会1 11 成绩评价表1 1 需求分析 QQ的普及度越来越高,其功能也需要加强。将通讯录的功能添加到QQ好友管理系统中,使其在聊天中就可以呼叫联系人,并且将通讯录的信息可以QQ中长期保存,在无手机的情况下也查找好友手机号。从而使QQ功能更加完善,使用起来更加方便和快捷。 2概要设计 〔1〕实现功能: 菜 单 推出系统 查找好友 删除好友 显示好友 添加好友 修改信息 〔2〕序中各函数程简单说明见下: 返回值 函数名 参数表 函数说明 提供客户 int main void 主函数 是 void menu void 显示功能 是 int reads Haoyou stu[N] 读取 否 void save haoyou stu[N],n 保存 是 void add void 添加 是 void del void 删除 否 void query void 查找 是 void chang void 修改 否 void show void 信息显示 是 (3) 对程序中的各个函数功能的描述 [1]主函数main 系统开场、完毕界面的显示、各个功能函数的调用、转换以及参数的传递、定义QQ头结点并传递给各个功能函数 [2]功能显示menu 介绍程序的功能,按那些键实现其特点功能。 [3]读取函数reads 读取用户输入的信息,将其按线性表的形式呢存储, 联系人的编号为其头结点。 [4]保存函数save 将输入的信息保存,假设失败返回保持失败。 [5]添加联系人函数add 增加联系人到QQ通讯录的尾部,返回增加是否成功。 [6]删除函数del 按照用户指定的联系人编号删除相应联系人信息,返回删除是否成功。 [7]查找函数query 按照用户提供的联系人XX查找第一个合法XX对应的信息,查找成 功那么显示信息,失败那么提示无此联系人,返回是否查找到。 [8]修改函数chang 按照用户提供的联系人XX修改联系人所有信息,返回修改是否 成功。 [9]显示信息函数show 显示当前通讯录中所有联系人的信息,假设为空通讯录,那么显示无联 系人。 主函数main 3 详细设计 显示功能show 修改功能chang 查找功能query 删除功能del 添加功能add 保存功能save 读取功能reads 显示功能menu 4 运行环境 1) 软件环境 操作系统:Windows7,Windows8 2) 硬件环境 处理器:Intel Pentium 166MX 或更高 存:32MB以上 硬盘空间:1GB以上 显卡:SVGA 显示适配 5 开发工具和编程语言 Microsoft visual C++ C语言 6 程序设计 #include<stdio.h> #include<string.h> #include<stdlib.h> #include"conio.h"/*conio.h主要做图形图像,例如说设置背风光的函数,字体颜色的函数、输出格式的函数等*/ #define N 30 typedef struct haoyou/*typedef是类型定义的意思。typedef struct 是为了使用这个构造体方便。 具体区别在于:假设struct node {}这样来定义构造体的话。在申请node 的变量时,需要这样写,struct node n;假设用typedef,可以这样写,typedef struct node{}NODE; 。在申请变量时就可以这样写,NODE n; 区别就在于使用时,是否可以省去struct这个关键字*/ { char num[20]; char name[10]; char adress[50]; char QQ[15]; char tel[15]; }haoyou; void menu(); int reads(haoyou stu[N]); //读取 void save(haoyou stu[N],int n); //保存 void add(); //添加 void del(); //删除 void query(); //查询 void change(); //修改 void show(); //信息显示 void main() { int n; while(1)/*while(1)其中1代表一个常量表达式,他永远不会等于0。所以,循环会一直执行下去。除非你设置break等类似的跳出循环语句循环才会中止*/ { menu(); printf("→→→→→→→→→→→→→→→→→→→→→\n"); printf(" 您现在看到的是QQ中的通讯录 \n"); printf("←←←←←←←←←←←←←←←←←←←←←\n"); printf("→→→→→→→→→→→→→→→→→→→→→\n"); printf(" 请输入您要选择的操作编号,按回车键确认:\n"); printf("←←←←←←←←←←←←←←←←←←←←←\n"); scanf("%d",&n); switch(n) { case 1: add();break; case 2: show();break; case 3: del();break; case 4: change();break; case 5: query();break; case 0: exit(0); default: printf("***********************************\n"); printf(" 输入错误,请输入列表中存在的编号 \n "); printf("***********************************\n"); } printf("*************\n"); printf(" 按任意键返回\n"); printf("*************\n"); getch(); /*getch();或ch=getch();   用getch();会等待你按下任意键,再继续执行下面的语句;用ch=getch();会等待你按下任意键之后,把该键字符所对应的ASCII码赋给ch,再执行下面的语句。*/ } } void menu() { system("color 1f");//颜色 system("cls");//清屏 printf("***********xxx好友信息管理系统*******************\n"); printf("** 1 添加好友信息 **\n"); printf("** 2 显示好友信息 **\n"); printf("** 3 删除好友信息 **\n"); printf("** 4 更改好友信息 **\n"); printf("** 5 查询好友信息 **\n"); printf("** 0 退出 **\n"); printf("*******************************************************\n"); } int reads(haoyou stu[N]) // 读取好友文件中的容 { FILE *fp; int i=0; if((fp=fopen("d:\\haoyou.txt","r"))==NULL) { printf("文件翻开失败!\n"); return 0; } else { for(i=0;!feof(fp);i++) fscanf(fp,"%s %s %s %s %s\n",stu[i].num,stu[i].name,stu[i].adress,stu[i].QQ,stu[i].tel); } fclose(fp); return i; } void save(haoyou stu[N],int n) // 好友信息改变后更新文件 { FILE *fp; int i=0; if((fp=fopen("d:\\haoyou.txt","w"))==NULL) { printf("文件翻开失败!\n"); return ; } else { for(i=0;i<n;i++) fprintf(fp,"%s %s %s %s %s\n",stu[i].num,stu[i].name,stu[i].adress,stu[i].QQ,stu[i].tel); } fclose(fp); } void add()/*添加好友信息*/ { FILE *fp; int n,i; haoyou stu; if((fp=fopen("d:\\haoyou.txt","a"))==NULL) /*如果文件已经存在,可以追加好友信息*/ { if((fp=fopen("d:\\haoyou.txt","w"))==NULL) /* 文件不存在时,创立新文件,输入好友信息*/ { printf("文件翻开失败!\n"); return; } } printf("**************************************\n"); printf(" 请输入要添加的好友数量,按回车键确认:\n"); printf("**************************************\n"); scanf("%d",&n); for(i=1;i<=n;i++) { printf("*****************************************************\n"); printf(" 请输入第%d个好友的编号、XX,用空格分开,并按回车键确认:\n",i); printf("*******************************************************\n"); scanf("%s%s",stu.num,stu.name); printf("******************************************************\n"); printf(" 请输入第%d个好友的地址、QQ号和,用空格分开,并按回车键确认:\n",i); printf("*****************************************************\n"); scanf("%s%s%s",stu.adress,stu.QQ,stu.tel); fprintf(fp,"%s %s %s %s %s\n",stu.num,stu.name,stu.adress,stu.QQ,stu.tel); } fclose(fp); } void show() // 好友信息显示函数 { haoyou stu[N]; int i,n; n=reads(stu); printf("*************所有的好友信息如下*******************\n\n"); printf(" 序号 编号 XX 地址 QQ号 \n"); printf("*******************************************************\n"); for(i=0;i<n;i++) printf("\n%3d %s %s %s %s %s\n",i+1,stu[i].num,stu[i].name,stu[i].adress,stu[i].QQ,stu[i].tel); printf("*******************************************************\n"); getch(); } void del() /*好友信息删除函数*/ { haoyou stu[N]; char number[20]; int n,i,j; n=reads(stu); printf("********************************************\n"); printf("请输入要删除信息的好友编号,按回车键确认:\n"); printf("********************************************\n"); scanf("%s",number); for(i=0;i<n;i++) if(strcmp(number,stu[i].num)==0) break; if(i>=n) { printf("没有找到该好友信息!\n"); return; } else { for(j=i+1;j<n;j++) stu[j-1]=stu[j]; } save(stu,n-1); printf("删除成功!\n"); } void change() //好友信息更改 { haoyou stu[N]; int n,i; char number[20]; printf("******************************************\n"); printf("请输入要更改信息的好友编号,按回车键确认:\n"); printf("******************************************\n"); scanf("%s",number); n=reads(stu); for(i=0;i<n;i++) if(strcmp(number,stu[i].num)==0) break; if(i>=n) { printf("无此好友信息!"); return; } printf("******************************************************\n"); printf("请输入更改后好友的编号,XX,地址,QQ号,,按回车键确认:\n"); printf("******************************************************\n"); scanf("%s%s%s%s%s",stu[i].num,stu[i].name,stu[i].adress,stu[i].QQ,stu[i].tel); save(stu,n); } void query() // 按编号对好友信息查询 { haoyou stu[N]; char number[20]; int i,n; n=reads(stu); printf("****************************************\n"); printf("请输入待查询的好友编号,按回车键确认:\n"); printf("****************************************\n"); scanf("%s",number); for(i=0;i<n;i++) if(strcmp(number,stu[i].num)==0) break; if(i>=n) { printf("没有找到该好友信息!\n"); return; } else { printf("******************************************************\n"); printf(" 编号 XX 地址 QQ号 \n"); printf("*******************************************************\n"); printf("\n%s %s %s %s %s\n",stu[i].num,stu[i].name,stu[i].adress,stu[i].QQ,stu[i].tel); printf("****************************************************\n"); } } 7 调试分析 1 在测试删除QQ联系人函数时发现无论通讯录中现存多少条记录只 要删除一条测试中的问题举例:之后,通讯录就会被清空,经过检查发现是删除函数中的条件控制设置有错,导致只要一删除一个联系人就会事头结点与尾结点指向同一个,导致再显示联系人时显示无联系人。经过调整已 处理好。算法改进设想举例: 2 程序中还有很多地方不能很好的模拟QQ通讯录的功能,比方在增肌联系人时,不管原来新联系人XX是否已存在,都会被参加通讯录,这样一来就有可能重复记录。此外在查找联系人时只要查找到一个合法记录就会中断查找操作,如此有可能导致记录的漏查。结合以上两点应优化增加查找联系人算法,在存入之间进展防重判断。 8 测试结果 1. 测试数据举例 编号 XX 地址 QQ号 手机号 1 duanbao henan 163388 3768388 2 xiaoming henan 37838282 83263848 3 xiaowang henan 67284784 474847382 2. 按如下顺序进展测试: 1) 显示各个功能所对应的建 2) 添加好友信息 3) 显示好友信息 4) 删除好友信息 5) 更改好友信息 6) 查询好友信息 7) 退出系统 3 按照如上提供的测试步骤得出以下结果运行图: 1) 显示各个功能所对应的建如图1 图1 运行实例 2) 添加好友信息如图2 图2 运行实例 3〕 显示好友信息如图3 图3 运行实例 3) 删除好友信息如图4 图4 运行实例 5〕 更改好友信息如图 图5 运行实例 6〕 查询好友信息如图6 图6 运行实实例 7) 退出系统如图7 图7 运行实例 9参考文献 [1]严蔚敏,?数据构造〔C语言版〕? 清华大学 [2]谭浩强.?C语言程序设计?〔第三版〕 清华大学 [3]Peter Van Der Linden ,C专家编程,人民邮电 [4]Kenneth A.Reek C和指针 ,人民邮电 10心得体会 通过这次数据构造实践作业,我更深刻的体会到了C语言的语句简洁性、紧凑性,将文件与构造体结合可以实现好多功能。 语言是程序的骨肉,而数据构造和算法即使程序的灵魂,要想成功的编写程序必须选好适宜的数据构造,比方这次课程设计中,最开场我准备用普通的构造体进展设计,后来发现那样很不方便,后来改为用文件之后就方便了许多。 另外,我觉得比较重要的一点是在编复杂程序时要有宏观思想,想从整体把握设计好各个板块的调用关系,最好先做出一个流程图,再按照这个总体设想进一步具体、细化!这样才不会在需要调用其它函数时手忙脚乱! 此外,进展如上所述的操作前提都是以扎实的语言根底做为前提的,在最开场的代码编辑阶段,我曾被指针很深的困扰,后来对此一节找了些资料进展“补课〞,自己也进展的深入的理解,后来才逐渐顺利起来! 11计算机应用技术学院课程设计成绩评价表 课程名称:数据构造课程设计 设计题目:QQ好友讯录系统 专业: 班级: XX: 学号: 序号 评审工程 分 数 总分值标准说明 1 容 思路清晰;语言表达准确,概念清楚,论点正确;实验方法科学,分析归纳合理;结论严谨,设计有应用价值。任务饱满,做了大量的工作。 2 创 新 容新颖,题目能反映新技术,对前人工作有改进或突破,或有独特见解 3 完整性、实用性 整体构思合理,理论依据充分,设计完整,实用性强 4 数据准确、可靠 数据准确,公式推导正确 5 规 性 设计格式、绘图、图纸、实验数据、标准的运用等符合有关标准和规定 6 纪 律 性 能很好的遵守各项纪律,设计过程认真; 7 答 辩 准备工作充分,答复以下问题有理论依据,根本概念清楚。主要问题答复简明准确。在规定的时间作完报告。 总 分 综 合 意 见 指导教师 年 月 日 教育之通病是教用脑的人不用手,不教用手的人用脑,所以一无所能。教育革命的对策是手脑联盟,结果是手与脑的力量都可以大到不可思议。 . .word.zl.
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服