最新C语言通讯录管理系统程序代码资料.docx
《最新C语言通讯录管理系统程序代码资料.docx》由会员分享,可在线阅读,更多相关《最新C语言通讯录管理系统程序代码资料.docx(20页珍藏版)》请在冰豆网上搜索。
最新C语言通讯录管理系统程序代码资料
一、课程设计题目及要求
题目通讯录管理系统
任务:
自学C语言中相关知识,设计出通讯录管理系统。
要求如下所述:
◆建立通讯录信息,信息至少包含编号、姓名、年龄、电话、通讯地址、电子邮箱等;;
◆能够提供添加、删除和修改通讯录信息的功能;
◆能够提供按姓名或电话等查询;
◆将通讯录保存在文件中;
◆能够按表格方式输出通讯录信息。
二、系统设计方案
(一)总体框架图:
通讯录管理系统:
1、录入通讯录信息
2、修改通讯录信息
3、查询通讯录信息
4、浏览通讯录信息
5、增加通讯录信息
6、推出系通讯录统
(二)模块设计
模块一:
头文件,变量定义,函数的声明
对系统所使用的变量进行定义,对函数进行声明
模块二:
录入通讯录信息
声明函数voidreadfile(),说明一个文件指针FILE*fp打开文件"student.txt"
模块三:
通讯录信息的查找
声明voidseek()为查找函数,通过switch(item)设定用学号查找,用姓名查找两个分支
模块四:
通讯录信息的修改
声明voidmodify()为学生信息修改函数,通过switch(item)设定所要修改的项目
模块五:
通讯录信息按学号排序
声明voidsort()将录入通讯录信息系按升序排列,用的是“冒泡排序法”实现排序
模块六:
加通讯录信息
声明voidinsert()插入通讯录信息,先通过判断通讯录是否存在,若否则继续输入,若是跳出,重新循环
模块七:
通讯录信息
声明voiddel()实现通讯录信息删除,通过学号对比确定要删除的信息,然后用后一个替换掉。
模块八:
示学生信息
通过display()函数输出通讯录信息
模块九;存信息
通过fp=fopen("student.txt","w");写入信息
模块十:
界面菜单
通过switch(num)调用,以上各函数,实现功能
三、设计详情
1.主函数
主函数设计要求简洁,只提供部分提示语和函数的调用
【程序】
图1.主函数流程图
voidmenu()/*界面*/
{intnum;
printf("\n\n自动化0901通讯录管理系统\n\n");
printf("*****************\n\n");
printf("*制作人:
翁行兴*\n\n");
printf("*****************\n\n");
printf("*********************系统功能菜单************************\n");
printf("--------------------------------------------\n");
printf("*1.刷新学生信息**2.查询学生信息*\n");
printf("*3.修改学生信息**4.增加学生信息*\n");
printf("*5.按学号删除信息**6.显示当前信息*\n");
printf("*7.保存当前学生信息**8.退出系统*\n");
printf("--------------------------------------------\n");
printf("请选择菜单编号:
");
scanf("%d",&num);
switch(num)
{
case1:
readfile();break;
case2:
seek();break;
case3:
modify();break;
case4:
insert();break;
case5:
del();break;
case6:
display();break;
case7:
save();break;
case8:
k=0;break;
default:
printf("请在1-8之间选择\n");
}
}
四、源代码
#include
#include
#include
#defineBUFLEN100
#defineLEN15
#defineN100
structrecord/*结构体*/
{
charcode[LEN+1];/*学号*/
charname[LEN+1];/*姓名*/
intage;/*年龄*/
charsex[3];/*性别*/
chartime[LEN+1];/*出生年月*/
charadd[30];/*家庭地址*/
chartel[LEN+1];/*电话号码*/
charmail[30];/*电子邮件地址*/
}stu[N];
intk=1,n,m;/*定义全局变量*/
voidreadfile();/*函数声明*/
voidseek();
voidmodify();
voidinsert();
voiddel();
voiddisplay();
voidsave();
voidmenu();
intmain()
{
while(k)
menu();
system("pause");
return0;
}
voidreadfile()/*建立信息*/
{
char*p="student.txt";
FILE*fp;
inti=0;
if((fp=fopen("student.txt","r"))==NULL)
{
printf("Openfile%serror!
Strikeanykeytoexit!
",p);
system("pause");
exit(0);
}
while(fscanf(fp,"%s%s%d%s%s%s%s%s",stu[i].code,stu[i].name,&stu[i].age,
stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail)==8)
{
i++;i=i;
}
fclose(fp);
n=i;
printf("录入完毕!
\n");
}
voidseek()/*查找*/
{
inti,item,flag;
chars1[21];/*以姓名和学号最长长度+1为准*/
printf("------------------\n");
printf("-----1.按学号查询-----\n");
printf("-----2.按姓名查询-----\n");
printf("-----3.退出本菜单-----\n");
printf("------------------\n");
while
(1)
{
printf("请选择子菜单编号:
");
scanf("%d",&item);
flag=0;
switch(item)
{case1:
printf("请输入要查询的学生的学号:
\n");
scanf("%s",s1);
for(i=0;iif(strcmp(stu[i].code,s1)==0)
{
flag=1;
printf("学号姓名年龄性别出生年月地址电话E-mail\n");
printf("--------------------------------------------------------------------\n");
printf("%6s%7s%6d%5s%9s%8s%10s%14s\n",stu[i].code,stu[i].name,stu[i].age,
stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);
}
if(flag==0)
printf("该学号不存在!
\n");break;
case2:
printf("请输入要查询的学生的姓名:
\n");
scanf("%s",s1);
for(i=0;iif(strcmp(stu[i].name,s1)==0)
{
flag=1;
printf("学号姓名年龄性别出生年月地址电话E-mail\n");
printf("--------------------------------------------------------------------\n");
printf("%6s%7s%6d%5s%9s%8s%10s%14s\n",stu[i].code,stu[i].name,stu[i].age,
stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);
}
if(flag==0)
printf("该姓名不存在!
\n");break;
case3:
return;
default:
printf("请在1-3之间选择\n");
}
}
}
voidmodify()/*修改信息*/
{
inti,item,num;
charsex1[3],s1[LEN+1],s2[LEN+1];/*以姓名和学号最长长度+1为准*/
printf("请输入要要修改的学生的学号:
\n");
scanf("%s",s1);
for(i=0;iif(strcmp(stu[i].code,s1)==0)/*比较字符串是否相等*/
num=i;
printf("------------------\n");
printf("1.修改姓名\n");
printf("2.修改年龄\n");
printf("3.修改性别\n");
printf("4.修改出生年月\n");
printf("5.修改地址\n");
printf("6.修改电话号码\n");
printf("7.修改E-mail地址\n");
printf("8.退出本菜单\n");
printf("------------------\n");
while
(1)
{
printf("请选择子菜单编号:
");
scanf("%d",&item);
switch(item)
{
case1:
printf("请输入新的姓名:
\n");
scanf("%s",s2);
strcpy(stu[num].name,s2);break;
case2:
printf("请输入新的年龄:
\n");
scanf("%d",&stu[num].age);break;
case3:
printf("请输入新的性别:
\n");
scanf("%s",sex1);
strcpy(stu[num].sex,sex1);break;
case4:
printf("请输入新的出生年月:
\n");
scanf("%s",s2);
strcpy(stu[num].time,s2);break;
case5:
printf("请输入新的地址:
\n");
scanf("%s",s2);
strcpy(stu[num].add,s2);break;
case6:
printf("请输入新的电话号码:
\n");
scanf("%s",s2);
strcpy(stu[num].tel,s2);break;
case7:
printf("请输入新的E-mail地址:
\n");
scanf("%s",s2);
strcpy(stu[num].mail,s2);break;
case8:
return;
default:
printf("请在1-8之间选择\n");
}
}
}
voidsort()/*按学号排序*/
{
inti,j,*p,*q,s;
chartemp[10];
for(i=0;i{
for(j=n-1;j>i;j--)
if(strcmp(stu[j-1].code,stu[j].code)>0)
{
strcpy(temp,stu[j-1].code);
strcpy(stu[j-1].code,stu[j].code);
strcpy(stu[j].code,temp);
strcpy(temp,stu[j-1].name);
strcpy(stu[j-1].name,stu[j].name);
strcpy(stu[j].name,temp);
strcpy(temp,stu[j-1].sex);
strcpy(stu[j-1].sex,stu[j].sex);
strcpy(stu[j].sex,temp);
strcpy(temp,stu[j-1].time);
strcpy(stu[j-1].time,stu[j].time);
strcpy(stu[j].time,temp);
strcpy(temp,stu[j-1].add);
strcpy(stu[j-1].add,stu[j].add);
strcpy(stu[j].add,temp);
strcpy(temp,stu[j-1].tel);
strcpy(stu[j-1].tel,stu[j].tel);
strcpy(stu[j].tel,temp);
strcpy(temp,stu[j-1].mail);
strcpy(stu[j-1].mail,stu[j].mail);
strcpy(stu[j].mail,temp);
p=&stu[j-1].age;
q=&stu[j].age;
s=*q;
*q=*p;
*p=s;
}
}
}
voidinsert()/*插入函数*/
{
inti=n,j,flag;
printf("请输入待增加的学生数:
\n");
scanf("%d",&m);
do
{
flag=1;
while(flag)
{
flag=0;
printf("请输入第%d个学生的学号:
\n",i+1);
scanf("%s",stu[i].code);
for(j=0;j
if(strcmp(stu[i].code,stu[j].code)==0)
{
printf("已有该学号,请检查后重新录入!
\n");
flag=1;
break;/*如有重复立即退出该层循环,提高判断速度*/
}
}
printf("请输入第%d个学生的姓名:
\n",i+1);
scanf("%s",stu[i].name);
printf("请输入第%d个学生的年龄:
\n",i+1);
scanf("%d",&stu[i].age);
printf("请输入第%d个学生的性别:
\n",i+1);
scanf("%s",stu[i].sex);
printf("请输入第%d个学生的出生年月:
(格式:
年.月)\n",i+1);
scanf("%s",stu[i].time);
printf("请输入第%d个学生的地址:
\n",i+1);
scanf("%s",stu[i].add);
printf("请输入第%d个学生的电话:
\n",i+1);
scanf("%s",stu[i].tel);
printf("请输入第%d个学生的E-mail:
\n",i+1);
scanf("%s",stu[i].mail);
if(flag==0)
{
i=i;
i++;
}
}
while(in+=m;
printf("录入完毕!
\n\n");
sort();
}
voiddel()
{
inti,j,flag=0;
chars1[LEN+1];
printf("请输入要删除学生的学号:
\n");
scanf("%s",s1);
for(i=0;iif(strcmp(stu[i].code,s1)==0)
{
flag=1;
for(j=i;jstu[j]=stu[j+1];
}
if(flag==0)
printf("该学号不存在!
\n");
if(flag==1)
{
printf("删除成功,显示结果请选择菜单6\n");
n--;
}
}
voiddisplay()
{
inti;
printf("所有学生的信息为:
\n");
printf("学号姓名年龄性别出生年月地址电话E-mail\n");
printf("--------------------------------------------------------------------\n");
for(i=0;i{
printf("%6s%7s%5d%5s%9s%8s%10s%14s\n",stu[i].code,stu[i].name,stu[i].age,
stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);
}
}
voidsave()
{
inti;
FILE*fp;
fp=fopen("student.txt","w");/*写入*/
for(i=0;i{
fprintf(fp,"%s%s%d%s%s%s%s%s\n",stu[i].code,stu[i].name,stu[i].age,
stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);
}
fclose(fp);
}
voidmenu()/*界面*/
{
intnum;
printf("\n\n自动化0901学生信息管理系统\n\n");
printf("*****************\n\n");
printf("*制作人:
翁行兴*\n\n");
printf("*****************\n\n");
printf("*********************系统功能菜单************************\n");
printf("--------------------------------------------\n");
printf("*1.刷新学生信息**2.查询学生信息*\n");
printf("*3.修改学生信息**4.增加学生信息*\n");
printf("*5.按学号删除信息**6.显示当前信息*\n");
printf("*7.保存当前学生信息**8.退出系统*\n");
printf("--------------------------------------------\n");
printf("请选择菜单编号:
");
scanf("%d",&num);
switch(num)
{
case1:
readfile();break;
case2:
seek();break;
case3:
modify();break;
case4:
insert();break;
case5:
del();break;
case6:
display();break;
case7:
save();break;
case8:
k=0;break;
default:
printf("请在1-8之间选择\n");
}
}
五.调试过程
一.主界面
二.测试数据
当选择4——增加学生信息时,出现对话框,先输入增加的数量。
再按要求依次输入,如图
输入两组数据,按6查询。
如图
按3修改信息,如图,输入要修改学生的学号
然后选择要修改的选项,例如修改姓名,如图
The鏈嶅姟Liaorules€?
然后再按6查询,如图
TheLuх墿鍚嶇О
The鐗╄祫Mei佷笟
修改成功!
TheQi﹁締鍗囬檷HaoJuan棬删除信息,先选择5,按学号删除,如图
再依据提示按6查询剩余的通讯录,如图
鎶ュ叧
学号为03的已经成功删除!
TheWaJuan€?
閮ㄩ?
The鍒嗘Ma愰€?
三.依然存在的问题
TheYing樿ChuaiXian侀€?
閫熷harms1,第一次输入的数据到了第二次就不能够保存,可能是编写保存的函数没有编到位
2,对于显示时不能每一次操作之后都换一个屏,使得众多的操作都集中在一个屏上,显得不美观。
The鍒嗘Ma愰€?
六.课程设计总结
通过C课程设计这门课,使我对《C语言》这门课程有了更深一步的了解。
它是计算机程序设计的重要理论技术基础,在我们信息科学与工程学院自动化专业的学习中占据着十分重要的地位。
同时也使我们知道,要学好这门课程,仅学习书本上的知识是不够的,还要有较强的实践能力。
因为我们学习知识就是为了实践。
而只有多实践,多编写程序,才能更好的理解与掌握书本上的东西。
在遇到不懂的时候,要善于请教他认,不要认为自己什么都懂,这种想法是极其错误的,只有不断吸收他人好的方面,充实自己,自己才能不断的进步。
The鍏ㄩ泦Mei呯鑸?