C语言qq好友管理系统课程设计报告.docx
- 文档编号:24738717
- 上传时间:2023-06-01
- 格式:DOCX
- 页数:22
- 大小:225.89KB
C语言qq好友管理系统课程设计报告.docx
《C语言qq好友管理系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《C语言qq好友管理系统课程设计报告.docx(22页珍藏版)》请在冰豆网上搜索。
C语言qq好友管理系统课程设计报告
课程设计
QQ好友管理系统
课程设计名称:
数据构造课程设计
专业班级:
16机电二班
小组成员:
王守锋石松轶陆永斌智斌浩明
指导教师:
徐丽萍
课程设计时间:
2017年5月30日
计算机应用技术专业课程设计任务书
学生XX
专业班级
学号
题目
QQ好友讯录管理系统
课题性质
工程设计
课题来源
自拟课题
指导教师
同组XX
无
主要容
运用C语言和数据构造知识设计QQ好友管理系统
QQ不仅仅是个社交平台,还应是个工作平台,将通讯录保存在QQ用时更加方便。
通过QQ可以直接呼叫联系人。
任务要求
1添加好友信息2显示好友信息
3删除好友信息4更改好友信息
5查询好友信息
参考文献
?
数据构造〔C语言版〕?
严蔚敏清华大学
?
C语言程序设计?
〔第三版〕谭浩强清华大学
审查意见
指导教师签字:
教研室主任签字:
年月日
1需求分析
QQ的普及度越来越高,其功能也需要加强。
将通讯录的功能添加到QQ好友管理系统中,使其在聊天中就可以呼叫联系人,并且将通讯录的信息可以QQ中长期保存,在无手机的情况下也查找好友手机号。
从而使QQ功能更加完善,使用起来更加方便和快捷。
2概要设计
〔1〕实现功能:
〔2〕序中各函数程简单说明见下:
返回值
函数名
参数表
函数说明
提供客户
int
main
void
主函数
是
void
menu
void
显示功能
是
int
reads
Haoyoustu[N]
读取
否
void
save
haoyoustu[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
显示当前通讯录中所有联系人的信息,假设为空通讯录,那么显示无联
系人。
3详细设计
4运行环境
1)软件环境
操作系统:
Windows7,Windows8
2)硬件环境
处理器:
IntelPentium166MX或更高
存:
32MB以上
硬盘空间:
1GB以上
显卡:
SVGA显示适配
5开发工具和编程语言
MicrosoftvisualC++
C语言
6程序设计
#include
#include
#include
#include"conio.h"/*conio.h主要做图形图像,例如说设置背风光的函数,字体颜色的函数、输出格式的函数等*/
#defineN30
typedefstructhaoyou/*typedef是类型定义的意思。
typedefstruct是为了使用这个构造体方便。
具体区别在于:
假设structnode{}这样来定义构造体的话。
在申请node的变量时,需要这样写,structnoden;假设用typedef,可以这样写,typedefstructnode{}NODE;。
在申请变量时就可以这样写,NODEn;区别就在于使用时,是否可以省去struct这个关键字*/
{
charnum[20];
charname[10];
charadress[50];
charQQ[15];
chartel[15];
}haoyou;
voidmenu();
intreads(haoyoustu[N]);//读取
voidsave(haoyoustu[N],intn);//保存
voidadd();//添加
voiddel();//删除
voidquery();//查询
voidchange();//修改
voidshow();//信息显示
voidmain()
{
intn;
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)
{
case1:
add();break;
case2:
show();break;
case3:
del();break;
case4:
change();break;
case5:
query();break;
case0:
exit(0);
default:
printf("***********************************\n");
printf("输入错误,请输入列表中存在的编号\n");
printf("***********************************\n");
}
printf("*************\n");
printf("按任意键返回\n");
printf("*************\n");
getch();/*getch();或ch=getch(); 用getch();会等待你按下任意键,再继续执行下面的语句;用ch=getch();会等待你按下任意键之后,把该键字符所对应的ASCII码赋给ch,再执行下面的语句。
*/
}
}
voidmenu()
{
system("color1f");//颜色
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");
}
intreads(haoyoustu[N])//读取好友文件中的容
{
FILE*fp;
inti=0;
if((fp=fopen("d:
\\haoyou.txt","r"))==NULL)
{
printf("文件翻开失败!
\n");
return0;
}
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);
returni;
}
voidsave(haoyoustu[N],intn)//好友信息改变后更新文件
{
FILE*fp;
inti=0;
if((fp=fopen("d:
\\haoyou.txt","w"))==NULL)
{
printf("文件翻开失败!
\n");
return;
}
else
{
for(i=0;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); } voidadd()/*添加好友信息*/ { FILE*fp; intn,i; haoyoustu; 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); } voidshow()//好友信息显示函数 { haoyoustu[N]; inti,n; n=reads(stu); printf("*************所有的好友信息如下*******************\n\n"); printf("序号编号XX地址QQ号\n"); printf("*******************************************************\n"); for(i=0;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(); } voiddel()/*好友信息删除函数*/ { haoyoustu[N]; charnumber[20]; intn,i,j; n=reads(stu); printf("********************************************\n"); printf("请输入要删除信息的好友编号,按回车键确认: \n"); printf("********************************************\n"); scanf("%s",number); for(i=0;i if(strcmp(number,stu[i].num)==0)break; if(i>=n) { printf("没有找到该好友信息! \n"); return; } else { for(j=i+1;j stu[j-1]=stu[j]; } save(stu,n-1); printf("删除成功! \n"); } voidchange()//好友信息更改 { haoyoustu[N]; intn,i; charnumber[20]; printf("******************************************\n"); printf("请输入要更改信息的好友编号,按回车键确认: \n"); printf("******************************************\n"); scanf("%s",number); n=reads(stu); for(i=0;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); } voidquery()//按编号对好友信息查询 { haoyoustu[N]; charnumber[20]; inti,n; n=reads(stu); printf("****************************************\n"); printf("请输入待查询的好友编号,按回车键确认: \n"); printf("****************************************\n"); scanf("%s",number); for(i=0;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]PeterVanDerLinden,C专家编程,人民邮电 [4]KennethA.ReekC和指针,人民邮电 10心得体会 通过这次数据构造实践作业,我更深刻的体会到了C语言的语句简洁性、紧凑性,将文件与构造体结合可以实现好多功能。 语言是程序的骨肉,而数据构造和算法即使程序的灵魂,要想成功的编写程序必须选好适宜的数据构造,比方这次课程设计中,最开场我准备用普通的构造体进展设计,后来发现那样很不方便,后来改为用文件之后就方便了许多。 另外,我觉得比拟重要的一点是在编复杂程序时要有宏观思想,想从整体把握设计好各个板块的调用关系,最好先做出一个流程图,再按照这个总体设想进一步具体、细化! 这样才不会在需要调用其它函数时手忙脚乱! 此外,进展如上所述的操作前提都是以扎实的语言根底做为前提的,在最开场的代码编辑阶段,我曾被指针很深的困扰,后来对此一节找了些资料进展“补课〞,自己也进展的深入的理解,后来才逐渐顺利起来! 11计算机应用技术学院课程设计成绩评价表 课程名称: 数据构造课程设计 设计题目: QQ好友讯录系统 专业: 班级: XX: 学号: 序号 评审工程 分数 总分值标准说明 1 容 思路清晰;语言表达准确,概念清楚,论点正确;实验方法科学,分析归纳合理;结论严谨,设计有应用价值。 任务饱满,做了大量的工作。 2 创新 容新颖,题目能反映新技术,对前人工作有改良或突破,或有独特见解 3 完整性、实用性 整体构思合理,理论依据充分,设计完整,实用性强 4 数据准确、可靠 数据准确,公式推导正确 5 规性 设计格式、绘图、图纸、实验数据、标准的运用等符合有关标准和规定 6 纪律性 能很好的遵守各项纪律,设计过程认真; 7 答辩 准备工作充分,答复下列问题有理论依据,根本概念清楚。 主要问题答复简明准确。 在规定的时间作完报告。 总分 综 合 意 见 指导教师年月日 教育之通病是教用脑的人不用手,不教用手的人用脑,所以一无所能。 教育革命的对策是手脑联盟,结果是手与脑的力量都可以大到不可思议。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 qq 好友 管理 系统 课程设计 报告