文档库 最新最全的文档下载
当前位置:文档库 › C语言课程设计报告—手机通讯录管理系统

C语言课程设计报告—手机通讯录管理系统

课程设计

课程名称C语言程序设计课程设计

题目名称手机通讯管理系统

专业班级15计算机科学与技术(对口)

学生姓名黄淑雅程香香王兴如宁敏南

陈静娴

学号51502121055 51502121001 51502121031 51502121035

51502121058

指导教师刘娟

二○一六年五月三十日

蚌埠学院计算机科学与技术系课程设计任务书

蚌埠学院计算机科学与技术系本科课程设计成绩评定表

目录

摘要............................................ 错误!未定义书签。第一章绪论.. (6)

1.1. 课程设计目的和内容概述 (6)

1.2. 题目手机通讯录管理系统。 (7)

第二章程序分析 (7)

2.1. 总体设计 (7)

2.2. 详细设计 (8)

2.3. 总流程图 (8)

第三章模块介绍和总体实现 (11)

3.1. 构建结构体,写入文件 (11)

3.2. 构造函数与模块 (12)

3.3. 主函数调用各个模块 (14)

第四章调试与测试 (17)

总结与心得 (22)

附录 (23)

程序源代码 (23)

参考文献 (29)

手机通讯录管理系统

通讯录管理系统是典型的管理系统(MIS),其开发主要包括数据库的建立和维护前端应用程序的开发两个方面。对于前者要求建立起数据库一致性和完整性强、数据安全性好的库。而对于后者则要求应用程序功能完备,易使用等特点。经过分析,我们使用MICROSOFT公司的VISUAL,BASIC开发工具,利用其提供的各种面向对象的开发工具,尤其是数据窗口这一能方便而简洁操纵数据库的智能化对象,首先在短时间内建立系统应用原型,然后,对初始原型系统进行需求迭代,不断修正和改进,直到形成用户满意的可行系统。

本文设计一个简易的手机通讯录管理系统。该题目要求在熟练掌握C语言的基本知识:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数的使用)等。进一步掌握各种函数的应用,包括时间函数、绘图函数,以及文件的读写操作等。其中结构体,函数的调用,算法的设计是尤为重要的。

关键词:通讯录管理信息系统

1.第一章绪论

1.1.课程设计目的和内容概述

目的:加深对《C语言》课程所学知识的理解,进一步巩固C语言编程方法。学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备解决综合性实际问题的能力,加强动手能力。

内容:设计一个简易的手机通讯录管理系统。该题目要求在熟练掌握C语言的基本知识:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数的使用)等。其中结构体,函数的调用,算法的设计是尤为重要的。

1.2.题目手机通讯录管理系统。

[问题描述]

该系统模拟手机通讯录管理系统,实现对手机中的通讯录进行管理

[基本要求]

要能提供以下几种功能:

(1)查看功能:选择此功能时,列出下列三类选择:

A:办公类B:个人类C:商务类

(2)当选中某类时,显示出此类所有数据中的姓名和电话号码

(3)添加数据功能:能录入新数据,每个结点包括:姓名,电话号码,分类(可能选项有:w为办公类p为个人类b为商务类),电子邮件。例如: 杨春135******** 商务类chuny@https://www.wendangku.net/doc/eb14647936.html,

当录入重复的姓名和电话号码时,则提示数据录入重复并取消录入;当通讯录中超过50条信息时,存储空间已满,不能再录入新数据;录入的新数据能按递增的顺序自动进行条目编号。

(4)修改功能:选中某个人的姓名时,可对此人的相应数据进行修改。

(5)删除功能:选中某个人的姓名时,可对此人的相应数据进行删除,并自动调整后续条目的编号。

2.第二章程序分析

2.1.总体设计

首先,因为每个个体有多种信息,所以要建立结构体来储存和整合各个信息。然后利用模块来分别实现程序的各个功能。各个模块用函数来实现。在通过主函数来判断输入字母,从而调动函数,实现所需功能。最后将输入的文件保存在文件里,以便重复使用。

2.2.详细设计

根据功能需要建立显示,添加,查看,删除,修改,保存五个模块。在模块中通过调用各个函数来实现功能。

2.3.总流程图

1.显示:显示通讯录记录

2.添加:添加通讯录记录

3.删除:删除通讯录记录

4.查询:查询通讯录记录

5.修改:修改通讯录记录

3.第三章模块介绍和总体实现3.1.构建结构体,写入文件

FILE *fp;

int i;

struct address

{ char a[40]; //email地址

};

struct ffriend

{ int num;

char name[20];

char kind[20];

long telephone;

struct address address;

friends[50];

void Load()

{

int j;

long k;

fp=fopen("friend.txt","a+"); //打开文件friend.txt

if(fp!=NULL)

{

for(i=1;i<50;i++)

{

j=fgetc(fp);

if(j==EOF) //判断是否到了文件尾

return;

k=i-1;

fseek(fp,k*sizeof(struct ffriend),SEEK_SET);

fread(&friends[i],sizeof(struct ffriend),1,fp);//从文件中读取一条记录

}

}

else

{

fp=fopen("friend.txt","w");

i=1;

}

3.2.构造函数与模块

构造显示模块,增加模块,删除模块,修改模块,查询模块。程序如下:

void Show(int j)

{

system("cls"); //实现分屏操作的函数

printf("\n\n\t编号-Nnumber: %3d",friends[j].num);

printf("\n\t姓名-Name:%-20s",friends[j].name);

printf("\n\t性别-kind:%s",friends[j].kind);

printf("\n\t联系电话-Telephone:%-13ld",friends[j].telephone);

printf("\n\temail-address:%-40s",friends[j].address.a);

}

void Append(int j)

system("cls");

friends[j].num=j;

printf("\n\t\t\t序号-Number : %d",j);

printf("\n\t\t\t姓名-Name : ");

scanf("%s",friends[j].name);

printf("\t\t\t类别-kind : ");

scanf("%s",&friends[j].kind);

printf("\t\t\t联系电话-telephone : ");

scanf("%ld",&friends[j].telephone);

while(friends[j].telephone<0||friends[j].telephone>16000000000)

{

printf("电话号码不合法!请重新输入 : ");

scanf("%ld",&friends[j].telephone);

}

printf("\t\t\temail-Address : ");

scanf("%s",friends[j].address.a);

getchar();

}

void Delete()

{

int k;int j;

system("cls");

printf("\n\tDelete 序号-Number : ");

scanf("%d",&k);

if(k<=i)

{

for(j=k;j

{

strcpy(friends[j].name,friends[j+1].name); /*交换元素内容*/

strcpy(friends[j].kind,friends[j+1].kind);

friends[j].telephone=friends[j+1].telephone;

strcpy(friends[j].address.a,friends[j+1].address.a);

}

i--;

}

else

{

printf("输入的序号太大!");

}

}

void Modify(int j)

system("cls");

Append(j);

}

void Save()

{

int i,j;

system("cls");

printf("\n\n\t\t请耐心等待,信息正在保存!\n");

printf("\n\n\n\n\t\t\tSaving");

for(i=0;i<20;i++)

{

Sleep(300);

printf(".");

}

printf("\n\n信息已经保存成功!\n");

fp=fopen("friend.txt","w");

for(j=1;j<=i;j++)

{

fwrite(&friends[j],sizeof(struct ffriend),1,fp);

}

fclose(fp);

}

3.3.主函数调用各个模块

用switch语句判断输入者要使用的功能,然后调用函数,模块实现功能。程序如下:

void main()

{

int j;char a;char x;

char grade;

char searchkind[20];

char searchname[20];

i--;

system("cls");

do

{

printf("\n\n\t\t\t=========================================\n"); printf("\t\t\t\t手机通讯录 \n");

printf("\t\t\t\t功能选择 \n"); //输出主界面

printf("\t\t\t=========================================\n");

printf("\t\t\t A.查看 *\n");

printf("\t\t\t B.增添 *\n");

printf("\t\t\t C.删除 *\n");

printf("\t\t\t D.查询 *\n");

printf("\t\t\t E.修改 *\n");

printf("\t\t\t F.保存 *\n");

printf("\t\t\t=========================================\n");

printf("\t\t\n请选择(Choice)\n\n\t\t注:输入a~h或A~H的字母:");

scanf("%c",&grade);

switch(grade) //用switch判断使用者要选择的功能

{

case 'a':

case 'A': j=0;

while(getchar()!=0x1b&&j<=i)

{

Show(j++);

printf("\n\n请按回车键继续!");

}

while(getchar()==0x1b||j>i)

{

printf("\n\t空文档,无任何记录-Empty Note\n");

printf("\n\n请按回车键继续!");

getchar();

break;

}

printf("\n\t\t\t\t\t\t\t此次操作结束");

printf("\n\t------------------------------------------------------------\t\t\n");

break;

case 'b':

case 'B':

while(i<=50)

{

i++;

Append(i);

printf("\t是否继续增加?(y/n)");

a=getchar();

if(a=='n')

break;

}

if(i==51)

printf("\n\t文档已满,无法增加记录-note full");

printf("\n\t\t\t\t\t\t\t此次操作结束");

printf("\n\t------------------------------------------------------------\t\t\n");

getchar();

break;

case 'c':

case 'C':

Delete();

if(i<1)

printf("\n没有记录-No records\n");

printf("\n\n请按回车键继续!");

getchar();

getchar();

printf("\n\t\t\t\t\t\t\t此次操作结束");

printf("\n\t------------------------------------------------------------\t\t\n");

break;

case 'd':

case 'D':

system("cls");

printf("\n\t请输入要查询记录的相关类别: p.个人类 b.商务类 w.办公类");

scanf("%s",searchkind);

for(j=0;j<=i;j++)

{

if(strcmp(searchkind,friends[j].kind)==0)

{

Show(j);

}

}getchar();

break;

case 'e':

case 'E':

printf("\n\t请输入要修改记录的相关姓名:");

gets(searchname);

scanf("%s",searchname);

for(j=0;j<=i;j++)

{

if(strcmp(searchname,friends[j].name)==0)

{

Modify(j);

}

}

if(i<1)

{ printf("\n 没有您所要修改的记录-No records");

printf("\n 请按回车键继续!");

getchar();

getchar();

}

printf("\n\t\t\t\t\t\t\t此次操作结束");

printf("\n\t------------------------------------------------------------\t\t\n");

break;

case 'f':

case 'F':

system("cls");

Save();

getchar();

printf("\n\t\t\t\t\t\t\t此次操作结束");

printf("\n\t------------------------------------------------------------\t\t\n");

break;

default:

printf("\n\t输入有误,请输入正确的序列号!");

printf("\n请按回车键继续!");

getchar();

printf("\n\t\t\t\t\t\t\t此次操作结束");

printf("\n\t------------------------------------------------------------\t\t\n");

}

}while(1);

}

上述三部分实现整个程序的功能。

4.第四章调试与测试

1 主界面:

2 按顺序添加数据:

3 按顺序查看:

4 查询,输入要查询的类别:

5 显示该种类的所有信息

6 删除(按序号):

7 修改,输入要修改的的人名:

相关文档
相关文档 最新文档