资源描述
c语言通讯录专业课程设计报告模板
青岛工学院
C语言课程设计报告书
题 目
通讯录管理系统
学生姓名
指导教师
姜琴
学 院
信息工程学院
专业班级
软件工程2012级1班
组内分工
姓名
主要任务
占系统比例
程序的总体构思,写主函数,程序的调试
25%
写visit函数,分析程序代码结构,调试程序
25%
分析程序需求功能,写modifymenu函数调试程序
25%
写found函数,收集资料解决难点,调试程序
25%
目 录
1 前言 1
2 需求分析 2
3 模块设计图 3
4 NS流程图清单 4
5 存储结构及函数说明 5
6 课程设计结果································································8
7 实践心德体验·······························································9
8 源代码···························································10
1 前言
随着互联网的蓬勃与移动设备的发展,越来越多的联系人信息需要我们储存。不管是个人,还是企业,都需要一个功能齐全,稳定,快捷的通讯录系统来管理联系人资料。
现在我们要用c语言写一个简易的通讯录管理系统,实现通讯录的基本功能。由于我们学识浅薄,我们只能把程序简单化,太复杂的功能也无法实现。在此程序中只实现了创建、修改、删除的基本功能;在修改于删除里面带有查询功能,来查询需要修改于删除的对象。而且我们还参考了《c语言程序设计与应用》
与百度上的一些资料。
程序功能有限,又不好的地方尽请谅解。
2 需求分析
首先进入系统检测文件夹中是否有相关txt文档,有进入通讯录系统,没有创建一个txt文档用来存储联系人姓名;
建立一个通讯录,包括联系人姓名、电话号码、号,并保存在txt文档中;
能够根据联系人姓名来修改和删除联系人的所有信息,并修改保存在txt文档中的联系人;
可从主界面直接退出系统,下次使用时可导入上次存储的联系人信息、并进行操作。
3 模块设计图
此为通讯录重要函数流程:
通讯录管理系统
创建、读取文件函数loadfile()
创建通讯录系统found()
浏览通讯录系统visit()
推出通讯录系统exit(0)
删除通讯录系统deleted()
修改通讯录系统modifymenu()
menu()
Lodefile()
Menu()
exit(0)
case5
case4
case3
case2
case1
deleted()
modifymenu()
visit()
found()
4 NS流程图清单
:
File *fp,打开该文件
是 是否有tellnfo 否
导入文件里面 创建一个文件
的联系人
关闭文件
2. found函数
输入联系人信息
NO++
调用savefile函数
是 是否继续 否
调用found函数 getsch();
menu();
5 存储结构及函数说明
头文件有:
#include<>
#include<>
#include <>
#include <>
struct record 定义一个结构体,用来存储联系人的信息
{
char name[20];
char tel[20];
char [20];
}TelInfo[500];
int NO; 定义变量NO,用来记入联系人的编号
FILE *fp; 定义文件指针
int loadfile(); 创建、读取文件
void savefile(); 保存创建的联系人到文件中
void menu(); 主菜单函数
void found(); 创建联系人函数
void modifymenu(); 修改联系人信息函数
void deleted(); 删除联系人函数
void visit(); 游览联系人函数
(1) 主函数main():调用loadfile()(/*创建文件,读取文件*/)函数;创建一个永真的条件while(1)以便循环使用;调用menu()(主菜单函数);
(2) 创建、读取文件函数loadfile():定义一个文件指针,把0赋给NO;先判断电脑里是否有此文件,如果没有创建一个文件,如果有导入此文件中的信息;
(3) 主菜单函数menu():在住界面显示所有功能,包括创建、游览、修改、删除、退出系统;用switch语句来控制我们的选择并进入相应的函数;
(4) 创建联系人函数found():输入联系人的姓名、电话号码、号码,每输入一个联系人的资料NO就加一,并调用savefile()函数存储此联系人;
(5) 保存创建的联系人函数savefile():用fwrite语句来存储已建的联系人;
(6) 游览联系人函数visit():先判断NO是否为0,如果为0,则没有联系人,如果不为0,则依次按存储顺序输出联系人信息;
(7) 修改联系人函数modifymenu():定义一个数组name[20];判断NO是否为0,不为0则显示所有联系人的姓名,然后输入要修改联系人的姓名,用strcmp语句来找到你需要修改的联系人并显示出来;确定修改此联系人后用swtich语句来控制需要修改的地方,包括姓名、电话号码、号码;调用savefile()函数存储;
(8) 删除联系人函数deleted():定义一个数组name[20];判断NO是否为0,不为0则显示所有联系人的姓名,然后输入要删除联系人的姓名,用strcmp语句来找到你需要删除的联系人并显示出来;确定删除后,把此联系人以后的联系人的NO编号都向前移一位,从而把此联系人删除,用循环控制语句为“TelInfo[j]=TelInfo[j+1];”;
6 课程设计结果
在写程序时,我们尽力做到美观、可操作性强。每一个函数都有它的功能,并做到通用函数的循环调用,减小了程序的复杂度,让程序看上去结构层次分明。我们用文件形式来存储联系人信息,并保存,方便下次的使用,认程序更稳定。
程序虽然简陋,但能完美运行,一下为程序的部分界面:
7 实践心得体会
· 通过这次通讯录的设计,我对很多的函数有了新的认识,也学会了运用多种函数,明白了写软件的基本过程和基本方法。
· 在设计的过程中遇到了很多的困难,有程序上的也有实验报告上的,尤其是软件在一次一次的调试失败后,对我们打击很大。但最后我们还是咬牙让自己坚持了下来,通过小组的不断试验和讨论以及同学们的帮助,我们总算顺利的完成了程序设计。虽然在调试过程中遇到了许多困难,但当调试成功时那种喜悦的感觉,没有什么东西可以代替。在编写过程中我们都发现我们有许多的知识漏洞和缺陷,需要进一步努力来不断完善自己。
· 总之,此次过程不仅给我很多好的经验,同时加深了同学间的关系,增强了团队解决问题的能力。
8 源代码
#include<>
#include<>
#include <>
#include <>
struct record
{
char name[20];
char tel[20];
char [20];
}TelInfo[500];
int NO;
FILE *fp;
int loadfile();
void savefile();
void menu();
void found();
void modifymenu();
void deleted();
void visit();
int main()
{
loadfile();
while(1)
menu();
}
int loadfile() /*创建文件,读取文件*/
{
FILE *fp;
if((fp=fopen("","r"))==0)
{
printf("\n\n\n\n\n\t\t\t 电话簿文件不存在");
if ((fp=fopen("","wb"))==0)
{
printf("\n\t\t\t\t建立失败");
exit(0);
}
else
{
printf("\n\n\t\t\t 电话簿已建立");
printf("\n\n\t\t\t 按任意键进入主菜单");
getch();
NO=0;
return(NO);
}
exit(0);
}
fseek(fp,0,2); /**/
if (ftell(fp)>0)
{
rewind(fp);
for(NO=0;!feof(fp)&&fread(&TelInfo[NO],sizeof(struct record),1,fp);NO++);
printf("\n\n\n\n\n");
printf("\n\t\t 文件导入成功!!! ");
printf("\n\n\t\t\t\t按任意键返回主菜单");
getch();
return(NO);
}
else
{
printf("\n\t\t 没有可以访问的数据!!! ");
printf("\n\n\t\t\t 按任意键返回主菜单进行添加");
getch();
NO=0;
return(NO);
}
}
void menu() /*主菜单*/
{
int choice;
system("cls");
printf("\n\n\t ********************欢迎使用通讯录系统********************\n");
printf("\n\t\t **********创建通讯录请按:1**********\n");
printf("\n\t\t **********游览通讯录请按:2**********\n");
printf("\n\t\t **********修改通讯录请按:3**********\n");
printf("\n\t\t **********删除联系人请按:4**********\n");
printf("\n\t\t **********退出通讯录请按:5**********\n");
printf("\n\t ********************这是通讯录的主菜单********************\n");
printf("\n\n\t\t 请输入你的选择[ ]\b\b");
scanf("%d",&choice);
switch(choice)
{
case 1:
found();
break;
case 2:
visit();
break;
case 3:
modifymenu();
break;
case 4:
deleted();
break;
case 5:
system("cls");
printf("\n\n\n\n\n\n\n\t\t 谢谢使用此通讯录系统,( ^_^ )/~~拜拜!!\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
exit(0);
default:
menu();
}
}
void found() /*创建通讯录*/
{
system("cls");
printf("\n\t\t**************** 请输入联系人信息 ****************\n");
printf("\n\t\t 输入姓名:");
scanf("%s",&TelInfo[NO].name);
printf("\n\t\t 输入联系电话:");
scanf("%s",&TelInfo[NO].tel);
printf("\n\t\t 输入号码:");
scanf("%s",&TelInfo[NO].);
NO++;
savefile();
printf("\n\t\t 是否继续添加(y/n):[ ]\b\b");
if(getch()=='y')
found();
else
system("cls");
printf("\n\n\n\n\n\n\n\n\t\t\t 已成功保存所有联系人\n\n\t\t\t 请按任意键返回主菜单");
getch();
menu();
}
void savefile()
{
int i;
if((fp=fopen("","wb"))==0)
printf("\n\t\t文件打开失败!\n");
for(i=0;i<NO;i++)
if(fwrite(&TelInfo[i],sizeof(struct record),1,fp)!=1)
printf("\n\t\t写入文件错误!\n");
fclose(fp);
}
void visit() /*游览通讯录*/
{
int i;
system("cls");
if(NO!=0)
{
printf("\n\t\t*************** 以下为通讯录所有信息************");
for(i=0;i<NO;i++)
{
printf("\n\n\t\t %d):",i+1);
printf("\n\t\t 姓 名: %s",TelInfo[i].name);
printf("\n\t\t 联系电话: %s",TelInfo[i].tel);
printf("\n\t\t 号码: %s",TelInfo[i].);
}
printf("\n\t\t************************************************");
}
else
printf("\n\n\n\n\n\n\n\n\n\t\t\t 通讯录中无任何记录");
printf("\n\n\t\t\t 请按任意键返回主菜单进行添加");
getch();
menu();
}
void modifymenu() /*修改通讯录*/
{
int mark=0;
int i,k;
int a=0;
int t=0;
char choice;
char name[20];
struct record modify;
system("cls");
if(NO!=0)
{
printf("\n\n\n\t\t以下为所有联系人的姓名:\n\n");
printf("\t\t************************************************\n\n");
for(i=1;i<=NO;i++)
{
printf("\t\t%s\n",TelInfo[i-1].name);
}
printf("\n\t\t************************************************\n");
printf("\n\t\t请输入您要修改的姓名:");
scanf("%s",name);
system("cls");
for(i=a;i<NO;i++)
{
if(strcmp(TelInfo[i].name,name)==0)
{
k=i;
mark=1;
modify=TelInfo[i];
system("cls");
printf("\n\t\t********** 以下是您将修改的联系人信息 **********");
printf("\n\n\t\t 姓 名: %s",TelInfo[i].name);
printf("\n\t\t 联系电话: %s",TelInfo[i].tel);
printf("\n\t\t 号码: %s",TelInfo[i].);
printf("\n\n\t\t 是否继续?y/n[ ]\b\b");
if(getch()=='n')
menu();
else
{
printf("\n\t\t 选择您要修改的选项:");
printf("\n\n\t\t\t(1)姓 名");
printf("\n\t\t\t(2)联系电话");
printf("\n\t\t\t(3)号码");
printf("\n\t\t\t(4)返 回\n\n");
choice=getch();
switch(choice)
{
case '1':
printf("\n\t\t\t请输入姓 名:");
scanf("%s",TelInfo[i].name);
break;
case '2':
printf("\n\t\t\t请输入联系电话:");
scanf("%s",TelInfo[i].tel);
break;
case '3':
printf("\n\t\t\t请输入号码:");
scanf("%s",TelInfo[i].);
break;
case '4':
modifymenu();
break;
default:
modifymenu();
}
system("cls");
printf("\n\t\t 您的修改结果为:");
printf("\n\n\t\t 姓 名: %s",TelInfo[i].name);
printf("\n\t\t 联系电话: %s",TelInfo[i].tel);
printf("\n\t\t 号码: %s",TelInfo[i].);
printf("\n\n\t\t 确认修改?y/n[ ]\b\b");
if(getch()=='n')
{
TelInfo[i]=modify;
printf("\n\t\t 修改未保存!\n");
}
else
{
printf("\n\t\t 修改成功!\n");
savefile();
}
mark++;
printf("\n\t\t 是否继续修改(y/n)\n");
if(getch()=='y')
modifymenu();
else
menu();
}
}
}
if(mark==0)
{
printf("\n\n\n\t\t\t\t没有该联系人的纪录");
printf("\n\n\t\t\t\t是否继续修改(y/n)[ ]\b\b");
if(getch()=='y')
modifymenu();
}
}
else
{
printf("\n\n\n\n\n\n\n\n\n\t\t\t 通讯录中无任何记录");
printf("\n\n\t\t\t 请按任意键返回主菜单进行添加");
getch();
menu();
}
}
void deleted() /*删除联系人*/
{
int i,j;
int mark=0;
char name[20];
system("cls");
if(NO!=0)
{
printf("\n\n\n\t\t以下为所有联系人的姓名:\n\n");
printf("\t\t************************************************\n\n");
for(i=1;i<=NO;i++)
{
printf("\t\t%s\n",TelInfo[i-1].name);
}
printf("\n\t\t************************************************\n");
printf("\n\t\t 请输入要删除联系人姓名:");
scanf("%s",name);
system("cls");
for(i=0;i<NO;i++)
{
if(strcmp(TelInfo[i].name,name)==0)
{
printf("\n\t\t 以下是您要删除的联系人纪录:");
printf("\n\n\t\t 姓 名: %s",TelInfo[i].name);
printf("\n\t\t 联系电话: %s",TelInfo[i].tel);
printf("\n\t\t 号码: %s",TelInfo[i].);
printf("\n\n\t\t 是否删除(y/n)[ ]\b\b");
if(getch()=='y')
{
for(j=i;j<NO-1;j++)
TelInfo[j]=TelInfo[j+1];
NO--;
mark++;
printf("\n\t\t 删除成功\n");
savefile();
printf("\n\t\t 是否继续删除(y/n)[ ]\b\b");
if(getch()=='y')
deleted();
else
menu();
}
else
menu();
}
continue;
}
if(mark==0)
{
printf("\n\n\n\t\t\t\t没有该联系人的纪录");
printf("\n\n\t\t\t\t是否继续修改(y/n)[ ]\b\b");
if(getch()=='y')
deleted();
}
}
else
{
printf("\n\n\n\n\n\n\n\n\n\t\t\t 通讯录中无任何记录");
printf("\n\n\t\t\t 请按任意键返回主菜单进行添加");
getch();
menu();
}
}
展开阅读全文