重庆科技学院
课程设计报告
院(系):_电子信息工程学院_ 专业班级:
学生姓名: 学 号:
设计地点(单位):_ _____________
设计题目:______ _____________
完成日期: 20##年 3月 5日
指导教师评语: _______________________________________
_________________________________________________________________________________________________________________________________________________________________________________________________________ __________ _
成绩(五级记分制):______ __________
指导教师(签字):________ ________
重庆科技学院
课程设计任务书
设计题目:个人通讯录管理系统
教研室主任: 指导教师: 20##年 2 月27 日
摘要
本次课程设计的题目是个人通讯录管理系统,要求在磁盘中以二进制文件的形式存储人员的姓名、年龄、性别等基本信息,并运用程序将磁盘文件中的个人基本信息进行查询、修改和删除等。
我编写的程序从整体上看可分为五大部分,分别是“添加”、“查询”、“修改”、“删除”和“全部显示”。其中添加信息是将人员的基本信息输入并以二进制文件的形式保存在文件中,当添加完所要输入的个人通讯信息后继续选择其它功能;若要对文件中存储的个人通讯信息进行查询、修改和删除等时,则可按照程序提示分别进行。
关键词:通讯信息、添加、查询、修改、删除、全部显示。
目录
1 设计内容与要求... 1
1.1 设计内容... 1
1.2 设计要求... 1
2 概要设计... 2
2.1 信息的存储... 2
2.2个人通讯信息的设计... 2
2.3主函数设计... 2
2.4信息添加的设计... 2
2.5信息查询的设计... 3
2.6信息删除的设计... 3
2.7信息修改的设计... 3
2.8 信息显示的设计... 3
3 详细设计... 4
3.1 主函数... 4
3.2信息输入... 6
3.3信息查询... 7
3.4信息删除... 7
3.4信息修改... 8
3.4信息显示... 9
4 调试分析... 10
4.1 问题解决... 10
5测试结果... 11
5.1文件输入... 11
输入个人通讯信息,运行结果如下:... 11
.. 11
5.2查询结果... 12
5.3 修改结果... 13
5.4 删除结果... 14
5.5 全部显示结果... 14
总结... 15
参考文献... 16
致谢... 17
附录... 18
1 设计内容与要求
1.1 设计内容
建立一通讯录,输入姓名、电话号码、住址等信息,然后对通信簿进行显示、查找、添加、修改及删除。
系统所涉及的信息以二进制文件的形式保存在磁盘上。
1.2 设计要求
进一步掌握利用C语言进行程序设计的能力;进一步理解和运用结构化程序设计的思想和方法;初步掌握开发一个小型实用系统的基本方法;学会调试一个较长程序的基本方法;学会利用流程图表示算法。
根据题目要求,运用所学知识,完成设计和实现工作,并按照书写规范,撰写课程设计报告
2 概要设计
2.1 信息的存储
运行编写好的程序,通过提示,输入人员的姓名、性别、年龄和电话等信息,再根据提示反复输入,并以二进制文件形式保存。
2.2个人通讯信息的设计
需定义一个结构体类型,用来表示学生的各种信息,如下。
typedef struct Man{
char Name[12];
char Sex[4];
char Old[4];
char Mobil[12];
char Tel[12];
char Address[16];
char QQ[12];
char Email[16];
char Sort[12];
}man;
2.3主函数设计
其功能实现从屏幕输出6个选择: 1添加信息2. 查询信息3.删除信息4.修改信息5.显示信息6.退出程序,从中选择任一一个来进行个人通讯信息的管理。
2.4信息添加的设计
此模块通过void TianJia( );函数实现。从键盘输入个人通讯信息,以二进制文件将这些信息写入文本。先建立一个文件指针(FILE *fp),打开文件,输入信息,写入文件,关闭文件。
2.5信息查询的设计
此模块通过void ChaXun()。从键盘输入要查询的人员姓名,程序将从文件中读出先前出入的个人通讯信息,再从屏幕上输出您要查找的信息。
2.6信息删除的设计
此模块通过void ShanChu( )函数实现。从屏幕上输出所要删除的人员姓名,根据操作提示,然后删除信息。
2.7信息修改的设计
此模块通过void XiuGai( )函数实现。从屏幕上输出:请输入您要修改的人员姓名,然后显示要修改的人员信息,并根据提示继续输入需修改后的信息,这些信息将以二进制形式写入文本。这需要打开文件读出原信息,再将修改后的所有通讯信息一起写入文件并保存。
2.8 信息显示的设计
此模块通过void XianShi( )函数实现,只需选择显示信息菜单即可显示全部通讯录信息。
3 详细设计
3.1 主函数
(1)函数说明
先从屏幕上显示6个选项,以供选择。第一个选项调用了TianJia函数、第二个调用了ChaXun函数,第三个选项调用了ShaChu函数,第四个调用了XiuGai函数,第五个选项调用XianShi函数,从而实现学生信息的添加、查询、删除、修改、 显示 等功能;最后一个选项实现退出的功能。
(2)流程图
3.2信息输入
(1) 函数说明
此函数用于输入个人通讯信息。先定义一个文件指针FILE(*fp),然后用fopen()函数打开文件,从键盘输入数据,用fwrite函数将信息写入到文件中,最后用fclose()函数关闭文件。屏幕上会显示“请输入y继续其他功能”您可以根据您的需要进行选择然后进行下面的操作。
(2)流程图
3.3信息查询
(1) 函数说明
此函数用于查找学生信息,用fopen()函数打开文本文件,用fread函数从文件中将原有信息读出,屏幕上会显示“请输入您要查找的人员姓名”,从键盘输入,屏幕上会显示您要查找的学生信息,最后用fclose()函数关闭文件。
(2)流程图
3.4信息删除
(1) 函数说明
此函数用于删除个人通讯信息,用fopen()函数打开文本文件,读出原有信息并输出到屏幕,从屏幕上输出提示“请输入要删除的人员姓名”,输入后显示该信息即被删除。最后用fclose()函数关闭文件。
(2)流程图
3.4信息修改
(1)函数说明
此函数用于修改信息。用fopen()函数打开文本文件,读出原有信息并输出到屏幕,此时屏幕上会显示"请输入您要修改的人员姓名:",从键盘输入姓名,屏幕上将会显示要修改的信息 用fwrite()函数将现在的信息写入到磁盘中,最后用fclose()函数关闭文件。
(2) 流程图
3.4信息显示
(1)函数说明:
此函数用来打印学生全部信息,用fopen( )函数打开文本文件,读出原所有信息并输出到屏幕,最后用fclose()函数关闭文件。
(2) 流程图:
4 调试分析
4.1 问题解决
首先,由于所要将输入通讯信息要以二进制文件的形式进行存储,所以在添加信息和查询信息就遇到了麻烦,读取信息的时候显示的全部是乱码,一个是因为在输入和读取“年龄”、“电话”等信息的时候是以%d的形式,二是因为没有运用到”rb+”对信息进行存储和输出。
在同学的帮助下对程序进行了反复的修改,最终达到了以二进制存储和读取的目的。
其次就是在对存储的信息进行删除的时候是以空白来覆盖的,而在全部显示存储的信息时用来覆盖的空白信息也被读取,最后是在仔细查询课本的时候,按照书上的方法进行了修改。
最后就是在全部显示文件中存储的信息时,而最后一个信息会被读取两次,最终我运用的计数器对文件中存储的信息量统计,而对读取信息的次数进行控制,以达到全部显示的目的。
5测试结果
5.1文件输入
输入个人通讯信息,运行结果如下:
5.2查询结果
查询个人通讯信息,运行结果如下:
5.3 修改结果
修改个人通讯信息,运行结果如下:
5.4 删除结果
删除个人通讯信息,运行结果如下:
5.5 全部显示结果
删除个人通讯信息,运行结果如下:
总结
本次课程设计的要求是建立一通讯录,输入姓名、电话号码、住址等信息,然后对通信簿进行显示、查找、添加、修改及删除。虽然我对该实验的内容及要求都有所了解,在对程序的大体规划上还很清楚,但是在编写程序时思维却很混乱,由于在对个人通讯信息的输入、查询、修改和删除中要求逻辑思维严密谨慎,所以在本次程序的编写中不能独立完成,而是在同学的帮助下,对每一个步骤的深入思考才得出了结果。
通过这次的专题实验让我意识到,自己在该门学科中还有很多不懂的地方,其主要原因是上机操作太少,对一些细节考虑还不够全面,今后我会努力学习本课程,要求自己能熟练掌握程序的编写。
参考文献
[1]C程序设计经典教程,
[美]Deitel,H.M.,[美]Deitel,P.J.著,清华大学出版社,2006
[2] Windows程序设计,
[美] Charles Petzold 著,北京大学出版社,2004
致谢
我要感谢老师对我们的认真负责的教导,在我们与到问题不理解时能构给我们耐心的讲解,并且在学习该专业课是对我们的要求,迫使我们在平日里抓紧时间学习。还要感谢学校为我们提供了良好的学习环境和设备,让我们能够更好的学习计算机方面的知识。以及在平日的学习中同学们对我的帮助。
附录
#include<stdio.h>
#include<string.h>
#include<windows.h>
typedef struct Man{
char Name[12];
char Sex[4];
char Old[4];
char Mobil[12];
char Tel[12];
char Address[16];
char QQ[12];
char Email[16];
char Sort[12];
}man;
void TianJia( FILE *fp);
void XiuGai( FILE *fp);
void ShanChu( FILE *fp);
void ChaXun( FILE *fp);
void XianShi( FILE *fp);
int jishu(char *p);
int main()
{
system("color 51");
char b,c;
FILE *fp;
do{
printf("\t\t☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★\n");
printf("\t\t★ 通 讯 录 ☆\n");
printf("\t\t☆ 1、添加信息 2、查询信息 ★\n");
printf("\t\t★ ☆\n");
printf("\t\t☆ 3、删除信息 4、修改信息 ★\n");
printf("\t\t★ ☆\n");
printf("\t\t☆ 5、显示信息 6、退出程序 ★\n");
printf("\t\t★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆\n");
printf("请选择您想要执行操作的代码: ");
scanf("%d",&c);
printf("\n");
switch ( c )
{
case 1:
fp = fopen("d:\\tongxunlu.txt","ab+");
TianJia( fp);
break;
case 2:
fp = fopen("d:\\tongxunlu.txt","rb");
ChaXun( fp);
break;
case 3:
fp = fopen("d:\\tongxunlu.txt","rb+");
ShanChu( fp);
break;
case 4:
fp = fopen("d:\\tongxunlu.txt","rb+");
XiuGai( fp);
break;
case 5:
fp = fopen("d:\\tongxunlu.txt","rb");
XianShi( fp);
break;
case 6:
printf("谢谢使用!\n");
exit(0);
default:
printf("输入有误,请重新输入!\n");
break;
}
fflush( stdin);
fclose(fp);
printf("请输入y继续其他功能\n");
scanf("%c",&b);
if(b == 'y')
{ system("cls");
}
}while(c != 6);
return 0;
}
void TianJia( FILE *fp)
{ man a1;
printf("请输入您要添加的人员信息\n");
rewind( fp);
printf("\n");
printf("姓名:");
scanf("%s",&a1.Name);
fflush(stdin);
printf("\n");
printf("性别:");
scanf("%s",&a1.Sex);
fflush(stdin);
printf("\n");
printf("年龄:");
scanf("%s",&a1.Old);
fflush(stdin);
printf("\n");
printf("移动电话:");
scanf("%s",&a1.Mobil);
fflush(stdin);
printf("\n");
printf("固定电话:");
scanf("%s",&a1.Tel);
fflush(stdin);
printf("\n");
printf("住址:");
scanf("%s",&a1.Address);
fflush(stdin);
printf("\n");
printf("QQ:");
scanf("%s",&a1.QQ);
fflush(stdin);
printf("\n");
printf("Email:");
scanf("%s",a1.Email);
fflush(stdin);
printf("\n");
printf("类别:");
scanf("%s",a1.Sort);
fflush(stdin);
fp = fopen("d:\\tongxunlu.txt","a+");
fwrite(&a1,sizeof( a1),1,fp);
fclose( fp);
}
void ChaXun( FILE *fp)
{ man a2;
char name1[12];
printf("请输入你要查找的人员姓名:");
scanf("%s",name1);
fflush( stdin);
rewind(fp);
while( fread( &a2, sizeof( a2), 1, fp) != NULL)
{
if( strcmp( name1, a2.Name) == 0)
{
printf("您所查询的人员信息如下:\n");
printf("姓名:%s\n\n性别:%s\n\n年龄:%s\n\n住址:%s\n\n移动电话:%s\n\n固定电话:%s\n\nQQ:%s\n\nEmail:%s\n\n类别:%s\n",
a2.Name, a2.Sex, a2.Old, a2.Address, a2.Mobil,a2.Tel, a2.QQ, a2.Email, a2.Sort);
}
else
{
printf("您要查询的人员资料不存在!\n");
}
}
fclose( fp);
return;
}
void XiuGai( FILE *fp)
{
man a3;
man one;
int count1 = 0;
char name2[12];
printf("请输入您要修改的人员姓名:");
scanf("%s", &name2);
fflush( stdin);
while( !feof( fp))
{
fread( &a3,sizeof( a3), 1, fp);
count1++;
if( strcmp( name2,a3.Name) ==0)
{
printf("姓名:%s\n性别:%s\n年龄:%s\n住址:%s\n移动电话:%s\n固定电话:%s\nQQ:%s\nEmail:%s\n类别:%s\n",
a3.Name, a3.Sex, a3.Old, a3.Address, a3.Mobil, a3.Tel, a3.QQ, a3.Email, a3.Sort);
printf("请输入您要修改的资料.\n");
printf("\n");
printf("姓名:");
scanf("%s",&one.Name);
fflush(stdin);
printf("\n");
printf("性别:");
scanf("%s",&one.Sex);
fflush(stdin);
printf("\n");
printf("年龄:");
scanf("%s",&one.Old);
fflush(stdin);
printf("\n");
printf("移动电话:");
scanf("%s",&one.Mobil);
fflush(stdin);
printf("\n");
printf("固定电话:");
scanf("%s",&one.Tel);
fflush(stdin);
printf("\n");
printf("住址:");
scanf("%s",&one.Address);
fflush(stdin);
printf("\n");
printf("QQ:");
scanf("%s",&one.QQ);
fflush(stdin);
printf("\n");
printf("Email:");
scanf("%s",&one.Email);
fflush(stdin);
printf("\n");
printf("类别:");
scanf("%s",&one.Sort);
fflush(stdin);
fseek(fp,(count1 - 1)*sizeof( a3),SEEK_SET);
fwrite(&one,sizeof( one),1,fp);
printf("修改成功!\n");
return;
}
Else
{
printf("您要修改的人员不存在!\n");
return;
}
}
fclose( fp);
return;
}
void ShanChu( FILE *fp)
{
man a4;
man blank = {0};
char name3[12];
int count = 0;
rewind(fp);
printf("请输入您要删除的人员姓名:");
scanf("%s",&name3);
fflush( stdin);
while( !feof( fp))
{
fread( &a4,sizeof( a4), 1, fp);
count++;
if( strcmp( name3,a4.Name) ==0)
{
printf("姓名:%s\n性别:%s\n年龄:%s\n住址:%s\n移动电话:%s\n固定电话:%s\nQQ:%s\nEmail:%s\n类别:%s\n",
a4.Name, a4.Sex, a4.Old, a4.Address, a4.Mobil, a4.Tel, a4.QQ, a4.Email, a4.Sort);
fseek( fp,( count - 1) * sizeof( a4), SEEK_SET);
fwrite( &blank, sizeof( blank), 1, fp);
printf("删除成功!");
fclose( fp);
return;
}
else
{
printf("您要删除的人员不存在!\n");
return;
}
fclose( fp);
return;
}
}
void XianShi( FILE *fp)
{
char m = 0, n;
man a5;
while( !feof( fp))
{
fread( &a5,sizeof( a5), 1, fp);
m++;
}
for( n = 0; n < m -1; n++ )
{
fread( &a5, sizeof( a5), 1, fp);
printf("您所需要的资料如下:\n");
printf("姓名:%s\n性别:%s\n年龄:%s\n住址:%s\n移动电话:%s\n固定电话:%s\nQQ:%s\nEmail:%s\n类别:%s\n",
a5.Name, a5.Sex, a5.Old, a5.Address, a5.Mobil, a5.Tel, a5.QQ, a5.Email, a5.Sort);
}
fclose( fp);
}