黑马程序员技术交流社区
标题:
C语言综合项目-通讯录
[打印本页]
作者:
堕落天使
时间:
2016-3-20 14:48
标题:
C语言综合项目-通讯录
/*
C语言综合应用:实现通讯录。
*/
#include <stdio.h>
#include <string.h>
#define NAMELEN 22
#define TELLEN 12
#define LEN 100 //通讯录长度
//匿名通讯录结构体
typedef struct{
char name[NAMELEN];
char telNum[TELLEN];
}Person;
Person addressBook[LEN];
int totalCount = 0; //通讯录内元素个数。
char *p = "addressBook.data";
/**
* 主函数
*/
int main(int argc, const char * argv[]) {
//函数的声明。
void init();
int judgeInput(int n,int min,int max);
void doList();
void doAdd();
void doUpdata();
void doDelete();
void doChang();
void doSearch();
printf("欢迎使用通讯录!\n");
//通讯录初始化。
init();
while (1) {
printf("\n");
printf("*********************************\n");
printf("******欢迎使用通讯录 ***************\n");
printf("*******1、添加联系人 ***************\n");
printf("*******2、删除联系人 ***************\n");
printf("*******3、修改联系人 ***************\n");
printf("*******4、查看所有联系人 ************\n");
printf("*******5、搜索联系人 ****************\n");
printf("*******6、退出系统 *****************\n");
printf("*********************************\n");
printf("请选择1~6之间的一个操作:\n");
int fno = 0;
scanf("%d",&fno);
//判断输入是否合法。
judgeInput(fno, 1, 6);
switch (fno) {
case 1:
printf("您选择的是添加联系人!\n");
doAdd();
break;
case 2:
printf("您选择的是删除联系人\n");
doDelete();
break;
case 3:
printf("您选择的是修改联系人\n");
doChang();
break;
case 4:
printf("您选择的是查看所有联系人\n");
doList();
break;
case 5:
printf("您选择的是搜索联系人\n");
doSearch();
break;
case 6:
printf("您选择的退出系统!\n");
printf("系统正在退出······\n");
printf("系统已经退出!\n");
return 0;
break;
default:
break;
}
}
return 0;
}
/**
通讯录初始化
1、尝试读取文件,如果存在,把文件内容读取到数组中。(r的方式打开)
2、如果文件不存在,创建文件,并把数组的个数存到文件中。(wb方式打开)
*/
void init(){
FILE *fp = fopen(p, "r");
if (fp != NULL) {
fread(&totalCount, sizeof(totalCount), 1, fp);
for (int i = 0; i<totalCount; i++) {
fread(&addressBook[i], sizeof(Person), 1, fp);
}
} else {
FILE *fp = fopen(p, "wb");
fwrite(&totalCount, sizeof(totalCount), 1, fp);
}
fclose(fp);
printf("通讯录初始化完成!\n");
}
/**
* 判断输入是否有误
*
* @param n 输入的数值
* @param min 最小值
* @param max 最大值
*
* @return <#return value description#>
*/
int judgeInput(int n,int min,int max){
if (n>max || n<min) {
printf("您输入的结果有误!\n");
return 0 ;
} else {
return 1;
}
}
/**
* 显示所有联系人
*/
void doList(){
if (totalCount == 0) {
printf("您的通讯录里还没有小伙伴,请添加联系人!\n");
}else{
printf("显示联系人:\n");
printf("编号:\t 姓名:\t 电话:\t \n");
for (int i = 0; i<totalCount; i++) {
printf("%d\t %s\t %s\t\n",i+1,addressBook[i].name,addressBook[i].telNum);
}
}
}
/**
* 添加联系人
*/
void doAdd(){
void doUpdata();
printf("请输入联系人姓名:(*中间不能有空格)\n");
scanf("%s",addressBook[totalCount].name);
printf("请输入联系人电话:(*中间不能有空格)\n");
scanf("%s",addressBook[totalCount].telNum);
printf("您确定要添加吗? 1、确定 2、取消\n");
int flag;
scanf("%d",&flag);
if (flag) {
totalCount++;
doUpdata();
}
}
/**
* 更新文件
*/
void doUpdata(){
FILE *fp = fopen(p, "wb");
if (fp != NULL) {
fwrite(&totalCount, sizeof(totalCount), 1, fp);
for (int i = 0; i<totalCount; i++) {
fwrite(&addressBook[i], sizeof(Person), 1, fp);
}
printf("写入文件更新成功!\n");
}
fclose(fp);
}
void doDelete(){
int fno;
doList();
printf("请选择要删除的联系人编号!\n");
scanf("%d",&fno);
judgeInput(fno, 1, totalCount);
if (fno == totalCount) {
totalCount--;
} else {
addressBook[fno-1] = addressBook[fno];
totalCount--;
}
doUpdata();
}
/**
* 修改联系人
*/
void doChang(){
char name[NAMELEN];
char tel[TELLEN];
int fno;
int flag;
doList();
printf("请输入要修改的联系人编号!\n");
scanf("%d",&fno);
judgeInput(fno, 1, totalCount);
printf("请输入新的联系人姓名。(中间不能有空格!)\n");
scanf("%s",name);
printf("请输入新的电话号码。(中间不能有空格!)\n");
scanf("%s",tel);
printf("确认要修改吗? 1、确认 2、取消\n");
scanf("%d",&flag);
if (flag) {
strcpy(addressBook[fno-1].name, name);
strcpy(addressBook[fno-1].telNum, tel);
doUpdata();
printf("联系人修改成功!\n");
}
}
/**
* 搜索联系人
*/
void doSearch(){
char name[NAMELEN];
printf("请输入要查找的联系人的姓名。(中间不能有空格!)\n");
scanf("%s",name);
int i = 0;
for ( i = 0; i<totalCount; i++) {
if (strcmp(addressBook[i].name, name) == 0) {
printf("您查找的联系人 %s的电话是 %s",name,addressBook[i].telNum);
break;
}
}
if (i == totalCount) {
printf("对不起,查无此人!\n");
return ;
}
}
复制代码
作者:
jacku
时间:
2016-3-20 23:58
厉害,这么多都写完了
作者:
堕落天使
时间:
2016-3-21 10:47
jacku 发表于 2016-3-20 23:58
厉害,这么多都写完了
也是不一次就写成功的,中间也出了不少错误,不对的再检查,不会的再看视频,一步步的来,总算是弄完了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2