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

时间:2024.4.14

目 录

摘 要 ........................................................................................................... 2

第一章 绪 论 .......................................................................................... 3

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

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

第二章 程序分析 .................................................................................... 4

2.1. 总体设计 ····················································································· 4

2.2. 详细设计 ····················································································· 4

2.3. 总流程图 ····················································································· 4

第三章 模块介绍和总体实现 .................................................................. 7

3.1. 构建结构体,写入文件 ····························································· 7

3.2. 构造函数与模块 ········································································· 8

3.3. 主函数调用各个模块 ······························································· 10

第四章 调试与测试 ................................................................................ 13

总结与心得 .............................................................................................. 18

附录 ........................................................................................................... 19

程序源代码 ························································································ 19

参考文献 ···························································································· 25

C语言课程设计报告

摘 要

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

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

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

2

C语言课程设计报告

1. 第一章 绪 论

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

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

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

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

[问题描述]

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

[基本要求]

要能提供以下几种功能:

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

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

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

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

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

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

(5)删除功能:选中某个人的姓名时,可对此人的相应数据进行删除,并自动调 3

C语言课程设计报告

整后续条目的编号。

2. 第二章 程序分析

2.1. 总体设计

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

2.2. 详细设计

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

2.3. 总流程图

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

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

4

C语言课程设计报告

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

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

5

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

C语言课程设计报告

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

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

6

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

C语言课程设计报告

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

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

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;

}

7

C语言课程设计报告

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)

{

8

C语言课程设计报告

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<i+1;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)

{

9

C语言课程设计报告

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");

10

C语言课程设计报告

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此次操作结束");

11

C语言课程设计报告

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);

}

}

12

C语言课程设计报告

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 主界面:

13

C语言课程设计报告

2 按顺序添加数据:

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

3 按顺序查看:

14

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

C语言课程设计报告

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

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

5 显示该种类的所有信息

15

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

C语言课程设计报告

6 删除(按序号):

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

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

16

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

C语言课程设计报告

8 输入新的数据

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

9 保存:

17

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

C语言课程设计报告

总结与心得

这次课程设计是大学以来的第一次课程设计。也是锻炼我们动手能力的一次很好的机会。但是,万事开头难。这次C语言的程序设计,对于我来说是一个挑战。

刚开始几乎不知道该从何下手。后来通过一些简单题目的编写才有了思路。在整个程序的编写过程中在很多地方都遇到了困难。例如,对一些算法的设计有很大漏洞等。后来通过翻阅很多书籍,以及同学的讨论下,在克服了重重的困难后,终于成功的运行了课程设计所要求的程序。这次程序设计是在C语言程序的思想下第一次整体完成的程序设计,所以还有很多的不完美的地方,希望老师予以指出和改正。

这次的课程设计虽然一些模块,函数的程序是参照书上和网上完成的。但大部分还是自己编写和修改的。所以这次的程序设计让我受到了很大锻炼,也有了很多感悟。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学到的理论知识与实践相结合起来,从理论中得出结论,将结论辅助与理论,才能真正学到知识并写出有用的程序来为他人服务,更为社会服务,所以提高自己的实际动手能力和独立思考的能力是十分重要的。同时通过这次设计,也让我体验到了编程的的乐趣。

总之,这次的课程设计是一次宝贵的经验,它不仅锻炼了我动手的能力,也锻炼了我克服困难,持之以恒的精神。既收获了知识,又磨练了意志。我想这第一次的课程设计必将成为我人生道路上一段美好的回忆。

18

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

C语言课程设计报告

附录

程序源代码

#include <stdlib.h>

#include <string.h>

#include <conio.h>

#include <stdio.h>

#include <dos.h>

#include <windows.h>

#include <time.h>

void Menu();

FILE *fp;

int i;

struct address

{ char a[40];

};

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+");

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); }

19

C语言课程设计报告

}

else

{

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

i=1;

}

system("cls");

}

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);

20

C语言课程设计报告

if(k<=i)

{

for(j=k;j<i+1;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);

}

void main()

{

int j;char a;char x;

21

C语言课程设计报告

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)

{

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':

22

C语言课程设计报告

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();

23

C语言课程设计报告

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);

24

C语言课程设计报告

}

参考文献

[1]谭浩强.编著.C程序设计.北京:清华大学出版社,1991

[2]谭浩强.编著.C程序设计题解与上机指导.北京:清华大学出版社,1992

[3]潭浩.田淑清编著.PASCAL语言程序设计〔第二版〕.北京:高等教育出版社,1998

[4]王敬华,林萍,.陈静. C语言程序设计[M]. 北京: 清华大学出版社

[5]Herbert Schildt. 著戴健鹏译 .C语言大全〔第二版〕.北京:电子工业出版社,1994

25

更多相关推荐:
c课程设计报告书——通讯录管理系统

C语言课程设计课程设计报告题目学号姓名年级专业指导教师完成日期安徽师范大学物理与电子信息学院CollegeofPhysicsandElectronicInformationAnhuiNormalUniversi...

c++课程设计总结报告 通讯录管理系统

源代码includeltiostreamgtincludeltstringgtincludeltiomanipgtincludeltfstreamgtincludeltconiohgtincludeltcstd...

手机通讯录管理系统课程设计报告模板

山东工商学院信电学院高级语言程序设计课程设计报告高级语言程序设计课程设计报告题目手机通讯录管理系统专业电子信息工程班级电子112学号姓名指导教师日期20xx年7月9日至20xx年7月14日山东工商学院信电学院山...

通讯录管理系统课程设计报告

设计课题题目一课程设计目的与要求1课程设计目的1综合运用之前所学知识选择控制循环控制数组函数指针结构体和文件等来完成一个简单的信息管理程序的设计2充分体现和体会函数在程序设计中的必要性和实用性并反映主函数mai...

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

目录摘要2第一章绪论311课程设计目的和内容概述312题目手机通讯录管理系统3第二章程序分析421总体设计422详细设计423总流程图4第三章模块介绍和总体实现731构建结构体写入文件732构造函数与模块833...

个人通讯录管理系统课程设计报告示例

重庆科技学院课程设计报告院系电子信息工程学院专业班级学生姓名学号设计地点单位设计题目完成日期20xx年3月5日指导教师评语成绩五级记分制指导教师签字重庆科技学院课程设计报告重庆科技学院课程设计任务书设计题目个人...

c语言个人通信录管理系统课程设计报告

高级语言程序设计报告个人通信录管理系统院系班级成员时间通信与信息工程学院杨文刚1107020xx020xx年7月2日基于链表的个人通信录管理系统课程设计任务书目录1设计目的12总体设计23详细设计34程序调试与...

个人通讯录管理系统课程设计报告示例

重庆科技学院个人通讯录管理系统课程设计报告重庆科技学院课程设计报告院系电气与信息工程学院班级计科普1001学生姓名刘静学号20xx441674设计地点单位计算机自主学习中心设计题目个人通讯录管理系统完成日期20...

C语言课程设计报告(学生通讯录管理系统设计)

课程设计报告课程学号姓名班级教师时间本科高级语言程序设计1310411031秦钱军20xx级计算机科学与技术冯凤20xx年1月计算机科学与技术系123456789附录includeltstdiohgtinclu...

通讯录管理系统设计报告

C语言通讯录管理系统通讯录管理系统学生姓名学院计算机与通信工程学院班级班学号摘要本课程设计主要是一个简单的通讯录管理系统通过程序中的菜单编号实现对数据的添加修改删除等操作在本课程设计中系统开发平台为Window...

java课程设计(通讯录管理系统)

合肥学院计算机科学与技术系课程设计报告20xx20xx学年第二学期课学学专指业导班教生姓程面向对象课程设计通讯录程序XXXXXXXXXXX名号级师课程设计名称20年月目录一设计题目1二设计要求1三总体设计131...

通讯录管理系统课程设计报告书(C语言)

C语言课程设计通讯录管理系统学号120xx1011326专业班级计应一班姓名张文玲一设计课程题目通讯录管理系统二设计任务分析设计题目及要求1包含的功能信息至少包含编号姓名年龄电话通讯地址电子邮箱等2能够提供添加...

通讯录管理系统课程设计报告(29篇)