《程序设计课程设计通讯录管理》.docx
- 文档编号:18258807
- 上传时间:2023-08-14
- 格式:DOCX
- 页数:52
- 大小:581.42KB
《程序设计课程设计通讯录管理》.docx
《《程序设计课程设计通讯录管理》.docx》由会员分享,可在线阅读,更多相关《《程序设计课程设计通讯录管理》.docx(52页珍藏版)》请在冰点文库上搜索。
《程序设计课程设计通讯录管理》
程序设计课程设计(C)
报告
项目名称:
通讯录管理系统
学生姓名:
学号:
班级:
指导老师:
日期:
1、项目描述
通讯录管理系统设计,它的内容对于计算机来说是至关重要的,通讯录系统为计算机的使用者提供充足的信息和快捷的查询手段。
用c语言构建的通讯录系统设计,通过课上学到的和查阅一些文献的一些关于结构体、数组、指针、函数以及循环函数的运用和字符串的处理等基本知识可以初步的实现通讯录的输入、显示、查找、删除、快速查询等通讯录简单而用的一些实用的功能,给人们带来更多的方便。
本程序设计通讯录管理系统的基本功能,并设计简单的界面,主要考察对自定义函数的熟悉程度,使用的是数组的相关操作,包括结构体数组的输入、输出、查找、删除等。
通过完成本课题进一步熟悉C语言基本知识,数组的建立运用和函数调用,加深对数据结构的理解,提高算法设计的能力,锻炼编程的能力。
2、需求分析
设计与开发一个通讯录管理系统,对通讯录中的姓名、单位、电话、地址、QQ、等基本信息进行管理、主要功能如下:
输入记录、显示记录、按姓名查找显示记录、删除记录、修改记录、记录保存为文件、从文件中读记录、按姓名排序、显示单条记录。
(1)界面需求
软件的操作界面是字符界面,以简洁清晰、操作方便为首要目标。
主窗口——筛选区——根据组合情况显示选项列表
浏览操作区——浏览个人信息及修改、添加、删除功能
详细信息——浏览时不可修改
**************1-新建联系人******************
**************2-查找联系人******************
**************3-修改联系人******************
**************4-删除所有联系人**************
**************5-删除单个联系人**************
**************6-显示所有联系人**************
****************8-退出****************
(2)数据需求
联系人信息:
姓名、单位、电话、地址、QQ、备注
联系人的数量
(3)功能需求
增加功能:
能录入新人员记录
查看功能:
选择此功能时,当选中某类时,显示出此类所有数据中的姓名和电话号码;
拔号功能:
能显示出联系人的信息,屏幕上显示“拨号中…”以及显示拨打号码
修改功能:
选中某个人的姓名时,可对此人的相应数据进行修改。
删除功能:
选中某个人时,可对此人的相应数据进行删除①全部删除;②单个删除。
其中全部删除会提示是否全部删除,以免误删。
查找功能:
按姓名或按电话号码查找某人信息。
保存功能:
将当前系统中记录存入文件中。
3、概要设计(总体设计)
1、功能模块设计
图1
2、系统总体流程图
图2
图3
3、数据结构设计:
一个文件:
tongxunlu_list.txt
Txl结构体:
表示一个联系人的全部信息
structstudent
{
charname[15];//姓名
charworkplace[15];//单位
charnumber[15];//电话
charaddress[30];//地址
charEmail[15];//邮箱
charnote[50]//备注
}stu[MAX_SIZE];
全局变量:
Intcount;//统计联系人数量
4、函数功能及接口设计
函数原型:
intloadfile();
功能:
载入通讯录文件;
返回值:
count;
参数:
无。
函数原型:
voidsavefile();
功能:
保存所有联系人;
返回值:
无;
参数:
i
函数原型:
voidinput();
功能:
添加联系人;
返回值:
无;
参数:
count。
函数原型:
voidfind();
功能:
查找联系人;
返回值:
无;
参数:
无。
函数原型:
voidfindname();
功能:
按姓名查找联系人;
返回值:
无;
参数:
i,j;name[15];//联系人姓名信息count。
函数原型:
voidfindnumber();
功能:
按电话查找联系人;
返回值:
无;
参数:
i,j;number[15];//联系人电话信息count。
函数原型:
voidupdata();
功能:
修改联系人信息
返回值:
无;
参数:
i;a;name[15]//联系人姓名信息;。
函数原型:
voiddeleteall();
功能:
删除所有联系人信息
返回值:
无;
参数:
count。
函数原型:
voiddeletename();
功能:
按姓名删除单个联系人信息
返回值:
无;
参数:
i,j;name[15];//联系人姓名信息count。
函数原型:
voidoutputall();
功能:
显示所有联系人;
返回值:
无;
参数:
j。
函数原型:
voidsortit();
功能:
按姓名排序顺序显示全部联系人信息;
返回值:
无;
参数:
i,j;structTXLt;//用来排队比较交换时,用作工作单元。
函数原型:
voidsortit1();
功能:
按姓名排序顺序显示全部联系人信息;
返回值:
无;
参数:
i,j;structTXLt;//用来排队比较交换时,用作工作单元。
4、详细设计
函数流程图:
图4
创建:
用fopen()建立一个文本文件,然后用fprintf()向其中输入数据(例如,向文件中输入“姓名”,“地址”等),并对文件进行命名。
编写一个主控菜单驱动程序,输入0—8以进入相应选择项。
1.实现循环和功能选择假设输入选择用变量a,它作为0-8之间的一个输入变量,由getch()读入,提给switch语句。
使用while语句循环实现重复选择,并在主函数voidmain()中实现。
2.得到a的合理值
设计一个函数用来输出提示信息和处理信息输入,这个函数应该返回一个数值a,以便供给switch语句使用。
对于a输入值,在switch中case语句对应数字0—8,在swith语句中再调用相应的函数,使得程序得以执行,对于不符合要求的输入,提示输入错误并要求重新输入。
a=getch();
switch(a)
{
case'1':
system("CLS");
input();
break;
case'2':
system("CLS");
find();
break;
case'3':
system("CLS");
updata();
break;
case'4':
system("CLS");
deleteall();
break;
case'5':
system("CLS");
deletename();
break;
case'6':
system("CLS");
outputall();
break;
case'7':
system("CLS");
sortit1();
break;
case'8':
printf("8\n\t\t");
exit
(1);
break;
default:
printf("\n\n\t\t错误,请重新输入\n\t\t");
数据插入模块:
采用scanf()函数输入新联系人信息插入至结构数组中。
printf("\n\t\t\t输入联系人信息\n");
printf("\n\t\t\t**********************\n");
printf("\n\t\t\t姓名:
");
scanf("%s",txl[count].name);
printf("\n\t\t\t单位:
");
scanf("%s",txl[count].workplace);
printf("\n\t\t\t电话号码:
");
scanf("%s",txl[count].number);
printf("\n\t\t\t家庭住址:
");
scanf("%s",txl[count].address);
printf("\n\t\t\tQQ:
");
scanf("%s",txl[count].Email);
printf("\n\t\t\t备注:
");
scanf("%s",txl[count].note);
printf("\n\t\t\t**********************\n");
count++;
savefile();
图5
查找也是先打开文件,用一个对比的方法找出用户要查找的人,然后打印出来。
scanf("%s",name);
for(j=0;!
feof(fp);j++)
{
fread(&txl[j],sizeof(structTXL),1,fp);
if(strcmp(name,txl[j].name)==0)
{
printf("\n\t\t\t**********************\n");
printf("\n\t\t\t姓名:
%s\n",txl[j].name);
printf("\n\t\t\t单位:
%s\n",txl[j].workplace);
printf("\n\t\t\t电话号码:
%s\n",txl[j].number);
printf("\n\t\t\t地址:
%s\n",txl[j].address);
printf("\n\t\t\tEmail:
%s\n",txl[j].Email);
printf("\n\t\t\t备注:
%s\n",txl[j].note);
printf("\n\t\t\t**********************\n");
fclose(fp);
删除函数的设计是首先从文件内找到要删除的人,然后通过写一个实现删除目的的for循环将该人从内存里删除,然后再用写的方式打开文件,将内存内的信息写入文件,实现删除。
scanf("%s",name);
for(i=0;!
feof(fp);i++)
{
fread(&txl[i],sizeof(structTXL),1,fp);
if(strcmp(name,txl[i].name)==0)
{
printf("\n\t\t\t你要删除的联系人“%s”的信息如下:
",name);
printf("\n\t\t\t****************************\n");
printf("\n\t\t\t姓名:
%s\n",txl[i].name);
printf("\n\t\t\t单位:
%s\n",txl[i].workplace);
printf("\n\t\t\t电话号码:
%s\n",txl[i].number);
printf("\n\t\t\t地址:
%s\n",txl[i].address);
printf("\n\t\t\tEmail:
%s\n",txl[i].Email);
printf("\n\t\t\t备注:
%s\n",txl[i].note);
printf("\n\t\t\t****************************\n");
printf("\n\t\t\t是否删除(y/n):
");
if(getch()!
='y')
return;
for(j=i;j { txl[j]=txl[j+1]; } count--; savefile(); 修改大体和删除相同,修改函数在设计时通过修改结构体中内容,然后将需要修改的信息修改进去,从而实现修改功能。 图6 在显示的函数设计过程中首先运用文件的读取等必要的知识通过把文件的内容读取到内存然后打印出来。 fp=fopen("tongxunlu_list.txt","rb"); for(j=0;! feof(fp);j++) { fread(&txl[j],sizeof(structTXL),1,fp);//从文件指针fp读取一个size为sizeof(structtxl)的数据,存入stu[i] printf("\n\t\t\t**********************\n"); printf("\n\t\t\t姓名: %s\n",txl[j].name); printf("\n\t\t\t单位: %s\n",txl[j].workplace); printf("\n\t\t\t电话号码: %s\n",txl[j].number); printf("\n\t\t\t地址: %s\n",txl[j].address); printf("\n\t\t\tEmail: %s\n",txl[j].Email); printf("\n\t\t\t备注: %s\n",txl[j].note); printf("\n\t\t\t**********************\n"); } fclose(fp); 排序模块: for(i=1;i { if(strcmp(txl[i].name,txl[i-1].name)<0) { t=txl[i]; j=i-1; do { txl[j+1]=txl[j]; j--; }while((strcmp(t.name,txl[j].name)<0&&j>=0)); txl[j+1]=t; } } 5、程序编辑和调试 fp=fopen("tongxunlu_list.txt","wb"); for(i=0;i { fwrite(&txl[i],sizeof(structTXL),1,fp); } fclose(fp); fp=fopen("tongxunlu_list.txt","rb"); if(count==0) { printf("\n\n\n\t\t\t通讯录中没有任何记录,请先添加联系人"); printf("\n\n\t\t\t按任意键继续······"); getch(); fclose(fp); return; } fp=fopen("tongxunlu_list.txt","rb"); for(j=0;! feof(fp);j++) { fread(&txl[j],sizeof(structTXL),1,fp);//从文件指针fp读取一个size为sizeof(structtxl)的数据,存入stu[i] printf("\n\t\t\t**********************\n"); printf("\n\t\t\t姓名: %s\n",txl[j].name); printf("\n\t\t\t单位: %s\n",txl[j].workplace); printf("\n\t\t\t电话号码: %s\n",txl[j].number); printf("\n\t\t\t地址: %s\n",txl[j].address); printf("\n\t\t\tEmail: %s\n",txl[j].Email); printf("\n\t\t\t备注: %s\n",txl[j].note); printf("\n\t\t\t**********************\n") } fclose(fp); 使用for()循环依次读取文本中保存的联系人信息,并打印出来,编辑函数过程中对关于文件的相关代码不够了解,通过查询函数的代码,修改成为循环输出代码,循环程序只运行一次显示一个联系人的全部信息,通过增加for循环以及注释不相关代码修改问题。 voidsortit1(){ structTXLt;//t用来排队比较交换时,用作工作单元 inti,j; for(i=0;i for(j=i;j if(strcmp(txl[i].name,txl[j].name)>0){//比较 t=txl[i];txl[i]=txl[j];txl[j]=t;//交换 } } for(i=0;i { printf("\n\t\t\t**********************\n"); printf("\n\t\t\t姓名: %s\n",txl[i].name); printf("\n\t\t\t单位: %s\n",txl[i].workplace); printf("\n\t\t\t电话号码: %s\n",txl[i].number); printf("\n\t\t\t地址: %s\n",txl[i].address); printf("\n\t\t\tEmail: %s\n",txl[i].Email); printf("\n\t\t\t备注: %s\n",txl[i].note); printf("\n\t\t\t**********************\n"); } getch(); return; 使用冒泡排序依次比较相邻两个联系人信息中姓名信息,按姓名顺序排序并打印出来。 函数主要就是两个联系人姓名信息的比较然后顺序输出。 函数总是没有联系人输出。 通过注释相关代码寻找错误。 错误的认为需要循环读取文件信息进行比较才能够输出全部联系人信息。 6、测试 主菜单: 测试数据类型 测试数据 测试功能 预期结果 实测结果 合法数据 用户类型选择输入: 1 功能选择 进入新建联系人操作 正确 用户类型选择输入: 2 功能选择 进入查找联系人菜单 正确 用户类型选择输入: 3 功能选择 进入修改联系人操作 正确 用户类型选择输入: 4 功能选择 进入删除所有联系人操作 正确 用户类型选择输入: 5 功能选择 进入删除单个联系人操作 正确 用户类型选择输入: 6 功能选择 进入显示所有联系人操作 正确 用户类型选择输入: 8 功能选择 退出系统操作 正确 非法数据 用户类型选择输入: 除了1~8之外的其他数字 功能选择 提示错误 正确 查找功能: 测试数据类型 测试数据 测试功能 预期结果 实测结果 合法数据 用户类型选择输入: 1 功能选择 进入按姓名查找联系人联系人操作显示联系人信息 正确 用户类型选择输入: 2 功能选择 进入按号码查找联系人操作显示联系人信息 正确 用户类型选择输入: r 功能选择 返回主菜单 正确 用户类型选择输入: d 功能选择 进入删除联系人操作 正确 用户类型选择输入: p 功能选择 进入拨号操作 正确 非法数据 用户类型选择输入: 除了1,2,r,d,p之外的其他数字 功能选择 提示错误 正确 7、总结 经过了两周的C语言课程设计上机实践学习,使我对C语言有了更进一步的认识和了解,对文件的使用有了更近一步的了解,对以前在这些地方没有弄懂的地方,终于弄懂了。 以前的上机的时候太少了,编程的能力有限,一门课程要想学好首先它要重在实践,要通过不断的实际动手操作训练才能更好地学习它。 通过上机操作,我发现我的好多不足之处: 1我对键盘的熟悉程度远远不够,编写一个程序很费时间,录入程序的速度很慢,还经常按错字母,在编译的时候经常发生拼写警告,通过两周的训练,我有了一个提高; 2其次,C语言的知识掌握不够,对文件的调用、打开和保存方式比较陌生,我基本上掌握了文件的知识; 3对C语言的一些标准库函数不太了解,容易忘记添加头文件就调用函数,往往形成错误找了很久没找到,还有对函数调用的正确使用不够熟悉; 4还有对C语言中经常出现的错误也不了解,通过实践,使我在程序修改方面有了一个较大的提高。 通过C语言课程设计的学习,我认识到学好计算机知识需要我们不断的实践操作,只有重视实践操作,才能学到最有用的知识。 同时也学会了平常的绘图制作以及对于课程设计报告的格式规范。 8、附件: #include #include #include #include #include #include #defineMAX_SIZE100 structTXL { charname[15]; charworkplace[15]; charnumber[15]; charaddress[15]; charEmail[15]; charnote[20]; }txl[MAX_SIZE]; FILE*fp; intcount; intloadfile();//载入通讯录文件 voidsavefile();//保存所有联系人 voidinput();//添加联系人 voidfind(); voidfindname();//姓名查找联系人 voidfindnumber();//号码查找联系人 voidupdata();//更新联系人 voiddeleteall();//删除所有联系人 voiddeletename();//按姓名删除单个联系人 voidoutputall();//显示所有联系人 voidsortit(); voidsortit1();//排序 voidmain() { chara; inti; loadfile(); system("color8f"); do{ system("CLS"); printf("\n\n"); printf("\n\t\t┏━━━━━━━━━主菜单━━━━━━━━━┓"); printf("\n\t\t┃┃"); printf("\n\t\t┃*************1-新建联系人****************┃");printf("\n\t\t┃┃"); printf("\n\t\t┃*************2-查找联系人****************┃"); printf("\n\t\t┃┃"); printf("\n\t\t┃*************3-修改联系人****************┃"); printf("\n\t\t┃┃"); printf("\n\t\t┃*************4-删除所有联系人************┃"); printf("\n\t\t┃┃"); printf("\n\t\t┃*************5-删除单个联系人******
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计课程设计通讯录管理 程序设计 课程设计 通讯录 管理