- /*
- 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 ;
- }
- }
复制代码
|
|