通讯录信息管理系统
实训报告
题 目: 通讯录信息管理系统
院 系: 信息科技学院
专 业: 测控技术及仪器
姓 名: toy
学 号: ************
指导教师: ******
日 期: 2012 年 6 月 27 日
桂林电子科技大学信息科技学院
第一章 程序设计的目的和要求
1.1、 课程设计的目的
通过本项课程设计,可以培养独立思考、综合运用所学有关相应知识的能力,能更好地巩固《高级语言程序设计》课程学习的内容,掌握工程软件设计的基本方法,强化上机动手编程能力,闯过理论和实践相结合的难关,更加了解c 语言的好处和其可用性。
通过C 语言课程设计,使学生了解高级程序设计语言的结构,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力,为后续各门计算机课程的学习和毕业设计打下坚实的基础。
1.2、 课程设计的实验环境
该课程设计在设计与实验过程中需要在windows XP系统/windows Vista系统中进行,程序设计要求在visual C++6.0平台中进行,完成代码的编写、编译、调试、测试等工作。
1.3、课程设计的预备知识
在知识方面此课程设计需要掌握C 语言的基本知识,熟练指针、链表等应用,掌握数据库等知识。
在操作方面此课程设计需要清楚windows XP系统/windows Vista系统的操作,熟悉visual C++6.0编码平台。以此可以顺利完成课程设计的编写、编译、调试、测试等工作。
1.3、 课程设计的要求
C 语言程序设计的主要任务是要求学生遵循软件开发过程的基本规范,运用结构化程序设计的方法。所谓结构化程序就是用高级语言表示的结构化算法,结构化程序设计强调程序。
设计风格和程序结构的规范化提倡清晰的结构。这就要求学生把一个复杂问题的求解过
程分阶段进行,每一个阶段处理的问题都控制在人们容易理解和处理的范围内。可以采用自顶向下、逐步细化、模块化设计、结构化编码的方法。
同时为了更好地完成本次程序设计,还要求学生仔细分析自己的选题,深刻了解课题的设计背景,做好课题的需求分析,将项目要完成的功能分析清楚,划分好功能模块,逐个实现。在实际编码过程中,要做到思维严谨,化繁为简,代码简练。
最终学生要按照课程设计的题目要求,分析、设计、编写、调试和测试C 语言程序及编写设计报告。
第二章 需求分析
2.1系统概述
通讯录信息管理系统作为学校管理的一个重要方面,其可变因素多,管理方面繁琐复杂,时间跨度大,再加上其固有的基数大,因而形成了巨大的数据量。以前的人工管理方式处理这样大的数据,不可避免地增加了管理的工作量及复杂程度,使老师、学生和有关管理人员工作繁重、负担重、压力大。并且人为方式固有的不严密性常常带来各种工作中的疏漏,使得复杂度更甚,常常让工作人员感到头痛。
这种人工系统在管理工作中存在很大的弊病。
其一:信息量大,管理人员工作量大,负担重,压力大;且工作繁复,复杂程度高,使管理人员颇感头疼;
其二:人工处理方式由于其固有的不严密性,造成数据处理中的错、漏现象不可避免,数据缺乏正确性,而且增大了工作难度;
其三:由于信息处理量大,信息流动不畅通,反馈时间延长,缺乏实效性;
其四:数据备份、传输、报表、统计等相关工作量大,费时,繁琐,容易出错;
根据现实情况,为了改变原来的信息管理中的不利局面,以适应现代化管理发展,最佳的改进途径就是建立一个通讯录信息管理系统,用计算机实现对信息的搜集、加工、存储等精确处理,从而提高工作效率。
2.2、系统功能需求分析
通讯录信息管理系统,为了替代人工管理而开发的一个软件系统,它代替人工完成对信
息数据的搜集、处理、加工、存储等工作,具有严密性、安全性,大大增大了过往人工管理的准确性,提高了工作效率,减小了工作人员的工作量
通讯录信息管理系统要完成对信息数据的处理,其中包括基本信息的录入、存储。这些基本信息数据构成一个简单的数据库,这是该系统进一步对数据处理的基础。
2.3、系统性能需求分析
通讯录信息管理系统要完成对信息数据的精确处理,因此要具备以下几项功能:
数据录入:数据包括ID 、电子邮件、姓名、电话号码等。大量的数据信息将构成一个基本信息数据库,为进一步对其进行处理做好准备;
数据查询:通讯录信息管理系统在既有信息数据的基础上,要完成对信息的查询。
第三章 系统总体设计
3.1 应用程序名称:通讯录信息管理系统
3.2 应用程序简介:包括应用程序的基本结构、基本内容、运行环境等;
基本结构:
1)密码功能:一开始进入系统,要求用户输入用户名和密码,方能进入主界面;密码用*的形式显示在屏幕上。
2)系统以菜单方式工作具有主控界面, 用户按照主控界面提示选择相应的功能;
3)系统查看功能选择此功能时,列出下列三类选择:
1. 办公类
2. 个人类
3. 商务类
4. 全部显示当选中某个选项时,则显示出此类所有数据中的姓名、电话号码和电子邮件;
4)系统添加功能
用户可以录入一条新记录信息后记录信息(一条记录包括:姓名、电话号码、分类、电子邮件)当录入了重复的姓名或电话号码时,则提示数据录入重复并取消录入;录入的新数据能按递增的顺序自动进行条目编号;
5)系统修改功能
根据用户输入需要修改的姓名,查找到该姓名号对应的记录,若找到该记录,则修改相应字段的值,若未找到该记录,提示用户。
6)系统删除功能
根据用户输入需要删除的人的ID ,查找该条记录,可对此人的相应数据进行删除,并自动调整后续条目的编号。
7)系统拔号功能
在屏幕显示出通信录中所有人的姓名,当选中某个姓名时,屏幕上显示出此人的姓名及电话号码。
8)文件导入功能
从C 盘下TX1.TXT 文件中录入一个通讯录文件。
运行环境:VC++6.0
3.3应用程序的总体设计结构图,主要运行界面的介绍(附主要代码) ;
1)密码功能界面
2)主界面
3)通讯录查看界面
4)通讯录添加功能
5)通讯录修改功能;
6)系统拨号功能;
7) 个人信息简介;
第四章 源程序代码
主要代码:
#include
#include
#include
#include
int cntAddr,i,j;
char in[20];
const char * strFmt="\n%d\t%s\t%s\t%s\t%s\n";
/*输入记录*/
typedef struct ADDRESSD {
int ID;
char name[20];
char phone[20];
char classify[20];
char mail[20];
}ADDRESS;
ADDRESS addrTmp[100],adTmp;
/*导入文件功能*/
int load(ADDRESS adr[])
{
FILE *fp;
if ((fp=fopen("txl.txt" , "r" )) !=NULL)
{
cntAddr =0;
while (fscanf(fp,"%d %s %s %s %s
" , &(adr[cntAddr]. ID),adr[cntAddr]. name,adr[cntAddr]. phone,adr[cntAddr]. classify, adr[cntAddr]. mail) !=EOF)
++cntAddr;
}
fclose(fp);
return cntAddr;
}
void quan(ADDRESS addr[],int length){
for (i=0;i
}
void bangong(ADDRESS addr[],int length){
char *str1=" 办公类" ;
for (i=0;i
}
void geren(ADDRESS addr[],int length){
char *str1=" 个人类" ;
for (i=0;i
}
void business(ADDRESS addr[],int length){
char *str1=" 商务类" ;
for (i=0;i
}
void save(ADDRESS adr[],int length){
FILE *fp;
fp =fopen("c:\\txl.txt", "w" );
for (i=0;i
" ,adr[i]. ID,adr[i]. name,adr[i]. phone,adr[i]. classify,adr[i]. mail);
fclose(fp);
};
int delet(ADDRESS adr[],int length){
printf(" 要修改第几条记录:\n");
scanf("%d", &j);
for (i=j;i
return --length;
};
void rewrite(ADDRESS adr[],int length){
printf(" 要修改第几条记录:\n");
scanf("%d", &j);
printf(" 请输入ID:\n");
scanf("%d", &i);
adr[j]. ID =i;
printf(" 请输入姓名:\n");
scanf("%s",in);
strcpy(adr[j]. name,in);
printf(" 请输入电话号码:\n");
scanf("%s",in);
strcpy(adr[j]. phone,in);
printf(" 请输入分类:\n");
scanf("%s",in);
strcpy(adr[j]. classify,in);
printf(" 请输入电子邮件:\n");
scanf("%s",in);
strcpy(adr[j]. mail,in);
};
int add(ADDRESS adr[],int length){
printf(" 请输入ID:\n");
scanf("%d", &i);
adr[length]. ID =i;
printf(" 请输入姓名:\n");
scanf("%s",in);
strcpy(adr[length]. name,in);
printf(" 请输入电话:\n");
scanf("%s",in);
strcpy(adr[length]. phone,in);
printf(" 请输入分类:\n");
scanf("%s",in);
strcpy(adr[length]. classify,in);
printf(" 请输入电子邮件:\n");
scanf("%s",in);
strcpy(adr[length]. mail,in);
return ++cntAddr;
};
/*查看记录功能*/
void chakan(ADDRESS adr[],int length)
{
int choice;
menu1:
system("cls" );
printf("\n\n\n\n *************************通讯录信息管理系统(信息查看)*******************\n\n");
printf(" 1. 办公类\n\n");
printf(" 2. 个人类\n\n");
printf(" 3. 商务类\n\n");
printf(" 4. 全部显示通讯录信息\n\n");
printf(" 0. 返回上一级菜单\n\n");
printf("
********************************************************************\n"); printf(" 请选择(0~4)\n ");
scanf("%d", &choice);
switch (choice)
{
case 1:
bangong(adr,length);
printf(" 请按任意键返回...\n");
system("pause" );
break ;
case 2:
geren(adr,length);
printf(" 请按任意键返回...\n");
system("pause" );
break ;
case 3:
business(adr,length);
printf(" 请按任意键返回...\n");
system("pause" );
break ;
case 4:
quan(adr,length);
printf(" 请按任意键返回...\n");
system("pause" );
break ; /*显示全部记录*/
case 0: return ;
printf(" 请按任意键返回...\n");
system("pause" );
}
goto menu1;
}
int enter(ADDRESS adr[]){
cntAddr =0;
printf(" 请按次序输入数据,结束按CTRL+z:\n");
while (1){
printf(" 请输入ID:\n");
if (scanf("%d", &i) ==EOF) break ;
adr[cntAddr]. ID =i;
printf(" 请输入姓名:\n");
if (scanf("%s",in) ==EOF) break ;
strcpy(adr[cntAddr]. name,in);
printf(" 请输入电话:\n");
if (scanf("%s",in) ==EOF) break ;
strcpy(adr[cntAddr]. phone,in);
printf(" 请输入分类:\n");
if (scanf("%s",in) ==EOF) break ;
strcpy(adr[cntAddr]. classify,in);
printf(" 请输入电子邮件:\n");
if (scanf("%s",in) ==EOF) break ;
strcpy(adr[cntAddr]. mail,in);
++cntAddr;
}
return cntAddr;
};
/*通讯录信息修改功能*/
void xiugai(ADDRESS adr[],int length)
{
int choice;
menu2:
system("cls" );
printf("\n\n\n\n *************************通讯录信息管理系统(信息修改)*******************\n\n");
printf(" 1. 删除记录\n\n");
printf(" 2. 修改记录\n\n");
printf(" 3. 添加记录\n\n");
printf(" 0. 返回上一级菜单\n\n");
printf("
********************************************************************\n"); printf(" 请选择(0~3)\n ");
scanf("%d", &choice);
switch (choice)
{
case 1:
length =delet(adr,length);
save(adr,length);
printf(" 请按任意键返回...\n");
getchar();
break ; /*删除记录*/
case 2:
rewrite(adr,length);
save(adr,length);
printf(" 请按任意键返回...\n");
getchar();
break ; /*修改记录*/
case 3:
length =add(adr,length);
save(adr,length);
printf(" 请按任意键返回...\n");
getchar();
break ; /*插入记录*/
case 0: return ;
}
goto menu2;
}
/*拨号功能*/
void bohao(ADDRESS addr[],int length){
printf(" 请输入姓名:\n");
scanf("%s", &in);
for (i=0;i
};
/*关于*/
void about()
{
system("color 87");
system("cls" );
printf("\n\n\n\n 《通讯录信息管理系统》\n\n\n");
printf(" *****************************************\n\n\n");
printf(" 作者个人信息\n\n\n");
printf(" *****************************************\n\n\n");
printf(" 请按任意键返回主菜单..." );
system("pause" );
}
void mima()
{
int i,k=0;
char username[15],pwd[6];
system("color 87");
for (i=0;i
{
system("cls" );
printf("\n\n\n\n\n ★欢迎使用通讯录信息管理系统★\n\n\n\n\n");
printf(" 学号:1053300104\n\n");
printf(" 2012.06.27\n\n\n\n\n\n");
printf("\n请输入用户名:");
gets(username);
printf("\n请输入6位密码:");
gets(pwd);
if ((strcmp(username,"1053300104" ) ==0) &&(strcmp(pwd,"123456" ) ==0)) {
printf("\n您已经成功登录\n");
k=1;
for (i=0;i
{
printf("." );
Sleep(100);
}
system("cls" );
break ;
}
else
printf("\n用户名或密码无效 请重新输入:\n");
continue ;
}
if (k==0)
{ printf("\n连续输入错误3次 将退出程序\n");
Sleep(200);
exit(0);
}
Sleep(200);
}
/******主函数*******/
void main()
{
int choice;
int length; /*保存记录长度*/
ADDRESS adr[100] ; /*定义结构体数组*/
mima();
menu:
system("color 87");
system("cls" );
printf("\n\n\n\n *************************通讯录信息管理系统(系统菜单)*******************\n\n");
printf(" 请选择以下通讯录管理功能:\n\n");
printf(" 1. 通讯录信息查看\n\n");
printf(" 2. 通讯录信息添加\n\n");
printf(" 3. 通讯录信息修改\n\n");
printf(" 4. 系统拔号功能\n\n");
printf(" 5. 通讯录文件导入\n\n");
printf(" 6. 作者简介\n\n");
printf(" 0. 退出通讯录管理系统\n\n");
printf("
********************************************************************\n"); printf(" 请选择(0~6)\n ");
scanf("%d", &choice);
switch (choice)
{
case 1: chakan(adr,length);break ; /*查看记录*/
case 2: length=enter(adr);
save(adr,length);
printf("\n 请按任意键返回...\n");
system("pause" ); break ; /*输入记录*/
case 3: xiugai(adr,length);break ; /*通讯录信息修改功能*/
case 4: bohao(adr,length);
printf(" 请按任意键返回...\n");
system("pause" );
break ; /*拨号功能*/
case 5: length=load(adr);
printf(" 您已经成功的导入文件到通讯录!\n");
printf(" 请按任意键返回...\n");
system("pause" ); break ; /*导入文件功能*/
case 6: about();break ; /*关于*/
case 0: return ; /*如返回值为则程序结束*/
}
goto menu;
}
第五章 实训心得体会
5.1 得意之处:重点介绍整个应用程序中自已认为最满意、最得意的地方
系统查看功能当选中某个选项时,则显示出此类所有数据中的姓名、电话号码和电子邮件。在添加自己设计的界面时候,显示个人信息,实在是让人身心愉悦,更加加强了自己的知识产权保护力量,为以后的事业发展,奠定了基础,有利于我们更加自主创新。实在是获益匪浅。
5.2 设计实践过程中的自我感受
通讯录信息管理系统是一种典型的信息管理系统,该系统的生成极大方便了个人对通讯信息的管理。该系统中可以快速查找,添加,拨号联系等功能,适应了现代化都市快节奏的生活。这需要我们在熟练掌握C 语言的基础知识,数据类型(整型,实型,字符型,数组,结构等);运算类型(算数运算,逻辑运算,自增自减运算,赋值运算等);程序结构(顺序结构,判断选择结构,循环结构等);大程序的分解方法(即函数的使用)等。进一步掌握各
种函数的应用以及文件的读写操作等。在编写通讯录系统代码的过程中,实现菜单设计,使用数据文件保存和修改,应用结构体和指针。本次实习中遇到了很多以前没有遇到过的问题,也曾想过要放弃,但看到那些同学都在那认真的写程序,给了我继续的信心。在同学的帮助下,我顺利的结束了本次实习,让我知道原来凭借自己努力取得的成功会让自己这么欣慰,也让我知道了友谊和团结的重要性。以此来实现通讯录性信息的生成,录入,查询,删除,排序等其他功能。通过这次实训,让我对C 语言知识进一步理解和掌握。培养我们在计算机软件开发,理论计算,查阅资料等方面的能力使按我们逐步树立正确的设计思想。加强理论联系实际,培养科学严谨,实事求是的作风和勇于探索的创新精神。加深对该课程基础知识和基本理论的理解和掌握,培养综合所学知识独立分析和解决问题的能力。本次C 语言的实习课让我对C 语言的学习又有了更深入的了解,也让我更深刻地领悟到了“实践出真理”这个道理,在上机实践过程中学到的知识远远超过了在课堂上十几周学到的,学校组织的这次实习让我们这些实践知识匮乏的大学生增添了许多社会经验,为我们将来走上工作岗位其了不小的铺垫作用。
参考文献
(1)谭浩强 《C 语言程序设计》 清华大学出版社
(2)谭浩强《C 程序设计与上机指导》 清华大学出版社