通讯录管理系统.docx
《通讯录管理系统.docx》由会员分享,可在线阅读,更多相关《通讯录管理系统.docx(25页珍藏版)》请在冰豆网上搜索。
通讯录管理系统
青岛农业大学
本科生课程论文
论文题目C语言课程设计——通讯录管理系统
学生专业班级通信工程2011级2班
学生姓名(学号)高超(20112705)
指导教师李吉忠
完成时间2012年09月25日
2012年09月25日
1设计题目的内容、任务及具体要求
本通讯录系统初步实现了人员信息的显示、删除、查找、修改、添加等必要的功能。
记录通讯录内的人员的姓名、地址、邮编、电话号码、QQ号码、邮箱。
②将保存的人员进行分类。
③显示所有人员的信息。
④通过输入姓名或输入分组查找人员信息。
⑤通过输入姓名查找到要删除的人员信息,然后可以进行删除。
⑥通过输入姓名查找到要修改的人员信息,然后可以进行修改。
⑦添加人员信息。
⑧显示该系统保存的成员数目。
2总体设计思路
根据上面的分析,可以将程序系统的设计分为如下几个模块:
插入、显示、删除、查询、修改、保存和退出。
系统首先设计出了主函数,然后根据去要实现的功能分别设计拉,显示、删除、查找、修改、添加功能的子函数。
在显示的函数设计过程中首先运用拉文件的读取等必要的知识通过把文件的内容读取到内存然后打印出来。
删除函数的设计是首先从文件内找到要删除的人,然后通过写一个实现删除目的的FOR循环将该人从内存里删除,然后再用写的方式打开文件,将内存内的信息写入文件,实现删除。
查找也是先打开文件,用一个字符串对比的方法找出用户要查找的人,然后打印出来。
修改也大体和删除相同,添加函数在设计时通过申请一片空间,然后通过指针将需要添加的信息添加进去,从而实现添加功能。
3功能模块的具体设计
程序设计中的数据设计
程序中使用了结构体和结构体数组,如:
structTelephone
{
charname[20];
charaddrass[20];
charzip[20];
chartelephone[20];
charQQ[20];
charemail[30];
对用户的信息进行保存,他们都以二进制的形式读写。
其中:
charname[20];
charaddress[20];
charcallnumber[20]
分别对姓名、地址、邮编、电话号码进行储存
还运用了头文件:
#include"time.h"
#include
#include
#include
其中还使用了大量的子函数,例如:
voidshowmenu();
voidAppenditem();
voidprint();
voidFinditem1();
voidRemoveitem();
通过对这些资源的合理利用使系统初步实现了通讯录管理系统的基本功能。
模块流程图
插入模块——此模块为插入信息模块,插入后再调用保存函数来保存所插入的数据,支持多条信息的插入。
}
查找模块——本模块分为按姓名查找和按电话查找两个子模块。
按姓名查找模块与按姓名查找模块相似,流程图如下:
删除模块——此模块先利用查找模块找到所要删除的信息,然后根据用户的选择来确定是否删除信息,此种调用到Save函数。
其流程图如下:
修改模块——此模块先调用查找函数查找到所要修改的信息,然后用户根据需要来修改信息。
流程图如下:
4实习心得
在老师的带领下进行了C语言程序实践学习。
在短短一周的实习期间使我获取了不少新知识也巩固了许多老知识。
在这之前,我们已经对C语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅是停留在学习了解的范围,对里面的好多东西还是很陌生,并不是很熟练,有着许多欠缺,更多的在运用起来的时候还是感到很不好动手。
C语言是需要有一定基础、而且动手能力强的学科。
上机实验是学习程序设计语言必不可少的实践环节,特别是C语言灵活、简洁,更需要通过编程的实践来真正掌握它。
对于程序设计语言的学习目的,可以概括为学习语法规定、巩固贯穿系统知识、掌握程序设计方法、提高程序设计能力,这些都必须通过充分的实际上机操作才能完成。
课堂上许多关于C语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。
然而要使用C语言这个工具解决实际问题,又必须掌握它。
通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握C语言的语法规定。
对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,更加巩固了学过的知识,而且在设计的时候学要系统的知识,也是一个较大的挑战,某一方面知识的欠缺都将影响到整个程序的设计。
这次上机实习让我学到了很多有用的东西,巩固了之前的学习,让我学到了在教室和做题中学不到的一些知识,通过这个程序的学习,使我进一步理解和运用结构化程序设计的思想和方法。
相信对以后初步掌握开发一个小型实用系统的基本方法,学会调试一个比较长程序的基本方法,学会利用流程图表示算法,进一步掌握和提高利用C语言进行程序设计的能力。
我认为,这次实习对于我是非常有意义的,对我个人的影响比较大,对我的动手能力有了很大的提高。
在体会到程序成功后的快乐后,发现自己也逐步喜欢上了这门语言,对以后的专业知识的学习也会很有帮助。
最后感谢在实习过程中帮助过我的老师和同学,正是你们的帮助才有了这次实习的成功!
5程序源文件
#include"time.h"
#include
#include
#include
#include
structTelephone
{charname[20];
charaddrass[20];
charzip[20];
chartelephone[20];
charQQ[20];
charemail[30];
chartean[5];
structTelephone*next;};
typedefstructTelephoneTEL;
structpasswd
{charusename[18];
charpassword[18];
structpasswd*next;};
structpasswd*head1=NULL;
TEL*head=NULL;
voidshowmenu();//主菜单
voidAppenditem();//添加信息
voidprint();//输出信息
voidFinditem1();//查找信息(按姓名)
voidRemoveitem();//删除信息
voidmodify();//删除信息
voidSave();//保存到文件
voidOpen();//打开文件
voiddljm();//个人资料界面
voidopen();//选择
voidjssm();//统计总数和各分组的人数
voidtime1();//获取系统时间
voidflcx();//查找信息(按分组)
voidczjm();//查找菜单
voidxgmm();//密码文件
voiddenglujm();//登录界面
voidlogin();//注册密码账号
voidmenu();//菜单
voidSavepwd();//保存密码账号
voidmodifypasswd();
voiddenglujm()//登录界面
{inti,k,j=0;structpasswd*p;
charusername1[15],pwd[28],ch;system("color0f");
for(i=0;i<3;i++)
{printf("\n\t\t\t\t======================================\n\n");
printf("\t\t\t\t╭⌒╮¤ \n");
printf("\t\t\t\t╭╭⌒╮●╭○╮ \n");
printf("\t\t\t\t╰----╯/█\\∨█\\ \n");
printf("\t\t\t\t~~~~~~~~~~∏~~∏~~~~~~~~~~~\n");
printf("\t\t\t\t======================================\n");
printf("\n\n管理员登陆");
printf("\n\n请输入账号:
");
scanf("%s",username1);
printf("\n请输入密码:
");
k=0;ch='0';while(ch!
='\r')
{ch=getch();
if(ch=='\r')break;
printf("*");pwd[k]=ch;k++;}
pwd[k]='\0';
for(p=head1->next;p!
=NULL;p=p->next)
{if((strcmp(p->usename,username1)==0)&&(strcmp(p->password,pwd)==0))
{j=1;
dljm();break;}}
if(p==NULL&&j==0)
{system("cls");
printf("\a");
printf("\n\t用户名密码错误!
\n\t请重新输入账号密码!
");
denglujm();}}}
main()
{menu();}
voidmenu()//主函数
{charch;xgmm();system("colorec");
printf("\t\t温馨提示:
\n");
printf("\t\t第一次使用请先注册\n");
printf("\t\t\n");
printf("\t\t=============================================\n");
printf("\t\t\n");
printf("\t\t1.登录\n");
printf("\t\t\n");
printf("\t\t2.注册\n");
printf("\t\t\n");
printf("\t\t0.退出\n");
printf("\t\t\n");
printf("\t\t=============================================\n");
printf("请选择0-2:
\n");
ch=getchar();
switch(ch)
{case'1':
system("cls");denglujm();
case'2':
login();menu();
case'0':
exit(0);
default:
system("cls");printf("\n输入错误,请重新选择......\n\n");menu();
break;}}
voiddljm()//个人资料界面
{intk,M=80000000,u,o;
charch;system("cls");time1();
printf("\n\n\n请按任意键进入系统...");
ch=getch();getchar();
if(ch)
{system("cls");
printf("\n");printf("\n");printf("\n");printf("\n");
system("cls");
printf("\n\n\n");printf("\n\n\n\n\n\n\n\n\n\n\n〓程序加载中");
for(o=0;o<3;o++)
{for(u=0;u<4;u++)
{printf(">");
for(k=0;k<10000000;k++);}
system("cls");
printf("\n\n\n\n\n\n\n\n\n\n\n〓程序加载中");}
system("cls");
for(k=1;kprintf("\r");
system("cls");
open();}}
voidopen()
{intk;intu,o;
charch;Open();//打开文件
while
(1)
{showmenu();//显示菜单
scanf("%c",&ch);
switch(ch)
{case'1':
Appenditem();Save();//添加条目
printf("\n\n\n\n\n\n\n\n正在返回主菜单");
for(o=0;o<3;o++)
{for(u=0;u<4;u++)
{printf("》");
for(k=0;k<10000000;k++);}
system("cls");
printf("\n\n\n\n\n\n\n\n正在返回主菜单");}
system("cls");break;
case'2':
print();getchar();//输出条目break;
case'3':
czjm();getchar();//查找break;
case'4':
Removeitem();Save();getchar();//删除信息break;
case'5':
modify();Save();getchar();break;
case'6':
jssm();getchar();break;//输出成员数
case'7':
modifypasswd();getchar();break;
case'0':
system("cls");
printf("\n\n\n");
printf("\t\t============================\n");
printf("\t\t\n");
printf("\t\t多谢使用!
!
!
!
\n");
printf("\t\t\n");
printf("\t\t============================\n");
exit(0);//退出
break;
default:
{system("cls");printf("\a");}
printf("\n选择错误!
请重新选择0-7!
\n");
break;}}}
voidshowmenu()
{printf("");
time1();
printf("\t\t\t\t﹎┈┈.o┈﹎﹎..○\n");
printf("\t\t\t\t﹎┈﹎●○.﹎﹎o▂▃▅▆\n");
printf("\t\t\t\t┈┈/█\\/▓\\﹎┈﹎﹎┈﹎\n");
printf("\t\t\t\t▅▆▇█████▇▆▅▃▂┈﹎\n");
system("color0f");
printf("\t\t***************通讯录系统*******************\n");
printf("\t\t|============================================|\n");
printf("\t\t||\n");
printf("\t\t|1.添加成员信息|\n");
printf("\t\t||\n");
printf("\t\t|2.输出成员信息|\n");
printf("\t\t||\n");
printf("\t\t|3.查询成员信息|\n");
printf("\t\t||\n");
printf("\t\t|4.删除成员信息|\n");
printf("\t\t||\n");
printf("\t\t|5.修改成员信息|\n");
printf("\t\t||\n");
printf("\t\t|6.查看成员数目|\n");
printf("\t\t||\n");
printf("\t\t|7.修改个人密码|\n");
printf("\t\t||\n");
printf("\t\t|0.退出!
|\n");
printf("\t\t||\n");
printf("\t\t|============================================|\n");
printf("\t\t请选择0-7:
");
}
voidAppenditem()
{charch;into,u,k,i=0;
TEL*p1=NULL,*p2=NULL;
p1=(TEL*)malloc(sizeof(TEL));
printf("输入姓名:
\n");scanf("%s",p1->name);
printf("输入地址:
\n");scanf("%s",p1->addrass);
printf("输入邮编:
\n");scanf("%s",p1->zip);
printf("输入电话:
\n");scanf("%s",p1->telephone);
printf("输入Q号:
\n");scanf("%s",p1->QQ);
printf("输入邮箱:
\n");scanf("%s",p1->email);
getchar();re:
printf("请选择分组...");
printf("1.同学");
printf("2.好友");
printf("3.亲人");
printf("4.其他");
ch=getchar();getchar();
if(ch=='1')
{i=1;strcpy(p1->tean,"同学");}
if(ch=='2')
{i=1;strcpy(p1->tean,"好友");}
if(ch=='3')
{i=1;strcpy(p1->tean,"亲人");}
if(ch=='4')
{strcpy(p1->tean,"其他");i=1;}
if(i==0)
{printf("\n输入错误!
请重新选择\n");
gotore;}
p1->next=NULL;//保存到链表
if(head==NULL)
{head=(TEL*)malloc(sizeof(TEL));//申请空间head->next=p1;}
else
{for(p2=head;p2->next!
=NULL;p2=p2->next);//找到结点尾p2->next=p1;}
system("cls");
for(o=0;o<3;o++)
{for(u=0;u<4;u++)
{printf("》");
for(k=0;k<10000000;k++);}
system("cls");
printf("\n\n此信息已添加成功!
!
!
\n");}
system("cls");}
voidprint()
{TEL*p=NULL;inti=0;
system("colorec");
if(head->next==NULL)
{i=1;
system("cls");
printf("\a\a");
printf("\n\n通讯录中没有成员信息!
请重新选择\n\n");
system("pause");return;}
system("cls");
if(i==0)
{printf("\t**************************通讯录系统**********************\n");//输出信息
printf("\t姓名地址邮编电话QQ邮箱分组\n\n");}
for(p=head->next;p!
=NULL;p=p->next)
printf("\t%s%s%s%s%s%s%s\n\n",p->name,p->addrass,p->zip,p->telephone,p->QQ,p->email,p->tean);
printf("\n\n\n\t\t\t");
system("pause");
system("cls");}
voidczjm()
{charch;
system("cls");
printf("请输入你想查找的方式:
0-2\n");
rett:
printf("\t\t==================================================\n");
printf("\n");
printf("\t\t&&1.按姓名查找&&\n");
printf("\n");
printf("\t\t&&2.按分组查找&&\n");
printf("\n");
printf("\t\t&&0.返回&&\n");
printf("\n");
printf("\t\t==================================================\n");
getchar();
ch=getchar();
switch(ch)
{case'1':
Finditem1();break;
case'2':
flcx();break;
case'0':
system("cls");break;
default:
system("cls");
printf("\t\t%c\n",ch);
printf("\t\t输入错误,请重新选择....\n\t\t");
system("pause");
system("cls");
gotorett;
break;}}
voidFinditem1()
{TEL*p;inti=0;
charfindname[20];
printf("请输入要查找的人员的姓名:
\n");
scanf("%s",findname);
for(p=head->next;p!
=NULL;p=p->next)
{if(strcmp(p->name,findname)==0)
{if(i==0)
{system("cls");
printf("\n\n");
printf("\t*****************************通讯录系统****************************\n");//输出信息
printf("\t姓名地址邮编电话QQ邮箱分组\n\n");
}i=1;
printf("\t%s%s%s%s%s%s%s\n\n",p->name,p->addrass,p->zip,p->telephone,p->Q